update abstract music service activity

This commit is contained in:
dkanada 2020-07-25 17:13:11 +09:00
commit e89aa2e9ef
20 changed files with 18 additions and 132 deletions

View file

@ -7,13 +7,11 @@ public interface MusicServiceEventListener {
void onQueueChanged(); void onQueueChanged();
void onPlayingMetaChanged(); void onPlayMetadataChanged();
void onPlayStateChanged(); void onPlayStateChanged();
void onRepeatModeChanged(); void onRepeatModeChanged();
void onShuffleModeChanged(); void onShuffleModeChanged();
void onMediaStoreChanged();
} }

View file

@ -87,7 +87,6 @@ public class MusicService extends Service implements SharedPreferences.OnSharedP
public static final String REPEAT_MODE_CHANGED = PHONOGRAPH_PACKAGE_NAME + ".repeatmodechanged"; public static final String REPEAT_MODE_CHANGED = PHONOGRAPH_PACKAGE_NAME + ".repeatmodechanged";
public static final String SHUFFLE_MODE_CHANGED = PHONOGRAPH_PACKAGE_NAME + ".shufflemodechanged"; public static final String SHUFFLE_MODE_CHANGED = PHONOGRAPH_PACKAGE_NAME + ".shufflemodechanged";
public static final String MEDIA_STORE_CHANGED = PHONOGRAPH_PACKAGE_NAME + ".mediastorechanged";
public static final String SAVED_POSITION = "POSITION"; public static final String SAVED_POSITION = "POSITION";
public static final String SAVED_POSITION_IN_TRACK = "POSITION_IN_TRACK"; public static final String SAVED_POSITION_IN_TRACK = "POSITION_IN_TRACK";
@ -160,7 +159,6 @@ public class MusicService extends Service implements SharedPreferences.OnSharedP
} }
}; };
private ContentObserver mediaStoreObserver;
private boolean notHandledMetaChangedForCurrentTrack; private boolean notHandledMetaChangedForCurrentTrack;
private Handler uiThreadHandler; private Handler uiThreadHandler;
@ -197,14 +195,8 @@ public class MusicService extends Service implements SharedPreferences.OnSharedP
initNotification(); initNotification();
mediaStoreObserver = new MediaStoreObserver(playerHandler);
throttledSeekHandler = new ThrottledSeekHandler(playerHandler); throttledSeekHandler = new ThrottledSeekHandler(playerHandler);
getContentResolver().registerContentObserver(
MediaStore.Audio.Media.INTERNAL_CONTENT_URI, true, mediaStoreObserver);
getContentResolver().registerContentObserver(
MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, true, mediaStoreObserver);
PreferenceUtil.getInstance(this).registerOnSharedPreferenceChangedListener(this); PreferenceUtil.getInstance(this).registerOnSharedPreferenceChangedListener(this);
restoreState(); restoreState();
@ -344,7 +336,6 @@ public class MusicService extends Service implements SharedPreferences.OnSharedP
mediaSession.setActive(false); mediaSession.setActive(false);
quit(); quit();
releaseResources(); releaseResources();
getContentResolver().unregisterContentObserver(mediaStoreObserver);
PreferenceUtil.getInstance(this).unregisterOnSharedPreferenceChangedListener(this); PreferenceUtil.getInstance(this).unregisterOnSharedPreferenceChangedListener(this);
wakeLock.release(); wakeLock.release();
@ -1275,33 +1266,6 @@ public class MusicService extends Service implements SharedPreferences.OnSharedP
} }
}; };
private class MediaStoreObserver extends ContentObserver implements Runnable {
// milliseconds to delay before calling refresh to aggregate events
private static final long REFRESH_DELAY = 500;
private Handler mHandler;
public MediaStoreObserver(Handler handler) {
super(handler);
mHandler = handler;
}
@Override
public void onChange(boolean selfChange) {
// if a change is detected, remove any scheduled callback
// then post a new one. This is intended to prevent closely
// spaced events from generating multiple refresh calls
mHandler.removeCallbacks(this);
mHandler.postDelayed(this, REFRESH_DELAY);
}
@Override
public void run() {
// actually call refresh when the delayed callback fires
// do not send a sticky broadcast here
handleAndSendChangeInternal(MEDIA_STORE_CHANGED);
}
}
private class ThrottledSeekHandler implements Runnable { private class ThrottledSeekHandler implements Runnable {
// milliseconds to throttle before calling run to aggregate events // milliseconds to throttle before calling run to aggregate events
private static final long THROTTLE = 500; private static final long THROTTLE = 500;

View file

@ -136,6 +136,7 @@ public class AboutActivity extends AbsBaseActivity implements View.OnClickListen
onBackPressed(); onBackPressed();
return true; return true;
} }
return super.onOptionsItemSelected(item); return super.onOptionsItemSelected(item);
} }
@ -145,6 +146,7 @@ public class AboutActivity extends AbsBaseActivity implements View.OnClickListen
} catch (PackageManager.NameNotFoundException e) { } catch (PackageManager.NameNotFoundException e) {
e.printStackTrace(); e.printStackTrace();
} }
return "Unknown"; return "Unknown";
} }

View file

@ -314,11 +314,6 @@ public class AlbumDetailActivity extends AbsSlidingMusicPanelActivity implements
} }
} }
@Override
public void onMediaStoreChanged() {
super.onMediaStoreChanged();
}
@Override @Override
public void setStatusbarColor(int color) { public void setStatusbarColor(int color) {
super.setStatusbarColor(color); super.setStatusbarColor(color);

View file

@ -336,11 +336,6 @@ public class ArtistDetailActivity extends AbsSlidingMusicPanelActivity implement
} }
} }
@Override
public void onMediaStoreChanged() {
super.onMediaStoreChanged();
}
@Override @Override
public void setStatusbarColor(int color) { public void setStatusbarColor(int color) {
super.setStatusbarColor(color); super.setStatusbarColor(color);

View file

@ -149,11 +149,6 @@ public class GenreDetailActivity extends AbsSlidingMusicPanelActivity implements
} }
} }
@Override
public void onMediaStoreChanged() {
super.onMediaStoreChanged();
}
private void checkIsEmpty() { private void checkIsEmpty() {
empty.setVisibility(adapter.getItemCount() == 0 ? View.VISIBLE : View.GONE); empty.setVisibility(adapter.getItemCount() == 0 ? View.VISIBLE : View.GONE);
} }

View file

@ -214,8 +214,8 @@ public class MainActivity extends AbsSlidingMusicPanelActivity {
} }
@Override @Override
public void onPlayingMetaChanged() { public void onPlayMetadataChanged() {
super.onPlayingMetaChanged(); super.onPlayMetadataChanged();
updateNavigationDrawerHeader(); updateNavigationDrawerHeader();
} }

View file

@ -177,11 +177,6 @@ public class PlaylistDetailActivity extends AbsSlidingMusicPanelActivity impleme
} }
} }
@Override
public void onMediaStoreChanged() {
super.onMediaStoreChanged();
}
private void checkIsEmpty() { private void checkIsEmpty() {
empty.setVisibility(adapter.getItemCount() == 0 ? View.VISIBLE : View.GONE); empty.setVisibility(adapter.getItemCount() == 0 ? View.VISIBLE : View.GONE);
} }

View file

