From a0e8db7f75b74366cbab93fec8a3695de99402b5 Mon Sep 17 00:00:00 2001 From: dkanada Date: Sun, 26 Apr 2020 13:14:21 +0900 Subject: [PATCH] more code refactoring --- .../gramophone/adapter/GenreAdapter.java | 1 - .../adapter/album/AlbumAdapter.java | 1 + .../adapter/base/AbsMultiSelectAdapter.java | 4 ++ .../adapter/song/AbsOffsetSongAdapter.java | 9 +-- .../adapter/song/AlbumSongAdapter.java | 6 +- .../adapter/song/ArtistSongAdapter.java | 3 + .../song/OrderablePlaylistSongAdapter.java | 1 + .../adapter/song/PlayingQueueAdapter.java | 8 ++- .../adapter/song/PlaylistSongAdapter.java | 8 +++ .../song/ShuffleButtonSongAdapter.java | 5 ++ .../gramophone/adapter/song/SongAdapter.java | 6 +- .../dialogs/AddToPlaylistDialog.java | 6 +- .../dialogs/ClearSmartPlaylistDialog.java | 7 +- .../dialogs/CreatePlaylistDialog.java | 5 +- .../dialogs/DeletePlaylistDialog.java | 10 +-- .../gramophone/dialogs/DeleteSongsDialog.java | 8 +-- .../gramophone/dialogs/DonationsDialog.java | 6 +- .../dialogs/RemoveFromPlaylistDialog.java | 7 +- .../dialogs/RenamePlaylistDialog.java | 4 +- .../gramophone/dialogs/SleepTimerDialog.java | 7 +- .../gramophone/dialogs/SongDetailDialog.java | 6 +- .../gramophone/dialogs/SongShareDialog.java | 3 - .../preferences/LibraryPreferenceDialog.java | 2 + .../NowPlayingScreenPreference.java | 3 - .../NowPlayingScreenPreferenceDialog.java | 6 -- .../service/MediaButtonIntentReceiver.java | 10 ++- .../gramophone/service/MultiPlayer.java | 64 +------------------ .../gramophone/service/MusicService.java | 10 +-- .../notification/PlayingNotificationImpl.java | 6 +- .../PlayingNotificationImpl24.java | 5 +- .../gramophone/service/playback/Playback.java | 4 -- 31 files changed, 78 insertions(+), 153 deletions(-) diff --git a/app/src/main/java/com/kabouzeid/gramophone/adapter/GenreAdapter.java b/app/src/main/java/com/kabouzeid/gramophone/adapter/GenreAdapter.java index 66ec7d5a..ce2a1075 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/adapter/GenreAdapter.java +++ b/app/src/main/java/com/kabouzeid/gramophone/adapter/GenreAdapter.java @@ -95,7 +95,6 @@ public class GenreAdapter extends RecyclerView.Adapter } public class ViewHolder extends MediaEntryViewHolder { - public ViewHolder(@NonNull View itemView) { super(itemView); } diff --git a/app/src/main/java/com/kabouzeid/gramophone/adapter/album/AlbumAdapter.java b/app/src/main/java/com/kabouzeid/gramophone/adapter/album/AlbumAdapter.java index 329e943d..0cf2e961 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/adapter/album/AlbumAdapter.java +++ b/app/src/main/java/com/kabouzeid/gramophone/adapter/album/AlbumAdapter.java @@ -107,6 +107,7 @@ public class AlbumAdapter extends AbsMultiSelectAdapter dataSet, @LayoutRes int itemLayoutRes, boolean usePalette, @Nullable CabHolder cabHolder) { super(activity, dataSet, itemLayoutRes, usePalette, cabHolder); } @@ -61,6 +57,6 @@ public class AlbumSongAdapter extends SongAdapter { @Override protected void loadAlbumCover(Song song, SongAdapter.ViewHolder holder) { - // We don't want to load it in this adapter + // don't want to load it in this adapter } } diff --git a/app/src/main/java/com/kabouzeid/gramophone/adapter/song/ArtistSongAdapter.java b/app/src/main/java/com/kabouzeid/gramophone/adapter/song/ArtistSongAdapter.java index 93d04625..f75a163a 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/adapter/song/ArtistSongAdapter.java +++ b/app/src/main/java/com/kabouzeid/gramophone/adapter/song/ArtistSongAdapter.java @@ -104,9 +104,11 @@ public class ArtistSongAdapter extends ArrayAdapter implements MaterialCab Pair[] albumPairs = new Pair[]{ Pair.create(albumArt, activity.getResources().getString(R.string.transition_album_art)) }; + NavigationUtil.goToAlbum(activity, song.albumId, albumPairs); return true; } + return super.onMenuItemClick(item); } }); @@ -119,6 +121,7 @@ public class ArtistSongAdapter extends ArrayAdapter implements MaterialCab MusicPlayerRemote.openQueue(dataSet, position, true); } }); + convertView.setOnLongClickListener(view -> { toggleChecked(song); return true; diff --git a/app/src/main/java/com/kabouzeid/gramophone/adapter/song/OrderablePlaylistSongAdapter.java b/app/src/main/java/com/kabouzeid/gramophone/adapter/song/OrderablePlaylistSongAdapter.java index 3b866669..7b667a1c 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/adapter/song/OrderablePlaylistSongAdapter.java +++ b/app/src/main/java/com/kabouzeid/gramophone/adapter/song/OrderablePlaylistSongAdapter.java @@ -120,6 +120,7 @@ public class OrderablePlaylistSongAdapter extends PlaylistSongAdapter implements RemoveFromPlaylistDialog.create((PlaylistSong) getSong()).show(activity.getSupportFragmentManager(), "REMOVE_FROM_PLAYLIST"); return true; } + return super.onSongMenuItemClick(item); } diff --git a/app/src/main/java/com/kabouzeid/gramophone/adapter/song/PlayingQueueAdapter.java b/app/src/main/java/com/kabouzeid/gramophone/adapter/song/PlayingQueueAdapter.java index a5ed8ec8..e5adf6a4 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/adapter/song/PlayingQueueAdapter.java +++ b/app/src/main/java/com/kabouzeid/gramophone/adapter/song/PlayingQueueAdapter.java @@ -59,7 +59,7 @@ public class PlayingQueueAdapter extends SongAdapter implements DraggableItemAda @Override protected void loadAlbumCover(Song song, SongAdapter.ViewHolder holder) { - // We don't want to load it in this adapter + // don't want to load it in this adapter } public void swapDataSet(List dataSet, int position) { @@ -77,15 +77,19 @@ public class PlayingQueueAdapter extends SongAdapter implements DraggableItemAda if (holder.image != null) { holder.image.setAlpha(alpha); } + if (holder.title != null) { holder.title.setAlpha(alpha); } + if (holder.text != null) { holder.text.setAlpha(alpha); } + if (holder.imageText != null) { holder.imageText.setAlpha(alpha); } + if (holder.paletteColorContainer != null) { holder.paletteColorContainer.setAlpha(alpha); } @@ -130,6 +134,7 @@ public class PlayingQueueAdapter extends SongAdapter implements DraggableItemAda if (imageText != null) { imageText.setVisibility(View.VISIBLE); } + if (image != null) { image.setVisibility(View.GONE); } @@ -147,6 +152,7 @@ public class PlayingQueueAdapter extends SongAdapter implements DraggableItemAda MusicPlayerRemote.removeFromQueue(getAdapterPosition()); return true; } + return super.onSongMenuItemClick(item); } diff --git a/app/src/main/java/com/kabouzeid/gramophone/adapter/song/PlaylistSongAdapter.java b/app/src/main/java/com/kabouzeid/gramophone/adapter/song/PlaylistSongAdapter.java index 679f5c37..d7a62014 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/adapter/song/PlaylistSongAdapter.java +++ b/app/src/main/java/com/kabouzeid/gramophone/adapter/song/PlaylistSongAdapter.java @@ -37,24 +37,30 @@ public class PlaylistSongAdapter extends AbsOffsetSongAdapter { holder.title.setText(MusicUtil.getPlaylistInfoString(activity, dataSet)); holder.title.setTextColor(textColor); } + if (holder.text != null) { holder.text.setVisibility(View.GONE); } + if (holder.menu != null) { holder.menu.setVisibility(View.GONE); } + if (holder.image != null) { final int padding = activity.getResources().getDimensionPixelSize(R.dimen.default_item_margin) / 2; holder.image.setPadding(padding, padding, padding, padding); holder.image.setColorFilter(textColor); holder.image.setImageResource(R.drawable.ic_timer_white_24dp); } + if (holder.dragView != null) { holder.dragView.setVisibility(View.GONE); } + if (holder.separator != null) { holder.separator.setVisibility(View.VISIBLE); } + if (holder.shortSeparator != null) { holder.shortSeparator.setVisibility(View.GONE); } @@ -79,9 +85,11 @@ public class PlaylistSongAdapter extends AbsOffsetSongAdapter { Pair[] albumPairs = new Pair[]{ Pair.create(image, activity.getString(R.string.transition_album_art)) }; + NavigationUtil.goToAlbum(activity, dataSet.get(getAdapterPosition() - 1).albumId, albumPairs); return true; } + return super.onSongMenuItemClick(item); } } diff --git a/app/src/main/java/com/kabouzeid/gramophone/adapter/song/ShuffleButtonSongAdapter.java b/app/src/main/java/com/kabouzeid/gramophone/adapter/song/ShuffleButtonSongAdapter.java index e33862db..3ebeaae0 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/adapter/song/ShuffleButtonSongAdapter.java +++ b/app/src/main/java/com/kabouzeid/gramophone/adapter/song/ShuffleButtonSongAdapter.java @@ -36,21 +36,26 @@ public class ShuffleButtonSongAdapter extends AbsOffsetSongAdapter { holder.title.setTextColor(accentColor); holder.title.setTypeface(Typeface.create("sans-serif-medium", Typeface.NORMAL)); } + if (holder.text != null) { holder.text.setVisibility(View.GONE); } + if (holder.menu != null) { holder.menu.setVisibility(View.GONE); } + if (holder.image != null) { final int padding = activity.getResources().getDimensionPixelSize(R.dimen.default_item_margin) / 2; holder.image.setPadding(padding, padding, padding, padding); holder.image.setColorFilter(accentColor); holder.image.setImageResource(R.drawable.ic_shuffle_white_24dp); } + if (holder.separator != null) { holder.separator.setVisibility(View.VISIBLE); } + if (holder.shortSeparator != null) { holder.shortSeparator.setVisibility(View.GONE); } diff --git a/app/src/main/java/com/kabouzeid/gramophone/adapter/song/SongAdapter.java b/app/src/main/java/com/kabouzeid/gramophone/adapter/song/SongAdapter.java index 730b515a..f6bba9eb 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/adapter/song/SongAdapter.java +++ b/app/src/main/java/com/kabouzeid/gramophone/adapter/song/SongAdapter.java @@ -49,6 +49,7 @@ public class SongAdapter extends AbsMultiSelectAdapter dataSet, @LayoutRes int itemLayoutRes, boolean usePalette, @Nullable CabHolder cabHolder, boolean showSectionName) { super(activity, cabHolder, R.menu.menu_media_selection); + this.activity = activity; this.dataSet = dataSet; this.itemLayoutRes = itemLayoutRes; @@ -107,6 +108,7 @@ public class SongAdapter extends AbsMultiSelectAdapter { - //noinspection unchecked + // noinspection unchecked final List songs = getArguments().getParcelableArrayList("songs"); if (songs == null) return; + if (i == 0) { materialDialog.dismiss(); CreatePlaylistDialog.create(songs).show(getActivity().getSupportFragmentManager(), "ADD_TO_PLAYLIST"); diff --git a/app/src/main/java/com/kabouzeid/gramophone/dialogs/ClearSmartPlaylistDialog.java b/app/src/main/java/com/kabouzeid/gramophone/dialogs/ClearSmartPlaylistDialog.java index d6fb4cf4..89d1bccc 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/dialogs/ClearSmartPlaylistDialog.java +++ b/app/src/main/java/com/kabouzeid/gramophone/dialogs/ClearSmartPlaylistDialog.java @@ -10,9 +10,6 @@ import com.afollestad.materialdialogs.MaterialDialog; import com.kabouzeid.gramophone.R; import com.kabouzeid.gramophone.model.playlist.AbsSmartPlaylist; -/** - * @author Karim Abou Zeid (kabouzeid) - */ public class ClearSmartPlaylistDialog extends DialogFragment { @NonNull @@ -27,10 +24,10 @@ public class ClearSmartPlaylistDialog extends DialogFragment { @NonNull @Override public Dialog onCreateDialog(Bundle savedInstanceState) { - //noinspection unchecked + // noinspection unchecked final AbsSmartPlaylist playlist = getArguments().getParcelable("playlist"); int title = R.string.clear_playlist_title; - //noinspection ConstantConditions + // noinspection ConstantConditions CharSequence content = Html.fromHtml(getString(R.string.clear_playlist_x, playlist.name)); return new MaterialDialog.Builder(getActivity()) diff --git a/app/src/main/java/com/kabouzeid/gramophone/dialogs/CreatePlaylistDialog.java b/app/src/main/java/com/kabouzeid/gramophone/dialogs/CreatePlaylistDialog.java index 68ccce94..820afab1 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/dialogs/CreatePlaylistDialog.java +++ b/app/src/main/java/com/kabouzeid/gramophone/dialogs/CreatePlaylistDialog.java @@ -16,9 +16,6 @@ import com.kabouzeid.gramophone.util.PlaylistsUtil; import java.util.ArrayList; import java.util.List; -/** - * @author Karim Abou Zeid (kabouzeid), Aidan Follestad (afollestad) - */ public class CreatePlaylistDialog extends DialogFragment { private static final String SONGS = "songs"; @@ -63,7 +60,7 @@ public class CreatePlaylistDialog extends DialogFragment { if (!PlaylistsUtil.doesPlaylistExist(getActivity(), name)) { final int playlistId = PlaylistsUtil.createPlaylist(getActivity(), name); if (getActivity() != null) { - //noinspection unchecked + // noinspection unchecked List songs = getArguments().getParcelableArrayList(SONGS); if (songs != null && !songs.isEmpty()) { PlaylistsUtil.addToPlaylist(getActivity(), songs, playlistId, true); diff --git a/app/src/main/java/com/kabouzeid/gramophone/dialogs/DeletePlaylistDialog.java b/app/src/main/java/com/kabouzeid/gramophone/dialogs/DeletePlaylistDialog.java index 3b2e2144..6ceba98b 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/dialogs/DeletePlaylistDialog.java +++ b/app/src/main/java/com/kabouzeid/gramophone/dialogs/DeletePlaylistDialog.java @@ -14,9 +14,6 @@ import com.kabouzeid.gramophone.util.PlaylistsUtil; import java.util.ArrayList; import java.util.List; -/** - * @author Karim Abou Zeid (kabouzeid) - */ public class DeletePlaylistDialog extends DialogFragment { @NonNull @@ -38,11 +35,10 @@ public class DeletePlaylistDialog extends DialogFragment { @NonNull @Override public Dialog onCreateDialog(Bundle savedInstanceState) { - //noinspection unchecked final List playlists = getArguments().getParcelableArrayList("playlists"); int title; CharSequence content; - //noinspection ConstantConditions + // noinspection ConstantConditions if (playlists.size() > 1) { title = R.string.delete_playlists_title; content = Html.fromHtml(getString(R.string.delete_x_playlists, playlists.size())); @@ -50,14 +46,14 @@ public class DeletePlaylistDialog extends DialogFragment { title = R.string.delete_playlist_title; content = Html.fromHtml(getString(R.string.delete_playlist_x, playlists.get(0).name)); } + return new MaterialDialog.Builder(getActivity()) .title(title) .content(content) .positiveText(R.string.delete_action) .negativeText(android.R.string.cancel) .onPositive((dialog, which) -> { - if (getActivity() == null) - return; + if (getActivity() == null) return; PlaylistsUtil.deletePlaylists(getActivity(), playlists); }) .build(); diff --git a/app/src/main/java/com/kabouzeid/gramophone/dialogs/DeleteSongsDialog.java b/app/src/main/java/com/kabouzeid/gramophone/dialogs/DeleteSongsDialog.java index 1dc2f482..b364357b 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/dialogs/DeleteSongsDialog.java +++ b/app/src/main/java/com/kabouzeid/gramophone/dialogs/DeleteSongsDialog.java @@ -14,9 +14,6 @@ import com.kabouzeid.gramophone.util.MusicUtil; import java.util.ArrayList; import java.util.List; -/** - * @author Karim Abou Zeid (kabouzeid), Aidan Follestad (afollestad) - */ public class DeleteSongsDialog extends DialogFragment { @NonNull @@ -38,7 +35,6 @@ public class DeleteSongsDialog extends DialogFragment { @NonNull @Override public Dialog onCreateDialog(Bundle savedInstanceState) { - //noinspection unchecked final List songs = getArguments().getParcelableArrayList("songs"); int title; CharSequence content; @@ -49,14 +45,14 @@ public class DeleteSongsDialog extends DialogFragment { title = R.string.delete_song_title; content = Html.fromHtml(getString(R.string.delete_song_x, songs.get(0).title)); } + return new MaterialDialog.Builder(getActivity()) .title(title) .content(content) .positiveText(R.string.delete_action) .negativeText(android.R.string.cancel) .onPositive((dialog, which) -> { - if (getActivity() == null) - return; + if (getActivity() == null) return; MusicUtil.deleteTracks(getActivity(), songs); }) .build(); diff --git a/app/src/main/java/com/kabouzeid/gramophone/dialogs/DonationsDialog.java b/app/src/main/java/com/kabouzeid/gramophone/dialogs/DonationsDialog.java index 89e796e8..a61d38d2 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/dialogs/DonationsDialog.java +++ b/app/src/main/java/com/kabouzeid/gramophone/dialogs/DonationsDialog.java @@ -38,9 +38,6 @@ import java.util.List; import butterknife.BindView; import butterknife.ButterKnife; -/** - * @author Karim Abou Zeid (kabouzeid) - */ public class DonationsDialog extends DialogFragment implements BillingProcessor.IBillingHandler { public static final String TAG = DonationsDialog.class.getSimpleName(); @@ -111,6 +108,7 @@ public class DonationsDialog extends DialogFragment implements BillingProcessor. if (skuDetailsLoadAsyncTask != null) { skuDetailsLoadAsyncTask.cancel(true); } + super.onDestroy(); } @@ -118,6 +116,7 @@ public class DonationsDialog extends DialogFragment implements BillingProcessor. if (skuDetailsLoadAsyncTask != null) { skuDetailsLoadAsyncTask.cancel(false); } + skuDetailsLoadAsyncTask = new SkuDetailsLoadAsyncTask(this).execute(); } @@ -147,6 +146,7 @@ public class DonationsDialog extends DialogFragment implements BillingProcessor. final String[] ids = dialog.getResources().getStringArray(DONATION_PRODUCT_IDS); return dialog.billingProcessor.getPurchaseListingDetails(new ArrayList<>(Arrays.asList(ids))); } + cancel(false); return null; } diff --git a/app/src/main/java/com/kabouzeid/gramophone/dialogs/RemoveFromPlaylistDialog.java b/app/src/main/java/com/kabouzeid/gramophone/dialogs/RemoveFromPlaylistDialog.java index 7c8060b0..724cc217 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/dialogs/RemoveFromPlaylistDialog.java +++ b/app/src/main/java/com/kabouzeid/gramophone/dialogs/RemoveFromPlaylistDialog.java @@ -14,9 +14,6 @@ import com.kabouzeid.gramophone.util.PlaylistsUtil; import java.util.ArrayList; import java.util.List; -/** - * @author Karim Abou Zeid (kabouzeid) - */ public class RemoveFromPlaylistDialog extends DialogFragment { @NonNull @@ -49,14 +46,14 @@ public class RemoveFromPlaylistDialog extends DialogFragment { title = R.string.remove_song_from_playlist_title; content = Html.fromHtml(getString(R.string.remove_song_x_from_playlist, songs.get(0).title)); } + return new MaterialDialog.Builder(getActivity()) .title(title) .content(content) .positiveText(R.string.remove_action) .negativeText(android.R.string.cancel) .onPositive((dialog, which) -> { - if (getActivity() == null) - return; + if (getActivity() == null) return; PlaylistsUtil.removeFromPlaylist(getActivity(), songs); }) .build(); diff --git a/app/src/main/java/com/kabouzeid/gramophone/dialogs/RenamePlaylistDialog.java b/app/src/main/java/com/kabouzeid/gramophone/dialogs/RenamePlaylistDialog.java index b09887f9..6891c343 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/dialogs/RenamePlaylistDialog.java +++ b/app/src/main/java/com/kabouzeid/gramophone/dialogs/RenamePlaylistDialog.java @@ -10,9 +10,6 @@ import com.afollestad.materialdialogs.MaterialDialog; import com.kabouzeid.gramophone.R; import com.kabouzeid.gramophone.util.PlaylistsUtil; -/** - * @author Karim Abou Zeid (kabouzeid), Aidan Follestad (afollestad) - */ public class RenamePlaylistDialog extends DialogFragment { private static final String PLAYLIST_ID = "playlist_id"; @@ -40,6 +37,7 @@ public class RenamePlaylistDialog extends DialogFragment { .input(getString(R.string.playlist_name_empty), PlaylistsUtil.getNameForPlaylist(getActivity(), playlistId), false, (materialDialog, charSequence) -> { final String name = charSequence.toString().trim(); + if (!name.isEmpty()) { long playlistId1 = getArguments().getLong(PLAYLIST_ID); PlaylistsUtil.renamePlaylist(getActivity(), playlistId1, name); diff --git a/app/src/main/java/com/kabouzeid/gramophone/dialogs/SleepTimerDialog.java b/app/src/main/java/com/kabouzeid/gramophone/dialogs/SleepTimerDialog.java index 0ea35cba..98df70f4 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/dialogs/SleepTimerDialog.java +++ b/app/src/main/java/com/kabouzeid/gramophone/dialogs/SleepTimerDialog.java @@ -29,9 +29,6 @@ import com.triggertrap.seekarc.SeekArc; import butterknife.BindView; import butterknife.ButterKnife; -/** - * @author Karim Abou Zeid (kabouzeid) - */ public class SleepTimerDialog extends DialogFragment { @BindView(R.id.seek_arc) SeekArc seekArc; @@ -79,6 +76,7 @@ public class SleepTimerDialog extends DialogFragment { if (getActivity() == null) { return; } + final PendingIntent previous = makeTimerPendingIntent(PendingIntent.FLAG_NO_CREATE); if (previous != null) { AlarmManager am = (AlarmManager) getActivity().getSystemService(Context.ALARM_SERVICE); @@ -134,13 +132,13 @@ public class SleepTimerDialog extends DialogFragment { seekArc.setProgress(1); return; } + seekArcProgress = i; updateTimeDisplayTime(); } @Override public void onStartTrackingTouch(SeekArc seekArc) { - } @Override @@ -165,6 +163,7 @@ public class SleepTimerDialog extends DialogFragment { if (shouldFinishLastSong.isChecked()) { return intent.setAction(MusicService.ACTION_PENDING_QUIT); } + return intent.setAction(MusicService.ACTION_QUIT); } diff --git a/app/src/main/java/com/kabouzeid/gramophone/dialogs/SongDetailDialog.java b/app/src/main/java/com/kabouzeid/gramophone/dialogs/SongDetailDialog.java index 8416e3a8..b42341fb 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/dialogs/SongDetailDialog.java +++ b/app/src/main/java/com/kabouzeid/gramophone/dialogs/SongDetailDialog.java @@ -28,9 +28,6 @@ import org.jaudiotagger.tag.TagException; import java.io.File; import java.io.IOException; -/** - * @author Karim Abou Zeid (kabouzeid), Aidan Follestad (afollestad) - */ public class SongDetailDialog extends DialogFragment { public static final String TAG = SongDetailDialog.class.getSimpleName(); @@ -89,6 +86,7 @@ public class SongDetailDialog extends DialogFragment { fileName.setText(makeTextWithTitle(context, R.string.label_file_name, songFile.getName())); filePath.setText(makeTextWithTitle(context, R.string.label_file_path, songFile.getAbsolutePath())); fileSize.setText(makeTextWithTitle(context, R.string.label_file_size, getFileSizeString(songFile.length()))); + try { AudioFile audioFile = AudioFileIO.read(songFile); AudioHeader audioHeader = audioFile.getAudioHeader(); @@ -99,11 +97,9 @@ public class SongDetailDialog extends DialogFragment { samplingRate.setText(makeTextWithTitle(context, R.string.label_sampling_rate, audioHeader.getSampleRate() + " Hz")); } catch (@NonNull CannotReadException | IOException | TagException | ReadOnlyFileException | InvalidAudioFrameException e) { Log.e(TAG, "error while reading the song file", e); - // fallback trackLength.setText(makeTextWithTitle(context, R.string.label_track_length, MusicUtil.getReadableDurationString(song.duration))); } } else { - // fallback fileName.setText(makeTextWithTitle(context, R.string.label_file_name, song.title)); trackLength.setText(makeTextWithTitle(context, R.string.label_track_length, MusicUtil.getReadableDurationString(song.duration))); } diff --git a/app/src/main/java/com/kabouzeid/gramophone/dialogs/SongShareDialog.java b/app/src/main/java/com/kabouzeid/gramophone/dialogs/SongShareDialog.java index 3b904507..9febd5e9 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/dialogs/SongShareDialog.java +++ b/app/src/main/java/com/kabouzeid/gramophone/dialogs/SongShareDialog.java @@ -11,9 +11,6 @@ import com.kabouzeid.gramophone.R; import com.kabouzeid.gramophone.model.Song; import com.kabouzeid.gramophone.util.MusicUtil; -/** - * @author Karim Abou Zeid (kabouzeid) - */ public class SongShareDialog extends DialogFragment { @NonNull public static SongShareDialog create(final Song song) { diff --git a/app/src/main/java/com/kabouzeid/gramophone/preferences/LibraryPreferenceDialog.java b/app/src/main/java/com/kabouzeid/gramophone/preferences/LibraryPreferenceDialog.java index 81fc3b17..4e6497b8 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/preferences/LibraryPreferenceDialog.java +++ b/app/src/main/java/com/kabouzeid/gramophone/preferences/LibraryPreferenceDialog.java @@ -36,6 +36,7 @@ public class LibraryPreferenceDialog extends DialogFragment { } else { categoryInfos = PreferenceUtil.getInstance(getContext()).getLibraryCategories(); } + adapter = new CategoryInfoAdapter(categoryInfos); RecyclerView recyclerView = view.findViewById(R.id.recycler_view); @@ -78,6 +79,7 @@ public class LibraryPreferenceDialog extends DialogFragment { if (categoryInfo.visible) selected++; } + return selected; } } diff --git a/app/src/main/java/com/kabouzeid/gramophone/preferences/NowPlayingScreenPreference.java b/app/src/main/java/com/kabouzeid/gramophone/preferences/NowPlayingScreenPreference.java index 83fb3805..19b40b65 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/preferences/NowPlayingScreenPreference.java +++ b/app/src/main/java/com/kabouzeid/gramophone/preferences/NowPlayingScreenPreference.java @@ -5,9 +5,6 @@ import android.util.AttributeSet; import com.kabouzeid.appthemehelper.common.prefs.supportv7.ATEDialogPreference; -/** - * @author Karim Abou Zeid (kabouzeid) - */ public class NowPlayingScreenPreference extends ATEDialogPreference { public NowPlayingScreenPreference(Context context) { super(context); diff --git a/app/src/main/java/com/kabouzeid/gramophone/preferences/NowPlayingScreenPreferenceDialog.java b/app/src/main/java/com/kabouzeid/gramophone/preferences/NowPlayingScreenPreferenceDialog.java index 047ddaf4..b5b22789 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/preferences/NowPlayingScreenPreferenceDialog.java +++ b/app/src/main/java/com/kabouzeid/gramophone/preferences/NowPlayingScreenPreferenceDialog.java @@ -23,9 +23,6 @@ import com.kabouzeid.gramophone.ui.fragments.player.NowPlayingScreen; import com.kabouzeid.gramophone.util.PreferenceUtil; import com.kabouzeid.gramophone.util.ViewUtil; -/** - * @author Karim Abou Zeid (kabouzeid) - */ public class NowPlayingScreenPreferenceDialog extends DialogFragment implements MaterialDialog.SingleButtonCallback, ViewPager.OnPageChangeListener { private DialogAction whichButtonClicked; @@ -73,7 +70,6 @@ public class NowPlayingScreenPreferenceDialog extends DialogFragment implements @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { - } @Override @@ -83,11 +79,9 @@ public class NowPlayingScreenPreferenceDialog extends DialogFragment implements @Override public void onPageScrollStateChanged(int state) { - } private static class NowPlayingScreenAdapter extends PagerAdapter { - private Context context; public NowPlayingScreenAdapter(Context context) { diff --git a/app/src/main/java/com/kabouzeid/gramophone/service/MediaButtonIntentReceiver.java b/app/src/main/java/com/kabouzeid/gramophone/service/MediaButtonIntentReceiver.java index 0bab5868..2c9aefe4 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/service/MediaButtonIntentReceiver.java +++ b/app/src/main/java/com/kabouzeid/gramophone/service/MediaButtonIntentReceiver.java @@ -47,7 +47,7 @@ public class MediaButtonIntentReceiver extends BroadcastReceiver { private static int mClickCounter = 0; private static long mLastClickTime = 0; - @SuppressLint("HandlerLeak") // false alarm, handler is already static + @SuppressLint("HandlerLeak") private static Handler mHandler = new Handler() { @Override @@ -101,9 +101,10 @@ public class MediaButtonIntentReceiver extends BroadcastReceiver { final int keycode = event.getKeyCode(); final int action = event.getAction(); + + // fallback to system time if event time is not available final long eventTime = event.getEventTime() != 0 ? event.getEventTime() : System.currentTimeMillis(); - // Fallback to system time if event time was not available. String command = null; switch (keycode) { @@ -127,6 +128,7 @@ public class MediaButtonIntentReceiver extends BroadcastReceiver { command = MusicService.ACTION_PLAY; break; } + if (command != null) { if (action == KeyEvent.ACTION_DOWN) { if (event.getRepeatCount() == 0) { @@ -153,16 +155,19 @@ public class MediaButtonIntentReceiver extends BroadcastReceiver { if (mClickCounter >= 3) { mClickCounter = 0; } + mLastClickTime = eventTime; acquireWakeLockAndSendMessage(context, msg, delay); } else { startService(context, command); } + return true; } } } } + return false; } @@ -189,6 +194,7 @@ public class MediaButtonIntentReceiver extends BroadcastReceiver { mWakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "Phonograph headset button"); mWakeLock.setReferenceCounted(false); } + if (DEBUG) Log.v(TAG, "Acquiring wake lock and sending " + msg.what); // Make sure we don't indefinitely hold the wake lock under any circumstances mWakeLock.acquire(10000); diff --git a/app/src/main/java/com/kabouzeid/gramophone/service/MultiPlayer.java b/app/src/main/java/com/kabouzeid/gramophone/service/MultiPlayer.java index c20ad748..7f4715fa 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/service/MultiPlayer.java +++ b/app/src/main/java/com/kabouzeid/gramophone/service/MultiPlayer.java @@ -16,9 +16,6 @@ import com.kabouzeid.gramophone.R; import com.kabouzeid.gramophone.service.playback.Playback; import com.kabouzeid.gramophone.util.PreferenceUtil; -/** - * @author Andrew Neal, Karim Abou Zeid (kabouzeid) - */ public class MultiPlayer implements Playback, MediaPlayer.OnErrorListener, MediaPlayer.OnCompletionListener { public static final String TAG = MultiPlayer.class.getSimpleName(); @@ -31,9 +28,6 @@ public class MultiPlayer implements Playback, MediaPlayer.OnErrorListener, Media private boolean mIsInitialized = false; - /** - * Constructor of MultiPlayer - */ public MultiPlayer(final Context context) { this.context = context; mCurrentMediaPlayer.setWakeMode(context, PowerManager.PARTIAL_WAKE_LOCK); @@ -138,27 +132,16 @@ public class MultiPlayer implements Playback, MediaPlayer.OnErrorListener, Media } } - /** - * Sets the callbacks - * - * @param callbacks The callbacks to use - */ @Override public void setCallbacks(@Nullable Playback.PlaybackCallbacks callbacks) { this.callbacks = callbacks; } - /** - * @return True if the player is ready to go, false otherwise - */ @Override public boolean isInitialized() { return mIsInitialized; } - /** - * Starts or resumes playback. - */ @Override public boolean start() { try { @@ -169,18 +152,12 @@ public class MultiPlayer implements Playback, MediaPlayer.OnErrorListener, Media } } - /** - * Resets the MediaPlayer to its uninitialized state. - */ @Override public void stop() { mCurrentMediaPlayer.reset(); mIsInitialized = false; } - /** - * Releases resources associated with this MediaPlayer object. - */ @Override public void release() { stop(); @@ -190,9 +167,6 @@ public class MultiPlayer implements Playback, MediaPlayer.OnErrorListener, Media } } - /** - * Pauses playback. Call start() to resume. - */ @Override public boolean pause() { try { @@ -203,24 +177,17 @@ public class MultiPlayer implements Playback, MediaPlayer.OnErrorListener, Media } } - /** - * Checks whether the MultiPlayer is playing. - */ @Override public boolean isPlaying() { return mIsInitialized && mCurrentMediaPlayer.isPlaying(); } - /** - * Gets the duration of the file. - * - * @return The duration in milliseconds - */ @Override public int duration() { if (!mIsInitialized) { return -1; } + try { return mCurrentMediaPlayer.getDuration(); } catch (IllegalStateException e) { @@ -228,16 +195,12 @@ public class MultiPlayer implements Playback, MediaPlayer.OnErrorListener, Media } } - /** - * Gets the current playback position. - * - * @return The current position in milliseconds - */ @Override public int position() { if (!mIsInitialized) { return -1; } + try { return mCurrentMediaPlayer.getCurrentPosition(); } catch (IllegalStateException e) { @@ -245,12 +208,6 @@ public class MultiPlayer implements Playback, MediaPlayer.OnErrorListener, Media } } - /** - * Gets the current playback position. - * - * @param whereto The offset in milliseconds from the start to seek to - * @return The offset in milliseconds from the start to seek to - */ @Override public int seek(final int whereto) { try { @@ -271,11 +228,6 @@ public class MultiPlayer implements Playback, MediaPlayer.OnErrorListener, Media } } - /** - * Sets the audio session ID. - * - * @param sessionId The audio session ID - */ @Override public boolean setAudioSessionId(final int sessionId) { try { @@ -286,19 +238,11 @@ public class MultiPlayer implements Playback, MediaPlayer.OnErrorListener, Media } } - /** - * Returns the audio session ID. - * - * @return The current audio session ID. - */ @Override public int getAudioSessionId() { return mCurrentMediaPlayer.getAudioSessionId(); } - /** - * {@inheritDoc} - */ @Override public boolean onError(final MediaPlayer mp, final int what, final int extra) { mIsInitialized = false; @@ -308,12 +252,10 @@ public class MultiPlayer implements Playback, MediaPlayer.OnErrorListener, Media if (context != null) { Toast.makeText(context, context.getResources().getString(R.string.unplayable_file), Toast.LENGTH_SHORT).show(); } + return false; } - /** - * {@inheritDoc} - */ @Override public void onCompletion(final MediaPlayer mp) { if (mp == mCurrentMediaPlayer && mNextMediaPlayer != null) { diff --git a/app/src/main/java/com/kabouzeid/gramophone/service/MusicService.java b/app/src/main/java/com/kabouzeid/gramophone/service/MusicService.java index b0af4070..0c7472ec 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/service/MusicService.java +++ b/app/src/main/java/com/kabouzeid/gramophone/service/MusicService.java @@ -66,11 +66,7 @@ import java.util.ArrayList; import java.util.List; import java.util.Random; -/** - * @author Karim Abou Zeid (kabouzeid), Andrew Neal - */ public class MusicService extends Service implements SharedPreferences.OnSharedPreferenceChangeListener, Playback.PlaybackCallbacks { - public static final String PHONOGRAPH_PACKAGE_NAME = "com.kabouzeid.gramophone"; public static final String MUSIC_PACKAGE_NAME = "com.android.music"; @@ -89,7 +85,7 @@ public class MusicService extends Service implements SharedPreferences.OnSharedP public static final String APP_WIDGET_UPDATE = PHONOGRAPH_PACKAGE_NAME + ".appwidgetupdate"; public static final String EXTRA_APP_WIDGET_NAME = PHONOGRAPH_PACKAGE_NAME + "app_widget_name"; - // do not change these three 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 like last.fm public static final String META_CHANGED = PHONOGRAPH_PACKAGE_NAME + ".metachanged"; public static final String QUEUE_CHANGED = PHONOGRAPH_PACKAGE_NAME + ".queuechanged"; public static final String PLAY_STATE_CHANGED = PHONOGRAPH_PACKAGE_NAME + ".playstatechanged"; @@ -1013,7 +1009,7 @@ public class MusicService extends Service implements SharedPreferences.OnSharedP sendChangeInternal(what); } - // to let other apps know whats playing. i.E. last.fm (scrobbling) or musixmatch + // to let other apps know whats playing like last.fm private void sendPublicIntent(@NonNull final String what) { final Intent intent = new Intent(what.replace(PHONOGRAPH_PACKAGE_NAME, MUSIC_PACKAGE_NAME)); @@ -1350,7 +1346,7 @@ public class MusicService extends Service implements SharedPreferences.OnSharedP @Override public void run() { savePositionInTrack(); - sendPublicIntent(PLAY_STATE_CHANGED); // for musixmatch synced lyrics + sendPublicIntent(PLAY_STATE_CHANGED); } } diff --git a/app/src/main/java/com/kabouzeid/gramophone/service/notification/PlayingNotificationImpl.java b/app/src/main/java/com/kabouzeid/gramophone/service/notification/PlayingNotificationImpl.java index 8f9c51b1..92b95100 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/service/notification/PlayingNotificationImpl.java +++ b/app/src/main/java/com/kabouzeid/gramophone/service/notification/PlayingNotificationImpl.java @@ -117,8 +117,9 @@ public class PlayingNotificationImpl extends PlayingNotification { setBackgroundColor(bgColor); setNotificationContent(ColorUtil.isColorLight(bgColor)); - if (stopped) - return; // notification has been stopped before loading was finished + // notification has been stopped before loading was finished + if (stopped) return; + updateNotifyModeAndPostNotification(notification); } @@ -179,5 +180,4 @@ public class PlayingNotificationImpl extends PlayingNotification { intent.setComponent(serviceName); return PendingIntent.getService(context, 0, intent, 0); } - } diff --git a/app/src/main/java/com/kabouzeid/gramophone/service/notification/PlayingNotificationImpl24.java b/app/src/main/java/com/kabouzeid/gramophone/service/notification/PlayingNotificationImpl24.java index 1c0bc3ba..a24966ee 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/service/notification/PlayingNotificationImpl24.java +++ b/app/src/main/java/com/kabouzeid/gramophone/service/notification/PlayingNotificationImpl24.java @@ -97,8 +97,9 @@ public class PlayingNotificationImpl24 extends PlayingNotification { builder.setColor(color); } - if (stopped) - return; // notification has been stopped before loading was finished + // notification has been stopped before loading was finished + if (stopped) return; + updateNotifyModeAndPostNotification(builder.build()); } })); diff --git a/app/src/main/java/com/kabouzeid/gramophone/service/playback/Playback.java b/app/src/main/java/com/kabouzeid/gramophone/service/playback/Playback.java index 5c4b9abd..f85933b5 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/service/playback/Playback.java +++ b/app/src/main/java/com/kabouzeid/gramophone/service/playback/Playback.java @@ -2,11 +2,7 @@ package com.kabouzeid.gramophone.service.playback; import androidx.annotation.Nullable; -/** - * @author Karim Abou Zeid (kabouzeid) - */ public interface Playback { - boolean setDataSource(String path); void setNextDataSource(@Nullable String path);