Added a sleep timer
This commit is contained in:
parent
b5f160dd89
commit
4d82b91465
25 changed files with 350 additions and 47 deletions
|
|
@ -82,6 +82,7 @@ dependencies {
|
|||
compile 'com.github.ksoichiro:android-observablescrollview:1.5.1'
|
||||
compile 'asia.ivity.android:drag-sort-listview:1.0'
|
||||
compile 'de.hdodenhof:circleimageview:1.3.0'
|
||||
compile "com.github.semoncat.seekarc:library:0.1"
|
||||
|
||||
compile 'com.squareup.retrofit:retrofit:1.9.0'
|
||||
compile 'com.squareup.okhttp:okhttp:2.4.0'
|
||||
|
|
|
|||
|
|
@ -0,0 +1,175 @@
|
|||
package com.kabouzeid.gramophone.dialogs;
|
||||
|
||||
import android.app.AlarmManager;
|
||||
import android.app.Dialog;
|
||||
import android.app.PendingIntent;
|
||||
import android.content.Context;
|
||||
import android.content.DialogInterface;
|
||||
import android.content.Intent;
|
||||
import android.os.Bundle;
|
||||
import android.os.CountDownTimer;
|
||||
import android.os.SystemClock;
|
||||
import android.support.annotation.NonNull;
|
||||
import android.support.v4.app.DialogFragment;
|
||||
import android.widget.FrameLayout;
|
||||
import android.widget.TextView;
|
||||
import android.widget.Toast;
|
||||
|
||||
import com.afollestad.materialdialogs.DialogAction;
|
||||
import com.afollestad.materialdialogs.MaterialDialog;
|
||||
import com.kabouzeid.gramophone.R;
|
||||
import com.kabouzeid.gramophone.service.MusicService;
|
||||
import com.kabouzeid.gramophone.util.MusicUtil;
|
||||
import com.kabouzeid.gramophone.util.PreferenceUtils;
|
||||
import com.triggertrap.seekarc.SeekArc;
|
||||
|
||||
import butterknife.ButterKnife;
|
||||
import butterknife.InjectView;
|
||||
|
||||
/**
|
||||
* @author Karim Abou Zeid (kabouzeid)
|
||||
*/
|
||||
public class SleepTimerDialog extends DialogFragment {
|
||||
@InjectView(R.id.seek_arc)
|
||||
SeekArc seekArc;
|
||||
@InjectView(R.id.timer_display)
|
||||
TextView timerDisplay;
|
||||
|
||||
private int seekArcProgress;
|
||||
private MaterialDialog materialDialog;
|
||||
private TimerUpdater timerUpdater;
|
||||
|
||||
@Override
|
||||
public void onDismiss(DialogInterface dialog) {
|
||||
super.onDismiss(dialog);
|
||||
timerUpdater.cancel();
|
||||
}
|
||||
|
||||
@NonNull
|
||||
@Override
|
||||
public Dialog onCreateDialog(Bundle savedInstanceState) {
|
||||
timerUpdater = new TimerUpdater();
|
||||
materialDialog = new MaterialDialog.Builder(getActivity())
|
||||
.title(getActivity().getResources().getString(R.string.action_sleep_timer))
|
||||
.positiveText(R.string.action_set)
|
||||
.callback(new MaterialDialog.ButtonCallback() {
|
||||
@Override
|
||||
public void onPositive(MaterialDialog dialog) {
|
||||
if (getActivity() == null) {
|
||||
return;
|
||||
}
|
||||
final int min = seekArcProgress;
|
||||
PreferenceUtils.getInstance(getActivity()).setLastSleepTimerValue(min);
|
||||
|
||||
PendingIntent pi = makeTimerPendingIntent(PendingIntent.FLAG_CANCEL_CURRENT);
|
||||
|
||||
final long nextSleepTimerElapsedTime = SystemClock.elapsedRealtime() + min * 60 * 1000;
|
||||
PreferenceUtils.getInstance(getActivity()).setNextSleepTimerElapsedRealtime(nextSleepTimerElapsedTime);
|
||||
AlarmManager am = (AlarmManager) getActivity().getSystemService(Context.ALARM_SERVICE);
|
||||
am.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, nextSleepTimerElapsedTime, pi);
|
||||
|
||||
Toast.makeText(getActivity(), getActivity().getResources().getString(R.string.sleep_timer_set, min), Toast.LENGTH_SHORT).show();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onNeutral(MaterialDialog dialog) {
|
||||
if (getActivity() == null) {
|
||||
return;
|
||||
}
|
||||
final PendingIntent previous = makeTimerPendingIntent(PendingIntent.FLAG_NO_CREATE);
|
||||
if (previous != null) {
|
||||
AlarmManager am = (AlarmManager) getActivity().getSystemService(Context.ALARM_SERVICE);
|
||||
am.cancel(previous);
|
||||
previous.cancel();
|
||||
Toast.makeText(getActivity(), getActivity().getResources().getString(R.string.sleep_timer_canceled), Toast.LENGTH_SHORT).show();
|
||||
}
|
||||
}
|
||||
})
|
||||
.showListener(new DialogInterface.OnShowListener() {
|
||||
@Override
|
||||
public void onShow(DialogInterface dialog) {
|
||||
if (makeTimerPendingIntent(PendingIntent.FLAG_NO_CREATE) != null) {
|
||||
timerUpdater.start();
|
||||
}
|
||||
}
|
||||
})
|
||||
.customView(R.layout.dialog_sleep_timer, false)
|
||||
.build();
|
||||
|
||||
if (getActivity() == null || materialDialog.getCustomView() == null) {
|
||||
return materialDialog;
|
||||
}
|
||||
|
||||
ButterKnife.inject(this, materialDialog.getCustomView());
|
||||
|
||||
seekArc.post(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
int width = seekArc.getWidth();
|
||||
int height = seekArc.getHeight();
|
||||
int small = Math.min(width, height);
|
||||
|
||||
FrameLayout.LayoutParams layoutParams = new FrameLayout.LayoutParams(seekArc.getLayoutParams());
|
||||
layoutParams.height = small;
|
||||
seekArc.setLayoutParams(layoutParams);
|
||||
}
|
||||
});
|
||||
|
||||
seekArcProgress = PreferenceUtils.getInstance(getActivity()).getLastSleepTimerValue();
|
||||
updateTimeDisplayTime();
|
||||
seekArc.setProgress(seekArcProgress);
|
||||
|
||||
seekArc.setOnSeekArcChangeListener(new SeekArc.OnSeekArcChangeListener() {
|
||||
@Override
|
||||
public void onProgressChanged(SeekArc seekArc, int i, boolean b) {
|
||||
if (i < 1) {
|
||||
seekArc.setProgress(1);
|
||||
return;
|
||||
}
|
||||
seekArcProgress = i;
|
||||
updateTimeDisplayTime();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onStartTrackingTouch(SeekArc seekArc) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onStopTrackingTouch(SeekArc seekArc) {
|
||||
|
||||
}
|
||||
});
|
||||
|
||||
return materialDialog;
|
||||
}
|
||||
|
||||
private void updateTimeDisplayTime() {
|
||||
timerDisplay.setText(seekArcProgress + " min");
|
||||
}
|
||||
|
||||
private PendingIntent makeTimerPendingIntent(int flag) {
|
||||
return PendingIntent.getService(getActivity(), 0, makeTimerIntent(), flag);
|
||||
}
|
||||
|
||||
private Intent makeTimerIntent() {
|
||||
return new Intent(getActivity(), MusicService.class)
|
||||
.setAction(MusicService.ACTION_QUIT);
|
||||
}
|
||||
|
||||
private class TimerUpdater extends CountDownTimer {
|
||||
public TimerUpdater() {
|
||||
super(PreferenceUtils.getInstance(getActivity()).getNextSleepTimerElapsedRealTime() - SystemClock.elapsedRealtime(), 1000);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTick(long millisUntilFinished) {
|
||||
materialDialog.setActionButton(DialogAction.NEUTRAL, materialDialog.getContext().getString(R.string.cancel_current_timer) + " (" + MusicUtil.getReadableDurationString(millisUntilFinished) + ")");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onFinish() {
|
||||
materialDialog.setActionButton(DialogAction.NEUTRAL, null);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -20,7 +20,7 @@ public class LastAddedLoader {
|
|||
public static Cursor makeLastAddedCursor(final Context context) {
|
||||
long fourWeeksAgo = (System.currentTimeMillis() / 1000) - (4 * 3600 * 24 * 7);
|
||||
// possible saved timestamp caused by user "clearing" the last added playlist
|
||||
long cutoff = PreferenceUtils.getInstance(context).getLastAddedCutOff() / 1000;
|
||||
long cutoff = PreferenceUtils.getInstance(context).getLastAddedCutOffTimestamp() / 1000;
|
||||
if (cutoff < fourWeeksAgo) {
|
||||
cutoff = fourWeeksAgo;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -210,6 +210,9 @@ public class MultiPlayer implements MediaPlayer.OnErrorListener,
|
|||
* @return The duration in milliseconds
|
||||
*/
|
||||
public int duration() {
|
||||
if (!mIsInitialized) {
|
||||
return -1;
|
||||
}
|
||||
try {
|
||||
return mCurrentMediaPlayer.getDuration();
|
||||
} catch (IllegalStateException e) {
|
||||
|
|
@ -223,6 +226,9 @@ public class MultiPlayer implements MediaPlayer.OnErrorListener,
|
|||
* @return The current position in milliseconds
|
||||
*/
|
||||
public int position() {
|
||||
if (!mIsInitialized) {
|
||||
return -1;
|
||||
}
|
||||
try {
|
||||
return mCurrentMediaPlayer.getCurrentPosition();
|
||||
} catch (IllegalStateException e) {
|
||||
|
|
|
|||
|
|
@ -27,6 +27,7 @@ import com.github.ksoichiro.android.observablescrollview.ObservableRecyclerView;
|
|||
import com.kabouzeid.gramophone.App;
|
||||
import com.kabouzeid.gramophone.R;
|
||||
import com.kabouzeid.gramophone.adapter.songadapter.AlbumSongAdapter;
|
||||
import com.kabouzeid.gramophone.dialogs.SleepTimerDialog;
|
||||
import com.kabouzeid.gramophone.helper.MusicPlayerRemote;
|
||||
import com.kabouzeid.gramophone.helper.bitmapblur.StackBlurManager;
|
||||
import com.kabouzeid.gramophone.interfaces.CabHolder;
|
||||
|
|
@ -347,6 +348,9 @@ public class AlbumDetailActivity extends AbsFabActivity implements PaletteColorH
|
|||
public boolean onOptionsItemSelected(MenuItem item) {
|
||||
int id = item.getItemId();
|
||||
switch (id) {
|
||||
case R.id.action_sleep_timer:
|
||||
new SleepTimerDialog().show(getSupportFragmentManager(), "SET_SLEEP_TIMER");
|
||||
return true;
|
||||
case R.id.action_equalizer:
|
||||
NavigationUtil.openEqualizer(this);
|
||||
return true;
|
||||
|
|
|
|||
|
|
@ -33,6 +33,7 @@ import com.kabouzeid.gramophone.App;
|
|||
import com.kabouzeid.gramophone.R;
|
||||
import com.kabouzeid.gramophone.adapter.ArtistAlbumAdapter;
|
||||
import com.kabouzeid.gramophone.adapter.songadapter.ArtistSongAdapter;
|
||||
import com.kabouzeid.gramophone.dialogs.SleepTimerDialog;
|
||||
import com.kabouzeid.gramophone.helper.MusicPlayerRemote;
|
||||
import com.kabouzeid.gramophone.helper.bitmapblur.StackBlurManager;
|
||||
import com.kabouzeid.gramophone.interfaces.CabHolder;
|
||||
|
|
@ -449,6 +450,9 @@ public class ArtistDetailActivity extends AbsFabActivity implements PaletteColor
|
|||
public boolean onOptionsItemSelected(MenuItem item) {
|
||||
int id = item.getItemId();
|
||||
switch (id) {
|
||||
case R.id.action_sleep_timer:
|
||||
new SleepTimerDialog().show(getSupportFragmentManager(), "SET_SLEEP_TIMER");
|
||||
return true;
|
||||
case R.id.action_equalizer:
|
||||
NavigationUtil.openEqualizer(this);
|
||||
return true;
|
||||
|
|
|
|||
|
|
@ -37,6 +37,7 @@ import com.kabouzeid.gramophone.R;
|
|||
import com.kabouzeid.gramophone.adapter.PagerAdapter;
|
||||
import com.kabouzeid.gramophone.dialogs.AboutDialog;
|
||||
import com.kabouzeid.gramophone.dialogs.CreatePlaylistDialog;
|
||||
import com.kabouzeid.gramophone.dialogs.SleepTimerDialog;
|
||||
import com.kabouzeid.gramophone.helper.MusicPlayerRemote;
|
||||
import com.kabouzeid.gramophone.helper.SearchQueryHelper;
|
||||
import com.kabouzeid.gramophone.interfaces.CabHolder;
|
||||
|
|
@ -338,6 +339,9 @@ public class MainActivity extends AbsFabActivity
|
|||
|
||||
int id = item.getItemId();
|
||||
switch (id) {
|
||||
case R.id.action_sleep_timer:
|
||||
new SleepTimerDialog().show(getSupportFragmentManager(), "SET_SLEEP_TIMER");
|
||||
return true;
|
||||
case R.id.action_equalizer:
|
||||
NavigationUtil.openEqualizer(this);
|
||||
return true;
|
||||
|
|
|
|||
|
|
@ -37,6 +37,7 @@ import com.afollestad.materialdialogs.ThemeSingleton;
|
|||
import com.afollestad.materialdialogs.util.DialogUtils;
|
||||
import com.kabouzeid.gramophone.R;
|
||||
import com.kabouzeid.gramophone.dialogs.AddToPlaylistDialog;
|
||||
import com.kabouzeid.gramophone.dialogs.SleepTimerDialog;
|
||||
import com.kabouzeid.gramophone.dialogs.SongDetailDialog;
|
||||
import com.kabouzeid.gramophone.dialogs.SongShareDialog;
|
||||
import com.kabouzeid.gramophone.helper.MusicPlayerRemote;
|
||||
|
|
@ -629,6 +630,9 @@ public class MusicControllerActivity extends AbsFabActivity {
|
|||
public boolean onOptionsItemSelected(MenuItem item) {
|
||||
int id = item.getItemId();
|
||||
switch (id) {
|
||||
case R.id.action_sleep_timer:
|
||||
new SleepTimerDialog().show(getSupportFragmentManager(), "SET_SLEEP_TIMER");
|
||||
return true;
|
||||
case R.id.action_toggle_favorite:
|
||||
MusicUtil.toggleFavorite(this, song);
|
||||
if (MusicUtil.isFavorite(this, song)) {
|
||||
|
|
|
|||
|
|
@ -14,6 +14,7 @@ import com.kabouzeid.gramophone.App;
|
|||
import com.kabouzeid.gramophone.R;
|
||||
import com.kabouzeid.gramophone.adapter.songadapter.AbsPlaylistSongAdapter;
|
||||
import com.kabouzeid.gramophone.adapter.songadapter.PlaylistSongAdapter;
|
||||
import com.kabouzeid.gramophone.dialogs.SleepTimerDialog;
|
||||
import com.kabouzeid.gramophone.helper.MusicPlayerRemote;
|
||||
import com.kabouzeid.gramophone.interfaces.CabHolder;
|
||||
import com.kabouzeid.gramophone.misc.DragSortRecycler;
|
||||
|
|
@ -124,6 +125,9 @@ public class PlaylistDetailActivity extends AbsFabActivity implements CabHolder
|
|||
public boolean onOptionsItemSelected(MenuItem item) {
|
||||
int id = item.getItemId();
|
||||
switch (id) {
|
||||
case R.id.action_sleep_timer:
|
||||
new SleepTimerDialog().show(getSupportFragmentManager(), "SET_SLEEP_TIMER");
|
||||
return true;
|
||||
case R.id.action_shuffle_playlist:
|
||||
//noinspection unchecked
|
||||
MusicPlayerRemote.openAndShuffleQueue(this, adapter.getDataSet(), true);
|
||||
|
|
|
|||
|
|
@ -44,6 +44,8 @@ public final class PreferenceUtils {
|
|||
public static final String GAPLESS_PLAYBACK = "gapless_playback";
|
||||
public static final String LAST_ADDED_CUTOFF_TIMESTAMP = "last_added_cutoff_timestamp";
|
||||
public static final String ALBUM_ART_ON_LOCKSCREEN = "album_art_on_lockscreen";
|
||||
public static final String LAST_SLEEP_TIMER_VALUE = "last_sleep_timer_value";
|
||||
public static final String NEXT_SLEEP_TIMER_ELAPSED_REALTIME = "next_sleep_timer_elapsed_real_time";
|
||||
|
||||
private static PreferenceUtils sInstance;
|
||||
|
||||
|
|
@ -285,7 +287,7 @@ public final class PreferenceUtils {
|
|||
return mPreferences.getInt(ALBUM_GRID_COLUMNS_LAND, 3);
|
||||
}
|
||||
|
||||
public long getLastAddedCutOff() {
|
||||
public long getLastAddedCutOffTimestamp() {
|
||||
return mPreferences.getLong(LAST_ADDED_CUTOFF_TIMESTAMP, 0L);
|
||||
}
|
||||
|
||||
|
|
@ -295,4 +297,24 @@ public final class PreferenceUtils {
|
|||
editor.putLong(LAST_ADDED_CUTOFF_TIMESTAMP, timestamp);
|
||||
editor.commit();
|
||||
}
|
||||
|
||||
public int getLastSleepTimerValue() {
|
||||
return mPreferences.getInt(LAST_SLEEP_TIMER_VALUE, 30);
|
||||
}
|
||||
|
||||
public void setLastSleepTimerValue(final int value) {
|
||||
final SharedPreferences.Editor editor = mPreferences.edit();
|
||||
editor.putInt(LAST_SLEEP_TIMER_VALUE, value);
|
||||
editor.apply();
|
||||
}
|
||||
|
||||
public long getNextSleepTimerElapsedRealTime() {
|
||||
return mPreferences.getLong(NEXT_SLEEP_TIMER_ELAPSED_REALTIME, -1);
|
||||
}
|
||||
|
||||
public void setNextSleepTimerElapsedRealtime(final long value) {
|
||||
final SharedPreferences.Editor editor = mPreferences.edit();
|
||||
editor.putLong(NEXT_SLEEP_TIMER_ELAPSED_REALTIME, value);
|
||||
editor.apply();
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Binary file not shown.
|
Before Width: | Height: | Size: 121 KiB |
BIN
app/src/main/res/drawable-xxxhdpi/default_album_art.png
Normal file
BIN
app/src/main/res/drawable-xxxhdpi/default_album_art.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 106 KiB |
|
|
@ -0,0 +1,8 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<shape xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:shape="oval">
|
||||
<size
|
||||
android:height="16dp"
|
||||
android:width="16dp" />
|
||||
<solid android:color="@color/white" />
|
||||
</shape>
|
||||
29
app/src/main/res/layout/dialog_sleep_timer.xml
Normal file
29
app/src/main/res/layout/dialog_sleep_timer.xml
Normal file
|
|
@ -0,0 +1,29 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:seekarc="http://schemas.android.com/apk/res-auto"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content">
|
||||
|
||||
<com.triggertrap.seekarc.SeekArc
|
||||
android:id="@+id/seek_arc"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center"
|
||||
android:padding="30dp"
|
||||
seekarc:clockwise="false"
|
||||
seekarc:max="120"
|
||||
seekarc:progressColor="?colorAccent"
|
||||
seekarc:rotation="180"
|
||||
seekarc:startAngle="30"
|
||||
seekarc:sweepAngle="300"
|
||||
seekarc:thumb="?seek_arc_thumb_drawable" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/timer_display"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center"
|
||||
android:textAppearance="?android:textAppearanceLarge" />
|
||||
|
||||
</FrameLayout>
|
||||
|
||||
|
|
@ -7,7 +7,7 @@
|
|||
android:id="@+id/action_now_playing"
|
||||
android:icon="@drawable/ic_play_circle_fill_white_24dp"
|
||||
android:title="@string/action_now_playing"
|
||||
app:showAsAction="ifRoom"/>
|
||||
app:showAsAction="ifRoom" />
|
||||
|
||||
<item
|
||||
android:id="@+id/action_playing_queue"
|
||||
|
|
@ -18,22 +18,27 @@
|
|||
<item
|
||||
android:id="@+id/action_shuffle_album"
|
||||
android:title="@string/action_shuffle_album"
|
||||
app:showAsAction="never"/>
|
||||
app:showAsAction="never" />
|
||||
|
||||
<item
|
||||
android:id="@+id/action_go_to_artist"
|
||||
android:title="@string/action_go_to_artist"
|
||||
app:showAsAction="never"/>
|
||||
app:showAsAction="never" />
|
||||
|
||||
<item
|
||||
android:id="@+id/action_tag_editor"
|
||||
android:title="@string/action_tag_editor"
|
||||
app:showAsAction="never"/>
|
||||
app:showAsAction="never" />
|
||||
|
||||
<item
|
||||
android:id="@+id/action_sleep_timer"
|
||||
android:title="@string/action_sleep_timer"
|
||||
app:showAsAction="never" />
|
||||
|
||||
<item
|
||||
android:id="@+id/action_equalizer"
|
||||
android:orderInCategory="99"
|
||||
android:title="@string/equalizer"
|
||||
app:showAsAction="never"/>
|
||||
app:showAsAction="never" />
|
||||
|
||||
</menu>
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<menu xmlns:tools="http://schemas.android.com/tools"
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto">
|
||||
<menu xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
tools:context=".DrawerActivity">
|
||||
|
||||
<item
|
||||
android:id="@+id/action_now_playing"
|
||||
|
|
@ -15,14 +15,19 @@
|
|||
android:title="@string/action_search"
|
||||
app:showAsAction="ifRoom" />
|
||||
|
||||
<item
|
||||
android:id="@+id/action_playing_queue"
|
||||
android:title="@string/action_playing_queue"
|
||||
app:showAsAction="never" />
|
||||
|
||||
<item
|
||||
android:id="@+id/action_shuffle_all"
|
||||
android:title="@string/action_shuffle_all"
|
||||
app:showAsAction="never" />
|
||||
|
||||
<item
|
||||
android:id="@+id/action_playing_queue"
|
||||
android:title="@string/action_playing_queue"
|
||||
android:id="@+id/action_sleep_timer"
|
||||
android:title="@string/action_sleep_timer"
|
||||
app:showAsAction="never" />
|
||||
|
||||
<item
|
||||
|
|
|
|||
|
|
@ -30,6 +30,11 @@
|
|||
android:title="@string/action_re_download_artist_image"
|
||||
app:showAsAction="never"/>
|
||||
|
||||
<item
|
||||
android:id="@+id/action_sleep_timer"
|
||||
android:title="@string/action_sleep_timer"
|
||||
app:showAsAction="never" />
|
||||
|
||||
<item
|
||||
android:id="@+id/action_equalizer"
|
||||
android:orderInCategory="99"
|
||||
|
|
|
|||
|
|
@ -7,29 +7,33 @@
|
|||
android:id="@+id/action_now_playing"
|
||||
android:icon="@drawable/ic_play_circle_fill_white_24dp"
|
||||
android:title="@string/action_now_playing"
|
||||
app:showAsAction="always"/>
|
||||
app:showAsAction="always" />
|
||||
|
||||
<item
|
||||
android:id="@+id/action_search"
|
||||
android:icon="@drawable/abc_ic_search_api_mtrl_alpha"
|
||||
android:title="@string/action_search"
|
||||
app:showAsAction="ifRoom"/>
|
||||
app:showAsAction="ifRoom" />
|
||||
|
||||
<item
|
||||
android:id="@+id/action_playing_queue"
|
||||
android:title="@string/action_playing_queue"
|
||||
app:showAsAction="never" />
|
||||
|
||||
<item
|
||||
android:id="@+id/action_shuffle_all"
|
||||
android:title="@string/action_shuffle_all"
|
||||
app:showAsAction="never"/>
|
||||
app:showAsAction="never" />
|
||||
|
||||
<item
|
||||
android:id="@+id/action_playing_queue"
|
||||
android:icon="@drawable/ic_queue_music_white_24dp"
|
||||
android:title="@string/action_playing_queue"
|
||||
app:showAsAction="never"/>
|
||||
android:id="@+id/action_sleep_timer"
|
||||
android:title="@string/action_sleep_timer"
|
||||
app:showAsAction="never" />
|
||||
|
||||
<item
|
||||
android:id="@+id/action_equalizer"
|
||||
android:orderInCategory="99"
|
||||
android:title="@string/equalizer"
|
||||
app:showAsAction="never"/>
|
||||
app:showAsAction="never" />
|
||||
|
||||
</menu>
|
||||
|
|
|
|||
|
|
@ -3,16 +3,16 @@
|
|||
xmlns:tools="http://schemas.android.com/tools"
|
||||
tools:context="com.kabouzeid.gramophone.ui.activities.MusicControllerActivity">
|
||||
|
||||
<item
|
||||
android:id="@+id/action_playing_queue"
|
||||
android:icon="@drawable/ic_queue_music_white_24dp"
|
||||
android:title="@string/action_playing_queue"
|
||||
app:showAsAction="ifRoom" />
|
||||
<item
|
||||
android:id="@+id/action_toggle_favorite"
|
||||
android:icon="@drawable/ic_favorite_outline_white_24dp"
|
||||
android:title="@string/action_add_to_favorites"
|
||||
app:showAsAction="ifRoom" />
|
||||
<item
|
||||
android:id="@+id/action_playing_queue"
|
||||
android:icon="@drawable/ic_queue_music_white_24dp"
|
||||
android:title="@string/action_playing_queue"
|
||||
app:showAsAction="ifRoom" />
|
||||
<item
|
||||
android:id="@+id/action_shuffle_all"
|
||||
android:title="@string/action_shuffle_all"
|
||||
|
|
@ -33,17 +33,21 @@
|
|||
android:id="@+id/action_share"
|
||||
android:title="@string/action_share"
|
||||
app:showAsAction="never" />
|
||||
<item
|
||||
android:id="@+id/action_sleep_timer"
|
||||
android:title="@string/action_sleep_timer"
|
||||
app:showAsAction="never" />
|
||||
<item
|
||||
android:id="@+id/action_tag_editor"
|
||||
android:title="@string/action_tag_editor"
|
||||
app:showAsAction="never" />
|
||||
<item
|
||||
android:id="@+id/action_details"
|
||||
android:title="@string/action_details"
|
||||
app:showAsAction="never" />
|
||||
<item
|
||||
android:id="@+id/action_equalizer"
|
||||
android:orderInCategory="99"
|
||||
android:title="@string/equalizer"
|
||||
app:showAsAction="never" />
|
||||
<item
|
||||
android:id="@+id/action_details"
|
||||
android:title="@string/action_details"
|
||||
app:showAsAction="never" />
|
||||
</menu>
|
||||
|
|
|
|||
|
|
@ -20,6 +20,11 @@
|
|||
android:title="@string/action_shuffle_playlist"
|
||||
app:showAsAction="never" />
|
||||
|
||||
<item
|
||||
android:id="@+id/action_sleep_timer"
|
||||
android:title="@string/action_sleep_timer"
|
||||
app:showAsAction="never" />
|
||||
|
||||
<item
|
||||
android:id="@+id/action_equalizer"
|
||||
android:orderInCategory="99"
|
||||
|
|
|
|||
|
|
@ -18,14 +18,19 @@
|
|||
android:title="@string/new_playlist_action"
|
||||
app:showAsAction="never" />
|
||||
|
||||
<item
|
||||
android:id="@+id/action_playing_queue"
|
||||
android:title="@string/action_playing_queue"
|
||||
app:showAsAction="never" />
|
||||
|
||||
<item
|
||||
android:id="@+id/action_shuffle_all"
|
||||
android:title="@string/action_shuffle_all"
|
||||
app:showAsAction="never" />
|
||||
|
||||
<item
|
||||
android:id="@+id/action_playing_queue"
|
||||
android:title="@string/action_playing_queue"
|
||||
android:id="@+id/action_sleep_timer"
|
||||
android:title="@string/action_sleep_timer"
|
||||
app:showAsAction="never" />
|
||||
|
||||
<item
|
||||
|
|
|
|||
|
|
@ -19,4 +19,6 @@
|
|||
|
||||
<attr name="toolbarPopupTheme" format="reference" />
|
||||
|
||||
<attr name="seek_arc_thumb_drawable" format="reference" />
|
||||
|
||||
</resources>
|
||||
|
|
@ -4,7 +4,7 @@
|
|||
<string name="currently_listening_to_x_by_x">Currently listening to %1$s by %2$s</string>
|
||||
<string name="the_audio_file">The Audio File</string>
|
||||
<string name="do_you_want_to_set_x_as_ringtone">Do you want to set %1$s as your ringtone?</string>
|
||||
<string name="x_has_been_set_as_ringtone">%1$s has been set as your ringtone.</string>
|
||||
<string name="x_has_been_set_as_ringtone">%1$s has been set as your ringtone</string>
|
||||
<string name="action_set_as_ringtone">Set as Ringtone</string>
|
||||
<string name="action_share">Share</string>
|
||||
<string name="action_settings">"Settings"</string>
|
||||
|
|
@ -28,8 +28,8 @@
|
|||
<string name="songs">Songs</string>
|
||||
<string name="playlists">Playlists</string>
|
||||
<string name="nothing_playing">Nothing is playing</string>
|
||||
<string name="unplayable_file">An error occurred while attempting to play this song.</string>
|
||||
<string name="biography_unavailable">We were not able to find a matching biography for this artist.</string>
|
||||
<string name="unplayable_file">An error occurred while attempting to play this song</string>
|
||||
<string name="biography_unavailable">Could not find a matching biography for this artist</string>
|
||||
<string name="biography">Biography</string>
|
||||
<string name="audio_focus_denied">No audio focus.</string>
|
||||
<string name="tag_editor">Tag Editor</string>
|
||||
|
|
@ -40,7 +40,7 @@
|
|||
<string name="year">Year</string>
|
||||
<string name="track">Track</string>
|
||||
<string name="track_hint">"Track (2 for track 2 or 3004 for CD3 track 4)"</string>
|
||||
<string name="album_or_artist_empty">The album title or the album artist text field is empty.</string>
|
||||
<string name="album_or_artist_empty">The album title or the album artist text field is empty</string>
|
||||
<string name="writing_file_number">Writing file</string>
|
||||
<string name="saving_changes">Saving changes…</string>
|
||||
<string name="label_details">Details</string>
|
||||
|
|
@ -62,13 +62,13 @@
|
|||
<string name="updated_artist_image">Updated artist image.</string>
|
||||
<string name="could_not_update_artist_image">Could not update artist image.</string>
|
||||
<string name="updating">Updating…</string>
|
||||
<string name="added_title_to_playing_queue">"Added 1 title to the playing queue."</string>
|
||||
<string name="added_x_titles_to_playing_queue">Added %1$d titles to the playing queue.</string>
|
||||
<string name="added_title_to_playing_queue">"Added 1 title to the playing queue"</string>
|
||||
<string name="added_x_titles_to_playing_queue">Added %1$d titles to the playing queue</string>
|
||||
<string name="action_remove_from_playlist">Remove from playlist</string>
|
||||
<string name="new_playlist_action">New playlist…</string>
|
||||
<string name="action_grid_columns">Grid columns</string>
|
||||
<string name="action_grid_columns_land">Grid columns (Land)</string>
|
||||
<string name="inserted_x_songs_into_playlist">Inserted %1$d songs into this playlist.</string>
|
||||
<string name="inserted_x_songs_into_playlist">Inserted %1$d songs into this playlist</string>
|
||||
<string name="created_playlist_x">Created playlist %1$s</string>
|
||||
<string name="deleted_playlist_x">Deleted playlist %1$s</string>
|
||||
<string name="deleted_x_songs">Deleted %1$d songs</string>
|
||||
|
|
@ -90,7 +90,7 @@
|
|||
<string name="clear_playlist_title">Clear Playlist</string>
|
||||
<string name="add_playlist_title">"Add to Playlist"</string>
|
||||
<string name="new_playlist_title">New Playlist</string>
|
||||
<string name="delete_warning">"Warning: This operation can not be undone."</string>
|
||||
<string name="delete_warning">"Warning: This operation can not be undone"</string>
|
||||
<string name="action_shuffle_all">Shuffle All</string>
|
||||
<string name="action_shuffle_album">Shuffle Album</string>
|
||||
<string name="action_shuffle_artist">Shuffle Artist</string>
|
||||
|
|
@ -171,4 +171,9 @@
|
|||
<string name="download_from_last_fm">Download from Last.fm</string>
|
||||
<string name="pick_from_local_storage">Pick from Local Storage</string>
|
||||
<string name="web_search">Web Search</string>
|
||||
<string name="action_sleep_timer">Sleep timer</string>
|
||||
<string name="action_set">Set</string>
|
||||
<string name="cancel_current_timer">Cancel current timer</string>
|
||||
<string name="sleep_timer_canceled">Sleep timer has been canceled</string>
|
||||
<string name="sleep_timer_set">Sleep timer set for %d minutes from now</string>
|
||||
</resources>
|
||||
|
|
|
|||
|
|
@ -20,6 +20,7 @@
|
|||
<item name="round_selector">@drawable/round_selector_dark</item>
|
||||
<item name="rect_selector">@drawable/rect_selector_dark</item>
|
||||
<item name="separator_color">@color/materialmusic_dark_separator_color</item>
|
||||
<item name="seek_arc_thumb_drawable">@drawable/traditional_slider_thumb_dark</item>
|
||||
|
||||
<item name="themed_drawable_color">@color/materialmusic_dark_themed_drawable_color</item>
|
||||
<item name="check_mark_color">@color/grey_900</item>
|
||||
|
|
@ -52,6 +53,7 @@
|
|||
<item name="round_selector">@drawable/round_selector</item>
|
||||
<item name="rect_selector">@drawable/rect_selector</item>
|
||||
<item name="separator_color">@color/materialmusic_separator_color</item>
|
||||
<item name="seek_arc_thumb_drawable">@drawable/traditional_slider_thumb</item>
|
||||
|
||||
<item name="themed_drawable_color">@color/materialmusic_themed_drawable_color</item>
|
||||
<item name="check_mark_color">@color/white</item>
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@ buildscript {
|
|||
jcenter()
|
||||
}
|
||||
dependencies {
|
||||
classpath 'com.android.tools.build:gradle:1.3.0-beta1'
|
||||
classpath 'com.android.tools.build:gradle:1.3.0-beta4'
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue