Clean ups and refactoring.
This commit is contained in:
parent
9eb147625c
commit
73d613d11d
32 changed files with 239 additions and 295 deletions
|
|
@ -81,6 +81,8 @@ android {
|
||||||
versionNameSuffix ' DEBUG'
|
versionNameSuffix ' DEBUG'
|
||||||
manifestPlaceholders = [appName: "Phonograph DEBUG"]
|
manifestPlaceholders = [appName: "Phonograph DEBUG"]
|
||||||
|
|
||||||
|
ext.enableCrashlytics = false // Disable fabric build ID generation for debug builds
|
||||||
|
|
||||||
signingConfig signingConfigs.debug
|
signingConfig signingConfigs.debug
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -3,6 +3,7 @@ package com.kabouzeid.gramophone;
|
||||||
import android.app.Application;
|
import android.app.Application;
|
||||||
|
|
||||||
import com.crashlytics.android.Crashlytics;
|
import com.crashlytics.android.Crashlytics;
|
||||||
|
import com.crashlytics.android.core.CrashlyticsCore;
|
||||||
|
|
||||||
import io.fabric.sdk.android.Fabric;
|
import io.fabric.sdk.android.Fabric;
|
||||||
|
|
||||||
|
|
@ -18,6 +19,10 @@ public class App extends Application {
|
||||||
public void onCreate() {
|
public void onCreate() {
|
||||||
super.onCreate();
|
super.onCreate();
|
||||||
|
|
||||||
if (!BuildConfig.DEBUG) Fabric.with(this, new Crashlytics());
|
// Set up Crashlytics, disabled for debug builds
|
||||||
|
Crashlytics crashlyticsKit = new Crashlytics.Builder()
|
||||||
|
.core(new CrashlyticsCore.Builder().disabled(BuildConfig.DEBUG).build())
|
||||||
|
.build();
|
||||||
|
Fabric.with(this, crashlyticsKit);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -10,10 +10,10 @@ import android.util.SparseArray;
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
|
|
||||||
import com.kabouzeid.gramophone.R;
|
import com.kabouzeid.gramophone.R;
|
||||||
import com.kabouzeid.gramophone.ui.fragments.libraryfragments.AlbumsFragment;
|
import com.kabouzeid.gramophone.ui.fragments.mainactivity.library.pager.AlbumsFragment;
|
||||||
import com.kabouzeid.gramophone.ui.fragments.libraryfragments.ArtistsFragment;
|
import com.kabouzeid.gramophone.ui.fragments.mainactivity.library.pager.ArtistsFragment;
|
||||||
import com.kabouzeid.gramophone.ui.fragments.libraryfragments.PlaylistsFragment;
|
import com.kabouzeid.gramophone.ui.fragments.mainactivity.library.pager.PlaylistsFragment;
|
||||||
import com.kabouzeid.gramophone.ui.fragments.libraryfragments.SongsFragment;
|
import com.kabouzeid.gramophone.ui.fragments.mainactivity.library.pager.SongsFragment;
|
||||||
|
|
||||||
import java.lang.ref.WeakReference;
|
import java.lang.ref.WeakReference;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
|
|
||||||
|
|
@ -30,8 +30,9 @@ public class PlayingQueueAdapter extends SongAdapter implements DraggableItemAda
|
||||||
|
|
||||||
private int current;
|
private int current;
|
||||||
|
|
||||||
public PlayingQueueAdapter(AppCompatActivity activity, ArrayList<Song> dataSet, @LayoutRes int itemLayoutRes, boolean usePalette, @Nullable CabHolder cabHolder) {
|
public PlayingQueueAdapter(AppCompatActivity activity, ArrayList<Song> dataSet, int current, @LayoutRes int itemLayoutRes, boolean usePalette, @Nullable CabHolder cabHolder) {
|
||||||
super(activity, dataSet, itemLayoutRes, usePalette, cabHolder);
|
super(activity, dataSet, itemLayoutRes, usePalette, cabHolder);
|
||||||
|
this.current = current;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
||||||
|
|
@ -21,6 +21,8 @@ import java.util.ArrayList;
|
||||||
import java.util.Random;
|
import java.util.Random;
|
||||||
import java.util.WeakHashMap;
|
import java.util.WeakHashMap;
|
||||||
|
|
||||||
|
import hugo.weaving.DebugLog;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author Karim Abou Zeid (kabouzeid)
|
* @author Karim Abou Zeid (kabouzeid)
|
||||||
*/
|
*/
|
||||||
|
|
@ -33,6 +35,7 @@ public class MusicPlayerRemote {
|
||||||
|
|
||||||
private static final WeakHashMap<Context, ServiceBinder> mConnectionMap = new WeakHashMap<>();
|
private static final WeakHashMap<Context, ServiceBinder> mConnectionMap = new WeakHashMap<>();
|
||||||
|
|
||||||
|
@DebugLog
|
||||||
public static ServiceToken bindToService(@NonNull final Context context,
|
public static ServiceToken bindToService(@NonNull final Context context,
|
||||||
final ServiceConnection callback) {
|
final ServiceConnection callback) {
|
||||||
Activity realActivity = ((Activity) context).getParent();
|
Activity realActivity = ((Activity) context).getParent();
|
||||||
|
|
@ -52,6 +55,7 @@ public class MusicPlayerRemote {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@DebugLog
|
||||||
public static void unbindFromService(@Nullable final ServiceToken token) {
|
public static void unbindFromService(@Nullable final ServiceToken token) {
|
||||||
if (token == null) {
|
if (token == null) {
|
||||||
return;
|
return;
|
||||||
|
|
|
||||||
|
|
@ -4,10 +4,14 @@ package com.kabouzeid.gramophone.interfaces;
|
||||||
* @author Karim Abou Zeid (kabouzeid)
|
* @author Karim Abou Zeid (kabouzeid)
|
||||||
*/
|
*/
|
||||||
public interface MusicServiceEventListener {
|
public interface MusicServiceEventListener {
|
||||||
void onPlayingMetaChanged();
|
void onServiceConnected();
|
||||||
|
|
||||||
|
void onServiceDisconnected();
|
||||||
|
|
||||||
void onQueueChanged();
|
void onQueueChanged();
|
||||||
|
|
||||||
|
void onPlayingMetaChanged();
|
||||||
|
|
||||||
void onPlayStateChanged();
|
void onPlayStateChanged();
|
||||||
|
|
||||||
void onRepeatModeChanged();
|
void onRepeatModeChanged();
|
||||||
|
|
|
||||||
|
|
@ -24,8 +24,6 @@ import java.util.ArrayList;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
|
|
||||||
import hugo.weaving.DebugLog;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This cursor basically wraps a song cursor and is given a list of the order of the ids of the
|
* This cursor basically wraps a song cursor and is given a list of the order of the ids of the
|
||||||
* contents of the cursor. It wraps the Cursor and simulates the internal cursor being sorted
|
* contents of the cursor. It wraps the Cursor and simulates the internal cursor being sorted
|
||||||
|
|
@ -46,7 +44,6 @@ public class SortedCursor extends AbstractCursor {
|
||||||
* @param order the list of unique ids in sorted order to display
|
* @param order the list of unique ids in sorted order to display
|
||||||
* @param columnName the column name of the id to look up in the internal cursor
|
* @param columnName the column name of the id to look up in the internal cursor
|
||||||
*/
|
*/
|
||||||
@DebugLog
|
|
||||||
public SortedCursor(@NonNull final Cursor cursor, @Nullable final String[] order, final String columnName) {
|
public SortedCursor(@NonNull final Cursor cursor, @Nullable final String[] order, final String columnName) {
|
||||||
mCursor = cursor;
|
mCursor = cursor;
|
||||||
mMissingValues = buildCursorPositionMapping(order, columnName);
|
mMissingValues = buildCursorPositionMapping(order, columnName);
|
||||||
|
|
|
||||||
|
|
@ -4,8 +4,6 @@ package com.kabouzeid.gramophone.misc;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.support.v4.content.AsyncTaskLoader;
|
import android.support.v4.content.AsyncTaskLoader;
|
||||||
|
|
||||||
import hugo.weaving.DebugLog;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <a href="http://code.google.com/p/android/issues/detail?id=14944">Issue
|
* <a href="http://code.google.com/p/android/issues/detail?id=14944">Issue
|
||||||
* 14944</a>
|
* 14944</a>
|
||||||
|
|
@ -28,7 +26,6 @@ public abstract class WrappedAsyncTaskLoader<D> extends AsyncTaskLoader<D> {
|
||||||
/**
|
/**
|
||||||
* {@inheritDoc}
|
* {@inheritDoc}
|
||||||
*/
|
*/
|
||||||
@DebugLog
|
|
||||||
@Override
|
@Override
|
||||||
public void deliverResult(D data) {
|
public void deliverResult(D data) {
|
||||||
if (!isReset()) {
|
if (!isReset()) {
|
||||||
|
|
@ -42,7 +39,6 @@ public abstract class WrappedAsyncTaskLoader<D> extends AsyncTaskLoader<D> {
|
||||||
/**
|
/**
|
||||||
* {@inheritDoc}
|
* {@inheritDoc}
|
||||||
*/
|
*/
|
||||||
@DebugLog
|
|
||||||
@Override
|
@Override
|
||||||
protected void onStartLoading() {
|
protected void onStartLoading() {
|
||||||
if (this.mData != null) {
|
if (this.mData != null) {
|
||||||
|
|
@ -55,7 +51,6 @@ public abstract class WrappedAsyncTaskLoader<D> extends AsyncTaskLoader<D> {
|
||||||
/**
|
/**
|
||||||
* {@inheritDoc}
|
* {@inheritDoc}
|
||||||
*/
|
*/
|
||||||
@DebugLog
|
|
||||||
@Override
|
@Override
|
||||||
protected void onStopLoading() {
|
protected void onStopLoading() {
|
||||||
// Attempt to cancel the current load task if possible
|
// Attempt to cancel the current load task if possible
|
||||||
|
|
@ -65,7 +60,6 @@ public abstract class WrappedAsyncTaskLoader<D> extends AsyncTaskLoader<D> {
|
||||||
/**
|
/**
|
||||||
* {@inheritDoc}
|
* {@inheritDoc}
|
||||||
*/
|
*/
|
||||||
@DebugLog
|
|
||||||
@Override
|
@Override
|
||||||
protected void onReset() {
|
protected void onReset() {
|
||||||
super.onReset();
|
super.onReset();
|
||||||
|
|
|
||||||
|
|
@ -29,12 +29,15 @@ import android.preference.PreferenceManager;
|
||||||
import android.provider.MediaStore;
|
import android.provider.MediaStore;
|
||||||
import android.support.annotation.NonNull;
|
import android.support.annotation.NonNull;
|
||||||
import android.support.annotation.Nullable;
|
import android.support.annotation.Nullable;
|
||||||
|
import android.util.Log;
|
||||||
import android.widget.Toast;
|
import android.widget.Toast;
|
||||||
|
|
||||||
import com.bumptech.glide.BitmapRequestBuilder;
|
import com.bumptech.glide.BitmapRequestBuilder;
|
||||||
import com.bumptech.glide.Glide;
|
import com.bumptech.glide.Glide;
|
||||||
import com.bumptech.glide.request.animation.GlideAnimation;
|
import com.bumptech.glide.request.animation.GlideAnimation;
|
||||||
import com.bumptech.glide.request.target.SimpleTarget;
|
import com.bumptech.glide.request.target.SimpleTarget;
|
||||||
|
import com.crashlytics.android.answers.Answers;
|
||||||
|
import com.crashlytics.android.answers.CustomEvent;
|
||||||
import com.kabouzeid.gramophone.R;
|
import com.kabouzeid.gramophone.R;
|
||||||
import com.kabouzeid.gramophone.appwidget.WidgetMedium;
|
import com.kabouzeid.gramophone.appwidget.WidgetMedium;
|
||||||
import com.kabouzeid.gramophone.glide.BlurTransformation;
|
import com.kabouzeid.gramophone.glide.BlurTransformation;
|
||||||
|
|
@ -74,10 +77,11 @@ public class MusicService extends Service implements SharedPreferences.OnSharedP
|
||||||
public static final String ACTION_REWIND = "com.kabouzeid.gramophone.rewind";
|
public static final String ACTION_REWIND = "com.kabouzeid.gramophone.rewind";
|
||||||
public static final String ACTION_QUIT = "com.kabouzeid.gramophone.quitservice";
|
public static final String ACTION_QUIT = "com.kabouzeid.gramophone.quitservice";
|
||||||
|
|
||||||
// do not change this strings as it will break support with other apps (e.g. last.fm scrobbling)
|
// do not change these three strings as it will break support with other apps (e.g. last.fm scrobbling)
|
||||||
public static final String META_CHANGED = "com.kabouzeid.gramophone.metachanged";
|
public static final String META_CHANGED = "com.kabouzeid.gramophone.metachanged";
|
||||||
public static final String QUEUE_CHANGED = "com.kabouzeid.gramophone.queuechanged";
|
public static final String QUEUE_CHANGED = "com.kabouzeid.gramophone.queuechanged";
|
||||||
public static final String PLAY_STATE_CHANGED = "com.kabouzeid.gramophone.playstatechanged";
|
public static final String PLAY_STATE_CHANGED = "com.kabouzeid.gramophone.playstatechanged";
|
||||||
|
|
||||||
public static final String REPEAT_MODE_CHANGED = "com.kabouzeid.gramophone.repeatmodechanged";
|
public static final String REPEAT_MODE_CHANGED = "com.kabouzeid.gramophone.repeatmodechanged";
|
||||||
public static final String SHUFFLE_MODE_CHANGED = "com.kabouzeid.gramophone.shufflemodechanged";
|
public static final String SHUFFLE_MODE_CHANGED = "com.kabouzeid.gramophone.shufflemodechanged";
|
||||||
public static final String MEDIA_STORE_CHANGED = "com.kabouzeid.gramophone.mediastorechanged";
|
public static final String MEDIA_STORE_CHANGED = "com.kabouzeid.gramophone.mediastorechanged";
|
||||||
|
|
@ -133,8 +137,6 @@ public class MusicService extends Service implements SharedPreferences.OnSharedP
|
||||||
private QueueSaveHandler queueSaveHandler;
|
private QueueSaveHandler queueSaveHandler;
|
||||||
private HandlerThread musicPlayerHandlerThread;
|
private HandlerThread musicPlayerHandlerThread;
|
||||||
private HandlerThread queueSaveHandlerThread;
|
private HandlerThread queueSaveHandlerThread;
|
||||||
private HistoryStore historyStore;
|
|
||||||
private SongPlayCountStore songPlayCountStore;
|
|
||||||
private SongPlayCountHelper songPlayCountHelper = new SongPlayCountHelper();
|
private SongPlayCountHelper songPlayCountHelper = new SongPlayCountHelper();
|
||||||
private final BroadcastReceiver becomingNoisyReceiver = new BroadcastReceiver() {
|
private final BroadcastReceiver becomingNoisyReceiver = new BroadcastReceiver() {
|
||||||
@Override
|
@Override
|
||||||
|
|
@ -146,7 +148,7 @@ public class MusicService extends Service implements SharedPreferences.OnSharedP
|
||||||
};
|
};
|
||||||
private ContentObserver mediaStoreObserver;
|
private ContentObserver mediaStoreObserver;
|
||||||
private boolean notHandledMetaChangedForCurrentTrack;
|
private boolean notHandledMetaChangedForCurrentTrack;
|
||||||
private boolean isServiceInUse;
|
private boolean isServiceBound;
|
||||||
|
|
||||||
private Handler uiThreadHandler;
|
private Handler uiThreadHandler;
|
||||||
|
|
||||||
|
|
@ -154,23 +156,25 @@ public class MusicService extends Service implements SharedPreferences.OnSharedP
|
||||||
return MusicUtil.getSongFileUri(song.id).toString();
|
return MusicUtil.getSongFileUri(song.id).toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@DebugLog
|
||||||
@Override
|
@Override
|
||||||
public void onCreate() {
|
public void onCreate() {
|
||||||
super.onCreate();
|
super.onCreate();
|
||||||
|
|
||||||
playingNotificationHelper = new PlayingNotificationHelper(this);
|
playingNotificationHelper = new PlayingNotificationHelper(this);
|
||||||
|
|
||||||
historyStore = HistoryStore.getInstance(this);
|
|
||||||
songPlayCountStore = SongPlayCountStore.getInstance(this);
|
|
||||||
|
|
||||||
shuffleMode = PreferenceManager.getDefaultSharedPreferences(this).getInt(SAVED_SHUFFLE_MODE, 0);
|
|
||||||
repeatMode = PreferenceManager.getDefaultSharedPreferences(this).getInt(SAVED_REPEAT_MODE, 0);
|
|
||||||
|
|
||||||
final PowerManager powerManager = (PowerManager) getSystemService(Context.POWER_SERVICE);
|
final PowerManager powerManager = (PowerManager) getSystemService(Context.POWER_SERVICE);
|
||||||
wakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, getClass().getName());
|
wakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, getClass().getName());
|
||||||
wakeLock.setReferenceCounted(false);
|
wakeLock.setReferenceCounted(false);
|
||||||
|
|
||||||
musicPlayerHandlerThread = new HandlerThread("PlaybackHandler");
|
String playbackHandlerName = "PlaybackHandler";
|
||||||
|
try {
|
||||||
|
musicPlayerHandlerThread = new HandlerThread(playbackHandlerName, Process.THREAD_PRIORITY_AUDIO);
|
||||||
|
} catch (SecurityException e) {
|
||||||
|
Log.e(TAG, "Failed to create HandlerThread with Process.THREAD_PRIORITY_AUDIO", e);
|
||||||
|
Answers.getInstance().logCustom(new CustomEvent("SecurityException: Process.THREAD_PRIORITY_AUDIO")); // TODO remove in future update
|
||||||
|
musicPlayerHandlerThread = new HandlerThread(playbackHandlerName, Process.THREAD_PRIORITY_FOREGROUND);
|
||||||
|
}
|
||||||
musicPlayerHandlerThread.start();
|
musicPlayerHandlerThread.start();
|
||||||
playerHandler = new PlaybackHandler(this, musicPlayerHandlerThread.getLooper());
|
playerHandler = new PlaybackHandler(this, musicPlayerHandlerThread.getLooper());
|
||||||
|
|
||||||
|
|
@ -186,8 +190,6 @@ public class MusicService extends Service implements SharedPreferences.OnSharedP
|
||||||
|
|
||||||
registerReceiversAndRemoteControlClient();
|
registerReceiversAndRemoteControlClient();
|
||||||
|
|
||||||
restoreState();
|
|
||||||
|
|
||||||
mediaStoreObserver = new MediaStoreObserver(playerHandler);
|
mediaStoreObserver = new MediaStoreObserver(playerHandler);
|
||||||
getContentResolver().registerContentObserver(
|
getContentResolver().registerContentObserver(
|
||||||
MediaStore.Audio.Media.INTERNAL_CONTENT_URI, true, mediaStoreObserver);
|
MediaStore.Audio.Media.INTERNAL_CONTENT_URI, true, mediaStoreObserver);
|
||||||
|
|
@ -196,8 +198,7 @@ public class MusicService extends Service implements SharedPreferences.OnSharedP
|
||||||
|
|
||||||
PreferenceUtil.getInstance(this).registerOnSharedPreferenceChangedListener(this);
|
PreferenceUtil.getInstance(this).registerOnSharedPreferenceChangedListener(this);
|
||||||
|
|
||||||
notifyChange(SHUFFLE_MODE_CHANGED);
|
restoreState();
|
||||||
notifyChange(REPEAT_MODE_CHANGED);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void registerReceiversAndRemoteControlClient() {
|
private void registerReceiversAndRemoteControlClient() {
|
||||||
|
|
@ -230,6 +231,7 @@ public class MusicService extends Service implements SharedPreferences.OnSharedP
|
||||||
getAudioManager().registerRemoteControlClient(remoteControlClient);
|
getAudioManager().registerRemoteControlClient(remoteControlClient);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@DebugLog
|
||||||
@Override
|
@Override
|
||||||
public int onStartCommand(@Nullable Intent intent, int flags, int startId) {
|
public int onStartCommand(@Nullable Intent intent, int flags, int startId) {
|
||||||
if (intent != null) {
|
if (intent != null) {
|
||||||
|
|
@ -266,6 +268,7 @@ public class MusicService extends Service implements SharedPreferences.OnSharedP
|
||||||
return START_STICKY;
|
return START_STICKY;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@DebugLog
|
||||||
@Override
|
@Override
|
||||||
public void onDestroy() {
|
public void onDestroy() {
|
||||||
quit();
|
quit();
|
||||||
|
|
@ -275,20 +278,23 @@ public class MusicService extends Service implements SharedPreferences.OnSharedP
|
||||||
wakeLock.release();
|
wakeLock.release();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@DebugLog
|
||||||
@Override
|
@Override
|
||||||
public IBinder onBind(Intent intent) {
|
public IBinder onBind(Intent intent) {
|
||||||
isServiceInUse = true;
|
isServiceBound = true;
|
||||||
return musicBind;
|
return musicBind;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@DebugLog
|
||||||
@Override
|
@Override
|
||||||
public void onRebind(Intent intent) {
|
public void onRebind(Intent intent) {
|
||||||
isServiceInUse = true;
|
isServiceBound = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@DebugLog
|
||||||
@Override
|
@Override
|
||||||
public boolean onUnbind(Intent intent) {
|
public boolean onUnbind(Intent intent) {
|
||||||
isServiceInUse = false;
|
isServiceBound = false;
|
||||||
if (!isPlaying()) {
|
if (!isPlaying()) {
|
||||||
stopSelf();
|
stopSelf();
|
||||||
}
|
}
|
||||||
|
|
@ -350,6 +356,11 @@ public class MusicService extends Service implements SharedPreferences.OnSharedP
|
||||||
}
|
}
|
||||||
|
|
||||||
private void restoreState() {
|
private void restoreState() {
|
||||||
|
shuffleMode = PreferenceManager.getDefaultSharedPreferences(this).getInt(SAVED_SHUFFLE_MODE, 0);
|
||||||
|
repeatMode = PreferenceManager.getDefaultSharedPreferences(this).getInt(SAVED_REPEAT_MODE, 0);
|
||||||
|
notifyPrivateChange(SHUFFLE_MODE_CHANGED);
|
||||||
|
notifyPrivateChange(REPEAT_MODE_CHANGED);
|
||||||
|
|
||||||
playerHandler.removeMessages(RESTORE_QUEUES);
|
playerHandler.removeMessages(RESTORE_QUEUES);
|
||||||
playerHandler.sendEmptyMessage(RESTORE_QUEUES);
|
playerHandler.sendEmptyMessage(RESTORE_QUEUES);
|
||||||
}
|
}
|
||||||
|
|
@ -372,8 +383,8 @@ public class MusicService extends Service implements SharedPreferences.OnSharedP
|
||||||
if (restoredPositionInTrack > 0) seek(restoredPositionInTrack);
|
if (restoredPositionInTrack > 0) seek(restoredPositionInTrack);
|
||||||
|
|
||||||
notHandledMetaChangedForCurrentTrack = true;
|
notHandledMetaChangedForCurrentTrack = true;
|
||||||
sendChangeIntent(META_CHANGED);
|
sendPrivateIntent(META_CHANGED);
|
||||||
sendChangeIntent(QUEUE_CHANGED);
|
sendPrivateIntent(QUEUE_CHANGED);
|
||||||
updateWidgets();
|
updateWidgets();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -383,7 +394,7 @@ public class MusicService extends Service implements SharedPreferences.OnSharedP
|
||||||
pause();
|
pause();
|
||||||
playingNotificationHelper.killNotification();
|
playingNotificationHelper.killNotification();
|
||||||
|
|
||||||
if (isServiceInUse) {
|
if (isServiceBound) {
|
||||||
return START_STICKY;
|
return START_STICKY;
|
||||||
} else {
|
} else {
|
||||||
closeAudioEffectSession();
|
closeAudioEffectSession();
|
||||||
|
|
@ -623,7 +634,7 @@ public class MusicService extends Service implements SharedPreferences.OnSharedP
|
||||||
.putInt(SAVED_REPEAT_MODE, repeatMode)
|
.putInt(SAVED_REPEAT_MODE, repeatMode)
|
||||||
.apply();
|
.apply();
|
||||||
prepareNext();
|
prepareNext();
|
||||||
notifyChange(REPEAT_MODE_CHANGED);
|
notifyPrivateChange(REPEAT_MODE_CHANGED);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -886,33 +897,43 @@ public class MusicService extends Service implements SharedPreferences.OnSharedP
|
||||||
position = newPosition;
|
position = newPosition;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
notifyChange(SHUFFLE_MODE_CHANGED);
|
notifyPrivateChange(SHUFFLE_MODE_CHANGED);
|
||||||
notifyChange(QUEUE_CHANGED);
|
notifyChange(QUEUE_CHANGED);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@DebugLog
|
||||||
private void notifyChange(@NonNull final String what) {
|
private void notifyChange(@NonNull final String what) {
|
||||||
handleChange(what);
|
notifyPrivateChange(what);
|
||||||
sendChangeIntent(what);
|
sendPublicIntent(what);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void sendChangeIntent(@NonNull final String what) {
|
@DebugLog
|
||||||
final Intent internalIntent = new Intent(what);
|
private void notifyPrivateChange(@NonNull final String what) {
|
||||||
|
handleChange(what);
|
||||||
|
sendPrivateIntent(what);
|
||||||
|
}
|
||||||
|
|
||||||
|
// to let other apps know whats playing. i.E. last.fm (scrobbling) or musixmatch
|
||||||
|
@DebugLog
|
||||||
|
private void sendPublicIntent(@NonNull final String what) {
|
||||||
|
final Intent intent = new Intent(what.replace(PHONOGRAPH_PACKAGE_NAME, MUSIC_PACKAGE_NAME));
|
||||||
|
|
||||||
final Song currentSong = getCurrentSong();
|
final Song currentSong = getCurrentSong();
|
||||||
if (currentSong.id != -1) {
|
if (currentSong.id != -1) {
|
||||||
internalIntent.putExtra("id", currentSong.id);
|
intent.putExtra("id", currentSong.id);
|
||||||
internalIntent.putExtra("artist", currentSong.artistName);
|
intent.putExtra("artist", currentSong.artistName);
|
||||||
internalIntent.putExtra("album", currentSong.albumName);
|
intent.putExtra("album", currentSong.albumName);
|
||||||
internalIntent.putExtra("track", currentSong.title);
|
intent.putExtra("track", currentSong.title);
|
||||||
internalIntent.putExtra("duration", currentSong.duration);
|
intent.putExtra("duration", currentSong.duration);
|
||||||
}
|
}
|
||||||
internalIntent.putExtra("playing", isPlaying());
|
intent.putExtra("playing", isPlaying());
|
||||||
sendStickyBroadcast(internalIntent);
|
|
||||||
|
|
||||||
// to let other apps know whats playing. i.E. last.fm (scrobbling) or musixmatch
|
sendStickyBroadcast(intent);
|
||||||
final Intent publicMusicIntent = new Intent(internalIntent);
|
}
|
||||||
publicMusicIntent.setAction(what.replace(PHONOGRAPH_PACKAGE_NAME, MUSIC_PACKAGE_NAME));
|
|
||||||
sendStickyBroadcast(publicMusicIntent);
|
@DebugLog
|
||||||
|
private void sendPrivateIntent(final String what) {
|
||||||
|
sendBroadcast(new Intent(what));
|
||||||
}
|
}
|
||||||
|
|
||||||
private void handleChange(@NonNull final String what) {
|
private void handleChange(@NonNull final String what) {
|
||||||
|
|
@ -935,9 +956,9 @@ public class MusicService extends Service implements SharedPreferences.OnSharedP
|
||||||
savePosition();
|
savePosition();
|
||||||
savePositionInTrack();
|
savePositionInTrack();
|
||||||
final Song currentSong = getCurrentSong();
|
final Song currentSong = getCurrentSong();
|
||||||
historyStore.addSongId(currentSong.id);
|
HistoryStore.getInstance(this).addSongId(currentSong.id);
|
||||||
if (songPlayCountHelper.shouldBumpPlayCount()) {
|
if (songPlayCountHelper.shouldBumpPlayCount()) {
|
||||||
songPlayCountStore.bumpPlayCount(songPlayCountHelper.getSong().id);
|
SongPlayCountStore.getInstance(this).bumpPlayCount(songPlayCountHelper.getSong().id);
|
||||||
}
|
}
|
||||||
songPlayCountHelper.notifySongChanged(currentSong);
|
songPlayCountHelper.notifySongChanged(currentSong);
|
||||||
break;
|
break;
|
||||||
|
|
@ -1146,7 +1167,7 @@ public class MusicService extends Service implements SharedPreferences.OnSharedP
|
||||||
public void run() {
|
public void run() {
|
||||||
// actually call refresh when the delayed callback fires
|
// actually call refresh when the delayed callback fires
|
||||||
// do not send a sticky broadcast here
|
// do not send a sticky broadcast here
|
||||||
sendBroadcast(new Intent(MEDIA_STORE_CHANGED));
|
notifyPrivateChange(MEDIA_STORE_CHANGED);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -46,7 +46,6 @@ import com.kabouzeid.gramophone.util.Util;
|
||||||
|
|
||||||
import butterknife.Bind;
|
import butterknife.Bind;
|
||||||
import butterknife.ButterKnife;
|
import butterknife.ButterKnife;
|
||||||
import hugo.weaving.DebugLog;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Be careful when changing things in this Activity!
|
* Be careful when changing things in this Activity!
|
||||||
|
|
@ -337,7 +336,6 @@ public class AlbumDetailActivity extends AbsSlidingMusicPanelActivity implements
|
||||||
return new AsyncAlbumLoader(this, args.getInt(EXTRA_ALBUM_ID));
|
return new AsyncAlbumLoader(this, args.getInt(EXTRA_ALBUM_ID));
|
||||||
}
|
}
|
||||||
|
|
||||||
@DebugLog
|
|
||||||
@Override
|
@Override
|
||||||
public void onLoadFinished(Loader<Album> loader, Album data) {
|
public void onLoadFinished(Loader<Album> loader, Album data) {
|
||||||
supportStartPostponedEnterTransition();
|
supportStartPostponedEnterTransition();
|
||||||
|
|
@ -347,7 +345,6 @@ public class AlbumDetailActivity extends AbsSlidingMusicPanelActivity implements
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@DebugLog
|
|
||||||
@Override
|
@Override
|
||||||
public void onLoaderReset(Loader<Album> loader) {
|
public void onLoaderReset(Loader<Album> loader) {
|
||||||
this.album = new Album();
|
this.album = new Album();
|
||||||
|
|
@ -362,7 +359,6 @@ public class AlbumDetailActivity extends AbsSlidingMusicPanelActivity implements
|
||||||
this.albumId = albumId;
|
this.albumId = albumId;
|
||||||
}
|
}
|
||||||
|
|
||||||
@DebugLog
|
|
||||||
@Override
|
@Override
|
||||||
public Album loadInBackground() {
|
public Album loadInBackground() {
|
||||||
return AlbumLoader.getAlbum(getContext(), albumId);
|
return AlbumLoader.getAlbum(getContext(), albumId);
|
||||||
|
|
|
||||||
|
|
@ -62,7 +62,6 @@ import java.util.ArrayList;
|
||||||
|
|
||||||
import butterknife.Bind;
|
import butterknife.Bind;
|
||||||
import butterknife.ButterKnife;
|
import butterknife.ButterKnife;
|
||||||
import hugo.weaving.DebugLog;
|
|
||||||
import retrofit2.Call;
|
import retrofit2.Call;
|
||||||
import retrofit2.Callback;
|
import retrofit2.Callback;
|
||||||
import retrofit2.Response;
|
import retrofit2.Response;
|
||||||
|
|
@ -418,7 +417,6 @@ public class ArtistDetailActivity extends AbsSlidingMusicPanelActivity implement
|
||||||
return new AsyncArtistDataLoader(this, args.getInt(EXTRA_ARTIST_ID));
|
return new AsyncArtistDataLoader(this, args.getInt(EXTRA_ARTIST_ID));
|
||||||
}
|
}
|
||||||
|
|
||||||
@DebugLog
|
|
||||||
@Override
|
@Override
|
||||||
public void onLoadFinished(Loader<ArtistData> loader, ArtistData data) {
|
public void onLoadFinished(Loader<ArtistData> loader, ArtistData data) {
|
||||||
supportStartPostponedEnterTransition();
|
supportStartPostponedEnterTransition();
|
||||||
|
|
@ -428,7 +426,6 @@ public class ArtistDetailActivity extends AbsSlidingMusicPanelActivity implement
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@DebugLog
|
|
||||||
@Override
|
@Override
|
||||||
public void onLoaderReset(Loader<ArtistData> loader) {
|
public void onLoaderReset(Loader<ArtistData> loader) {
|
||||||
this.artistData = new ArtistData();
|
this.artistData = new ArtistData();
|
||||||
|
|
@ -444,7 +441,6 @@ public class ArtistDetailActivity extends AbsSlidingMusicPanelActivity implement
|
||||||
this.artistId = artistId;
|
this.artistId = artistId;
|
||||||
}
|
}
|
||||||
|
|
||||||
@DebugLog
|
|
||||||
@Override
|
@Override
|
||||||
public ArtistData loadInBackground() {
|
public ArtistData loadInBackground() {
|
||||||
Artist artist = ArtistLoader.getArtist(getContext(), artistId);
|
Artist artist = ArtistLoader.getArtist(getContext(), artistId);
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,6 @@
|
||||||
package com.kabouzeid.gramophone.ui.activities;
|
package com.kabouzeid.gramophone.ui.activities;
|
||||||
|
|
||||||
import android.annotation.SuppressLint;
|
import android.annotation.SuppressLint;
|
||||||
import android.content.ComponentName;
|
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.content.pm.PackageInfo;
|
import android.content.pm.PackageInfo;
|
||||||
import android.content.pm.PackageManager;
|
import android.content.pm.PackageManager;
|
||||||
|
|
@ -9,7 +8,6 @@ import android.net.Uri;
|
||||||
import android.os.Build;
|
import android.os.Build;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.os.Handler;
|
import android.os.Handler;
|
||||||
import android.os.IBinder;
|
|
||||||
import android.provider.MediaStore;
|
import android.provider.MediaStore;
|
||||||
import android.support.annotation.NonNull;
|
import android.support.annotation.NonNull;
|
||||||
import android.support.annotation.Nullable;
|
import android.support.annotation.Nullable;
|
||||||
|
|
@ -24,6 +22,8 @@ import android.widget.ImageView;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
|
|
||||||
import com.bumptech.glide.Glide;
|
import com.bumptech.glide.Glide;
|
||||||
|
import com.crashlytics.android.answers.Answers;
|
||||||
|
import com.crashlytics.android.answers.CustomEvent;
|
||||||
import com.kabouzeid.appthemehelper.ThemeStore;
|
import com.kabouzeid.appthemehelper.ThemeStore;
|
||||||
import com.kabouzeid.appthemehelper.util.ATHUtil;
|
import com.kabouzeid.appthemehelper.util.ATHUtil;
|
||||||
import com.kabouzeid.appthemehelper.util.NavigationViewUtil;
|
import com.kabouzeid.appthemehelper.util.NavigationViewUtil;
|
||||||
|
|
@ -40,8 +40,8 @@ import com.kabouzeid.gramophone.model.Song;
|
||||||
import com.kabouzeid.gramophone.service.MusicService;
|
import com.kabouzeid.gramophone.service.MusicService;
|
||||||
import com.kabouzeid.gramophone.ui.activities.base.AbsSlidingMusicPanelActivity;
|
import com.kabouzeid.gramophone.ui.activities.base.AbsSlidingMusicPanelActivity;
|
||||||
import com.kabouzeid.gramophone.ui.activities.intro.AppIntroActivity;
|
import com.kabouzeid.gramophone.ui.activities.intro.AppIntroActivity;
|
||||||
import com.kabouzeid.gramophone.ui.fragments.FolderFragment;
|
import com.kabouzeid.gramophone.ui.fragments.mainactivity.folders.FoldersFragment;
|
||||||
import com.kabouzeid.gramophone.ui.fragments.LibraryFragment;
|
import com.kabouzeid.gramophone.ui.fragments.mainactivity.library.LibraryFragment;
|
||||||
import com.kabouzeid.gramophone.util.PreferenceUtil;
|
import com.kabouzeid.gramophone.util.PreferenceUtil;
|
||||||
import com.kabouzeid.gramophone.util.Util;
|
import com.kabouzeid.gramophone.util.Util;
|
||||||
import com.sothree.slidinguppanel.SlidingUpPanelLayout;
|
import com.sothree.slidinguppanel.SlidingUpPanelLayout;
|
||||||
|
|
@ -74,14 +74,13 @@ public class MainActivity extends AbsSlidingMusicPanelActivity
|
||||||
|
|
||||||
private boolean blockRequestPermissions;
|
private boolean blockRequestPermissions;
|
||||||
|
|
||||||
private boolean bottomBarSupposedToBeHidden = true;
|
|
||||||
private boolean keepBottomBarHidden = true;
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onCreate(Bundle savedInstanceState) {
|
protected void onCreate(Bundle savedInstanceState) {
|
||||||
super.onCreate(savedInstanceState);
|
super.onCreate(savedInstanceState);
|
||||||
ButterKnife.bind(this);
|
ButterKnife.bind(this);
|
||||||
|
|
||||||
|
Answers.getInstance().logCustom(new CustomEvent("TEST")); // TODO remove in future update
|
||||||
|
|
||||||
if (Build.VERSION.SDK_INT == Build.VERSION_CODES.KITKAT) {
|
if (Build.VERSION.SDK_INT == Build.VERSION_CODES.KITKAT) {
|
||||||
Util.setStatusBarTranslucent(getWindow());
|
Util.setStatusBarTranslucent(getWindow());
|
||||||
drawerLayout.setFitsSystemWindows(false);
|
drawerLayout.setFitsSystemWindows(false);
|
||||||
|
|
@ -94,15 +93,8 @@ public class MainActivity extends AbsSlidingMusicPanelActivity
|
||||||
|
|
||||||
if (savedInstanceState == null) {
|
if (savedInstanceState == null) {
|
||||||
setMusicChooser(PreferenceUtil.getInstance(this).getLastMusicChooser());
|
setMusicChooser(PreferenceUtil.getInstance(this).getLastMusicChooser());
|
||||||
new Handler().postDelayed(new Runnable() {
|
|
||||||
@Override
|
|
||||||
public void run() {
|
|
||||||
initDelayedBottomBar();
|
|
||||||
}
|
|
||||||
}, 500);
|
|
||||||
} else {
|
} else {
|
||||||
restoreCurrentFragment();
|
restoreCurrentFragment();
|
||||||
initDelayedBottomBar();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!checkShowIntro()) {
|
if (!checkShowIntro()) {
|
||||||
|
|
@ -119,7 +111,7 @@ public class MainActivity extends AbsSlidingMusicPanelActivity
|
||||||
break;
|
break;
|
||||||
case FOLDERS:
|
case FOLDERS:
|
||||||
navigationView.setCheckedItem(R.id.nav_folders);
|
navigationView.setCheckedItem(R.id.nav_folders);
|
||||||
setCurrentFragment(FolderFragment.newInstance(this));
|
setCurrentFragment(FoldersFragment.newInstance(this));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -255,8 +247,9 @@ public class MainActivity extends AbsSlidingMusicPanelActivity
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onServiceConnected(ComponentName name, IBinder service) {
|
public void onServiceConnected() {
|
||||||
super.onServiceConnected(name, service);
|
super.onServiceConnected();
|
||||||
|
updateNavigationDrawerHeader();
|
||||||
handlePlaybackIntent(getIntent());
|
handlePlaybackIntent(getIntent());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -410,17 +403,6 @@ public class MainActivity extends AbsSlidingMusicPanelActivity
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void hideBottomBar(boolean hide) {
|
|
||||||
bottomBarSupposedToBeHidden = hide;
|
|
||||||
super.hideBottomBar(hide || keepBottomBarHidden);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void initDelayedBottomBar() {
|
|
||||||
keepBottomBarHidden = false;
|
|
||||||
hideBottomBar(bottomBarSupposedToBeHidden);
|
|
||||||
}
|
|
||||||
|
|
||||||
public interface MainActivityFragmentCallbacks {
|
public interface MainActivityFragmentCallbacks {
|
||||||
boolean handleBackPress();
|
boolean handleBackPress();
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -20,10 +20,12 @@ import com.kabouzeid.gramophone.service.MusicService;
|
||||||
import java.lang.ref.WeakReference;
|
import java.lang.ref.WeakReference;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
|
||||||
|
import hugo.weaving.DebugLog;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author Karim Abou Zeid (kabouzeid)
|
* @author Karim Abou Zeid (kabouzeid)
|
||||||
*/
|
*/
|
||||||
public abstract class AbsMusicServiceActivity extends AbsBaseActivity implements ServiceConnection, MusicServiceEventListener {
|
public abstract class AbsMusicServiceActivity extends AbsBaseActivity implements MusicServiceEventListener {
|
||||||
public static final String TAG = AbsMusicServiceActivity.class.getSimpleName();
|
public static final String TAG = AbsMusicServiceActivity.class.getSimpleName();
|
||||||
|
|
||||||
private final ArrayList<MusicServiceEventListener> mMusicServiceEventListeners = new ArrayList<>();
|
private final ArrayList<MusicServiceEventListener> mMusicServiceEventListeners = new ArrayList<>();
|
||||||
|
|
@ -33,41 +35,26 @@ public abstract class AbsMusicServiceActivity extends AbsBaseActivity implements
|
||||||
private boolean receiverRegistered;
|
private boolean receiverRegistered;
|
||||||
|
|
||||||
|
|
||||||
|
@DebugLog
|
||||||
@Override
|
@Override
|
||||||
protected void onCreate(Bundle savedInstanceState) {
|
protected void onCreate(Bundle savedInstanceState) {
|
||||||
super.onCreate(savedInstanceState);
|
super.onCreate(savedInstanceState);
|
||||||
serviceToken = MusicPlayerRemote.bindToService(this, this);
|
serviceToken = MusicPlayerRemote.bindToService(this, new ServiceConnection() {
|
||||||
|
@Override
|
||||||
|
public void onServiceConnected(ComponentName name, IBinder service) {
|
||||||
|
AbsMusicServiceActivity.this.onServiceConnected();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onServiceDisconnected(ComponentName name) {
|
||||||
|
AbsMusicServiceActivity.this.onServiceDisconnected();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
setPermissionDeniedMessage(getString(R.string.permission_external_storage_denied));
|
setPermissionDeniedMessage(getString(R.string.permission_external_storage_denied));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@DebugLog
|
||||||
public void onServiceConnected(ComponentName name, IBinder service) {
|
|
||||||
if (!receiverRegistered) {
|
|
||||||
musicStateReceiver = new MusicStateReceiver(this);
|
|
||||||
|
|
||||||
final IntentFilter filter = new IntentFilter();
|
|
||||||
filter.addAction(MusicService.PLAY_STATE_CHANGED);
|
|
||||||
filter.addAction(MusicService.SHUFFLE_MODE_CHANGED);
|
|
||||||
filter.addAction(MusicService.REPEAT_MODE_CHANGED);
|
|
||||||
filter.addAction(MusicService.META_CHANGED);
|
|
||||||
filter.addAction(MusicService.QUEUE_CHANGED);
|
|
||||||
filter.addAction(MusicService.MEDIA_STORE_CHANGED);
|
|
||||||
|
|
||||||
registerReceiver(musicStateReceiver, filter);
|
|
||||||
|
|
||||||
receiverRegistered = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onServiceDisconnected(ComponentName name) {
|
|
||||||
if (receiverRegistered) {
|
|
||||||
unregisterReceiver(musicStateReceiver);
|
|
||||||
receiverRegistered = false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onDestroy() {
|
protected void onDestroy() {
|
||||||
super.onDestroy();
|
super.onDestroy();
|
||||||
|
|
@ -90,6 +77,45 @@ public abstract class AbsMusicServiceActivity extends AbsBaseActivity implements
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onServiceConnected() {
|
||||||
|
if (!receiverRegistered) {
|
||||||
|
musicStateReceiver = new MusicStateReceiver(this);
|
||||||
|
|
||||||
|
final IntentFilter filter = new IntentFilter();
|
||||||
|
filter.addAction(MusicService.PLAY_STATE_CHANGED);
|
||||||
|
filter.addAction(MusicService.SHUFFLE_MODE_CHANGED);
|
||||||
|
filter.addAction(MusicService.REPEAT_MODE_CHANGED);
|
||||||
|
filter.addAction(MusicService.META_CHANGED);
|
||||||
|
filter.addAction(MusicService.QUEUE_CHANGED);
|
||||||
|
filter.addAction(MusicService.MEDIA_STORE_CHANGED);
|
||||||
|
|
||||||
|
registerReceiver(musicStateReceiver, filter);
|
||||||
|
|
||||||
|
receiverRegistered = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (MusicServiceEventListener listener : mMusicServiceEventListeners) {
|
||||||
|
if (listener != null) {
|
||||||
|
listener.onServiceConnected();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onServiceDisconnected() {
|
||||||
|
if (receiverRegistered) {
|
||||||
|
unregisterReceiver(musicStateReceiver);
|
||||||
|
receiverRegistered = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (MusicServiceEventListener listener : mMusicServiceEventListeners) {
|
||||||
|
if (listener != null) {
|
||||||
|
listener.onServiceDisconnected();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onPlayingMetaChanged() {
|
public void onPlayingMetaChanged() {
|
||||||
for (MusicServiceEventListener listener : mMusicServiceEventListeners) {
|
for (MusicServiceEventListener listener : mMusicServiceEventListeners) {
|
||||||
|
|
@ -152,6 +178,7 @@ public abstract class AbsMusicServiceActivity extends AbsBaseActivity implements
|
||||||
reference = new WeakReference<>(activity);
|
reference = new WeakReference<>(activity);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@DebugLog
|
||||||
@Override
|
@Override
|
||||||
public void onReceive(final Context context, @NonNull final Intent intent) {
|
public void onReceive(final Context context, @NonNull final Intent intent) {
|
||||||
final String action = intent.getAction();
|
final String action = intent.getAction();
|
||||||
|
|
|
||||||
|
|
@ -79,6 +79,14 @@ public abstract class AbsSlidingMusicPanelActivity extends AbsMusicServiceActivi
|
||||||
|
|
||||||
protected abstract View createContentView();
|
protected abstract View createContentView();
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onServiceConnected() {
|
||||||
|
super.onServiceConnected();
|
||||||
|
if (!MusicPlayerRemote.getPlayingQueue().isEmpty()) {
|
||||||
|
hideBottomBar(false);
|
||||||
|
} // don't call hideBottomBar(true) here as it causes a bug with the SlidingUpPanelLayout
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onQueueChanged() {
|
public void onQueueChanged() {
|
||||||
super.onQueueChanged();
|
super.onQueueChanged();
|
||||||
|
|
@ -212,6 +220,10 @@ public abstract class AbsSlidingMusicPanelActivity extends AbsMusicServiceActivi
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public SlidingUpPanelLayout getSlidingUpPanelLayout() {
|
||||||
|
return slidingUpPanelLayout;
|
||||||
|
}
|
||||||
|
|
||||||
public MiniPlayerFragment getMiniPlayerFragment() {
|
public MiniPlayerFragment getMiniPlayerFragment() {
|
||||||
return miniPlayerFragment;
|
return miniPlayerFragment;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -47,6 +47,16 @@ public class AbsMusicServiceFragment extends Fragment implements MusicServiceEve
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onServiceConnected() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onServiceDisconnected() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onQueueChanged() {
|
public void onQueueChanged() {
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
package com.kabouzeid.gramophone.ui.fragments;
|
package com.kabouzeid.gramophone.ui.fragments.mainactivity;
|
||||||
|
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.support.v4.app.Fragment;
|
import android.support.v4.app.Fragment;
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
package com.kabouzeid.gramophone.ui.fragments;
|
package com.kabouzeid.gramophone.ui.fragments.mainactivity.folders;
|
||||||
|
|
||||||
|
|
||||||
import android.annotation.SuppressLint;
|
import android.annotation.SuppressLint;
|
||||||
|
|
@ -41,6 +41,7 @@ import com.kabouzeid.gramophone.loader.SongLoader;
|
||||||
import com.kabouzeid.gramophone.loader.SortedCursor;
|
import com.kabouzeid.gramophone.loader.SortedCursor;
|
||||||
import com.kabouzeid.gramophone.model.Song;
|
import com.kabouzeid.gramophone.model.Song;
|
||||||
import com.kabouzeid.gramophone.ui.activities.MainActivity;
|
import com.kabouzeid.gramophone.ui.activities.MainActivity;
|
||||||
|
import com.kabouzeid.gramophone.ui.fragments.mainactivity.AbsMainActivityFragment;
|
||||||
import com.kabouzeid.gramophone.util.PhonographColorUtil;
|
import com.kabouzeid.gramophone.util.PhonographColorUtil;
|
||||||
import com.kabouzeid.gramophone.util.PreferenceUtil;
|
import com.kabouzeid.gramophone.util.PreferenceUtil;
|
||||||
import com.kabouzeid.gramophone.util.ViewUtil;
|
import com.kabouzeid.gramophone.util.ViewUtil;
|
||||||
|
|
@ -59,10 +60,9 @@ import java.util.List;
|
||||||
|
|
||||||
import butterknife.Bind;
|
import butterknife.Bind;
|
||||||
import butterknife.ButterKnife;
|
import butterknife.ButterKnife;
|
||||||
import hugo.weaving.DebugLog;
|
|
||||||
|
|
||||||
public class FolderFragment extends AbsMainActivityFragment implements MainActivity.MainActivityFragmentCallbacks, CabHolder, BreadCrumbLayout.SelectionCallback, SongFileAdapter.Callbacks, AppBarLayout.OnOffsetChangedListener {
|
public class FoldersFragment extends AbsMainActivityFragment implements MainActivity.MainActivityFragmentCallbacks, CabHolder, BreadCrumbLayout.SelectionCallback, SongFileAdapter.Callbacks, AppBarLayout.OnOffsetChangedListener {
|
||||||
public static final String TAG = FolderFragment.class.getSimpleName();
|
public static final String TAG = FoldersFragment.class.getSimpleName();
|
||||||
|
|
||||||
protected static final String PATH = "path";
|
protected static final String PATH = "path";
|
||||||
protected static final String CRUMBS = "crumbs";
|
protected static final String CRUMBS = "crumbs";
|
||||||
|
|
@ -85,15 +85,15 @@ public class FolderFragment extends AbsMainActivityFragment implements MainActiv
|
||||||
private SongFileAdapter adapter;
|
private SongFileAdapter adapter;
|
||||||
private MaterialCab cab;
|
private MaterialCab cab;
|
||||||
|
|
||||||
public FolderFragment() {
|
public FoldersFragment() {
|
||||||
}
|
}
|
||||||
|
|
||||||
public static FolderFragment newInstance(Context context) {
|
public static FoldersFragment newInstance(Context context) {
|
||||||
return newInstance(PreferenceUtil.getInstance(context).getStartDirectory());
|
return newInstance(PreferenceUtil.getInstance(context).getStartDirectory());
|
||||||
}
|
}
|
||||||
|
|
||||||
public static FolderFragment newInstance(File directory) {
|
public static FoldersFragment newInstance(File directory) {
|
||||||
FolderFragment frag = new FolderFragment();
|
FoldersFragment frag = new FoldersFragment();
|
||||||
Bundle b = new Bundle();
|
Bundle b = new Bundle();
|
||||||
b.putSerializable(PATH, directory);
|
b.putSerializable(PATH, directory);
|
||||||
frag.setArguments(b);
|
frag.setArguments(b);
|
||||||
|
|
@ -416,7 +416,6 @@ public class FolderFragment extends AbsMainActivityFragment implements MainActiv
|
||||||
int scanned = 0;
|
int scanned = 0;
|
||||||
int failed = 0;
|
int failed = 0;
|
||||||
|
|
||||||
@DebugLog
|
|
||||||
@Override
|
@Override
|
||||||
public void onScanCompleted(final String path, final Uri uri) {
|
public void onScanCompleted(final String path, final Uri uri) {
|
||||||
getActivity().runOnUiThread(new Runnable() {
|
getActivity().runOnUiThread(new Runnable() {
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
package com.kabouzeid.gramophone.ui.fragments;
|
package com.kabouzeid.gramophone.ui.fragments.mainactivity.library;
|
||||||
|
|
||||||
|
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
|
|
@ -31,7 +31,8 @@ import com.kabouzeid.gramophone.interfaces.CabHolder;
|
||||||
import com.kabouzeid.gramophone.loader.SongLoader;
|
import com.kabouzeid.gramophone.loader.SongLoader;
|
||||||
import com.kabouzeid.gramophone.ui.activities.MainActivity;
|
import com.kabouzeid.gramophone.ui.activities.MainActivity;
|
||||||
import com.kabouzeid.gramophone.ui.activities.SearchActivity;
|
import com.kabouzeid.gramophone.ui.activities.SearchActivity;
|
||||||
import com.kabouzeid.gramophone.ui.fragments.libraryfragments.AbsLibraryPagerRecyclerViewCustomGridSizeFragment;
|
import com.kabouzeid.gramophone.ui.fragments.mainactivity.AbsMainActivityFragment;
|
||||||
|
import com.kabouzeid.gramophone.ui.fragments.mainactivity.library.pager.AbsLibraryPagerRecyclerViewCustomGridSizeFragment;
|
||||||
import com.kabouzeid.gramophone.util.NavigationUtil;
|
import com.kabouzeid.gramophone.util.NavigationUtil;
|
||||||
import com.kabouzeid.gramophone.util.PhonographColorUtil;
|
import com.kabouzeid.gramophone.util.PhonographColorUtil;
|
||||||
import com.kabouzeid.gramophone.util.PreferenceUtil;
|
import com.kabouzeid.gramophone.util.PreferenceUtil;
|
||||||
|
|
@ -151,6 +152,7 @@ public class LibraryFragment extends AbsMainActivityFragment implements CabHolde
|
||||||
@Override
|
@Override
|
||||||
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
|
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
|
||||||
super.onCreateOptionsMenu(menu, inflater);
|
super.onCreateOptionsMenu(menu, inflater);
|
||||||
|
if (pager == null) return;
|
||||||
inflater.inflate(R.menu.menu_main, menu);
|
inflater.inflate(R.menu.menu_main, menu);
|
||||||
if (isPlaylistPage()) {
|
if (isPlaylistPage()) {
|
||||||
menu.add(0, R.id.action_new_playlist, 0, R.string.new_playlist_title);
|
menu.add(0, R.id.action_new_playlist, 0, R.string.new_playlist_title);
|
||||||
|
|
@ -175,6 +177,7 @@ public class LibraryFragment extends AbsMainActivityFragment implements CabHolde
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean onOptionsItemSelected(@NonNull MenuItem item) {
|
public boolean onOptionsItemSelected(@NonNull MenuItem item) {
|
||||||
|
if (pager == null) return false;
|
||||||
Fragment currentFragment = getCurrentFragment();
|
Fragment currentFragment = getCurrentFragment();
|
||||||
if (currentFragment instanceof AbsLibraryPagerRecyclerViewCustomGridSizeFragment) {
|
if (currentFragment instanceof AbsLibraryPagerRecyclerViewCustomGridSizeFragment) {
|
||||||
AbsLibraryPagerRecyclerViewCustomGridSizeFragment absLibraryRecyclerViewCustomGridSizeFragment = (AbsLibraryPagerRecyclerViewCustomGridSizeFragment) currentFragment;
|
AbsLibraryPagerRecyclerViewCustomGridSizeFragment absLibraryRecyclerViewCustomGridSizeFragment = (AbsLibraryPagerRecyclerViewCustomGridSizeFragment) currentFragment;
|
||||||
|
|
@ -1,15 +1,15 @@
|
||||||
package com.kabouzeid.gramophone.ui.fragments.libraryfragments;
|
package com.kabouzeid.gramophone.ui.fragments.mainactivity.library.pager;
|
||||||
|
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.support.v4.app.Fragment;
|
|
||||||
import android.support.v4.app.LoaderManager;
|
import android.support.v4.app.LoaderManager;
|
||||||
|
|
||||||
import com.kabouzeid.gramophone.ui.fragments.LibraryFragment;
|
import com.kabouzeid.gramophone.ui.fragments.AbsMusicServiceFragment;
|
||||||
|
import com.kabouzeid.gramophone.ui.fragments.mainactivity.library.LibraryFragment;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author Karim Abou Zeid (kabouzeid)
|
* @author Karim Abou Zeid (kabouzeid)
|
||||||
*/
|
*/
|
||||||
public class AbsLibraryPagerFragment extends Fragment {
|
public class AbsLibraryPagerFragment extends AbsMusicServiceFragment {
|
||||||
|
|
||||||
/* http://stackoverflow.com/a/2888433 */
|
/* http://stackoverflow.com/a/2888433 */
|
||||||
@Override
|
@Override
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
package com.kabouzeid.gramophone.ui.fragments.libraryfragments;
|
package com.kabouzeid.gramophone.ui.fragments.mainactivity.library.pager;
|
||||||
|
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.support.annotation.LayoutRes;
|
import android.support.annotation.LayoutRes;
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
package com.kabouzeid.gramophone.ui.fragments.libraryfragments;
|
package com.kabouzeid.gramophone.ui.fragments.mainactivity.library.pager;
|
||||||
|
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.support.annotation.LayoutRes;
|
import android.support.annotation.LayoutRes;
|
||||||
|
|
@ -15,7 +15,6 @@ import android.widget.TextView;
|
||||||
|
|
||||||
import com.kabouzeid.appthemehelper.ThemeStore;
|
import com.kabouzeid.appthemehelper.ThemeStore;
|
||||||
import com.kabouzeid.gramophone.R;
|
import com.kabouzeid.gramophone.R;
|
||||||
import com.kabouzeid.gramophone.interfaces.MusicServiceEventListener;
|
|
||||||
import com.kabouzeid.gramophone.util.ViewUtil;
|
import com.kabouzeid.gramophone.util.ViewUtil;
|
||||||
import com.simplecityapps.recyclerview_fastscroll.views.FastScrollRecyclerView;
|
import com.simplecityapps.recyclerview_fastscroll.views.FastScrollRecyclerView;
|
||||||
|
|
||||||
|
|
@ -25,7 +24,7 @@ import butterknife.ButterKnife;
|
||||||
/**
|
/**
|
||||||
* @author Karim Abou Zeid (kabouzeid)
|
* @author Karim Abou Zeid (kabouzeid)
|
||||||
*/
|
*/
|
||||||
public abstract class AbsLibraryPagerRecyclerViewFragment<A extends RecyclerView.Adapter, LM extends RecyclerView.LayoutManager> extends AbsLibraryPagerFragment implements OnOffsetChangedListener, MusicServiceEventListener {
|
public abstract class AbsLibraryPagerRecyclerViewFragment<A extends RecyclerView.Adapter, LM extends RecyclerView.LayoutManager> extends AbsLibraryPagerFragment implements OnOffsetChangedListener {
|
||||||
|
|
||||||
public static final String TAG = AbsLibraryPagerRecyclerViewFragment.class.getSimpleName();
|
public static final String TAG = AbsLibraryPagerRecyclerViewFragment.class.getSimpleName();
|
||||||
|
|
||||||
|
|
@ -59,7 +58,6 @@ public abstract class AbsLibraryPagerRecyclerViewFragment<A extends RecyclerView
|
||||||
super.onViewCreated(view, savedInstanceState);
|
super.onViewCreated(view, savedInstanceState);
|
||||||
|
|
||||||
getLibraryFragment().addOnAppBarOffsetChangedListener(this);
|
getLibraryFragment().addOnAppBarOffsetChangedListener(this);
|
||||||
getLibraryFragment().getMainActivity().addMusicServiceEventListener(this);
|
|
||||||
|
|
||||||
setUpRecyclerView();
|
setUpRecyclerView();
|
||||||
}
|
}
|
||||||
|
|
@ -115,31 +113,6 @@ public abstract class AbsLibraryPagerRecyclerViewFragment<A extends RecyclerView
|
||||||
container.setPadding(container.getPaddingLeft(), container.getPaddingTop(), container.getPaddingRight(), getLibraryFragment().getTotalAppBarScrollingRange() + i);
|
container.setPadding(container.getPaddingLeft(), container.getPaddingTop(), container.getPaddingRight(), getLibraryFragment().getTotalAppBarScrollingRange() + i);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onPlayingMetaChanged() {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onQueueChanged() {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onPlayStateChanged() {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onShuffleModeChanged() {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onRepeatModeChanged() {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
private void checkIsEmpty() {
|
private void checkIsEmpty() {
|
||||||
if (empty != null) {
|
if (empty != null) {
|
||||||
empty.setText(getEmptyMessage());
|
empty.setText(getEmptyMessage());
|
||||||
|
|
@ -166,7 +139,6 @@ public abstract class AbsLibraryPagerRecyclerViewFragment<A extends RecyclerView
|
||||||
public void onDestroyView() {
|
public void onDestroyView() {
|
||||||
super.onDestroyView();
|
super.onDestroyView();
|
||||||
getLibraryFragment().removeOnAppBarOffsetChangedListener(this);
|
getLibraryFragment().removeOnAppBarOffsetChangedListener(this);
|
||||||
getLibraryFragment().getMainActivity().removeMusicServiceEventListener(this);
|
|
||||||
ButterKnife.unbind(this);
|
ButterKnife.unbind(this);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
package com.kabouzeid.gramophone.ui.fragments.libraryfragments;
|
package com.kabouzeid.gramophone.ui.fragments.mainactivity.library.pager;
|
||||||
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
|
|
@ -17,8 +17,6 @@ import com.kabouzeid.gramophone.util.PreferenceUtil;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
|
||||||
import hugo.weaving.DebugLog;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author Karim Abou Zeid (kabouzeid)
|
* @author Karim Abou Zeid (kabouzeid)
|
||||||
*/
|
*/
|
||||||
|
|
@ -103,19 +101,16 @@ public class AlbumsFragment extends AbsLibraryPagerRecyclerViewCustomGridSizeFra
|
||||||
getLoaderManager().restartLoader(LOADER_ID, null, this);
|
getLoaderManager().restartLoader(LOADER_ID, null, this);
|
||||||
}
|
}
|
||||||
|
|
||||||
@DebugLog
|
|
||||||
@Override
|
@Override
|
||||||
public Loader<ArrayList<Album>> onCreateLoader(int id, Bundle args) {
|
public Loader<ArrayList<Album>> onCreateLoader(int id, Bundle args) {
|
||||||
return new AsyncAlbumLoader(getActivity());
|
return new AsyncAlbumLoader(getActivity());
|
||||||
}
|
}
|
||||||
|
|
||||||
@DebugLog
|
|
||||||
@Override
|
@Override
|
||||||
public void onLoadFinished(Loader<ArrayList<Album>> loader, ArrayList<Album> data) {
|
public void onLoadFinished(Loader<ArrayList<Album>> loader, ArrayList<Album> data) {
|
||||||
getAdapter().swapDataSet(data);
|
getAdapter().swapDataSet(data);
|
||||||
}
|
}
|
||||||
|
|
||||||
@DebugLog
|
|
||||||
@Override
|
@Override
|
||||||
public void onLoaderReset(Loader<ArrayList<Album>> loader) {
|
public void onLoaderReset(Loader<ArrayList<Album>> loader) {
|
||||||
getAdapter().swapDataSet(new ArrayList<Album>());
|
getAdapter().swapDataSet(new ArrayList<Album>());
|
||||||
|
|
@ -126,7 +121,6 @@ public class AlbumsFragment extends AbsLibraryPagerRecyclerViewCustomGridSizeFra
|
||||||
super(context);
|
super(context);
|
||||||
}
|
}
|
||||||
|
|
||||||
@DebugLog
|
|
||||||
@Override
|
@Override
|
||||||
public ArrayList<Album> loadInBackground() {
|
public ArrayList<Album> loadInBackground() {
|
||||||
return AlbumLoader.getAllAlbums(getContext());
|
return AlbumLoader.getAllAlbums(getContext());
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
package com.kabouzeid.gramophone.ui.fragments.libraryfragments;
|
package com.kabouzeid.gramophone.ui.fragments.mainactivity.library.pager;
|
||||||
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
|
|
@ -17,8 +17,6 @@ import com.kabouzeid.gramophone.util.PreferenceUtil;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
|
||||||
import hugo.weaving.DebugLog;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author Karim Abou Zeid (kabouzeid)
|
* @author Karim Abou Zeid (kabouzeid)
|
||||||
*/
|
*/
|
||||||
|
|
@ -105,19 +103,19 @@ public class ArtistsFragment extends AbsLibraryPagerRecyclerViewCustomGridSizeFr
|
||||||
getAdapter().notifyDataSetChanged();
|
getAdapter().notifyDataSetChanged();
|
||||||
}
|
}
|
||||||
|
|
||||||
@DebugLog
|
|
||||||
@Override
|
@Override
|
||||||
public Loader<ArrayList<Artist>> onCreateLoader(int id, Bundle args) {
|
public Loader<ArrayList<Artist>> onCreateLoader(int id, Bundle args) {
|
||||||
return new AsyncArtistLoader(getActivity());
|
return new AsyncArtistLoader(getActivity());
|
||||||
}
|
}
|
||||||
|
|
||||||
@DebugLog
|
|
||||||
@Override
|
@Override
|
||||||
public void onLoadFinished(Loader<ArrayList<Artist>> loader, ArrayList<Artist> data) {
|
public void onLoadFinished(Loader<ArrayList<Artist>> loader, ArrayList<Artist> data) {
|
||||||
getAdapter().swapDataSet(data);
|
getAdapter().swapDataSet(data);
|
||||||
}
|
}
|
||||||
|
|
||||||
@DebugLog
|
|
||||||
@Override
|
@Override
|
||||||
public void onLoaderReset(Loader<ArrayList<Artist>> loader) {
|
public void onLoaderReset(Loader<ArrayList<Artist>> loader) {
|
||||||
getAdapter().swapDataSet(new ArrayList<Artist>());
|
getAdapter().swapDataSet(new ArrayList<Artist>());
|
||||||
|
|
@ -128,7 +126,6 @@ public class ArtistsFragment extends AbsLibraryPagerRecyclerViewCustomGridSizeFr
|
||||||
super(context);
|
super(context);
|
||||||
}
|
}
|
||||||
|
|
||||||
@DebugLog
|
|
||||||
@Override
|
@Override
|
||||||
public ArrayList<Artist> loadInBackground() {
|
public ArrayList<Artist> loadInBackground() {
|
||||||
return ArtistLoader.getAllArtists(getContext());
|
return ArtistLoader.getAllArtists(getContext());
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
package com.kabouzeid.gramophone.ui.fragments.libraryfragments;
|
package com.kabouzeid.gramophone.ui.fragments.mainactivity.library.pager;
|
||||||
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
|
|
@ -19,8 +19,6 @@ import com.kabouzeid.gramophone.model.smartplaylist.MyTopTracksPlaylist;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
|
||||||
import hugo.weaving.DebugLog;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author Karim Abou Zeid (kabouzeid)
|
* @author Karim Abou Zeid (kabouzeid)
|
||||||
*/
|
*/
|
||||||
|
|
@ -59,19 +57,16 @@ public class PlaylistsFragment extends AbsLibraryPagerRecyclerViewFragment<Playl
|
||||||
getLoaderManager().restartLoader(LOADER_ID, null, this);
|
getLoaderManager().restartLoader(LOADER_ID, null, this);
|
||||||
}
|
}
|
||||||
|
|
||||||
@DebugLog
|
|
||||||
@Override
|
@Override
|
||||||
public Loader<ArrayList<Playlist>> onCreateLoader(int id, Bundle args) {
|
public Loader<ArrayList<Playlist>> onCreateLoader(int id, Bundle args) {
|
||||||
return new AsyncPlaylistLoader(getActivity());
|
return new AsyncPlaylistLoader(getActivity());
|
||||||
}
|
}
|
||||||
|
|
||||||
@DebugLog
|
|
||||||
@Override
|
@Override
|
||||||
public void onLoadFinished(Loader<ArrayList<Playlist>> loader, ArrayList<Playlist> data) {
|
public void onLoadFinished(Loader<ArrayList<Playlist>> loader, ArrayList<Playlist> data) {
|
||||||
getAdapter().swapDataSet(data);
|
getAdapter().swapDataSet(data);
|
||||||
}
|
}
|
||||||
|
|
||||||
@DebugLog
|
|
||||||
@Override
|
@Override
|
||||||
public void onLoaderReset(Loader<ArrayList<Playlist>> loader) {
|
public void onLoaderReset(Loader<ArrayList<Playlist>> loader) {
|
||||||
getAdapter().swapDataSet(new ArrayList<Playlist>());
|
getAdapter().swapDataSet(new ArrayList<Playlist>());
|
||||||
|
|
@ -94,7 +89,6 @@ public class PlaylistsFragment extends AbsLibraryPagerRecyclerViewFragment<Playl
|
||||||
return playlists;
|
return playlists;
|
||||||
}
|
}
|
||||||
|
|
||||||
@DebugLog
|
|
||||||
@Override
|
@Override
|
||||||
public ArrayList<Playlist> loadInBackground() {
|
public ArrayList<Playlist> loadInBackground() {
|
||||||
return getAllPlaylists(getContext());
|
return getAllPlaylists(getContext());
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
package com.kabouzeid.gramophone.ui.fragments.libraryfragments;
|
package com.kabouzeid.gramophone.ui.fragments.mainactivity.library.pager;
|
||||||
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
|
|
@ -18,8 +18,6 @@ import com.kabouzeid.gramophone.util.PreferenceUtil;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
|
||||||
import hugo.weaving.DebugLog;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author Karim Abou Zeid (kabouzeid)
|
* @author Karim Abou Zeid (kabouzeid)
|
||||||
*/
|
*/
|
||||||
|
|
@ -116,19 +114,16 @@ public class SongsFragment extends AbsLibraryPagerRecyclerViewCustomGridSizeFrag
|
||||||
getAdapter().notifyDataSetChanged();
|
getAdapter().notifyDataSetChanged();
|
||||||
}
|
}
|
||||||
|
|
||||||
@DebugLog
|
|
||||||
@Override
|
@Override
|
||||||
public Loader<ArrayList<Song>> onCreateLoader(int id, Bundle args) {
|
public Loader<ArrayList<Song>> onCreateLoader(int id, Bundle args) {
|
||||||
return new AsyncSongLoader(getActivity());
|
return new AsyncSongLoader(getActivity());
|
||||||
}
|
}
|
||||||
|
|
||||||
@DebugLog
|
|
||||||
@Override
|
@Override
|
||||||
public void onLoadFinished(Loader<ArrayList<Song>> loader, ArrayList<Song> data) {
|
public void onLoadFinished(Loader<ArrayList<Song>> loader, ArrayList<Song> data) {
|
||||||
getAdapter().swapDataSet(data);
|
getAdapter().swapDataSet(data);
|
||||||
}
|
}
|
||||||
|
|
||||||
@DebugLog
|
|
||||||
@Override
|
@Override
|
||||||
public void onLoaderReset(Loader<ArrayList<Song>> loader) {
|
public void onLoaderReset(Loader<ArrayList<Song>> loader) {
|
||||||
getAdapter().swapDataSet(new ArrayList<Song>());
|
getAdapter().swapDataSet(new ArrayList<Song>());
|
||||||
|
|
@ -139,7 +134,6 @@ public class SongsFragment extends AbsLibraryPagerRecyclerViewCustomGridSizeFrag
|
||||||
super(context);
|
super(context);
|
||||||
}
|
}
|
||||||
|
|
||||||
@DebugLog
|
|
||||||
@Override
|
@Override
|
||||||
public ArrayList<Song> loadInBackground() {
|
public ArrayList<Song> loadInBackground() {
|
||||||
return SongLoader.getAllSongs(getContext());
|
return SongLoader.getAllSongs(getContext());
|
||||||
|
|
@ -5,7 +5,6 @@ import android.content.res.ColorStateList;
|
||||||
import android.graphics.PorterDuff;
|
import android.graphics.PorterDuff;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.support.annotation.Nullable;
|
import android.support.annotation.Nullable;
|
||||||
import android.support.v4.app.Fragment;
|
|
||||||
import android.view.GestureDetector;
|
import android.view.GestureDetector;
|
||||||
import android.view.LayoutInflater;
|
import android.view.LayoutInflater;
|
||||||
import android.view.MotionEvent;
|
import android.view.MotionEvent;
|
||||||
|
|
@ -20,8 +19,7 @@ import com.kabouzeid.gramophone.R;
|
||||||
import com.kabouzeid.gramophone.helper.MusicPlayerRemote;
|
import com.kabouzeid.gramophone.helper.MusicPlayerRemote;
|
||||||
import com.kabouzeid.gramophone.helper.MusicProgressViewUpdateHelper;
|
import com.kabouzeid.gramophone.helper.MusicProgressViewUpdateHelper;
|
||||||
import com.kabouzeid.gramophone.helper.PlayPauseButtonOnClickHandler;
|
import com.kabouzeid.gramophone.helper.PlayPauseButtonOnClickHandler;
|
||||||
import com.kabouzeid.gramophone.interfaces.MusicServiceEventListener;
|
import com.kabouzeid.gramophone.ui.fragments.AbsMusicServiceFragment;
|
||||||
import com.kabouzeid.gramophone.ui.activities.base.AbsMusicServiceActivity;
|
|
||||||
import com.kabouzeid.gramophone.views.PlayPauseDrawable;
|
import com.kabouzeid.gramophone.views.PlayPauseDrawable;
|
||||||
|
|
||||||
import butterknife.Bind;
|
import butterknife.Bind;
|
||||||
|
|
@ -31,11 +29,9 @@ import me.zhanghai.android.materialprogressbar.MaterialProgressBar;
|
||||||
/**
|
/**
|
||||||
* @author Karim Abou Zeid (kabouzeid)
|
* @author Karim Abou Zeid (kabouzeid)
|
||||||
*/
|
*/
|
||||||
public class MiniPlayerFragment extends Fragment implements MusicServiceEventListener, MusicProgressViewUpdateHelper.Callback {
|
public class MiniPlayerFragment extends AbsMusicServiceFragment implements MusicProgressViewUpdateHelper.Callback {
|
||||||
@Bind(R.id.mini_player_title)
|
@Bind(R.id.mini_player_title)
|
||||||
TextView miniPlayerTitle;
|
TextView miniPlayerTitle;
|
||||||
@Bind(R.id.mini_player_image)
|
|
||||||
ImageView miniPlayerImage;
|
|
||||||
@Bind(R.id.mini_player_play_pause_button)
|
@Bind(R.id.mini_player_play_pause_button)
|
||||||
ImageView miniPlayerPlayPauseButton;
|
ImageView miniPlayerPlayPauseButton;
|
||||||
@Bind(R.id.progress_bar)
|
@Bind(R.id.progress_bar)
|
||||||
|
|
@ -45,24 +41,6 @@ public class MiniPlayerFragment extends Fragment implements MusicServiceEventLis
|
||||||
|
|
||||||
private MusicProgressViewUpdateHelper progressViewUpdateHelper;
|
private MusicProgressViewUpdateHelper progressViewUpdateHelper;
|
||||||
|
|
||||||
private AbsMusicServiceActivity activity;
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onAttach(Context context) {
|
|
||||||
super.onAttach(context);
|
|
||||||
try {
|
|
||||||
activity = (AbsMusicServiceActivity) context;
|
|
||||||
} catch (ClassCastException e) {
|
|
||||||
throw new RuntimeException(context.getClass().getSimpleName() + " must be an instance of " + AbsMusicServiceActivity.class.getSimpleName());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onDetach() {
|
|
||||||
super.onDetach();
|
|
||||||
activity = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onCreate(@Nullable Bundle savedInstanceState) {
|
public void onCreate(@Nullable Bundle savedInstanceState) {
|
||||||
super.onCreate(savedInstanceState);
|
super.onCreate(savedInstanceState);
|
||||||
|
|
@ -80,39 +58,41 @@ public class MiniPlayerFragment extends Fragment implements MusicServiceEventLis
|
||||||
super.onViewCreated(view, savedInstanceState);
|
super.onViewCreated(view, savedInstanceState);
|
||||||
ButterKnife.bind(this, view);
|
ButterKnife.bind(this, view);
|
||||||
|
|
||||||
view.setOnTouchListener(new FlingPlayBackController(activity));
|
view.setOnTouchListener(new FlingPlayBackController(getActivity()));
|
||||||
setUpMiniPlayer();
|
setUpMiniPlayer();
|
||||||
|
|
||||||
activity.addMusicServiceEventListener(this);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onDestroyView() {
|
public void onDestroyView() {
|
||||||
super.onDestroyView();
|
super.onDestroyView();
|
||||||
activity.removeMusicServiceEventListener(this);
|
|
||||||
ButterKnife.unbind(this);
|
ButterKnife.unbind(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void setUpMiniPlayer() {
|
private void setUpMiniPlayer() {
|
||||||
setUpPlayPauseButton();
|
setUpPlayPauseButton();
|
||||||
progressBar.setProgressTintList(ColorStateList.valueOf(ThemeStore.accentColor(activity)));
|
progressBar.setProgressTintList(ColorStateList.valueOf(ThemeStore.accentColor(getActivity())));
|
||||||
}
|
}
|
||||||
|
|
||||||
private void setUpPlayPauseButton() {
|
private void setUpPlayPauseButton() {
|
||||||
updatePlayPauseDrawableState(false);
|
miniPlayerPlayPauseDrawable = new PlayPauseDrawable(getActivity());
|
||||||
miniPlayerPlayPauseButton.setImageDrawable(miniPlayerPlayPauseDrawable);
|
miniPlayerPlayPauseButton.setImageDrawable(miniPlayerPlayPauseDrawable);
|
||||||
miniPlayerPlayPauseButton.setColorFilter(ATHUtil.resolveColor(activity, R.attr.iconColor, ThemeStore.textColorSecondary(getActivity())), PorterDuff.Mode.SRC_IN);
|
miniPlayerPlayPauseButton.setColorFilter(ATHUtil.resolveColor(getActivity(), R.attr.iconColor, ThemeStore.textColorSecondary(getActivity())), PorterDuff.Mode.SRC_IN);
|
||||||
miniPlayerPlayPauseButton.setOnClickListener(new PlayPauseButtonOnClickHandler());
|
miniPlayerPlayPauseButton.setOnClickListener(new PlayPauseButtonOnClickHandler());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
private void updateSongTitle() {
|
||||||
public void onPlayingMetaChanged() {
|
|
||||||
miniPlayerTitle.setText(MusicPlayerRemote.getCurrentSong().title);
|
miniPlayerTitle.setText(MusicPlayerRemote.getCurrentSong().title);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onQueueChanged() {
|
public void onServiceConnected() {
|
||||||
|
updateSongTitle();
|
||||||
|
updatePlayPauseDrawableState(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onPlayingMetaChanged() {
|
||||||
|
updateSongTitle();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
@ -120,21 +100,6 @@ public class MiniPlayerFragment extends Fragment implements MusicServiceEventLis
|
||||||
updatePlayPauseDrawableState(true);
|
updatePlayPauseDrawableState(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onRepeatModeChanged() {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onShuffleModeChanged() {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onMediaStoreChanged() {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onUpdateProgressViews(int progress, int total) {
|
public void onUpdateProgressViews(int progress, int total) {
|
||||||
progressBar.setMax(total);
|
progressBar.setMax(total);
|
||||||
|
|
@ -182,9 +147,6 @@ public class MiniPlayerFragment extends Fragment implements MusicServiceEventLis
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void updatePlayPauseDrawableState(boolean animate) {
|
protected void updatePlayPauseDrawableState(boolean animate) {
|
||||||
if (miniPlayerPlayPauseDrawable == null) {
|
|
||||||
miniPlayerPlayPauseDrawable = new PlayPauseDrawable(activity);
|
|
||||||
}
|
|
||||||
if (MusicPlayerRemote.isPlaying()) {
|
if (MusicPlayerRemote.isPlaying()) {
|
||||||
miniPlayerPlayPauseDrawable.setPause(animate);
|
miniPlayerPlayPauseDrawable.setPause(animate);
|
||||||
} else {
|
} else {
|
||||||
|
|
|
||||||
|
|
@ -1,11 +1,9 @@
|
||||||
package com.kabouzeid.gramophone.ui.fragments.player;
|
package com.kabouzeid.gramophone.ui.fragments.player;
|
||||||
|
|
||||||
import android.content.Context;
|
|
||||||
import android.graphics.Color;
|
import android.graphics.Color;
|
||||||
import android.graphics.PorterDuff;
|
import android.graphics.PorterDuff;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.support.design.widget.FloatingActionButton;
|
import android.support.design.widget.FloatingActionButton;
|
||||||
import android.support.v4.app.Fragment;
|
|
||||||
import android.view.LayoutInflater;
|
import android.view.LayoutInflater;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
|
|
@ -21,10 +19,9 @@ import com.kabouzeid.gramophone.R;
|
||||||
import com.kabouzeid.gramophone.helper.MusicPlayerRemote;
|
import com.kabouzeid.gramophone.helper.MusicPlayerRemote;
|
||||||
import com.kabouzeid.gramophone.helper.MusicProgressViewUpdateHelper;
|
import com.kabouzeid.gramophone.helper.MusicProgressViewUpdateHelper;
|
||||||
import com.kabouzeid.gramophone.helper.PlayPauseButtonOnClickHandler;
|
import com.kabouzeid.gramophone.helper.PlayPauseButtonOnClickHandler;
|
||||||
import com.kabouzeid.gramophone.interfaces.MusicServiceEventListener;
|
|
||||||
import com.kabouzeid.gramophone.misc.SimpleOnSeekbarChangeListener;
|
import com.kabouzeid.gramophone.misc.SimpleOnSeekbarChangeListener;
|
||||||
import com.kabouzeid.gramophone.service.MusicService;
|
import com.kabouzeid.gramophone.service.MusicService;
|
||||||
import com.kabouzeid.gramophone.ui.activities.base.AbsMusicServiceActivity;
|
import com.kabouzeid.gramophone.ui.fragments.AbsMusicServiceFragment;
|
||||||
import com.kabouzeid.gramophone.util.MusicUtil;
|
import com.kabouzeid.gramophone.util.MusicUtil;
|
||||||
import com.kabouzeid.gramophone.views.PlayPauseDrawable;
|
import com.kabouzeid.gramophone.views.PlayPauseDrawable;
|
||||||
|
|
||||||
|
|
@ -34,7 +31,7 @@ import butterknife.ButterKnife;
|
||||||
/**
|
/**
|
||||||
* @author Karim Abou Zeid (kabouzeid)
|
* @author Karim Abou Zeid (kabouzeid)
|
||||||
*/
|
*/
|
||||||
public class PlaybackControlsFragment extends Fragment implements MusicServiceEventListener, MusicProgressViewUpdateHelper.Callback {
|
public class PlaybackControlsFragment extends AbsMusicServiceFragment implements MusicProgressViewUpdateHelper.Callback {
|
||||||
|
|
||||||
@Bind(R.id.player_play_pause_fab)
|
@Bind(R.id.player_play_pause_fab)
|
||||||
FloatingActionButton playPauseFab;
|
FloatingActionButton playPauseFab;
|
||||||
|
|
@ -56,28 +53,11 @@ public class PlaybackControlsFragment extends Fragment implements MusicServiceEv
|
||||||
|
|
||||||
private PlayPauseDrawable playerFabPlayPauseDrawable;
|
private PlayPauseDrawable playerFabPlayPauseDrawable;
|
||||||
|
|
||||||
private AbsMusicServiceActivity activity;
|
|
||||||
private int lastPlaybackControlsColor;
|
private int lastPlaybackControlsColor;
|
||||||
private int lastDisabledPlaybackControlsColor;
|
private int lastDisabledPlaybackControlsColor;
|
||||||
|
|
||||||
private MusicProgressViewUpdateHelper progressViewUpdateHelper;
|
private MusicProgressViewUpdateHelper progressViewUpdateHelper;
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onAttach(Context context) {
|
|
||||||
super.onAttach(context);
|
|
||||||
try {
|
|
||||||
activity = (AbsMusicServiceActivity) context;
|
|
||||||
} catch (ClassCastException e) {
|
|
||||||
throw new RuntimeException(context.getClass().getSimpleName() + " must be an instance of " + AbsMusicServiceActivity.class.getSimpleName());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onDetach() {
|
|
||||||
super.onDetach();
|
|
||||||
activity = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onCreate(Bundle savedInstanceState) {
|
public void onCreate(Bundle savedInstanceState) {
|
||||||
super.onCreate(savedInstanceState);
|
super.onCreate(savedInstanceState);
|
||||||
|
|
@ -94,7 +74,6 @@ public class PlaybackControlsFragment extends Fragment implements MusicServiceEv
|
||||||
public void onViewCreated(View view, Bundle savedInstanceState) {
|
public void onViewCreated(View view, Bundle savedInstanceState) {
|
||||||
super.onViewCreated(view, savedInstanceState);
|
super.onViewCreated(view, savedInstanceState);
|
||||||
ButterKnife.bind(this, view);
|
ButterKnife.bind(this, view);
|
||||||
activity.addMusicServiceEventListener(this);
|
|
||||||
setUpMusicControllers();
|
setUpMusicControllers();
|
||||||
updateProgressTextColor();
|
updateProgressTextColor();
|
||||||
}
|
}
|
||||||
|
|
@ -102,7 +81,6 @@ public class PlaybackControlsFragment extends Fragment implements MusicServiceEv
|
||||||
@Override
|
@Override
|
||||||
public void onDestroyView() {
|
public void onDestroyView() {
|
||||||
super.onDestroyView();
|
super.onDestroyView();
|
||||||
activity.removeMusicServiceEventListener(this);
|
|
||||||
ButterKnife.unbind(this);
|
ButterKnife.unbind(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -119,12 +97,10 @@ public class PlaybackControlsFragment extends Fragment implements MusicServiceEv
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onPlayingMetaChanged() {
|
public void onServiceConnected() {
|
||||||
}
|
updatePlayPauseDrawableState(false);
|
||||||
|
updateRepeatState();
|
||||||
@Override
|
updateShuffleState();
|
||||||
public void onQueueChanged() {
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
@ -142,13 +118,8 @@ public class PlaybackControlsFragment extends Fragment implements MusicServiceEv
|
||||||
updateShuffleState();
|
updateShuffleState();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
public void setDark(boolean dark) {
|
||||||
public void onMediaStoreChanged() {
|
if (dark) {
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setColor(int color) {
|
|
||||||
if (ColorUtil.isColorLight(color)) {
|
|
||||||
lastPlaybackControlsColor = MaterialValueHelper.getSecondaryTextColor(getActivity(), true);
|
lastPlaybackControlsColor = MaterialValueHelper.getSecondaryTextColor(getActivity(), true);
|
||||||
lastDisabledPlaybackControlsColor = MaterialValueHelper.getSecondaryDisabledTextColor(getActivity(), true);
|
lastDisabledPlaybackControlsColor = MaterialValueHelper.getSecondaryDisabledTextColor(getActivity(), true);
|
||||||
} else {
|
} else {
|
||||||
|
|
@ -166,9 +137,9 @@ public class PlaybackControlsFragment extends Fragment implements MusicServiceEv
|
||||||
final int fabColor = Color.WHITE;
|
final int fabColor = Color.WHITE;
|
||||||
TintHelper.setTintAuto(playPauseFab, fabColor, true);
|
TintHelper.setTintAuto(playPauseFab, fabColor, true);
|
||||||
|
|
||||||
updatePlayPauseDrawableState(false);
|
playerFabPlayPauseDrawable = new PlayPauseDrawable(getActivity());
|
||||||
// Note: set the drawable AFTER TintHelper.setTintAuto() was called
|
|
||||||
playPauseFab.setImageDrawable(playerFabPlayPauseDrawable);
|
playPauseFab.setImageDrawable(playerFabPlayPauseDrawable); // Note: set the drawable AFTER TintHelper.setTintAuto() was called
|
||||||
playPauseFab.setColorFilter(MaterialValueHelper.getPrimaryTextColor(getContext(), ColorUtil.isColorLight(fabColor)), PorterDuff.Mode.SRC_IN);
|
playPauseFab.setColorFilter(MaterialValueHelper.getPrimaryTextColor(getContext(), ColorUtil.isColorLight(fabColor)), PorterDuff.Mode.SRC_IN);
|
||||||
playPauseFab.setOnClickListener(new PlayPauseButtonOnClickHandler());
|
playPauseFab.setOnClickListener(new PlayPauseButtonOnClickHandler());
|
||||||
playPauseFab.post(new Runnable() {
|
playPauseFab.post(new Runnable() {
|
||||||
|
|
@ -183,9 +154,6 @@ public class PlaybackControlsFragment extends Fragment implements MusicServiceEv
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void updatePlayPauseDrawableState(boolean animate) {
|
protected void updatePlayPauseDrawableState(boolean animate) {
|
||||||
if (playerFabPlayPauseDrawable == null) {
|
|
||||||
playerFabPlayPauseDrawable = new PlayPauseDrawable(activity);
|
|
||||||
}
|
|
||||||
if (MusicPlayerRemote.isPlaying()) {
|
if (MusicPlayerRemote.isPlaying()) {
|
||||||
playerFabPlayPauseDrawable.setPause(animate);
|
playerFabPlayPauseDrawable.setPause(animate);
|
||||||
} else {
|
} else {
|
||||||
|
|
@ -229,7 +197,6 @@ public class PlaybackControlsFragment extends Fragment implements MusicServiceEv
|
||||||
}
|
}
|
||||||
|
|
||||||
private void setUpShuffleButton() {
|
private void setUpShuffleButton() {
|
||||||
updateShuffleState();
|
|
||||||
shuffleButton.setOnClickListener(new View.OnClickListener() {
|
shuffleButton.setOnClickListener(new View.OnClickListener() {
|
||||||
@Override
|
@Override
|
||||||
public void onClick(View v) {
|
public void onClick(View v) {
|
||||||
|
|
@ -250,7 +217,6 @@ public class PlaybackControlsFragment extends Fragment implements MusicServiceEv
|
||||||
}
|
}
|
||||||
|
|
||||||
private void setUpRepeatButton() {
|
private void setUpRepeatButton() {
|
||||||
updateRepeatState();
|
|
||||||
repeatButton.setOnClickListener(new View.OnClickListener() {
|
repeatButton.setOnClickListener(new View.OnClickListener() {
|
||||||
@Override
|
@Override
|
||||||
public void onClick(View v) {
|
public void onClick(View v) {
|
||||||
|
|
|
||||||
|
|
@ -47,7 +47,6 @@ public class PlayerAlbumCoverFragment extends AbsMusicServiceFragment implements
|
||||||
@Override
|
@Override
|
||||||
public void onViewCreated(View view, Bundle savedInstanceState) {
|
public void onViewCreated(View view, Bundle savedInstanceState) {
|
||||||
super.onViewCreated(view, savedInstanceState);
|
super.onViewCreated(view, savedInstanceState);
|
||||||
updatePlayingQueue();
|
|
||||||
viewPager.addOnPageChangeListener(this);
|
viewPager.addOnPageChangeListener(this);
|
||||||
viewPager.setOnTouchListener(new View.OnTouchListener() {
|
viewPager.setOnTouchListener(new View.OnTouchListener() {
|
||||||
GestureDetector gestureDetector = new GestureDetector(getActivity(), new GestureDetector.SimpleOnGestureListener() {
|
GestureDetector gestureDetector = new GestureDetector(getActivity(), new GestureDetector.SimpleOnGestureListener() {
|
||||||
|
|
@ -75,6 +74,11 @@ public class PlayerAlbumCoverFragment extends AbsMusicServiceFragment implements
|
||||||
ButterKnife.unbind(this);
|
ButterKnife.unbind(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onServiceConnected() {
|
||||||
|
updatePlayingQueue();
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onPlayingMetaChanged() {
|
public void onPlayingMetaChanged() {
|
||||||
viewPager.setCurrentItem(MusicPlayerRemote.getPosition());
|
viewPager.setCurrentItem(MusicPlayerRemote.getPosition());
|
||||||
|
|
@ -88,7 +92,6 @@ public class PlayerAlbumCoverFragment extends AbsMusicServiceFragment implements
|
||||||
private void updatePlayingQueue() {
|
private void updatePlayingQueue() {
|
||||||
viewPager.setAdapter(new AlbumCoverPagerAdapter(getFragmentManager(), MusicPlayerRemote.getPlayingQueue()));
|
viewPager.setAdapter(new AlbumCoverPagerAdapter(getFragmentManager(), MusicPlayerRemote.getPlayingQueue()));
|
||||||
viewPager.setCurrentItem(MusicPlayerRemote.getPosition());
|
viewPager.setCurrentItem(MusicPlayerRemote.getPosition());
|
||||||
// doesn't get called automatically for some reason
|
|
||||||
onPageSelected(MusicPlayerRemote.getPosition());
|
onPageSelected(MusicPlayerRemote.getPosition());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -65,7 +65,6 @@ public class PlayerFragment extends AbsPlayerFragment implements PlayerAlbumCove
|
||||||
@Bind(R.id.player_queue_sub_header)
|
@Bind(R.id.player_queue_sub_header)
|
||||||
TextView playerQueueSubHeader;
|
TextView playerQueueSubHeader;
|
||||||
|
|
||||||
|
|
||||||
private int lastColor;
|
private int lastColor;
|
||||||
|
|
||||||
private PlaybackControlsFragment playbackControlsFragment;
|
private PlaybackControlsFragment playbackControlsFragment;
|
||||||
|
|
@ -154,9 +153,16 @@ public class PlayerFragment extends AbsPlayerFragment implements PlayerAlbumCove
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onPlayingMetaChanged() {
|
public void onServiceConnected() {
|
||||||
updateIsFavorite();
|
updateQueue();
|
||||||
updateCurrentSong();
|
updateCurrentSong();
|
||||||
|
updateIsFavorite();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onPlayingMetaChanged() {
|
||||||
|
updateCurrentSong();
|
||||||
|
updateIsFavorite();
|
||||||
updateQueuePosition();
|
updateQueuePosition();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -215,6 +221,7 @@ public class PlayerFragment extends AbsPlayerFragment implements PlayerAlbumCove
|
||||||
playingQueueAdapter = new PlayingQueueAdapter(
|
playingQueueAdapter = new PlayingQueueAdapter(
|
||||||
((AppCompatActivity) getActivity()),
|
((AppCompatActivity) getActivity()),
|
||||||
MusicPlayerRemote.getPlayingQueue(),
|
MusicPlayerRemote.getPlayingQueue(),
|
||||||
|
MusicPlayerRemote.getPosition(),
|
||||||
R.layout.item_list,
|
R.layout.item_list,
|
||||||
false,
|
false,
|
||||||
null);
|
null);
|
||||||
|
|
@ -227,6 +234,8 @@ public class PlayerFragment extends AbsPlayerFragment implements PlayerAlbumCove
|
||||||
recyclerView.setItemAnimator(animator);
|
recyclerView.setItemAnimator(animator);
|
||||||
|
|
||||||
recyclerViewDragDropManager.attachRecyclerView(recyclerView);
|
recyclerViewDragDropManager.attachRecyclerView(recyclerView);
|
||||||
|
|
||||||
|
layoutManager.scrollToPositionWithOffset(MusicPlayerRemote.getPosition() + 1, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -287,7 +296,7 @@ public class PlayerFragment extends AbsPlayerFragment implements PlayerAlbumCove
|
||||||
@Override
|
@Override
|
||||||
public void onColorChanged(int color) {
|
public void onColorChanged(int color) {
|
||||||
animateColorChange(color);
|
animateColorChange(color);
|
||||||
playbackControlsFragment.setColor(color);
|
playbackControlsFragment.setDark(ColorUtil.isColorLight(color));
|
||||||
getCallbacks().onPaletteColorChanged();
|
getCallbacks().onPaletteColorChanged();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -9,7 +9,7 @@ import android.support.annotation.StyleRes;
|
||||||
|
|
||||||
import com.kabouzeid.gramophone.R;
|
import com.kabouzeid.gramophone.R;
|
||||||
import com.kabouzeid.gramophone.helper.SortOrder;
|
import com.kabouzeid.gramophone.helper.SortOrder;
|
||||||
import com.kabouzeid.gramophone.ui.fragments.FolderFragment;
|
import com.kabouzeid.gramophone.ui.fragments.mainactivity.folders.FoldersFragment;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
|
|
||||||
|
|
@ -317,7 +317,7 @@ public final class PreferenceUtil {
|
||||||
}
|
}
|
||||||
|
|
||||||
public final File getStartDirectory() {
|
public final File getStartDirectory() {
|
||||||
return new File(mPreferences.getString(START_DIRECTORY, FolderFragment.getDefaultStartDirectory().getPath()));
|
return new File(mPreferences.getString(START_DIRECTORY, FoldersFragment.getDefaultStartDirectory().getPath()));
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setStartDirectory(File file) {
|
public void setStartDirectory(File file) {
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,7 @@
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:orientation="vertical"
|
android:orientation="vertical"
|
||||||
tools:context="com.kabouzeid.gramophone.ui.fragments.FolderFragment">
|
tools:context=".ui.fragments.mainactivity.folders.FoldersFragment">
|
||||||
|
|
||||||
<FrameLayout
|
<FrameLayout
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,7 @@
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:orientation="vertical"
|
android:orientation="vertical"
|
||||||
tools:context="com.kabouzeid.gramophone.ui.fragments.LibraryFragment">
|
tools:context=".ui.fragments.mainactivity.library.LibraryFragment">
|
||||||
|
|
||||||
<FrameLayout
|
<FrameLayout
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue