From e5774b422c6f992322e58f3d7a855aa2c36239ac Mon Sep 17 00:00:00 2001 From: h4h13 Date: Sat, 11 Aug 2018 01:18:18 +0530 Subject: [PATCH] 1.7.100 --- .../name/monkey/retromusic/Constants.java | 73 +- .../monkey/retromusic/RetroApplication.java | 141 ++-- .../dialogs/AddToPlaylistDialog.java | 100 +-- .../dialogs/CreatePlaylistDialog.java | 34 +- .../retromusic/dialogs/DeleteSongsDialog.java | 128 ++-- .../retromusic/dialogs/HomeOptionDialog.java | 19 +- .../retromusic/dialogs/SleepTimerDialog.java | 20 +- .../retromusic/dialogs/SongDetailDialog.java | 74 +- .../retromusic/loaders/ArtistLoader.java | 20 +- .../mvp/contract/ArtistDetailContract.java | 2 +- .../mvp/presenter/ArtistDetailsPresenter.java | 17 +- .../ui/activities/AlbumDetailsActivity.java | 7 +- .../ui/activities/ArtistDetailActivity.java | 11 +- .../ui/activities/ErrorHandlerActivity.java | 1 + .../ui/activities/ProVersionActivity.java | 3 + .../base/AbsSlidingMusicPanelActivity.java | 694 +++++++++--------- .../tageditor/AbsTagEditorActivity.java | 3 + .../tageditor/SongTagEditorActivity.java | 16 +- .../ui/adapter/artist/ArtistAdapter.java | 6 +- .../mainactivity/LibraryFragment.java | 3 + .../mainactivity/folders/FoldersFragment.java | 7 + .../full/FullPlaybackControlsFragment.java | 14 +- 22 files changed, 756 insertions(+), 637 deletions(-) create mode 100644 app/src/main/java/code/name/monkey/retromusic/ui/activities/ErrorHandlerActivity.java diff --git a/app/src/main/java/code/name/monkey/retromusic/Constants.java b/app/src/main/java/code/name/monkey/retromusic/Constants.java index c8485a4d..1843bc2e 100644 --- a/app/src/main/java/code/name/monkey/retromusic/Constants.java +++ b/app/src/main/java/code/name/monkey/retromusic/Constants.java @@ -2,43 +2,40 @@ package code.name.monkey.retromusic; public class Constants { - public static final String DISCORD_LINK = "https://discord.gg/qTecXXn"; + public static final String DISCORD_LINK = "https://discord.gg/qTecXXn"; - public static final String RETRO_MUSIC_PACKAGE_NAME = "code.name.monkey.retromusic"; - public static final String MUSIC_PACKAGE_NAME = "com.android.music"; - public static final String ACTION_TOGGLE_PAUSE = RETRO_MUSIC_PACKAGE_NAME + ".togglepause"; - public static final String ACTION_PLAY = RETRO_MUSIC_PACKAGE_NAME + ".play"; - public static final String ACTION_PLAY_PLAYLIST = RETRO_MUSIC_PACKAGE_NAME + ".play.playlist"; - public static final String ACTION_PAUSE = RETRO_MUSIC_PACKAGE_NAME + ".pause"; - public static final String ACTION_STOP = RETRO_MUSIC_PACKAGE_NAME + ".stop"; - public static final String ACTION_SKIP = RETRO_MUSIC_PACKAGE_NAME + ".skip"; - public static final String ACTION_REWIND = RETRO_MUSIC_PACKAGE_NAME + ".rewind"; - public static final String ACTION_QUIT = RETRO_MUSIC_PACKAGE_NAME + ".quitservice"; - public static final String INTENT_EXTRA_PLAYLIST = - RETRO_MUSIC_PACKAGE_NAME + "intentextra.playlist"; - public static final String INTENT_EXTRA_SHUFFLE_MODE = - RETRO_MUSIC_PACKAGE_NAME + ".intentextra.shufflemode"; - public static final String APP_WIDGET_UPDATE = RETRO_MUSIC_PACKAGE_NAME + ".appwidgetupdate"; - public static final String EXTRA_APP_WIDGET_NAME = RETRO_MUSIC_PACKAGE_NAME + "app_widget_name"; - // 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 = RETRO_MUSIC_PACKAGE_NAME + ".metachanged"; - public static final String QUEUE_CHANGED = RETRO_MUSIC_PACKAGE_NAME + ".queuechanged"; - public static final String PLAY_STATE_CHANGED = RETRO_MUSIC_PACKAGE_NAME + ".playstatechanged"; - public static final String REPEAT_MODE_CHANGED = RETRO_MUSIC_PACKAGE_NAME + ".repeatmodechanged"; - public static final String SHUFFLE_MODE_CHANGED = - RETRO_MUSIC_PACKAGE_NAME + ".shufflemodechanged"; - public static final String MEDIA_STORE_CHANGED = RETRO_MUSIC_PACKAGE_NAME + ".mediastorechanged"; - public static final String RATE_ON_GOOGLE_PLAY = "https://play.google.com/store/apps/details?id=code.name.monkey.retromusic"; - public static final String PAYPAL_ME_URL = "https://www.paypal.me/h4h14"; - public static final String GOOGLE_PLUS_COMMUNITY = "https://plus.google.com/communities/110811566242871492162"; - public static final String TRANSLATE = "http://monkeycodeapp.oneskyapp.com/collaboration/project?id=238534"; - public static final String GITHUB_PROJECT = "https://github.com/h4h13/RetroMusicPlayer"; - public static final String BASE_API_URL_KUGOU = "http://lyrics.kugou.com/"; - public static final String TELEGRAM_CHANGE_LOG = "https://t.me/retromusiclog"; - public static final String USER_PROFILE = "profile.jpg"; - public static final String USER_BANNER = "banner.jpg"; - public static final String APP_INSTAGRAM_LINK = "https://www.instagram.com/retromusicapp/"; - public static final String APP_TELEGRAM_LINK = "https://t.me/retromusicapp/"; - public static final String APP_TWITTER_LINK = "https://twitter.com/retromusicapp"; - public static final String FAQ_LINK = "https://github.com/h4h13/RetroMusicPlayer/blob/master/FAQ.md"; + public static final String RETRO_MUSIC_PACKAGE_NAME = "code.name.monkey.retromusic"; + public static final String MUSIC_PACKAGE_NAME = "com.android.music"; + public static final String ACTION_TOGGLE_PAUSE = RETRO_MUSIC_PACKAGE_NAME + ".togglepause"; + public static final String ACTION_PLAY = RETRO_MUSIC_PACKAGE_NAME + ".play"; + public static final String ACTION_PLAY_PLAYLIST = RETRO_MUSIC_PACKAGE_NAME + ".play.playlist"; + public static final String ACTION_PAUSE = RETRO_MUSIC_PACKAGE_NAME + ".pause"; + public static final String ACTION_STOP = RETRO_MUSIC_PACKAGE_NAME + ".stop"; + public static final String ACTION_SKIP = RETRO_MUSIC_PACKAGE_NAME + ".skip"; + public static final String ACTION_REWIND = RETRO_MUSIC_PACKAGE_NAME + ".rewind"; + public static final String ACTION_QUIT = RETRO_MUSIC_PACKAGE_NAME + ".quitservice"; + public static final String INTENT_EXTRA_PLAYLIST = RETRO_MUSIC_PACKAGE_NAME + "intentextra.playlist"; + public static final String INTENT_EXTRA_SHUFFLE_MODE = RETRO_MUSIC_PACKAGE_NAME + ".intentextra.shufflemode"; + public static final String APP_WIDGET_UPDATE = RETRO_MUSIC_PACKAGE_NAME + ".appwidgetupdate"; + public static final String EXTRA_APP_WIDGET_NAME = RETRO_MUSIC_PACKAGE_NAME + "app_widget_name"; + // 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 = RETRO_MUSIC_PACKAGE_NAME + ".metachanged"; + public static final String QUEUE_CHANGED = RETRO_MUSIC_PACKAGE_NAME + ".queuechanged"; + public static final String PLAY_STATE_CHANGED = RETRO_MUSIC_PACKAGE_NAME + ".playstatechanged"; + public static final String REPEAT_MODE_CHANGED = RETRO_MUSIC_PACKAGE_NAME + ".repeatmodechanged"; + public static final String SHUFFLE_MODE_CHANGED = RETRO_MUSIC_PACKAGE_NAME + ".shufflemodechanged"; + public static final String MEDIA_STORE_CHANGED = RETRO_MUSIC_PACKAGE_NAME + ".mediastorechanged"; + public static final String RATE_ON_GOOGLE_PLAY = "https://play.google.com/store/apps/details?id=code.name.monkey.retromusic"; + public static final String PAYPAL_ME_URL = "https://www.paypal.me/h4h14"; + public static final String GOOGLE_PLUS_COMMUNITY = "https://plus.google.com/communities/110811566242871492162"; + public static final String TRANSLATE = "http://monkeycodeapp.oneskyapp.com/collaboration/project?id=238534"; + public static final String GITHUB_PROJECT = "https://github.com/h4h13/RetroMusicPlayer"; + public static final String BASE_API_URL_KUGOU = "http://lyrics.kugou.com/"; + public static final String TELEGRAM_CHANGE_LOG = "https://t.me/retromusiclog"; + public static final String USER_PROFILE = "profile.jpg"; + public static final String USER_BANNER = "banner.jpg"; + public static final String APP_INSTAGRAM_LINK = "https://www.instagram.com/retromusicapp/"; + public static final String APP_TELEGRAM_LINK = "https://t.me/retromusicapp/"; + public static final String APP_TWITTER_LINK = "https://twitter.com/retromusicapp"; + public static final String FAQ_LINK = "https://github.com/h4h13/RetroMusicPlayer/blob/master/FAQ.md"; } diff --git a/app/src/main/java/code/name/monkey/retromusic/RetroApplication.java b/app/src/main/java/code/name/monkey/retromusic/RetroApplication.java index cc2abeef..c751f57c 100644 --- a/app/src/main/java/code/name/monkey/retromusic/RetroApplication.java +++ b/app/src/main/java/code/name/monkey/retromusic/RetroApplication.java @@ -1,77 +1,112 @@ package code.name.monkey.retromusic; +import android.content.Intent; import android.os.Build; import android.support.annotation.NonNull; import android.support.multidex.MultiDexApplication; -import code.name.monkey.appthemehelper.ThemeStore; -import code.name.monkey.retromusic.appshortcuts.DynamicShortcutManager; + import com.anjlab.android.iab.v3.BillingProcessor; import com.anjlab.android.iab.v3.TransactionDetails; + +import code.name.monkey.appthemehelper.ThemeStore; +import code.name.monkey.retromusic.appshortcuts.DynamicShortcutManager; +import code.name.monkey.retromusic.ui.activities.ErrorHandlerActivity; import uk.co.chrisjenx.calligraphy.CalligraphyConfig; public class RetroApplication extends MultiDexApplication { - public static final String PRO_VERSION_PRODUCT_ID = "pro_version"; + public static final String PRO_VERSION_PRODUCT_ID = "pro_version"; - private static RetroApplication app; + private static RetroApplication app; - private BillingProcessor billingProcessor; + private BillingProcessor billingProcessor; - public static RetroApplication getInstance() { - return app; - } - - public static boolean isProVersion() { - return BuildConfig.DEBUG || app.billingProcessor.isPurchased(PRO_VERSION_PRODUCT_ID); - } - - @Override - public void onCreate() { - super.onCreate(); - app = this; - - // default theme - if (!ThemeStore.isConfigured(this, 1)) { - ThemeStore.editTheme(this) - .accentColorRes(R.color.md_green_A200) - .commit(); + public static RetroApplication getInstance() { + return app; } - CalligraphyConfig.initDefault(new CalligraphyConfig.Builder() - .setDefaultFontPath("fonts/circular_std_book.otf") - .setFontAttrId(R.attr.fontPath) - .build() - ); - - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N_MR1) { - new DynamicShortcutManager(this).initDynamicShortcuts(); + public static boolean isProVersion() { + return BuildConfig.DEBUG || app.billingProcessor.isPurchased(PRO_VERSION_PRODUCT_ID); } - // automatically restores purchases - billingProcessor = new BillingProcessor(this, BuildConfig.GOOGLE_PLAY_LICENSE_KEY, - new BillingProcessor.IBillingHandler() { - @Override - public void onProductPurchased(@NonNull String productId, TransactionDetails details) { - } + public static void deleteAppData() { + try { + // clearing app data + String packageName = app.getPackageName(); + Runtime runtime = Runtime.getRuntime(); + runtime.exec("pm clear " + packageName); - @Override - public void onPurchaseHistoryRestored() { - //Toast.makeText(App.this, R.string.restored_previous_purchase_please_restart, Toast.LENGTH_LONG).show(); - } + System.exit(0); - @Override - public void onBillingError(int errorCode, Throwable error) { - } + } catch (Exception e) { + e.printStackTrace(); + } + } - @Override - public void onBillingInitialized() { - } + @Override + public void onCreate() { + super.onCreate(); + app = this; + + + // default theme + if (!ThemeStore.isConfigured(this, 1)) { + ThemeStore.editTheme(this) + .accentColorRes(R.color.md_green_A200) + .commit(); + } + + CalligraphyConfig.initDefault(new CalligraphyConfig.Builder() + .setDefaultFontPath("fonts/circular_std_book.otf") + .setFontAttrId(R.attr.fontPath) + .build() + ); + + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N_MR1) { + new DynamicShortcutManager(this).initDynamicShortcuts(); + } + + // automatically restores purchases + billingProcessor = new BillingProcessor(this, BuildConfig.GOOGLE_PLAY_LICENSE_KEY, + new BillingProcessor.IBillingHandler() { + @Override + public void onProductPurchased(@NonNull String productId, TransactionDetails details) { + } + + @Override + public void onPurchaseHistoryRestored() { + //Toast.makeText(App.this, R.string.restored_previous_purchase_please_restart, Toast.LENGTH_LONG).show(); + } + + @Override + public void onBillingError(int errorCode, Throwable error) { + } + + @Override + public void onBillingInitialized() { + } + }); + } + + private void setupErrorHandler() { + Thread.setDefaultUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() { + @Override + public void uncaughtException(Thread thread, Throwable throwable) { + handleUncaughtException(thread, throwable); + } }); - } + } - @Override - public void onTerminate() { - super.onTerminate(); - billingProcessor.release(); - } + private void handleUncaughtException(Thread thread, Throwable throwable) { + throwable.printStackTrace(); + //Intent intent = new Intent(this, ErrorHandlerActivity.class); + //intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + //startActivity(intent); + } + + @Override + public void onTerminate() { + super.onTerminate(); + billingProcessor.release(); + } } diff --git a/app/src/main/java/code/name/monkey/retromusic/dialogs/AddToPlaylistDialog.java b/app/src/main/java/code/name/monkey/retromusic/dialogs/AddToPlaylistDialog.java index 4e84a0bc..afa7f37d 100644 --- a/app/src/main/java/code/name/monkey/retromusic/dialogs/AddToPlaylistDialog.java +++ b/app/src/main/java/code/name/monkey/retromusic/dialogs/AddToPlaylistDialog.java @@ -10,6 +10,7 @@ import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; + import butterknife.BindView; import butterknife.ButterKnife; import butterknife.OnClick; @@ -20,6 +21,7 @@ import code.name.monkey.retromusic.model.Playlist; import code.name.monkey.retromusic.model.Song; import code.name.monkey.retromusic.ui.adapter.playlist.AddToPlaylist; import code.name.monkey.retromusic.views.RoundedBottomSheetDialogFragment; + import java.util.ArrayList; /** @@ -27,60 +29,62 @@ import java.util.ArrayList; */ public class AddToPlaylistDialog extends RoundedBottomSheetDialogFragment { - @BindView(R.id.playlists) - RecyclerView playlist; - @BindView(R.id.title) - TextView title; - ArrayList playlists; + @BindView(R.id.playlists) + RecyclerView playlist; - @NonNull - public static AddToPlaylistDialog create(Song song) { - ArrayList list = new ArrayList<>(); - list.add(song); - return create(list); - } + @BindView(R.id.title) + TextView title; - @NonNull - public static AddToPlaylistDialog create(ArrayList songs) { - AddToPlaylistDialog dialog = new AddToPlaylistDialog(); - Bundle args = new Bundle(); - args.putParcelableArrayList("songs", songs); - dialog.setArguments(args); - return dialog; - } + ArrayList playlists; - @Nullable - @Override - public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, - @Nullable Bundle savedInstanceState) { - View layout = inflater.inflate(R.layout.dialog_add_to_playlist, container, false); - ButterKnife.bind(this, layout); - return layout; - } + @NonNull + public static AddToPlaylistDialog create(Song song) { + ArrayList list = new ArrayList<>(); + list.add(song); + return create(list); + } - @SuppressWarnings("ConstantConditions") - @OnClick(R.id.action_add_playlist) - void newPlaylist() { - final ArrayList songs = getArguments().getParcelableArrayList("songs"); - CreatePlaylistDialog.create(songs) - .show(getActivity().getSupportFragmentManager(), "ADD_TO_PLAYLIST"); - dismiss(); - } + @NonNull + public static AddToPlaylistDialog create(ArrayList songs) { + AddToPlaylistDialog dialog = new AddToPlaylistDialog(); + Bundle args = new Bundle(); + args.putParcelableArrayList("songs", songs); + dialog.setArguments(args); + return dialog; + } - @SuppressWarnings("ConstantConditions") - @Override - public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { - super.onViewCreated(view, savedInstanceState); + @Nullable + @Override + public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, + @Nullable Bundle savedInstanceState) { + View layout = inflater.inflate(R.layout.dialog_add_to_playlist, container, false); + ButterKnife.bind(this, layout); + return layout; + } - title.setTextColor(ThemeStore.textColorPrimary(getContext())); - final ArrayList songs = getArguments().getParcelableArrayList("songs"); - playlists = PlaylistLoader.getAllPlaylists(getActivity()).blockingFirst(); + @SuppressWarnings("ConstantConditions") + @OnClick(R.id.action_add_playlist) + void newPlaylist() { + final ArrayList songs = getArguments().getParcelableArrayList("songs"); + CreatePlaylistDialog.create(songs) + .show(getActivity().getSupportFragmentManager(), "ADD_TO_PLAYLIST"); + dismiss(); + } - AddToPlaylist playlistAdapter = new AddToPlaylist(getActivity(), playlists, - R.layout.item_playlist, songs, getDialog()); + @SuppressWarnings("ConstantConditions") + @Override + public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { + super.onViewCreated(view, savedInstanceState); - playlist.setLayoutManager(new LinearLayoutManager(getContext())); - playlist.setItemAnimator(new DefaultItemAnimator()); - playlist.setAdapter(playlistAdapter); - } + title.setTextColor(ThemeStore.textColorPrimary(getContext())); + final ArrayList songs = getArguments().getParcelableArrayList("songs"); + playlists = PlaylistLoader.getAllPlaylists(getActivity()).blockingFirst(); + + AddToPlaylist playlistAdapter = new AddToPlaylist(getActivity(), playlists, + R.layout.item_playlist, songs, getDialog()); + + playlist.setLayoutManager(new LinearLayoutManager(getContext())); + playlist.setItemAnimator(new DefaultItemAnimator()); + playlist.setAdapter(playlistAdapter); + } } \ No newline at end of file diff --git a/app/src/main/java/code/name/monkey/retromusic/dialogs/CreatePlaylistDialog.java b/app/src/main/java/code/name/monkey/retromusic/dialogs/CreatePlaylistDialog.java index a09cf4cf..d92f96ef 100644 --- a/app/src/main/java/code/name/monkey/retromusic/dialogs/CreatePlaylistDialog.java +++ b/app/src/main/java/code/name/monkey/retromusic/dialogs/CreatePlaylistDialog.java @@ -3,12 +3,12 @@ package code.name.monkey.retromusic.dialogs; import android.os.Bundle; import android.support.annotation.NonNull; import android.support.annotation.Nullable; -import android.support.design.widget.BottomSheetDialogFragment; +import android.support.design.widget.TextInputEditText; +import android.support.v7.widget.CardView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; -import android.widget.Button; -import android.widget.EditText; +import android.widget.TextView; import java.util.ArrayList; import java.util.Objects; @@ -17,7 +17,8 @@ import butterknife.BindView; import butterknife.ButterKnife; import butterknife.OnClick; import code.name.monkey.appthemehelper.ThemeStore; -import code.name.monkey.appthemehelper.util.TintHelper; +import code.name.monkey.appthemehelper.util.ColorUtil; +import code.name.monkey.appthemehelper.util.MaterialValueHelper; import code.name.monkey.retromusic.R; import code.name.monkey.retromusic.model.Song; import code.name.monkey.retromusic.util.PlaylistsUtil; @@ -29,11 +30,16 @@ import code.name.monkey.retromusic.views.RoundedBottomSheetDialogFragment; public class CreatePlaylistDialog extends RoundedBottomSheetDialogFragment { @BindView(R.id.option_1) - EditText playlistName; + TextInputEditText playlistName; + @BindView(R.id.action_cancel) - Button actionCancel; + TextView actionCancel; + @BindView(R.id.action_create) - Button actionCreate; + TextView actionCreate; + + @BindView(R.id.action_create_container) + CardView actionCreateContainer; @NonNull public static CreatePlaylistDialog create() { @@ -70,9 +76,17 @@ public class CreatePlaylistDialog extends RoundedBottomSheetDialogFragment { public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); int accentColor = ThemeStore.accentColor(Objects.requireNonNull(getContext())); - TintHelper.setTintAuto(playlistName, accentColor, true); - TintHelper.setTintAuto(actionCreate, accentColor, true); - actionCancel.setTextColor(accentColor); + actionCreateContainer.setCardBackgroundColor(ThemeStore.accentColor(getContext())); + + int primaryTextColor = MaterialValueHelper.getPrimaryTextColor(getContext(), ColorUtil + .isColorLight(accentColor)); + int secondaryTextColor = MaterialValueHelper.getSecondaryTextColor(getContext(), ColorUtil + .isColorLight(accentColor)); + + actionCreate.setTextColor(primaryTextColor); + actionCancel.setTextColor(secondaryTextColor); + + } @OnClick({R.id.action_cancel, R.id.action_create}) diff --git a/app/src/main/java/code/name/monkey/retromusic/dialogs/DeleteSongsDialog.java b/app/src/main/java/code/name/monkey/retromusic/dialogs/DeleteSongsDialog.java index 9a30ba3f..16a24fec 100644 --- a/app/src/main/java/code/name/monkey/retromusic/dialogs/DeleteSongsDialog.java +++ b/app/src/main/java/code/name/monkey/retromusic/dialogs/DeleteSongsDialog.java @@ -8,85 +8,93 @@ import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; + import butterknife.BindView; import butterknife.ButterKnife; import butterknife.OnClick; +import code.name.monkey.appthemehelper.ThemeStore; import code.name.monkey.retromusic.R; import code.name.monkey.retromusic.model.Song; import code.name.monkey.retromusic.util.MusicUtil; import code.name.monkey.retromusic.views.RoundedBottomSheetDialogFragment; + import java.util.ArrayList; public class DeleteSongsDialog extends RoundedBottomSheetDialogFragment { - @BindView(R.id.action_delete) - TextView delete; - @BindView(R.id.title) - TextView title; - @BindView(R.id.action_cancel) - TextView cancel; + @BindView(R.id.action_delete) + TextView delete; + @BindView(R.id.title) + TextView title; + @BindView(R.id.action_cancel) + TextView cancel; - @NonNull - public static DeleteSongsDialog create(Song song) { - ArrayList list = new ArrayList<>(); - list.add(song); - return create(list); - } + @NonNull + public static DeleteSongsDialog create(Song song) { + ArrayList list = new ArrayList<>(); + list.add(song); + return create(list); + } - @NonNull - public static DeleteSongsDialog create(ArrayList songs) { - DeleteSongsDialog dialog = new DeleteSongsDialog(); - Bundle args = new Bundle(); - args.putParcelableArrayList("songs", songs); - dialog.setArguments(args); - return dialog; - } + @NonNull + public static DeleteSongsDialog create(ArrayList songs) { + DeleteSongsDialog dialog = new DeleteSongsDialog(); + Bundle args = new Bundle(); + args.putParcelableArrayList("songs", songs); + dialog.setArguments(args); + return dialog; + } - @OnClick({R.id.action_cancel, R.id.action_delete}) - void actions(View view) { - //noinspection ConstantConditions - final ArrayList songs = getArguments().getParcelableArrayList("songs"); - switch (view.getId()) { - case R.id.action_delete: - if (getActivity() == null) { - return; + @OnClick({R.id.action_cancel, R.id.action_delete}) + void actions(View view) { + //noinspection ConstantConditions + final ArrayList songs = getArguments().getParcelableArrayList("songs"); + switch (view.getId()) { + case R.id.action_delete: + if (getActivity() == null) { + return; + } + if (songs != null) { + MusicUtil.deleteTracks(getActivity(), songs); + } + break; + default: } + dismiss(); + } + + @Override + public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { + super.onViewCreated(view, savedInstanceState); + delete.setTextColor(ThemeStore.textColorPrimary(getContext())); + title.setTextColor(ThemeStore.textColorPrimary(getContext())); + cancel.setTextColor(ThemeStore.textColorPrimary(getContext())); + + + //noinspection unchecked,ConstantConditions + final ArrayList songs = getArguments().getParcelableArrayList("songs"); + int title; + CharSequence content; if (songs != null) { - MusicUtil.deleteTracks(getActivity(), songs); + if (songs.size() > 1) { + title = R.string.delete_songs_title; + content = Html.fromHtml(getString(R.string.delete_x_songs, songs.size())); + } else { + title = R.string.delete_song_title; + content = Html.fromHtml(getString(R.string.delete_song_x, songs.get(0).title)); + } + this.title.setText(title); + this.delete.setText(content); } - break; - default: } - dismiss(); - } - @Override - public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { - super.onViewCreated(view, savedInstanceState); - //noinspection unchecked,ConstantConditions - final ArrayList songs = getArguments().getParcelableArrayList("songs"); - int title; - CharSequence content; - if (songs != null) { - if (songs.size() > 1) { - title = R.string.delete_songs_title; - content = Html.fromHtml(getString(R.string.delete_x_songs, songs.size())); - } else { - title = R.string.delete_song_title; - content = Html.fromHtml(getString(R.string.delete_song_x, songs.get(0).title)); - } - this.title.setText(title); - this.delete.setText(content); + @Nullable + @Override + public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, + @Nullable Bundle savedInstanceState) { + View layout = inflater.inflate(R.layout.dialog_delete_songs, container, false); + ButterKnife.bind(this, layout); + return layout; } - } - - @Nullable - @Override - public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, - @Nullable Bundle savedInstanceState) { - View layout = inflater.inflate(R.layout.dialog_delete_songs, container, false); - ButterKnife.bind(this, layout); - return layout; - } } diff --git a/app/src/main/java/code/name/monkey/retromusic/dialogs/HomeOptionDialog.java b/app/src/main/java/code/name/monkey/retromusic/dialogs/HomeOptionDialog.java index da17354e..db4d7bc9 100644 --- a/app/src/main/java/code/name/monkey/retromusic/dialogs/HomeOptionDialog.java +++ b/app/src/main/java/code/name/monkey/retromusic/dialogs/HomeOptionDialog.java @@ -9,14 +9,21 @@ import android.support.v7.widget.AppCompatTextView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; +import android.widget.TextView; import java.io.File; import java.util.Calendar; +import java.util.List; +import java.util.Objects; import butterknife.BindView; +import butterknife.BindViews; import butterknife.ButterKnife; import butterknife.OnClick; import butterknife.Unbinder; +import code.name.monkey.appthemehelper.ThemeStore; +import code.name.monkey.appthemehelper.common.views.ATEPrimaryTextView; +import code.name.monkey.appthemehelper.common.views.ATESecondaryTextView; import code.name.monkey.retromusic.R; import code.name.monkey.retromusic.RetroApplication; import code.name.monkey.retromusic.ui.activities.MainActivity; @@ -46,6 +53,12 @@ public class HomeOptionDialog extends RoundedBottomSheetDialogFragment { @BindView(R.id.title_welcome) AppCompatTextView titleWelcome; + @BindViews({R.id.tv_about, R.id.title_welcome, R.id.text, R.id.tv_buy_pro, R.id.tv_folder, R.id.tv_rate_app, + R.id.tv_settings, R.id.tv_sleep_timer}) + List textViews; + + static ButterKnife.Setter textColor = (view, value, index) -> view.setTextColor(value.intValue()); + private CompositeDisposable disposable = new CompositeDisposable(); @Nullable @@ -56,6 +69,7 @@ public class HomeOptionDialog extends RoundedBottomSheetDialogFragment { mUnbinder = ButterKnife.bind(this, layout); layout.findViewById(R.id.action_buy_pro).setVisibility(RetroApplication.isProVersion() ? View .GONE : View.VISIBLE); + ButterKnife.apply(textViews, textColor, ThemeStore.textColorPrimary(getContext())); return layout; } @@ -97,12 +111,13 @@ public class HomeOptionDialog extends RoundedBottomSheetDialogFragment { @SuppressWarnings("ConstantConditions") @OnClick({R.id.action_about, R.id.user_info_container, R.id.action_buy_pro, R.id.action_folder, - R.id.action_settings, R.id.action_sleep_timer,R.id.action_rate}) + R.id.action_settings, R.id.action_sleep_timer, R.id.action_rate}) public void onViewClicked(View view) { switch (view.getId()) { case R.id.user_info_container: NavigationUtil.goToUserInfo(getActivity()); - break; case R.id.action_rate: + break; + case R.id.action_rate: NavigationUtil.goToPlayStore(getActivity()); break; case R.id.action_folder: diff --git a/app/src/main/java/code/name/monkey/retromusic/dialogs/SleepTimerDialog.java b/app/src/main/java/code/name/monkey/retromusic/dialogs/SleepTimerDialog.java index 854a06f2..489e2238 100755 --- a/app/src/main/java/code/name/monkey/retromusic/dialogs/SleepTimerDialog.java +++ b/app/src/main/java/code/name/monkey/retromusic/dialogs/SleepTimerDialog.java @@ -5,6 +5,9 @@ import android.app.PendingIntent; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; +import android.graphics.PorterDuff; +import android.graphics.drawable.ClipDrawable; +import android.graphics.drawable.LayerDrawable; import android.os.Bundle; import android.os.CountDownTimer; import android.os.SystemClock; @@ -24,7 +27,6 @@ import butterknife.BindView; import butterknife.ButterKnife; import butterknife.OnClick; import code.name.monkey.appthemehelper.ThemeStore; -import code.name.monkey.appthemehelper.util.TintHelper; import code.name.monkey.retromusic.R; import code.name.monkey.retromusic.service.MusicService; import code.name.monkey.retromusic.util.MusicUtil; @@ -39,9 +41,9 @@ public class SleepTimerDialog extends RoundedBottomSheetDialogFragment { @BindView(R.id.timer_display) TextView timerDisplay; @BindView(R.id.action_set) - Button setButton; + TextView setButton; @BindView(R.id.action_cancel) - Button cancelButton; + TextView cancelButton; private int seekArcProgress; private TimerUpdater timerUpdater; @@ -68,6 +70,12 @@ public class SleepTimerDialog extends RoundedBottomSheetDialogFragment { return layout; } + private void setProgressBarColor(int dark) { + LayerDrawable ld = (LayerDrawable) seekArc.getProgressDrawable(); + ClipDrawable clipDrawable = (ClipDrawable) ld.findDrawableByLayerId(android.R.id.progress); + clipDrawable.setColorFilter(dark, PorterDuff.Mode.SRC_IN); + } + @Override public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); @@ -77,10 +85,8 @@ public class SleepTimerDialog extends RoundedBottomSheetDialogFragment { updateTimeDisplayTime(); seekArc.setProgress(seekArcProgress); - int accentColor = ThemeStore.accentColor(getContext()); - TintHelper.setTintAuto(seekArc, accentColor, true); - setButton.setTextColor(accentColor); - cancelButton.setTextColor(accentColor); + //noinspection ConstantConditions + setProgressBarColor(ThemeStore.accentColor(getContext())); seekArc.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { @Override diff --git a/app/src/main/java/code/name/monkey/retromusic/dialogs/SongDetailDialog.java b/app/src/main/java/code/name/monkey/retromusic/dialogs/SongDetailDialog.java index a40104d8..cb8d5a01 100644 --- a/app/src/main/java/code/name/monkey/retromusic/dialogs/SongDetailDialog.java +++ b/app/src/main/java/code/name/monkey/retromusic/dialogs/SongDetailDialog.java @@ -23,7 +23,12 @@ import org.jaudiotagger.tag.TagException; import java.io.File; import java.io.IOException; +import java.util.List; +import butterknife.BindView; +import butterknife.BindViews; +import butterknife.ButterKnife; +import code.name.monkey.appthemehelper.ThemeStore; import code.name.monkey.retromusic.R; import code.name.monkey.retromusic.model.Song; import code.name.monkey.retromusic.util.MusicUtil; @@ -55,60 +60,65 @@ public class SongDetailDialog extends RoundedBottomSheetDialogFragment { return fileSizeInMB + " MB"; } + private void setTextColor(List textColor) { + for (TextView textView : textColor) { + //noinspection ConstantConditions + textView.setTextColor(ThemeStore.textColorPrimary(getContext())); + } + } + + @BindViews({R.id.title, + R.id.file_name, + R.id.file_path, + R.id.file_size, + R.id.file_format, + R.id.track_length, + R.id.bitrate, + R.id.sampling_rate}) + List textViews; + + @SuppressWarnings("ConstantConditions") @Nullable @Override public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { View dialogView = inflater.inflate(R.layout.dialog_file_details, container, false); + ButterKnife.bind(this, dialogView); Context context = getContext(); - final TextView fileName = dialogView.findViewById(R.id.file_name); - final TextView filePath = dialogView.findViewById(R.id.file_path); - final TextView fileSize = dialogView.findViewById(R.id.file_size); - final TextView fileFormat = dialogView.findViewById(R.id.file_format); - final TextView trackLength = dialogView.findViewById(R.id.track_length); - final TextView bitRate = dialogView.findViewById(R.id.bitrate); - final TextView samplingRate = dialogView.findViewById(R.id.sampling_rate); + setTextColor(textViews); - fileName.setText(makeTextWithTitle(context, R.string.label_file_name, "-")); - filePath.setText(makeTextWithTitle(context, R.string.label_file_path, "-")); - fileSize.setText(makeTextWithTitle(context, R.string.label_file_size, "-")); - fileFormat.setText(makeTextWithTitle(context, R.string.label_file_format, "-")); - trackLength.setText(makeTextWithTitle(context, R.string.label_track_length, "-")); - bitRate.setText(makeTextWithTitle(context, R.string.label_bit_rate, "-")); - samplingRate.setText(makeTextWithTitle(context, R.string.label_sampling_rate, "-")); + textViews.get(1).setText(makeTextWithTitle(context, R.string.label_file_name, "-")); + textViews.get(2).setText(makeTextWithTitle(context, R.string.label_file_path, "-")); + textViews.get(3).setText(makeTextWithTitle(context, R.string.label_file_size, "-")); + textViews.get(4).setText(makeTextWithTitle(context, R.string.label_file_format, "-")); + textViews.get(5).setText(makeTextWithTitle(context, R.string.label_track_length, "-")); + textViews.get(6).setText(makeTextWithTitle(context, R.string.label_bit_rate, "-")); + textViews.get(7).setText(makeTextWithTitle(context, R.string.label_sampling_rate, "-")); final Song song = getArguments().getParcelable("song"); if (song != null) { final File songFile = new File(song.data); if (songFile.exists()) { - 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()))); + textViews.get(1).setText(makeTextWithTitle(context, R.string.label_file_name, songFile.getName())); + textViews.get(2).setText(makeTextWithTitle(context, R.string.label_file_path, songFile.getAbsolutePath())); + textViews.get(3).setText(makeTextWithTitle(context, R.string.label_file_size, getFileSizeString(songFile.length()))); try { AudioFile audioFile = AudioFileIO.read(songFile); AudioHeader audioHeader = audioFile.getAudioHeader(); - fileFormat.setText( - makeTextWithTitle(context, R.string.label_file_format, audioHeader.getFormat())); - trackLength.setText(makeTextWithTitle(context, R.string.label_track_length, MusicUtil - .getReadableDurationString(audioHeader.getTrackLength() * 1000))); - bitRate.setText(makeTextWithTitle(context, R.string.label_bit_rate, - audioHeader.getBitRate() + " kb/s")); - samplingRate.setText(makeTextWithTitle(context, R.string.label_sampling_rate, - audioHeader.getSampleRate() + " Hz")); + textViews.get(4).setText(makeTextWithTitle(context, R.string.label_file_format, audioHeader.getFormat())); + textViews.get(5).setText(makeTextWithTitle(context, R.string.label_track_length, MusicUtil.getReadableDurationString(audioHeader.getTrackLength() * 1000))); + textViews.get(6).setText(makeTextWithTitle(context, R.string.label_bit_rate, audioHeader.getBitRate() + " kb/s")); + textViews.get(7).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))); + textViews.get(5).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))); + textViews.get(1).setText(makeTextWithTitle(context, R.string.label_file_name, song.title)); + textViews.get(5).setText(makeTextWithTitle(context, R.string.label_track_length, MusicUtil.getReadableDurationString(song.duration))); } } diff --git a/app/src/main/java/code/name/monkey/retromusic/loaders/ArtistLoader.java b/app/src/main/java/code/name/monkey/retromusic/loaders/ArtistLoader.java index 500c98a2..1c9ebd96 100644 --- a/app/src/main/java/code/name/monkey/retromusic/loaders/ArtistLoader.java +++ b/app/src/main/java/code/name/monkey/retromusic/loaders/ArtistLoader.java @@ -13,7 +13,7 @@ import code.name.monkey.retromusic.util.PreferenceUtil; import io.reactivex.Observable; public class ArtistLoader { - public static String getSongLoaderSortOrder(Context context) { + private static String getSongLoaderSortOrder(Context context) { return PreferenceUtil.getInstance(context).getArtistSortOrder() + ", " + PreferenceUtil.getInstance(context).getArtistAlbumSortOrder() + ", " + PreferenceUtil.getInstance(context).getAlbumDetailSongSortOrder() + ", " + @@ -98,22 +98,4 @@ public class ArtistLoader { }); }); } - - /* public static Observable> getAllArtists(Context context) { - return getArtistsForCursor(makeArtistCursor(context, null, null)); - } - - public static Observable getArtist(Context context, long id) { - return getArtist(makeArtistCursor(context, "_id=?", new String[]{String.valueOf(id)})); - } - - public static Observable> getArtists(Context context, String paramString) { - return getArtistsForCursor(makeArtistCursor(context, "artist LIKE ?", new String[]{"%" + paramString + "%"})); - } - - private static Cursor makeArtistCursor(Context context, String selection, String[] paramArrayOfString) { - final String artistSortOrder = PreferenceUtil.getInstance(context).getArtistSortOrder(); - Cursor cursor = context.getContentResolver().query(MediaStore.Audio.Artists.EXTERNAL_CONTENT_URI, new String[]{"_id", "artist", "number_of_albums", "number_of_tracks"}, selection, paramArrayOfString, artistSortOrder); - return cursor; - }*/ } diff --git a/app/src/main/java/code/name/monkey/retromusic/mvp/contract/ArtistDetailContract.java b/app/src/main/java/code/name/monkey/retromusic/mvp/contract/ArtistDetailContract.java index 2f8347b2..90b5a2c3 100644 --- a/app/src/main/java/code/name/monkey/retromusic/mvp/contract/ArtistDetailContract.java +++ b/app/src/main/java/code/name/monkey/retromusic/mvp/contract/ArtistDetailContract.java @@ -16,6 +16,6 @@ public interface ArtistDetailContract { } interface Presenter extends BasePresenter { - void loadArtistById(int artistId); + void loadArtistById(); } } diff --git a/app/src/main/java/code/name/monkey/retromusic/mvp/presenter/ArtistDetailsPresenter.java b/app/src/main/java/code/name/monkey/retromusic/mvp/presenter/ArtistDetailsPresenter.java index 22fcc390..4dd503dc 100644 --- a/app/src/main/java/code/name/monkey/retromusic/mvp/presenter/ArtistDetailsPresenter.java +++ b/app/src/main/java/code/name/monkey/retromusic/mvp/presenter/ArtistDetailsPresenter.java @@ -1,11 +1,14 @@ package code.name.monkey.retromusic.mvp.presenter; +import android.os.Bundle; import android.support.annotation.NonNull; import code.name.monkey.retromusic.model.Artist; import code.name.monkey.retromusic.mvp.Presenter; import code.name.monkey.retromusic.mvp.contract.ArtistDetailContract; +import static code.name.monkey.retromusic.ui.activities.ArtistDetailActivity.EXTRA_ARTIST_ID; + /** * Created by hemanths on 20/08/17. @@ -13,19 +16,19 @@ import code.name.monkey.retromusic.mvp.contract.ArtistDetailContract; public class ArtistDetailsPresenter extends Presenter implements ArtistDetailContract.Presenter { - private final int artistId; @NonNull private final ArtistDetailContract.ArtistsDetailsView view; + private Bundle bundle; public ArtistDetailsPresenter(@NonNull ArtistDetailContract.ArtistsDetailsView view, - int artistId) { + Bundle artistId) { this.view = view; - this.artistId = artistId; + this.bundle = artistId; } @Override public void subscribe() { - loadArtistById(artistId); + loadArtistById(); } @Override @@ -34,14 +37,14 @@ public class ArtistDetailsPresenter extends Presenter implements ArtistDetailCon } @Override - public void loadArtistById(int artistId) { - disposable.add(repository.getArtistById(artistId) + public void loadArtistById() { + disposable.add(repository.getArtistById(bundle.getInt(EXTRA_ARTIST_ID)) .subscribeOn(schedulerProvider.computation()) .observeOn(schedulerProvider.ui()) .doOnSubscribe(disposable1 -> view.loading()) .subscribe(this::showArtist, throwable -> view.showEmptyView(), - () -> view.completed())); + view::completed)); } private void showArtist(Artist album) { diff --git a/app/src/main/java/code/name/monkey/retromusic/ui/activities/AlbumDetailsActivity.java b/app/src/main/java/code/name/monkey/retromusic/ui/activities/AlbumDetailsActivity.java index 63beec86..46d1ca5b 100644 --- a/app/src/main/java/code/name/monkey/retromusic/ui/activities/AlbumDetailsActivity.java +++ b/app/src/main/java/code/name/monkey/retromusic/ui/activities/AlbumDetailsActivity.java @@ -171,9 +171,10 @@ public class AlbumDetailsActivity extends AbsSlidingMusicPanelActivity implement public void onViewClicked(View view) { switch (view.getId()) { case R.id.artist_image: - Pair pair = new Pair<>(artistImage, - getString(R.string.transition_artist_image)); - NavigationUtil.goToArtist(this, getAlbum().getArtistId(), pair); + Pair[] artistPairs = new Pair[]{Pair.create(image, + getResources().getString(R.string.transition_artist_image))}; + NavigationUtil.goToArtist(this, getAlbum().getArtistId(), + artistPairs); break; case R.id.action_shuffle_all: MusicPlayerRemote.openAndShuffleQueue(album.songs, true); diff --git a/app/src/main/java/code/name/monkey/retromusic/ui/activities/ArtistDetailActivity.java b/app/src/main/java/code/name/monkey/retromusic/ui/activities/ArtistDetailActivity.java index f57d5fa1..6e392069 100755 --- a/app/src/main/java/code/name/monkey/retromusic/ui/activities/ArtistDetailActivity.java +++ b/app/src/main/java/code/name/monkey/retromusic/ui/activities/ArtistDetailActivity.java @@ -125,18 +125,19 @@ public class ArtistDetailActivity extends AbsSlidingMusicPanelActivity implement setDrawUnderStatusBar(true); super.onCreate(bundle); ButterKnife.bind(this); - - supportPostponeEnterTransition(); setBottomBarVisibility(View.GONE); setNavigationbarColorAuto(); setLightNavigationBar(true); + supportPostponeEnterTransition(); + + lastFMRestClient = new LastFMRestClient(this); setUpViews(); - int artistID = getIntent().getIntExtra(EXTRA_ARTIST_ID, -1); - artistDetailsPresenter = new ArtistDetailsPresenter(this, artistID); + artistDetailsPresenter = new ArtistDetailsPresenter(this, getIntent().getExtras()); + artistDetailsPresenter.subscribe(); } private void setUpViews() { @@ -232,7 +233,7 @@ public class ArtistDetailActivity extends AbsSlidingMusicPanelActivity implement @Override protected void onResume() { super.onResume(); - artistDetailsPresenter.subscribe(); + } @Override diff --git a/app/src/main/java/code/name/monkey/retromusic/ui/activities/ErrorHandlerActivity.java b/app/src/main/java/code/name/monkey/retromusic/ui/activities/ErrorHandlerActivity.java new file mode 100644 index 00000000..fb5091bd --- /dev/null +++ b/app/src/main/java/code/name/monkey/retromusic/ui/activities/ErrorHandlerActivity.java @@ -0,0 +1 @@ +package code.name.monkey.retromusic.ui.activities; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.view.View; import butterknife.OnClick; import code.name.monkey.retromusic.R; import code.name.monkey.retromusic.RetroApplication; import code.name.monkey.retromusic.ui.activities.base.AbsBaseActivity; public class ErrorHandlerActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_error_handler); } @OnClick(R.id.clear_app_data) void clearAppDate(View view) { RetroApplication.deleteAppData(); } } \ No newline at end of file diff --git a/app/src/main/java/code/name/monkey/retromusic/ui/activities/ProVersionActivity.java b/app/src/main/java/code/name/monkey/retromusic/ui/activities/ProVersionActivity.java index 64f10c0b..322c3bc5 100644 --- a/app/src/main/java/code/name/monkey/retromusic/ui/activities/ProVersionActivity.java +++ b/app/src/main/java/code/name/monkey/retromusic/ui/activities/ProVersionActivity.java @@ -37,11 +37,14 @@ public class ProVersionActivity extends AbsBaseActivity implements private static final String TAG = "ProVersionActivity"; @BindView(R.id.toolbar) Toolbar toolbar; + @BindView(R.id.restore_button) View restoreButton; + @BindView(R.id.purchase_button) View purchaseButton; @BindView(R.id.app_bar) + AppBarLayout appBar; @BindView(R.id.status_bar) View statusBar; diff --git a/app/src/main/java/code/name/monkey/retromusic/ui/activities/base/AbsSlidingMusicPanelActivity.java b/app/src/main/java/code/name/monkey/retromusic/ui/activities/base/AbsSlidingMusicPanelActivity.java index 1fdc5e56..a57045c5 100644 --- a/app/src/main/java/code/name/monkey/retromusic/ui/activities/base/AbsSlidingMusicPanelActivity.java +++ b/app/src/main/java/code/name/monkey/retromusic/ui/activities/base/AbsSlidingMusicPanelActivity.java @@ -11,6 +11,10 @@ import android.view.View; import android.view.ViewGroup; import android.view.ViewTreeObserver; import android.view.animation.PathInterpolator; + +import com.sothree.slidinguppanel.SlidingUpPanelLayout; +import com.sothree.slidinguppanel.SlidingUpPanelLayout.PanelState; + import butterknife.BindView; import butterknife.ButterKnife; import code.name.monkey.appthemehelper.ThemeStore; @@ -35,399 +39,397 @@ import code.name.monkey.retromusic.ui.fragments.player.simple.SimplePlayerFragme import code.name.monkey.retromusic.util.PreferenceUtil; import code.name.monkey.retromusic.util.ViewUtil; import code.name.monkey.retromusic.views.BottomNavigationViewEx; -import com.sothree.slidinguppanel.SlidingUpPanelLayout; -import com.sothree.slidinguppanel.SlidingUpPanelLayout.PanelState; public abstract class AbsSlidingMusicPanelActivity extends AbsMusicServiceActivity implements - SlidingUpPanelLayout.PanelSlideListener, - PlayerFragment.Callbacks { + SlidingUpPanelLayout.PanelSlideListener, + PlayerFragment.Callbacks { - public static final String TAG = AbsSlidingMusicPanelActivity.class.getSimpleName(); + public static final String TAG = AbsSlidingMusicPanelActivity.class.getSimpleName(); - @BindView(R.id.bottom_navigation) - BottomNavigationViewEx bottomNavigationView; - @BindView(R.id.sliding_layout) - SlidingUpPanelLayout slidingUpPanelLayout; + @BindView(R.id.bottom_navigation) + BottomNavigationViewEx bottomNavigationView; + @BindView(R.id.sliding_layout) + SlidingUpPanelLayout slidingUpPanelLayout; - private int navigationbarColor; - private int taskColor; - private boolean lightStatusBar; - private boolean lightNavigationBar; - private NowPlayingScreen currentNowPlayingScreen; - private AbsPlayerFragment playerFragment; - private MiniPlayerFragment miniPlayerFragment; - private ValueAnimator navigationBarColorAnimator; + private int navigationbarColor; + private int taskColor; + private boolean lightStatusBar; + private boolean lightNavigationBar; + private NowPlayingScreen currentNowPlayingScreen; + private AbsPlayerFragment playerFragment; + private MiniPlayerFragment miniPlayerFragment; + private ValueAnimator navigationBarColorAnimator; - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(createContentView()); - ButterKnife.bind(this); - choosFragmentForTheme(); - //noinspection ConstantConditions - miniPlayerFragment.getView().setOnClickListener(v -> expandPanel()); - slidingUpPanelLayout.getViewTreeObserver() - .addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { - @Override - public void onGlobalLayout() { - slidingUpPanelLayout.getViewTreeObserver().removeOnGlobalLayoutListener(this); + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(createContentView()); + ButterKnife.bind(this); + choosFragmentForTheme(); + //noinspection ConstantConditions + miniPlayerFragment.getView().setOnClickListener(v -> expandPanel()); + slidingUpPanelLayout.getViewTreeObserver() + .addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { + @Override + public void onGlobalLayout() { + slidingUpPanelLayout.getViewTreeObserver().removeOnGlobalLayoutListener(this); - if (getPanelState() == PanelState.EXPANDED) { - onPanelSlide(slidingUpPanelLayout, 1); - onPanelExpanded(slidingUpPanelLayout); - } else if (getPanelState() == PanelState.COLLAPSED) { - onPanelCollapsed(slidingUpPanelLayout); - } else { - playerFragment.onHide(); - } - } - }); + if (getPanelState() == PanelState.EXPANDED) { + onPanelSlide(slidingUpPanelLayout, 1); + onPanelExpanded(slidingUpPanelLayout); + } else if (getPanelState() == PanelState.COLLAPSED) { + onPanelCollapsed(slidingUpPanelLayout); + } else { + playerFragment.onHide(); + } + } + }); - setupBottomView(); - slidingUpPanelLayout.addPanelSlideListener(this); + setupBottomView(); + slidingUpPanelLayout.addPanelSlideListener(this); - } - - private void choosFragmentForTheme() { - currentNowPlayingScreen = PreferenceUtil.getInstance(this).getNowPlayingScreen(); - - Fragment fragment; // must implement AbsPlayerFragment - switch (currentNowPlayingScreen) { - case MATERIAL: - fragment = new MaterialFragment(); - break; - case BLUR: - fragment = new BlurPlayerFragment(); - break; - case FLAT: - fragment = new FlatPlayerFragment(); - break; - case PLAIN: - fragment = new PlainPlayerFragment(); - break; - case FULL: - fragment = new FullPlayerFragment(); - break; - case COLOR: - fragment = new ColorFragment(); - break; - case CARD: - fragment = new CardFragment(); - break; - case SIMPLE: - fragment = new SimplePlayerFragment(); - break; - case TINY: - fragment = new HmmPlayerFragment(); - break; - case BLUR_CARD: - fragment = new CardBlurFragment(); - break; - case ADAPTIVE: - fragment = new AdaptiveFragment(); - break; - - case NORMAL: - default: - fragment = new PlayerFragment(); - break; - } - getSupportFragmentManager().beginTransaction().replace(R.id.player_fragment_container, fragment) - .commit(); - getSupportFragmentManager().executePendingTransactions(); - - playerFragment = (AbsPlayerFragment) getSupportFragmentManager() - .findFragmentById(R.id.player_fragment_container); - miniPlayerFragment = (MiniPlayerFragment) getSupportFragmentManager() - .findFragmentById(R.id.mini_player_fragment); - } - - private void setupBottomView() { - bottomNavigationView.setSelectedItemId(PreferenceUtil.getInstance(this).getLastPage()); - bottomNavigationView.setBackgroundColor(ThemeStore.primaryColor(this)); - bottomNavigationView.enableAnimation(false); - bottomNavigationView.enableItemShiftingMode(false); - bottomNavigationView.enableShiftingMode(false); - bottomNavigationView.setTextSize(10f); - bottomNavigationView.setTextVisibility(PreferenceUtil.getInstance(this).tabTitles()); - } - - @Override - protected void onResume() { - super.onResume(); - if (currentNowPlayingScreen != PreferenceUtil.getInstance(this).getNowPlayingScreen()) { - postRecreate(); - } - } - - @Override - public void onDestroy() { - super.onDestroy(); - if (navigationBarColorAnimator != null) { - navigationBarColorAnimator.cancel(); // just in case - } - } - - - protected abstract View createContentView(); - - @Override - public void onServiceConnected() { - super.onServiceConnected(); - if (!MusicPlayerRemote.getPlayingQueue().isEmpty()) { - slidingUpPanelLayout.getViewTreeObserver() - .addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { - @Override - public void onGlobalLayout() { - slidingUpPanelLayout.getViewTreeObserver().removeOnGlobalLayoutListener(this); - hideBottomBar(false); - } - }); - }// don't call hideBottomBar(true) here as it causes a bug with the SlidingUpPanelLayout - } - - @Override - public void onQueueChanged() { - super.onQueueChanged(); - hideBottomBar(MusicPlayerRemote.getPlayingQueue().isEmpty()); - } - - @Override - public void onPanelSlide(View panel, @FloatRange(from = 0, to = 1) float slideOffset) { - bottomNavigationView.setTranslationY(slideOffset * 400); - setMiniPlayerAlphaProgress(slideOffset); - //findViewById(R.id.player_fragment_container).setAlpha(slideOffset); - } - - @Override - public void onPanelStateChanged(View panel, PanelState previousState, PanelState newState) { - switch (newState) { - case COLLAPSED: - onPanelCollapsed(panel); - break; - case EXPANDED: - onPanelExpanded(panel); - break; - case ANCHORED: - collapsePanel(); // this fixes a bug where the panel would get stuck for some reason - break; - } - } - - public void onPanelCollapsed(View panel) { - // restore values - super.setLightStatusbar(lightStatusBar); - super.setTaskDescriptionColor(taskColor); - super.setNavigationbarColor(navigationbarColor); - super.setLightNavigationBar(lightNavigationBar); - - playerFragment.setMenuVisibility(false); - playerFragment.setUserVisibleHint(false); - playerFragment.onHide(); - } - - public void onPanelExpanded(View panel) { - // setting fragments values - int playerFragmentColor = playerFragment.getPaletteColor(); - super.setTaskDescriptionColor(playerFragmentColor); - - if (currentNowPlayingScreen == NowPlayingScreen.COLOR) { - super.setNavigationbarColor(playerFragmentColor); - } else { - super.setNavigationbarColor(ThemeStore.primaryColor(this)); } - setLightStatusBar(); + private void choosFragmentForTheme() { + currentNowPlayingScreen = PreferenceUtil.getInstance(this).getNowPlayingScreen(); - playerFragment.setMenuVisibility(true); - playerFragment.setUserVisibleHint(true); - playerFragment.onShow(); - } + Fragment fragment; // must implement AbsPlayerFragment + switch (currentNowPlayingScreen) { + case MATERIAL: + fragment = new MaterialFragment(); + break; + case BLUR: + fragment = new BlurPlayerFragment(); + break; + case FLAT: + fragment = new FlatPlayerFragment(); + break; + case PLAIN: + fragment = new PlainPlayerFragment(); + break; + case FULL: + fragment = new FullPlayerFragment(); + break; + case COLOR: + fragment = new ColorFragment(); + break; + case CARD: + fragment = new CardFragment(); + break; + case SIMPLE: + fragment = new SimplePlayerFragment(); + break; + case TINY: + fragment = new HmmPlayerFragment(); + break; + case BLUR_CARD: + fragment = new CardBlurFragment(); + break; + case ADAPTIVE: + fragment = new AdaptiveFragment(); + break; - private void setLightStatusBar() { - super.setLightStatusbar(!PreferenceUtil.getInstance(this).getAdaptiveColor() && - ColorUtil.isColorLight(ThemeStore.primaryColor(this)) && ( - currentNowPlayingScreen == NowPlayingScreen.FLAT - || currentNowPlayingScreen == NowPlayingScreen.PLAIN - || currentNowPlayingScreen == NowPlayingScreen.SIMPLE - || currentNowPlayingScreen == NowPlayingScreen.NORMAL - || currentNowPlayingScreen == NowPlayingScreen.ADAPTIVE - || currentNowPlayingScreen == NowPlayingScreen.TINY - || currentNowPlayingScreen == NowPlayingScreen.MATERIAL)); - } + case NORMAL: + default: + fragment = new PlayerFragment(); + break; + } + getSupportFragmentManager().beginTransaction().replace(R.id.player_fragment_container, fragment) + .commit(); + getSupportFragmentManager().executePendingTransactions(); - @Override - public void setLightStatusbar(boolean enabled) { - lightStatusBar = enabled; - if (getPanelState() == SlidingUpPanelLayout.PanelState.COLLAPSED) { - super.setLightStatusbar(enabled); + playerFragment = (AbsPlayerFragment) getSupportFragmentManager() + .findFragmentById(R.id.player_fragment_container); + miniPlayerFragment = (MiniPlayerFragment) getSupportFragmentManager() + .findFragmentById(R.id.mini_player_fragment); } - } - @Override - public void setLightNavigationBar(boolean enabled) { - lightNavigationBar = enabled; + private void setupBottomView() { + bottomNavigationView.setSelectedItemId(PreferenceUtil.getInstance(this).getLastPage()); + bottomNavigationView.setBackgroundColor(ThemeStore.primaryColor(this)); + bottomNavigationView.enableAnimation(false); + bottomNavigationView.enableItemShiftingMode(false); + bottomNavigationView.enableShiftingMode(false); + bottomNavigationView.setTextSize(10f); + bottomNavigationView.setTextVisibility(PreferenceUtil.getInstance(this).tabTitles()); + } + + @Override + protected void onResume() { + super.onResume(); + if (currentNowPlayingScreen != PreferenceUtil.getInstance(this).getNowPlayingScreen()) { + postRecreate(); + } + } + + @Override + public void onDestroy() { + super.onDestroy(); + if (navigationBarColorAnimator != null) { + navigationBarColorAnimator.cancel(); // just in case + } + } + + + protected abstract View createContentView(); + + @Override + public void onServiceConnected() { + super.onServiceConnected(); + if (!MusicPlayerRemote.getPlayingQueue().isEmpty()) { + slidingUpPanelLayout.getViewTreeObserver() + .addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { + @Override + public void onGlobalLayout() { + slidingUpPanelLayout.getViewTreeObserver().removeOnGlobalLayoutListener(this); + hideBottomBar(false); + } + }); + }// don't call hideBottomBar(true) here as it causes a bug with the SlidingUpPanelLayout + } + + @Override + public void onQueueChanged() { + super.onQueueChanged(); + hideBottomBar(MusicPlayerRemote.getPlayingQueue().isEmpty()); + } + + @Override + public void onPanelSlide(View panel, @FloatRange(from = 0, to = 1) float slideOffset) { + bottomNavigationView.setTranslationY(slideOffset * 400); + setMiniPlayerAlphaProgress(slideOffset); + //findViewById(R.id.player_fragment_container).setAlpha(slideOffset); + } + + @Override + public void onPanelStateChanged(View panel, PanelState previousState, PanelState newState) { + switch (newState) { + case COLLAPSED: + onPanelCollapsed(panel); + break; + case EXPANDED: + onPanelExpanded(panel); + break; + case ANCHORED: + collapsePanel(); // this fixes a bug where the panel would get stuck for some reason + break; + } + } + + public void onPanelCollapsed(View panel) { + // restore values + super.setLightStatusbar(lightStatusBar); + super.setTaskDescriptionColor(taskColor); + super.setNavigationbarColor(navigationbarColor); + super.setLightNavigationBar(lightNavigationBar); + + playerFragment.setMenuVisibility(false); + playerFragment.setUserVisibleHint(false); + playerFragment.onHide(); + } + + public void onPanelExpanded(View panel) { + // setting fragments values + int playerFragmentColor = playerFragment.getPaletteColor(); + super.setTaskDescriptionColor(playerFragmentColor); + + if (currentNowPlayingScreen == NowPlayingScreen.COLOR) { + super.setNavigationbarColor(playerFragmentColor); + } else { + super.setNavigationbarColor(ThemeStore.primaryColor(this)); + } + + setLightStatusBar(); + + playerFragment.setMenuVisibility(true); + playerFragment.setUserVisibleHint(true); + playerFragment.onShow(); + } + + private void setLightStatusBar() { + super.setLightStatusbar(!PreferenceUtil.getInstance(this).getAdaptiveColor() && + ColorUtil.isColorLight(ThemeStore.primaryColor(this)) && ( + currentNowPlayingScreen == NowPlayingScreen.FLAT + || currentNowPlayingScreen == NowPlayingScreen.PLAIN + || currentNowPlayingScreen == NowPlayingScreen.SIMPLE + || currentNowPlayingScreen == NowPlayingScreen.NORMAL + || currentNowPlayingScreen == NowPlayingScreen.ADAPTIVE + || currentNowPlayingScreen == NowPlayingScreen.TINY + || currentNowPlayingScreen == NowPlayingScreen.MATERIAL)); + } + + @Override + public void setLightStatusbar(boolean enabled) { + lightStatusBar = enabled; + if (getPanelState() == SlidingUpPanelLayout.PanelState.COLLAPSED) { + super.setLightStatusbar(enabled); + } + } + + @Override + public void setLightNavigationBar(boolean enabled) { + lightNavigationBar = enabled; /*if (getPanelState() == SlidingUpPanelLayout.PanelState.COLLAPSED) { super.setLightNavigationBar(enabled); }*/ - } - - @Override - public void setTaskDescriptionColor(@ColorInt int color) { - taskColor = color; - if (getPanelState() == null || getPanelState() == SlidingUpPanelLayout.PanelState.COLLAPSED) { - super.setTaskDescriptionColor(color); } - } - @Override - public void setNavigationbarColor(int color) { - navigationbarColor = color; - if (getPanelState() == SlidingUpPanelLayout.PanelState.COLLAPSED) { - if (navigationBarColorAnimator != null) { - navigationBarColorAnimator.cancel(); - } - super.setNavigationbarColor(color); + @Override + public void setTaskDescriptionColor(@ColorInt int color) { + taskColor = color; + if (getPanelState() == null || getPanelState() == SlidingUpPanelLayout.PanelState.COLLAPSED) { + super.setTaskDescriptionColor(color); + } } - } - @Override - public void onPaletteColorChanged() { - int playerFragmentColor = playerFragment.getPaletteColor(); - - if (getPanelState() == PanelState.EXPANDED) { - super.setTaskDescriptionColor(playerFragmentColor); - if (currentNowPlayingScreen == NowPlayingScreen.COLOR) { - super.setNavigationbarColor(playerFragmentColor); - } + @Override + public void setNavigationbarColor(int color) { + navigationbarColor = color; + if (getPanelState() == SlidingUpPanelLayout.PanelState.COLLAPSED) { + if (navigationBarColorAnimator != null) { + navigationBarColorAnimator.cancel(); + } + super.setNavigationbarColor(color); + } } - } - private void setMiniPlayerAlphaProgress(@FloatRange(from = 0, to = 1) float progress) { - if (miniPlayerFragment == null) { - return; + @Override + public void onPaletteColorChanged() { + int playerFragmentColor = playerFragment.getPaletteColor(); + + if (getPanelState() == PanelState.EXPANDED) { + super.setTaskDescriptionColor(playerFragmentColor); + if (currentNowPlayingScreen == NowPlayingScreen.COLOR) { + super.setNavigationbarColor(playerFragmentColor); + } + } } - float alpha = 1 - progress; - miniPlayerFragment.getView().setAlpha(alpha); - // necessary to make the views below clickable - miniPlayerFragment.getView().setVisibility(alpha == 0 ? View.GONE : View.VISIBLE); - } + private void setMiniPlayerAlphaProgress(@FloatRange(from = 0, to = 1) float progress) { + if (miniPlayerFragment == null) { + return; + } + float alpha = 1 - progress; + miniPlayerFragment.getView().setAlpha(alpha); + // necessary to make the views below clickable + miniPlayerFragment.getView().setVisibility(alpha == 0 ? View.GONE : View.VISIBLE); - public void hideBottomBar(final boolean hide) { - - int heightOfBar = - getResources().getDimensionPixelSize(R.dimen.mini_player_height); - int heightOfBarWithTabs = - getResources().getDimensionPixelSize(R.dimen.mini_player_height_expanded); - - if (hide) { - slidingUpPanelLayout.setPanelHeight(0); - collapsePanel(); - } else { - if (!MusicPlayerRemote.getPlayingQueue().isEmpty()) { - slidingUpPanelLayout.setPanelHeight(bottomNavigationView.getVisibility() == View.VISIBLE ? - heightOfBarWithTabs : heightOfBar); - } } - } - public void setBottomBarVisibility(int gone) { - if (bottomNavigationView != null) { - //TransitionManager.beginDelayedTransition(bottomNavigationView); - bottomNavigationView.setVisibility(gone); - hideBottomBar(false); + public void hideBottomBar(final boolean hide) { + + int heightOfBar = + getResources().getDimensionPixelSize(R.dimen.mini_player_height); + int heightOfBarWithTabs = + getResources().getDimensionPixelSize(R.dimen.mini_player_height_expanded); + + if (hide) { + slidingUpPanelLayout.setPanelHeight(0); + collapsePanel(); + } else { + if (!MusicPlayerRemote.getPlayingQueue().isEmpty()) { + slidingUpPanelLayout.setPanelHeight(bottomNavigationView.getVisibility() == View.VISIBLE ? + heightOfBarWithTabs : heightOfBar); + } + } } - } - protected View wrapSlidingMusicPanel(@LayoutRes int resId) { - @SuppressLint("InflateParams") - View slidingMusicPanelLayout = getLayoutInflater() - .inflate(R.layout.sliding_music_panel_layout, null); - ViewGroup contentContainer = slidingMusicPanelLayout.findViewById(R.id.content_container); - getLayoutInflater().inflate(resId, contentContainer); - return slidingMusicPanelLayout; - } - - @Override - public void onBackPressed() { - if (!handleBackPress()) { - super.onBackPressed(); + public void setBottomBarVisibility(int gone) { + if (bottomNavigationView != null) { + //TransitionManager.beginDelayedTransition(bottomNavigationView); + bottomNavigationView.setVisibility(gone); + hideBottomBar(false); + } } - } - public boolean handleBackPress() { - if (slidingUpPanelLayout.getPanelHeight() != 0 && playerFragment.onBackPressed()) { - return true; + protected View wrapSlidingMusicPanel(@LayoutRes int resId) { + @SuppressLint("InflateParams") + View slidingMusicPanelLayout = getLayoutInflater() + .inflate(R.layout.sliding_music_panel_layout, null); + ViewGroup contentContainer = slidingMusicPanelLayout.findViewById(R.id.content_container); + getLayoutInflater().inflate(resId, contentContainer); + return slidingMusicPanelLayout; } - if (getPanelState() == SlidingUpPanelLayout.PanelState.EXPANDED) { - collapsePanel(); - return true; + + @Override + public void onBackPressed() { + if (!handleBackPress()) { + super.onBackPressed(); + } } - return false; - } - private void animateNavigationBarColor(int color) { - if (navigationBarColorAnimator != null) { - navigationBarColorAnimator.cancel(); + public boolean handleBackPress() { + if (slidingUpPanelLayout.getPanelHeight() != 0 && playerFragment.onBackPressed()) { + return true; + } + if (getPanelState() == SlidingUpPanelLayout.PanelState.EXPANDED) { + collapsePanel(); + return true; + } + return false; } - navigationBarColorAnimator = ValueAnimator.ofArgb(getWindow().getNavigationBarColor(), color) - .setDuration(ViewUtil.RETRO_MUSIC_ANIM_TIME); - navigationBarColorAnimator.setInterpolator(new PathInterpolator(0.4f, 0f, 1f, 1f)); - navigationBarColorAnimator.addUpdateListener(animation -> { - int playerFragmentColorDark = ColorUtil.darkenColor((Integer) animation.getAnimatedValue()); - bottomNavigationView.setBackgroundColor(playerFragmentColorDark); - miniPlayerFragment.setColor(playerFragmentColorDark); - AbsSlidingMusicPanelActivity.super.setNavigationbarColor(playerFragmentColorDark); + private void animateNavigationBarColor(int color) { + if (navigationBarColorAnimator != null) { + navigationBarColorAnimator.cancel(); + } + navigationBarColorAnimator = ValueAnimator.ofArgb(getWindow().getNavigationBarColor(), color) + .setDuration(ViewUtil.RETRO_MUSIC_ANIM_TIME); + navigationBarColorAnimator.setInterpolator(new PathInterpolator(0.4f, 0f, 1f, 1f)); + navigationBarColorAnimator.addUpdateListener(animation -> { + int playerFragmentColorDark = ColorUtil.darkenColor((Integer) animation.getAnimatedValue()); - View view = getWindow().getDecorView().getRootView(); - view.setBackgroundColor(playerFragmentColorDark); + bottomNavigationView.setBackgroundColor(playerFragmentColorDark); + miniPlayerFragment.setColor(playerFragmentColorDark); + AbsSlidingMusicPanelActivity.super.setNavigationbarColor(playerFragmentColorDark); - if (view.findViewById(R.id.toolbar) != null) { - view.findViewById(R.id.toolbar).setBackgroundColor(playerFragmentColorDark); - } - if (view.findViewById(R.id.appbar) != null) { - view.findViewById(R.id.appbar).setBackgroundColor(playerFragmentColorDark); - } - if (view.findViewById(R.id.status_bar) != null) { - view.findViewById(R.id.status_bar) - .setBackgroundColor(ColorUtil.darkenColor(playerFragmentColorDark)); - } - }); - navigationBarColorAnimator.start(); - } + View view = getWindow().getDecorView().getRootView(); + view.setBackgroundColor(playerFragmentColorDark); - @Override - protected View getSnackBarContainer() { - return findViewById(R.id.content_container); - } + if (view.findViewById(R.id.toolbar) != null) { + view.findViewById(R.id.toolbar).setBackgroundColor(playerFragmentColorDark); + } + if (view.findViewById(R.id.appbar) != null) { + view.findViewById(R.id.appbar).setBackgroundColor(playerFragmentColorDark); + } + if (view.findViewById(R.id.status_bar) != null) { + view.findViewById(R.id.status_bar) + .setBackgroundColor(ColorUtil.darkenColor(playerFragmentColorDark)); + } + }); + navigationBarColorAnimator.start(); + } - public SlidingUpPanelLayout getSlidingUpPanelLayout() { - return slidingUpPanelLayout; - } + @Override + protected View getSnackBarContainer() { + return findViewById(R.id.content_container); + } - public MiniPlayerFragment getMiniPlayerFragment() { - return miniPlayerFragment; - } + public SlidingUpPanelLayout getSlidingUpPanelLayout() { + return slidingUpPanelLayout; + } - public AbsPlayerFragment getPlayerFragment() { - return playerFragment; - } + public MiniPlayerFragment getMiniPlayerFragment() { + return miniPlayerFragment; + } - public BottomNavigationViewEx getBottomNavigationView() { - return bottomNavigationView; - } + public AbsPlayerFragment getPlayerFragment() { + return playerFragment; + } - public SlidingUpPanelLayout.PanelState getPanelState() { - return slidingUpPanelLayout == null ? null : slidingUpPanelLayout.getPanelState(); - } + public BottomNavigationViewEx getBottomNavigationView() { + return bottomNavigationView; + } - public void collapsePanel() { - slidingUpPanelLayout.setPanelState(SlidingUpPanelLayout.PanelState.COLLAPSED); - } + public SlidingUpPanelLayout.PanelState getPanelState() { + return slidingUpPanelLayout == null ? null : slidingUpPanelLayout.getPanelState(); + } - public void expandPanel() { - slidingUpPanelLayout.setPanelState(SlidingUpPanelLayout.PanelState.EXPANDED); - } + public void collapsePanel() { + slidingUpPanelLayout.setPanelState(SlidingUpPanelLayout.PanelState.COLLAPSED); + } + + public void expandPanel() { + slidingUpPanelLayout.setPanelState(SlidingUpPanelLayout.PanelState.EXPANDED); + } } diff --git a/app/src/main/java/code/name/monkey/retromusic/ui/activities/tageditor/AbsTagEditorActivity.java b/app/src/main/java/code/name/monkey/retromusic/ui/activities/tageditor/AbsTagEditorActivity.java index 1a6580b3..2836a5aa 100755 --- a/app/src/main/java/code/name/monkey/retromusic/ui/activities/tageditor/AbsTagEditorActivity.java +++ b/app/src/main/java/code/name/monkey/retromusic/ui/activities/tageditor/AbsTagEditorActivity.java @@ -43,10 +43,13 @@ public abstract class AbsTagEditorActivity extends AbsBaseActivity { private static final int REQUEST_CODE_SELECT_IMAGE = 1000; @BindView(R.id.save_fab) FloatingActionButton save; + @BindView(R.id.image) ImageView image; + @BindView(R.id.image_container) FrameLayout imageContainer; + CharSequence[] items; private int id; private int paletteColorPrimary; diff --git a/app/src/main/java/code/name/monkey/retromusic/ui/activities/tageditor/SongTagEditorActivity.java b/app/src/main/java/code/name/monkey/retromusic/ui/activities/tageditor/SongTagEditorActivity.java index 7c194d9e..b9655e59 100755 --- a/app/src/main/java/code/name/monkey/retromusic/ui/activities/tageditor/SongTagEditorActivity.java +++ b/app/src/main/java/code/name/monkey/retromusic/ui/activities/tageditor/SongTagEditorActivity.java @@ -8,6 +8,7 @@ import android.support.v7.widget.Toolbar; import android.text.Editable; import android.text.TextWatcher; import android.widget.EditText; +import android.widget.TextView; import org.jaudiotagger.tag.FieldKey; @@ -28,22 +29,34 @@ public class SongTagEditorActivity extends AbsTagEditorActivity implements TextW public static final String TAG = SongTagEditorActivity.class.getSimpleName(); @BindView(R.id.toolbar) Toolbar toolbar; + @BindView(R.id.app_bar) AppBarLayout appBarLayout; + + @BindView(R.id.title) + TextView title; + @BindView(R.id.title1) EditText songTitle; + @BindView(R.id.title2) EditText albumTitle; + @BindView(R.id.artist) EditText artist; + @BindView(R.id.genre) EditText genre; + @BindView(R.id.year) EditText year; + @BindView(R.id.image_text) EditText trackNumber; + @BindView(R.id.lyrics) EditText lyrics; + @BindView(R.id.album_artist) EditText albumArtist; @@ -51,7 +64,8 @@ public class SongTagEditorActivity extends AbsTagEditorActivity implements TextW appBarLayout.setBackgroundColor(ThemeStore.primaryColor(this)); toolbar.setBackgroundColor(ThemeStore.primaryColor(this)); toolbar.setNavigationOnClickListener(v -> onBackPressed()); - setTitle(R.string.action_tag_editor); + setTitle(null); + title.setTextColor(ThemeStore.textColorPrimary(this)); setSupportActionBar(toolbar); } diff --git a/app/src/main/java/code/name/monkey/retromusic/ui/adapter/artist/ArtistAdapter.java b/app/src/main/java/code/name/monkey/retromusic/ui/adapter/artist/ArtistAdapter.java index 5fb24a1a..f839f343 100644 --- a/app/src/main/java/code/name/monkey/retromusic/ui/adapter/artist/ArtistAdapter.java +++ b/app/src/main/java/code/name/monkey/retromusic/ui/adapter/artist/ArtistAdapter.java @@ -31,9 +31,7 @@ import code.name.monkey.retromusic.util.MusicUtil; import code.name.monkey.retromusic.util.NavigationUtil; -public class ArtistAdapter extends - AbsMultiSelectAdapter implements - FastScrollRecyclerView.SectionedAdapter { +public class ArtistAdapter extends AbsMultiSelectAdapter implements FastScrollRecyclerView.SectionedAdapter { protected final AppCompatActivity activity; protected ArrayList dataSet; @@ -54,7 +52,7 @@ public class ArtistAdapter extends } public ArtistAdapter(@NonNull AppCompatActivity activity, ArrayList dataSet, - @LayoutRes int itemLayoutRes ) { + @LayoutRes int itemLayoutRes) { super(activity, null, R.menu.menu_media_selection); this.activity = activity; this.dataSet = dataSet; diff --git a/app/src/main/java/code/name/monkey/retromusic/ui/fragments/mainactivity/LibraryFragment.java b/app/src/main/java/code/name/monkey/retromusic/ui/fragments/mainactivity/LibraryFragment.java index 28209a63..3dae3b5c 100644 --- a/app/src/main/java/code/name/monkey/retromusic/ui/fragments/mainactivity/LibraryFragment.java +++ b/app/src/main/java/code/name/monkey/retromusic/ui/fragments/mainactivity/LibraryFragment.java @@ -55,10 +55,13 @@ public class LibraryFragment extends AbsMainActivityFragment implements CabHolde @BindView(R.id.toolbar) Toolbar toolbar; + @BindView(R.id.app_bar) AppBarLayout appbar; + @BindView(R.id.title) TextView title; + @BindView(R.id.search) IconImageView search; diff --git a/app/src/main/java/code/name/monkey/retromusic/ui/fragments/mainactivity/folders/FoldersFragment.java b/app/src/main/java/code/name/monkey/retromusic/ui/fragments/mainactivity/folders/FoldersFragment.java index 5db70b85..2528069f 100644 --- a/app/src/main/java/code/name/monkey/retromusic/ui/fragments/mainactivity/folders/FoldersFragment.java +++ b/app/src/main/java/code/name/monkey/retromusic/ui/fragments/mainactivity/folders/FoldersFragment.java @@ -86,18 +86,25 @@ public class FoldersFragment extends AbsMainActivityFragment implements private static final int LOADER_ID = LoaderIds.FOLDERS_FRAGMENT; @BindView(R.id.coordinator_layout) CoordinatorLayout coordinatorLayout; + @BindView(R.id.container) View container; + @BindView(R.id.title) TextView title; + @BindView(android.R.id.empty) View empty; + @BindView(R.id.toolbar) Toolbar toolbar; + @BindView(R.id.bread_crumbs) BreadCrumbLayout breadCrumbs; + @BindView(R.id.appbar) AppBarLayout appbar; + @BindView(R.id.recycler_view) FastScrollRecyclerView recyclerView; diff --git a/app/src/main/java/code/name/monkey/retromusic/ui/fragments/player/full/FullPlaybackControlsFragment.java b/app/src/main/java/code/name/monkey/retromusic/ui/fragments/player/full/FullPlaybackControlsFragment.java index 6eb93e4a..ab26993d 100644 --- a/app/src/main/java/code/name/monkey/retromusic/ui/fragments/player/full/FullPlaybackControlsFragment.java +++ b/app/src/main/java/code/name/monkey/retromusic/ui/fragments/player/full/FullPlaybackControlsFragment.java @@ -42,27 +42,39 @@ import code.name.monkey.retromusic.util.PreferenceUtil; public class FullPlaybackControlsFragment extends AbsPlayerControlsFragment { @BindView(R.id.player_song_current_progress) TextView mPlayerSongCurrentProgress; + @BindView(R.id.player_song_total_time) TextView songTotalTime; + @BindView(R.id.player_progress_slider) SeekBar progressSlider; @BindView(R.id.player_prev_button) + ImageButton playerPrevButton; @BindView(R.id.player_next_button) + ImageButton playerNextButton; @BindView(R.id.player_repeat_button) + ImageButton playerRepeatButton; @BindView(R.id.player_shuffle_button) + ImageButton playerShuffleButton; @BindView(R.id.player_play_pause_button) + ImageButton playerPlayPauseFab; - Unbinder unbinder; + + @BindView(R.id.title) TextView mTitle; + @BindView(R.id.text) TextView mText; + @BindView(R.id.volume_fragment_container) View mVolumeContainer; + + Unbinder unbinder; private int lastPlaybackControlsColor; private int lastDisabledPlaybackControlsColor; private MusicProgressViewUpdateHelper progressViewUpdateHelper;