@ -196,11 +196,6 @@ public class SearchActivity extends AbsMusicServiceActivity implements SearchVie
QueryUtil.getItems(itemQuery, callback); QueryUtil.getItems(itemQuery, callback);
} }
@Override
public void onMediaStoreChanged() {
super.onMediaStoreChanged();
}
@Override @Override
public boolean onQueryTextSubmit(String query) { public boolean onQueryTextSubmit(String query) {
hideSoftKeyboard(); hideSoftKeyboard();

View file

@ -27,6 +27,7 @@ public abstract class AbsMusicServiceActivity extends AbsBaseActivity implements
private MusicPlayerRemote.ServiceToken serviceToken; private MusicPlayerRemote.ServiceToken serviceToken;
private MusicStateReceiver musicStateReceiver; private MusicStateReceiver musicStateReceiver;
private boolean receiverRegistered; private boolean receiverRegistered;
@Override @Override
@ -80,7 +81,6 @@ public abstract class AbsMusicServiceActivity extends AbsBaseActivity implements
filter.addAction(MusicService.REPEAT_MODE_CHANGED); filter.addAction(MusicService.REPEAT_MODE_CHANGED);
filter.addAction(MusicService.META_CHANGED); filter.addAction(MusicService.META_CHANGED);
filter.addAction(MusicService.QUEUE_CHANGED); filter.addAction(MusicService.QUEUE_CHANGED);
filter.addAction(MusicService.MEDIA_STORE_CHANGED);
registerReceiver(musicStateReceiver, filter); registerReceiver(musicStateReceiver, filter);
@ -109,10 +109,10 @@ public abstract class AbsMusicServiceActivity extends AbsBaseActivity implements
} }
@Override @Override
public void onPlayingMetaChanged() { public void onPlayMetadataChanged() {
for (MusicServiceEventListener listener : mMusicServiceEventListeners) { for (MusicServiceEventListener listener : mMusicServiceEventListeners) {
if (listener != null) { if (listener != null) {
listener.onPlayingMetaChanged(); listener.onPlayMetadataChanged();
} }
} }
} }
@ -135,15 +135,6 @@ public abstract class AbsMusicServiceActivity extends AbsBaseActivity implements
} }
} }
@Override
public void onMediaStoreChanged() {
for (MusicServiceEventListener listener : mMusicServiceEventListeners) {
if (listener != null) {
listener.onMediaStoreChanged();
}
}
}
@Override @Override
public void onRepeatModeChanged() { public void onRepeatModeChanged() {
for (MusicServiceEventListener listener : mMusicServiceEventListeners) { for (MusicServiceEventListener listener : mMusicServiceEventListeners) {
@ -177,7 +168,7 @@ public abstract class AbsMusicServiceActivity extends AbsBaseActivity implements
if (activity != null) { if (activity != null) {
switch (action) { switch (action) {
case MusicService.META_CHANGED: case MusicService.META_CHANGED:
activity.onPlayingMetaChanged(); activity.onPlayMetadataChanged();
break; break;
case MusicService.QUEUE_CHANGED: case MusicService.QUEUE_CHANGED:
activity.onQueueChanged(); activity.onQueueChanged();
@ -191,9 +182,6 @@ public abstract class AbsMusicServiceActivity extends AbsBaseActivity implements
case MusicService.SHUFFLE_MODE_CHANGED: case MusicService.SHUFFLE_MODE_CHANGED:
activity.onShuffleModeChanged(); activity.onShuffleModeChanged();
break; break;
case MusicService.MEDIA_STORE_CHANGED:
activity.onMediaStoreChanged();
break;
} }
} }
} }
@ -201,12 +189,8 @@ public abstract class AbsMusicServiceActivity extends AbsBaseActivity implements
@Override @Override
protected void onHasPermissionsChanged(boolean hasPermissions) { protected void onHasPermissionsChanged(boolean hasPermissions) {
// TODO is this method even required
super.onHasPermissionsChanged(hasPermissions); super.onHasPermissionsChanged(hasPermissions);
Intent intent = new Intent(MusicService.MEDIA_STORE_CHANGED);
// just in case we need to know this at some point
intent.putExtra("from_permissions_changed", true);
sendBroadcast(intent);
} }
@Nullable @Nullable

View file

@ -40,10 +40,6 @@ public class AbsMusicServiceFragment extends Fragment implements MusicServiceEve
activity.removeMusicServiceEventListener(this); activity.removeMusicServiceEventListener(this);
} }
@Override
public void onPlayingMetaChanged() {
}
@Override @Override
public void onServiceConnected() { public void onServiceConnected() {
} }
@ -56,6 +52,10 @@ public class AbsMusicServiceFragment extends Fragment implements MusicServiceEve
public void onQueueChanged() { public void onQueueChanged() {
} }
@Override
public void onPlayMetadataChanged() {
}
@Override @Override
public void onPlayStateChanged() { public void onPlayStateChanged() {
} }
@ -67,8 +67,4 @@ public class AbsMusicServiceFragment extends Fragment implements MusicServiceEve
@Override @Override
public void onShuffleModeChanged() { public void onShuffleModeChanged() {
} }
@Override
public void onMediaStoreChanged() {
}
} }

View file

@ -106,9 +106,4 @@ public class AlbumsFragment extends AbsLibraryPagerRecyclerViewCustomGridSizeFra
protected void saveUsePalette(boolean usePalette) { protected void saveUsePalette(boolean usePalette) {
PreferenceUtil.getInstance(getActivity()).setAlbumColoredFooters(usePalette); PreferenceUtil.getInstance(getActivity()).setAlbumColoredFooters(usePalette);
} }
@Override
public void onMediaStoreChanged() {
super.onMediaStoreChanged();
}
} }

View file

@ -65,11 +65,6 @@ public class ArtistsFragment extends AbsLibraryPagerRecyclerViewCustomGridSizeFr
return R.layout.item_list_single_row; return R.layout.item_list_single_row;
} }
@Override
public void onMediaStoreChanged() {
super.onMediaStoreChanged();
}
@Override @Override
protected String loadSortMethod() { protected String loadSortMethod() {
return SortMethod.NAME; return SortMethod.NAME;

View file

@ -46,8 +46,4 @@ public class GenresFragment extends AbsLibraryPagerRecyclerViewFragment<GenreAda
protected int getEmptyMessage() { protected int getEmptyMessage() {
return R.string.no_genres; return R.string.no_genres;
} }
@Override
public void onMediaStoreChanged() {
}
} }

View file

@ -47,8 +47,4 @@ public class PlaylistsFragment extends AbsLibraryPagerRecyclerViewFragment<Playl
protected int getEmptyMessage() { protected int getEmptyMessage() {
return R.string.no_playlists; return R.string.no_playlists;
} }
@Override
public void onMediaStoreChanged() {
}
} }

View file

@ -72,11 +72,6 @@ public class SongsFragment extends AbsLibraryPagerRecyclerViewCustomGridSizeFrag
return R.string.no_songs; return R.string.no_songs;
} }
@Override
public void onMediaStoreChanged() {
super.onMediaStoreChanged();
}
@Override @Override
protected String loadSortMethod() { protected String loadSortMethod() {
return PreferenceUtil.getInstance(getActivity()).getSongSortMethod(); return PreferenceUtil.getInstance(getActivity()).getSongSortMethod();

View file

@ -95,7 +95,7 @@ public class MiniPlayerFragment extends AbsMusicServiceFragment implements Music
} }
@Override @Override
public void onPlayingMetaChanged() { public void onPlayMetadataChanged() {
updateSongTitle(); updateSongTitle();
} }

View file

@ -81,7 +81,7 @@ public class PlayerAlbumCoverFragment extends AbsMusicServiceFragment implements
} }
@Override @Override
public void onPlayingMetaChanged() { public void onPlayMetadataChanged() {
viewPager.setCurrentItem(MusicPlayerRemote.getPosition()); viewPager.setCurrentItem(MusicPlayerRemote.getPosition());
} }

View file

@ -176,7 +176,7 @@ public class CardPlayerFragment extends AbsPlayerFragment implements PlayerAlbum
} }
@Override @Override
public void onPlayingMetaChanged() { public void onPlayMetadataChanged() {
updateCurrentSong(); updateCurrentSong();
updateIsFavorite(); updateIsFavorite();
updateQueuePosition(); updateQueuePosition();
@ -187,11 +187,6 @@ public class CardPlayerFragment extends AbsPlayerFragment implements PlayerAlbum
updateQueue(); updateQueue();
} }
@Override
public void onMediaStoreChanged() {
updateQueue();
}
private void updateQueue() { private void updateQueue() {
playingQueueAdapter.swapDataSet(MusicPlayerRemote.getPlayingQueue(), MusicPlayerRemote.getPosition()); playingQueueAdapter.swapDataSet(MusicPlayerRemote.getPlayingQueue(), MusicPlayerRemote.getPosition());
playerQueueSubHeader.setText(getUpNextAndQueueTime()); playerQueueSubHeader.setText(getUpNextAndQueueTime());

View file

@ -170,7 +170,7 @@ public class FlatPlayerFragment extends AbsPlayerFragment implements PlayerAlbum
} }
@Override @Override
public void onPlayingMetaChanged() { public void onPlayMetadataChanged() {
updateCurrentSong(); updateCurrentSong();
updateIsFavorite(); updateIsFavorite();
updateQueuePosition(); updateQueuePosition();
@ -181,11 +181,6 @@ public class FlatPlayerFragment extends AbsPlayerFragment implements PlayerAlbum
updateQueue(); updateQueue();
} }
@Override
public void onMediaStoreChanged() {
updateQueue();
}
private void updateQueue() { private void updateQueue() {
playingQueueAdapter.swapDataSet(MusicPlayerRemote.getPlayingQueue(), MusicPlayerRemote.getPosition()); playingQueueAdapter.swapDataSet(MusicPlayerRemote.getPlayingQueue(), MusicPlayerRemote.getPosition());
playerQueueSubHeader.setText(getUpNextAndQueueTime()); playerQueueSubHeader.setText(getUpNextAndQueueTime());