diff --git a/app/build.gradle b/app/build.gradle
index 72d67218e..266fbde92 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -75,10 +75,12 @@ android {
abortOnError false
}
compileOptions {
- sourceCompatibility '1.8'
- targetCompatibility '1.8'
+ sourceCompatibility JavaVersion.VERSION_1_8
+ targetCompatibility JavaVersion.VERSION_1_8
+ }
+ kotlinOptions {
+ jvmTarget = "1.8"
}
-
configurations.all {
resolutionStrategy.force 'com.google.code.findbugs:jsr305:1.3.9'
@@ -89,7 +91,6 @@ android {
kapt {
generateStubs = true
}
-
}
def getProperties(String fileName) {
@@ -118,15 +119,16 @@ dependencies {
implementation "androidx.gridlayout:gridlayout:1.0.0"
implementation "androidx.cardview:cardview:1.0.0"
implementation "androidx.palette:palette:1.0.0"
- implementation 'androidx.palette:palette-ktx:1.0.0'
implementation "androidx.viewpager2:viewpager2:1.1.0-alpha01"
implementation 'androidx.appcompat:appcompat:1.1.0'
implementation 'androidx.annotation:annotation:1.1.0'
implementation 'androidx.preference:preference:1.1.1'
- implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
implementation 'androidx.core:core-ktx:1.2.0'
- implementation 'androidx.fragment:fragment:1.2.4'
+ implementation 'androidx.fragment:fragment-ktx:1.2.4'
+ implementation 'androidx.palette:palette-ktx:1.0.0'
+
+ implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
implementation 'androidx.recyclerview:recyclerview:1.1.0'
implementation 'com.google.android.material:material:1.2.0-alpha06'
diff --git a/app/src/main/assets/oldindex.html b/app/src/main/assets/oldindex.html
index b29773666..a6ce8895f 100644
--- a/app/src/main/assets/oldindex.html
+++ b/app/src/main/assets/oldindex.html
@@ -25,6 +25,7 @@
}
+
diff --git a/app/src/main/assets/retro-changelog.html b/app/src/main/assets/retro-changelog.html
index 4c86d4d49..04dcc205e 100644
--- a/app/src/main/assets/retro-changelog.html
+++ b/app/src/main/assets/retro-changelog.html
@@ -53,27 +53,29 @@
font-size: 1rem;
}
{style-placeholder}
+
- April 30, 2020
- v3.5.110
- Beta version
-
-
- - Changed profile form image to icon
- - New what's new screen
- - Added In-App language changer, where you can select language
-
-
-
- - Improved loading of Songs, Albums, Artists, Genres, Playlists
-
-
- *If you face any UI related issues you clear app data and cache, if itsnot working try to uninstall and install
- again.
+April 30, 2020
+v3.5.110
+Beta version
+
+
+ - Changed profile form image to icon
+ - New what's new screen
+ - Added In-App language changer, where you can select language
+
+
+
+ - Improved loading of Songs, Albums, Artists, Genres, Playlists
+
+
+*If you face any UI related issues you clear app data and cache, if itsnot working try to
+ uninstall and install
+ again.
\ No newline at end of file
diff --git a/app/src/main/java/code/name/monkey/retromusic/Constants.kt b/app/src/main/java/code/name/monkey/retromusic/Constants.kt
index 0b3c6fa9d..1f871b583 100644
--- a/app/src/main/java/code/name/monkey/retromusic/Constants.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/Constants.kt
@@ -50,4 +50,81 @@ object Constants {
MediaStore.Audio.AudioColumns.COMPOSER
)// 11
const val NUMBER_OF_TOP_TRACKS = 99
+
+
}
+
+const val EXTRA_SONG = "extra_songs"
+const val EXTRA_PLAYLIST = "extra_list"
+const val LIBRARY_CATEGORIES = "library_categories"
+const val EXTRA_SONG_INFO = "extra_song_info"
+const val DESATURATED_COLOR = "desaturated_color"
+const val BLACK_THEME = "black_theme"
+const val KEEP_SCREEN_ON = "keep_screen_on"
+const val TOGGLE_HOME_BANNER = "toggle_home_banner"
+const val NOW_PLAYING_SCREEN_ID = "now_playing_screen_id"
+const val CAROUSEL_EFFECT = "carousel_effect"
+const val COLORED_NOTIFICATION = "colored_notification"
+const val CLASSIC_NOTIFICATION = "classic_notification"
+const val GAPLESS_PLAYBACK = "gapless_playback"
+const val ALBUM_ART_ON_LOCKSCREEN = "album_art_on_lockscreen"
+const val BLURRED_ALBUM_ART = "blurred_album_art"
+const val NEW_BLUR_AMOUNT = "new_blur_amount"
+const val TOGGLE_HEADSET = "toggle_headset"
+const val GENERAL_THEME = "general_theme"
+const val CIRCULAR_ALBUM_ART = "circular_album_art"
+const val USER_NAME = "user_name"
+const val TOGGLE_FULL_SCREEN = "toggle_full_screen"
+const val TOGGLE_VOLUME = "toggle_volume"
+const val ROUND_CORNERS = "corner_window"
+const val TOGGLE_GENRE = "toggle_genre"
+const val PROFILE_IMAGE_PATH = "profile_image_path"
+const val BANNER_IMAGE_PATH = "banner_image_path"
+const val ADAPTIVE_COLOR_APP = "adaptive_color_app"
+const val TOGGLE_SEPARATE_LINE = "toggle_separate_line"
+const val HOME_ARTIST_GRID_STYLE = "home_artist_grid_style"
+const val TOGGLE_ADD_CONTROLS = "toggle_add_controls"
+const val ALBUM_COVER_STYLE = "album_cover_style_id"
+const val ALBUM_COVER_TRANSFORM = "album_cover_transform"
+const val TAB_TEXT_MODE = "tab_text_mode"
+const val LANGUAGE_NAME = "language_name"
+const val DIALOG_CORNER = "dialog_corner"
+const val SLEEP_TIMER_FINISH_SONG = "sleep_timer_finish_song"
+const val ALBUM_GRID_STYLE = "album_grid_style_home"
+const val ARTIST_GRID_STYLE = "artist_grid_style_home"
+const val SAF_SDCARD_URI = "saf_sdcard_uri"
+const val SONG_SORT_ORDER = "song_sort_order"
+const val SONG_GRID_SIZE = "song_grid_size"
+const val GENRE_SORT_ORDER = "genre_sort_order"
+const val LAST_PAGE = "last_start_page"
+const val BLUETOOTH_PLAYBACK = "bluetooth_playback"
+const val INITIALIZED_BLACKLIST = "initialized_blacklist"
+const val ARTIST_SORT_ORDER = "artist_sort_order"
+const val ARTIST_ALBUM_SORT_ORDER = "artist_album_sort_order"
+const val ALBUM_SORT_ORDER = "album_sort_order"
+const val ALBUM_SONG_SORT_ORDER = "album_song_sort_order"
+const val ARTIST_SONG_SORT_ORDER = "artist_song_sort_order"
+const val ALBUM_GRID_SIZE = "album_grid_size"
+const val ALBUM_GRID_SIZE_LAND = "album_grid_size_land"
+const val SONG_GRID_SIZE_LAND = "song_grid_size_land"
+const val ARTIST_GRID_SIZE = "artist_grid_size"
+const val ARTIST_GRID_SIZE_LAND = "artist_grid_size_land"
+const val COLORED_APP_SHORTCUTS = "colored_app_shortcuts"
+const val AUDIO_DUCKING = "audio_ducking"
+const val LAST_ADDED_CUTOFF = "last_added_interval"
+const val LAST_SLEEP_TIMER_VALUE = "last_sleep_timer_value"
+const val NEXT_SLEEP_TIMER_ELAPSED_REALTIME =
+ "next_sleep_timer_elapsed_real_time"
+const val IGNORE_MEDIA_STORE_ARTWORK = "ignore_media_store_artwork"
+const val LAST_CHANGELOG_VERSION = "last_changelog_version"
+const val AUTO_DOWNLOAD_IMAGES_POLICY = "auto_download_images_policy"
+const val START_DIRECTORY = "start_directory"
+const val LOCK_SCREEN = "lock_screen"
+const val ALBUM_DETAIL_SONG_SORT_ORDER = "album_detail_song_sort_order"
+const val LYRICS_OPTIONS = "lyrics_tab_position"
+const val CHOOSE_EQUALIZER = "choose_equalizer"
+const val TOGGLE_SHUFFLE = "toggle_shuffle"
+const val SONG_GRID_STYLE = "song_grid_style"
+const val PAUSE_ON_ZERO_VOLUME = "pause_on_zero_volume"
+const val FILTER_SONG = "filter_song"
+const val EXPAND_NOW_PLAYING_PANEL = "expand_now_playing_panel"
\ No newline at end of file
diff --git a/app/src/main/java/code/name/monkey/retromusic/activities/AboutActivity.kt b/app/src/main/java/code/name/monkey/retromusic/activities/AboutActivity.kt
index 045597d9e..58650582e 100644
--- a/app/src/main/java/code/name/monkey/retromusic/activities/AboutActivity.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/activities/AboutActivity.kt
@@ -25,9 +25,6 @@ import code.name.monkey.retromusic.adapter.ContributorAdapter
import code.name.monkey.retromusic.extensions.applyToolbar
import code.name.monkey.retromusic.model.Contributor
import code.name.monkey.retromusic.util.NavigationUtil
-import code.name.monkey.retromusic.util.PreferenceUtil
-import com.afollestad.materialdialogs.MaterialDialog
-import com.afollestad.materialdialogs.list.listItems
import com.google.gson.Gson
import com.google.gson.reflect.TypeToken
import kotlinx.android.synthetic.main.activity_about.*
@@ -57,7 +54,6 @@ class AboutActivity : AbsBaseActivity(), View.OnClickListener {
return json
}
-
override fun onCreate(savedInstanceState: Bundle?) {
setDrawUnderStatusBar()
super.onCreate(savedInstanceState)
@@ -121,19 +117,6 @@ class AboutActivity : AbsBaseActivity(), View.OnClickListener {
}
}
- private fun showChangeLogOptions() {
- MaterialDialog(this).show {
- cornerRadius(PreferenceUtil.getInstance(this@AboutActivity).dialogCorner)
- listItems(items = listOf("Telegram Channel", "App")) { _, position, _ ->
- if (position == 0) {
- openUrl(TELEGRAM_CHANGE_LOG)
- } else {
- NavigationUtil.gotoWhatNews(this@AboutActivity)
- }
- }
- }
- }
-
private fun getAppVersion(): String {
return try {
val isPro = if (App.isProVersion()) "Pro" else "Free"
diff --git a/app/src/main/java/code/name/monkey/retromusic/activities/AlbumDetailsActivity.kt b/app/src/main/java/code/name/monkey/retromusic/activities/AlbumDetailsActivity.kt
index 7acd79bff..c3c1c5e59 100644
--- a/app/src/main/java/code/name/monkey/retromusic/activities/AlbumDetailsActivity.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/activities/AlbumDetailsActivity.kt
@@ -74,7 +74,7 @@ class AlbumDetailsActivity : AbsSlidingMusicPanelActivity(), AlbumDetailsView, C
private lateinit var artistImage: ImageView
private var cab: MaterialCab? = null
private val savedSortOrder: String
- get() = PreferenceUtil.getInstance(this).albumDetailSongSortOrder
+ get() = PreferenceUtilKT.albumDetailSongSortOrder
override fun createContentView(): View {
return wrapSlidingMusicPanel(R.layout.activity_album)
@@ -256,7 +256,7 @@ class AlbumDetailsActivity : AbsSlidingMusicPanelActivity(), AlbumDetailsView, C
private fun loadAlbumCover() {
AlbumGlideRequest.Builder.from(Glide.with(this), album.safeGetFirstSong())
.checkIgnoreMediaStore(this)
- .ignoreMediaStore(PreferenceUtil.getInstance(this).ignoreMediaStoreArtwork())
+ .ignoreMediaStore(PreferenceUtilKT.isIgnoreMediaStoreArtwork)
.generatePalette(this)
.build()
.dontAnimate()
@@ -269,7 +269,7 @@ class AlbumDetailsActivity : AbsSlidingMusicPanelActivity(), AlbumDetailsView, C
}
private fun setColors(color: MediaNotificationProcessor) {
- val buttonColor = if (PreferenceUtil.getInstance(this).adaptiveColor)
+ val buttonColor = if (PreferenceUtilKT.isAdaptiveColor)
color.backgroundColor.ripAlpha()
else
ATHUtil.resolveColor(this, R.attr.colorSurface)
@@ -362,8 +362,8 @@ class AlbumDetailsActivity : AbsSlidingMusicPanelActivity(), AlbumDetailsView, C
}
}
- private fun setSaveSortOrder(sortOrder: String?) {
- PreferenceUtil.getInstance(this).albumDetailSongSortOrder = sortOrder
+ private fun setSaveSortOrder(sortOrder: String) {
+ PreferenceUtilKT.albumDetailSongSortOrder = sortOrder
when (sortOrder) {
AlbumSongSortOrder.SONG_TRACK_LIST -> album.songs?.sortWith(Comparator { o1, o2 ->
o1.trackNumber.compareTo(
diff --git a/app/src/main/java/code/name/monkey/retromusic/activities/ArtistDetailActivity.kt b/app/src/main/java/code/name/monkey/retromusic/activities/ArtistDetailActivity.kt
index 844f80cba..6b2154a66 100755
--- a/app/src/main/java/code/name/monkey/retromusic/activities/ArtistDetailActivity.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/activities/ArtistDetailActivity.kt
@@ -255,7 +255,7 @@ class ArtistDetailActivity : AbsSlidingMusicPanelActivity(), ArtistDetailsView,
}
private fun setColors(color: MediaNotificationProcessor) {
- val buttonColor = if (PreferenceUtil.getInstance(this).adaptiveColor)
+ val buttonColor = if (PreferenceUtilKT.isAdaptiveColor)
color.backgroundColor.ripAlpha()
else
ATHUtil.resolveColor(this, R.attr.colorSurface)
diff --git a/app/src/main/java/code/name/monkey/retromusic/activities/LyricsActivity.kt b/app/src/main/java/code/name/monkey/retromusic/activities/LyricsActivity.kt
index a7dc36de1..a6d5dd39f 100644
--- a/app/src/main/java/code/name/monkey/retromusic/activities/LyricsActivity.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/activities/LyricsActivity.kt
@@ -33,7 +33,7 @@ import code.name.monkey.retromusic.model.Song
import code.name.monkey.retromusic.model.lyrics.Lyrics
import code.name.monkey.retromusic.util.LyricUtil
import code.name.monkey.retromusic.util.MusicUtil
-import code.name.monkey.retromusic.util.PreferenceUtil
+import code.name.monkey.retromusic.util.PreferenceUtilKT
import code.name.monkey.retromusic.util.RetroUtil
import com.afollestad.materialdialogs.MaterialDialog
import com.afollestad.materialdialogs.input.getInputLayout
@@ -61,7 +61,7 @@ class LyricsActivity : AbsMusicServiceActivity(), View.OnClickListener,
}
override fun onPageSelected(position: Int) {
- PreferenceUtil.getInstance(this).lyricsOptions = position
+ PreferenceUtilKT.lyricsOption = position
if (position == 0) fab.text = getString(R.string.synced_lyrics)
else if (position == 1) fab.text = getString(R.string.lyrics)
}
@@ -107,7 +107,7 @@ class LyricsActivity : AbsMusicServiceActivity(), View.OnClickListener,
viewPager.apply {
adapter = PagerAdapter(supportFragmentManager)
- currentItem = PreferenceUtil.getInstance(this@LyricsActivity).lyricsOptions
+ currentItem = PreferenceUtilKT.lyricsOption
addOnPageChangeListener(this@LyricsActivity)
}
@@ -172,7 +172,6 @@ class LyricsActivity : AbsMusicServiceActivity(), View.OnClickListener,
val materialDialog = MaterialDialog(this)
.show {
- cornerRadius(PreferenceUtil.getInstance(this@LyricsActivity).dialogCorner)
title(R.string.add_time_framed_lryics)
negativeButton(R.string.action_search) {
RetroUtil.openUrl(this@LyricsActivity, googleSearchLrcUrl)
@@ -210,7 +209,7 @@ class LyricsActivity : AbsMusicServiceActivity(), View.OnClickListener,
val materialDialog = MaterialDialog(
this
).show {
- cornerRadius(PreferenceUtil.getInstance(this@LyricsActivity).dialogCorner)
+
title(R.string.add_lyrics)
negativeButton(R.string.action_search) {
RetroUtil.openUrl(this@LyricsActivity, getGoogleSearchUrl())
diff --git a/app/src/main/java/code/name/monkey/retromusic/activities/MainActivity.java b/app/src/main/java/code/name/monkey/retromusic/activities/MainActivity.java
deleted file mode 100644
index 452bbd610..000000000
--- a/app/src/main/java/code/name/monkey/retromusic/activities/MainActivity.java
+++ /dev/null
@@ -1,836 +0,0 @@
-/*
- * Copyright (c) 2020 Hemanth Savarala.
- *
- * Licensed under the GNU General Public License v3
- *
- * This is free software: you can redistribute it and/or modify it under
- * the terms of the GNU General Public License as published by
- * the Free Software Foundation either version 3 of the License, or (at your option) any later version.
- *
- * This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
- * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- * See the GNU General Public License for more details.
- */
-
-package code.name.monkey.retromusic.activities;
-
-import android.app.ActivityOptions;
-import android.content.BroadcastReceiver;
-import android.content.Context;
-import android.content.Intent;
-import android.content.IntentFilter;
-import android.content.IntentSender;
-import android.content.SharedPreferences;
-import android.content.pm.PackageInfo;
-import android.content.pm.PackageManager.NameNotFoundException;
-import android.net.Uri;
-import android.os.Bundle;
-import android.provider.MediaStore;
-import android.util.Log;
-import android.view.Menu;
-import android.view.MenuItem;
-import android.view.SubMenu;
-import android.view.View;
-
-import androidx.annotation.NonNull;
-import androidx.appcompat.widget.Toolbar;
-import androidx.core.app.ActivityCompat;
-import androidx.fragment.app.Fragment;
-
-import com.afollestad.materialcab.MaterialCab;
-import com.afollestad.materialcab.MaterialCab.Callback;
-import com.google.android.material.appbar.AppBarLayout;
-import com.google.android.material.snackbar.Snackbar;
-import com.google.android.play.core.appupdate.AppUpdateInfo;
-import com.google.android.play.core.appupdate.AppUpdateManager;
-import com.google.android.play.core.appupdate.AppUpdateManagerFactory;
-import com.google.android.play.core.install.InstallState;
-import com.google.android.play.core.install.InstallStateUpdatedListener;
-import com.google.android.play.core.install.model.AppUpdateType;
-import com.google.android.play.core.install.model.InstallStatus;
-import com.google.android.play.core.install.model.UpdateAvailability;
-import com.google.android.play.core.tasks.Task;
-
-import org.jetbrains.annotations.NotNull;
-import org.jetbrains.annotations.Nullable;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import code.name.monkey.appthemehelper.ThemeStore;
-import code.name.monkey.appthemehelper.util.ATHUtil;
-import code.name.monkey.appthemehelper.util.ToolbarContentTintHelper;
-import code.name.monkey.retromusic.R;
-import code.name.monkey.retromusic.activities.base.AbsSlidingMusicPanelActivity;
-import code.name.monkey.retromusic.dialogs.CreatePlaylistDialog;
-import code.name.monkey.retromusic.fragments.albums.AlbumsFragment;
-import code.name.monkey.retromusic.fragments.artists.ArtistsFragment;
-import code.name.monkey.retromusic.fragments.base.AbsLibraryPagerRecyclerViewCustomGridSizeFragment;
-import code.name.monkey.retromusic.fragments.genres.GenresFragment;
-import code.name.monkey.retromusic.fragments.home.BannerHomeFragment;
-import code.name.monkey.retromusic.fragments.mainactivity.FoldersFragment;
-import code.name.monkey.retromusic.fragments.playlists.PlaylistsFragment;
-import code.name.monkey.retromusic.fragments.queue.PlayingQueueFragment;
-import code.name.monkey.retromusic.fragments.songs.SongsFragment;
-import code.name.monkey.retromusic.helper.MusicPlayerRemote;
-import code.name.monkey.retromusic.helper.SearchQueryHelper;
-import code.name.monkey.retromusic.helper.SortOrder.AlbumSortOrder;
-import code.name.monkey.retromusic.helper.SortOrder.ArtistSortOrder;
-import code.name.monkey.retromusic.helper.SortOrder.SongSortOrder;
-import code.name.monkey.retromusic.interfaces.CabHolder;
-import code.name.monkey.retromusic.interfaces.MainActivityFragmentCallbacks;
-import code.name.monkey.retromusic.loaders.AlbumLoader;
-import code.name.monkey.retromusic.loaders.ArtistLoader;
-import code.name.monkey.retromusic.loaders.PlaylistSongsLoader;
-import code.name.monkey.retromusic.model.Song;
-import code.name.monkey.retromusic.service.MusicService;
-import code.name.monkey.retromusic.util.AppRater;
-import code.name.monkey.retromusic.util.NavigationUtil;
-import code.name.monkey.retromusic.util.PreferenceUtil;
-import code.name.monkey.retromusic.util.RetroColorUtil;
-import code.name.monkey.retromusic.util.RetroUtil;
-
-/**
- * Created by hemanths on 2020-02-19.
- */
-public class MainActivity extends AbsSlidingMusicPanelActivity
- implements CabHolder, SharedPreferences.OnSharedPreferenceChangeListener {
-
- public static final String TAG = MainActivity.class.getSimpleName();
- public static final int APP_INTRO_REQUEST = 100;
- public static final String EXPAND_PANEL = "expand_panel";
- private static final int APP_UPDATE_REQUEST_CODE = 9002;
- private final IntentFilter mIntentFilter = new IntentFilter(Intent.ACTION_SCREEN_OFF);
- private final BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() {
- @Override
- public void onReceive(final Context context, final Intent intent) {
- String action = intent.getAction();
- if (action != null && action.equals(Intent.ACTION_SCREEN_OFF)) {
- if (PreferenceUtil.getInstance(context).getLockScreen() && MusicPlayerRemote.isPlaying()) {
- final Intent activity = new Intent(context, LockScreenActivity.class);
- activity.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
- activity.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
- ActivityCompat.startActivity(context, activity, null);
- }
- }
- }
- };
- private MainActivityFragmentCallbacks currentFragment;
- private boolean blockRequestPermissions = false;
- private MaterialCab cab;
- private AppBarLayout mAppBarLayout;
- private Toolbar mToolbar;
- private AppUpdateManager appUpdateManager;
- InstallStateUpdatedListener listener = new InstallStateUpdatedListener() {
- @Override
- public void onStateUpdate(InstallState state) {
- if (state.installStatus() == InstallStatus.DOWNLOADED) {
- popupSnackBarForCompleteUpdate();
- } else if (state.installStatus() == InstallStatus.INSTALLED) {
- appUpdateManager.unregisterListener(listener);
- } else {
- Log.i(TAG, "InstallStateUpdatedListener: state: " + state.installStatus());
- }
- }
- };
-
- private void popupSnackBarForCompleteUpdate() {
- Snackbar snackbar = Snackbar.make(findViewById(R.id.mainContent), "New app is ready!", Snackbar.LENGTH_INDEFINITE);
- snackbar.setAction("Install", view -> {
- if (appUpdateManager != null) {
- appUpdateManager.completeUpdate();
- }
- });
- snackbar.setActionTextColor(ThemeStore.Companion.accentColor(this));
- snackbar.show();
- }
-
- @Override
- protected void onCreate(@Nullable final Bundle savedInstanceState) {
- setDrawUnderStatusBar();
- super.onCreate(savedInstanceState);
- setStatusbarColorAuto();
- setNavigationbarColorAuto();
- setLightNavigationBar(true);
- setTaskDescriptionColorAuto();
- hideStatusBar();
- setBottomBarVisibility(View.VISIBLE);
-
- if (savedInstanceState == null) {
- selectedFragment(PreferenceUtil.getInstance(this).getLastPage());
- } else {
- restoreCurrentFragment();
- }
-
- mToolbar = findViewById(R.id.toolbar);
- mAppBarLayout = findViewById(R.id.appBarLayout);
-
- //checkShowChangelog();
- AppRater.appLaunched(this);
- //PremiumShow.launch(this);
- setupToolbar();
- checkUpdate();
- updateTabs();
- getBottomNavigationView().setSelectedItemId(PreferenceUtil.getInstance(this).getLastPage());
- getBottomNavigationView().setOnNavigationItemSelectedListener(item -> {
- PreferenceUtil.getInstance(MainActivity.this).setLastPage(item.getItemId());
- selectedFragment(item.getItemId());
- return true;
- });
- mIntentFilter.addAction(MusicService.MEDIA_STORE_CHANGED);
- }
-
-
- private void checkUpdate() {
- appUpdateManager = AppUpdateManagerFactory.create(this);
- appUpdateManager.registerListener(listener);
-
- Task appUpdateInfoTask = appUpdateManager.getAppUpdateInfo();
- appUpdateInfoTask.addOnSuccessListener(appUpdateInfo -> {
- if (appUpdateInfo.updateAvailability() == UpdateAvailability.UPDATE_AVAILABLE
- && appUpdateInfo.isUpdateTypeAllowed(AppUpdateType.IMMEDIATE)) {
- try {
- appUpdateManager.startUpdateFlowForResult(
- appUpdateInfo,
- AppUpdateType.IMMEDIATE,
- this,
- APP_UPDATE_REQUEST_CODE);
- } catch (IntentSender.SendIntentException e) {
- e.printStackTrace();
- }
- }
- });
- }
-
- @Override
- protected void onActivityResult(int requestCode, int resultCode, Intent data) {
- super.onActivityResult(requestCode, resultCode, data);
- if (requestCode == APP_INTRO_REQUEST) {
- blockRequestPermissions = false;
- if (!hasPermissions()) {
- requestPermissions();
- }
- } else if (requestCode == APP_UPDATE_REQUEST_CODE) {
- if (resultCode != RESULT_OK) {
-
- }
- }
- }
-
- @Override
- protected void onResume() {
- super.onResume();
- registerReceiver(mBroadcastReceiver, mIntentFilter);
- PreferenceUtil.getInstance(this).registerOnSharedPreferenceChangedListener(this);
-
- if (getIntent().hasExtra(EXPAND_PANEL) && getIntent().getBooleanExtra(EXPAND_PANEL, false) && PreferenceUtil.getInstance(this).isExpandPanel()) {
- expandPanel();
- getIntent().putExtra(EXPAND_PANEL, false);
- }
- appUpdateManager.getAppUpdateInfo()
- .addOnSuccessListener(appUpdateInfo -> {
- if (appUpdateInfo.installStatus() == InstallStatus.DOWNLOADED) {
- popupSnackBarForCompleteUpdate();
- }
- try {
- if (appUpdateInfo.updateAvailability() == UpdateAvailability.DEVELOPER_TRIGGERED_UPDATE_IN_PROGRESS) {
- appUpdateManager.startUpdateFlowForResult(
- appUpdateInfo,
- AppUpdateType.IMMEDIATE,
- this,
- APP_UPDATE_REQUEST_CODE);
- }
- } catch (IntentSender.SendIntentException e) {
- e.printStackTrace();
- }
- });
- }
-
- @Override
- public void onDestroy() {
- super.onDestroy();
- unregisterReceiver(mBroadcastReceiver);
- PreferenceUtil.getInstance(this).unregisterOnSharedPreferenceChangedListener(this);
- }
-
- public void addOnAppBarOffsetChangedListener(
- @NonNull AppBarLayout.OnOffsetChangedListener onOffsetChangedListener) {
- mAppBarLayout.addOnOffsetChangedListener(onOffsetChangedListener);
- }
-
- public int getTotalAppBarScrollingRange() {
- return mAppBarLayout.getTotalScrollRange();
- }
-
- @Override
- public boolean handleBackPress() {
- if (cab != null && cab.isActive()) {
- cab.finish();
- return true;
- }
- return super.handleBackPress() || (currentFragment != null && currentFragment.handleBackPress());
- }
-
- @Override
- public boolean onCreateOptionsMenu(final Menu menu) {
- getMenuInflater().inflate(R.menu.menu_main, menu);
- if (isPlaylistPage()) {
- menu.add(0, R.id.action_new_playlist, 1, R.string.new_playlist_title)
- .setIcon(R.drawable.ic_playlist_add_white_24dp)
- .setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
- }
- if (isHomePage()) {
- menu.add(0, R.id.action_mic, 1, getString(R.string.action_search))
- .setIcon(R.drawable.ic_mic_white_24dp)
- .setShowAsActionFlags(MenuItem.SHOW_AS_ACTION_IF_ROOM);
-
- }
- if (isFolderPage()) {
- menu.add(0, R.id.action_scan, 0, R.string.scan_media)
- .setIcon(R.drawable.ic_scanner_white_24dp)
- .setShowAsActionFlags(MenuItem.SHOW_AS_ACTION_IF_ROOM);
- menu.add(0, R.id.action_go_to_start_directory, 1, R.string.action_go_to_start_directory)
- .setIcon(R.drawable.ic_bookmark_music_white_24dp)
- .setShowAsActionFlags(MenuItem.SHOW_AS_ACTION_IF_ROOM);
- }
- Fragment fragment = getCurrentFragment();
- if (fragment instanceof AbsLibraryPagerRecyclerViewCustomGridSizeFragment) {
- AbsLibraryPagerRecyclerViewCustomGridSizeFragment currentFragment
- = (AbsLibraryPagerRecyclerViewCustomGridSizeFragment) fragment;
-
- MenuItem gridSizeItem = menu.findItem(R.id.action_grid_size);
- if (RetroUtil.isLandscape()) {
- gridSizeItem.setTitle(R.string.action_grid_size_land);
- }
- setUpGridSizeMenu(currentFragment, gridSizeItem.getSubMenu());
- MenuItem layoutItem = menu.findItem(R.id.action_layout_type);
- setupLayoutMenu(currentFragment, layoutItem.getSubMenu());
- setUpSortOrderMenu(currentFragment, menu.findItem(R.id.action_sort_order).getSubMenu());
- } else {
- menu.removeItem(R.id.action_layout_type);
- menu.removeItem(R.id.action_grid_size);
- menu.removeItem(R.id.action_sort_order);
- }
- menu.add(0, R.id.action_settings, 6, getString(R.string.action_settings))
- .setIcon(R.drawable.ic_settings_white_24dp)
- .setShowAsActionFlags(MenuItem.SHOW_AS_ACTION_IF_ROOM);
- menu.add(0, R.id.action_search, 0, getString(R.string.action_search))
- .setIcon(R.drawable.ic_search_white_24dp)
- .setShowAsActionFlags(MenuItem.SHOW_AS_ACTION_ALWAYS);
- return super.onCreateOptionsMenu(menu);
- }
-
- @Override
- public boolean onOptionsItemSelected(@NonNull final MenuItem item) {
- Fragment fragment = getCurrentFragment();
- if (fragment instanceof AbsLibraryPagerRecyclerViewCustomGridSizeFragment) {
- AbsLibraryPagerRecyclerViewCustomGridSizeFragment currentFragment
- = (AbsLibraryPagerRecyclerViewCustomGridSizeFragment) fragment;
- if (handleGridSizeMenuItem(currentFragment, item)) {
- return true;
- }
- if (handleLayoutResType(currentFragment, item)) {
- return true;
- }
- if (handleSortOrderMenuItem(currentFragment, item)) {
- return true;
- }
- }
- int id = item.getItemId();
- switch (id) {
- case R.id.action_search:
- NavigationUtil.goToSearch(this);
- break;
- case R.id.action_new_playlist:
- CreatePlaylistDialog.create().show(getSupportFragmentManager(), "CREATE_PLAYLIST");
- return true;
- case R.id.action_mic:
- ActivityOptions options = ActivityOptions.makeSceneTransitionAnimation(this, mToolbar,
- getString(R.string.transition_toolbar));
- NavigationUtil.goToSearch(this, true, options);
- return true;
- case R.id.action_settings:
- NavigationUtil.goToSettings(this);
- return true;
- }
- return super.onOptionsItemSelected(item);
- }
-
- @Override
- public boolean onPrepareOptionsMenu(final Menu menu) {
- ToolbarContentTintHelper.handleOnPrepareOptionsMenu(this, mToolbar);
- return super.onPrepareOptionsMenu(menu);
- }
-
- @Override
- public void onServiceConnected() {
- super.onServiceConnected();
- handlePlaybackIntent(getIntent());
- }
-
- @Override
- public void onSharedPreferenceChanged(final @NonNull SharedPreferences sharedPreferences,
- final @NonNull String key) {
- if (key.equals(PreferenceUtil.GENERAL_THEME) || key.equals(PreferenceUtil.BLACK_THEME) ||
- key.equals(PreferenceUtil.ADAPTIVE_COLOR_APP) ||
- key.equals(PreferenceUtil.USER_NAME) || key.equals(PreferenceUtil.TOGGLE_FULL_SCREEN) ||
- key.equals(PreferenceUtil.TOGGLE_VOLUME) || key.equals(PreferenceUtil.ROUND_CORNERS) ||
- key.equals(PreferenceUtil.CAROUSEL_EFFECT) || key.equals(PreferenceUtil.NOW_PLAYING_SCREEN_ID) ||
- key.equals(PreferenceUtil.TOGGLE_GENRE) || key.equals(PreferenceUtil.BANNER_IMAGE_PATH) ||
- key.equals(PreferenceUtil.PROFILE_IMAGE_PATH) || key.equals(PreferenceUtil.CIRCULAR_ALBUM_ART) ||
- key.equals(PreferenceUtil.KEEP_SCREEN_ON) || key.equals(PreferenceUtil.TOGGLE_SEPARATE_LINE) ||
- key.equals(PreferenceUtil.TOGGLE_HOME_BANNER) || key.equals(PreferenceUtil.TOGGLE_ADD_CONTROLS) ||
- key.equals(PreferenceUtil.ALBUM_COVER_STYLE) || key.equals(PreferenceUtil.HOME_ARTIST_GRID_STYLE) ||
- key.equals(PreferenceUtil.ALBUM_COVER_TRANSFORM) || key.equals(PreferenceUtil.DESATURATED_COLOR) ||
- key.equals(PreferenceUtil.EXTRA_SONG_INFO) || key.equals(PreferenceUtil.TAB_TEXT_MODE) ||
- key.equals(PreferenceUtil.LANGUAGE_NAME) || key.equals(PreferenceUtil.LIBRARY_CATEGORIES)
- ) {
- postRecreate();
- }
- }
-
- @NotNull
- @Override
- public MaterialCab openCab(final int menuRes, @NotNull final Callback callback) {
- if (cab != null && cab.isActive()) {
- cab.finish();
- }
- cab = new MaterialCab(this, R.id.cab_stub)
- .setMenu(menuRes)
- .setCloseDrawableRes(R.drawable.ic_close_white_24dp)
- .setBackgroundColor(
- RetroColorUtil.shiftBackgroundColorForLightText(
- ATHUtil.INSTANCE.resolveColor(this, R.attr.colorSurface)))
- .start(callback);
- return cab;
- }
-
- public void removeOnAppBarOffsetChangedListener(
- @NonNull AppBarLayout.OnOffsetChangedListener onOffsetChangedListener) {
- mAppBarLayout.removeOnOffsetChangedListener(onOffsetChangedListener);
- }
-
- public void setCurrentFragment(@NonNull Fragment fragment, @NonNull String tag) {
- String currentTag = null;
- if (getSupportFragmentManager().findFragmentByTag(tag) != null) {
- currentTag = getSupportFragmentManager().findFragmentByTag(tag).getTag();
- }
-
- if (!tag.equals(currentTag)) {
- getSupportFragmentManager()
- .beginTransaction()
- .replace(R.id.fragment_container, fragment, tag)
- .commit();
- currentFragment = (MainActivityFragmentCallbacks) fragment;
- }
- }
-
- @NotNull
- @Override
- protected View createContentView() {
- return wrapSlidingMusicPanel(R.layout.activity_main_content);
- }
-
- @Override
- protected void requestPermissions() {
- if (!blockRequestPermissions) {
- super.requestPermissions();
- }
- }
-
- private void checkShowChangelog() {
- try {
- final PackageInfo pInfo = getPackageManager().getPackageInfo(getPackageName(), 0);
- final int currentVersion = pInfo.versionCode;
- if (currentVersion != PreferenceUtil.getInstance(this).getLastChangelogVersion()) {
- startActivityForResult(new Intent(this, WhatsNewActivity.class), APP_INTRO_REQUEST);
- }
- } catch (NameNotFoundException e) {
- e.printStackTrace();
- }
- }
-
- @Nullable
- private Fragment getCurrentFragment() {
- return getSupportFragmentManager().findFragmentById(R.id.fragment_container);
- }
-
- private boolean handleGridSizeMenuItem(
- @NonNull AbsLibraryPagerRecyclerViewCustomGridSizeFragment fragment,
- @NonNull MenuItem item) {
- int gridSize = 0;
- switch (item.getItemId()) {
- case R.id.action_grid_size_1:
- gridSize = 1;
- break;
- case R.id.action_grid_size_2:
- gridSize = 2;
- break;
- case R.id.action_grid_size_3:
- gridSize = 3;
- break;
- case R.id.action_grid_size_4:
- gridSize = 4;
- break;
- case R.id.action_grid_size_5:
- gridSize = 5;
- break;
- case R.id.action_grid_size_6:
- gridSize = 6;
- break;
- case R.id.action_grid_size_7:
- gridSize = 7;
- break;
- case R.id.action_grid_size_8:
- gridSize = 8;
- break;
- }
-
- if (gridSize > 0) {
- item.setChecked(true);
- fragment.setAndSaveGridSize(gridSize);
- return true;
- }
- return false;
- }
-
- private boolean handleLayoutResType(
- final AbsLibraryPagerRecyclerViewCustomGridSizeFragment fragment,
- final MenuItem item) {
- int layoutRes = -1;
- switch (item.getItemId()) {
- case R.id.action_layout_normal:
- layoutRes = R.layout.item_grid;
- break;
- case R.id.action_layout_card:
- layoutRes = R.layout.item_card;
- break;
- case R.id.action_layout_colored_card:
- layoutRes = R.layout.item_card_color;
- break;
- case R.id.action_layout_circular:
- layoutRes = R.layout.item_grid_circle;
- break;
- case R.id.action_layout_image:
- layoutRes = R.layout.image;
- break;
- case R.id.action_layout_gradient_image:
- layoutRes = R.layout.item_image_gradient;
- break;
- }
- Log.i(TAG, "handleLayoutResType: " + layoutRes);
-
- if (layoutRes != -1) {
- item.setChecked(true);
- fragment.setAndSaveLayoutRes(layoutRes);
- return true;
- }
-
- return false;
- }
-
- private void handlePlaybackIntent(@Nullable Intent intent) {
- if (intent == null) {
- return;
- }
-
- Uri uri = intent.getData();
- String mimeType = intent.getType();
- boolean handled = false;
-
- if (intent.getAction() != null && intent.getAction()
- .equals(MediaStore.INTENT_ACTION_MEDIA_PLAY_FROM_SEARCH)) {
- final List songs = SearchQueryHelper.getSongs(this, intent.getExtras());
- if (MusicPlayerRemote.getShuffleMode() == MusicService.SHUFFLE_MODE_SHUFFLE) {
- MusicPlayerRemote.openAndShuffleQueue(songs, true);
- } else {
- MusicPlayerRemote.openQueue(songs, 0, true);
- }
- handled = true;
- }
-
- if (uri != null && uri.toString().length() > 0) {
- MusicPlayerRemote.playFromUri(uri);
- handled = true;
- } else if (MediaStore.Audio.Playlists.CONTENT_TYPE.equals(mimeType)) {
- final int id = (int) parseIdFromIntent(intent, "playlistId", "playlist");
- if (id >= 0) {
- int position = intent.getIntExtra("position", 0);
- List songs = new ArrayList<>(PlaylistSongsLoader.getPlaylistSongList(this, id));
- MusicPlayerRemote.openQueue(songs, position, true);
- handled = true;
- }
- } else if (MediaStore.Audio.Albums.CONTENT_TYPE.equals(mimeType)) {
- final int id = (int) parseIdFromIntent(intent, "albumId", "album");
- if (id >= 0) {
- int position = intent.getIntExtra("position", 0);
- MusicPlayerRemote.openQueue(AlbumLoader.getAlbum(this, id).getSongs(), position, true);
- handled = true;
- }
- } else if (MediaStore.Audio.Artists.CONTENT_TYPE.equals(mimeType)) {
- final int id = (int) parseIdFromIntent(intent, "artistId", "artist");
- if (id >= 0) {
- int position = intent.getIntExtra("position", 0);
- MusicPlayerRemote.openQueue(ArtistLoader.getArtist(this, id).getSongs(), position, true);
- handled = true;
- }
- }
- if (handled) {
- setIntent(new Intent());
- }
- }
-
- private boolean handleSortOrderMenuItem(
- @NonNull AbsLibraryPagerRecyclerViewCustomGridSizeFragment
- fragment, @NonNull MenuItem item) {
- String sortOrder = null;
- if (fragment instanceof AlbumsFragment) {
- switch (item.getItemId()) {
- case R.id.action_album_sort_order_asc:
- sortOrder = AlbumSortOrder.ALBUM_A_Z;
- break;
- case R.id.action_album_sort_order_desc:
- sortOrder = AlbumSortOrder.ALBUM_Z_A;
- break;
- case R.id.action_album_sort_order_artist:
- sortOrder = AlbumSortOrder.ALBUM_ARTIST;
- break;
- case R.id.action_album_sort_order_year:
- sortOrder = AlbumSortOrder.ALBUM_YEAR;
- break;
- }
- } else if (fragment instanceof ArtistsFragment) {
- switch (item.getItemId()) {
- case R.id.action_artist_sort_order_asc:
- sortOrder = ArtistSortOrder.ARTIST_A_Z;
- break;
- case R.id.action_artist_sort_order_desc:
- sortOrder = ArtistSortOrder.ARTIST_Z_A;
- break;
- }
- } else if (fragment instanceof SongsFragment) {
- switch (item.getItemId()) {
- case R.id.action_song_sort_order_asc:
- sortOrder = SongSortOrder.SONG_A_Z;
- break;
- case R.id.action_song_sort_order_desc:
- sortOrder = SongSortOrder.SONG_Z_A;
- break;
- case R.id.action_song_sort_order_artist:
- sortOrder = SongSortOrder.SONG_ARTIST;
- break;
- case R.id.action_song_sort_order_album:
- sortOrder = SongSortOrder.SONG_ALBUM;
- break;
- case R.id.action_song_sort_order_year:
- sortOrder = SongSortOrder.SONG_YEAR;
- break;
- case R.id.action_song_sort_order_date:
- sortOrder = SongSortOrder.SONG_DATE;
- break;
- case R.id.action_song_sort_order_composer:
- sortOrder = SongSortOrder.COMPOSER;
- break;
- case R.id.action_song_sort_order_date_modified:
- sortOrder = SongSortOrder.SONG_DATE_MODIFIED;
- break;
- }
- }
-
- if (sortOrder != null) {
- item.setChecked(true);
- fragment.setAndSaveSortOrder(sortOrder);
- return true;
- }
-
- return false;
- }
-
- private boolean isFolderPage() {
- return getSupportFragmentManager().findFragmentByTag(FoldersFragment.TAG) instanceof FoldersFragment;
- }
-
- private boolean isHomePage() {
- return getSupportFragmentManager().findFragmentByTag(BannerHomeFragment.TAG) instanceof BannerHomeFragment;
- }
-
- private boolean isPlaylistPage() {
- return getSupportFragmentManager().findFragmentByTag(PlaylistsFragment.TAG) instanceof PlaylistsFragment;
- }
-
- private long parseIdFromIntent(@NonNull Intent intent, String longKey,
- String stringKey) {
- long id = intent.getLongExtra(longKey, -1);
- if (id < 0) {
- String idString = intent.getStringExtra(stringKey);
- if (idString != null) {
- try {
- id = Long.parseLong(idString);
- } catch (NumberFormatException e) {
- Log.e(TAG, e.getMessage());
- }
- }
- }
- return id;
- }
-
- private void restoreCurrentFragment() {
- currentFragment = (MainActivityFragmentCallbacks) getSupportFragmentManager()
- .findFragmentById(R.id.fragment_container);
- }
-
- private void selectedFragment(final int itemId) {
- switch (itemId) {
- case R.id.action_album:
- setCurrentFragment(AlbumsFragment.newInstance(), AlbumsFragment.TAG);
- break;
- case R.id.action_artist:
- setCurrentFragment(ArtistsFragment.newInstance(), ArtistsFragment.TAG);
- break;
- case R.id.action_playlist:
- setCurrentFragment(PlaylistsFragment.newInstance(), PlaylistsFragment.TAG);
- break;
- case R.id.action_genre:
- setCurrentFragment(GenresFragment.newInstance(), GenresFragment.TAG);
- break;
- case R.id.action_playing_queue:
- setCurrentFragment(PlayingQueueFragment.newInstance(), PlayingQueueFragment.TAG);
- break;
- case R.id.action_song:
- setCurrentFragment(SongsFragment.newInstance(), SongsFragment.TAG);
- break;
- case R.id.action_folder:
- setCurrentFragment(FoldersFragment.newInstance(this), FoldersFragment.TAG);
- break;
- default:
- case R.id.action_home:
- setCurrentFragment(BannerHomeFragment.newInstance(), BannerHomeFragment.TAG);
- break;
- }
- }
-
-
- private void setUpGridSizeMenu(@NonNull AbsLibraryPagerRecyclerViewCustomGridSizeFragment fragment,
- @NonNull SubMenu gridSizeMenu) {
-
- switch (fragment.getGridSize()) {
- case 1:
- gridSizeMenu.findItem(R.id.action_grid_size_1).setChecked(true);
- break;
- case 2:
- gridSizeMenu.findItem(R.id.action_grid_size_2).setChecked(true);
- break;
- case 3:
- gridSizeMenu.findItem(R.id.action_grid_size_3).setChecked(true);
- break;
- case 4:
- gridSizeMenu.findItem(R.id.action_grid_size_4).setChecked(true);
- break;
- case 5:
- gridSizeMenu.findItem(R.id.action_grid_size_5).setChecked(true);
- break;
- case 6:
- gridSizeMenu.findItem(R.id.action_grid_size_6).setChecked(true);
- break;
- case 7:
- gridSizeMenu.findItem(R.id.action_grid_size_7).setChecked(true);
- break;
- case 8:
- gridSizeMenu.findItem(R.id.action_grid_size_8).setChecked(true);
- break;
- }
- int maxGridSize = fragment.getMaxGridSize();
- if (maxGridSize < 8) {
- gridSizeMenu.findItem(R.id.action_grid_size_8).setVisible(false);
- }
- if (maxGridSize < 7) {
- gridSizeMenu.findItem(R.id.action_grid_size_7).setVisible(false);
- }
- if (maxGridSize < 6) {
- gridSizeMenu.findItem(R.id.action_grid_size_6).setVisible(false);
- }
- if (maxGridSize < 5) {
- gridSizeMenu.findItem(R.id.action_grid_size_5).setVisible(false);
- }
- if (maxGridSize < 4) {
- gridSizeMenu.findItem(R.id.action_grid_size_4).setVisible(false);
- }
- if (maxGridSize < 3) {
- gridSizeMenu.findItem(R.id.action_grid_size_3).setVisible(false);
- }
- }
-
- private void setUpSortOrderMenu(
- @NonNull AbsLibraryPagerRecyclerViewCustomGridSizeFragment fragment,
- @NonNull SubMenu sortOrderMenu) {
- String currentSortOrder = fragment.getSortOrder();
- sortOrderMenu.clear();
-
- if (fragment instanceof AlbumsFragment) {
- sortOrderMenu.add(0, R.id.action_album_sort_order_asc, 0, R.string.sort_order_a_z)
- .setChecked(currentSortOrder.equals(AlbumSortOrder.ALBUM_A_Z));
- sortOrderMenu.add(0, R.id.action_album_sort_order_desc, 1, R.string.sort_order_z_a)
- .setChecked(currentSortOrder.equals(AlbumSortOrder.ALBUM_Z_A));
- sortOrderMenu.add(0, R.id.action_album_sort_order_artist, 2, R.string.sort_order_artist)
- .setChecked(currentSortOrder.equals(AlbumSortOrder.ALBUM_ARTIST));
- sortOrderMenu.add(0, R.id.action_album_sort_order_year, 3, R.string.sort_order_year)
- .setChecked(currentSortOrder.equals(AlbumSortOrder.ALBUM_YEAR));
- } else if (fragment instanceof ArtistsFragment) {
- sortOrderMenu.add(0, R.id.action_artist_sort_order_asc, 0, R.string.sort_order_a_z)
- .setChecked(currentSortOrder.equals(ArtistSortOrder.ARTIST_A_Z));
- sortOrderMenu.add(0, R.id.action_artist_sort_order_desc, 1, R.string.sort_order_z_a)
- .setChecked(currentSortOrder.equals(ArtistSortOrder.ARTIST_Z_A));
- } else if (fragment instanceof SongsFragment) {
- sortOrderMenu.add(0, R.id.action_song_sort_order_asc, 0, R.string.sort_order_a_z)
- .setChecked(currentSortOrder.equals(SongSortOrder.SONG_A_Z));
- sortOrderMenu.add(0, R.id.action_song_sort_order_desc, 1, R.string.sort_order_z_a)
- .setChecked(currentSortOrder.equals(SongSortOrder.SONG_Z_A));
- sortOrderMenu.add(0, R.id.action_song_sort_order_artist, 2, R.string.sort_order_artist)
- .setChecked(currentSortOrder.equals(SongSortOrder.SONG_ARTIST));
- sortOrderMenu.add(0, R.id.action_song_sort_order_album, 3, R.string.sort_order_album)
- .setChecked(currentSortOrder.equals(SongSortOrder.SONG_ALBUM));
- sortOrderMenu.add(0, R.id.action_song_sort_order_year, 4, R.string.sort_order_year)
- .setChecked(currentSortOrder.equals(SongSortOrder.SONG_YEAR));
- sortOrderMenu.add(0, R.id.action_song_sort_order_date, 5, R.string.sort_order_date)
- .setChecked(currentSortOrder.equals(SongSortOrder.SONG_DATE));
- sortOrderMenu.add(0, R.id.action_song_sort_order_date_modified, 6, R.string.sort_order_date_modified)
- .setChecked(currentSortOrder.equals(SongSortOrder.SONG_DATE_MODIFIED));
- sortOrderMenu.add(0, R.id.action_song_sort_order_composer, 7, R.string.sort_order_composer)
- .setChecked(currentSortOrder.equals(SongSortOrder.COMPOSER));
- }
- sortOrderMenu.setGroupCheckable(0, true, true);
- }
-
- private void setupLayoutMenu(
- @NonNull final AbsLibraryPagerRecyclerViewCustomGridSizeFragment fragment,
- @NonNull final SubMenu subMenu) {
- switch (fragment.itemLayoutRes()) {
- case R.layout.item_card:
- subMenu.findItem(R.id.action_layout_card).setChecked(true);
- break;
- case R.layout.item_card_color:
- subMenu.findItem(R.id.action_layout_colored_card).setChecked(true);
- break;
- case R.layout.item_grid_circle:
- subMenu.findItem(R.id.action_layout_circular).setChecked(true);
- break;
- case R.layout.image:
- subMenu.findItem(R.id.action_layout_image).setChecked(true);
- break;
- case R.layout.item_image_gradient:
- subMenu.findItem(R.id.action_layout_gradient_image).setChecked(true);
- break;
- default:
- case R.layout.item_grid:
- subMenu.findItem(R.id.action_layout_normal).setChecked(true);
- break;
- }
- }
-
- private void setupToolbar() {
- setTitle(null);
- mToolbar.setBackgroundColor(ATHUtil.INSTANCE.resolveColor(this, R.attr.colorSurface));
- mAppBarLayout.setBackgroundColor(ATHUtil.INSTANCE.resolveColor(this, R.attr.colorSurface));
- setSupportActionBar(mToolbar);
- }
-}
diff --git a/app/src/main/java/code/name/monkey/retromusic/activities/MainActivity.kt b/app/src/main/java/code/name/monkey/retromusic/activities/MainActivity.kt
new file mode 100644
index 000000000..c0c9f71a1
--- /dev/null
+++ b/app/src/main/java/code/name/monkey/retromusic/activities/MainActivity.kt
@@ -0,0 +1,780 @@
+package code.name.monkey.retromusic.activities
+
+import android.app.ActivityOptions
+import android.content.*
+import android.content.IntentSender.SendIntentException
+import android.os.Bundle
+import android.provider.MediaStore
+import android.util.Log
+import android.view.Menu
+import android.view.MenuItem
+import android.view.SubMenu
+import android.view.View
+import androidx.core.app.ActivityCompat
+import androidx.fragment.app.Fragment
+import androidx.fragment.app.commit
+import androidx.lifecycle.ViewModelProvider
+import code.name.monkey.appthemehelper.ThemeStore.Companion.accentColor
+import code.name.monkey.appthemehelper.util.ATHUtil
+import code.name.monkey.appthemehelper.util.ATHUtil.resolveColor
+import code.name.monkey.appthemehelper.util.ToolbarContentTintHelper
+import code.name.monkey.retromusic.*
+import code.name.monkey.retromusic.activities.base.AbsSlidingMusicPanelActivity
+import code.name.monkey.retromusic.dialogs.CreatePlaylistDialog.Companion.create
+import code.name.monkey.retromusic.fragments.LibraryViewModel
+import code.name.monkey.retromusic.fragments.albums.AlbumsFragment
+import code.name.monkey.retromusic.fragments.artists.ArtistsFragment
+import code.name.monkey.retromusic.fragments.base.AbsLibraryPagerRecyclerViewCustomGridSizeFragment
+import code.name.monkey.retromusic.fragments.genres.GenresFragment
+import code.name.monkey.retromusic.fragments.home.BannerHomeFragment
+import code.name.monkey.retromusic.fragments.mainactivity.FoldersFragment
+import code.name.monkey.retromusic.fragments.playlists.PlaylistsFragment
+import code.name.monkey.retromusic.fragments.queue.PlayingQueueFragment
+import code.name.monkey.retromusic.fragments.songs.SongsFragment
+import code.name.monkey.retromusic.helper.MusicPlayerRemote.isPlaying
+import code.name.monkey.retromusic.helper.MusicPlayerRemote.openAndShuffleQueue
+import code.name.monkey.retromusic.helper.MusicPlayerRemote.openQueue
+import code.name.monkey.retromusic.helper.MusicPlayerRemote.playFromUri
+import code.name.monkey.retromusic.helper.MusicPlayerRemote.shuffleMode
+import code.name.monkey.retromusic.helper.SearchQueryHelper.getSongs
+import code.name.monkey.retromusic.helper.SortOrder.*
+import code.name.monkey.retromusic.interfaces.CabHolder
+import code.name.monkey.retromusic.interfaces.MainActivityFragmentCallbacks
+import code.name.monkey.retromusic.loaders.AlbumLoader.getAlbum
+import code.name.monkey.retromusic.loaders.ArtistLoader.getArtist
+import code.name.monkey.retromusic.loaders.PlaylistSongsLoader.getPlaylistSongList
+import code.name.monkey.retromusic.model.Song
+import code.name.monkey.retromusic.service.MusicService
+import code.name.monkey.retromusic.util.AppRater.appLaunched
+import code.name.monkey.retromusic.util.NavigationUtil
+import code.name.monkey.retromusic.util.PreferenceUtilKT
+import code.name.monkey.retromusic.util.RetroColorUtil
+import code.name.monkey.retromusic.util.RetroUtil
+import com.afollestad.materialcab.MaterialCab
+import com.google.android.material.appbar.AppBarLayout
+import com.google.android.material.snackbar.Snackbar
+import com.google.android.play.core.appupdate.AppUpdateInfo
+import com.google.android.play.core.appupdate.AppUpdateManager
+import com.google.android.play.core.appupdate.AppUpdateManagerFactory
+import com.google.android.play.core.install.InstallState
+import com.google.android.play.core.install.InstallStateUpdatedListener
+import com.google.android.play.core.install.model.AppUpdateType
+import com.google.android.play.core.install.model.InstallStatus
+import com.google.android.play.core.install.model.InstallStatus.*
+import com.google.android.play.core.install.model.UpdateAvailability
+import com.google.android.play.core.tasks.Task
+import kotlinx.android.synthetic.main.activity_main_content.*
+import java.math.BigInteger
+import java.util.*
+
+class MainActivity : AbsSlidingMusicPanelActivity(),
+ SharedPreferences.OnSharedPreferenceChangeListener, CabHolder {
+ companion object {
+ const val TAG = "MainActivity"
+ const val EXPAND_PANEL = "expand_panel"
+ const val APP_UPDATE_REQUEST_CODE = 9002
+ }
+
+ lateinit var libraryViewModel: LibraryViewModel
+ private var cab: MaterialCab? = null
+ private val intentFilter = IntentFilter(Intent.ACTION_SCREEN_OFF)
+ private lateinit var currentFragment: MainActivityFragmentCallbacks
+ private var appUpdateManager: AppUpdateManager? = null
+ private var blockRequestPermissions = false
+ private val listener = object : InstallStateUpdatedListener {
+ override fun onStateUpdate(state: InstallState) {
+ when {
+ state.installStatus() == DOWNLOADED -> {
+ popupSnackBarForCompleteUpdate()
+ }
+ state.installStatus() == INSTALLED -> {
+ appUpdateManager?.unregisterListener(this)
+ }
+ else -> {
+ Log.i(TAG, "InstallStateUpdatedListener: state: " + state.installStatus())
+ }
+ }
+ }
+ }
+ private val broadcastReceiver: BroadcastReceiver = object : BroadcastReceiver() {
+ override fun onReceive(context: Context, intent: Intent) {
+ val action = intent.action
+ if (action != null && action == Intent.ACTION_SCREEN_OFF) {
+ if (PreferenceUtilKT.isLockScreen && isPlaying) {
+ val activity = Intent(context, LockScreenActivity::class.java)
+ activity.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
+ activity.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY)
+ ActivityCompat.startActivity(context, activity, null)
+ }
+ }
+ }
+ }
+
+ override fun createContentView(): View {
+ return wrapSlidingMusicPanel(R.layout.activity_main_content)
+ }
+
+ override fun onCreate(savedInstanceState: Bundle?) {
+ setDrawUnderStatusBar()
+ super.onCreate(savedInstanceState)
+ setStatusbarColorAuto()
+ setNavigationbarColorAuto()
+ setLightNavigationBar(true)
+ setTaskDescriptionColorAuto()
+ hideStatusBar()
+ setBottomBarVisibility(View.VISIBLE)
+
+ libraryViewModel = ViewModelProvider(this).get(LibraryViewModel::class.java)
+ addMusicServiceEventListener(libraryViewModel)
+
+ if (savedInstanceState == null) {
+ selectedFragment(PreferenceUtilKT.lastPage)
+ } else {
+ restoreCurrentFragment()
+ }
+
+ appLaunched(this)
+ setupToolbar()
+ checkUpdate()
+ getBottomNavigationView().selectedItemId = PreferenceUtilKT.lastPage
+ getBottomNavigationView().setOnNavigationItemSelectedListener {
+ PreferenceUtilKT.lastPage = it.itemId
+ selectedFragment(it.itemId)
+ true
+ }
+ updateTabs()
+ }
+
+ override fun onResume() {
+ super.onResume()
+ registerReceiver(broadcastReceiver, intentFilter)
+ PreferenceUtilKT.registerOnSharedPreferenceChangedListener(this)
+ if (intent.hasExtra(EXPAND_PANEL) &&
+ intent.getBooleanExtra(EXPAND_PANEL, false) &&
+ PreferenceUtilKT.isExpandPanel
+ ) {
+ expandPanel()
+ intent.removeExtra(EXPAND_PANEL)
+ }
+
+ appUpdateManager?.appUpdateInfo
+ ?.addOnSuccessListener { appUpdateInfo: AppUpdateInfo ->
+ if (appUpdateInfo.installStatus() == DOWNLOADED) {
+ popupSnackBarForCompleteUpdate()
+ }
+ try {
+ if (appUpdateInfo.updateAvailability() == UpdateAvailability.DEVELOPER_TRIGGERED_UPDATE_IN_PROGRESS) {
+ appUpdateManager!!.startUpdateFlowForResult(
+ appUpdateInfo,
+ AppUpdateType.IMMEDIATE,
+ this,
+ APP_UPDATE_REQUEST_CODE
+ )
+ }
+ } catch (e: SendIntentException) {
+ e.printStackTrace()
+ }
+ }
+ }
+
+ override fun onDestroy() {
+ super.onDestroy()
+ unregisterReceiver(broadcastReceiver)
+ PreferenceUtilKT.unregisterOnSharedPreferenceChangedListener(this)
+ }
+
+ override fun onPrepareOptionsMenu(menu: Menu?): Boolean {
+ ToolbarContentTintHelper.handleOnPrepareOptionsMenu(this, toolbar)
+ return super.onPrepareOptionsMenu(menu)
+ }
+
+ override fun onCreateOptionsMenu(menu: Menu?): Boolean {
+ menuInflater.inflate(R.menu.menu_main, menu)
+ menu ?: return super.onCreateOptionsMenu(menu)
+ if (isPlaylistPage()) {
+ menu.add(0, R.id.action_new_playlist, 1, R.string.new_playlist_title)
+ .setIcon(R.drawable.ic_playlist_add_white_24dp)
+ .setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM)
+ }
+ if (isHomePage()) {
+ menu.add(0, R.id.action_mic, 1, getString(R.string.action_search))
+ .setIcon(R.drawable.ic_mic_white_24dp)
+ .setShowAsActionFlags(MenuItem.SHOW_AS_ACTION_IF_ROOM)
+ }
+ if (isFolderPage()) {
+ menu.add(0, R.id.action_scan, 0, R.string.scan_media)
+ .setIcon(R.drawable.ic_scanner_white_24dp)
+ .setShowAsActionFlags(MenuItem.SHOW_AS_ACTION_IF_ROOM)
+ menu.add(0, R.id.action_go_to_start_directory, 1, R.string.action_go_to_start_directory)
+ .setIcon(R.drawable.ic_bookmark_music_white_24dp)
+ .setShowAsActionFlags(MenuItem.SHOW_AS_ACTION_IF_ROOM)
+ }
+ val fragment: Fragment? = getCurrentFragment()
+ if (fragment != null && fragment is AbsLibraryPagerRecyclerViewCustomGridSizeFragment<*, *>) {
+ val gridSizeItem: MenuItem = menu.findItem(R.id.action_grid_size)
+ if (RetroUtil.isLandscape()) {
+ gridSizeItem.setTitle(R.string.action_grid_size_land)
+ }
+ setUpGridSizeMenu(fragment, gridSizeItem.subMenu)
+ setupLayoutMenu(fragment, menu.findItem(R.id.action_layout_type).subMenu)
+ setUpSortOrderMenu(fragment, menu.findItem(R.id.action_sort_order).subMenu)
+ } else {
+ menu.removeItem(R.id.action_layout_type)
+ menu.removeItem(R.id.action_grid_size)
+ menu.removeItem(R.id.action_sort_order)
+ }
+ menu.add(0, R.id.action_settings, 6, getString(R.string.action_settings))
+ .setIcon(R.drawable.ic_settings_white_24dp)
+ .setShowAsActionFlags(MenuItem.SHOW_AS_ACTION_IF_ROOM)
+ menu.add(0, R.id.action_search, 0, getString(R.string.action_search))
+ .setIcon(R.drawable.ic_search_white_24dp)
+ .setShowAsActionFlags(MenuItem.SHOW_AS_ACTION_ALWAYS)
+ return super.onCreateOptionsMenu(menu)
+ }
+
+ override fun onOptionsItemSelected(item: MenuItem): Boolean {
+ val fragment = getCurrentFragment()
+ if (fragment is AbsLibraryPagerRecyclerViewCustomGridSizeFragment<*, *>) {
+ if (handleGridSizeMenuItem(fragment, item)) {
+ return true
+ }
+ if (handleLayoutResType(fragment, item)) {
+ return true
+ }
+ if (handleSortOrderMenuItem(fragment, item)) {
+ return true
+ }
+ }
+ when (item.itemId) {
+ R.id.action_search -> NavigationUtil.goToSearch(this)
+ R.id.action_new_playlist -> {
+ create().show(supportFragmentManager, "CREATE_PLAYLIST")
+ return true
+ }
+ R.id.action_mic -> {
+ val options = ActivityOptions.makeSceneTransitionAnimation(
+ this, toolbar,
+ getString(R.string.transition_toolbar)
+ )
+ NavigationUtil.goToSearch(this, true, options)
+ return true
+ }
+ R.id.action_settings -> {
+ NavigationUtil.goToSettings(this)
+ return true
+ }
+ }
+ return super.onOptionsItemSelected(item)
+ }
+
+ private fun handleSortOrderMenuItem(
+ fragment: AbsLibraryPagerRecyclerViewCustomGridSizeFragment<*, *>,
+ item: MenuItem
+ ): Boolean {
+ var sortOrder: String? = null
+ when (fragment) {
+ is AlbumsFragment -> {
+ when (item.itemId) {
+ R.id.action_album_sort_order_asc -> sortOrder = AlbumSortOrder.ALBUM_A_Z
+ R.id.action_album_sort_order_desc -> sortOrder = AlbumSortOrder.ALBUM_Z_A
+ R.id.action_album_sort_order_artist -> sortOrder = AlbumSortOrder.ALBUM_ARTIST
+ R.id.action_album_sort_order_year -> sortOrder = AlbumSortOrder.ALBUM_YEAR
+ }
+ }
+ is ArtistsFragment -> {
+ when (item.itemId) {
+ R.id.action_artist_sort_order_asc -> sortOrder = ArtistSortOrder.ARTIST_A_Z
+ R.id.action_artist_sort_order_desc -> sortOrder = ArtistSortOrder.ARTIST_Z_A
+ }
+ }
+ is SongsFragment -> {
+ when (item.itemId) {
+ R.id.action_song_sort_order_asc -> sortOrder = SongSortOrder.SONG_A_Z
+ R.id.action_song_sort_order_desc -> sortOrder = SongSortOrder.SONG_Z_A
+ R.id.action_song_sort_order_artist -> sortOrder = SongSortOrder.SONG_ARTIST
+ R.id.action_song_sort_order_album -> sortOrder = SongSortOrder.SONG_ALBUM
+ R.id.action_song_sort_order_year -> sortOrder = SongSortOrder.SONG_YEAR
+ R.id.action_song_sort_order_date -> sortOrder = SongSortOrder.SONG_DATE
+ R.id.action_song_sort_order_composer -> sortOrder = SongSortOrder.COMPOSER
+ R.id.action_song_sort_order_date_modified ->
+ sortOrder = SongSortOrder.SONG_DATE_MODIFIED
+ }
+ }
+ }
+
+ if (sortOrder != null) {
+ item.isChecked = true
+ fragment.setAndSaveSortOrder(sortOrder)
+ return true
+ }
+
+ return false
+ }
+
+ private fun handleLayoutResType(
+ fragment: AbsLibraryPagerRecyclerViewCustomGridSizeFragment<*, *>,
+ item: MenuItem
+ ): Boolean {
+ var layoutRes = -1
+ when (item.itemId) {
+ R.id.action_layout_normal -> layoutRes = R.layout.item_grid
+ R.id.action_layout_card -> layoutRes = R.layout.item_card
+ R.id.action_layout_colored_card -> layoutRes = R.layout.item_card_color
+ R.id.action_layout_circular -> layoutRes = R.layout.item_grid_circle
+ R.id.action_layout_image -> layoutRes = R.layout.image
+ R.id.action_layout_gradient_image -> layoutRes = R.layout.item_image_gradient
+ }
+ if (layoutRes != -1) {
+ item.isChecked = true
+ fragment.setAndSaveLayoutRes(layoutRes)
+ return true
+ }
+ return false
+ }
+
+ private fun handleGridSizeMenuItem(
+ fragment: AbsLibraryPagerRecyclerViewCustomGridSizeFragment<*, *>,
+ item: MenuItem
+ ): Boolean {
+ var gridSize = 0
+ when (item.itemId) {
+ R.id.action_grid_size_1 -> gridSize = 1
+ R.id.action_grid_size_2 -> gridSize = 2
+ R.id.action_grid_size_3 -> gridSize = 3
+ R.id.action_grid_size_4 -> gridSize = 4
+ R.id.action_grid_size_5 -> gridSize = 5
+ R.id.action_grid_size_6 -> gridSize = 6
+ R.id.action_grid_size_7 -> gridSize = 7
+ R.id.action_grid_size_8 -> gridSize = 8
+ }
+ if (gridSize > 0) {
+ item.isChecked = true
+ fragment.setAndSaveGridSize(gridSize)
+ return true
+ }
+ return false
+ }
+
+ private fun setUpGridSizeMenu(
+ fragment: AbsLibraryPagerRecyclerViewCustomGridSizeFragment<*, *>,
+ gridSizeMenu: SubMenu
+ ) {
+ when (fragment.getGridSize()) {
+ 1 -> gridSizeMenu.findItem(R.id.action_grid_size_1).isChecked = true
+ 2 -> gridSizeMenu.findItem(R.id.action_grid_size_2).isChecked = true
+ 3 -> gridSizeMenu.findItem(R.id.action_grid_size_3).isChecked = true
+ 4 -> gridSizeMenu.findItem(R.id.action_grid_size_4).isChecked = true
+ 5 -> gridSizeMenu.findItem(R.id.action_grid_size_5).isChecked = true
+ 6 -> gridSizeMenu.findItem(R.id.action_grid_size_6).isChecked = true
+ 7 -> gridSizeMenu.findItem(R.id.action_grid_size_7).isChecked = true
+ 8 -> gridSizeMenu.findItem(R.id.action_grid_size_8).isChecked = true
+ }
+ val maxGridSize = fragment.maxGridSize
+ if (maxGridSize < 8) {
+ gridSizeMenu.findItem(R.id.action_grid_size_8).isVisible = false
+ }
+ if (maxGridSize < 7) {
+ gridSizeMenu.findItem(R.id.action_grid_size_7).isVisible = false
+ }
+ if (maxGridSize < 6) {
+ gridSizeMenu.findItem(R.id.action_grid_size_6).isVisible = false
+ }
+ if (maxGridSize < 5) {
+ gridSizeMenu.findItem(R.id.action_grid_size_5).isVisible = false
+ }
+ if (maxGridSize < 4) {
+ gridSizeMenu.findItem(R.id.action_grid_size_4).isVisible = false
+ }
+ if (maxGridSize < 3) {
+ gridSizeMenu.findItem(R.id.action_grid_size_3).isVisible = false
+ }
+ }
+
+ private fun setupLayoutMenu(
+ fragment: AbsLibraryPagerRecyclerViewCustomGridSizeFragment<*, *>,
+ subMenu: SubMenu
+ ) {
+ when (fragment.itemLayoutRes()) {
+ R.layout.item_card ->
+ subMenu.findItem(R.id.action_layout_card).isChecked = true
+ R.layout.item_card_color ->
+ subMenu.findItem(R.id.action_layout_colored_card).isChecked = true
+ R.layout.item_grid_circle ->
+ subMenu.findItem(R.id.action_layout_circular).isChecked = true
+ R.layout.image ->
+ subMenu.findItem(R.id.action_layout_image).isChecked = true
+ R.layout.item_image_gradient ->
+ subMenu.findItem(R.id.action_layout_gradient_image).isChecked = true
+ R.layout.item_grid ->
+ subMenu.findItem(R.id.action_layout_normal).isChecked = true
+ else ->
+ subMenu.findItem(R.id.action_layout_normal).isChecked = true
+ }
+ }
+
+ private fun setUpSortOrderMenu(
+ fragment: AbsLibraryPagerRecyclerViewCustomGridSizeFragment<*, *>,
+ sortOrderMenu: SubMenu
+ ) {
+ val currentSortOrder = fragment.getSortOrder()
+ sortOrderMenu.clear()
+ when (fragment) {
+ is AlbumsFragment -> {
+ sortOrderMenu.add(
+ 0,
+ R.id.action_album_sort_order_asc,
+ 0,
+ R.string.sort_order_a_z
+ ).isChecked = currentSortOrder == AlbumSortOrder.ALBUM_A_Z
+ sortOrderMenu.add(
+ 0,
+ R.id.action_album_sort_order_desc,
+ 1,
+ R.string.sort_order_z_a
+ ).isChecked =
+ currentSortOrder == AlbumSortOrder.ALBUM_Z_A
+ sortOrderMenu.add(
+ 0,
+ R.id.action_album_sort_order_artist,
+ 2,
+ R.string.sort_order_artist
+ ).isChecked =
+ currentSortOrder == AlbumSortOrder.ALBUM_ARTIST
+ sortOrderMenu.add(
+ 0,
+ R.id.action_album_sort_order_year,
+ 3,
+ R.string.sort_order_year
+ ).isChecked =
+ currentSortOrder == AlbumSortOrder.ALBUM_YEAR
+ }
+ is ArtistsFragment -> {
+ sortOrderMenu.add(
+ 0,
+ R.id.action_artist_sort_order_asc,
+ 0,
+ R.string.sort_order_a_z
+ ).isChecked =
+ currentSortOrder == ArtistSortOrder.ARTIST_A_Z
+ sortOrderMenu.add(
+ 0,
+ R.id.action_artist_sort_order_desc,
+ 1,
+ R.string.sort_order_z_a
+ ).isChecked =
+ currentSortOrder == ArtistSortOrder.ARTIST_Z_A
+ }
+ is SongsFragment -> {
+ sortOrderMenu.add(
+ 0,
+ R.id.action_song_sort_order_asc,
+ 0,
+ R.string.sort_order_a_z
+ ).isChecked =
+ currentSortOrder == SongSortOrder.SONG_A_Z
+ sortOrderMenu.add(
+ 0,
+ R.id.action_song_sort_order_desc,
+ 1,
+ R.string.sort_order_z_a
+ ).isChecked =
+ currentSortOrder == SongSortOrder.SONG_Z_A
+ sortOrderMenu.add(
+ 0,
+ R.id.action_song_sort_order_artist,
+ 2,
+ R.string.sort_order_artist
+ ).isChecked =
+ currentSortOrder == SongSortOrder.SONG_ARTIST
+ sortOrderMenu.add(
+ 0,
+ R.id.action_song_sort_order_album,
+ 3,
+ R.string.sort_order_album
+ ).isChecked =
+ currentSortOrder == SongSortOrder.SONG_ALBUM
+ sortOrderMenu.add(
+ 0,
+ R.id.action_song_sort_order_year,
+ 4,
+ R.string.sort_order_year
+ ).isChecked =
+ currentSortOrder == SongSortOrder.SONG_YEAR
+ sortOrderMenu.add(
+ 0,
+ R.id.action_song_sort_order_date,
+ 5,
+ R.string.sort_order_date
+ ).isChecked =
+ currentSortOrder == SongSortOrder.SONG_DATE
+ sortOrderMenu.add(
+ 0,
+ R.id.action_song_sort_order_date_modified,
+ 6,
+ R.string.sort_order_date_modified
+ ).isChecked = currentSortOrder == SongSortOrder.SONG_DATE_MODIFIED
+ sortOrderMenu.add(
+ 0,
+ R.id.action_song_sort_order_composer,
+ 7,
+ R.string.sort_order_composer
+ ).isChecked = currentSortOrder == SongSortOrder.COMPOSER
+ }
+ }
+ sortOrderMenu.setGroupCheckable(0, true, true)
+ }
+
+ private fun getCurrentFragment(): Fragment? {
+ return supportFragmentManager.findFragmentById(R.id.fragment_container)
+ }
+
+ private fun isFolderPage(): Boolean {
+ return supportFragmentManager.findFragmentByTag(FoldersFragment.TAG) is FoldersFragment
+ }
+
+ private fun isHomePage(): Boolean {
+ return supportFragmentManager.findFragmentByTag(BannerHomeFragment.TAG) is BannerHomeFragment
+ }
+
+ private fun isPlaylistPage(): Boolean {
+ return supportFragmentManager.findFragmentByTag(PlaylistsFragment.TAG) is PlaylistsFragment
+ }
+
+ fun addOnAppBarOffsetChangedListener(
+ changedListener: AppBarLayout.OnOffsetChangedListener
+ ) {
+ appBarLayout.addOnOffsetChangedListener(changedListener)
+ }
+
+ fun removeOnAppBarOffsetChangedListener(
+ changedListener: AppBarLayout.OnOffsetChangedListener
+ ) {
+ appBarLayout.removeOnOffsetChangedListener(changedListener)
+ }
+
+ fun getTotalAppBarScrollingRange(): Int {
+ return appBarLayout.totalScrollRange
+ }
+
+ override fun requestPermissions() {
+ if (!blockRequestPermissions) {
+ super.requestPermissions()
+ }
+ }
+
+ override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
+ super.onActivityResult(requestCode, resultCode, data)
+ if (!hasPermissions()) {
+ requestPermissions()
+ }
+ }
+
+ private fun setupToolbar() {
+ toolbar.setBackgroundColor(resolveColor(this, R.attr.colorSurface))
+ appBarLayout.setBackgroundColor(resolveColor(this, R.attr.colorSurface))
+ setSupportActionBar(toolbar)
+ }
+
+ private fun checkUpdate() {
+ appUpdateManager = AppUpdateManagerFactory.create(this)
+ appUpdateManager?.registerListener(listener)
+
+ val appUpdateInfoTask: Task? = appUpdateManager?.appUpdateInfo
+ appUpdateInfoTask?.addOnSuccessListener { appUpdateInfo ->
+ if (appUpdateInfo.updateAvailability() == UpdateAvailability.UPDATE_AVAILABLE
+ && appUpdateInfo.isUpdateTypeAllowed(AppUpdateType.IMMEDIATE)
+ ) {
+ try {
+ appUpdateManager?.startUpdateFlowForResult(
+ appUpdateInfo,
+ AppUpdateType.IMMEDIATE,
+ this,
+ APP_UPDATE_REQUEST_CODE
+ )
+ } catch (e: SendIntentException) {
+ e.printStackTrace()
+ }
+ }
+ }
+ }
+
+ private fun popupSnackBarForCompleteUpdate() {
+ val snackBar =
+ Snackbar.make(
+ findViewById(R.id.mainContent),
+ "New app is ready!",
+ Snackbar.LENGTH_INDEFINITE
+ )
+ snackBar.setAction(
+ "Install"
+ ) {
+ appUpdateManager?.completeUpdate()
+ }
+ snackBar.setActionTextColor(accentColor(this))
+ snackBar.show()
+ }
+
+ private fun setCurrentFragment(
+ fragment: Fragment,
+ tag: String
+ ) {
+ supportFragmentManager.commit {
+ replace(R.id.fragment_container, fragment, tag)
+ }
+ }
+
+ private fun selectedFragment(itemId: Int) {
+ when (itemId) {
+ R.id.action_album -> setCurrentFragment(
+ AlbumsFragment.newInstance(),
+ AlbumsFragment.TAG
+ )
+ R.id.action_artist -> setCurrentFragment(
+ ArtistsFragment.newInstance(),
+ ArtistsFragment.TAG
+ )
+ R.id.action_playlist -> setCurrentFragment(
+ PlaylistsFragment.newInstance(),
+ PlaylistsFragment.TAG
+ )
+ R.id.action_genre -> setCurrentFragment(
+ GenresFragment.newInstance(),
+ GenresFragment.TAG
+ )
+ R.id.action_playing_queue -> setCurrentFragment(
+ PlayingQueueFragment.newInstance(),
+ PlayingQueueFragment.TAG
+ )
+ R.id.action_song -> setCurrentFragment(
+ SongsFragment.newInstance(),
+ SongsFragment.TAG
+ )
+ R.id.action_folder -> setCurrentFragment(
+ FoldersFragment.newInstance(this),
+ FoldersFragment.TAG
+ )
+ R.id.action_home -> setCurrentFragment(
+ BannerHomeFragment.newInstance(),
+ BannerHomeFragment.TAG
+ )
+ else -> setCurrentFragment(
+ BannerHomeFragment.newInstance(),
+ BannerHomeFragment.TAG
+ )
+ }
+ }
+
+ private fun restoreCurrentFragment() {
+ val fragment = supportFragmentManager.findFragmentById(R.id.fragment_container)
+ if (fragment != null) {
+ currentFragment = fragment as MainActivityFragmentCallbacks
+ }
+ }
+
+ override fun onSharedPreferenceChanged(sharedPreferences: SharedPreferences?, key: String?) {
+ if (key == GENERAL_THEME || key == BLACK_THEME || key == ADAPTIVE_COLOR_APP || key == USER_NAME || key == TOGGLE_FULL_SCREEN || key == TOGGLE_VOLUME || key == ROUND_CORNERS || key == CAROUSEL_EFFECT || key == NOW_PLAYING_SCREEN_ID || key == TOGGLE_GENRE || key == BANNER_IMAGE_PATH || key == PROFILE_IMAGE_PATH || key == CIRCULAR_ALBUM_ART || key == KEEP_SCREEN_ON || key == TOGGLE_SEPARATE_LINE || key == TOGGLE_HOME_BANNER || key == TOGGLE_ADD_CONTROLS || key == ALBUM_COVER_STYLE || key == HOME_ARTIST_GRID_STYLE || key == ALBUM_COVER_TRANSFORM || key == DESATURATED_COLOR || key == EXTRA_SONG_INFO || key == TAB_TEXT_MODE || key == LANGUAGE_NAME || key == LIBRARY_CATEGORIES
+ ) {
+ postRecreate()
+ }
+ }
+
+ override fun onServiceConnected() {
+ super.onServiceConnected()
+ handlePlaybackIntent(intent)
+ }
+
+ private fun handlePlaybackIntent(intent: Intent?) {
+ if (intent == null) {
+ return
+ }
+ val uri = intent.data
+ val mimeType = intent.type
+ var handled = false
+ if (intent.action != null && (intent.action == MediaStore.INTENT_ACTION_MEDIA_PLAY_FROM_SEARCH)
+ ) {
+ val songs: List =
+ getSongs(this, intent.extras!!)
+ if (shuffleMode == MusicService.SHUFFLE_MODE_SHUFFLE) {
+ openAndShuffleQueue(songs, true)
+ } else {
+ openQueue(songs, 0, true)
+ }
+ handled = true
+ }
+ if (uri != null && uri.toString().isNotEmpty()) {
+ playFromUri(uri)
+ handled = true
+ } else if (MediaStore.Audio.Playlists.CONTENT_TYPE == mimeType) {
+ val id = parseIdFromIntent(intent, "playlistId", "playlist").toInt()
+ if (id >= 0) {
+ val position = intent.getIntExtra("position", 0)
+ val songs: List =
+ ArrayList(getPlaylistSongList(this, id))
+ openQueue(songs, position, true)
+ handled = true
+ }
+ } else if (MediaStore.Audio.Albums.CONTENT_TYPE == mimeType) {
+ val id = parseIdFromIntent(intent, "albumId", "album").toInt()
+ if (id >= 0) {
+ val position = intent.getIntExtra("position", 0)
+ openQueue(getAlbum(this, id).songs!!, position, true)
+ handled = true
+ }
+ } else if (MediaStore.Audio.Artists.CONTENT_TYPE == mimeType) {
+ val id = parseIdFromIntent(intent, "artistId", "artist").toInt()
+ if (id >= 0) {
+ val position = intent.getIntExtra("position", 0)
+ openQueue(getArtist(this, id).songs, position, true)
+ handled = true
+ }
+ }
+ if (handled) {
+ setIntent(Intent())
+ }
+ }
+
+ private fun parseIdFromIntent(
+ intent: Intent, longKey: String,
+ stringKey: String
+ ): Long {
+ var id = intent.getLongExtra(longKey, -1)
+ if (id < 0) {
+ val idString = intent.getStringExtra(stringKey)
+ if (idString != null) {
+ try {
+ id = idString.toLong()
+ } catch (e: NumberFormatException) {
+ Log.e(TAG, e.message)
+ }
+ }
+ }
+ return id
+ }
+
+ override fun handleBackPress(): Boolean {
+ if (cab != null && cab!!.isActive) {
+ cab?.finish()
+ return true
+ }
+ return super.handleBackPress() || currentFragment.handleBackPress()
+ }
+
+ override fun openCab(menuRes: Int, callback: MaterialCab.Callback): MaterialCab {
+ cab?.let {
+ if (it.isActive) it.finish()
+ }
+ cab = MaterialCab(this, R.id.cab_stub)
+ .setMenu(menuRes)
+ .setCloseDrawableRes(R.drawable.ic_close_white_24dp)
+ .setBackgroundColor(
+ RetroColorUtil.shiftBackgroundColorForLightText(
+ ATHUtil.resolveColor(
+ this,
+ R.attr.colorSurface
+ )
+ )
+ )
+ .start(callback)
+ return cab as MaterialCab
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/code/name/monkey/retromusic/activities/SearchActivity.kt b/app/src/main/java/code/name/monkey/retromusic/activities/SearchActivity.kt
index 494b6dd58..d198bd5ca 100644
--- a/app/src/main/java/code/name/monkey/retromusic/activities/SearchActivity.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/activities/SearchActivity.kt
@@ -33,8 +33,6 @@ import kotlinx.android.synthetic.main.activity_search.*
import java.util.*
import javax.inject.Inject
import kotlin.collections.ArrayList
-import kotlin.collections.MutableList
-import kotlin.collections.emptyList
class SearchActivity : AbsMusicServiceActivity(), OnQueryTextListener, TextWatcher, SearchView {
@Inject
diff --git a/app/src/main/java/code/name/monkey/retromusic/activities/SettingsActivity.kt b/app/src/main/java/code/name/monkey/retromusic/activities/SettingsActivity.kt
index a5502acb2..6872f1ea2 100755
--- a/app/src/main/java/code/name/monkey/retromusic/activities/SettingsActivity.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/activities/SettingsActivity.kt
@@ -4,8 +4,6 @@ import android.os.Bundle
import android.view.MenuItem
import androidx.annotation.StringRes
import androidx.fragment.app.Fragment
-import code.name.monkey.appthemehelper.util.ATHUtil
-import code.name.monkey.appthemehelper.util.ToolbarContentTintHelper
import code.name.monkey.retromusic.R
import code.name.monkey.retromusic.activities.base.AbsBaseActivity
import code.name.monkey.retromusic.extensions.applyToolbar
@@ -23,7 +21,6 @@ class SettingsActivity : AbsBaseActivity() {
setStatusbarColorAuto()
setNavigationbarColorAuto()
setLightNavigationBar(true)
-
setupToolbar()
if (savedInstanceState == null) {
@@ -49,7 +46,6 @@ class SettingsActivity : AbsBaseActivity() {
fragmentTransaction.replace(R.id.contentFrame, fragment, fragment.tag)
fragmentTransaction.addToBackStack(null)
fragmentTransaction.commit()
-
setTitle(titleName)
}
diff --git a/app/src/main/java/code/name/monkey/retromusic/activities/UserInfoActivity.kt b/app/src/main/java/code/name/monkey/retromusic/activities/UserInfoActivity.kt
index 652e0e93a..65b97ee50 100644
--- a/app/src/main/java/code/name/monkey/retromusic/activities/UserInfoActivity.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/activities/UserInfoActivity.kt
@@ -21,7 +21,7 @@ import code.name.monkey.retromusic.extensions.applyToolbar
import code.name.monkey.retromusic.glide.ProfileBannerGlideRequest
import code.name.monkey.retromusic.glide.UserProfileGlideRequest
import code.name.monkey.retromusic.util.ImageUtil
-import code.name.monkey.retromusic.util.PreferenceUtil
+import code.name.monkey.retromusic.util.PreferenceUtilKT
import com.bumptech.glide.Glide
import com.bumptech.glide.load.engine.DiskCacheStrategy
import com.bumptech.glide.request.RequestListener
@@ -50,7 +50,7 @@ class UserInfoActivity : AbsBaseActivity() {
applyToolbar(toolbar)
MaterialUtil.setTint(nameContainer, false)
- name.setText(PreferenceUtil.getInstance(this).userName)
+ name.setText(PreferenceUtilKT.userName)
userImage.setOnClickListener {
pickNewPhoto()
@@ -66,7 +66,7 @@ class UserInfoActivity : AbsBaseActivity() {
Toast.makeText(this, "Umm name is empty", Toast.LENGTH_SHORT).show()
return@setOnClickListener
}
- PreferenceUtil.getInstance(this).userName = nameString
+ PreferenceUtilKT.userName = nameString
setResult(Activity.RESULT_OK)
finish()
}
diff --git a/app/src/main/java/code/name/monkey/retromusic/activities/WhatsNewActivity.java b/app/src/main/java/code/name/monkey/retromusic/activities/WhatsNewActivity.java
index 8aadbff12..0e681412c 100644
--- a/app/src/main/java/code/name/monkey/retromusic/activities/WhatsNewActivity.java
+++ b/app/src/main/java/code/name/monkey/retromusic/activities/WhatsNewActivity.java
@@ -25,7 +25,7 @@ import code.name.monkey.appthemehelper.util.MaterialValueHelper;
import code.name.monkey.appthemehelper.util.ToolbarContentTintHelper;
import code.name.monkey.retromusic.R;
import code.name.monkey.retromusic.activities.base.AbsBaseActivity;
-import code.name.monkey.retromusic.util.PreferenceUtil;
+import code.name.monkey.retromusic.util.PreferenceUtilKT;
public class WhatsNewActivity extends AbsBaseActivity {
@@ -38,7 +38,7 @@ public class WhatsNewActivity extends AbsBaseActivity {
try {
PackageInfo pInfo = context.getPackageManager().getPackageInfo(context.getPackageName(), 0);
int currentVersion = pInfo.versionCode;
- PreferenceUtil.getInstance(context).setLastChangeLogVersion(currentVersion);
+ PreferenceUtilKT.INSTANCE.setLastVersion(currentVersion);
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
diff --git a/app/src/main/java/code/name/monkey/retromusic/activities/base/AbsBaseActivity.kt b/app/src/main/java/code/name/monkey/retromusic/activities/base/AbsBaseActivity.kt
index d198cff67..1afa57b44 100644
--- a/app/src/main/java/code/name/monkey/retromusic/activities/base/AbsBaseActivity.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/activities/base/AbsBaseActivity.kt
@@ -137,7 +137,7 @@ abstract class AbsBaseActivity : AbsThemeActivity() {
}
}
hadPermissions = true
- onHasPermissionsChanged(true)
+ onHasPermissionsChanged(true)
}
}
diff --git a/app/src/main/java/code/name/monkey/retromusic/activities/base/AbsSlidingMusicPanelActivity.kt b/app/src/main/java/code/name/monkey/retromusic/activities/base/AbsSlidingMusicPanelActivity.kt
index 077cac51d..1c8692afe 100644
--- a/app/src/main/java/code/name/monkey/retromusic/activities/base/AbsSlidingMusicPanelActivity.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/activities/base/AbsSlidingMusicPanelActivity.kt
@@ -39,7 +39,7 @@ import code.name.monkey.retromusic.fragments.player.tiny.TinyPlayerFragment
import code.name.monkey.retromusic.helper.MusicPlayerRemote
import code.name.monkey.retromusic.model.CategoryInfo
import code.name.monkey.retromusic.util.DensityUtil
-import code.name.monkey.retromusic.util.PreferenceUtil
+import code.name.monkey.retromusic.util.PreferenceUtilKT
import code.name.monkey.retromusic.views.BottomNavigationBarTinted
import com.google.android.material.bottomsheet.BottomSheetBehavior
import com.google.android.material.shape.MaterialShapeDrawable
@@ -117,7 +117,7 @@ abstract class AbsSlidingMusicPanelActivity : AbsMusicServiceActivity(),
override fun onResume() {
super.onResume()
- if (cps != PreferenceUtil.getInstance(this).nowPlayingScreen) {
+ if (cps != PreferenceUtilKT.nowPlayingScreen) {
postRecreate()
}
behavior.addBottomSheetCallback(bottomSheetCallbackList)
@@ -239,8 +239,7 @@ abstract class AbsSlidingMusicPanelActivity : AbsMusicServiceActivity(),
}
private fun chooseFragmentForTheme() {
- cps = PreferenceUtil.getInstance(this).nowPlayingScreen
-
+ cps = PreferenceUtilKT.nowPlayingScreen
val fragment: Fragment = when (cps) {
Blur -> BlurPlayerFragment()
Adaptive -> AdaptiveFragment()
@@ -311,7 +310,7 @@ abstract class AbsSlidingMusicPanelActivity : AbsMusicServiceActivity(),
val isColorLight = ColorUtil.isColorLight(paletteColor)
- if (PreferenceUtil.getInstance(this).adaptiveColor && (cps == Normal || cps == Flat)) {
+ if (PreferenceUtilKT.isAdaptiveColor && (cps == Normal || cps == Flat)) {
super.setLightNavigationBar(true)
super.setLightStatusbar(isColorLight)
} else if (cps == Card || cps == Blur || cps == BlurCard) {
@@ -375,8 +374,7 @@ abstract class AbsSlidingMusicPanelActivity : AbsMusicServiceActivity(),
fun updateTabs() {
bottomNavigationView.menu.clear()
- val currentTabs: List =
- PreferenceUtil.getInstance(this).libraryCategoryInfos
+ val currentTabs: List = PreferenceUtilKT.libraryCategory
for (tab in currentTabs) {
if (tab.visible) {
val menu = tab.category
diff --git a/app/src/main/java/code/name/monkey/retromusic/activities/base/AbsThemeActivity.kt b/app/src/main/java/code/name/monkey/retromusic/activities/base/AbsThemeActivity.kt
index 14550e5ef..fac356ecd 100644
--- a/app/src/main/java/code/name/monkey/retromusic/activities/base/AbsThemeActivity.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/activities/base/AbsThemeActivity.kt
@@ -2,7 +2,6 @@ package code.name.monkey.retromusic.activities.base
import android.content.Context
import android.graphics.Color
-import android.graphics.drawable.Drawable
import android.os.Bundle
import android.os.Handler
import android.view.KeyEvent
@@ -10,17 +9,15 @@ import android.view.View
import android.view.WindowManager
import androidx.annotation.ColorInt
import androidx.appcompat.app.AppCompatDelegate.setDefaultNightMode
-import androidx.core.content.ContextCompat
import code.name.monkey.appthemehelper.ATH
import code.name.monkey.appthemehelper.ThemeStore
import code.name.monkey.appthemehelper.common.ATHToolbarActivity
import code.name.monkey.appthemehelper.util.ATHUtil
import code.name.monkey.appthemehelper.util.ColorUtil
-import code.name.monkey.appthemehelper.util.TintHelper
import code.name.monkey.appthemehelper.util.VersionUtils
import code.name.monkey.retromusic.LanguageContextWrapper
import code.name.monkey.retromusic.R
-import code.name.monkey.retromusic.util.PreferenceUtil
+import code.name.monkey.retromusic.util.PreferenceUtilKT
import code.name.monkey.retromusic.util.RetroUtil
import code.name.monkey.retromusic.util.theme.ThemeManager
import java.util.*
@@ -45,7 +42,7 @@ abstract class AbsThemeActivity : ATHToolbarActivity(), Runnable {
}
private fun toggleScreenOn() {
- if (PreferenceUtil.getInstance(this).isScreenOnEnabled) {
+ if (PreferenceUtilKT.isScreenOnEnabled) {
window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)
} else {
window.clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)
@@ -64,7 +61,7 @@ abstract class AbsThemeActivity : ATHToolbarActivity(), Runnable {
}
fun hideStatusBar() {
- hideStatusBar(PreferenceUtil.getInstance(this).fullScreenMode)
+ hideStatusBar(PreferenceUtilKT.isFullScreenMode)
}
private fun hideStatusBar(fullscreen: Boolean) {
@@ -74,18 +71,6 @@ abstract class AbsThemeActivity : ATHToolbarActivity(), Runnable {
}
}
- private fun changeBackgroundShape() {
- var background: Drawable? = if (PreferenceUtil.getInstance(this).isRoundCorners)
- ContextCompat.getDrawable(this, R.drawable.round_window)
- else ContextCompat.getDrawable(this, R.drawable.square_window)
- background =
- TintHelper.createTintedDrawable(
- background,
- ATHUtil.resolveColor(this, android.R.attr.windowBackground)
- )
- window.setBackgroundDrawable(background)
- }
-
fun setDrawUnderStatusBar() {
RetroUtil.setAllowDrawUnderStatusBar(window)
}
@@ -179,7 +164,7 @@ abstract class AbsThemeActivity : ATHToolbarActivity(), Runnable {
val flags =
(View.SYSTEM_UI_FLAG_LAYOUT_STABLE or View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION or View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN or View.SYSTEM_UI_FLAG_HIDE_NAVIGATION or View.SYSTEM_UI_FLAG_FULLSCREEN or View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY)
- if (PreferenceUtil.getInstance(this).fullScreenMode) {
+ if (PreferenceUtilKT.isFullScreenMode) {
window.decorView.systemUiVisibility = flags
}
}
@@ -212,7 +197,7 @@ abstract class AbsThemeActivity : ATHToolbarActivity(), Runnable {
}
override fun attachBaseContext(newBase: Context?) {
- val code = PreferenceUtil.getInstance(newBase).languageCode
+ val code = PreferenceUtilKT.languageCode
if (code != "auto") {
super.attachBaseContext(LanguageContextWrapper.wrap(newBase, Locale(code)))
} else super.attachBaseContext(newBase)
diff --git a/app/src/main/java/code/name/monkey/retromusic/activities/bugreport/model/DeviceInfo.java b/app/src/main/java/code/name/monkey/retromusic/activities/bugreport/model/DeviceInfo.java
index 5a2661277..ee3b73e9e 100644
--- a/app/src/main/java/code/name/monkey/retromusic/activities/bugreport/model/DeviceInfo.java
+++ b/app/src/main/java/code/name/monkey/retromusic/activities/bugreport/model/DeviceInfo.java
@@ -11,7 +11,7 @@ import androidx.annotation.IntRange;
import java.util.Arrays;
import java.util.Locale;
-import code.name.monkey.retromusic.util.PreferenceUtil;
+import code.name.monkey.retromusic.util.PreferenceUtilKT;
public class DeviceInfo {
@@ -75,10 +75,10 @@ public class DeviceInfo {
versionCode = -1;
versionName = null;
}
- baseTheme = PreferenceUtil.getInstance(context).getBaseTheme();
- nowPlayingTheme = context.getString(PreferenceUtil.getInstance(context).getNowPlayingScreen().getTitleRes());
- isAdaptive = PreferenceUtil.getInstance(context).getAdaptiveColor();
- selectedLang = PreferenceUtil.getInstance(context).getLanguageCode();
+ baseTheme = PreferenceUtilKT.INSTANCE.getBaseTheme();
+ nowPlayingTheme = context.getString(PreferenceUtilKT.INSTANCE.getNowPlayingScreen().getTitleRes());
+ isAdaptive = PreferenceUtilKT.INSTANCE.isAdaptiveColor();
+ selectedLang = PreferenceUtilKT.INSTANCE.getLanguageCode();
}
public String toMarkdown() {
diff --git a/app/src/main/java/code/name/monkey/retromusic/activities/tageditor/AbsTagEditorActivity.kt b/app/src/main/java/code/name/monkey/retromusic/activities/tageditor/AbsTagEditorActivity.kt
index 3964d6660..7d81bcee3 100755
--- a/app/src/main/java/code/name/monkey/retromusic/activities/tageditor/AbsTagEditorActivity.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/activities/tageditor/AbsTagEditorActivity.kt
@@ -22,12 +22,9 @@ import code.name.monkey.retromusic.R
import code.name.monkey.retromusic.R.drawable
import code.name.monkey.retromusic.activities.base.AbsBaseActivity
import code.name.monkey.retromusic.activities.saf.SAFGuideActivity
-import code.name.monkey.retromusic.util.PreferenceUtil
import code.name.monkey.retromusic.util.RetroUtil
import code.name.monkey.retromusic.util.SAFUtil
-import com.afollestad.materialdialogs.LayoutMode
import com.afollestad.materialdialogs.MaterialDialog
-import com.afollestad.materialdialogs.bottomsheets.BottomSheet
import com.afollestad.materialdialogs.list.listItems
import com.google.android.material.button.MaterialButton
import kotlinx.android.synthetic.main.activity_album_tag_editor.*
@@ -53,7 +50,6 @@ abstract class AbsTagEditorActivity : AbsBaseActivity() {
protected val show: MaterialDialog
get() = MaterialDialog(this).show {
- cornerRadius(PreferenceUtil.getInstance(this@AbsTagEditorActivity).dialogCorner)
title(R.string.update_image)
listItems(items = items) { _, position, _ ->
when (position) {
diff --git a/app/src/main/java/code/name/monkey/retromusic/adapter/CategoryInfoAdapter.java b/app/src/main/java/code/name/monkey/retromusic/adapter/CategoryInfoAdapter.java
index 8c169ef6f..58d6ce759 100644
--- a/app/src/main/java/code/name/monkey/retromusic/adapter/CategoryInfoAdapter.java
+++ b/app/src/main/java/code/name/monkey/retromusic/adapter/CategoryInfoAdapter.java
@@ -42,8 +42,7 @@ public class CategoryInfoAdapter extends RecyclerView.Adapter categoryInfos;
private ItemTouchHelper touchHelper;
- public CategoryInfoAdapter(@NonNull List categoryInfos) {
- this.categoryInfos = categoryInfos;
+ public CategoryInfoAdapter() {
SwipeAndDragHelper swipeAndDragHelper = new SwipeAndDragHelper(this);
touchHelper = new ItemTouchHelper(swipeAndDragHelper);
}
diff --git a/app/src/main/java/code/name/monkey/retromusic/adapter/HomeAdapter.kt b/app/src/main/java/code/name/monkey/retromusic/adapter/HomeAdapter.kt
index bd7a6a563..213f09da2 100644
--- a/app/src/main/java/code/name/monkey/retromusic/adapter/HomeAdapter.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/adapter/HomeAdapter.kt
@@ -20,7 +20,8 @@ import code.name.monkey.retromusic.model.Album
import code.name.monkey.retromusic.model.Artist
import code.name.monkey.retromusic.model.Home
import code.name.monkey.retromusic.model.Playlist
-import code.name.monkey.retromusic.util.PreferenceUtil
+
+import code.name.monkey.retromusic.util.PreferenceUtilKT
class HomeAdapter(
private val activity: AppCompatActivity,
@@ -117,7 +118,7 @@ class HomeAdapter(
val artistAdapter = ArtistAdapter(
activity,
list,
- PreferenceUtil.getInstance(activity).getHomeGridStyle(activity),
+ PreferenceUtilKT.homeGridStyle,
null
)
recyclerView.apply {
diff --git a/app/src/main/java/code/name/monkey/retromusic/adapter/SongFileAdapter.kt b/app/src/main/java/code/name/monkey/retromusic/adapter/SongFileAdapter.kt
index 4909ad372..daaba32dc 100644
--- a/app/src/main/java/code/name/monkey/retromusic/adapter/SongFileAdapter.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/adapter/SongFileAdapter.kt
@@ -1,3 +1,18 @@
+/*
+ * Copyright 2019 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
package code.name.monkey.retromusic.adapter
import android.graphics.PorterDuff
diff --git a/app/src/main/java/code/name/monkey/retromusic/adapter/album/AlbumAdapter.kt b/app/src/main/java/code/name/monkey/retromusic/adapter/album/AlbumAdapter.kt
index 7b209ac6e..83f97aee4 100644
--- a/app/src/main/java/code/name/monkey/retromusic/adapter/album/AlbumAdapter.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/adapter/album/AlbumAdapter.kt
@@ -22,7 +22,7 @@ import code.name.monkey.retromusic.model.Album
import code.name.monkey.retromusic.model.Song
import code.name.monkey.retromusic.util.MusicUtil
import code.name.monkey.retromusic.util.NavigationUtil
-import code.name.monkey.retromusic.util.PreferenceUtil
+import code.name.monkey.retromusic.util.PreferenceUtilKT
import code.name.monkey.retromusic.util.color.MediaNotificationProcessor
import com.bumptech.glide.Glide
import me.zhanghai.android.fastscroll.PopupTextProvider
@@ -153,7 +153,7 @@ open class AlbumAdapter(
private fun getSectionName(position: Int): String {
var sectionName: String? = null
- when (PreferenceUtil.getInstance(activity).albumSortOrder) {
+ when (PreferenceUtilKT.albumSortOrder) {
SortOrder.AlbumSortOrder.ALBUM_A_Z, SortOrder.AlbumSortOrder.ALBUM_Z_A -> sectionName =
dataSet[position].title
SortOrder.AlbumSortOrder.ALBUM_ARTIST -> sectionName = dataSet[position].artistName
diff --git a/app/src/main/java/code/name/monkey/retromusic/adapter/album/AlbumCoverPagerAdapter.kt b/app/src/main/java/code/name/monkey/retromusic/adapter/album/AlbumCoverPagerAdapter.kt
index 3cd623837..8c15aa594 100644
--- a/app/src/main/java/code/name/monkey/retromusic/adapter/album/AlbumCoverPagerAdapter.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/adapter/album/AlbumCoverPagerAdapter.kt
@@ -15,7 +15,8 @@ import code.name.monkey.retromusic.glide.SongGlideRequest
import code.name.monkey.retromusic.misc.CustomFragmentStatePagerAdapter
import code.name.monkey.retromusic.model.Song
import code.name.monkey.retromusic.util.NavigationUtil
-import code.name.monkey.retromusic.util.PreferenceUtil
+
+import code.name.monkey.retromusic.util.PreferenceUtilKT
import code.name.monkey.retromusic.util.color.MediaNotificationProcessor
import com.bumptech.glide.Glide
@@ -90,7 +91,7 @@ class AlbumCoverPagerAdapter(
}
private fun getLayoutWithPlayerTheme(): Int {
- return when (PreferenceUtil.getInstance(requireContext()).nowPlayingScreen) {
+ return when (PreferenceUtilKT.nowPlayingScreen) {
Card,
Fit,
Tiny,
@@ -99,11 +100,10 @@ class AlbumCoverPagerAdapter(
Gradient,
Full -> R.layout.fragment_album_full_cover
else -> {
- if (PreferenceUtil.getInstance(requireContext()).carouselEffect()
- ) {
+ if (PreferenceUtilKT.isCarouselEffect) {
R.layout.fragment_album_carousel_cover
} else {
- when (PreferenceUtil.getInstance(requireContext()).albumCoverStyle) {
+ when (PreferenceUtilKT.albumCoverStyle) {
AlbumCoverStyle.NORMAL -> R.layout.fragment_album_cover
AlbumCoverStyle.FLAT -> R.layout.fragment_album_flat_cover
AlbumCoverStyle.CIRCLE -> R.layout.fragment_album_circle_cover
@@ -111,7 +111,6 @@ class AlbumCoverPagerAdapter(
AlbumCoverStyle.MATERIAL -> R.layout.fragment_album_material_cover
AlbumCoverStyle.FULL -> R.layout.fragment_album_full_cover
AlbumCoverStyle.FULL_CARD -> R.layout.fragment_album_full_card_cover
- else -> R.layout.fragment_album_cover
}
}
}
diff --git a/app/src/main/java/code/name/monkey/retromusic/adapter/playlist/PlaylistAdapter.kt b/app/src/main/java/code/name/monkey/retromusic/adapter/playlist/PlaylistAdapter.kt
index a550a1fb3..f5bf2b7e7 100755
--- a/app/src/main/java/code/name/monkey/retromusic/adapter/playlist/PlaylistAdapter.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/adapter/playlist/PlaylistAdapter.kt
@@ -17,8 +17,6 @@ import code.name.monkey.appthemehelper.util.TintHelper
import code.name.monkey.retromusic.R
import code.name.monkey.retromusic.adapter.base.AbsMultiSelectAdapter
import code.name.monkey.retromusic.adapter.base.MediaEntryViewHolder
-import code.name.monkey.retromusic.dialogs.ClearSmartPlaylistDialog
-import code.name.monkey.retromusic.dialogs.DeletePlaylistDialog
import code.name.monkey.retromusic.extensions.hide
import code.name.monkey.retromusic.extensions.show
import code.name.monkey.retromusic.helper.menu.PlaylistMenuHelper
@@ -29,7 +27,6 @@ import code.name.monkey.retromusic.model.AbsCustomPlaylist
import code.name.monkey.retromusic.model.Playlist
import code.name.monkey.retromusic.model.Song
import code.name.monkey.retromusic.model.smartplaylist.AbsSmartPlaylist
-import code.name.monkey.retromusic.model.smartplaylist.LastAddedPlaylist
import code.name.monkey.retromusic.util.AutoGeneratedPlaylistBitmap
import code.name.monkey.retromusic.util.MusicUtil
import code.name.monkey.retromusic.util.NavigationUtil
@@ -125,24 +122,6 @@ class PlaylistAdapter(
override fun onMultipleItemAction(menuItem: MenuItem, selection: ArrayList) {
when (menuItem.itemId) {
- R.id.action_delete_playlist -> {
- var i = 0
- while (i < selection.size) {
- val playlist = selection[i]
- if (playlist is AbsSmartPlaylist) {
- ClearSmartPlaylistDialog.create(playlist).show(
- activity.supportFragmentManager, "CLEAR_PLAYLIST_" + playlist.name
- )
- selection.remove(playlist)
- i--
- }
- i++
- }
- if (selection.size > 0) {
- DeletePlaylistDialog.create(selection)
- .show(activity.supportFragmentManager, "DELETE_PLAYLIST")
- }
- }
else -> SongsMenuHelper.handleMenuClick(
activity,
getSongList(selection),
@@ -183,25 +162,9 @@ class PlaylistAdapter(
}
menu?.setOnClickListener { view ->
- val playlist = dataSet[layoutPosition]
val popupMenu = PopupMenu(activity, view)
- popupMenu.inflate(
- if (itemViewType == SMART_PLAYLIST) R.menu.menu_item_smart_playlist
- else R.menu.menu_item_playlist
- )
- if (playlist is LastAddedPlaylist) {
- popupMenu.menu.findItem(R.id.action_clear_playlist).isVisible = false
- }
+ popupMenu.inflate(R.menu.menu_item_playlist)
popupMenu.setOnMenuItemClickListener { item ->
- if (item.itemId == R.id.action_clear_playlist) {
- if (playlist is AbsSmartPlaylist) {
- ClearSmartPlaylistDialog.create(playlist).show(
- activity.supportFragmentManager,
- "CLEAR_SMART_PLAYLIST_" + playlist.name
- )
- return@setOnMenuItemClickListener true
- }
- }
PlaylistMenuHelper.handleMenuClick(
activity, dataSet[layoutPosition], item
)
diff --git a/app/src/main/java/code/name/monkey/retromusic/adapter/song/SongAdapter.kt b/app/src/main/java/code/name/monkey/retromusic/adapter/song/SongAdapter.kt
index f744b3dad..e82d05137 100644
--- a/app/src/main/java/code/name/monkey/retromusic/adapter/song/SongAdapter.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/adapter/song/SongAdapter.kt
@@ -24,7 +24,8 @@ import code.name.monkey.retromusic.interfaces.CabHolder
import code.name.monkey.retromusic.model.Song
import code.name.monkey.retromusic.util.MusicUtil
import code.name.monkey.retromusic.util.NavigationUtil
-import code.name.monkey.retromusic.util.PreferenceUtil
+import code.name.monkey.retromusic.util.PreferenceUtilKT
+
import code.name.monkey.retromusic.util.color.MediaNotificationProcessor
import com.afollestad.materialcab.MaterialCab
import com.bumptech.glide.Glide
@@ -144,7 +145,7 @@ open class SongAdapter(
}
override fun getPopupText(position: Int): String {
- val sectionName: String? = when (PreferenceUtil.getInstance(activity).songSortOrder) {
+ val sectionName: String? = when (PreferenceUtilKT.songSortOrder) {
SortOrder.SongSortOrder.SONG_A_Z, SortOrder.SongSortOrder.SONG_Z_A -> dataSet[position].title
SortOrder.SongSortOrder.SONG_ALBUM -> dataSet[position].albumName
SortOrder.SongSortOrder.SONG_ARTIST -> dataSet[position].artistName
diff --git a/app/src/main/java/code/name/monkey/retromusic/appshortcuts/AppShortcutIconGenerator.kt b/app/src/main/java/code/name/monkey/retromusic/appshortcuts/AppShortcutIconGenerator.kt
index 15e1b3020..fa7fa35a0 100644
--- a/app/src/main/java/code/name/monkey/retromusic/appshortcuts/AppShortcutIconGenerator.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/appshortcuts/AppShortcutIconGenerator.kt
@@ -25,13 +25,13 @@ import android.util.TypedValue
import androidx.annotation.RequiresApi
import code.name.monkey.appthemehelper.ThemeStore
import code.name.monkey.retromusic.R
-import code.name.monkey.retromusic.util.PreferenceUtil
+import code.name.monkey.retromusic.util.PreferenceUtilKT
import code.name.monkey.retromusic.util.RetroUtil
@RequiresApi(Build.VERSION_CODES.N_MR1)
object AppShortcutIconGenerator {
fun generateThemedIcon(context: Context, iconId: Int): Icon {
- return if (PreferenceUtil.getInstance(context).coloredAppShortcuts()) {
+ return if (PreferenceUtilKT.isColoredAppShortcuts) {
generateUserThemedIcon(context, iconId)
} else {
generateDefaultThemedIcon(context, iconId)
diff --git a/app/src/main/java/code/name/monkey/retromusic/appshortcuts/shortcuttype/LastAddedShortcutType.kt b/app/src/main/java/code/name/monkey/retromusic/appshortcuts/shortcuttype/LastAddedShortcutType.kt
index b590a9439..ef80bc0ec 100644
--- a/app/src/main/java/code/name/monkey/retromusic/appshortcuts/shortcuttype/LastAddedShortcutType.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/appshortcuts/shortcuttype/LastAddedShortcutType.kt
@@ -36,7 +36,8 @@ class LastAddedShortcutType(context: Context) : BaseShortcutType(context) {
context,
R.drawable.ic_app_shortcut_last_added
)
- ).setIntent(getPlaySongsIntent(AppShortcutLauncherActivity.SHORTCUT_TYPE_LAST_ADDED)).build()
+ ).setIntent(getPlaySongsIntent(AppShortcutLauncherActivity.SHORTCUT_TYPE_LAST_ADDED))
+ .build()
companion object {
diff --git a/app/src/main/java/code/name/monkey/retromusic/appshortcuts/shortcuttype/SearchShortCutType.kt b/app/src/main/java/code/name/monkey/retromusic/appshortcuts/shortcuttype/SearchShortCutType.kt
index 60c918831..dfcd55d03 100644
--- a/app/src/main/java/code/name/monkey/retromusic/appshortcuts/shortcuttype/SearchShortCutType.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/appshortcuts/shortcuttype/SearchShortCutType.kt
@@ -34,7 +34,8 @@ class SearchShortCutType(context: Context) : BaseShortcutType(context) {
get() = ShortcutInfo.Builder(
context,
id
- ).setShortLabel(context.getString(R.string.action_search)).setLongLabel(context.getString(R.string.search_hint)).setIcon(
+ ).setShortLabel(context.getString(R.string.action_search))
+ .setLongLabel(context.getString(R.string.search_hint)).setIcon(
AppShortcutIconGenerator.generateThemedIcon(
context,
R.drawable.ic_app_shortcut_search
diff --git a/app/src/main/java/code/name/monkey/retromusic/appshortcuts/shortcuttype/ShuffleAllShortcutType.kt b/app/src/main/java/code/name/monkey/retromusic/appshortcuts/shortcuttype/ShuffleAllShortcutType.kt
index 8f869d206..dc86fa830 100644
--- a/app/src/main/java/code/name/monkey/retromusic/appshortcuts/shortcuttype/ShuffleAllShortcutType.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/appshortcuts/shortcuttype/ShuffleAllShortcutType.kt
@@ -34,7 +34,8 @@ class ShuffleAllShortcutType(context: Context) : BaseShortcutType(context) {
AppShortcutIconGenerator.generateThemedIcon(
context, R.drawable.ic_app_shortcut_shuffle_all
)
- ).setIntent(getPlaySongsIntent(AppShortcutLauncherActivity.SHORTCUT_TYPE_SHUFFLE_ALL)).build()
+ ).setIntent(getPlaySongsIntent(AppShortcutLauncherActivity.SHORTCUT_TYPE_SHUFFLE_ALL))
+ .build()
companion object {
diff --git a/app/src/main/java/code/name/monkey/retromusic/appshortcuts/shortcuttype/TopTracksShortcutType.kt b/app/src/main/java/code/name/monkey/retromusic/appshortcuts/shortcuttype/TopTracksShortcutType.kt
index ed274cdd7..1317977c8 100644
--- a/app/src/main/java/code/name/monkey/retromusic/appshortcuts/shortcuttype/TopTracksShortcutType.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/appshortcuts/shortcuttype/TopTracksShortcutType.kt
@@ -34,7 +34,8 @@ class TopTracksShortcutType(context: Context) : BaseShortcutType(context) {
AppShortcutIconGenerator.generateThemedIcon(
context, R.drawable.ic_app_shortcut_top_tracks
)
- ).setIntent(getPlaySongsIntent(AppShortcutLauncherActivity.SHORTCUT_TYPE_TOP_TRACKS)).build()
+ ).setIntent(getPlaySongsIntent(AppShortcutLauncherActivity.SHORTCUT_TYPE_TOP_TRACKS))
+ .build()
companion object {
diff --git a/app/src/main/java/code/name/monkey/retromusic/appwidgets/AppWidgetBig.kt b/app/src/main/java/code/name/monkey/retromusic/appwidgets/AppWidgetBig.kt
index 3593369e2..4a55376fb 100644
--- a/app/src/main/java/code/name/monkey/retromusic/appwidgets/AppWidgetBig.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/appwidgets/AppWidgetBig.kt
@@ -193,7 +193,8 @@ class AppWidgetBig : BaseAppWidget() {
* Link up various button actions using [PendingIntent].
*/
private fun linkButtons(context: Context, views: RemoteViews) {
- val action = Intent(context, MainActivity::class.java).putExtra(MainActivity.EXPAND_PANEL, true)
+ val action =
+ Intent(context, MainActivity::class.java).putExtra(MainActivity.EXPAND_PANEL, true)
var pendingIntent: PendingIntent
val serviceName = ComponentName(context, MusicService::class.java)
diff --git a/app/src/main/java/code/name/monkey/retromusic/data/RetroDataService.kt b/app/src/main/java/code/name/monkey/retromusic/data/RetroDataService.kt
deleted file mode 100644
index cb7cee6de..000000000
--- a/app/src/main/java/code/name/monkey/retromusic/data/RetroDataService.kt
+++ /dev/null
@@ -1,26 +0,0 @@
-package code.name.monkey.retromusic.data
-
-import code.name.monkey.retromusic.model.Contributor
-import com.google.gson.GsonBuilder
-import retrofit2.Retrofit
-import retrofit2.converter.gson.GsonConverterFactory
-import retrofit2.http.GET
-
-private const val BASE_URL = "https://github.com/h4h13/RetroMusicPlayer/blob/dev/data/"
-
-interface RetroDataService {
-
- @GET("translators.json")
- suspend fun getContributors(): List
-
- @GET("translators.json")
- suspend fun getTranslators(): List
-
- companion object {
- val retoService: RetroDataService = Retrofit.Builder()
- .baseUrl(BASE_URL)
- .addConverterFactory(GsonConverterFactory.create(GsonBuilder().create()))
- .build()
- .create(RetroDataService::class.java)
- }
-}
diff --git a/app/src/main/java/code/name/monkey/retromusic/dialogs/AddToPlaylistDialog.kt b/app/src/main/java/code/name/monkey/retromusic/dialogs/AddToPlaylistDialog.kt
index 2360e3b88..009cd5b38 100644
--- a/app/src/main/java/code/name/monkey/retromusic/dialogs/AddToPlaylistDialog.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/dialogs/AddToPlaylistDialog.kt
@@ -17,15 +17,13 @@ package code.name.monkey.retromusic.dialogs
import android.app.Dialog
import android.os.Bundle
import androidx.fragment.app.DialogFragment
+import code.name.monkey.retromusic.EXTRA_SONG
import code.name.monkey.retromusic.R
+import code.name.monkey.retromusic.extensions.extraNotNull
import code.name.monkey.retromusic.loaders.PlaylistLoader
import code.name.monkey.retromusic.model.Song
import code.name.monkey.retromusic.util.PlaylistsUtil
-import code.name.monkey.retromusic.util.PreferenceUtil
-import com.afollestad.materialdialogs.LayoutMode
-import com.afollestad.materialdialogs.MaterialDialog
-import com.afollestad.materialdialogs.bottomsheets.BottomSheet
-import com.afollestad.materialdialogs.list.listItems
+import com.google.android.material.dialog.MaterialAlertDialogBuilder
class AddToPlaylistDialog : DialogFragment() {
@@ -33,34 +31,33 @@ class AddToPlaylistDialog : DialogFragment() {
savedInstanceState: Bundle?
): Dialog {
val playlists = PlaylistLoader.getAllPlaylists(requireContext())
- val playlistNames: MutableList = mutableListOf()
+ val playlistNames = mutableListOf()
playlistNames.add(requireContext().resources.getString(R.string.action_new_playlist))
for (p in playlists) {
playlistNames.add(p.name)
}
- return MaterialDialog(requireContext()).show {
- title(R.string.add_playlist_title)
- cornerRadius(PreferenceUtil.getInstance(requireContext()).dialogCorner)
- listItems(items = playlistNames) { dialog, index, _ ->
- val songs =
- requireArguments().getParcelableArrayList("songs") ?: return@listItems
- if (index == 0) {
- dialog.dismiss()
- activity?.supportFragmentManager?.let {
- CreatePlaylistDialog.create(songs).show(it, "ADD_TO_PLAYLIST")
- }
+ return MaterialAlertDialogBuilder(
+ requireContext(),
+ R.style.ThemeOverlay_MaterialComponents_Dialog_Alert
+ )
+ .setTitle(R.string.add_playlist_title)
+ .setItems(playlistNames.toTypedArray()) { _, which ->
+ val songs = extraNotNull>(EXTRA_SONG).value
+ if (which == 0) {
+ CreatePlaylistDialog.create(songs)
+ .show(requireActivity().supportFragmentManager, "ADD_TO_PLAYLIST")
} else {
- dialog.dismiss()
PlaylistsUtil.addToPlaylist(
requireContext(),
songs,
- playlists[index - 1].id,
+ playlists[which - 1].id,
true
)
}
+ dismiss()
}
- }
+ .create()
}
companion object {
@@ -74,7 +71,7 @@ class AddToPlaylistDialog : DialogFragment() {
fun create(songs: List): AddToPlaylistDialog {
val dialog = AddToPlaylistDialog()
val args = Bundle()
- args.putParcelableArrayList("songs", ArrayList(songs))
+ args.putParcelableArrayList(EXTRA_SONG, ArrayList(songs))
dialog.arguments = args
return dialog
}
diff --git a/app/src/main/java/code/name/monkey/retromusic/dialogs/BlacklistFolderChooserDialog.kt b/app/src/main/java/code/name/monkey/retromusic/dialogs/BlacklistFolderChooserDialog.kt
index 330f72c3e..25ace5fa5 100644
--- a/app/src/main/java/code/name/monkey/retromusic/dialogs/BlacklistFolderChooserDialog.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/dialogs/BlacklistFolderChooserDialog.kt
@@ -23,10 +23,7 @@ import android.os.Environment
import androidx.core.app.ActivityCompat
import androidx.fragment.app.DialogFragment
import code.name.monkey.retromusic.R
-import code.name.monkey.retromusic.util.PreferenceUtil
-import com.afollestad.materialdialogs.LayoutMode
import com.afollestad.materialdialogs.MaterialDialog
-import com.afollestad.materialdialogs.bottomsheets.BottomSheet
import com.afollestad.materialdialogs.list.listItems
import java.io.File
import java.util.*
@@ -88,7 +85,7 @@ class BlacklistFolderChooserDialog : DialogFragment() {
) {
return MaterialDialog(requireActivity()).show {
title(R.string.md_error_label)
- cornerRadius(PreferenceUtil.getInstance(requireContext()).dialogCorner)
+
message(R.string.md_storage_perm_error)
positiveButton(android.R.string.ok)
}
@@ -105,7 +102,7 @@ class BlacklistFolderChooserDialog : DialogFragment() {
return MaterialDialog(requireContext()).show {
title(text = parentFolder!!.absolutePath)
- cornerRadius(PreferenceUtil.getInstance(requireContext()).dialogCorner)
+
listItems(items = contentsArray(), waitForPositiveButton = false) { _, index, _ ->
onSelection(index)
}
@@ -146,7 +143,7 @@ class BlacklistFolderChooserDialog : DialogFragment() {
val dialog = dialog as MaterialDialog?
dialog?.apply {
- cornerRadius(PreferenceUtil.getInstance(requireContext()).dialogCorner)
+
setTitle(parentFolder!!.absolutePath)
listItems(items = contentsArray()) { _, index, _ ->
onSelection(index)
diff --git a/app/src/main/java/code/name/monkey/retromusic/dialogs/ClearSmartPlaylistDialog.kt b/app/src/main/java/code/name/monkey/retromusic/dialogs/ClearSmartPlaylistDialog.kt
deleted file mode 100644
index 4a667a27f..000000000
--- a/app/src/main/java/code/name/monkey/retromusic/dialogs/ClearSmartPlaylistDialog.kt
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * Copyright (c) 2019 Hemanth Savarala.
- *
- * Licensed under the GNU General Public License v3
- *
- * This is free software: you can redistribute it and/or modify it under
- * the terms of the GNU General Public License as published by
- * the Free Software Foundation either version 3 of the License, or (at your option) any later version.
- *
- * This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
- * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- * See the GNU General Public License for more details.
- */
-
-package code.name.monkey.retromusic.dialogs
-
-import android.app.Dialog
-import android.os.Bundle
-import androidx.core.text.HtmlCompat
-import androidx.fragment.app.DialogFragment
-import code.name.monkey.retromusic.R
-import code.name.monkey.retromusic.model.smartplaylist.AbsSmartPlaylist
-import code.name.monkey.retromusic.util.PreferenceUtil
-import com.afollestad.materialdialogs.LayoutMode
-import com.afollestad.materialdialogs.MaterialDialog
-import com.afollestad.materialdialogs.bottomsheets.BottomSheet
-
-
-class ClearSmartPlaylistDialog : DialogFragment() {
-
- override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
-
- val playlist = requireArguments().getParcelable("playlist")
- val title = R.string.clear_playlist_title
-
- val content = HtmlCompat.fromHtml(
- getString(R.string.clear_playlist_x, playlist!!.name),
- HtmlCompat.FROM_HTML_MODE_LEGACY
- )
-
- return MaterialDialog(requireContext()).show {
- title(title)
- cornerRadius(PreferenceUtil.getInstance(requireContext()).dialogCorner)
- message(text = content)
- positiveButton(R.string.clear_action) {
- if (activity == null) {
- return@positiveButton
- }
- playlist.clear(requireActivity())
- }
- negativeButton { (android.R.string.cancel) }
- }
- }
-
- companion object {
-
- fun create(playlist: AbsSmartPlaylist): ClearSmartPlaylistDialog {
- val dialog = ClearSmartPlaylistDialog()
- val args = Bundle()
- args.putParcelable("playlist", playlist)
- dialog.arguments = args
- return dialog
- }
- }
-}
\ No newline at end of file
diff --git a/app/src/main/java/code/name/monkey/retromusic/dialogs/CreatePlaylistDialog.kt b/app/src/main/java/code/name/monkey/retromusic/dialogs/CreatePlaylistDialog.kt
index 3dd811530..4b232c4c4 100644
--- a/app/src/main/java/code/name/monkey/retromusic/dialogs/CreatePlaylistDialog.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/dialogs/CreatePlaylistDialog.kt
@@ -14,73 +14,57 @@
package code.name.monkey.retromusic.dialogs
+import android.annotation.SuppressLint
import android.app.Dialog
import android.os.Bundle
-import android.provider.MediaStore
-import android.widget.TextView
+import android.text.TextUtils
+import android.view.LayoutInflater
import androidx.fragment.app.DialogFragment
import code.name.monkey.appthemehelper.util.MaterialUtil
+import code.name.monkey.retromusic.EXTRA_SONG
import code.name.monkey.retromusic.R
-import code.name.monkey.retromusic.R.layout
-import code.name.monkey.retromusic.R.string
-import code.name.monkey.retromusic.extensions.appHandleColor
+import code.name.monkey.retromusic.extensions.extraNotNull
import code.name.monkey.retromusic.model.Song
import code.name.monkey.retromusic.util.PlaylistsUtil
-import code.name.monkey.retromusic.util.PreferenceUtil
-import com.afollestad.materialdialogs.LayoutMode
-import com.afollestad.materialdialogs.MaterialDialog
-import com.afollestad.materialdialogs.bottomsheets.BottomSheet
-import com.afollestad.materialdialogs.customview.customView
-import com.afollestad.materialdialogs.customview.getCustomView
+import com.google.android.material.dialog.MaterialAlertDialogBuilder
import com.google.android.material.textfield.TextInputEditText
import com.google.android.material.textfield.TextInputLayout
+import kotlinx.android.synthetic.main.dialog_playlist.view.*
class CreatePlaylistDialog : DialogFragment() {
- private lateinit var playlistView: TextInputEditText
- private lateinit var actionNewPlaylistContainer: TextInputLayout
-
+ @SuppressLint("InflateParams")
override fun onCreateDialog(
savedInstanceState: Bundle?
): Dialog {
- val materialDialog = MaterialDialog(requireContext())
- .show {
- cornerRadius(PreferenceUtil.getInstance(requireContext()).dialogCorner)
- title(string.new_playlist_title)
- customView(layout.dialog_playlist)
- negativeButton(android.R.string.cancel)
- positiveButton(string.create_action) {
- if (activity == null) {
- return@positiveButton
- }
- val songs = requireArguments().getParcelableArrayList("songs")
- ?: return@positiveButton
+ val view = LayoutInflater.from(requireActivity()).inflate(R.layout.dialog_playlist, null)
+ val playlistView: TextInputEditText = view.actionNewPlaylist
+ val playlistContainer: TextInputLayout = view.actionNewPlaylistContainer
+ MaterialUtil.setTint(playlistContainer, false)
- if (playlistView.text.toString().trim { it <= ' ' }.isNotEmpty()) {
- val playlistId = PlaylistsUtil.createPlaylist(
- requireContext(),
- playlistView.text.toString()
- )
- if (playlistId != -1) {
- PlaylistsUtil.addToPlaylist(requireContext(), songs, playlistId, true)
- }
+ return MaterialAlertDialogBuilder(
+ requireActivity(),
+ R.style.ThemeOverlay_MaterialComponents_Dialog_Alert
+ )
+ .setTitle(R.string.new_playlist_title)
+ .setView(view)
+ .setNegativeButton(android.R.string.cancel, null)
+ .setPositiveButton(
+ R.string.create_action
+ ) { _, _ ->
+ val extra = extraNotNull>(EXTRA_SONG)
+ val playlistName = playlistView.text.toString()
+ if (!TextUtils.isEmpty(playlistName)) {
+ val playlistId = PlaylistsUtil.createPlaylist(
+ requireContext(),
+ playlistView.text.toString()
+ )
+ if (playlistId != -1) {
+ PlaylistsUtil.addToPlaylist(requireContext(), extra.value, playlistId, true)
}
}
}
-
- val dialogView = materialDialog.getCustomView()
- playlistView = dialogView.findViewById(R.id.actionNewPlaylist)
- actionNewPlaylistContainer = dialogView.findViewById(R.id.actionNewPlaylistContainer)
-
- MaterialUtil.setTint(actionNewPlaylistContainer, false)
-
- val playlistId = requireArguments().getLong(MediaStore.Audio.Playlists.Members.PLAYLIST_ID)
- playlistView.appHandleColor()
- .setText(
- PlaylistsUtil.getNameForPlaylist(requireContext(), playlistId),
- TextView.BufferType.EDITABLE
- )
- return materialDialog
+ .create()
}
companion object {
@@ -98,7 +82,7 @@ class CreatePlaylistDialog : DialogFragment() {
fun create(songs: ArrayList): CreatePlaylistDialog {
val dialog = CreatePlaylistDialog()
val args = Bundle()
- args.putParcelableArrayList("songs", songs)
+ args.putParcelableArrayList(EXTRA_SONG, songs)
dialog.arguments = args
return dialog
}
diff --git a/app/src/main/java/code/name/monkey/retromusic/dialogs/DeletePlaylistDialog.kt b/app/src/main/java/code/name/monkey/retromusic/dialogs/DeletePlaylistDialog.kt
index 0f7a2d23e..a3026e810 100644
--- a/app/src/main/java/code/name/monkey/retromusic/dialogs/DeletePlaylistDialog.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/dialogs/DeletePlaylistDialog.kt
@@ -18,48 +18,45 @@ import android.app.Dialog
import android.os.Bundle
import androidx.core.text.HtmlCompat
import androidx.fragment.app.DialogFragment
+import code.name.monkey.retromusic.EXTRA_PLAYLIST
import code.name.monkey.retromusic.R
-import code.name.monkey.retromusic.R.string
+import code.name.monkey.retromusic.extensions.extraNotNull
import code.name.monkey.retromusic.model.Playlist
import code.name.monkey.retromusic.util.PlaylistsUtil
-import code.name.monkey.retromusic.util.PreferenceUtil
-import com.afollestad.materialdialogs.LayoutMode
-import com.afollestad.materialdialogs.MaterialDialog
-import com.afollestad.materialdialogs.bottomsheets.BottomSheet
-import java.util.*
+import com.google.android.material.dialog.MaterialAlertDialogBuilder
class DeletePlaylistDialog : DialogFragment() {
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
- val playlists = requireArguments().getParcelableArrayList("playlist")
+ val playlists = extraNotNull>(EXTRA_PLAYLIST).value
val title: Int
- val content: CharSequence
+ val message: CharSequence
//noinspection ConstantConditions
- if (playlists!!.size > 1) {
- title = string.delete_playlists_title
- content = HtmlCompat.fromHtml(
- getString(string.delete_x_playlists, playlists.size),
+ if (playlists.size > 1) {
+ title = R.string.delete_playlists_title
+ message = HtmlCompat.fromHtml(
+ String.format(getString(R.string.delete_x_playlists), playlists.size),
HtmlCompat.FROM_HTML_MODE_LEGACY
)
} else {
- title = string.delete_playlist_title
- content = HtmlCompat.fromHtml(
- getString(string.delete_playlist_x, playlists[0].name),
+ title = R.string.delete_playlist_title
+ message = HtmlCompat.fromHtml(
+ String.format(getString(R.string.delete_playlist_x), playlists[0].name),
HtmlCompat.FROM_HTML_MODE_LEGACY
)
}
- return MaterialDialog(requireContext())
- .show {
- cornerRadius(PreferenceUtil.getInstance(requireContext()).dialogCorner)
- title(title)
- message(text = content)
- negativeButton(android.R.string.cancel)
- positiveButton(R.string.action_delete) {
- PlaylistsUtil.deletePlaylists(requireContext(), playlists)
- }
- negativeButton(android.R.string.cancel)
+ return MaterialAlertDialogBuilder(
+ requireContext(),
+ R.style.ThemeOverlay_MaterialComponents_Dialog_Alert
+ )
+ .setTitle(title)
+ .setMessage(message)
+ .setNegativeButton(android.R.string.cancel, null)
+ .setPositiveButton(R.string.action_delete) { _, _ ->
+ PlaylistsUtil.deletePlaylists(requireContext(), playlists)
}
+ .create()
}
companion object {
@@ -73,7 +70,7 @@ class DeletePlaylistDialog : DialogFragment() {
fun create(playlist: ArrayList): DeletePlaylistDialog {
val dialog = DeletePlaylistDialog()
val args = Bundle()
- args.putParcelableArrayList("playlist", playlist)
+ args.putParcelableArrayList(EXTRA_PLAYLIST, playlist)
dialog.arguments = args
return dialog
}
diff --git a/app/src/main/java/code/name/monkey/retromusic/dialogs/DeleteSongsAsyncTask.java b/app/src/main/java/code/name/monkey/retromusic/dialogs/DeleteSongsAsyncTask.java
index e55488c7a..5cc00d765 100644
--- a/app/src/main/java/code/name/monkey/retromusic/dialogs/DeleteSongsAsyncTask.java
+++ b/app/src/main/java/code/name/monkey/retromusic/dialogs/DeleteSongsAsyncTask.java
@@ -55,7 +55,8 @@ public class DeleteSongsAsyncTask extends DialogAsyncTask? = null
private var deleteSongsAsyncTask: DeleteSongsAsyncTask? = null
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
- val songs: ArrayList? = requireArguments().getParcelableArrayList("songs")
+ val songs = extraNotNull>(EXTRA_SONG).value
var title = 0
- var content: CharSequence = ""
- if (songs != null) {
- if (songs.size > 1) {
- title = R.string.delete_songs_title
- content = HtmlCompat.fromHtml(
- getString(R.string.delete_x_songs, songs.size),
- HtmlCompat.FROM_HTML_MODE_LEGACY
- )
- } else {
- title = R.string.delete_song_title
- content = HtmlCompat.fromHtml(
- getString(R.string.delete_song_x, songs[0].title),
- HtmlCompat.FROM_HTML_MODE_LEGACY
- )
- }
+ var message: CharSequence = ""
+ if (songs.size > 1) {
+ title = R.string.delete_songs_title
+ message = HtmlCompat.fromHtml(
+ String.format(getString(R.string.delete_x_songs), songs.size),
+ HtmlCompat.FROM_HTML_MODE_LEGACY
+ )
+ } else {
+ title = R.string.delete_song_title
+ message = HtmlCompat.fromHtml(
+ String.format(getString(R.string.delete_song_x), songs[0].title),
+ HtmlCompat.FROM_HTML_MODE_LEGACY
+ )
}
- return MaterialDialog(requireContext()).show {
- title(title)
- message(text = content)
- negativeButton(android.R.string.cancel) {
- dismiss()
- }
- cornerRadius(PreferenceUtil.getInstance(requireContext()).dialogCorner)
- noAutoDismiss()
- positiveButton(R.string.action_delete) {
- if (songs != null) {
- if ((songs.size == 1) && MusicPlayerRemote.isPlaying(songs[0])) {
- MusicPlayerRemote.playNextSong()
- }
+ return MaterialAlertDialogBuilder(
+ requireContext(),
+ R.style.ThemeOverlay_MaterialComponents_Dialog_Alert
+ )
+ .setTitle(title)
+ .setMessage(message)
+ .setCancelable(false)
+ .setNegativeButton(android.R.string.cancel, null)
+ .setPositiveButton(R.string.action_delete) { _, _ ->
+ if ((songs.size == 1) && MusicPlayerRemote.isPlaying(songs[0])) {
+ MusicPlayerRemote.playNextSong()
}
-
songsToRemove = songs
deleteSongsAsyncTask = DeleteSongsAsyncTask(this@DeleteSongsDialog)
deleteSongsAsyncTask?.execute(DeleteSongsAsyncTask.LoadingInfo(songs, null))
}
- }
+ .create()
}
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
@@ -119,7 +114,7 @@ class DeleteSongsDialog : DialogFragment() {
fun create(songs: List): DeleteSongsDialog {
val dialog = DeleteSongsDialog()
val args = Bundle()
- args.putParcelableArrayList("songs", ArrayList(songs))
+ args.putParcelableArrayList(EXTRA_SONG, ArrayList(songs))
dialog.arguments = args
return dialog
}
diff --git a/app/src/main/java/code/name/monkey/retromusic/dialogs/RemoveFromPlaylistDialog.kt b/app/src/main/java/code/name/monkey/retromusic/dialogs/RemoveFromPlaylistDialog.kt
index 601d7cf5a..206a89e7d 100644
--- a/app/src/main/java/code/name/monkey/retromusic/dialogs/RemoveFromPlaylistDialog.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/dialogs/RemoveFromPlaylistDialog.kt
@@ -18,34 +18,32 @@ import android.app.Dialog
import android.os.Bundle
import androidx.core.text.HtmlCompat
import androidx.fragment.app.DialogFragment
+import code.name.monkey.retromusic.EXTRA_SONG
import code.name.monkey.retromusic.R
import code.name.monkey.retromusic.R.string
import code.name.monkey.retromusic.model.PlaylistSong
import code.name.monkey.retromusic.util.PlaylistsUtil
-import code.name.monkey.retromusic.util.PreferenceUtil
-import com.afollestad.materialdialogs.LayoutMode
-import com.afollestad.materialdialogs.MaterialDialog
-import com.afollestad.materialdialogs.bottomsheets.BottomSheet
+import com.google.android.material.dialog.MaterialAlertDialogBuilder
class RemoveFromPlaylistDialog : DialogFragment() {
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
- val songs = requireArguments().getParcelableArrayList("songs")
+ val songs = requireArguments().getParcelableArrayList(EXTRA_SONG)
var title = 0
- var content: CharSequence = ""
+ var message: CharSequence = ""
if (songs != null) {
if (songs.size > 1) {
title = R.string.remove_songs_from_playlist_title
- content = HtmlCompat.fromHtml(
- getString(string.remove_x_songs_from_playlist, songs.size),
+ message = HtmlCompat.fromHtml(
+ String.format(getString(string.remove_x_songs_from_playlist), songs.size),
HtmlCompat.FROM_HTML_MODE_LEGACY
)
} else {
title = R.string.remove_song_from_playlist_title
- content = HtmlCompat.fromHtml(
- getString(
- code.name.monkey.retromusic.R.string.remove_song_x_from_playlist,
+ message = HtmlCompat.fromHtml(
+ String.format(
+ getString(string.remove_song_x_from_playlist),
songs[0].title
),
HtmlCompat.FROM_HTML_MODE_LEGACY
@@ -53,22 +51,20 @@ class RemoveFromPlaylistDialog : DialogFragment() {
}
}
-
- return MaterialDialog(requireContext())
- .show {
- title(title)
- message(text = content)
- negativeButton(android.R.string.cancel)
- positiveButton(R.string.remove_action) {
- if (activity == null)
- return@positiveButton
- PlaylistsUtil.removeFromPlaylist(
- requireContext(),
- songs as MutableList
- )
- }
- cornerRadius(PreferenceUtil.getInstance(requireContext()).dialogCorner)
+ return MaterialAlertDialogBuilder(
+ requireContext(),
+ R.style.ThemeOverlay_MaterialComponents_Dialog_Alert
+ )
+ .setTitle(title)
+ .setMessage(message)
+ .setPositiveButton(R.string.remove_action) { _, _ ->
+ PlaylistsUtil.removeFromPlaylist(
+ requireContext(),
+ songs as MutableList
+ )
}
+ .setNegativeButton(android.R.string.cancel, null)
+ .create()
}
companion object {
@@ -82,7 +78,7 @@ class RemoveFromPlaylistDialog : DialogFragment() {
fun create(songs: ArrayList): RemoveFromPlaylistDialog {
val dialog = RemoveFromPlaylistDialog()
val args = Bundle()
- args.putParcelableArrayList("songs", songs)
+ args.putParcelableArrayList(EXTRA_SONG, songs)
dialog.arguments = args
return dialog
}
diff --git a/app/src/main/java/code/name/monkey/retromusic/dialogs/RenamePlaylistDialog.kt b/app/src/main/java/code/name/monkey/retromusic/dialogs/RenamePlaylistDialog.kt
index 52097722f..ba11e6ef5 100644
--- a/app/src/main/java/code/name/monkey/retromusic/dialogs/RenamePlaylistDialog.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/dialogs/RenamePlaylistDialog.kt
@@ -14,62 +14,52 @@
package code.name.monkey.retromusic.dialogs
+import android.annotation.SuppressLint
import android.app.Dialog
import android.os.Bundle
import android.provider.MediaStore.Audio.Playlists.Members.PLAYLIST_ID
-import android.widget.TextView
+import android.view.LayoutInflater
import androidx.fragment.app.DialogFragment
import code.name.monkey.appthemehelper.util.MaterialUtil
import code.name.monkey.retromusic.R
-import code.name.monkey.retromusic.R.layout
-import code.name.monkey.retromusic.R.string
-import code.name.monkey.retromusic.extensions.appHandleColor
+import code.name.monkey.retromusic.extensions.extraNotNull
import code.name.monkey.retromusic.util.PlaylistsUtil
-import code.name.monkey.retromusic.util.PreferenceUtil
-import com.afollestad.materialdialogs.LayoutMode
-import com.afollestad.materialdialogs.MaterialDialog
-import com.afollestad.materialdialogs.bottomsheets.BottomSheet
-import com.afollestad.materialdialogs.customview.customView
-import com.afollestad.materialdialogs.customview.getCustomView
+import com.google.android.material.dialog.MaterialAlertDialogBuilder
import com.google.android.material.textfield.TextInputEditText
import com.google.android.material.textfield.TextInputLayout
class RenamePlaylistDialog : DialogFragment() {
- private lateinit var playlistView: TextInputEditText
- private lateinit var actionNewPlaylistContainer: TextInputLayout
- override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
- val materialDialog = MaterialDialog(requireContext())
- .show {
- cornerRadius(PreferenceUtil.getInstance(requireContext()).dialogCorner)
- title(string.rename_playlist_title)
- customView(layout.dialog_playlist)
- negativeButton(android.R.string.cancel)
- positiveButton(string.action_rename) {
- if (playlistView.toString().trim { it <= ' ' } != "") {
- val playlistId = requireArguments().getLong(PLAYLIST_ID)
- PlaylistsUtil.renamePlaylist(
- context,
- playlistId,
- playlistView.text!!.toString()
- )
- }
+
+ @SuppressLint("InflateParams")
+ override fun onCreateDialog(
+ savedInstanceState: Bundle?
+ ): Dialog {
+ val layout = LayoutInflater.from(requireContext())
+ .inflate(R.layout.dialog_playlist, null)
+ val inputEditText: TextInputEditText = layout.findViewById(R.id.actionNewPlaylist)
+ val nameContainer: TextInputLayout =
+ layout.findViewById(R.id.actionNewPlaylistContainer)
+ MaterialUtil.setTint(nameContainer, false)
+
+ return MaterialAlertDialogBuilder(
+ requireContext(),
+ R.style.ThemeOverlay_MaterialComponents_Dialog_Alert
+ )
+ .setTitle(R.string.rename_playlist_title)
+ .setView(layout)
+ .setNegativeButton(android.R.string.cancel, null)
+ .setPositiveButton(R.string.action_rename) { _, _ ->
+ val name = inputEditText.text.toString()
+ if (name.isNotEmpty()) {
+ PlaylistsUtil.renamePlaylist(
+ requireContext(),
+ extraNotNull(PLAYLIST_ID).value,
+ name
+ )
}
}
-
- val dialogView = materialDialog.getCustomView()
- playlistView = dialogView.findViewById(R.id.actionNewPlaylist)
- actionNewPlaylistContainer = dialogView.findViewById(R.id.actionNewPlaylistContainer)
-
- MaterialUtil.setTint(actionNewPlaylistContainer, false)
-
- val playlistId = requireArguments().getLong(PLAYLIST_ID)
- playlistView.appHandleColor()
- .setText(
- PlaylistsUtil.getNameForPlaylist(requireContext(), playlistId),
- TextView.BufferType.EDITABLE
- )
- return materialDialog
+ .create()
}
companion object {
diff --git a/app/src/main/java/code/name/monkey/retromusic/dialogs/SleepTimerDialog.kt b/app/src/main/java/code/name/monkey/retromusic/dialogs/SleepTimerDialog.kt
index a2ed61b0a..4af19be45 100755
--- a/app/src/main/java/code/name/monkey/retromusic/dialogs/SleepTimerDialog.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/dialogs/SleepTimerDialog.kt
@@ -14,6 +14,7 @@
package code.name.monkey.retromusic.dialogs
+import android.annotation.SuppressLint
import android.app.AlarmManager
import android.app.Dialog
import android.app.PendingIntent
@@ -22,29 +23,23 @@ import android.content.Intent
import android.os.Bundle
import android.os.CountDownTimer
import android.os.SystemClock
+import android.view.LayoutInflater
import android.widget.CheckBox
import android.widget.SeekBar
import android.widget.TextView
import android.widget.Toast
import androidx.fragment.app.DialogFragment
-import code.name.monkey.appthemehelper.ThemeStore
-import code.name.monkey.appthemehelper.util.TintHelper
import code.name.monkey.retromusic.R
+import code.name.monkey.retromusic.extensions.addAccentColor
import code.name.monkey.retromusic.helper.MusicPlayerRemote
import code.name.monkey.retromusic.service.MusicService
import code.name.monkey.retromusic.service.MusicService.ACTION_PENDING_QUIT
import code.name.monkey.retromusic.service.MusicService.ACTION_QUIT
-import code.name.monkey.retromusic.util.MusicUtil
-import code.name.monkey.retromusic.util.PreferenceUtil
-import code.name.monkey.retromusic.util.ViewUtil
-import com.afollestad.materialdialogs.LayoutMode
+import code.name.monkey.retromusic.util.PreferenceUtilKT
import com.afollestad.materialdialogs.MaterialDialog
import com.afollestad.materialdialogs.WhichButton
import com.afollestad.materialdialogs.actions.getActionButton
-import com.afollestad.materialdialogs.bottomsheets.BottomSheet
-import com.afollestad.materialdialogs.callbacks.onShow
-import com.afollestad.materialdialogs.customview.customView
-import com.afollestad.materialdialogs.customview.getCustomView
+import com.google.android.material.dialog.MaterialAlertDialogBuilder
class SleepTimerDialog : DialogFragment() {
@@ -55,91 +50,26 @@ class SleepTimerDialog : DialogFragment() {
private lateinit var seekBar: SeekBar
private lateinit var timerDisplay: TextView
+ @SuppressLint("InflateParams")
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
timerUpdater = TimerUpdater()
+ val layout = LayoutInflater.from(requireContext())
+ .inflate(R.layout.dialog_sleep_timer, null)
+ shouldFinishLastSong = layout.findViewById(R.id.shouldFinishLastSong)
+ seekBar = layout.findViewById(R.id.seekBar)
+ timerDisplay = layout.findViewById(R.id.timerDisplay)
- materialDialog = MaterialDialog(requireContext())
- .title(R.string.action_sleep_timer)
- .cornerRadius(PreferenceUtil.getInstance(requireContext()).dialogCorner)
- .positiveButton(R.string.action_set) {
- PreferenceUtil.getInstance(requireContext()).sleepTimerFinishMusic =
- shouldFinishLastSong.isChecked
-
- val minutes = seekArcProgress
-
- val pi = makeTimerPendingIntent(PendingIntent.FLAG_CANCEL_CURRENT)
-
- val nextSleepTimerElapsedTime = SystemClock.elapsedRealtime() + minutes * 60 * 1000
- PreferenceUtil.getInstance(requireContext())
- .setNextSleepTimerElapsedRealtime(nextSleepTimerElapsedTime)
- val am = requireContext().getSystemService(Context.ALARM_SERVICE) as AlarmManager
- am.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, nextSleepTimerElapsedTime, pi)
-
- Toast.makeText(
- requireContext(),
- requireContext().resources.getString(R.string.sleep_timer_set, minutes),
- Toast.LENGTH_SHORT
- ).show()
- }
- .negativeButton(android.R.string.cancel) {
- if (activity == null) {
- return@negativeButton
- }
- val previous = makeTimerPendingIntent(PendingIntent.FLAG_NO_CREATE)
- if (previous != null) {
- val am =
- requireContext().getSystemService(Context.ALARM_SERVICE) as AlarmManager
- am.cancel(previous)
- previous.cancel()
- Toast.makeText(
- requireContext(),
- requireContext().resources.getString(R.string.sleep_timer_canceled),
- Toast.LENGTH_SHORT
- ).show()
- }
-
- val musicService = MusicPlayerRemote.musicService
- if (musicService != null && musicService.pendingQuit) {
- musicService.pendingQuit = false
- Toast.makeText(
- requireContext(),
- requireContext().resources.getString(R.string.sleep_timer_canceled),
- Toast.LENGTH_SHORT
- ).show()
- }
- }
- .customView(R.layout.dialog_sleep_timer, scrollable = false)
- .show {
- onShow {
- if (makeTimerPendingIntent(PendingIntent.FLAG_NO_CREATE) != null) {
- timerUpdater.start()
- }
- }
- }
-
- if (activity == null || materialDialog.getCustomView() == null) {
- return materialDialog
+ val finishMusic = PreferenceUtilKT.isSleepTimerFinishMusic
+ shouldFinishLastSong.apply {
+ addAccentColor()
+ isChecked = finishMusic
+ }
+ seekBar.apply {
+ addAccentColor()
+ seekArcProgress = PreferenceUtilKT.lastSleepTimerValue
+ updateTimeDisplayTime()
+ seekBar.progress = seekArcProgress
}
-
- shouldFinishLastSong =
- materialDialog.getCustomView().findViewById(R.id.shouldFinishLastSong)
- seekBar = materialDialog.getCustomView().findViewById(R.id.seekBar)
- timerDisplay = materialDialog.getCustomView().findViewById(R.id.timerDisplay)
- TintHelper.setTintAuto(
- shouldFinishLastSong,
- ThemeStore.accentColor(requireContext()),
- false
- )
-
- val finishMusic = PreferenceUtil.getInstance(requireContext()).sleepTimerFinishMusic
- shouldFinishLastSong.isChecked = finishMusic
-
-
- seekArcProgress = PreferenceUtil.getInstance(requireContext()).lastSleepTimerValue
- updateTimeDisplayTime()
- seekBar.progress = seekArcProgress
-
- setProgressBarColor(ThemeStore.accentColor(requireContext()))
seekBar.setOnSeekBarChangeListener(object : SeekBar.OnSeekBarChangeListener {
override fun onProgressChanged(seekBar: SeekBar, i: Int, b: Boolean) {
@@ -155,11 +85,54 @@ class SleepTimerDialog : DialogFragment() {
}
override fun onStopTrackingTouch(seekBar: SeekBar) {
- PreferenceUtil.getInstance(requireContext()).lastSleepTimerValue = seekArcProgress
+ PreferenceUtilKT.lastSleepTimerValue = seekArcProgress
}
})
+ return MaterialAlertDialogBuilder(
+ requireContext(),
+ R.style.ThemeOverlay_MaterialComponents_Dialog_Alert
+ )
+ .setTitle(R.string.action_sleep_timer)
+ .setView(layout)
+ .setPositiveButton(R.string.action_set) { _, _ ->
+ PreferenceUtilKT.isSleepTimerFinishMusic = shouldFinishLastSong.isChecked
+ val minutes = seekArcProgress
+ val pi = makeTimerPendingIntent(PendingIntent.FLAG_CANCEL_CURRENT)
+ val nextSleepTimerElapsedTime = SystemClock.elapsedRealtime() + minutes * 60 * 1000
+ PreferenceUtilKT.nextSleepTimerElapsedRealTime = nextSleepTimerElapsedTime.toInt()
+ val am = requireContext().getSystemService(Context.ALARM_SERVICE) as AlarmManager
+ am.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, nextSleepTimerElapsedTime, pi)
- return materialDialog
+ Toast.makeText(
+ requireContext(),
+ requireContext().resources.getString(R.string.sleep_timer_set, minutes),
+ Toast.LENGTH_SHORT
+ ).show()
+ }
+ .setNegativeButton(android.R.string.cancel) { _, _ ->
+ val previous = makeTimerPendingIntent(PendingIntent.FLAG_NO_CREATE)
+ if (previous != null) {
+ val am =
+ requireContext().getSystemService(Context.ALARM_SERVICE) as AlarmManager
+ am.cancel(previous)
+ previous.cancel()
+ Toast.makeText(
+ requireContext(),
+ requireContext().resources.getString(R.string.sleep_timer_canceled),
+ Toast.LENGTH_SHORT
+ ).show()
+ val musicService = MusicPlayerRemote.musicService
+ if (musicService != null && musicService.pendingQuit) {
+ musicService.pendingQuit = false
+ Toast.makeText(
+ requireContext(),
+ requireContext().resources.getString(R.string.sleep_timer_canceled),
+ Toast.LENGTH_SHORT
+ ).show()
+ }
+ }
+ }
+ .create()
}
private fun updateTimeDisplayTime() {
@@ -187,25 +160,19 @@ class SleepTimerDialog : DialogFragment() {
}
}
- private inner class TimerUpdater internal constructor() : CountDownTimer(
- PreferenceUtil.getInstance(requireContext()).nextSleepTimerElapsedRealTime - SystemClock.elapsedRealtime(),
- 1000
- ) {
+ private inner class TimerUpdater internal constructor() :
+ CountDownTimer(
+ PreferenceUtilKT.nextSleepTimerElapsedRealTime - SystemClock.elapsedRealtime(),
+ 1000
+ ) {
override fun onTick(millisUntilFinished: Long) {
- materialDialog.getActionButton(WhichButton.NEGATIVE).text = String.format(
- "%s %s",
- materialDialog.context.getString(R.string.cancel_current_timer),
- " (" + MusicUtil.getReadableDurationString(millisUntilFinished) + ")"
- )
+ println("onTick: $millisUntilFinished")
+ seekBar.progress = millisUntilFinished.toInt()
}
override fun onFinish() {
updateCancelButton()
}
}
-
- private fun setProgressBarColor(dark: Int) {
- ViewUtil.setProgressDrawable(progressSlider = seekBar, newColor = dark)
- }
}
\ No newline at end of file
diff --git a/app/src/main/java/code/name/monkey/retromusic/dialogs/SongDetailDialog.kt b/app/src/main/java/code/name/monkey/retromusic/dialogs/SongDetailDialog.kt
index 6a6aec0be..5bc2aba36 100644
--- a/app/src/main/java/code/name/monkey/retromusic/dialogs/SongDetailDialog.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/dialogs/SongDetailDialog.kt
@@ -14,27 +14,24 @@
package code.name.monkey.retromusic.dialogs
+import android.annotation.SuppressLint
import android.app.Dialog
import android.content.Context
import android.os.Bundle
import android.text.Spanned
import android.util.Log
+import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.TextView
import androidx.annotation.NonNull
import androidx.core.text.HtmlCompat
import androidx.fragment.app.DialogFragment
+import code.name.monkey.retromusic.EXTRA_SONG
import code.name.monkey.retromusic.R
-import code.name.monkey.retromusic.R.string
import code.name.monkey.retromusic.model.Song
import code.name.monkey.retromusic.util.MusicUtil
-import code.name.monkey.retromusic.util.PreferenceUtil
-import com.afollestad.materialdialogs.LayoutMode
-import com.afollestad.materialdialogs.MaterialDialog
-import com.afollestad.materialdialogs.bottomsheets.BottomSheet
-import com.afollestad.materialdialogs.customview.customView
-import com.afollestad.materialdialogs.customview.getCustomView
+import com.google.android.material.dialog.MaterialAlertDialogBuilder
import org.jaudiotagger.audio.AudioFileIO
import org.jaudiotagger.audio.exceptions.CannotReadException
import org.jaudiotagger.audio.exceptions.InvalidAudioFrameException
@@ -51,22 +48,12 @@ inline fun ViewGroup.forEach(action: (View) -> Unit) {
class SongDetailDialog : DialogFragment() {
+ @SuppressLint("InflateParams")
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
val context: Context = requireContext()
- val song = requireArguments().getParcelable("song")
-
- val materialDialog = MaterialDialog(requireContext())
- .show {
- customView(
- R.layout.dialog_file_details,
- scrollable = true
- )
- positiveButton(android.R.string.ok)
- title(string.action_details)
- cornerRadius(PreferenceUtil.getInstance(requireContext()).dialogCorner)
- }
- val dialogView = materialDialog.getCustomView()
+ val dialogView = LayoutInflater.from(context).inflate(R.layout.dialog_file_details, null)
+ val song = requireArguments().getParcelable(EXTRA_SONG)
val fileName: TextView = dialogView.findViewById(R.id.fileName)
val filePath: TextView = dialogView.findViewById(R.id.filePath)
val fileSize: TextView = dialogView.findViewById(R.id.fileSize)
@@ -75,23 +62,23 @@ class SongDetailDialog : DialogFragment() {
val bitRate: TextView = dialogView.findViewById(R.id.bitrate)
val samplingRate: TextView = dialogView.findViewById(R.id.samplingRate)
- fileName.text = makeTextWithTitle(context, string.label_file_name, "-")
- filePath.text = makeTextWithTitle(context, string.label_file_path, "-")
- fileSize.text = makeTextWithTitle(context, string.label_file_size, "-")
- fileFormat.text = makeTextWithTitle(context, string.label_file_format, "-")
- trackLength.text = makeTextWithTitle(context, string.label_track_length, "-")
- bitRate.text = makeTextWithTitle(context, string.label_bit_rate, "-")
- samplingRate.text = makeTextWithTitle(context, string.label_sampling_rate, "-")
+ fileName.text = makeTextWithTitle(context, R.string.label_file_name, "-")
+ filePath.text = makeTextWithTitle(context, R.string.label_file_path, "-")
+ fileSize.text = makeTextWithTitle(context, R.string.label_file_size, "-")
+ fileFormat.text = makeTextWithTitle(context, R.string.label_file_format, "-")
+ trackLength.text = makeTextWithTitle(context, R.string.label_track_length, "-")
+ bitRate.text = makeTextWithTitle(context, R.string.label_bit_rate, "-")
+ samplingRate.text = makeTextWithTitle(context, R.string.label_sampling_rate, "-")
if (song != null) {
val songFile = File(song.data)
if (songFile.exists()) {
- fileName.text = makeTextWithTitle(context, string.label_file_name, songFile.name)
+ fileName.text = makeTextWithTitle(context, R.string.label_file_name, songFile.name)
filePath.text =
- makeTextWithTitle(context, string.label_file_path, songFile.absolutePath)
+ makeTextWithTitle(context, R.string.label_file_path, songFile.absolutePath)
fileSize.text =
makeTextWithTitle(
context,
- string.label_file_size,
+ R.string.label_file_size,
getFileSizeString(songFile.length())
)
try {
@@ -99,21 +86,21 @@ class SongDetailDialog : DialogFragment() {
val audioHeader = audioFile.audioHeader
fileFormat.text =
- makeTextWithTitle(context, string.label_file_format, audioHeader.format)
+ makeTextWithTitle(context, R.string.label_file_format, audioHeader.format)
trackLength.text = makeTextWithTitle(
context,
- string.label_track_length,
+ R.string.label_track_length,
MusicUtil.getReadableDurationString((audioHeader.trackLength * 1000).toLong())
)
bitRate.text = makeTextWithTitle(
context,
- string.label_bit_rate,
+ R.string.label_bit_rate,
audioHeader.bitRate + " kb/s"
)
samplingRate.text =
makeTextWithTitle(
context,
- string.label_sampling_rate,
+ R.string.label_sampling_rate,
audioHeader.sampleRate + " Hz"
)
} catch (@NonNull e: CannotReadException) {
@@ -121,50 +108,55 @@ class SongDetailDialog : DialogFragment() {
// fallback
trackLength.text = makeTextWithTitle(
context,
- string.label_track_length,
+ R.string.label_track_length,
MusicUtil.getReadableDurationString(song.duration)
)
} catch (@NonNull e: IOException) {
Log.e(TAG, "error while reading the song file", e)
trackLength.text = makeTextWithTitle(
context,
- string.label_track_length,
+ R.string.label_track_length,
MusicUtil.getReadableDurationString(song.duration)
)
} catch (@NonNull e: TagException) {
Log.e(TAG, "error while reading the song file", e)
trackLength.text = makeTextWithTitle(
context,
- string.label_track_length,
+ R.string.label_track_length,
MusicUtil.getReadableDurationString(song.duration)
)
} catch (@NonNull e: ReadOnlyFileException) {
Log.e(TAG, "error while reading the song file", e)
trackLength.text = makeTextWithTitle(
context,
- string.label_track_length,
+ R.string.label_track_length,
MusicUtil.getReadableDurationString(song.duration)
)
} catch (@NonNull e: InvalidAudioFrameException) {
Log.e(TAG, "error while reading the song file", e)
trackLength.text = makeTextWithTitle(
context,
- string.label_track_length,
+ R.string.label_track_length,
MusicUtil.getReadableDurationString(song.duration)
)
}
} else {
// fallback
- fileName.text = makeTextWithTitle(context, string.label_file_name, song.title)
+ fileName.text = makeTextWithTitle(context, R.string.label_file_name, song.title)
trackLength.text = makeTextWithTitle(
context,
- string.label_track_length,
+ R.string.label_track_length,
MusicUtil.getReadableDurationString(song.duration)
)
}
}
-
- return materialDialog
+ return MaterialAlertDialogBuilder(
+ requireContext(),
+ R.style.ThemeOverlay_MaterialComponents_Dialog_Alert
+ ).setTitle(R.string.action_details)
+ .setPositiveButton(android.R.string.ok, null)
+ .setView(dialogView)
+ .create()
}
companion object {
@@ -174,7 +166,7 @@ class SongDetailDialog : DialogFragment() {
fun create(song: Song): SongDetailDialog {
val dialog = SongDetailDialog()
val args = Bundle()
- args.putParcelable("song", song)
+ args.putParcelable(EXTRA_SONG, song)
dialog.arguments = args
return dialog
}
diff --git a/app/src/main/java/code/name/monkey/retromusic/dialogs/SongShareDialog.kt b/app/src/main/java/code/name/monkey/retromusic/dialogs/SongShareDialog.kt
index 7d19db826..2f039e635 100644
--- a/app/src/main/java/code/name/monkey/retromusic/dialogs/SongShareDialog.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/dialogs/SongShareDialog.kt
@@ -18,69 +18,77 @@ import android.app.Dialog
import android.content.Intent
import android.os.Bundle
import androidx.fragment.app.DialogFragment
+import code.name.monkey.retromusic.EXTRA_SONG
import code.name.monkey.retromusic.R
import code.name.monkey.retromusic.activities.ShareInstagramStory
import code.name.monkey.retromusic.model.Song
import code.name.monkey.retromusic.util.MusicUtil
-import code.name.monkey.retromusic.util.PreferenceUtil
-import com.afollestad.materialdialogs.LayoutMode
-import com.afollestad.materialdialogs.MaterialDialog
-import com.afollestad.materialdialogs.bottomsheets.BottomSheet
-import com.afollestad.materialdialogs.list.listItems
+import com.google.android.material.dialog.MaterialAlertDialogBuilder
class SongShareDialog : DialogFragment() {
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
- val song: Song? = requireArguments().getParcelable("song")
- val currentlyListening: String =
- getString(R.string.currently_listening_to_x_by_x, song?.title, song?.artistName)
+ val song: Song? = requireArguments().getParcelable(EXTRA_SONG)
+ val listening: String =
+ String.format(
+ getString(R.string.currently_listening_to_x_by_x),
+ song?.title,
+ song?.artistName
+ )
+ return MaterialAlertDialogBuilder(
+ requireContext(),
+ R.style.ThemeOverlay_MaterialComponents_Dialog_Alert
+ ).setTitle(R.string.what_do_you_want_to_share)
+ .setItems(
+ arrayOf(
+ getString(R.string.the_audio_file),
+ "\u201C" + listening + "\u201D",
+ getString(R.string.social_stories)
+ )
+ ) { _, which ->
+ withAction(which, song, listening)
+ }
+ .create()
+ }
- return MaterialDialog(requireContext())
- .title(R.string.what_do_you_want_to_share)
- .show {
- cornerRadius(PreferenceUtil.getInstance(requireContext()).dialogCorner)
- listItems(
- items = listOf(
- getString(code.name.monkey.retromusic.R.string.the_audio_file),
- "\u201C" + currentlyListening + "\u201D",
- getString(R.string.social_stories)
+ private fun withAction(
+ which: Int,
+ song: Song?,
+ currentlyListening: String
+ ) {
+ when (which) {
+ 0 -> {
+ startActivity(Intent.createChooser(song?.let {
+ MusicUtil.createShareSongFileIntent(
+ it,
+ requireContext()
+ )
+ }, null))
+ }
+ 1 -> {
+ startActivity(
+ Intent.createChooser(
+ Intent()
+ .setAction(Intent.ACTION_SEND)
+ .putExtra(Intent.EXTRA_TEXT, currentlyListening)
+ .setType("text/plain"),
+ null
+ )
+ )
+ }
+ 2 -> {
+ if (song != null) {
+ startActivity(
+ Intent(
+ requireContext(),
+ ShareInstagramStory::class.java
+ ).putExtra(
+ ShareInstagramStory.EXTRA_SONG,
+ song
+ )
)
- ) { _, index, _ ->
- when (index) {
- 0 -> {
- startActivity(Intent.createChooser(song?.let {
- MusicUtil.createShareSongFileIntent(
- it,
- context
- )
- }, null))
- }
- 1 -> {
- startActivity(
- Intent.createChooser(
- Intent()
- .setAction(Intent.ACTION_SEND)
- .putExtra(Intent.EXTRA_TEXT, currentlyListening)
- .setType("text/plain"),
- null
- )
- )
- }
- 2 -> {
- if (song != null) {
- startActivity(
- Intent(
- requireContext(),
- ShareInstagramStory::class.java
- ).putExtra(
- ShareInstagramStory.EXTRA_SONG,
- song
- )
- )
- }
- }
- }
}
}
+ }
}
companion object {
@@ -88,7 +96,7 @@ class SongShareDialog : DialogFragment() {
fun create(song: Song): SongShareDialog {
val dialog = SongShareDialog()
val args = Bundle()
- args.putParcelable("song", song)
+ args.putParcelable(EXTRA_SONG, song)
dialog.arguments = args
return dialog
}
diff --git a/app/src/main/java/code/name/monkey/retromusic/extensions/ActivityEx.kt b/app/src/main/java/code/name/monkey/retromusic/extensions/ActivityEx.kt
index e896bddb1..615a8acbb 100644
--- a/app/src/main/java/code/name/monkey/retromusic/extensions/ActivityEx.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/extensions/ActivityEx.kt
@@ -14,8 +14,14 @@
package code.name.monkey.retromusic.extensions
+import android.app.Activity
+import androidx.annotation.IdRes
import androidx.appcompat.app.AppCompatActivity
+import androidx.fragment.app.Fragment
+import androidx.fragment.app.FragmentActivity
+import androidx.fragment.app.FragmentTransaction
import code.name.monkey.appthemehelper.util.ToolbarContentTintHelper
+import code.name.monkey.retromusic.R
import com.google.android.material.appbar.MaterialToolbar
fun AppCompatActivity.applyToolbar(toolbar: MaterialToolbar) {
@@ -24,3 +30,47 @@ fun AppCompatActivity.applyToolbar(toolbar: MaterialToolbar) {
setSupportActionBar(toolbar)
}
+fun FragmentActivity?.addFragment(
+ @IdRes idRes: Int = R.id.container,
+ fragment: Fragment,
+ tag: String? = null,
+ addToBackStack: Boolean = false
+) {
+ val compatActivity = this as? AppCompatActivity ?: return
+ compatActivity.supportFragmentManager.beginTransaction()
+ .apply {
+ add(fragment, tag)
+ setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN)
+ if (addToBackStack) {
+ addToBackStack(null)
+ }
+ commitNow()
+ }
+}
+
+fun AppCompatActivity.replaceFragment(
+ @IdRes id: Int = R.id.container,
+ fragment: Fragment,
+ tag: String? = null,
+ addToBackStack: Boolean = false
+) {
+ val compatActivity = this ?: return
+ compatActivity.supportFragmentManager.beginTransaction()
+ .apply {
+ replace(id, fragment, tag)
+ if (addToBackStack) {
+ addToBackStack(null)
+ }
+ commit()
+ }
+}
+
+inline fun Activity.extra(key: String, default: T? = null) = lazy {
+ val value = intent?.extras?.get(key)
+ if (value is T) value else default
+}
+
+inline fun Activity.extraNotNull(key: String, default: T? = null) = lazy {
+ val value = intent?.extras?.get(key)
+ requireNotNull(if (value is T) value else default) { key }
+}
\ No newline at end of file
diff --git a/app/src/main/java/code/name/monkey/retromusic/extensions/ColorExt.kt b/app/src/main/java/code/name/monkey/retromusic/extensions/ColorExt.kt
index 45c28f78d..b5d379209 100644
--- a/app/src/main/java/code/name/monkey/retromusic/extensions/ColorExt.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/extensions/ColorExt.kt
@@ -18,6 +18,8 @@ import android.app.Dialog
import android.content.Context
import android.content.res.ColorStateList
import android.graphics.Color
+import android.widget.CheckBox
+import android.widget.SeekBar
import androidx.annotation.AttrRes
import androidx.appcompat.widget.Toolbar
import androidx.fragment.app.Fragment
@@ -65,3 +67,14 @@ fun Fragment.resolveColor(@AttrRes attr: Int, fallBackColor: Int = 0) =
fun Dialog.resolveColor(@AttrRes attr: Int, fallBackColor: Int = 0) =
ATHUtil.resolveColor(context, attr, fallBackColor)
+
+
+fun CheckBox.addAccentColor() {
+ buttonTintList = ColorStateList.valueOf(ThemeStore.accentColor(context))
+}
+
+fun SeekBar.addAccentColor() {
+ val colorState = ColorStateList.valueOf(ThemeStore.accentColor(context))
+ progressTintList = colorState
+ thumbTintList = colorState
+}
\ No newline at end of file
diff --git a/app/src/main/java/code/name/monkey/retromusic/extensions/DrawableExt.kt b/app/src/main/java/code/name/monkey/retromusic/extensions/DrawableExt.kt
index d25742aff..dc86fb949 100644
--- a/app/src/main/java/code/name/monkey/retromusic/extensions/DrawableExt.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/extensions/DrawableExt.kt
@@ -26,9 +26,12 @@ import androidx.annotation.DimenRes
import androidx.annotation.DrawableRes
import androidx.core.content.ContextCompat
import code.name.monkey.retromusic.R
-import code.name.monkey.retromusic.util.DensityUtil
-fun Context.scaledDrawableResources(@DrawableRes id: Int, @DimenRes width: Int, @DimenRes height: Int): Drawable {
+fun Context.scaledDrawableResources(
+ @DrawableRes id: Int,
+ @DimenRes width: Int,
+ @DimenRes height: Int
+): Drawable {
val w = resources.getDimension(width).toInt()
val h = resources.getDimension(height).toInt()
return scaledDrawable(id, w, h)
diff --git a/app/src/main/java/code/name/monkey/retromusic/extensions/FragmentExt.kt b/app/src/main/java/code/name/monkey/retromusic/extensions/FragmentExt.kt
new file mode 100644
index 000000000..6e724dc18
--- /dev/null
+++ b/app/src/main/java/code/name/monkey/retromusic/extensions/FragmentExt.kt
@@ -0,0 +1,39 @@
+package code.name.monkey.retromusic.extensions
+
+import android.content.Context
+import android.content.res.Configuration
+import android.os.PowerManager
+import androidx.annotation.IntegerRes
+import androidx.fragment.app.Fragment
+import code.name.monkey.retromusic.util.PreferenceUtilKT
+
+fun Fragment.getIntRes(@IntegerRes int: Int): Int {
+ return resources.getInteger(int)
+}
+
+fun Context.getIntRes(@IntegerRes int: Int): Int {
+ return resources.getInteger(int)
+}
+
+val Context.generalThemeValue
+ get() = PreferenceUtilKT.getGeneralThemeValue(isSystemDarkModeEnabled())
+
+
+fun Context.isSystemDarkModeEnabled(): Boolean {
+ val isBatterySaverEnabled =
+ (getSystemService(Context.POWER_SERVICE) as PowerManager?)?.isPowerSaveMode ?: false
+ val isDarkModeEnabled =
+ (resources.configuration.uiMode and Configuration.UI_MODE_NIGHT_MASK) == Configuration.UI_MODE_NIGHT_YES
+ return isBatterySaverEnabled or isDarkModeEnabled
+}
+
+
+inline fun Fragment.extra(key: String, default: T? = null) = lazy {
+ val value = arguments?.get(key)
+ if (value is T) value else default
+}
+
+inline fun Fragment.extraNotNull(key: String, default: T? = null) = lazy {
+ val value = arguments?.get(key)
+ requireNotNull(if (value is T) value else default) { key }
+}
\ No newline at end of file
diff --git a/app/src/main/java/code/name/monkey/retromusic/extensions/Preference.kt b/app/src/main/java/code/name/monkey/retromusic/extensions/Preference.kt
new file mode 100644
index 000000000..0fe53f4a1
--- /dev/null
+++ b/app/src/main/java/code/name/monkey/retromusic/extensions/Preference.kt
@@ -0,0 +1,7 @@
+package code.name.monkey.retromusic.extensions
+
+import android.content.SharedPreferences
+
+fun SharedPreferences.getStringOrDefault(key: String, default: String): String {
+ return getString(key, default) ?: default
+}
diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/LibraryViewModel.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/LibraryViewModel.kt
new file mode 100644
index 000000000..754182fab
--- /dev/null
+++ b/app/src/main/java/code/name/monkey/retromusic/fragments/LibraryViewModel.kt
@@ -0,0 +1,136 @@
+package code.name.monkey.retromusic.fragments
+
+import android.app.Application
+import androidx.lifecycle.AndroidViewModel
+import androidx.lifecycle.LiveData
+import androidx.lifecycle.MutableLiveData
+import androidx.lifecycle.viewModelScope
+import code.name.monkey.retromusic.Result.Error
+import code.name.monkey.retromusic.Result.Success
+import code.name.monkey.retromusic.fragments.ReloadType.*
+import code.name.monkey.retromusic.interfaces.MusicServiceEventListener
+import code.name.monkey.retromusic.model.*
+import code.name.monkey.retromusic.providers.RepositoryImpl
+import code.name.monkey.retromusic.providers.interfaces.Repository
+import kotlinx.coroutines.Deferred
+import kotlinx.coroutines.Dispatchers.IO
+import kotlinx.coroutines.async
+import kotlinx.coroutines.launch
+
+class LibraryViewModel(application: Application) :
+ AndroidViewModel(application), MusicServiceEventListener {
+
+ private val _repository: Repository = RepositoryImpl(application.applicationContext)
+ private val _albums = MutableLiveData>()
+ private val _songs = MutableLiveData>()
+ private val _artists = MutableLiveData>()
+ private val _playlist = MutableLiveData>()
+ private val _genre = MutableLiveData>()
+ private val _homeSections = MutableLiveData>()
+
+ fun homeSections(): LiveData> = _homeSections
+ fun allAlbums(): LiveData> = _albums
+ fun allSongs(): LiveData> = _songs
+ fun allArtists(): LiveData> = _artists
+ fun allPlaylisits(): LiveData> = _playlist
+ fun allGenres(): LiveData> = _genre
+
+ init {
+ viewModelScope.launch {
+ loadLibraryContent()
+ loadHomeSections()
+ }
+ }
+
+ private fun loadLibraryContent() = viewModelScope.launch {
+ _songs.value = loadSongs.await()
+ _albums.value = loadAlbums.await()
+ _artists.value = loadArtists.await()
+ _playlist.value = loadPlaylists.await()
+ _genre.value = loadGenres.await()
+ }
+
+ private fun loadHomeSections() = viewModelScope.launch {
+ val list = mutableListOf()
+ val result = listOf(
+ _repository.topArtists(),
+ _repository.topAlbums(),
+ _repository.recentArtists(),
+ _repository.recentAlbums(),
+ _repository.favoritePlaylist()
+ )
+ for (r in result) {
+ if (r is Success) {
+ list.add(r.data)
+ }
+ }
+ _homeSections.value = list
+ }
+
+ private val loadSongs: Deferred>
+ get() = viewModelScope.async(IO) {
+ when (val result = _repository.allSongs()) {
+ is Success -> result.data
+ is Error -> arrayListOf()
+ }
+ }
+
+ private val loadAlbums: Deferred>
+ get() = viewModelScope.async(IO) {
+ when (val result = _repository.allAlbums()) {
+ is Success -> result.data
+ is Error -> arrayListOf()
+ }
+ }
+ private val loadArtists: Deferred>
+ get() = viewModelScope.async(IO) {
+ when (val result = _repository.allArtists()) {
+ is Success -> result.data
+ is Error -> arrayListOf()
+ }
+ }
+
+ private val loadPlaylists: Deferred>
+ get() = viewModelScope.async(IO) {
+ when (val result = _repository.allPlaylists()) {
+ is Success -> result.data
+ is Error -> arrayListOf()
+ }
+ }
+
+ private val loadGenres: Deferred>
+ get() = viewModelScope.async(IO) {
+ when (val result = _repository.allGenres()) {
+ is Success -> result.data
+ is Error -> arrayListOf()
+ }
+ }
+
+ fun forceReload(reloadType: ReloadType) = viewModelScope.launch {
+ when (reloadType) {
+ Songs -> _songs.value = loadSongs.await()
+ Albums -> _albums.value = loadAlbums.await()
+ Artists -> _artists.value = loadArtists.await()
+ HomeSections -> _songs.value = loadSongs.await()
+ }
+ }
+
+ override fun onMediaStoreChanged() {
+ loadLibraryContent()
+ }
+
+ override fun onServiceConnected() {}
+ override fun onServiceDisconnected() {}
+ override fun onQueueChanged() {}
+ override fun onPlayingMetaChanged() {}
+ override fun onPlayStateChanged() {}
+ override fun onRepeatModeChanged() {}
+ override fun onShuffleModeChanged() {}
+}
+
+enum class ReloadType {
+ Songs,
+ Albums,
+ Artists,
+ HomeSections
+}
\ No newline at end of file
diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/MiniPlayerFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/MiniPlayerFragment.kt
index 337e257db..17c3c9f01 100644
--- a/app/src/main/java/code/name/monkey/retromusic/fragments/MiniPlayerFragment.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/fragments/MiniPlayerFragment.kt
@@ -11,15 +11,18 @@ import android.view.*
import android.view.animation.DecelerateInterpolator
import code.name.monkey.appthemehelper.ThemeStore
import code.name.monkey.retromusic.R
+import code.name.monkey.retromusic.extensions.show
import code.name.monkey.retromusic.extensions.textColorPrimary
import code.name.monkey.retromusic.extensions.textColorSecondary
import code.name.monkey.retromusic.fragments.base.AbsMusicServiceFragment
+import code.name.monkey.retromusic.glide.SongGlideRequest
import code.name.monkey.retromusic.helper.MusicPlayerRemote
import code.name.monkey.retromusic.helper.MusicProgressViewUpdateHelper
import code.name.monkey.retromusic.helper.PlayPauseButtonOnClickHandler
-import code.name.monkey.retromusic.util.PreferenceUtil
+import code.name.monkey.retromusic.util.PreferenceUtilKT
import code.name.monkey.retromusic.util.RetroUtil
import code.name.monkey.retromusic.util.ViewUtil
+import com.bumptech.glide.Glide
import kotlinx.android.synthetic.main.fragment_mini_player.*
import kotlin.math.abs
@@ -54,15 +57,16 @@ open class MiniPlayerFragment : AbsMusicServiceFragment(), MusicProgressViewUpda
setUpMiniPlayer()
if (RetroUtil.isTablet()) {
- actionNext.visibility = View.VISIBLE
- actionPrevious.visibility = View.VISIBLE
- actionNext?.visibility = View.VISIBLE
- actionPrevious?.visibility = View.VISIBLE
+ actionNext.show()
+ actionPrevious.show()
+ actionNext?.show()
+ actionPrevious?.show()
+
} else {
actionNext.visibility =
- if (PreferenceUtil.getInstance(requireContext()).isExtraControls) View.VISIBLE else View.GONE
+ if (PreferenceUtilKT.isExtraControls) View.VISIBLE else View.GONE
actionPrevious.visibility =
- if (PreferenceUtil.getInstance(requireContext()).isExtraControls) View.VISIBLE else View.GONE
+ if (PreferenceUtilKT.isExtraControls) View.VISIBLE else View.GONE
}
actionNext.setOnClickListener(this)
actionPrevious.setOnClickListener(this)
@@ -93,6 +97,19 @@ open class MiniPlayerFragment : AbsMusicServiceFragment(), MusicProgressViewUpda
miniPlayerTitle.isSelected = true
miniPlayerTitle.text = builder
+
+ if (RetroUtil.isTablet()) {
+ image?.let {
+ SongGlideRequest.Builder.from(
+ Glide.with(requireContext()),
+ MusicPlayerRemote.currentSong
+ ).checkIgnoreMediaStore(requireContext())
+ .ignoreMediaStore(PreferenceUtilKT.isAllowedToDownloadMetadata())
+ .asBitmap()
+ .build()
+ .into(it)
+ }
+ }
}
override fun onServiceConnected() {
diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/VolumeFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/VolumeFragment.kt
index 2043617e7..59bf24dda 100755
--- a/app/src/main/java/code/name/monkey/retromusic/fragments/VolumeFragment.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/fragments/VolumeFragment.kt
@@ -14,7 +14,7 @@ import code.name.monkey.appthemehelper.ThemeStore
import code.name.monkey.retromusic.R
import code.name.monkey.retromusic.extensions.applyColor
import code.name.monkey.retromusic.helper.MusicPlayerRemote
-import code.name.monkey.retromusic.util.PreferenceUtil
+import code.name.monkey.retromusic.util.PreferenceUtilKT
import code.name.monkey.retromusic.volume.AudioVolumeObserver
import code.name.monkey.retromusic.volume.OnAudioVolumeChangedListener
import kotlinx.android.synthetic.main.fragment_volume.*
@@ -113,11 +113,10 @@ class VolumeFragment : Fragment(), SeekBar.OnSeekBarChangeListener, OnAudioVolum
}
private fun setPauseWhenZeroVolume(pauseWhenZeroVolume: Boolean) {
- if (PreferenceUtil.getInstance(requireContext())
- .pauseOnZeroVolume()
- ) if (MusicPlayerRemote.isPlaying && pauseWhenZeroVolume) {
- MusicPlayerRemote.pauseSong()
- }
+ if (PreferenceUtilKT.isPauseOnZeroVolume)
+ if (MusicPlayerRemote.isPlaying && pauseWhenZeroVolume)
+ MusicPlayerRemote.pauseSong()
+
}
fun setTintableColor(color: Int) {
diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/albums/AlbumViewModel.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/albums/AlbumViewModel.kt
deleted file mode 100644
index 7c3260e6e..000000000
--- a/app/src/main/java/code/name/monkey/retromusic/fragments/albums/AlbumViewModel.kt
+++ /dev/null
@@ -1,27 +0,0 @@
-package code.name.monkey.retromusic.fragments.albums
-
-import android.app.Application
-import androidx.lifecycle.AndroidViewModel
-import androidx.lifecycle.MutableLiveData
-import androidx.lifecycle.viewModelScope
-import code.name.monkey.retromusic.Result
-import code.name.monkey.retromusic.model.Album
-import code.name.monkey.retromusic.providers.RepositoryImpl
-import kotlinx.coroutines.launch
-
-class AlbumViewModel(application: Application) : AndroidViewModel(application) {
- var albums = MutableLiveData>()
-
- init {
- getAlbums()
- }
-
- fun getAlbums() = viewModelScope.launch {
- val result = RepositoryImpl(getApplication()).allAlbums()
- if (result is Result.Success) {
- albums.value = result.data
- }else {
- albums.value = listOf()
- }
- }
-}
\ No newline at end of file
diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/albums/AlbumsFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/albums/AlbumsFragment.kt
index 0ba59b98f..86028dfd0 100644
--- a/app/src/main/java/code/name/monkey/retromusic/fragments/albums/AlbumsFragment.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/fragments/albums/AlbumsFragment.kt
@@ -3,29 +3,28 @@ package code.name.monkey.retromusic.fragments.albums
import android.os.Bundle
import android.view.View
import androidx.lifecycle.Observer
-import androidx.lifecycle.ViewModelProvider
import androidx.recyclerview.widget.GridLayoutManager
import code.name.monkey.retromusic.R
import code.name.monkey.retromusic.adapter.album.AlbumAdapter
+import code.name.monkey.retromusic.fragments.ReloadType
import code.name.monkey.retromusic.fragments.base.AbsLibraryPagerRecyclerViewCustomGridSizeFragment
import code.name.monkey.retromusic.interfaces.MainActivityFragmentCallbacks
-import code.name.monkey.retromusic.util.PreferenceUtil
+import code.name.monkey.retromusic.util.PreferenceUtilKT
class AlbumsFragment :
AbsLibraryPagerRecyclerViewCustomGridSizeFragment(),
MainActivityFragmentCallbacks {
- private lateinit var albumViewModel: AlbumViewModel
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
- albumViewModel = ViewModelProvider(this).get(AlbumViewModel::class.java)
- albumViewModel.albums.observe(viewLifecycleOwner, Observer { albums ->
- if (albums.isNotEmpty())
- adapter?.swapDataSet(albums)
- else
- adapter?.swapDataSet(listOf())
- })
+ mainActivity.libraryViewModel.allAlbums()
+ .observe(viewLifecycleOwner, Observer { albums ->
+ if (albums.isNotEmpty())
+ adapter?.swapDataSet(albums)
+ else
+ adapter?.swapDataSet(listOf())
+ })
}
override val emptyMessage: Int
@@ -51,45 +50,39 @@ class AlbumsFragment :
}
override fun loadSortOrder(): String {
- return PreferenceUtil.getInstance(requireContext()).albumSortOrder
+ return PreferenceUtilKT.albumSortOrder
}
override fun saveSortOrder(sortOrder: String) {
- PreferenceUtil.getInstance(requireContext()).albumSortOrder = sortOrder
+ PreferenceUtilKT.albumSortOrder = sortOrder
}
override fun loadGridSize(): Int {
- return PreferenceUtil.getInstance(requireContext()).getAlbumGridSize(requireContext())
+ return PreferenceUtilKT.albumGridSize
}
override fun saveGridSize(gridColumns: Int) {
- PreferenceUtil.getInstance(requireContext()).setAlbumGridSize(gridColumns)
+ PreferenceUtilKT.albumGridSize = gridColumns
}
override fun loadGridSizeLand(): Int {
- return PreferenceUtil.getInstance(requireContext()).getAlbumGridSizeLand(requireContext())
+ return PreferenceUtilKT.albumGridSizeLand
}
override fun saveGridSizeLand(gridColumns: Int) {
- PreferenceUtil.getInstance(requireContext()).setAlbumGridSizeLand(gridColumns)
- }
-
- override fun onMediaStoreChanged() {
- albumViewModel.getAlbums()
+ PreferenceUtilKT.albumGridSizeLand = gridColumns
}
override fun setSortOrder(sortOrder: String) {
- albumViewModel.getAlbums()
+ mainActivity.libraryViewModel.forceReload(ReloadType.Albums)
}
-
override fun loadLayoutRes(): Int {
- println("loadLayoutRes ${PreferenceUtil.getInstance(requireContext()).albumGridStyle}")
- return PreferenceUtil.getInstance(requireContext()).albumGridStyle
+ return PreferenceUtilKT.albumGridStyle
}
override fun saveLayoutRes(layoutRes: Int) {
- PreferenceUtil.getInstance(requireContext()).albumGridStyle = layoutRes
+ PreferenceUtilKT.albumGridStyle = layoutRes
}
override fun handleBackPress(): Boolean {
diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/artists/ArtistViewModel.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/artists/ArtistViewModel.kt
deleted file mode 100644
index 9a5d7e40c..000000000
--- a/app/src/main/java/code/name/monkey/retromusic/fragments/artists/ArtistViewModel.kt
+++ /dev/null
@@ -1,27 +0,0 @@
-package code.name.monkey.retromusic.fragments.artists
-
-import android.app.Application
-import androidx.lifecycle.AndroidViewModel
-import androidx.lifecycle.MutableLiveData
-import androidx.lifecycle.viewModelScope
-import code.name.monkey.retromusic.Result
-import code.name.monkey.retromusic.model.Artist
-import code.name.monkey.retromusic.providers.RepositoryImpl
-import kotlinx.coroutines.launch
-
-class ArtistViewModel(application: Application) : AndroidViewModel(application) {
- var artists = MutableLiveData>()
-
- init {
- loadArtists()
- }
-
- fun loadArtists() = viewModelScope.launch {
- val result = RepositoryImpl(getApplication()).allArtists()
- if (result is Result.Success) {
- artists.value = result.data
- } else {
- artists.value = listOf()
- }
- }
-}
\ No newline at end of file
diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/artists/ArtistsFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/artists/ArtistsFragment.kt
index 34385c5b5..4db951934 100644
--- a/app/src/main/java/code/name/monkey/retromusic/fragments/artists/ArtistsFragment.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/fragments/artists/ArtistsFragment.kt
@@ -3,31 +3,27 @@ package code.name.monkey.retromusic.fragments.artists
import android.os.Bundle
import android.view.View
import androidx.lifecycle.Observer
-import androidx.lifecycle.ViewModelProvider
import androidx.recyclerview.widget.GridLayoutManager
import code.name.monkey.retromusic.R
import code.name.monkey.retromusic.adapter.artist.ArtistAdapter
+import code.name.monkey.retromusic.fragments.ReloadType
import code.name.monkey.retromusic.fragments.base.AbsLibraryPagerRecyclerViewCustomGridSizeFragment
import code.name.monkey.retromusic.interfaces.MainActivityFragmentCallbacks
-import code.name.monkey.retromusic.util.PreferenceUtil
+import code.name.monkey.retromusic.util.PreferenceUtilKT
class ArtistsFragment :
AbsLibraryPagerRecyclerViewCustomGridSizeFragment(),
MainActivityFragmentCallbacks {
-
- lateinit var artistViewModel: ArtistViewModel
-
-
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
- artistViewModel = ViewModelProvider(this).get(ArtistViewModel::class.java)
- artistViewModel.artists.observe(viewLifecycleOwner, Observer { artists ->
- if (artists.isNotEmpty()) {
- adapter?.swapDataSet(artists)
- } else {
- adapter?.swapDataSet(listOf())
- }
- })
+ mainActivity.libraryViewModel.allArtists().observe(
+ viewLifecycleOwner, Observer { artists ->
+ if (artists.isNotEmpty()) {
+ adapter?.swapDataSet(artists)
+ } else {
+ adapter?.swapDataSet(listOf())
+ }
+ })
}
override fun handleBackPress(): Boolean {
@@ -37,12 +33,8 @@ class ArtistsFragment :
override val emptyMessage: Int
get() = R.string.no_artists
- override fun onMediaStoreChanged() {
- artistViewModel.loadArtists()
- }
-
override fun setSortOrder(sortOrder: String) {
- artistViewModel.loadArtists()
+ mainActivity.libraryViewModel.forceReload(ReloadType.Artists)
}
override fun createLayoutManager(): GridLayoutManager {
@@ -60,19 +52,19 @@ class ArtistsFragment :
}
override fun loadGridSize(): Int {
- return PreferenceUtil.getInstance(requireContext()).getArtistGridSize(requireActivity())
+ return PreferenceUtilKT.artistGridSize
}
override fun saveGridSize(gridColumns: Int) {
- PreferenceUtil.getInstance(requireContext()).setArtistGridSize(gridColumns)
+ PreferenceUtilKT.artistGridSize = gridColumns
}
override fun loadGridSizeLand(): Int {
- return PreferenceUtil.getInstance(requireContext()).getArtistGridSizeLand(requireActivity())
+ return PreferenceUtilKT.artistGridSizeLand
}
override fun saveGridSizeLand(gridColumns: Int) {
- PreferenceUtil.getInstance(requireContext()).setArtistGridSizeLand(gridColumns)
+ PreferenceUtilKT.artistGridSizeLand = gridColumns
}
override fun setGridSize(gridSize: Int) {
@@ -81,19 +73,19 @@ class ArtistsFragment :
}
override fun loadSortOrder(): String {
- return PreferenceUtil.getInstance(requireContext()).artistSortOrder
+ return PreferenceUtilKT.artistSortOrder
}
override fun saveSortOrder(sortOrder: String) {
- PreferenceUtil.getInstance(requireContext()).artistSortOrder = sortOrder
+ PreferenceUtilKT.artistSortOrder = sortOrder
}
override fun loadLayoutRes(): Int {
- return PreferenceUtil.getInstance(requireContext()).artistGridStyle
+ return PreferenceUtilKT.artistGridStyle
}
override fun saveLayoutRes(layoutRes: Int) {
- PreferenceUtil.getInstance(requireContext()).artistGridStyle = layoutRes
+ PreferenceUtilKT.artistGridStyle = layoutRes
}
companion object {
diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/base/AbsLibraryPagerRecyclerViewFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/base/AbsLibraryPagerRecyclerViewFragment.kt
index 2ef27d5f5..2060cef58 100644
--- a/app/src/main/java/code/name/monkey/retromusic/fragments/base/AbsLibraryPagerRecyclerViewFragment.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/fragments/base/AbsLibraryPagerRecyclerViewFragment.kt
@@ -6,8 +6,10 @@ import android.view.View
import android.view.ViewGroup
import androidx.annotation.NonNull
import androidx.annotation.StringRes
+import androidx.lifecycle.ViewModelProvider
import androidx.recyclerview.widget.RecyclerView
import code.name.monkey.retromusic.R
+import code.name.monkey.retromusic.fragments.LibraryViewModel
import code.name.monkey.retromusic.helper.MusicPlayerRemote
import code.name.monkey.retromusic.util.DensityUtil
import code.name.monkey.retromusic.util.ThemedFastScroller.create
@@ -20,6 +22,7 @@ import me.zhanghai.android.fastscroll.FastScrollerBuilder
abstract class AbsLibraryPagerRecyclerViewFragment, LM : RecyclerView.LayoutManager> :
AbsLibraryPagerFragment(), AppBarLayout.OnOffsetChangedListener {
+
protected var adapter: A? = null
protected var layoutManager: LM? = null
@@ -90,6 +93,8 @@ abstract class AbsLibraryPagerRecyclerViewFragment,
}
}
+
+
private fun initLayoutManager() {
layoutManager = createLayoutManager()
}
@@ -104,7 +109,7 @@ abstract class AbsLibraryPagerRecyclerViewFragment,
container.paddingLeft,
container.paddingTop,
container.paddingRight,
- mainActivity.totalAppBarScrollingRange + i
+ mainActivity.getTotalAppBarScrollingRange() + i
)
}
diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/base/AbsPlayerControlsFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/base/AbsPlayerControlsFragment.kt
index f9e8e5b62..48794563d 100644
--- a/app/src/main/java/code/name/monkey/retromusic/fragments/base/AbsPlayerControlsFragment.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/fragments/base/AbsPlayerControlsFragment.kt
@@ -7,7 +7,8 @@ import android.view.animation.DecelerateInterpolator
import code.name.monkey.retromusic.R
import code.name.monkey.retromusic.fragments.VolumeFragment
import code.name.monkey.retromusic.helper.MusicProgressViewUpdateHelper
-import code.name.monkey.retromusic.util.PreferenceUtil
+
+import code.name.monkey.retromusic.util.PreferenceUtilKT
import code.name.monkey.retromusic.util.color.MediaNotificationProcessor
/**
@@ -62,10 +63,12 @@ abstract class AbsPlayerControlsFragment : AbsMusicServiceFragment(),
protected var volumeFragment: VolumeFragment? = null
private fun hideVolumeIfAvailable() {
- if (PreferenceUtil.getInstance(requireContext()).volumeToggle) {
- childFragmentManager.beginTransaction().replace(R.id.volumeFragmentContainer, VolumeFragment()).commit()
+ if (PreferenceUtilKT.isVolumeVisibilityMode) {
+ childFragmentManager.beginTransaction()
+ .replace(R.id.volumeFragmentContainer, VolumeFragment()).commit()
childFragmentManager.executePendingTransactions()
- volumeFragment = childFragmentManager.findFragmentById(R.id.volumeFragmentContainer) as VolumeFragment?
+ volumeFragment =
+ childFragmentManager.findFragmentById(R.id.volumeFragmentContainer) as VolumeFragment?
}
}
diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/base/AbsPlayerFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/base/AbsPlayerFragment.kt
index 69350cff5..b6d6d45f7 100644
--- a/app/src/main/java/code/name/monkey/retromusic/fragments/base/AbsPlayerFragment.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/fragments/base/AbsPlayerFragment.kt
@@ -255,7 +255,7 @@ abstract class AbsPlayerFragment : AbsMusicServiceFragment(),
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
- if (PreferenceUtil.getInstance(requireContext()).fullScreenMode &&
+ if (PreferenceUtilKT.isFullScreenMode &&
view.findViewById(R.id.status_bar) != null
) {
view.findViewById(R.id.status_bar).visibility = View.GONE
diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/genres/GenreViewModel.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/genres/GenreViewModel.kt
deleted file mode 100644
index e737a1a18..000000000
--- a/app/src/main/java/code/name/monkey/retromusic/fragments/genres/GenreViewModel.kt
+++ /dev/null
@@ -1,27 +0,0 @@
-package code.name.monkey.retromusic.fragments.genres
-
-import android.app.Application
-import androidx.lifecycle.AndroidViewModel
-import androidx.lifecycle.MutableLiveData
-import androidx.lifecycle.viewModelScope
-import code.name.monkey.retromusic.Result.Success
-import code.name.monkey.retromusic.model.Genre
-import code.name.monkey.retromusic.providers.RepositoryImpl
-import kotlinx.coroutines.launch
-
-class GenreViewModel(application: Application) : AndroidViewModel(application) {
- var genres = MutableLiveData>()
-
- init {
- loadGenre()
- }
-
- fun loadGenre() = viewModelScope.launch {
- val result = RepositoryImpl(getApplication()).allGenres()
- if (result is Success) {
- genres.value = result.data
- }else {
- genres.value = listOf()
- }
- }
-}
\ No newline at end of file
diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/genres/GenresFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/genres/GenresFragment.kt
index 2541365e5..6c10551c4 100644
--- a/app/src/main/java/code/name/monkey/retromusic/fragments/genres/GenresFragment.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/fragments/genres/GenresFragment.kt
@@ -17,7 +17,6 @@ package code.name.monkey.retromusic.fragments.genres
import android.os.Bundle
import android.view.View
import androidx.lifecycle.Observer
-import androidx.lifecycle.ViewModelProvider
import androidx.recyclerview.widget.LinearLayoutManager
import code.name.monkey.retromusic.App
import code.name.monkey.retromusic.R
@@ -28,8 +27,6 @@ import code.name.monkey.retromusic.interfaces.MainActivityFragmentCallbacks
class GenresFragment : AbsLibraryPagerRecyclerViewFragment(),
MainActivityFragmentCallbacks {
- lateinit var genreViewModel: GenreViewModel
-
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
App.musicComponent.inject(this)
@@ -37,14 +34,14 @@ class GenresFragment : AbsLibraryPagerRecyclerViewFragment
- if (genres.isNotEmpty()) {
- adapter?.swapDataSet(genres)
- } else {
- adapter?.swapDataSet(listOf())
- }
- })
+ mainActivity.libraryViewModel.allGenres().observe(
+ viewLifecycleOwner, Observer { genres ->
+ if (genres.isNotEmpty()) {
+ adapter?.swapDataSet(genres)
+ } else {
+ adapter?.swapDataSet(listOf())
+ }
+ })
}
override fun handleBackPress(): Boolean {
@@ -63,10 +60,6 @@ class GenresFragment : AbsLibraryPagerRecyclerViewFragment
- homeAdapter.swapData(sections)
- })
+
+ mainActivity.libraryViewModel.homeSections()
+ .observe(viewLifecycleOwner, Observer { sections ->
+ homeAdapter.swapData(sections)
+ })
+
loadProfile()
}
diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/home/HomeViewModel.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/home/HomeViewModel.kt
deleted file mode 100644
index aa1929853..000000000
--- a/app/src/main/java/code/name/monkey/retromusic/fragments/home/HomeViewModel.kt
+++ /dev/null
@@ -1,36 +0,0 @@
-package code.name.monkey.retromusic.fragments.home
-
-import android.app.Application
-import androidx.lifecycle.AndroidViewModel
-import androidx.lifecycle.MutableLiveData
-import androidx.lifecycle.viewModelScope
-import code.name.monkey.retromusic.Result
-import code.name.monkey.retromusic.model.Home
-import code.name.monkey.retromusic.providers.RepositoryImpl
-import kotlinx.coroutines.launch
-
-class HomeViewModel(application: Application) : AndroidViewModel(application) {
- var sections = MutableLiveData>()
- var repository: RepositoryImpl = RepositoryImpl(getApplication())
-
- init {
- loadHome()
- }
-
- private fun loadHome() = viewModelScope.launch {
- val list = mutableListOf()
- val result = listOf(
- repository.topArtists(),
- repository.topAlbums(),
- repository.recentArtists(),
- repository.recentAlbums(),
- repository.favoritePlaylist()
- )
- for (r in result) {
- if (r is Result.Success) {
- list.add(r.data)
- }
- }
- sections.value = list
- }
-}
\ No newline at end of file
diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/mainactivity/FoldersFragment.java b/app/src/main/java/code/name/monkey/retromusic/fragments/mainactivity/FoldersFragment.java
index e87eb2aaa..679e5d91e 100644
--- a/app/src/main/java/code/name/monkey/retromusic/fragments/mainactivity/FoldersFragment.java
+++ b/app/src/main/java/code/name/monkey/retromusic/fragments/mainactivity/FoldersFragment.java
@@ -68,7 +68,7 @@ import code.name.monkey.retromusic.misc.WrappedAsyncTaskLoader;
import code.name.monkey.retromusic.model.Song;
import code.name.monkey.retromusic.util.DensityUtil;
import code.name.monkey.retromusic.util.FileUtil;
-import code.name.monkey.retromusic.util.PreferenceUtil;
+import code.name.monkey.retromusic.util.PreferenceUtilKT;
import code.name.monkey.retromusic.util.RetroColorUtil;
import code.name.monkey.retromusic.util.ThemedFastScroller;
import code.name.monkey.retromusic.views.BreadCrumbLayout;
@@ -134,7 +134,7 @@ public class FoldersFragment extends AbsMainActivityFragment implements
}
public static FoldersFragment newInstance(Context context) {
- return newInstance(PreferenceUtil.getInstance(context).getStartDirectory());
+ return newInstance(PreferenceUtilKT.INSTANCE.getStartDirectory());
}
private static File tryGetCanonicalFile(File file) {
@@ -238,7 +238,7 @@ public class FoldersFragment extends AbsMainActivityFragment implements
getFileComparator()));
return true;
case R.id.action_set_as_start_directory:
- PreferenceUtil.getInstance(requireContext()).setStartDirectory(file);
+ PreferenceUtilKT.INSTANCE.setStartDirectory(file);
Toast.makeText(getActivity(),
String.format(getString(R.string.new_start_directory), file.getPath()),
Toast.LENGTH_SHORT).show();
@@ -341,7 +341,7 @@ public class FoldersFragment extends AbsMainActivityFragment implements
switch (item.getItemId()) {
case R.id.action_go_to_start_directory:
setCrumb(new BreadCrumbLayout.Crumb(
- tryGetCanonicalFile(PreferenceUtil.getInstance(requireContext()).getStartDirectory())), true);
+ tryGetCanonicalFile(PreferenceUtilKT.INSTANCE.getStartDirectory())), true);
return true;
case R.id.action_scan:
BreadCrumbLayout.Crumb crumb = getActiveCrumb();
diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/player/PlayerAlbumCoverFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/player/PlayerAlbumCoverFragment.kt
index 9de1f3da9..e71dd96ae 100644
--- a/app/src/main/java/code/name/monkey/retromusic/fragments/player/PlayerAlbumCoverFragment.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/fragments/player/PlayerAlbumCoverFragment.kt
@@ -13,7 +13,8 @@ import code.name.monkey.retromusic.fragments.base.AbsMusicServiceFragment
import code.name.monkey.retromusic.helper.MusicPlayerRemote
import code.name.monkey.retromusic.transform.CarousalPagerTransformer
import code.name.monkey.retromusic.transform.ParallaxPagerTransformer
-import code.name.monkey.retromusic.util.PreferenceUtil
+
+import code.name.monkey.retromusic.util.PreferenceUtilKT
import code.name.monkey.retromusic.util.color.MediaNotificationProcessor
import kotlinx.android.synthetic.main.fragment_player_album_cover.*
@@ -45,14 +46,14 @@ class PlayerAlbumCoverFragment : AbsMusicServiceFragment(), ViewPager.OnPageChan
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
viewPager.addOnPageChangeListener(this)
- val nps = PreferenceUtil.getInstance(requireContext()).nowPlayingScreen
+ val nps = PreferenceUtilKT.nowPlayingScreen
val metrics = resources.displayMetrics
val ratio = metrics.heightPixels.toFloat() / metrics.widthPixels.toFloat()
if (nps == Full || nps == Classic || nps == Fit || nps == Gradient) {
viewPager.offscreenPageLimit = 2
- } else if (PreferenceUtil.getInstance(requireContext()).carouselEffect()) {
+ } else if (PreferenceUtilKT.isCarouselEffect) {
viewPager.clipToPadding = false
val padding =
if (ratio >= 1.777f) {
@@ -67,7 +68,7 @@ class PlayerAlbumCoverFragment : AbsMusicServiceFragment(), ViewPager.OnPageChan
viewPager.offscreenPageLimit = 2
viewPager.setPageTransformer(
true,
- PreferenceUtil.getInstance(requireContext()).albumCoverTransform
+ PreferenceUtilKT.albumCoverTransform
)
}
}
@@ -122,9 +123,6 @@ class PlayerAlbumCoverFragment : AbsMusicServiceFragment(), ViewPager.OnPageChan
callbacks = listener
}
- fun removeEffect() {
- viewPager.setPageTransformer(false, null)
- }
interface Callbacks {
diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/player/adaptive/AdaptivePlaybackControlsFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/player/adaptive/AdaptivePlaybackControlsFragment.kt
index 3046f80b5..1ed863328 100644
--- a/app/src/main/java/code/name/monkey/retromusic/fragments/player/adaptive/AdaptivePlaybackControlsFragment.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/fragments/player/adaptive/AdaptivePlaybackControlsFragment.kt
@@ -25,7 +25,8 @@ import code.name.monkey.retromusic.helper.PlayPauseButtonOnClickHandler
import code.name.monkey.retromusic.misc.SimpleOnSeekbarChangeListener
import code.name.monkey.retromusic.service.MusicService
import code.name.monkey.retromusic.util.MusicUtil
-import code.name.monkey.retromusic.util.PreferenceUtil
+
+import code.name.monkey.retromusic.util.PreferenceUtilKT
import code.name.monkey.retromusic.util.color.MediaNotificationProcessor
import kotlinx.android.synthetic.main.fragment_adaptive_player_playback_controls.*
@@ -66,7 +67,7 @@ class AdaptivePlaybackControlsFragment : AbsPlayerControlsFragment() {
}
private fun updateSong() {
- if (PreferenceUtil.getInstance(requireContext()).isSongInfo) {
+ if (PreferenceUtilKT.isSongInfo) {
songInfo?.text = getSongInfo(MusicPlayerRemote.currentSong)
songInfo.show()
} else {
@@ -130,7 +131,7 @@ class AdaptivePlaybackControlsFragment : AbsPlayerControlsFragment() {
updatePrevNextColor()
updatePlayPauseColor()
- val colorFinal = if (PreferenceUtil.getInstance(requireContext()).adaptiveColor) {
+ val colorFinal = if (PreferenceUtilKT.isAdaptiveColor) {
color.primaryTextColor
} else {
ThemeStore.accentColor(requireContext())
diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/player/blur/BlurPlaybackControlsFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/player/blur/BlurPlaybackControlsFragment.kt
index 977c2311a..facbe6744 100644
--- a/app/src/main/java/code/name/monkey/retromusic/fragments/player/blur/BlurPlaybackControlsFragment.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/fragments/player/blur/BlurPlaybackControlsFragment.kt
@@ -25,21 +25,9 @@ import code.name.monkey.retromusic.helper.PlayPauseButtonOnClickHandler
import code.name.monkey.retromusic.misc.SimpleOnSeekbarChangeListener
import code.name.monkey.retromusic.service.MusicService
import code.name.monkey.retromusic.util.MusicUtil
-import code.name.monkey.retromusic.util.PreferenceUtil
+import code.name.monkey.retromusic.util.PreferenceUtilKT
import code.name.monkey.retromusic.util.color.MediaNotificationProcessor
import kotlinx.android.synthetic.main.fragment_blur_player_playback_controls.*
-import kotlinx.android.synthetic.main.fragment_blur_player_playback_controls.nextButton
-import kotlinx.android.synthetic.main.fragment_blur_player_playback_controls.playPauseButton
-import kotlinx.android.synthetic.main.fragment_blur_player_playback_controls.previousButton
-import kotlinx.android.synthetic.main.fragment_blur_player_playback_controls.progressSlider
-import kotlinx.android.synthetic.main.fragment_blur_player_playback_controls.repeatButton
-import kotlinx.android.synthetic.main.fragment_blur_player_playback_controls.shuffleButton
-import kotlinx.android.synthetic.main.fragment_blur_player_playback_controls.songCurrentProgress
-import kotlinx.android.synthetic.main.fragment_blur_player_playback_controls.songInfo
-import kotlinx.android.synthetic.main.fragment_blur_player_playback_controls.songTotalTime
-import kotlinx.android.synthetic.main.fragment_blur_player_playback_controls.text
-import kotlinx.android.synthetic.main.fragment_blur_player_playback_controls.title
-import kotlinx.android.synthetic.main.fragment_player_playback_controls.*
class BlurPlaybackControlsFragment : AbsPlayerControlsFragment() {
@@ -81,7 +69,7 @@ class BlurPlaybackControlsFragment : AbsPlayerControlsFragment() {
title.text = song.title
text.text = String.format("%s • %s", song.artistName, song.albumName)
- if (PreferenceUtil.getInstance(requireContext()).isSongInfo) {
+ if (PreferenceUtilKT.isSongInfo) {
songInfo.show()
songInfo?.text = getSongInfo(song)
} else {
diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/player/blur/BlurPlayerFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/player/blur/BlurPlayerFragment.kt
index ecec1a3fb..5457004cf 100644
--- a/app/src/main/java/code/name/monkey/retromusic/fragments/player/blur/BlurPlayerFragment.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/fragments/player/blur/BlurPlayerFragment.kt
@@ -9,6 +9,7 @@ import android.view.ViewGroup
import androidx.appcompat.widget.Toolbar
import androidx.preference.PreferenceManager
import code.name.monkey.appthemehelper.util.ToolbarContentTintHelper
+import code.name.monkey.retromusic.NEW_BLUR_AMOUNT
import code.name.monkey.retromusic.R
import code.name.monkey.retromusic.fragments.base.AbsPlayerFragment
import code.name.monkey.retromusic.fragments.player.PlayerAlbumCoverFragment
@@ -17,7 +18,6 @@ import code.name.monkey.retromusic.glide.RetroMusicColoredTarget
import code.name.monkey.retromusic.glide.SongGlideRequest
import code.name.monkey.retromusic.helper.MusicPlayerRemote
import code.name.monkey.retromusic.model.Song
-import code.name.monkey.retromusic.util.PreferenceUtil
import code.name.monkey.retromusic.util.color.MediaNotificationProcessor
import com.bumptech.glide.Glide
import kotlinx.android.synthetic.main.fragment_blur.*
@@ -98,7 +98,7 @@ class BlurPlayerFragment : AbsPlayerFragment(), SharedPreferences.OnSharedPrefer
private fun updateBlur() {
val blurAmount = PreferenceManager.getDefaultSharedPreferences(requireContext())
- .getInt(PreferenceUtil.NEW_BLUR_AMOUNT, 25)
+ .getInt(NEW_BLUR_AMOUNT, 25)
colorBackground.clearColorFilter()
SongGlideRequest.Builder.from(Glide.with(requireActivity()), MusicPlayerRemote.currentSong)
.checkIgnoreMediaStore(requireContext())
@@ -141,7 +141,7 @@ class BlurPlayerFragment : AbsPlayerFragment(), SharedPreferences.OnSharedPrefer
}
override fun onSharedPreferenceChanged(sharedPreferences: SharedPreferences?, key: String?) {
- if (key == PreferenceUtil.NEW_BLUR_AMOUNT) {
+ if (key == NEW_BLUR_AMOUNT) {
updateBlur()
}
}
diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/player/card/CardPlaybackControlsFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/player/card/CardPlaybackControlsFragment.kt
index a531b2ec7..ef58fe015 100644
--- a/app/src/main/java/code/name/monkey/retromusic/fragments/player/card/CardPlaybackControlsFragment.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/fragments/player/card/CardPlaybackControlsFragment.kt
@@ -24,7 +24,8 @@ import code.name.monkey.retromusic.helper.PlayPauseButtonOnClickHandler
import code.name.monkey.retromusic.misc.SimpleOnSeekbarChangeListener
import code.name.monkey.retromusic.service.MusicService
import code.name.monkey.retromusic.util.MusicUtil
-import code.name.monkey.retromusic.util.PreferenceUtil
+
+import code.name.monkey.retromusic.util.PreferenceUtilKT
import code.name.monkey.retromusic.util.color.MediaNotificationProcessor
import kotlinx.android.synthetic.main.fragment_card_player_playback_controls.*
import kotlinx.android.synthetic.main.media_button.*
@@ -68,7 +69,7 @@ class CardPlaybackControlsFragment : AbsPlayerControlsFragment() {
title.text = song.title
text.text = song.artistName
- if (PreferenceUtil.getInstance(requireContext()).isSongInfo) {
+ if (PreferenceUtilKT.isSongInfo) {
songInfo.text = getSongInfo(MusicPlayerRemote.currentSong)
songInfo.show()
} else {
@@ -111,7 +112,7 @@ class CardPlaybackControlsFragment : AbsPlayerControlsFragment() {
}
override fun setColor(color: MediaNotificationProcessor) {
- if (ATHUtil.isWindowBackgroundDark(requireContext())
+ if (!ATHUtil.isWindowBackgroundDark(requireContext())
) {
lastPlaybackControlsColor = MaterialValueHelper.getSecondaryTextColor(activity, true)
lastDisabledPlaybackControlsColor =
@@ -128,7 +129,7 @@ class CardPlaybackControlsFragment : AbsPlayerControlsFragment() {
updatePlayPauseColor()
updateProgressTextColor()
- val colorFinal = if (PreferenceUtil.getInstance(requireContext()).adaptiveColor) {
+ val colorFinal = if (PreferenceUtilKT.isAdaptiveColor) {
color.primaryTextColor
} else {
ThemeStore.accentColor(requireContext()).ripAlpha()
diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/player/cardblur/CardBlurFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/player/cardblur/CardBlurFragment.kt
index 90b25e168..e1b1ab237 100644
--- a/app/src/main/java/code/name/monkey/retromusic/fragments/player/cardblur/CardBlurFragment.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/fragments/player/cardblur/CardBlurFragment.kt
@@ -9,6 +9,7 @@ import android.view.ViewGroup
import androidx.appcompat.widget.Toolbar
import androidx.preference.PreferenceManager
import code.name.monkey.appthemehelper.util.ToolbarContentTintHelper
+import code.name.monkey.retromusic.NEW_BLUR_AMOUNT
import code.name.monkey.retromusic.R
import code.name.monkey.retromusic.fragments.base.AbsPlayerFragment
import code.name.monkey.retromusic.fragments.player.PlayerAlbumCoverFragment
@@ -18,7 +19,7 @@ import code.name.monkey.retromusic.glide.RetroMusicColoredTarget
import code.name.monkey.retromusic.glide.SongGlideRequest
import code.name.monkey.retromusic.helper.MusicPlayerRemote
import code.name.monkey.retromusic.model.Song
-import code.name.monkey.retromusic.util.PreferenceUtil
+
import code.name.monkey.retromusic.util.color.MediaNotificationProcessor
import com.bumptech.glide.Glide
import kotlinx.android.synthetic.main.fragment_card_blur_player.*
@@ -88,12 +89,9 @@ class CardBlurFragment : AbsPlayerFragment(), SharedPreferences.OnSharedPreferen
private fun setUpSubFragments() {
playbackControlsFragment =
childFragmentManager.findFragmentById(R.id.playbackControlsFragment) as CardBlurPlaybackControlsFragment
- val playerAlbumCoverFragment =
- childFragmentManager.findFragmentById(R.id.playerAlbumCoverFragment) as PlayerAlbumCoverFragment?
- if (playerAlbumCoverFragment != null) {
- playerAlbumCoverFragment.setCallbacks(this)
- playerAlbumCoverFragment.removeEffect()
- }
+ (childFragmentManager.findFragmentById(R.id.playerAlbumCoverFragment) as PlayerAlbumCoverFragment?)?.setCallbacks(
+ this
+ )
}
private fun setUpPlayerToolbar() {
@@ -128,7 +126,7 @@ class CardBlurFragment : AbsPlayerFragment(), SharedPreferences.OnSharedPreferen
private fun updateBlur() {
val blurAmount = PreferenceManager.getDefaultSharedPreferences(requireContext())
- .getInt(PreferenceUtil.NEW_BLUR_AMOUNT, 25)
+ .getInt(NEW_BLUR_AMOUNT, 25)
colorBackground!!.clearColorFilter()
SongGlideRequest.Builder.from(Glide.with(requireActivity()), MusicPlayerRemote.currentSong)
.checkIgnoreMediaStore(requireContext())
@@ -160,7 +158,7 @@ class CardBlurFragment : AbsPlayerFragment(), SharedPreferences.OnSharedPreferen
}
override fun onSharedPreferenceChanged(sharedPreferences: SharedPreferences?, key: String?) {
- if (key == PreferenceUtil.NEW_BLUR_AMOUNT) {
+ if (key == NEW_BLUR_AMOUNT) {
updateBlur()
}
}
diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/player/cardblur/CardBlurPlaybackControlsFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/player/cardblur/CardBlurPlaybackControlsFragment.kt
index 8e15b1274..991e98a6c 100644
--- a/app/src/main/java/code/name/monkey/retromusic/fragments/player/cardblur/CardBlurPlaybackControlsFragment.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/fragments/player/cardblur/CardBlurPlaybackControlsFragment.kt
@@ -23,7 +23,8 @@ import code.name.monkey.retromusic.helper.PlayPauseButtonOnClickHandler
import code.name.monkey.retromusic.misc.SimpleOnSeekbarChangeListener
import code.name.monkey.retromusic.service.MusicService
import code.name.monkey.retromusic.util.MusicUtil
-import code.name.monkey.retromusic.util.PreferenceUtil
+import code.name.monkey.retromusic.util.PreferenceUtilKT
+
import code.name.monkey.retromusic.util.color.MediaNotificationProcessor
import kotlinx.android.synthetic.main.fragment_card_blur_player_playback_controls.*
import kotlinx.android.synthetic.main.media_button.*
@@ -113,7 +114,7 @@ class CardBlurPlaybackControlsFragment : AbsPlayerControlsFragment() {
}
private fun updateSong() {
- if (PreferenceUtil.getInstance(requireContext()).isSongInfo) {
+ if (PreferenceUtilKT.isSongInfo) {
songInfo.text = getSongInfo(MusicPlayerRemote.currentSong)
songInfo.show()
} else {
diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/player/circle/CirclePlayerFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/player/circle/CirclePlayerFragment.kt
index dde68dfe4..4c982d799 100644
--- a/app/src/main/java/code/name/monkey/retromusic/fragments/player/circle/CirclePlayerFragment.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/fragments/player/circle/CirclePlayerFragment.kt
@@ -44,7 +44,8 @@ import code.name.monkey.retromusic.helper.MusicProgressViewUpdateHelper.Callback
import code.name.monkey.retromusic.helper.PlayPauseButtonOnClickHandler
import code.name.monkey.retromusic.misc.SimpleOnSeekbarChangeListener
import code.name.monkey.retromusic.util.MusicUtil
-import code.name.monkey.retromusic.util.PreferenceUtil
+import code.name.monkey.retromusic.util.PreferenceUtilKT
+
import code.name.monkey.retromusic.util.ViewUtil
import code.name.monkey.retromusic.util.color.MediaNotificationProcessor
import code.name.monkey.retromusic.views.SeekArc
@@ -195,7 +196,7 @@ class CirclePlayerFragment : AbsPlayerFragment(), Callback, OnAudioVolumeChanged
title.text = song.title
text.text = song.artistName
- if (PreferenceUtil.getInstance(requireContext()).isSongInfo) {
+ if (PreferenceUtilKT.isSongInfo) {
songInfo.text = getSongInfo(song)
songInfo.show()
} else {
diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/player/classic/ClassicPlayerFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/player/classic/ClassicPlayerFragment.kt
index f309bf134..0e7936bb8 100644
--- a/app/src/main/java/code/name/monkey/retromusic/fragments/player/classic/ClassicPlayerFragment.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/fragments/player/classic/ClassicPlayerFragment.kt
@@ -36,7 +36,8 @@ import code.name.monkey.retromusic.misc.SimpleOnSeekbarChangeListener
import code.name.monkey.retromusic.model.Song
import code.name.monkey.retromusic.service.MusicService
import code.name.monkey.retromusic.util.MusicUtil
-import code.name.monkey.retromusic.util.PreferenceUtil
+
+import code.name.monkey.retromusic.util.PreferenceUtilKT
import code.name.monkey.retromusic.util.ViewUtil
import code.name.monkey.retromusic.util.color.MediaNotificationProcessor
import com.google.android.material.bottomsheet.BottomSheetBehavior
@@ -154,7 +155,7 @@ class ClassicPlayerFragment : AbsPlayerFragment(), View.OnLayoutChangeListener,
}
private fun hideVolumeIfAvailable() {
- if (PreferenceUtil.getInstance(requireContext()).volumeToggle) {
+ if (PreferenceUtilKT.isVolumeVisibilityMode) {
childFragmentManager.beginTransaction()
.replace(R.id.volumeFragmentContainer, VolumeFragment.newInstance())
.commit()
@@ -185,7 +186,7 @@ class ClassicPlayerFragment : AbsPlayerFragment(), View.OnLayoutChangeListener,
title.text = song.title
text.text = song.artistName
- if (PreferenceUtil.getInstance(requireContext()).isSongInfo) {
+ if (PreferenceUtilKT.isSongInfo) {
songInfo.text = getSongInfo(song)
songInfo.show()
} else {
diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/player/color/ColorPlaybackControlsFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/player/color/ColorPlaybackControlsFragment.kt
index 1b0ed49c7..42bd2dd69 100644
--- a/app/src/main/java/code/name/monkey/retromusic/fragments/player/color/ColorPlaybackControlsFragment.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/fragments/player/color/ColorPlaybackControlsFragment.kt
@@ -23,7 +23,8 @@ import code.name.monkey.retromusic.helper.PlayPauseButtonOnClickHandler
import code.name.monkey.retromusic.misc.SimpleOnSeekbarChangeListener
import code.name.monkey.retromusic.service.MusicService
import code.name.monkey.retromusic.util.MusicUtil
-import code.name.monkey.retromusic.util.PreferenceUtil
+import code.name.monkey.retromusic.util.PreferenceUtilKT
+
import code.name.monkey.retromusic.util.color.MediaNotificationProcessor
import kotlinx.android.synthetic.main.fragment_color_player_playback_controls.*
@@ -68,7 +69,7 @@ class ColorPlaybackControlsFragment : AbsPlayerControlsFragment() {
title.text = song.title
text.text = song.artistName
- if (PreferenceUtil.getInstance(requireContext()).isSongInfo) {
+ if (PreferenceUtilKT.isSongInfo) {
songInfo.text = getSongInfo(song)
songInfo.show()
} else {
diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/player/fit/FitFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/player/fit/FitFragment.kt
index 76b074201..9490461dd 100644
--- a/app/src/main/java/code/name/monkey/retromusic/fragments/player/fit/FitFragment.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/fragments/player/fit/FitFragment.kt
@@ -82,10 +82,9 @@ class FitFragment : AbsPlayerFragment() {
private fun setUpSubFragments() {
playbackControlsFragment =
childFragmentManager.findFragmentById(R.id.playbackControlsFragment) as FitPlaybackControlsFragment
- val playerAlbumCoverFragment: PlayerAlbumCoverFragment =
+ val playerAlbumCoverFragment =
childFragmentManager.findFragmentById(R.id.playerAlbumCoverFragment) as PlayerAlbumCoverFragment
playerAlbumCoverFragment.setCallbacks(this)
- playerAlbumCoverFragment.removeEffect()
}
private fun setUpPlayerToolbar() {
diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/player/fit/FitPlaybackControlsFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/player/fit/FitPlaybackControlsFragment.kt
index 25889891a..496d20ee6 100644
--- a/app/src/main/java/code/name/monkey/retromusic/fragments/player/fit/FitPlaybackControlsFragment.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/fragments/player/fit/FitPlaybackControlsFragment.kt
@@ -26,7 +26,8 @@ import code.name.monkey.retromusic.helper.PlayPauseButtonOnClickHandler
import code.name.monkey.retromusic.misc.SimpleOnSeekbarChangeListener
import code.name.monkey.retromusic.service.MusicService
import code.name.monkey.retromusic.util.MusicUtil
-import code.name.monkey.retromusic.util.PreferenceUtil
+
+import code.name.monkey.retromusic.util.PreferenceUtilKT
import code.name.monkey.retromusic.util.color.MediaNotificationProcessor
import kotlinx.android.synthetic.main.fragment_fit_playback_controls.*
@@ -71,7 +72,7 @@ class FitPlaybackControlsFragment : AbsPlayerControlsFragment() {
val song = MusicPlayerRemote.currentSong
title.text = song.title
text.text = song.artistName
- if (PreferenceUtil.getInstance(requireContext()).isSongInfo) {
+ if (PreferenceUtilKT.isSongInfo) {
songInfo.text = getSongInfo(song)
songInfo.show()
} else {
@@ -126,7 +127,7 @@ class FitPlaybackControlsFragment : AbsPlayerControlsFragment() {
MaterialValueHelper.getPrimaryDisabledTextColor(activity, false)
}
- val colorFinal = if (PreferenceUtil.getInstance(requireContext()).adaptiveColor) {
+ val colorFinal = if (PreferenceUtilKT.isAdaptiveColor) {
color.primaryTextColor
} else {
ThemeStore.accentColor(requireContext()).ripAlpha()
diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/player/flat/FlatPlaybackControlsFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/player/flat/FlatPlaybackControlsFragment.kt
index ac604dc4d..2b9f167e5 100644
--- a/app/src/main/java/code/name/monkey/retromusic/fragments/player/flat/FlatPlaybackControlsFragment.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/fragments/player/flat/FlatPlaybackControlsFragment.kt
@@ -27,7 +27,8 @@ import code.name.monkey.retromusic.helper.PlayPauseButtonOnClickHandler
import code.name.monkey.retromusic.misc.SimpleOnSeekbarChangeListener
import code.name.monkey.retromusic.service.MusicService
import code.name.monkey.retromusic.util.MusicUtil
-import code.name.monkey.retromusic.util.PreferenceUtil
+
+import code.name.monkey.retromusic.util.PreferenceUtilKT
import code.name.monkey.retromusic.util.color.MediaNotificationProcessor
import kotlinx.android.synthetic.main.fragment_flat_player_playback_controls.*
@@ -95,7 +96,7 @@ class FlatPlaybackControlsFragment : AbsPlayerControlsFragment(), Callback {
MaterialValueHelper.getPrimaryDisabledTextColor(requireContext(), false)
}
- val colorFinal = if (PreferenceUtil.getInstance(requireContext()).adaptiveColor) {
+ val colorFinal = if (PreferenceUtilKT.isAdaptiveColor) {
color.primaryTextColor
} else {
ThemeStore.accentColor(requireContext()).ripAlpha()
@@ -165,7 +166,7 @@ class FlatPlaybackControlsFragment : AbsPlayerControlsFragment(), Callback {
val song = MusicPlayerRemote.currentSong
title.text = song.title
text.text = song.artistName
- if (PreferenceUtil.getInstance(requireContext()).isSongInfo) {
+ if (PreferenceUtilKT.isSongInfo) {
songInfo.text = getSongInfo(song)
songInfo.show()
} else {
diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/player/flat/FlatPlayerFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/player/flat/FlatPlayerFragment.kt
index 77e651071..af75154ea 100644
--- a/app/src/main/java/code/name/monkey/retromusic/fragments/player/flat/FlatPlayerFragment.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/fragments/player/flat/FlatPlayerFragment.kt
@@ -17,7 +17,8 @@ import code.name.monkey.retromusic.fragments.base.AbsPlayerFragment
import code.name.monkey.retromusic.fragments.player.PlayerAlbumCoverFragment
import code.name.monkey.retromusic.helper.MusicPlayerRemote
import code.name.monkey.retromusic.model.Song
-import code.name.monkey.retromusic.util.PreferenceUtil
+
+import code.name.monkey.retromusic.util.PreferenceUtilKT
import code.name.monkey.retromusic.util.ViewUtil
import code.name.monkey.retromusic.util.color.MediaNotificationProcessor
import code.name.monkey.retromusic.views.DrawableGradient
@@ -98,7 +99,7 @@ class FlatPlayerFragment : AbsPlayerFragment() {
override fun toolbarIconColor(): Int {
val isLight = ColorUtil.isColorLight(paletteColor)
- return if (PreferenceUtil.getInstance(requireContext()).adaptiveColor)
+ return if (PreferenceUtilKT.isAdaptiveColor)
MaterialValueHelper.getPrimaryTextColor(requireContext(), isLight)
else
ATHUtil.resolveColor(requireContext(), R.attr.colorControlNormal)
@@ -109,12 +110,12 @@ class FlatPlayerFragment : AbsPlayerFragment() {
controlsFragment.setColor(color)
callbacks?.onPaletteColorChanged()
val isLight = ColorUtil.isColorLight(color.backgroundColor)
- val iconColor = if (PreferenceUtil.getInstance(requireContext()).adaptiveColor)
+ val iconColor = if (PreferenceUtilKT.isAdaptiveColor)
MaterialValueHelper.getPrimaryTextColor(requireContext(), isLight)
else
ATHUtil.resolveColor(requireContext(), R.attr.colorControlNormal)
ToolbarContentTintHelper.colorizeToolbar(playerToolbar, iconColor, requireActivity())
- if (PreferenceUtil.getInstance(requireContext()).adaptiveColor) {
+ if (PreferenceUtilKT.isAdaptiveColor) {
colorize(color.backgroundColor)
}
}
diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/player/full/FullPlaybackControlsFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/player/full/FullPlaybackControlsFragment.kt
index 3dd842520..417023d7a 100644
--- a/app/src/main/java/code/name/monkey/retromusic/fragments/player/full/FullPlaybackControlsFragment.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/fragments/player/full/FullPlaybackControlsFragment.kt
@@ -29,7 +29,8 @@ import code.name.monkey.retromusic.misc.SimpleOnSeekbarChangeListener
import code.name.monkey.retromusic.model.Song
import code.name.monkey.retromusic.service.MusicService
import code.name.monkey.retromusic.util.MusicUtil
-import code.name.monkey.retromusic.util.PreferenceUtil
+import code.name.monkey.retromusic.util.PreferenceUtilKT
+
import code.name.monkey.retromusic.util.color.MediaNotificationProcessor
import kotlinx.android.synthetic.main.fragment_full_player_controls.*
@@ -128,7 +129,7 @@ class FullPlaybackControlsFragment : AbsPlayerControlsFragment(),
title.text = song.title
text.text = song.artistName
updateIsFavorite()
- if (PreferenceUtil.getInstance(requireContext()).isSongInfo) {
+ if (PreferenceUtilKT.isSongInfo) {
songInfo.text = getSongInfo(song)
songInfo.show()
} else {
diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/player/gradient/GradientPlayerFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/player/gradient/GradientPlayerFragment.kt
index e32242c9f..161bbe871 100644
--- a/app/src/main/java/code/name/monkey/retromusic/fragments/player/gradient/GradientPlayerFragment.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/fragments/player/gradient/GradientPlayerFragment.kt
@@ -38,7 +38,8 @@ import code.name.monkey.retromusic.misc.SimpleOnSeekbarChangeListener
import code.name.monkey.retromusic.model.Song
import code.name.monkey.retromusic.service.MusicService
import code.name.monkey.retromusic.util.MusicUtil
-import code.name.monkey.retromusic.util.PreferenceUtil
+
+import code.name.monkey.retromusic.util.PreferenceUtilKT
import code.name.monkey.retromusic.util.ViewUtil
import code.name.monkey.retromusic.util.color.MediaNotificationProcessor
import com.google.android.material.bottomsheet.BottomSheetBehavior
@@ -207,7 +208,7 @@ class GradientPlayerFragment : AbsPlayerFragment(), MusicProgressViewUpdateHelpe
container.setBackgroundColor(ColorUtil.darkenColor(color.backgroundColor))
lastPlaybackControlsColor = color.primaryTextColor
- lastDisabledPlaybackControlsColor = color.secondaryTextColor
+ lastDisabledPlaybackControlsColor = ColorUtil.withAlpha(color.primaryTextColor, 0.3f)
title.setTextColor(lastPlaybackControlsColor)
text.setTextColor(lastDisabledPlaybackControlsColor)
@@ -243,7 +244,7 @@ class GradientPlayerFragment : AbsPlayerFragment(), MusicProgressViewUpdateHelpe
}
private fun hideVolumeIfAvailable() {
- if (PreferenceUtil.getInstance(requireContext()).volumeToggle) {
+ if (PreferenceUtilKT.isVolumeVisibilityMode) {
childFragmentManager.beginTransaction()
.replace(R.id.volumeFragmentContainer, VolumeFragment.newInstance())
.commit()
@@ -284,7 +285,7 @@ class GradientPlayerFragment : AbsPlayerFragment(), MusicProgressViewUpdateHelpe
title.text = song.title
text.text = song.artistName
updateLabel()
- if (PreferenceUtil.getInstance(requireContext()).isSongInfo) {
+ if (PreferenceUtilKT.isSongInfo) {
songInfo.text = getSongInfo(song)
songInfo.show()
} else {
@@ -304,9 +305,9 @@ class GradientPlayerFragment : AbsPlayerFragment(), MusicProgressViewUpdateHelpe
private fun updatePlayPauseDrawableState() {
if (MusicPlayerRemote.isPlaying) {
- playPauseButton.setImageResource(R.drawable.ic_pause_sharp_white_64dp)
+ playPauseButton.setImageResource(R.drawable.ic_pause_white_64dp)
} else {
- playPauseButton.setImageResource(R.drawable.ic_play_arrow_sharp_white_64dp)
+ playPauseButton.setImageResource(R.drawable.ic_play_arrow_white_64dp)
}
}
diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/player/lockscreen/LockScreenPlayerControlsFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/player/lockscreen/LockScreenPlayerControlsFragment.kt
index 0243cd58f..97a1590ad 100644
--- a/app/src/main/java/code/name/monkey/retromusic/fragments/player/lockscreen/LockScreenPlayerControlsFragment.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/fragments/player/lockscreen/LockScreenPlayerControlsFragment.kt
@@ -38,7 +38,8 @@ import code.name.monkey.retromusic.helper.PlayPauseButtonOnClickHandler
import code.name.monkey.retromusic.misc.SimpleOnSeekbarChangeListener
import code.name.monkey.retromusic.service.MusicService
import code.name.monkey.retromusic.util.MusicUtil
-import code.name.monkey.retromusic.util.PreferenceUtil
+
+import code.name.monkey.retromusic.util.PreferenceUtilKT
import code.name.monkey.retromusic.util.color.MediaNotificationProcessor
import kotlinx.android.synthetic.main.fragment_lock_screen_playback_controls.*
@@ -125,7 +126,7 @@ class LockScreenPlayerControlsFragment : AbsPlayerControlsFragment() {
MaterialValueHelper.getPrimaryDisabledTextColor(requireContext(), false)
}
- val colorFinal = if (PreferenceUtil.getInstance(requireContext()).adaptiveColor) {
+ val colorFinal = if (PreferenceUtilKT.isAdaptiveColor) {
color.primaryTextColor
} else {
textColorSecondary()
diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/player/material/MaterialControlsFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/player/material/MaterialControlsFragment.kt
index f786f24ef..e112cd981 100644
--- a/app/src/main/java/code/name/monkey/retromusic/fragments/player/material/MaterialControlsFragment.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/fragments/player/material/MaterialControlsFragment.kt
@@ -19,7 +19,8 @@ import code.name.monkey.retromusic.helper.PlayPauseButtonOnClickHandler
import code.name.monkey.retromusic.misc.SimpleOnSeekbarChangeListener
import code.name.monkey.retromusic.service.MusicService
import code.name.monkey.retromusic.util.MusicUtil
-import code.name.monkey.retromusic.util.PreferenceUtil
+
+import code.name.monkey.retromusic.util.PreferenceUtilKT
import code.name.monkey.retromusic.util.color.MediaNotificationProcessor
import kotlinx.android.synthetic.main.fragment_material_playback_controls.*
@@ -56,7 +57,7 @@ class MaterialControlsFragment : AbsPlayerControlsFragment() {
title.text = song.title
text.text = song.artistName
- if (PreferenceUtil.getInstance(requireContext()).isSongInfo) {
+ if (PreferenceUtilKT.isSongInfo) {
songInfo.text = getSongInfo(song)
songInfo.show()
} else {
@@ -113,7 +114,7 @@ class MaterialControlsFragment : AbsPlayerControlsFragment() {
updateRepeatState()
updateShuffleState()
- val colorFinal = if (PreferenceUtil.getInstance(requireContext()).adaptiveColor) {
+ val colorFinal = if (PreferenceUtilKT.isAdaptiveColor) {
lastPlaybackControlsColor
} else {
textColorSecondary()
diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/player/normal/PlayerFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/player/normal/PlayerFragment.kt
index 9dc0b2a85..6de1075a5 100644
--- a/app/src/main/java/code/name/monkey/retromusic/fragments/player/normal/PlayerFragment.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/fragments/player/normal/PlayerFragment.kt
@@ -15,7 +15,8 @@ import code.name.monkey.retromusic.fragments.base.AbsPlayerFragment
import code.name.monkey.retromusic.fragments.player.PlayerAlbumCoverFragment
import code.name.monkey.retromusic.helper.MusicPlayerRemote
import code.name.monkey.retromusic.model.Song
-import code.name.monkey.retromusic.util.PreferenceUtil
+
+import code.name.monkey.retromusic.util.PreferenceUtilKT
import code.name.monkey.retromusic.util.ViewUtil
import code.name.monkey.retromusic.util.color.MediaNotificationProcessor
import code.name.monkey.retromusic.views.DrawableGradient
@@ -85,7 +86,7 @@ class PlayerFragment : AbsPlayerFragment() {
requireActivity()
)
- if (PreferenceUtil.getInstance(requireContext()).adaptiveColor) {
+ if (PreferenceUtilKT.isAdaptiveColor) {
colorize(color.backgroundColor)
}
}
diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/player/normal/PlayerPlaybackControlsFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/player/normal/PlayerPlaybackControlsFragment.kt
index 51ca41282..865d9082a 100644
--- a/app/src/main/java/code/name/monkey/retromusic/fragments/player/normal/PlayerPlaybackControlsFragment.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/fragments/player/normal/PlayerPlaybackControlsFragment.kt
@@ -26,7 +26,8 @@ import code.name.monkey.retromusic.helper.PlayPauseButtonOnClickHandler
import code.name.monkey.retromusic.misc.SimpleOnSeekbarChangeListener
import code.name.monkey.retromusic.service.MusicService
import code.name.monkey.retromusic.util.MusicUtil
-import code.name.monkey.retromusic.util.PreferenceUtil
+
+import code.name.monkey.retromusic.util.PreferenceUtilKT
import code.name.monkey.retromusic.util.color.MediaNotificationProcessor
import kotlinx.android.synthetic.main.fragment_player_playback_controls.*
@@ -77,7 +78,7 @@ class PlayerPlaybackControlsFragment : AbsPlayerControlsFragment() {
MaterialValueHelper.getPrimaryDisabledTextColor(requireContext(), false)
}
- val colorFinal = if (PreferenceUtil.getInstance(requireContext()).adaptiveColor) {
+ val colorFinal = if (PreferenceUtilKT.isAdaptiveColor) {
color.primaryTextColor
} else {
ThemeStore.accentColor(requireContext())
@@ -104,7 +105,7 @@ class PlayerPlaybackControlsFragment : AbsPlayerControlsFragment() {
title.text = song.title
text.text = song.artistName
- if (PreferenceUtil.getInstance(requireContext()).isSongInfo) {
+ if (PreferenceUtilKT.isSongInfo) {
songInfo.text = getSongInfo(song)
songInfo.show()
} else {
diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/player/peak/PeakPlayerControlFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/player/peak/PeakPlayerControlFragment.kt
index 8f71d9082..60507b555 100644
--- a/app/src/main/java/code/name/monkey/retromusic/fragments/player/peak/PeakPlayerControlFragment.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/fragments/player/peak/PeakPlayerControlFragment.kt
@@ -36,7 +36,8 @@ import code.name.monkey.retromusic.helper.PlayPauseButtonOnClickHandler
import code.name.monkey.retromusic.misc.SimpleOnSeekbarChangeListener
import code.name.monkey.retromusic.service.MusicService
import code.name.monkey.retromusic.util.MusicUtil
-import code.name.monkey.retromusic.util.PreferenceUtil
+
+import code.name.monkey.retromusic.util.PreferenceUtilKT
import code.name.monkey.retromusic.util.color.MediaNotificationProcessor
import kotlinx.android.synthetic.main.fragment_peak_control_player.*
@@ -89,7 +90,7 @@ class PeakPlayerControlFragment : AbsPlayerControlsFragment() {
override fun setColor(color: MediaNotificationProcessor) {
val controlsColor =
- if (PreferenceUtil.getInstance(requireContext()).adaptiveColor) {
+ if (PreferenceUtilKT.isAdaptiveColor) {
color.primaryTextColor
} else {
ThemeStore.accentColor(requireContext())
diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/player/peak/PeakPlayerFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/player/peak/PeakPlayerFragment.kt
index 96ee263f3..f1298949a 100644
--- a/app/src/main/java/code/name/monkey/retromusic/fragments/player/peak/PeakPlayerFragment.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/fragments/player/peak/PeakPlayerFragment.kt
@@ -27,7 +27,8 @@ import code.name.monkey.retromusic.extensions.show
import code.name.monkey.retromusic.fragments.base.AbsPlayerFragment
import code.name.monkey.retromusic.fragments.player.PlayerAlbumCoverFragment
import code.name.monkey.retromusic.helper.MusicPlayerRemote
-import code.name.monkey.retromusic.util.PreferenceUtil
+import code.name.monkey.retromusic.util.PreferenceUtilKT
+
import code.name.monkey.retromusic.util.color.MediaNotificationProcessor
import kotlinx.android.synthetic.main.fragment_peak_player.*
@@ -113,7 +114,7 @@ class PeakPlayerFragment : AbsPlayerFragment() {
title.text = song.title
text.text = song.artistName
- if (PreferenceUtil.getInstance(requireContext()).isSongInfo) {
+ if (PreferenceUtilKT.isSongInfo) {
songInfo.text = getSongInfo(song)
songInfo.show()
} else {
diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/player/plain/PlainPlaybackControlsFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/player/plain/PlainPlaybackControlsFragment.kt
index bd9b7bec8..ef4194cd4 100644
--- a/app/src/main/java/code/name/monkey/retromusic/fragments/player/plain/PlainPlaybackControlsFragment.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/fragments/player/plain/PlainPlaybackControlsFragment.kt
@@ -26,7 +26,8 @@ import code.name.monkey.retromusic.helper.PlayPauseButtonOnClickHandler
import code.name.monkey.retromusic.misc.SimpleOnSeekbarChangeListener
import code.name.monkey.retromusic.service.MusicService
import code.name.monkey.retromusic.util.MusicUtil
-import code.name.monkey.retromusic.util.PreferenceUtil
+
+import code.name.monkey.retromusic.util.PreferenceUtilKT
import code.name.monkey.retromusic.util.color.MediaNotificationProcessor
import kotlinx.android.synthetic.main.fragment_adaptive_player_playback_controls.*
import kotlinx.android.synthetic.main.fragment_plain_controls_fragment.nextButton
@@ -73,7 +74,7 @@ class PlainPlaybackControlsFragment : AbsPlayerControlsFragment() {
}
private fun updateSong() {
- if (PreferenceUtil.getInstance(requireContext()).isSongInfo) {
+ if (PreferenceUtilKT.isSongInfo) {
songInfo.text = getSongInfo(MusicPlayerRemote.currentSong)
songInfo.show()
} else {
@@ -156,7 +157,7 @@ class PlainPlaybackControlsFragment : AbsPlayerControlsFragment() {
MaterialValueHelper.getPrimaryDisabledTextColor(requireContext(), false)
}
- val colorFinal = if (PreferenceUtil.getInstance(requireContext()).adaptiveColor) {
+ val colorFinal = if (PreferenceUtilKT.isAdaptiveColor) {
color.primaryTextColor
} else {
ThemeStore.accentColor(requireContext())
diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/player/simple/SimplePlaybackControlsFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/player/simple/SimplePlaybackControlsFragment.kt
index df082ae99..03856f0fe 100644
--- a/app/src/main/java/code/name/monkey/retromusic/fragments/player/simple/SimplePlaybackControlsFragment.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/fragments/player/simple/SimplePlaybackControlsFragment.kt
@@ -20,7 +20,8 @@ import code.name.monkey.retromusic.helper.MusicProgressViewUpdateHelper
import code.name.monkey.retromusic.helper.PlayPauseButtonOnClickHandler
import code.name.monkey.retromusic.service.MusicService
import code.name.monkey.retromusic.util.MusicUtil
-import code.name.monkey.retromusic.util.PreferenceUtil
+
+import code.name.monkey.retromusic.util.PreferenceUtilKT
import code.name.monkey.retromusic.util.color.MediaNotificationProcessor
import kotlinx.android.synthetic.main.fragment_simple_controls_fragment.*
@@ -155,7 +156,7 @@ class SimplePlaybackControlsFragment : AbsPlayerControlsFragment() {
title.text = song.title
text.text = song.artistName
- if (PreferenceUtil.getInstance(requireContext()).isSongInfo) {
+ if (PreferenceUtilKT.isSongInfo) {
songInfo.text = getSongInfo(song)
songInfo.show()
} else {
@@ -212,7 +213,7 @@ class SimplePlaybackControlsFragment : AbsPlayerControlsFragment() {
MaterialValueHelper.getPrimaryDisabledTextColor(requireContext(), false)
}
- val colorFinal = if (PreferenceUtil.getInstance(requireContext()).adaptiveColor) {
+ val colorFinal = if (PreferenceUtilKT.isAdaptiveColor) {
color.primaryTextColor
} else {
ThemeStore.accentColor(requireContext())
diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/player/tiny/TinyPlayerFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/player/tiny/TinyPlayerFragment.kt
index bdd7ddf68..1c992a319 100644
--- a/app/src/main/java/code/name/monkey/retromusic/fragments/player/tiny/TinyPlayerFragment.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/fragments/player/tiny/TinyPlayerFragment.kt
@@ -21,7 +21,8 @@ import code.name.monkey.retromusic.helper.MusicProgressViewUpdateHelper
import code.name.monkey.retromusic.helper.PlayPauseButtonOnClickHandler
import code.name.monkey.retromusic.model.Song
import code.name.monkey.retromusic.util.MusicUtil
-import code.name.monkey.retromusic.util.PreferenceUtil
+import code.name.monkey.retromusic.util.PreferenceUtilKT
+
import code.name.monkey.retromusic.util.ViewUtil
import code.name.monkey.retromusic.util.color.MediaNotificationProcessor
import kotlinx.android.synthetic.main.fragment_tiny_player.*
@@ -102,7 +103,7 @@ class TinyPlayerFragment : AbsPlayerFragment(), MusicProgressViewUpdateHelper.Ca
title.text = song.title
text.text = String.format("%s \nby - %s", song.albumName, song.artistName)
- if (PreferenceUtil.getInstance(requireContext()).isSongInfo) {
+ if (PreferenceUtilKT.isSongInfo) {
songInfo.text = getSongInfo(song)
songInfo.show()
} else {
diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/playlists/PlaylistViewModel.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/playlists/PlaylistViewModel.kt
deleted file mode 100644
index 71d8df24c..000000000
--- a/app/src/main/java/code/name/monkey/retromusic/fragments/playlists/PlaylistViewModel.kt
+++ /dev/null
@@ -1,27 +0,0 @@
-package code.name.monkey.retromusic.fragments.playlists
-
-import android.app.Application
-import androidx.lifecycle.AndroidViewModel
-import androidx.lifecycle.MutableLiveData
-import androidx.lifecycle.viewModelScope
-import code.name.monkey.retromusic.Result
-import code.name.monkey.retromusic.model.Playlist
-import code.name.monkey.retromusic.providers.RepositoryImpl
-import kotlinx.coroutines.launch
-
-class PlaylistViewModel(application: Application) : AndroidViewModel(application) {
- var playlists = MutableLiveData>()
-
- init {
- loadPlaylist()
- }
-
- fun loadPlaylist() = viewModelScope.launch {
- val result = RepositoryImpl(getApplication()).allPlaylists()
- if (result is Result.Success) {
- playlists.value = result.data
- } else {
- playlists.value = listOf()
- }
- }
-}
\ No newline at end of file
diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/playlists/PlaylistsFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/playlists/PlaylistsFragment.kt
index 98443c71a..962e3200d 100644
--- a/app/src/main/java/code/name/monkey/retromusic/fragments/playlists/PlaylistsFragment.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/fragments/playlists/PlaylistsFragment.kt
@@ -5,7 +5,6 @@ import android.view.Menu
import android.view.MenuInflater
import android.view.View
import androidx.lifecycle.Observer
-import androidx.lifecycle.ViewModelProvider
import androidx.recyclerview.widget.GridLayoutManager
import code.name.monkey.retromusic.R
import code.name.monkey.retromusic.adapter.playlist.PlaylistAdapter
@@ -16,18 +15,17 @@ class PlaylistsFragment :
AbsLibraryPagerRecyclerViewFragment(),
MainActivityFragmentCallbacks {
- lateinit var playlistViewModel: PlaylistViewModel
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
- playlistViewModel = ViewModelProvider(this).get(PlaylistViewModel::class.java)
- playlistViewModel.playlists.observe(viewLifecycleOwner, Observer { playlists ->
- if (playlists.isNotEmpty()) {
- adapter?.swapDataSet(playlists)
- } else {
- adapter?.swapDataSet(listOf())
- }
- })
+ mainActivity.libraryViewModel.allPlaylisits()
+ .observe(viewLifecycleOwner, Observer { playlists ->
+ if (playlists.isNotEmpty()) {
+ adapter?.swapDataSet(playlists)
+ } else {
+ adapter?.swapDataSet(listOf())
+ }
+ })
}
override fun handleBackPress(): Boolean {
@@ -50,11 +48,6 @@ class PlaylistsFragment :
)
}
- override fun onMediaStoreChanged() {
- super.onMediaStoreChanged()
- playlistViewModel.loadPlaylist()
- }
-
override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) {
super.onCreateOptionsMenu(menu, inflater)
menu.apply {
diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/settings/AbsSettingsFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/settings/AbsSettingsFragment.kt
index 225f936f4..4c323310a 100644
--- a/app/src/main/java/code/name/monkey/retromusic/fragments/settings/AbsSettingsFragment.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/fragments/settings/AbsSettingsFragment.kt
@@ -19,11 +19,10 @@ import android.graphics.drawable.ColorDrawable
import android.os.Bundle
import android.view.View
import android.widget.Toast
-import androidx.fragment.app.DialogFragment
import androidx.preference.ListPreference
import androidx.preference.Preference
+import androidx.preference.PreferenceFragmentCompat
import androidx.preference.PreferenceManager
-import code.name.monkey.appthemehelper.common.prefs.supportv7.ATEPreferenceFragmentCompat
import code.name.monkey.appthemehelper.util.ATHUtil
import code.name.monkey.retromusic.R
import code.name.monkey.retromusic.preferences.*
@@ -33,7 +32,7 @@ import code.name.monkey.retromusic.util.NavigationUtil
* @author Hemanth S (h4h13).
*/
-abstract class AbsSettingsFragment : ATEPreferenceFragmentCompat() {
+abstract class AbsSettingsFragment : PreferenceFragmentCompat() {
internal fun showProToastAndNavigate(message: String) {
Toast.makeText(requireContext(), "$message is Pro version feature.", Toast.LENGTH_SHORT)
@@ -73,16 +72,25 @@ abstract class AbsSettingsFragment : ATEPreferenceFragmentCompat() {
invalidateSettings()
}
- override fun onCreatePreferenceDialog(preference: Preference): DialogFragment? {
- return when (preference) {
- is LibraryPreference -> LibraryPreferenceDialog.newInstance(preference.key)
- is NowPlayingScreenPreference -> NowPlayingScreenPreferenceDialog.newInstance(preference.key)
- is AlbumCoverStylePreference -> AlbumCoverStylePreferenceDialog.newInstance(preference.key)
- is MaterialListPreference -> {
- MaterialListPreferenceDialog.newInstance(preference)
+ override fun onDisplayPreferenceDialog(preference: Preference?) {
+ when (preference) {
+ is LibraryPreference -> {
+ val fragment = LibraryPreferenceDialog.newInstance()
+ fragment.show(childFragmentManager, preference.key)
}
- is BlacklistPreference -> BlacklistPreferenceDialog.newInstance()
- else -> super.onCreatePreferenceDialog(preference)
+ is NowPlayingScreenPreference -> {
+ val fragment = NowPlayingScreenPreferenceDialog.newInstance()
+ fragment.show(childFragmentManager, preference.key)
+ }
+ is AlbumCoverStylePreference -> {
+ val fragment = AlbumCoverStylePreferenceDialog.newInstance()
+ fragment.show(childFragmentManager, preference.key)
+ }
+ is BlacklistPreference -> {
+ val fragment = BlacklistPreferenceDialog.newInstance()
+ fragment.show(childFragmentManager, preference.key)
+ }
+ else -> super.onDisplayPreferenceDialog(preference)
}
}
}
diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/settings/AudioSettings.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/settings/AudioSettings.kt
index 43a4245de..be06d30da 100644
--- a/app/src/main/java/code/name/monkey/retromusic/fragments/settings/AudioSettings.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/fragments/settings/AudioSettings.kt
@@ -20,7 +20,7 @@ import android.os.Bundle
import androidx.preference.Preference
import code.name.monkey.retromusic.R
import code.name.monkey.retromusic.util.NavigationUtil
-import code.name.monkey.retromusic.util.PreferenceUtil
+
/**
* @author Hemanth S (h4h13).
@@ -29,7 +29,7 @@ import code.name.monkey.retromusic.util.PreferenceUtil
class AudioSettings : AbsSettingsFragment() {
override fun invalidateSettings() {
val findPreference: Preference = findPreference("equalizer")!!
- if (!hasEqualizer() && PreferenceUtil.getInstance(requireContext()).selectedEqualizer != "retro") {
+ if (!hasEqualizer()) {
findPreference.isEnabled = false
findPreference.summary = resources.getString(R.string.no_equalizer)
} else {
diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/settings/NotificationSettingsFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/settings/NotificationSettingsFragment.kt
index 63458bbc5..e7f99cc33 100644
--- a/app/src/main/java/code/name/monkey/retromusic/fragments/settings/NotificationSettingsFragment.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/fragments/settings/NotificationSettingsFragment.kt
@@ -20,8 +20,9 @@ import android.os.Build.VERSION_CODES
import android.os.Bundle
import androidx.preference.Preference
import androidx.preference.TwoStatePreference
+import code.name.monkey.retromusic.CLASSIC_NOTIFICATION
import code.name.monkey.retromusic.R
-import code.name.monkey.retromusic.util.PreferenceUtil
+import code.name.monkey.retromusic.util.PreferenceUtilKT
/**
@@ -31,7 +32,7 @@ import code.name.monkey.retromusic.util.PreferenceUtil
class NotificationSettingsFragment : AbsSettingsFragment(),
SharedPreferences.OnSharedPreferenceChangeListener {
override fun onSharedPreferenceChanged(sharedPreferences: SharedPreferences?, key: String?) {
- if (key == PreferenceUtil.CLASSIC_NOTIFICATION) {
+ if (key == CLASSIC_NOTIFICATION) {
if (VERSION.SDK_INT >= VERSION_CODES.O) {
findPreference("colored_notification")?.isEnabled =
sharedPreferences?.getBoolean(key, false)!!
@@ -46,11 +47,10 @@ class NotificationSettingsFragment : AbsSettingsFragment(),
classicNotification?.isVisible = false
} else {
classicNotification?.apply {
- isChecked = PreferenceUtil.getInstance(requireContext()).classicNotification()
+ isChecked = PreferenceUtilKT.isClassicNotification
setOnPreferenceChangeListener { _, newValue ->
// Save preference
- PreferenceUtil.getInstance(requireContext())
- .setClassicNotification(newValue as Boolean)
+ PreferenceUtilKT.isClassicNotification = newValue as Boolean
invalidateSettings()
true
}
@@ -59,14 +59,12 @@ class NotificationSettingsFragment : AbsSettingsFragment(),
val coloredNotification: TwoStatePreference? = findPreference("colored_notification")
if (VERSION.SDK_INT >= VERSION_CODES.O) {
- coloredNotification?.isEnabled =
- PreferenceUtil.getInstance(requireContext()).classicNotification()
+ coloredNotification?.isEnabled = PreferenceUtilKT.isClassicNotification
} else {
coloredNotification?.apply {
- isChecked = PreferenceUtil.getInstance(requireContext()).coloredNotification()
+ isChecked = PreferenceUtilKT.isColoredNotification
setOnPreferenceChangeListener { _, newValue ->
- PreferenceUtil.getInstance(requireContext())
- .setColoredNotification(newValue as Boolean)
+ PreferenceUtilKT.isColoredNotification = newValue as Boolean
true
}
}
@@ -75,13 +73,12 @@ class NotificationSettingsFragment : AbsSettingsFragment(),
override fun onResume() {
super.onResume()
- PreferenceUtil.getInstance(requireContext()).registerOnSharedPreferenceChangedListener(this)
+ PreferenceUtilKT.registerOnSharedPreferenceChangedListener(this)
}
override fun onDestroyView() {
super.onDestroyView()
- PreferenceUtil.getInstance(requireContext())
- .unregisterOnSharedPreferenceChangedListener(this)
+ PreferenceUtilKT.unregisterOnSharedPreferenceChangedListener(this)
}
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/settings/NowPlayingSettingsFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/settings/NowPlayingSettingsFragment.kt
index e1fedc947..cc032d19e 100644
--- a/app/src/main/java/code/name/monkey/retromusic/fragments/settings/NowPlayingSettingsFragment.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/fragments/settings/NowPlayingSettingsFragment.kt
@@ -19,9 +19,8 @@ import android.os.Bundle
import android.view.View
import androidx.preference.Preference
import androidx.preference.TwoStatePreference
-import code.name.monkey.retromusic.App
-import code.name.monkey.retromusic.R
-import code.name.monkey.retromusic.util.PreferenceUtil.*
+import code.name.monkey.retromusic.*
+import code.name.monkey.retromusic.util.PreferenceUtilKT
/**
* @author Hemanth S (h4h13).
@@ -50,24 +49,24 @@ class NowPlayingSettingsFragment : AbsSettingsFragment(),
private fun updateAlbumCoverStyleSummary() {
val preference: Preference = findPreference(ALBUM_COVER_STYLE)!!
- preference.setSummary(getInstance(requireContext()).albumCoverStyle.titleRes)
+ preference.setSummary(PreferenceUtilKT.albumCoverStyle.titleRes)
}
private fun updateNowPlayingScreenSummary() {
val preference: Preference = findPreference(NOW_PLAYING_SCREEN_ID)!!
- preference.setSummary(getInstance(requireContext()).nowPlayingScreen.titleRes)
+ preference.setSummary(PreferenceUtilKT.nowPlayingScreen.titleRes)
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
- getInstance(requireContext()).registerOnSharedPreferenceChangedListener(this)
+ PreferenceUtilKT.registerOnSharedPreferenceChangedListener(this)
val preference: Preference = findPreference("album_cover_transform")!!
setSummary(preference)
}
override fun onDestroyView() {
super.onDestroyView()
- getInstance(requireContext()).unregisterOnSharedPreferenceChangedListener(this)
+ PreferenceUtilKT.unregisterOnSharedPreferenceChangedListener(this)
}
override fun onSharedPreferenceChanged(sharedPreferences: SharedPreferences, key: String) {
diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/settings/PersonalizeSettingsFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/settings/PersonalizeSettingsFragment.kt
index 6877c7140..bac4ba930 100644
--- a/app/src/main/java/code/name/monkey/retromusic/fragments/settings/PersonalizeSettingsFragment.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/fragments/settings/PersonalizeSettingsFragment.kt
@@ -19,8 +19,10 @@ import android.os.Bundle
import android.view.View
import androidx.preference.Preference
import androidx.preference.TwoStatePreference
+import code.name.monkey.retromusic.CAROUSEL_EFFECT
import code.name.monkey.retromusic.R
-import code.name.monkey.retromusic.util.PreferenceUtil
+
+import code.name.monkey.retromusic.util.PreferenceUtilKT
class PersonalizeSettingsFragment : AbsSettingsFragment(),
SharedPreferences.OnSharedPreferenceChangeListener {
@@ -40,7 +42,7 @@ class PersonalizeSettingsFragment : AbsSettingsFragment(),
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
- PreferenceUtil.getInstance(requireContext()).registerOnSharedPreferenceChangedListener(this)
+ PreferenceUtilKT.registerOnSharedPreferenceChangedListener(this)
var preference: Preference? = findPreference("home_artist_grid_style")
setSummary(preference!!)
@@ -50,13 +52,12 @@ class PersonalizeSettingsFragment : AbsSettingsFragment(),
override fun onDestroyView() {
super.onDestroyView()
- PreferenceUtil.getInstance(requireContext())
- .unregisterOnSharedPreferenceChangedListener(this)
+ PreferenceUtilKT.unregisterOnSharedPreferenceChangedListener(this)
}
override fun onSharedPreferenceChanged(sharedPreferences: SharedPreferences, key: String) {
when (key) {
- PreferenceUtil.CAROUSEL_EFFECT -> invalidateSettings()
+ CAROUSEL_EFFECT -> invalidateSettings()
}
}
}
diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/settings/ThemeSettingsFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/settings/ThemeSettingsFragment.kt
index 679287eae..7471850cc 100644
--- a/app/src/main/java/code/name/monkey/retromusic/fragments/settings/ThemeSettingsFragment.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/fragments/settings/ThemeSettingsFragment.kt
@@ -26,9 +26,10 @@ import code.name.monkey.appthemehelper.common.prefs.supportv7.ATESwitchPreferenc
import code.name.monkey.appthemehelper.util.ColorUtil
import code.name.monkey.appthemehelper.util.VersionUtils
import code.name.monkey.retromusic.App
+import code.name.monkey.retromusic.DESATURATED_COLOR
import code.name.monkey.retromusic.R
import code.name.monkey.retromusic.appshortcuts.DynamicShortcutManager
-import code.name.monkey.retromusic.util.PreferenceUtil
+import code.name.monkey.retromusic.util.PreferenceUtilKT
import com.afollestad.materialdialogs.MaterialDialog
import com.afollestad.materialdialogs.color.colorChooser
@@ -48,7 +49,7 @@ class ThemeSettingsFragment : AbsSettingsFragment() {
ThemeStore.markChanged(requireContext())
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N_MR1) {
- requireActivity().setTheme(PreferenceUtil.getThemeResFromPrefValue(theme))
+ requireActivity().setTheme(PreferenceUtilKT.themeResFromPrefValue(theme))
DynamicShortcutManager(requireContext()).updateDynamicShortcuts()
}
requireActivity().recreate()
@@ -62,7 +63,6 @@ class ThemeSettingsFragment : AbsSettingsFragment() {
accentColorPref.setOnPreferenceClickListener {
MaterialDialog(requireActivity()).show {
- cornerRadius(PreferenceUtil.getInstance(requireContext()).dialogCorner)
title(R.string.accent_color)
positiveButton(R.string.set)
colorChooser(
@@ -75,7 +75,6 @@ class ThemeSettingsFragment : AbsSettingsFragment() {
DynamicShortcutManager(requireContext()).updateDynamicShortcuts()
requireActivity().recreate()
-
}
}
return@setOnPreferenceClickListener true
@@ -88,22 +87,21 @@ class ThemeSettingsFragment : AbsSettingsFragment() {
}
ThemeStore.markChanged(requireContext())
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N_MR1) {
- requireActivity().setTheme(PreferenceUtil.getThemeResFromPrefValue("black"))
+ requireActivity().setTheme(PreferenceUtilKT.themeResFromPrefValue("black"))
DynamicShortcutManager(requireContext()).updateDynamicShortcuts()
}
requireActivity().recreate()
true
}
- val desaturatedColor: ATESwitchPreference? =
- findPreference(PreferenceUtil.DESATURATED_COLOR)
+ val desaturatedColor: ATESwitchPreference? = findPreference(DESATURATED_COLOR)
desaturatedColor?.setOnPreferenceChangeListener { _, value ->
val desaturated = value as Boolean
ThemeStore.prefs(requireContext())
.edit()
.putBoolean("desaturated_color", desaturated)
.apply()
- PreferenceUtil.getInstance(requireContext()).setDesaturatedColor(desaturated)
+ PreferenceUtilKT.isDesaturatedColor = desaturated
requireActivity().recreate()
true
}
@@ -113,12 +111,9 @@ class ThemeSettingsFragment : AbsSettingsFragment() {
if (!VersionUtils.hasNougatMR()) {
colorAppShortcuts.isVisible = false
} else {
- colorAppShortcuts.isChecked =
- PreferenceUtil.getInstance(requireContext()).coloredAppShortcuts()
+ colorAppShortcuts.isChecked = PreferenceUtilKT.isColoredAppShortcuts
colorAppShortcuts.setOnPreferenceChangeListener { _, newValue ->
- // Save preference
- PreferenceUtil.getInstance(requireContext())
- .setColoredAppShortcuts(newValue as Boolean)
+ PreferenceUtilKT.isColoredAppShortcuts = newValue as Boolean
DynamicShortcutManager(requireContext()).updateDynamicShortcuts()
true
}
diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/songs/SongsFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/songs/SongsFragment.kt
index 4b2c0777f..add25fc4c 100644
--- a/app/src/main/java/code/name/monkey/retromusic/fragments/songs/SongsFragment.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/fragments/songs/SongsFragment.kt
@@ -4,41 +4,36 @@ import android.os.Bundle
import android.view.View
import androidx.annotation.LayoutRes
import androidx.recyclerview.widget.GridLayoutManager
-import code.name.monkey.retromusic.App
import code.name.monkey.retromusic.R
import code.name.monkey.retromusic.adapter.song.ShuffleButtonSongAdapter
import code.name.monkey.retromusic.adapter.song.SongAdapter
+import code.name.monkey.retromusic.fragments.ReloadType
import code.name.monkey.retromusic.fragments.base.AbsLibraryPagerRecyclerViewCustomGridSizeFragment
import code.name.monkey.retromusic.interfaces.MainActivityFragmentCallbacks
import code.name.monkey.retromusic.model.Song
-import code.name.monkey.retromusic.mvp.presenter.SongPresenter
import code.name.monkey.retromusic.mvp.presenter.SongView
-import code.name.monkey.retromusic.util.PreferenceUtil
+import code.name.monkey.retromusic.util.PreferenceUtilKT
import java.util.*
-import javax.inject.Inject
class SongsFragment :
AbsLibraryPagerRecyclerViewCustomGridSizeFragment(),
SongView, MainActivityFragmentCallbacks {
-
- @Inject
- lateinit var songPresenter: SongPresenter
+ override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
+ super.onViewCreated(view, savedInstanceState)
+ mainActivity.libraryViewModel.allSongs()
+ .observe(viewLifecycleOwner, androidx.lifecycle.Observer {
+ if (it.isNotEmpty()) {
+ adapter?.swapDataSet(it)
+ } else {
+ adapter?.swapDataSet(listOf())
+ }
+ })
+ }
override val emptyMessage: Int
get() = R.string.no_songs
- override fun onCreate(savedInstanceState: Bundle?) {
- super.onCreate(savedInstanceState)
- App.musicComponent.inject(this)
- }
-
- override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
- super.onViewCreated(view, savedInstanceState)
- songPresenter.attachView(this)
- }
-
override fun createLayoutManager(): GridLayoutManager {
- println("createLayoutManager: ${getGridSize()}")
return GridLayoutManager(requireActivity(), getGridSize()).apply {
spanSizeLookup = object : GridLayoutManager.SpanSizeLookup() {
override fun getSpanSize(position: Int): Int {
@@ -66,79 +61,61 @@ class SongsFragment :
adapter?.swapDataSet(songs)
}
- override fun onMediaStoreChanged() {
- songPresenter.loadSongs()
- }
-
override fun loadGridSize(): Int {
- return PreferenceUtil.getInstance(requireContext()).getSongGridSize(requireContext())
+ return PreferenceUtilKT.songGridSize
}
override fun saveGridSize(gridColumns: Int) {
- PreferenceUtil.getInstance(requireContext()).setSongGridSize(gridColumns)
+ PreferenceUtilKT.songGridSize = gridColumns
}
override fun loadGridSizeLand(): Int {
- return PreferenceUtil.getInstance(requireContext()).getSongGridSizeLand(requireContext())
+ return PreferenceUtilKT.songGridSizeLand
}
override fun saveGridSizeLand(gridColumns: Int) {
- PreferenceUtil.getInstance(requireContext()).setSongGridSizeLand(gridColumns)
+ PreferenceUtilKT.songGridSizeLand = gridColumns
}
override fun setGridSize(gridSize: Int) {
adapter?.notifyDataSetChanged()
}
- override fun onResume() {
- super.onResume()
- if (adapter?.dataSet.isNullOrEmpty())
- songPresenter.loadSongs()
- }
-
- override fun onDestroyView() {
- super.onDestroyView()
- songPresenter.detachView()
- }
-
override fun showEmptyView() {
adapter?.swapDataSet(ArrayList())
}
override fun loadSortOrder(): String {
- return PreferenceUtil.getInstance(requireContext()).songSortOrder
+ return PreferenceUtilKT.songSortOrder
}
override fun saveSortOrder(sortOrder: String) {
- PreferenceUtil.getInstance(requireContext()).songSortOrder = sortOrder
+ PreferenceUtilKT.songSortOrder = sortOrder
+ }
+
+ @LayoutRes
+ override fun loadLayoutRes(): Int {
+ return PreferenceUtilKT.songGridStyle
+ }
+
+ override fun saveLayoutRes(@LayoutRes layoutRes: Int) {
+ PreferenceUtilKT.songGridStyle = layoutRes
}
override fun setSortOrder(sortOrder: String) {
- songPresenter.loadSongs()
+ mainActivity.libraryViewModel.forceReload(ReloadType.Songs)
}
companion object {
-
@JvmField
var TAG: String = SongsFragment::class.java.simpleName
@JvmStatic
fun newInstance(): SongsFragment {
- val args = Bundle()
- val fragment = SongsFragment()
- fragment.arguments = args
- return fragment
+ return SongsFragment()
}
}
- @LayoutRes
- override fun loadLayoutRes(): Int {
- return PreferenceUtil.getInstance(requireContext()).songGridStyle
- }
-
- override fun saveLayoutRes(@LayoutRes layoutRes: Int) {
- PreferenceUtil.getInstance(requireContext()).songGridStyle = layoutRes
- }
override fun handleBackPress(): Boolean {
return false
diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/songs/SongsViewModel.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/songs/SongsViewModel.kt
deleted file mode 100644
index 3a15ff2ff..000000000
--- a/app/src/main/java/code/name/monkey/retromusic/fragments/songs/SongsViewModel.kt
+++ /dev/null
@@ -1,27 +0,0 @@
-package code.name.monkey.retromusic.fragments.songs
-
-import android.app.Application
-import androidx.lifecycle.AndroidViewModel
-import androidx.lifecycle.MutableLiveData
-import androidx.lifecycle.viewModelScope
-import code.name.monkey.retromusic.Result.Success
-import code.name.monkey.retromusic.model.Song
-import code.name.monkey.retromusic.providers.RepositoryImpl
-import kotlinx.coroutines.launch
-
-class SongsViewModel(application: Application) : AndroidViewModel(application) {
- var songs = MutableLiveData>()
-
- init {
- loadSongs()
- }
-
- fun loadSongs() = viewModelScope.launch {
- val result = RepositoryImpl(getApplication()).allSongs()
- if (result is Success) {
- songs.value = result.data
- } else {
- songs.value = listOf()
- }
- }
-}
\ No newline at end of file
diff --git a/app/src/main/java/code/name/monkey/retromusic/glide/AlbumGlideRequest.java b/app/src/main/java/code/name/monkey/retromusic/glide/AlbumGlideRequest.java
index 7b16ab0d6..6b90fab24 100644
--- a/app/src/main/java/code/name/monkey/retromusic/glide/AlbumGlideRequest.java
+++ b/app/src/main/java/code/name/monkey/retromusic/glide/AlbumGlideRequest.java
@@ -20,7 +20,7 @@ import code.name.monkey.retromusic.glide.palette.BitmapPaletteTranscoder;
import code.name.monkey.retromusic.glide.palette.BitmapPaletteWrapper;
import code.name.monkey.retromusic.model.Song;
import code.name.monkey.retromusic.util.MusicUtil;
-import code.name.monkey.retromusic.util.PreferenceUtil;
+import code.name.monkey.retromusic.util.PreferenceUtilKT;
public class AlbumGlideRequest {
private static final DiskCacheStrategy DEFAULT_DISK_CACHE_STRATEGY = DiskCacheStrategy.NONE;
@@ -70,7 +70,7 @@ public class AlbumGlideRequest {
@NonNull
public Builder checkIgnoreMediaStore(@NonNull Context context) {
- return ignoreMediaStore(PreferenceUtil.getInstance(context).ignoreMediaStoreArtwork());
+ return ignoreMediaStore(PreferenceUtilKT.INSTANCE.isIgnoreMediaStoreArtwork());
}
@NonNull
diff --git a/app/src/main/java/code/name/monkey/retromusic/glide/RetroMusicColoredTarget.kt b/app/src/main/java/code/name/monkey/retromusic/glide/RetroMusicColoredTarget.kt
index 6a4d67e39..fb9ad3c98 100644
--- a/app/src/main/java/code/name/monkey/retromusic/glide/RetroMusicColoredTarget.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/glide/RetroMusicColoredTarget.kt
@@ -34,7 +34,7 @@ abstract class RetroMusicColoredTarget(view: ImageView) : BitmapPaletteTarget(vi
override fun onLoadFailed(e: Exception?, errorDrawable: Drawable?) {
super.onLoadFailed(e, errorDrawable)
- val colors = MediaNotificationProcessor(App.getContext(),errorDrawable)
+ val colors = MediaNotificationProcessor(App.getContext(), errorDrawable)
onColorReady(colors)
/* MediaNotificationProcessor(App.getContext()).getPaletteAsync({
onColorReady(it)
diff --git a/app/src/main/java/code/name/monkey/retromusic/glide/SongGlideRequest.java b/app/src/main/java/code/name/monkey/retromusic/glide/SongGlideRequest.java
index fc718ebd9..10078d057 100644
--- a/app/src/main/java/code/name/monkey/retromusic/glide/SongGlideRequest.java
+++ b/app/src/main/java/code/name/monkey/retromusic/glide/SongGlideRequest.java
@@ -34,7 +34,7 @@ import code.name.monkey.retromusic.glide.palette.BitmapPaletteTranscoder;
import code.name.monkey.retromusic.glide.palette.BitmapPaletteWrapper;
import code.name.monkey.retromusic.model.Song;
import code.name.monkey.retromusic.util.MusicUtil;
-import code.name.monkey.retromusic.util.PreferenceUtil;
+import code.name.monkey.retromusic.util.PreferenceUtilKT;
/**
* Created by hemanths on 2019-09-15.
@@ -88,7 +88,7 @@ public class SongGlideRequest {
@NonNull
public Builder checkIgnoreMediaStore(@NonNull Context context) {
- return ignoreMediaStore(PreferenceUtil.getInstance(context).ignoreMediaStoreArtwork());
+ return ignoreMediaStore(PreferenceUtilKT.INSTANCE.isIgnoreMediaStoreArtwork());
}
@NonNull
diff --git a/app/src/main/java/code/name/monkey/retromusic/glide/artistimage/ArtistImageLoader.kt b/app/src/main/java/code/name/monkey/retromusic/glide/artistimage/ArtistImageLoader.kt
index 7c8e4f7a0..04aa2e226 100644
--- a/app/src/main/java/code/name/monkey/retromusic/glide/artistimage/ArtistImageLoader.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/glide/artistimage/ArtistImageLoader.kt
@@ -18,7 +18,7 @@ import android.content.Context
import code.name.monkey.retromusic.deezer.Data
import code.name.monkey.retromusic.deezer.DeezerApiService
import code.name.monkey.retromusic.util.MusicUtil
-import code.name.monkey.retromusic.util.PreferenceUtil
+import code.name.monkey.retromusic.util.PreferenceUtilKT
import com.bumptech.glide.Priority
import com.bumptech.glide.integration.okhttp3.OkHttpUrlLoader
import com.bumptech.glide.load.data.DataFetcher
@@ -62,9 +62,8 @@ class ArtistImageFetcher(
}
override fun loadData(priority: Priority?): InputStream? {
- if (!MusicUtil.isArtistNameUnknown(model.artistName) && PreferenceUtil.isAllowedToDownloadMetadata(
- context
- )
+ if (!MusicUtil.isArtistNameUnknown(model.artistName) &&
+ PreferenceUtilKT.isAllowedToDownloadMetadata()
) {
val artists = model.artistName.split(",")
val response = deezerApiService.getArtistImage(artists[0]).execute()
diff --git a/app/src/main/java/code/name/monkey/retromusic/helper/EqualizerHelper.kt b/app/src/main/java/code/name/monkey/retromusic/helper/EqualizerHelper.kt
index 02ed03c46..4bb74e9f6 100644
--- a/app/src/main/java/code/name/monkey/retromusic/helper/EqualizerHelper.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/helper/EqualizerHelper.kt
@@ -99,6 +99,7 @@ class EqualizerHelper private constructor() : EqualizerInterface {
companion object {
private val TAG = "EqualizerHelper"
+
@Volatile
private var ourInstance: EqualizerHelper? = null
diff --git a/app/src/main/java/code/name/monkey/retromusic/helper/MusicPlayerRemote.kt b/app/src/main/java/code/name/monkey/retromusic/helper/MusicPlayerRemote.kt
index 44df37768..a84eebecf 100644
--- a/app/src/main/java/code/name/monkey/retromusic/helper/MusicPlayerRemote.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/helper/MusicPlayerRemote.kt
@@ -29,7 +29,8 @@ import androidx.core.content.ContextCompat
import code.name.monkey.retromusic.loaders.SongLoader
import code.name.monkey.retromusic.model.Song
import code.name.monkey.retromusic.service.MusicService
-import code.name.monkey.retromusic.util.PreferenceUtil
+
+import code.name.monkey.retromusic.util.PreferenceUtilKT
import java.io.File
import java.util.*
@@ -212,7 +213,7 @@ object MusicPlayerRemote {
) && musicService != null
) {
musicService?.openQueue(queue, startPosition, startPlaying)
- if (PreferenceUtil.getInstance(musicService).isShuffleModeOn)
+ if (PreferenceUtilKT.isShuffleModeOn)
setShuffleMode(MusicService.SHUFFLE_MODE_NONE)
}
}
diff --git a/app/src/main/java/code/name/monkey/retromusic/helper/SearchQueryHelper.kt b/app/src/main/java/code/name/monkey/retromusic/helper/SearchQueryHelper.kt
index 4273931ec..1efe9c57d 100644
--- a/app/src/main/java/code/name/monkey/retromusic/helper/SearchQueryHelper.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/helper/SearchQueryHelper.kt
@@ -28,6 +28,7 @@ object SearchQueryHelper {
private const val ARTIST_SELECTION = "lower(" + MediaStore.Audio.AudioColumns.ARTIST + ") = ?"
private const val AND = " AND "
var songs = ArrayList()
+
@JvmStatic
fun getSongs(context: Context, extras: Bundle): ArrayList {
val query = extras.getString(SearchManager.QUERY, null)
diff --git a/app/src/main/java/code/name/monkey/retromusic/loaders/AlbumLoader.kt b/app/src/main/java/code/name/monkey/retromusic/loaders/AlbumLoader.kt
index 7971994d7..4694db17c 100644
--- a/app/src/main/java/code/name/monkey/retromusic/loaders/AlbumLoader.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/loaders/AlbumLoader.kt
@@ -16,11 +16,10 @@ package code.name.monkey.retromusic.loaders
import android.content.Context
import android.provider.MediaStore.Audio.AudioColumns
-import code.name.monkey.retromusic.App
import code.name.monkey.retromusic.helper.SortOrder
import code.name.monkey.retromusic.model.Album
import code.name.monkey.retromusic.model.Song
-import code.name.monkey.retromusic.util.PreferenceUtil
+import code.name.monkey.retromusic.util.PreferenceUtilKT
import java.util.*
import kotlin.collections.ArrayList
@@ -40,7 +39,7 @@ object AlbumLoader {
context,
AudioColumns.ALBUM + " LIKE ?",
arrayOf("%$query%"),
- getSongLoaderSortOrder(context)
+ getSongLoaderSortOrder()
)
)
return splitIntoAlbums(songs)
@@ -56,7 +55,7 @@ object AlbumLoader {
context,
AudioColumns.ALBUM_ID + "=?",
arrayOf(albumId.toString()),
- getSongLoaderSortOrder(context)
+ getSongLoaderSortOrder()
)
)
val album = Album(songs)
@@ -72,7 +71,7 @@ object AlbumLoader {
context,
null,
null,
- getSongLoaderSortOrder(context)
+ getSongLoaderSortOrder()
)
)
return splitIntoAlbums(songs)
@@ -108,7 +107,7 @@ object AlbumLoader {
}
private fun sortSongsByTrackNumber(album: Album) {
- when (PreferenceUtil.getInstance(App.getContext()).albumDetailSongSortOrder) {
+ when (PreferenceUtilKT.albumDetailSongSortOrder) {
SortOrder.AlbumSongSortOrder.SONG_TRACK_LIST -> album.songs?.sortWith(Comparator { o1, o2 ->
o1.trackNumber.compareTo(
o2.trackNumber
@@ -132,8 +131,8 @@ object AlbumLoader {
}
}
- private fun getSongLoaderSortOrder(context: Context): String {
- return PreferenceUtil.getInstance(context).albumSortOrder + ", " +
- PreferenceUtil.getInstance(context).albumSongSortOrder
+ private fun getSongLoaderSortOrder(): String {
+ return PreferenceUtilKT.albumSortOrder + ", " +
+ PreferenceUtilKT.albumSongSortOrder
}
}
diff --git a/app/src/main/java/code/name/monkey/retromusic/loaders/ArtistLoader.kt b/app/src/main/java/code/name/monkey/retromusic/loaders/ArtistLoader.kt
index 582faf268..c5056ead8 100644
--- a/app/src/main/java/code/name/monkey/retromusic/loaders/ArtistLoader.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/loaders/ArtistLoader.kt
@@ -18,13 +18,13 @@ import android.content.Context
import android.provider.MediaStore.Audio.AudioColumns
import code.name.monkey.retromusic.model.Album
import code.name.monkey.retromusic.model.Artist
-import code.name.monkey.retromusic.util.PreferenceUtil
+import code.name.monkey.retromusic.util.PreferenceUtilKT
object ArtistLoader {
- private fun getSongLoaderSortOrder(context: Context): String {
- return PreferenceUtil.getInstance(context).artistSortOrder + ", " +
- PreferenceUtil.getInstance(context).artistAlbumSortOrder + ", " +
- PreferenceUtil.getInstance(context).artistSongSortOrder
+ private fun getSongLoaderSortOrder(): String {
+ return PreferenceUtilKT.artistSortOrder + ", " +
+ PreferenceUtilKT.artistAlbumSortOrder + ", " +
+ PreferenceUtilKT.artistSongSortOrder
}
fun getAllArtists(context: Context): ArrayList {
@@ -32,7 +32,7 @@ object ArtistLoader {
SongLoader.makeSongCursor(
context,
null, null,
- getSongLoaderSortOrder(context)
+ getSongLoaderSortOrder()
)
)
return splitIntoArtists(AlbumLoader.splitIntoAlbums(songs))
@@ -44,7 +44,7 @@ object ArtistLoader {
context,
AudioColumns.ARTIST + " LIKE ?",
arrayOf("%$query%"),
- getSongLoaderSortOrder(context)
+ getSongLoaderSortOrder()
)
)
return splitIntoArtists(AlbumLoader.splitIntoAlbums(songs))
@@ -78,7 +78,7 @@ object ArtistLoader {
context,
AudioColumns.ARTIST_ID + "=?",
arrayOf(artistId.toString()),
- getSongLoaderSortOrder(context)
+ getSongLoaderSortOrder()
)
)
return Artist(AlbumLoader.splitIntoAlbums(songs))
diff --git a/app/src/main/java/code/name/monkey/retromusic/loaders/GenreLoader.kt b/app/src/main/java/code/name/monkey/retromusic/loaders/GenreLoader.kt
index c92cde62b..d6ca71b4a 100644
--- a/app/src/main/java/code/name/monkey/retromusic/loaders/GenreLoader.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/loaders/GenreLoader.kt
@@ -23,7 +23,7 @@ import code.name.monkey.retromusic.Constants.BASE_SELECTION
import code.name.monkey.retromusic.Constants.baseProjection
import code.name.monkey.retromusic.model.Genre
import code.name.monkey.retromusic.model.Song
-import code.name.monkey.retromusic.util.PreferenceUtil
+import code.name.monkey.retromusic.util.PreferenceUtilKT
object GenreLoader {
@@ -80,15 +80,14 @@ object GenreLoader {
}
private fun makeAllSongsWithGenreCursor(context: Context): Cursor? {
- try {
- return context.contentResolver.query(
+ return try {
+ context.contentResolver.query(
Uri.parse("content://media/external/audio/genres/all/members"),
arrayOf(Genres.Members.AUDIO_ID), null, null, null
)
} catch (e: SecurityException) {
- return null
+ null
}
-
}
private fun makeGenreSongCursor(context: Context, genreId: Int): Cursor? {
@@ -98,7 +97,7 @@ object GenreLoader {
baseProjection,
BASE_SELECTION,
null,
- PreferenceUtil.getInstance(context).songSortOrder
+ PreferenceUtilKT.songSortOrder
)
} catch (e: SecurityException) {
return null
@@ -154,7 +153,7 @@ object GenreLoader {
projection,
null,
null,
- PreferenceUtil.getInstance(context).genreSortOrder
+ PreferenceUtilKT.genreSortOrder
)
} catch (e: SecurityException) {
return null
diff --git a/app/src/main/java/code/name/monkey/retromusic/loaders/LastAddedSongsLoader.kt b/app/src/main/java/code/name/monkey/retromusic/loaders/LastAddedSongsLoader.kt
index 3a9e2d50d..327c735f2 100644
--- a/app/src/main/java/code/name/monkey/retromusic/loaders/LastAddedSongsLoader.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/loaders/LastAddedSongsLoader.kt
@@ -20,7 +20,7 @@ import android.provider.MediaStore
import code.name.monkey.retromusic.model.Album
import code.name.monkey.retromusic.model.Artist
import code.name.monkey.retromusic.model.Song
-import code.name.monkey.retromusic.util.PreferenceUtil
+import code.name.monkey.retromusic.util.PreferenceUtilKT
/**
* Created by hemanths on 16/08/17.
@@ -33,8 +33,7 @@ object LastAddedSongsLoader {
}
private fun makeLastAddedCursor(context: Context): Cursor? {
- val cutoff = PreferenceUtil.getInstance(context).lastAddedCutoff
-
+ val cutoff = PreferenceUtilKT.lastAddedCutoff
return SongLoader.makeSongCursor(
context,
MediaStore.Audio.Media.DATE_ADDED + ">?",
diff --git a/app/src/main/java/code/name/monkey/retromusic/loaders/SongLoader.kt b/app/src/main/java/code/name/monkey/retromusic/loaders/SongLoader.kt
index f95df2cfc..38bb5edf4 100644
--- a/app/src/main/java/code/name/monkey/retromusic/loaders/SongLoader.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/loaders/SongLoader.kt
@@ -22,7 +22,8 @@ import code.name.monkey.retromusic.Constants.BASE_SELECTION
import code.name.monkey.retromusic.Constants.baseProjection
import code.name.monkey.retromusic.model.Song
import code.name.monkey.retromusic.providers.BlacklistStore
-import code.name.monkey.retromusic.util.PreferenceUtil
+
+import code.name.monkey.retromusic.util.PreferenceUtilKT
import java.util.*
/**
@@ -106,7 +107,7 @@ object SongLoader {
context: Context,
selection: String?,
selectionValues: Array?,
- sortOrder: String = PreferenceUtil.getInstance(context).songSortOrder
+ sortOrder: String = PreferenceUtilKT.songSortOrder
): Cursor? {
var selectionFinal = selection
var selectionValuesFinal = selectionValues
@@ -128,7 +129,7 @@ object SongLoader {
MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,
baseProjection,
selectionFinal + " AND " + MediaStore.Audio.Media.DURATION + ">= " +
- (PreferenceUtil.getInstance(context).filterLength * 1000),
+ (PreferenceUtilKT.filterLength * 1000),
selectionValuesFinal,
sortOrder
)
diff --git a/app/src/main/java/code/name/monkey/retromusic/lyrics/LrcView.kt b/app/src/main/java/code/name/monkey/retromusic/lyrics/LrcView.kt
index 7cb4babf4..9a1951396 100644
--- a/app/src/main/java/code/name/monkey/retromusic/lyrics/LrcView.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/lyrics/LrcView.kt
@@ -35,7 +35,6 @@ import android.view.animation.DecelerateInterpolator
import android.widget.OverScroller
import androidx.annotation.ColorInt
import androidx.core.content.ContextCompat
-import androidx.core.content.res.ResourcesCompat
import androidx.core.view.ViewCompat
import code.name.monkey.retromusic.BuildConfig
import code.name.monkey.retromusic.R
@@ -216,9 +215,9 @@ class LrcView @JvmOverloads constructor(
isAntiAlias = true
textAlign = Paint.Align.LEFT
textSize = mLrcTextSize
- /* if (BuildConfig.FLAVOR != "nofont") {
- typeface = ResourcesCompat.getFont(context, R.font.circular)
- }*/
+ /* if (BuildConfig.FLAVOR != "nofont") {
+ typeface = ResourcesCompat.getFont(context, R.font.circular)
+ }*/
}
mDefaultContent = DEFAULT_CONTENT
diff --git a/app/src/main/java/code/name/monkey/retromusic/preferences/AlbumCoverStylePreferenceDialog.kt b/app/src/main/java/code/name/monkey/retromusic/preferences/AlbumCoverStylePreferenceDialog.kt
index 2e8285dc0..e5b1af565 100644
--- a/app/src/main/java/code/name/monkey/retromusic/preferences/AlbumCoverStylePreferenceDialog.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/preferences/AlbumCoverStylePreferenceDialog.kt
@@ -27,7 +27,7 @@ import android.widget.TextView
import android.widget.Toast
import androidx.core.graphics.BlendModeColorFilterCompat
import androidx.core.graphics.BlendModeCompat.SRC_IN
-import androidx.preference.PreferenceDialogFragmentCompat
+import androidx.fragment.app.DialogFragment
import androidx.viewpager.widget.PagerAdapter
import androidx.viewpager.widget.ViewPager
import code.name.monkey.appthemehelper.common.prefs.supportv7.ATEDialogPreference
@@ -37,11 +37,10 @@ import code.name.monkey.retromusic.extensions.colorControlNormal
import code.name.monkey.retromusic.fragments.AlbumCoverStyle
import code.name.monkey.retromusic.fragments.AlbumCoverStyle.*
import code.name.monkey.retromusic.util.NavigationUtil
-import code.name.monkey.retromusic.util.PreferenceUtil
+import code.name.monkey.retromusic.util.PreferenceUtilKT
import code.name.monkey.retromusic.util.ViewUtil
-import com.afollestad.materialdialogs.MaterialDialog
-import com.afollestad.materialdialogs.customview.customView
import com.bumptech.glide.Glide
+import com.google.android.material.dialog.MaterialAlertDialogBuilder
class AlbumCoverStylePreference @JvmOverloads constructor(
context: Context,
@@ -65,10 +64,8 @@ class AlbumCoverStylePreference @JvmOverloads constructor(
}
}
-class AlbumCoverStylePreferenceDialog : PreferenceDialogFragmentCompat(),
+class AlbumCoverStylePreferenceDialog : DialogFragment(),
ViewPager.OnPageChangeListener {
- override fun onDialogClosed(positiveResult: Boolean) {
- }
private var viewPagerPosition: Int = 0
@@ -80,25 +77,26 @@ class AlbumCoverStylePreferenceDialog : PreferenceDialogFragmentCompat(),
viewPager.adapter = AlbumCoverStyleAdapter(requireContext())
viewPager.addOnPageChangeListener(this)
viewPager.pageMargin = ViewUtil.convertDpToPixel(32f, resources).toInt()
- viewPager.currentItem = PreferenceUtil.getInstance(requireContext()).albumCoverStyle.ordinal
+ viewPager.currentItem = PreferenceUtilKT.albumCoverStyle.ordinal
- return MaterialDialog(requireActivity()).show {
- title(R.string.pref_title_album_cover_style)
- cornerRadius(PreferenceUtil.getInstance(requireContext()).dialogCorner)
- positiveButton(R.string.set) {
+ return MaterialAlertDialogBuilder(requireActivity(),
+ R.style.ThemeOverlay_MaterialComponents_Dialog_Alert)
+ .setTitle(R.string.pref_title_album_cover_style)
+ .setPositiveButton(R.string.set) { _, _ ->
val coverStyle = values()[viewPagerPosition]
if (isAlbumCoverStyle(coverStyle)) {
val result = getString(coverStyle.titleRes) + " theme is Pro version feature."
Toast.makeText(context, result, Toast.LENGTH_SHORT).show()
NavigationUtil.goToProVersion(requireActivity())
} else {
- PreferenceUtil.getInstance(requireContext()).albumCoverStyle = coverStyle
+ PreferenceUtilKT.albumCoverStyle = coverStyle
}
-
}
- negativeButton(android.R.string.cancel)
- customView(view = view, scrollable = false, noVerticalPadding = false)
- }
+ .setNegativeButton(android.R.string.cancel) { _, _ ->
+ dismiss()
+ }
+ .setView(view)
+ .create()
}
override fun onPageScrolled(position: Int, positionOffset: Float, positionOffsetPixels: Int) {
@@ -162,12 +160,8 @@ class AlbumCoverStylePreferenceDialog : PreferenceDialogFragmentCompat(),
companion object {
val TAG: String = AlbumCoverStylePreferenceDialog::class.java.simpleName
- fun newInstance(key: String): AlbumCoverStylePreferenceDialog {
- val bundle = Bundle()
- bundle.putString(ARG_KEY, key)
- val fragment = AlbumCoverStylePreferenceDialog()
- fragment.arguments = bundle
- return fragment
+ fun newInstance(): AlbumCoverStylePreferenceDialog {
+ return AlbumCoverStylePreferenceDialog()
}
}
}
diff --git a/app/src/main/java/code/name/monkey/retromusic/preferences/BlacklistPreferenceDialog.kt b/app/src/main/java/code/name/monkey/retromusic/preferences/BlacklistPreferenceDialog.kt
index 80383bc8c..ec53c0807 100644
--- a/app/src/main/java/code/name/monkey/retromusic/preferences/BlacklistPreferenceDialog.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/preferences/BlacklistPreferenceDialog.kt
@@ -27,7 +27,7 @@ import code.name.monkey.retromusic.R
import code.name.monkey.retromusic.dialogs.BlacklistFolderChooserDialog
import code.name.monkey.retromusic.extensions.colorControlNormal
import code.name.monkey.retromusic.providers.BlacklistStore
-import code.name.monkey.retromusic.util.PreferenceUtil
+
import com.afollestad.materialdialogs.MaterialDialog
import com.afollestad.materialdialogs.list.listItems
import java.io.File
@@ -63,7 +63,6 @@ class BlacklistPreferenceDialog : DialogFragment(), BlacklistFolderChooserDialog
refreshBlacklistData()
return MaterialDialog(requireContext()).show {
title(R.string.blacklist)
- cornerRadius(PreferenceUtil.getInstance(requireContext()).dialogCorner)
positiveButton(android.R.string.ok) {
dismiss()
}
@@ -71,7 +70,7 @@ class BlacklistPreferenceDialog : DialogFragment(), BlacklistFolderChooserDialog
MaterialDialog(requireContext()).show {
title(code.name.monkey.retromusic.R.string.clear_blacklist)
message(code.name.monkey.retromusic.R.string.do_you_want_to_clear_the_blacklist)
- cornerRadius(PreferenceUtil.getInstance(requireContext()).dialogCorner)
+
positiveButton(code.name.monkey.retromusic.R.string.clear_action) {
BlacklistStore.getInstance(requireContext()).clear()
refreshBlacklistData()
@@ -86,7 +85,7 @@ class BlacklistPreferenceDialog : DialogFragment(), BlacklistFolderChooserDialog
}
listItems(items = paths, waitForPositiveButton = false) { _, _, text ->
MaterialDialog(requireContext()).show {
- cornerRadius(PreferenceUtil.getInstance(requireContext()).dialogCorner)
+
title(code.name.monkey.retromusic.R.string.remove_from_blacklist)
message(
text = HtmlCompat.fromHtml(
diff --git a/app/src/main/java/code/name/monkey/retromusic/preferences/LibraryPreference.kt b/app/src/main/java/code/name/monkey/retromusic/preferences/LibraryPreference.kt
index 7360df5d6..e7c91f119 100644
--- a/app/src/main/java/code/name/monkey/retromusic/preferences/LibraryPreference.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/preferences/LibraryPreference.kt
@@ -14,14 +14,17 @@
package code.name.monkey.retromusic.preferences
+import android.annotation.SuppressLint
import android.app.Dialog
import android.content.Context
import android.os.Bundle
import android.util.AttributeSet
+import android.view.LayoutInflater
import android.widget.Toast
+import androidx.appcompat.app.AlertDialog
import androidx.core.graphics.BlendModeColorFilterCompat
import androidx.core.graphics.BlendModeCompat.SRC_IN
-import androidx.preference.PreferenceDialogFragmentCompat
+import androidx.fragment.app.DialogFragment
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import code.name.monkey.appthemehelper.common.prefs.supportv7.ATEDialogPreference
@@ -29,78 +32,52 @@ import code.name.monkey.retromusic.R
import code.name.monkey.retromusic.adapter.CategoryInfoAdapter
import code.name.monkey.retromusic.extensions.colorControlNormal
import code.name.monkey.retromusic.model.CategoryInfo
-import code.name.monkey.retromusic.util.PreferenceUtil
-import com.afollestad.materialdialogs.MaterialDialog
-import com.afollestad.materialdialogs.customview.customView
-import java.util.*
+import code.name.monkey.retromusic.util.PreferenceUtilKT
+import com.google.android.material.dialog.MaterialAlertDialogBuilder
+
class LibraryPreference @JvmOverloads constructor(
context: Context,
attrs: AttributeSet? = null,
- defStyleAttr: Int = -1,
- defStyleRes: Int = -1
-) :
- ATEDialogPreference(context, attrs, defStyleAttr, defStyleRes) {
-
+ defStyleAttr: Int = 0,
+ defStyleRes: Int = 0
+) : ATEDialogPreference(context, attrs, defStyleAttr, defStyleRes) {
init {
- icon?.colorFilter =
- BlendModeColorFilterCompat.createBlendModeColorFilterCompat(
- context.colorControlNormal(),
- SRC_IN
- )
+ icon?.colorFilter = BlendModeColorFilterCompat.createBlendModeColorFilterCompat(
+ context.colorControlNormal(),
+ SRC_IN
+ )
}
}
-class LibraryPreferenceDialog : PreferenceDialogFragmentCompat() {
-
- override fun onDialogClosed(positiveResult: Boolean) {
- }
-
- lateinit var adapter: CategoryInfoAdapter
+class LibraryPreferenceDialog : DialogFragment() {
+ @SuppressLint("InflateParams")
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
- val view = requireActivity().layoutInflater.inflate(
- R.layout.preference_dialog_library_categories,
- null
- )
-
- val categoryInfos: List = if (savedInstanceState != null) {
- savedInstanceState.getParcelableArrayList(PreferenceUtil.LIBRARY_CATEGORIES)!!
- } else {
- PreferenceUtil.getInstance(requireContext()).libraryCategoryInfos
- }
- adapter = CategoryInfoAdapter(categoryInfos)
+ val view = LayoutInflater.from(requireContext())
+ .inflate(R.layout.preference_dialog_library_categories, null)
+ val categoryAdapter = CategoryInfoAdapter()
+ categoryAdapter.categoryInfos = PreferenceUtilKT.libraryCategory
val recyclerView = view.findViewById(R.id.recycler_view)
recyclerView.layoutManager = LinearLayoutManager(activity)
- recyclerView.adapter = adapter
+ recyclerView.adapter = categoryAdapter
+ categoryAdapter.attachToRecyclerView(recyclerView)
- adapter.attachToRecyclerView(recyclerView)
- return MaterialDialog(requireContext())
- .title(R.string.library_categories)
- .cornerRadius(PreferenceUtil.getInstance(requireContext()).dialogCorner)
- .customView(view = view)
- .positiveButton(android.R.string.ok) {
- updateCategories(adapter.categoryInfos)
- dismiss()
+ return MaterialAlertDialogBuilder(requireContext())
+ .setTitle(R.string.library_categories)
+ .setNeutralButton(
+ R.string.reset_action
+ ) { _, _ ->
+ categoryAdapter.categoryInfos = PreferenceUtilKT.defaultCategories
}
- .negativeButton(android.R.string.cancel) {
- dismiss()
- }
- .neutralButton(R.string.reset_action) {
- adapter.categoryInfos =
- PreferenceUtil.getInstance(requireContext()).defaultLibraryCategoryInfos
- }
- .noAutoDismiss()
- }
-
- override fun onSaveInstanceState(outState: Bundle) {
- super.onSaveInstanceState(outState)
- outState.putParcelableArrayList(
- PreferenceUtil.LIBRARY_CATEGORIES,
- ArrayList(adapter.categoryInfos)
- )
+ .setNegativeButton(android.R.string.cancel, null)
+ .setPositiveButton(
+ android.R.string.ok
+ ) { _, _ -> updateCategories(categoryAdapter.categoryInfos) }
+ .setView(view)
+ .create()
}
private fun updateCategories(categories: List) {
@@ -109,7 +86,7 @@ class LibraryPreferenceDialog : PreferenceDialogFragmentCompat() {
Toast.makeText(context, "Not more than 5 items", Toast.LENGTH_SHORT).show()
return
}
- PreferenceUtil.getInstance(requireContext()).libraryCategoryInfos = categories
+ PreferenceUtilKT.libraryCategory = categories
}
private fun getSelected(categories: List): Int {
@@ -122,13 +99,8 @@ class LibraryPreferenceDialog : PreferenceDialogFragmentCompat() {
}
companion object {
-
- fun newInstance(key: String): LibraryPreferenceDialog {
- val bundle = Bundle()
- bundle.putString(ARG_KEY, key)
- val fragment = LibraryPreferenceDialog()
- fragment.arguments = bundle
- return fragment
+ fun newInstance(): LibraryPreferenceDialog {
+ return LibraryPreferenceDialog()
}
}
}
\ No newline at end of file
diff --git a/app/src/main/java/code/name/monkey/retromusic/preferences/MaterialListPreference.kt b/app/src/main/java/code/name/monkey/retromusic/preferences/MaterialListPreference.kt
index ddb3c473d..a2f2ca6b7 100644
--- a/app/src/main/java/code/name/monkey/retromusic/preferences/MaterialListPreference.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/preferences/MaterialListPreference.kt
@@ -26,7 +26,6 @@ import androidx.preference.PreferenceDialogFragmentCompat
import code.name.monkey.appthemehelper.ThemeStore
import code.name.monkey.retromusic.R
import code.name.monkey.retromusic.extensions.colorControlNormal
-import code.name.monkey.retromusic.util.PreferenceUtil
import com.afollestad.materialdialogs.MaterialDialog
import com.afollestad.materialdialogs.WhichButton
import com.afollestad.materialdialogs.actions.getActionButton
@@ -76,7 +75,6 @@ class MaterialListPreferenceDialog : PreferenceDialogFragmentCompat() {
materialDialog = MaterialDialog(requireContext())
.title(text = materialListPreference.title.toString())
.positiveButton(R.string.set)
- .cornerRadius(PreferenceUtil.getInstance(requireContext()).dialogCorner)
.listItemsSingleChoice(
items = entries,
initialSelection = position,
diff --git a/app/src/main/java/code/name/monkey/retromusic/preferences/NowPlayingScreenPreferenceDialog.kt b/app/src/main/java/code/name/monkey/retromusic/preferences/NowPlayingScreenPreferenceDialog.kt
index 822668e8b..aaf000c2d 100644
--- a/app/src/main/java/code/name/monkey/retromusic/preferences/NowPlayingScreenPreferenceDialog.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/preferences/NowPlayingScreenPreferenceDialog.kt
@@ -26,7 +26,7 @@ import android.widget.TextView
import android.widget.Toast
import androidx.core.graphics.BlendModeColorFilterCompat
import androidx.core.graphics.BlendModeCompat.SRC_IN
-import androidx.preference.PreferenceDialogFragmentCompat
+import androidx.fragment.app.DialogFragment
import androidx.viewpager.widget.PagerAdapter
import androidx.viewpager.widget.ViewPager
import code.name.monkey.appthemehelper.common.prefs.supportv7.ATEDialogPreference
@@ -36,11 +36,10 @@ import code.name.monkey.retromusic.extensions.colorControlNormal
import code.name.monkey.retromusic.fragments.NowPlayingScreen
import code.name.monkey.retromusic.fragments.NowPlayingScreen.*
import code.name.monkey.retromusic.util.NavigationUtil
-import code.name.monkey.retromusic.util.PreferenceUtil
+import code.name.monkey.retromusic.util.PreferenceUtilKT
import code.name.monkey.retromusic.util.ViewUtil
-import com.afollestad.materialdialogs.MaterialDialog
-import com.afollestad.materialdialogs.customview.customView
import com.bumptech.glide.Glide
+import com.google.android.material.dialog.MaterialAlertDialogBuilder
class NowPlayingScreenPreference @JvmOverloads constructor(
context: Context,
@@ -63,8 +62,7 @@ class NowPlayingScreenPreference @JvmOverloads constructor(
}
}
-class NowPlayingScreenPreferenceDialog : PreferenceDialogFragmentCompat(),
- ViewPager.OnPageChangeListener {
+class NowPlayingScreenPreferenceDialog : DialogFragment(), ViewPager.OnPageChangeListener {
private var viewPagerPosition: Int = 0
@@ -78,9 +76,6 @@ class NowPlayingScreenPreferenceDialog : PreferenceDialogFragmentCompat(),
this.viewPagerPosition = position
}
- override fun onDialogClosed(positiveResult: Boolean) {
- }
-
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
val view = LayoutInflater.from(requireContext())
.inflate(R.layout.preference_dialog_now_playing_screen, null)
@@ -89,11 +84,25 @@ class NowPlayingScreenPreferenceDialog : PreferenceDialogFragmentCompat(),
viewPager.adapter = NowPlayingScreenAdapter(requireContext())
viewPager.addOnPageChangeListener(this)
viewPager.pageMargin = ViewUtil.convertDpToPixel(32f, resources).toInt()
- viewPager.currentItem =
- PreferenceUtil.getInstance(requireContext()).nowPlayingScreen.ordinal
+ viewPager.currentItem = PreferenceUtilKT.nowPlayingScreen.ordinal
-
- return MaterialDialog(requireContext()).show {
+ return MaterialAlertDialogBuilder(requireContext())
+ .setTitle(R.string.pref_title_now_playing_screen_appearance)
+ .setCancelable(false)
+ .setPositiveButton(R.string.set) { _, _ ->
+ val nowPlayingScreen = values()[viewPagerPosition]
+ if (isNowPlayingThemes(nowPlayingScreen)) {
+ val result =
+ getString(nowPlayingScreen.titleRes) + " theme is Pro version feature."
+ Toast.makeText(context, result, Toast.LENGTH_SHORT).show()
+ NavigationUtil.goToProVersion(requireContext())
+ } else {
+ PreferenceUtilKT.nowPlayingScreen = nowPlayingScreen
+ }
+ }
+ .setView(view)
+ .create()
+ /*.show {
title(R.string.pref_title_now_playing_screen_appearance)
positiveButton(R.string.set) {
val nowPlayingScreen = values()[viewPagerPosition]
@@ -103,22 +112,18 @@ class NowPlayingScreenPreferenceDialog : PreferenceDialogFragmentCompat(),
Toast.makeText(context, result, Toast.LENGTH_SHORT).show()
NavigationUtil.goToProVersion(requireContext())
} else {
- PreferenceUtil.getInstance(requireContext()).nowPlayingScreen = nowPlayingScreen
+ PreferenceUtilKT.nowPlayingScreen = nowPlayingScreen
}
}
- cornerRadius(PreferenceUtil.getInstance(requireContext()).dialogCorner)
+
negativeButton(android.R.string.cancel)
customView(view = view, scrollable = false, noVerticalPadding = false)
- }
+ }*/
}
companion object {
- fun newInstance(key: String): NowPlayingScreenPreferenceDialog {
- val bundle = Bundle()
- bundle.putString(ARG_KEY, key)
- val fragment = NowPlayingScreenPreferenceDialog()
- fragment.arguments = bundle
- return fragment
+ fun newInstance(): NowPlayingScreenPreferenceDialog {
+ return NowPlayingScreenPreferenceDialog()
}
}
}
diff --git a/app/src/main/java/code/name/monkey/retromusic/providers/BlacklistStore.java b/app/src/main/java/code/name/monkey/retromusic/providers/BlacklistStore.java
index 8efe52597..ea8928b02 100644
--- a/app/src/main/java/code/name/monkey/retromusic/providers/BlacklistStore.java
+++ b/app/src/main/java/code/name/monkey/retromusic/providers/BlacklistStore.java
@@ -28,7 +28,7 @@ import java.io.File;
import java.util.ArrayList;
import code.name.monkey.retromusic.util.FileUtil;
-import code.name.monkey.retromusic.util.PreferenceUtil;
+import code.name.monkey.retromusic.util.PreferenceUtilKT;
import static code.name.monkey.retromusic.service.MusicService.MEDIA_STORE_CHANGED;
@@ -47,13 +47,13 @@ public class BlacklistStore extends SQLiteOpenHelper {
public static synchronized BlacklistStore getInstance(@NonNull final Context context) {
if (sInstance == null) {
sInstance = new BlacklistStore(context.getApplicationContext());
- if (!PreferenceUtil.getInstance(context).initializedBlacklist()) {
+ if (!PreferenceUtilKT.INSTANCE.isInitializedBlacklist()) {
// blacklisted by default
sInstance.addPathImpl(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_ALARMS));
sInstance.addPathImpl(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_NOTIFICATIONS));
sInstance.addPathImpl(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_RINGTONES));
- PreferenceUtil.getInstance(context).setInitializedBlacklist();
+ PreferenceUtilKT.INSTANCE.setInitializedBlacklist(true);
}
}
return sInstance;
diff --git a/app/src/main/java/code/name/monkey/retromusic/service/MultiPlayer.java b/app/src/main/java/code/name/monkey/retromusic/service/MultiPlayer.java
index f25da25fa..5673c6439 100644
--- a/app/src/main/java/code/name/monkey/retromusic/service/MultiPlayer.java
+++ b/app/src/main/java/code/name/monkey/retromusic/service/MultiPlayer.java
@@ -29,7 +29,7 @@ import androidx.annotation.Nullable;
import code.name.monkey.retromusic.R;
import code.name.monkey.retromusic.service.playback.Playback;
-import code.name.monkey.retromusic.util.PreferenceUtil;
+import code.name.monkey.retromusic.util.PreferenceUtilKT;
/**
* @author Andrew Neal, Karim Abou Zeid (kabouzeid)
@@ -130,7 +130,7 @@ public class MultiPlayer implements Playback, MediaPlayer.OnErrorListener, Media
if (path == null) {
return;
}
- if (PreferenceUtil.getInstance(context).gaplessPlayback()) {
+ if (PreferenceUtilKT.INSTANCE.isGapLessPlayback()) {
mNextMediaPlayer = new MediaPlayer();
mNextMediaPlayer.setWakeMode(context, PowerManager.PARTIAL_WAKE_LOCK);
mNextMediaPlayer.setAudioSessionId(getAudioSessionId());
diff --git a/app/src/main/java/code/name/monkey/retromusic/service/MusicService.java b/app/src/main/java/code/name/monkey/retromusic/service/MusicService.java
index a8dac80bc..7f2b26cd7 100644
--- a/app/src/main/java/code/name/monkey/retromusic/service/MusicService.java
+++ b/app/src/main/java/code/name/monkey/retromusic/service/MusicService.java
@@ -81,9 +81,16 @@ import code.name.monkey.retromusic.service.notification.PlayingNotificationImpl;
import code.name.monkey.retromusic.service.notification.PlayingNotificationOreo;
import code.name.monkey.retromusic.service.playback.Playback;
import code.name.monkey.retromusic.util.MusicUtil;
-import code.name.monkey.retromusic.util.PreferenceUtil;
+import code.name.monkey.retromusic.util.PreferenceUtilKT;
import code.name.monkey.retromusic.util.RetroUtil;
+import static code.name.monkey.retromusic.ConstantsKt.ALBUM_ART_ON_LOCKSCREEN;
+import static code.name.monkey.retromusic.ConstantsKt.BLURRED_ALBUM_ART;
+import static code.name.monkey.retromusic.ConstantsKt.CLASSIC_NOTIFICATION;
+import static code.name.monkey.retromusic.ConstantsKt.COLORED_NOTIFICATION;
+import static code.name.monkey.retromusic.ConstantsKt.GAPLESS_PLAYBACK;
+import static code.name.monkey.retromusic.ConstantsKt.TOGGLE_HEADSET;
+
/**
* @author Karim Abou Zeid (kabouzeid), Andrew Neal
*/
@@ -250,7 +257,7 @@ public class MusicService extends Service implements
String action = intent.getAction();
if (action != null) {
if (BluetoothDevice.ACTION_ACL_CONNECTED.equals(action) &&
- PreferenceUtil.getInstance(context).bluetoothSpeaker()) {
+ PreferenceUtilKT.INSTANCE.isBluetoothSpeaker()) {
if (VERSION.SDK_INT >= VERSION_CODES.M) {
if (getAudioManager().getDevices(AudioManager.GET_DEVICES_OUTPUTS).length > 0) {
play();
@@ -381,7 +388,7 @@ public class MusicService extends Service implements
getContentResolver()
.registerContentObserver(MediaStore.Audio.Playlists.INTERNAL_CONTENT_URI, true, mediaStoreObserver);
- PreferenceUtil.getInstance(this).registerOnSharedPreferenceChangedListener(this);
+ PreferenceUtilKT.INSTANCE.registerOnSharedPreferenceChangedListener(this);
restoreState();
@@ -411,7 +418,7 @@ public class MusicService extends Service implements
quit();
releaseResources();
getContentResolver().unregisterContentObserver(mediaStoreObserver);
- PreferenceUtil.getInstance(this).unregisterOnSharedPreferenceChangedListener(this);
+ PreferenceUtilKT.INSTANCE.unregisterOnSharedPreferenceChangedListener(this);
wakeLock.release();
sendBroadcast(new Intent("code.name.monkey.retromusic.RETRO_MUSIC_SERVICE_DESTROYED"));
@@ -656,8 +663,8 @@ public class MusicService extends Service implements
}
public void initNotification() {
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N && !PreferenceUtil.getInstance(this)
- .classicNotification()) {
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N &&
+ !PreferenceUtilKT.INSTANCE.isClassicNotification()) {
playingNotification = new PlayingNotificationImpl();
} else {
playingNotification = new PlayingNotificationOreo();
@@ -719,7 +726,7 @@ public class MusicService extends Service implements
@Override
public void onSharedPreferenceChanged(@NonNull SharedPreferences sharedPreferences, @NonNull String key) {
switch (key) {
- case PreferenceUtil.GAPLESS_PLAYBACK:
+ case GAPLESS_PLAYBACK:
if (sharedPreferences.getBoolean(key, false)) {
prepareNext();
} else {
@@ -728,18 +735,18 @@ public class MusicService extends Service implements
}
}
break;
- case PreferenceUtil.ALBUM_ART_ON_LOCKSCREEN:
- case PreferenceUtil.BLURRED_ALBUM_ART:
+ case ALBUM_ART_ON_LOCKSCREEN:
+ case BLURRED_ALBUM_ART:
updateMediaSessionMetaData();
break;
- case PreferenceUtil.COLORED_NOTIFICATION:
+ case COLORED_NOTIFICATION:
updateNotification();
break;
- case PreferenceUtil.CLASSIC_NOTIFICATION:
+ case CLASSIC_NOTIFICATION:
initNotification();
updateNotification();
break;
- case PreferenceUtil.TOGGLE_HEADSET:
+ case TOGGLE_HEADSET:
registerHeadsetEvents();
break;
}
@@ -1103,13 +1110,13 @@ public class MusicService extends Service implements
.putBitmap(MediaMetadataCompat.METADATA_KEY_ALBUM_ART, null)
.putLong(MediaMetadataCompat.METADATA_KEY_NUM_TRACKS, getPlayingQueue().size());
- if (PreferenceUtil.getInstance(this).albumArtOnLockscreen()) {
+ if (PreferenceUtilKT.INSTANCE.isAlbumArtOnLockScreen()) {
final Point screenSize = RetroUtil.getScreenSize(MusicService.this);
final BitmapRequestBuilder, Bitmap> request = SongGlideRequest.Builder
.from(Glide.with(MusicService.this), song)
.checkIgnoreMediaStore(MusicService.this)
.asBitmap().build();
- if (PreferenceUtil.getInstance(this).blurredAlbumArt()) {
+ if (PreferenceUtilKT.INSTANCE.isBlurredAlbumArt()) {
request.transform(new BlurTransformation.Builder(MusicService.this).build());
}
runOnUiThread(new Runnable() {
@@ -1252,7 +1259,7 @@ public class MusicService extends Service implements
}
private void registerHeadsetEvents() {
- if (!headsetReceiverRegistered && PreferenceUtil.getInstance(this).getHeadsetPlugged()) {
+ if (!headsetReceiverRegistered && PreferenceUtilKT.INSTANCE.isHeadsetPlugged()) {
registerReceiver(headsetReceiver, headsetReceiverIntentFilter);
headsetReceiverRegistered = true;
}
diff --git a/app/src/main/java/code/name/monkey/retromusic/service/PlaybackHandler.java b/app/src/main/java/code/name/monkey/retromusic/service/PlaybackHandler.java
index 2fe34fbef..8b72c894e 100644
--- a/app/src/main/java/code/name/monkey/retromusic/service/PlaybackHandler.java
+++ b/app/src/main/java/code/name/monkey/retromusic/service/PlaybackHandler.java
@@ -23,7 +23,7 @@ import androidx.annotation.NonNull;
import java.lang.ref.WeakReference;
-import code.name.monkey.retromusic.util.PreferenceUtil;
+import code.name.monkey.retromusic.util.PreferenceUtilKT;
import static code.name.monkey.retromusic.service.MusicService.DUCK;
import static code.name.monkey.retromusic.service.MusicService.META_CHANGED;
@@ -52,7 +52,7 @@ class PlaybackHandler extends Handler {
switch (msg.what) {
case MusicService.DUCK:
- if (PreferenceUtil.getInstance(service).audioDucking()) {
+ if (PreferenceUtilKT.INSTANCE.isAudioDucking()) {
currentDuckVolume -= .05f;
if (currentDuckVolume > .2f) {
sendEmptyMessageDelayed(DUCK, 10);
@@ -66,7 +66,7 @@ class PlaybackHandler extends Handler {
break;
case MusicService.UNDUCK:
- if (PreferenceUtil.getInstance(service).audioDucking()) {
+ if (PreferenceUtilKT.INSTANCE.isAudioDucking()) {
currentDuckVolume += .03f;
if (currentDuckVolume < 1f) {
sendEmptyMessageDelayed(MusicService.UNDUCK, 10);
diff --git a/app/src/main/java/code/name/monkey/retromusic/service/notification/PlayingNotificationImpl.kt b/app/src/main/java/code/name/monkey/retromusic/service/notification/PlayingNotificationImpl.kt
index 5b767da7e..61108be99 100644
--- a/app/src/main/java/code/name/monkey/retromusic/service/notification/PlayingNotificationImpl.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/service/notification/PlayingNotificationImpl.kt
@@ -32,7 +32,7 @@ import code.name.monkey.retromusic.glide.palette.BitmapPaletteWrapper
import code.name.monkey.retromusic.service.MusicService
import code.name.monkey.retromusic.service.MusicService.*
import code.name.monkey.retromusic.util.MusicUtil
-import code.name.monkey.retromusic.util.PreferenceUtil
+import code.name.monkey.retromusic.util.PreferenceUtilKT
import code.name.monkey.retromusic.util.RetroColorUtil
import com.bumptech.glide.Glide
import com.bumptech.glide.request.animation.GlideAnimation
@@ -149,9 +149,8 @@ class PlayingNotificationImpl : PlayingNotification() {
.setShowActionsInCompactView(1, 2, 3)
)
.setVisibility(NotificationCompat.VISIBILITY_PUBLIC)
- if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.O && PreferenceUtil.getInstance(
- service
- ).coloredNotification()
+ if (Build.VERSION.SDK_INT <=
+ Build.VERSION_CODES.O && PreferenceUtilKT.isColoredNotification
) {
builder.color = color
}
diff --git a/app/src/main/java/code/name/monkey/retromusic/service/notification/PlayingNotificationOreo.kt b/app/src/main/java/code/name/monkey/retromusic/service/notification/PlayingNotificationOreo.kt
index a6b543062..6457e42dd 100644
--- a/app/src/main/java/code/name/monkey/retromusic/service/notification/PlayingNotificationOreo.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/service/notification/PlayingNotificationOreo.kt
@@ -23,7 +23,7 @@ import android.graphics.Color
import android.graphics.drawable.Drawable
import android.widget.RemoteViews
import androidx.core.app.NotificationCompat
-import code.name.monkey.appthemehelper.util.ATHUtil
+import code.name.monkey.appthemehelper.util.ATHUtil.resolveColor
import code.name.monkey.appthemehelper.util.ColorUtil
import code.name.monkey.appthemehelper.util.MaterialValueHelper
import code.name.monkey.retromusic.R
@@ -33,7 +33,7 @@ import code.name.monkey.retromusic.glide.palette.BitmapPaletteWrapper
import code.name.monkey.retromusic.model.Song
import code.name.monkey.retromusic.service.MusicService
import code.name.monkey.retromusic.service.MusicService.*
-import code.name.monkey.retromusic.util.PreferenceUtil
+import code.name.monkey.retromusic.util.PreferenceUtilKT
import code.name.monkey.retromusic.util.RetroUtil
import code.name.monkey.retromusic.util.RetroUtil.createBitmap
import code.name.monkey.retromusic.util.color.MediaNotificationProcessor
@@ -123,7 +123,7 @@ class PlayingNotificationOreo : PlayingNotification() {
super.onLoadFailed(e, errorDrawable)
update(
null,
- ATHUtil.resolveColor(service, R.attr.colorSurface, Color.WHITE)
+ resolveColor(service, R.attr.colorSurface, Color.WHITE)
)
}
@@ -143,9 +143,8 @@ class PlayingNotificationOreo : PlayingNotification() {
)
}
- if (!PreferenceUtil.getInstance(service).coloredNotification()) {
- bgColorFinal =
- ATHUtil.resolveColor(service, R.attr.colorPrimary, Color.WHITE)
+ if (!PreferenceUtilKT.isColoredNotification) {
+ bgColorFinal = resolveColor(service, R.attr.colorPrimary, Color.WHITE)
}
setBackgroundColor(bgColorFinal)
setNotificationContent(ColorUtil.isColorLight(bgColorFinal))
diff --git a/app/src/main/java/code/name/monkey/retromusic/util/AppRater.kt b/app/src/main/java/code/name/monkey/retromusic/util/AppRater.kt
index 1b2bdbe3e..4c31a4a4f 100644
--- a/app/src/main/java/code/name/monkey/retromusic/util/AppRater.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/util/AppRater.kt
@@ -20,11 +20,9 @@ import android.content.SharedPreferences
import android.graphics.Color
import android.net.Uri
import code.name.monkey.retromusic.R
-import com.afollestad.materialdialogs.LayoutMode
import com.afollestad.materialdialogs.MaterialDialog
import com.afollestad.materialdialogs.WhichButton
import com.afollestad.materialdialogs.actions.getActionButton
-import com.afollestad.materialdialogs.bottomsheets.BottomSheet
object AppRater {
private const val DO_NOT_SHOW_AGAIN = "do_not_show_again"// Package Name
@@ -34,6 +32,7 @@ object AppRater {
private const val DAYS_UNTIL_PROMPT = 3//Min number of days
private const val LAUNCHES_UNTIL_PROMPT = 5//Min number of launches
+
@JvmStatic
fun appLaunched(context: Context) {
val prefs = context.getSharedPreferences(APP_RATING, 0)
@@ -67,8 +66,6 @@ object AppRater {
private fun showRateDialog(context: Context, editor: SharedPreferences.Editor) {
MaterialDialog(context)
.show {
-
- cornerRadius(PreferenceUtil.getInstance(context).dialogCorner)
title(text = "Rate this App")
message(text = "If you enjoy using Retro Music, please take a moment to rate it. Thanks for your support!")
positiveButton(R.string.app_name) {
diff --git a/app/src/main/java/code/name/monkey/retromusic/util/MusicUtil.java b/app/src/main/java/code/name/monkey/retromusic/util/MusicUtil.java
index 5e24f1b7b..6f8d4f617 100644
--- a/app/src/main/java/code/name/monkey/retromusic/util/MusicUtil.java
+++ b/app/src/main/java/code/name/monkey/retromusic/util/MusicUtil.java
@@ -304,19 +304,24 @@ public class MusicUtil {
@NonNull
public static String getSectionName(@Nullable String musicMediaTitle) {
- if (TextUtils.isEmpty(musicMediaTitle)) {
+ try {
+ if (TextUtils.isEmpty(musicMediaTitle)) {
+ return "";
+ }
+
+ musicMediaTitle = musicMediaTitle.trim().toLowerCase();
+ if (musicMediaTitle.startsWith("the ")) {
+ musicMediaTitle = musicMediaTitle.substring(4);
+ } else if (musicMediaTitle.startsWith("a ")) {
+ musicMediaTitle = musicMediaTitle.substring(2);
+ }
+ if (musicMediaTitle.isEmpty()) {
+ return "";
+ }
+ return musicMediaTitle.substring(0, 1).toUpperCase();
+ } catch (Exception e) {
return "";
}
- musicMediaTitle = musicMediaTitle.trim().toLowerCase();
- if (musicMediaTitle.startsWith("the ")) {
- musicMediaTitle = musicMediaTitle.substring(4);
- } else if (musicMediaTitle.startsWith("a ")) {
- musicMediaTitle = musicMediaTitle.substring(2);
- }
- if (musicMediaTitle.isEmpty()) {
- return "";
- }
- return musicMediaTitle.substring(0, 1).toUpperCase();
}
@NonNull
diff --git a/app/src/main/java/code/name/monkey/retromusic/util/PlaylistsUtil.java b/app/src/main/java/code/name/monkey/retromusic/util/PlaylistsUtil.java
deleted file mode 100644
index 1ce43fc44..000000000
--- a/app/src/main/java/code/name/monkey/retromusic/util/PlaylistsUtil.java
+++ /dev/null
@@ -1,511 +0,0 @@
-/*
- * Copyright (c) 2019 Hemanth Savarala.
- *
- * Licensed under the GNU General Public License v3
- *
- * This is free software: you can redistribute it and/or modify it under
- * the terms of the GNU General Public License as published by
- * the Free Software Foundation either version 3 of the License, or (at your option) any later version.
- *
- * This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
- * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- * See the GNU General Public License for more details.
- */
-
-package code.name.monkey.retromusic.util;
-
-import android.content.ContentResolver;
-import android.content.ContentValues;
-import android.content.Context;
-import android.database.Cursor;
-import android.net.Uri;
-import android.os.Environment;
-import android.provider.BaseColumns;
-import android.provider.MediaStore;
-import android.widget.Toast;
-
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
-
-import java.io.File;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.List;
-
-import code.name.monkey.retromusic.R;
-import code.name.monkey.retromusic.helper.M3UWriter;
-import code.name.monkey.retromusic.model.Playlist;
-import code.name.monkey.retromusic.model.PlaylistSong;
-import code.name.monkey.retromusic.model.Song;
-
-import static android.provider.MediaStore.Audio.Playlists.EXTERNAL_CONTENT_URI;
-
-public class PlaylistsUtil {
-
- public static int createPlaylist(@NonNull final Context context, @Nullable final String name) {
- int id = -1;
- if (name != null && name.length() > 0) {
- try {
- Cursor cursor = context.getContentResolver().query(EXTERNAL_CONTENT_URI,
- new String[]{MediaStore.Audio.Playlists._ID},
- MediaStore.Audio.PlaylistsColumns.NAME + "=?", new String[]{name},
- null);
- if (cursor == null || cursor.getCount() < 1) {
- final ContentValues values = new ContentValues(1);
- values.put(MediaStore.Audio.PlaylistsColumns.NAME, name);
- final Uri uri = context.getContentResolver().insert(
- EXTERNAL_CONTENT_URI,
- values);
- if (uri != null) {
- // Necessary because somehow the MediaStoreObserver is not notified when adding a playlist
- context.getContentResolver().notifyChange(Uri.parse("content://media"), null);
- Toast.makeText(context, context.getResources().getString(
- R.string.created_playlist_x, name), Toast.LENGTH_SHORT).show();
- id = Integer.parseInt(uri.getLastPathSegment());
- }
- } else {
- // Playlist exists
- if (cursor.moveToFirst()) {
- id = cursor.getInt(cursor.getColumnIndex(MediaStore.Audio.Playlists._ID));
- }
- }
- if (cursor != null) {
- cursor.close();
- }
- } catch (SecurityException e) {
- e.printStackTrace();
- Toast.makeText(context, "Unable to add music to playlist due to Android 10 limitations", Toast.LENGTH_SHORT).show();
- }
- }
- if (id == -1) {
- Toast.makeText(context, context.getResources().getString(
- R.string.could_not_create_playlist), Toast.LENGTH_SHORT).show();
- }
- return id;
- }
-
- public static void deletePlaylists(@NonNull final Context context, @NonNull final ArrayList playlists) {
- final StringBuilder selection = new StringBuilder();
- selection.append(MediaStore.Audio.Playlists._ID + " IN (");
- for (int i = 0; i < playlists.size(); i++) {
- selection.append(playlists.get(i).id);
- if (i < playlists.size() - 1) {
- selection.append(",");
- }
- }
- selection.append(")");
- try {
- context.getContentResolver().delete(EXTERNAL_CONTENT_URI, selection.toString(), null);
- context.getContentResolver().notifyChange(Uri.parse("content://media"), null);
- } catch (SecurityException ignored) {
- }
- }
-
- public static void addToPlaylist(@NonNull final Context context, final Song song, final int playlistId, final boolean showToastOnFinish) {
- List helperList = new ArrayList<>();
- helperList.add(song);
- addToPlaylist(context, helperList, playlistId, showToastOnFinish);
- }
-
- public static void addToPlaylist(@NonNull final Context context, @NonNull final List songs, final int playlistId, final boolean showToastOnFinish) {
- final int size = songs.size();
- final ContentResolver resolver = context.getContentResolver();
- final String[] projection = new String[]{
- "max(" + MediaStore.Audio.Playlists.Members.PLAY_ORDER + ")",
- };
- final Uri uri = MediaStore.Audio.Playlists.Members.getContentUri("external", playlistId);
- Cursor cursor = null;
- int base = 0;
-
- try {
- try {
- cursor = resolver.query(uri, projection, null, null, null);
-
- if (cursor != null && cursor.moveToFirst()) {
- base = cursor.getInt(0) + 1;
- }
- } finally {
- if (cursor != null) {
- cursor.close();
- }
- }
-
- int numInserted = 0;
- for (int offSet = 0; offSet < size; offSet += 1000)
- numInserted += resolver.bulkInsert(uri, makeInsertItems(songs, offSet, 1000, base));
-
- if (showToastOnFinish) {
- Toast.makeText(context, context.getResources().getString(
- R.string.inserted_x_songs_into_playlist_x, numInserted, getNameForPlaylist(context, playlistId)), Toast.LENGTH_SHORT).show();
- }
- } catch (SecurityException ignored) {
- ignored.printStackTrace();
- Toast.makeText(context, "Unable to add music to playlist due to Android 10 limitations", Toast.LENGTH_SHORT).show();
- }
- }
-
- @NonNull
- public static ContentValues[] makeInsertItems(@NonNull final List songs, final int offset, int len, final int base) {
- if (offset + len > songs.size()) {
- len = songs.size() - offset;
- }
-
- ContentValues[] contentValues = new ContentValues[len];
-
- for (int i = 0; i < len; i++) {
- contentValues[i] = new ContentValues();
- contentValues[i].put(MediaStore.Audio.Playlists.Members.PLAY_ORDER, base + offset + i);
- contentValues[i].put(MediaStore.Audio.Playlists.Members.AUDIO_ID, songs.get(offset + i).getId());
- }
- return contentValues;
- }
-
- public static String getNameForPlaylist(@NonNull final Context context, final long id) {
- try {
- Cursor cursor = context.getContentResolver().query(EXTERNAL_CONTENT_URI,
- new String[]{MediaStore.Audio.PlaylistsColumns.NAME},
- BaseColumns._ID + "=?",
- new String[]{String.valueOf(id)},
- null);
- if (cursor != null) {
- try {
- if (cursor.moveToFirst()) {
- return cursor.getString(0);
- }
- } finally {
- cursor.close();
- }
- }
- } catch (SecurityException ignored) {
- }
- return "";
- }
-
- public static void removeFromPlaylist(@NonNull final Context context, @NonNull final Song song, int playlistId) {
- Uri uri = MediaStore.Audio.Playlists.Members.getContentUri(
- "external", playlistId);
- String selection = MediaStore.Audio.Playlists.Members.AUDIO_ID + " =?";
- String[] selectionArgs = new String[]{String.valueOf(song.getId())};
-
- try {
- context.getContentResolver().delete(uri, selection, selectionArgs);
- } catch (SecurityException ignored) {
- }
- }
-
- public static void removeFromPlaylist(@NonNull final Context context, @NonNull final List songs) {
- final int playlistId = songs.get(0).getPlaylistId();
- Uri uri = MediaStore.Audio.Playlists.Members.getContentUri(
- "external", playlistId);
- String selectionArgs[] = new String[songs.size()];
- for (int i = 0; i < selectionArgs.length; i++) {
- selectionArgs[i] = String.valueOf(songs.get(i).getIdInPlayList());
- }
- String selection = MediaStore.Audio.Playlists.Members._ID + " in (";
- //noinspection unused
- for (String selectionArg : selectionArgs) selection += "?, ";
- selection = selection.substring(0, selection.length() - 2) + ")";
-
- try {
- context.getContentResolver().delete(uri, selection, selectionArgs);
- } catch (SecurityException ignored) {
- }
- }
-
- public static boolean doPlaylistContains(@NonNull final Context context, final long playlistId, final int songId) {
- if (playlistId != -1) {
- try {
- Cursor c = context.getContentResolver().query(
- MediaStore.Audio.Playlists.Members.getContentUri("external", playlistId),
- new String[]{MediaStore.Audio.Playlists.Members.AUDIO_ID}, MediaStore.Audio.Playlists.Members.AUDIO_ID + "=?", new String[]{String.valueOf(songId)}, null);
- int count = 0;
- if (c != null) {
- count = c.getCount();
- c.close();
- }
- return count > 0;
- } catch (SecurityException ignored) {
- }
- }
- return false;
- }
-
- public static boolean moveItem(@NonNull final Context context, int playlistId, int from, int to) {
- return MediaStore.Audio.Playlists.Members.moveItem(context.getContentResolver(),
- playlistId, from, to);
- }
-
- public static void renamePlaylist(@NonNull final Context context, final long id, final String newName) {
- ContentValues contentValues = new ContentValues();
- contentValues.put(MediaStore.Audio.PlaylistsColumns.NAME, newName);
- try {
- context.getContentResolver().update(EXTERNAL_CONTENT_URI,
- contentValues,
- MediaStore.Audio.Playlists._ID + "=?",
- new String[]{String.valueOf(id)});
- context.getContentResolver().notifyChange(Uri.parse("content://media"), null);
- } catch (SecurityException ignored) {
- }
- }
-
- public static File savePlaylist(Context context, Playlist playlist) throws IOException {
- return M3UWriter.write(context, new File(Environment.getExternalStorageDirectory(), "Playlists"), playlist);
- }
-
- public static boolean doesPlaylistExist(@NonNull final Context context, final int playlistId) {
- return playlistId != -1 && doesPlaylistExist(context,
- MediaStore.Audio.Playlists._ID + "=?",
- new String[]{String.valueOf(playlistId)});
- }
-
- public static boolean doesPlaylistExist(@NonNull final Context context, final String name) {
- return doesPlaylistExist(context,
- MediaStore.Audio.PlaylistsColumns.NAME + "=?",
- new String[]{name});
- }
-
- private static boolean doesPlaylistExist(@NonNull Context context, @NonNull final String selection, @NonNull final String[] values) {
- Cursor cursor = context.getContentResolver().query(EXTERNAL_CONTENT_URI,
- new String[]{}, selection, values, null);
-
- boolean exists = false;
- if (cursor != null) {
- exists = cursor.getCount() != 0;
- cursor.close();
- }
- return exists;
- }
-
- /*public static void addToPlaylist(@NonNull Context context,
- @NonNull List songs,
- int playlistId,
- boolean showToastOnFinish) {
-
- ArrayList noSongs = new ArrayList();
- for (Song song : songs) {
- if (!doPlaylistContains(context, playlistId, song.getId())) {
- noSongs.add(song);
- }
- }
-
- final int size = noSongs.size();
- final ContentResolver resolver = context.getContentResolver();
- final String[] projection = new String[]{"max(" + MediaStore.Audio.Playlists.Members.PLAY_ORDER + ")",};
- final Uri uri = MediaStore.Audio.Playlists.Members.getContentUri("external", playlistId);
-
- int base = 0;
- try (Cursor cursor = resolver.query(uri, projection, null, null, null)) {
-
- if (cursor != null && cursor.moveToFirst()) {
- base = cursor.getInt(0) + 1;
- }
- } catch (SecurityException ignored) {
- }
-
- int numInserted = 0;
- for (int offSet = 0; offSet < size; offSet += 1000) {
- numInserted += resolver.bulkInsert(uri, makeInsertItems(noSongs, offSet, 1000, base));
- }
-
- if (showToastOnFinish) {
- Toast.makeText(context, context.getResources().getString(
- R.string.inserted_x_songs_into_playlist_x, numInserted, getNameForPlaylist(context, playlistId)),
- Toast.LENGTH_SHORT).show();
- }
- }
-
- public static int createPlaylist(@NonNull final Context context, @Nullable final String name) {
- int id = -1;
- if (name != null && name.length() > 0) {
- try {
- Cursor cursor = context.getContentResolver()
- .query(EXTERNAL_CONTENT_URI, new String[]{MediaStore.Audio.Playlists._ID},
- MediaStore.Audio.PlaylistsColumns.NAME + "=?", new String[]{name}, null);
- if (cursor == null || cursor.getCount() < 1) {
- final ContentValues values = new ContentValues(1);
- values.put(MediaStore.Audio.PlaylistsColumns.NAME, name);
- final Uri uri = context.getContentResolver().insert(EXTERNAL_CONTENT_URI, values);
- if (uri != null) {
- Toast.makeText(context, context.getResources().getString(R.string.created_playlist_x, name),
- Toast.LENGTH_SHORT).show();
- id = Integer.parseInt(uri.getLastPathSegment());
- }
- } else {
- // Playlist exists
- if (cursor.moveToFirst()) {
- id = cursor.getInt(cursor.getColumnIndex(MediaStore.Audio.Playlists._ID));
- }
- }
- if (cursor != null) {
- cursor.close();
- }
- } catch (SecurityException ignored) {
- }
- }
- if (id == -1) {
- Toast.makeText(context, context.getResources().getString(
- R.string.could_not_create_playlist), Toast.LENGTH_SHORT).show();
- }
- return id;
- }
-
- public static void deletePlaylists(@NonNull final Context context, @NonNull final ArrayList playlists) {
- final StringBuilder selection = new StringBuilder();
- selection.append(MediaStore.Audio.Playlists._ID + " IN (");
- for (int i = 0; i < playlists.size(); i++) {
- selection.append(playlists.get(i).id);
- if (i < playlists.size() - 1) {
- selection.append(",");
- }
- }
- selection.append(")");
- try {
- context.getContentResolver().delete(EXTERNAL_CONTENT_URI, selection.toString(), null);
- context.getContentResolver().notifyChange(Uri.parse("content://media"), null);
- } catch (SecurityException ignored) {
- }
- }
-
- static boolean doPlaylistContains(@NonNull final Context context, final long playlistId,
- final int songId) {
- if (playlistId != -1) {
- try {
- Cursor c = context.getContentResolver().query(
- MediaStore.Audio.Playlists.Members.getContentUri("external", playlistId),
- new String[]{MediaStore.Audio.Playlists.Members.AUDIO_ID},
- MediaStore.Audio.Playlists.Members.AUDIO_ID + "=?", new String[]{String.valueOf(songId)},
- null);
- int count = 0;
- if (c != null) {
- count = c.getCount();
- c.close();
- }
- return count > 0;
- } catch (SecurityException ignored) {
- }
- }
- return false;
- }
-
- public static boolean doesPlaylistExist(@NonNull final Context context, final int playlistId) {
- return playlistId != -1 && doesPlaylistExist(context,
- MediaStore.Audio.Playlists._ID + "=?",
- new String[]{String.valueOf(playlistId)});
- }
-
- public static String getNameForPlaylist(@NonNull final Context context, final long id) {
- try {
- Cursor cursor = context.getContentResolver().query(EXTERNAL_CONTENT_URI,
- new String[]{MediaStore.Audio.PlaylistsColumns.NAME},
- BaseColumns._ID + "=?",
- new String[]{String.valueOf(id)},
- null);
- if (cursor != null) {
- try {
- if (cursor.moveToFirst()) {
- return cursor.getString(0);
- }
- } finally {
- cursor.close();
- }
- }
- } catch (SecurityException ignored) {
- }
- return "";
- }
-
- @NonNull
- public static ContentValues[] makeInsertItems(@NonNull final List songs, final int offset, int len,
- final int base) {
- if (offset + len > songs.size()) {
- len = songs.size() - offset;
- }
-
- ContentValues[] contentValues = new ContentValues[len];
-
- for (int i = 0; i < len; i++) {
- contentValues[i] = new ContentValues();
- contentValues[i].put(MediaStore.Audio.Playlists.Members.PLAY_ORDER, base + offset + i);
- contentValues[i].put(MediaStore.Audio.Playlists.Members.AUDIO_ID, songs.get(offset + i).getId());
- }
- return contentValues;
- }
-
- public static boolean moveItem(@NonNull final Context context, int playlistId, int from, int to) {
- return MediaStore.Audio.Playlists.Members.moveItem(context.getContentResolver(),
- playlistId, from, to);
- }
-
- public static void removeFromPlaylist(@NonNull final Context context, @NonNull final Song song, int playlistId) {
- Uri uri = MediaStore.Audio.Playlists.Members.getContentUri(
- "external", playlistId);
- String selection = MediaStore.Audio.Playlists.Members.AUDIO_ID + " =?";
- String[] selectionArgs = new String[]{String.valueOf(song.getId())};
-
- try {
- context.getContentResolver().delete(uri, selection, selectionArgs);
- } catch (SecurityException ignored) {
- }
- }
-
- public static void removeFromPlaylist(@NonNull final Context context, @NonNull final List songs) {
- final int playlistId = songs.get(0).getPlaylistId();
- Uri uri = MediaStore.Audio.Playlists.Members.getContentUri(
- "external", playlistId);
- String selectionArgs[] = new String[songs.size()];
- for (int i = 0; i < selectionArgs.length; i++) {
- selectionArgs[i] = String.valueOf(songs.get(i).getIdInPlayList());
- }
- String selection = MediaStore.Audio.Playlists.Members._ID + " in (";
- //noinspection unused
- for (String selectionArg : selectionArgs) {
- selection += "?, ";
- }
- selection = selection.substring(0, selection.length() - 2) + ")";
-
- try {
- context.getContentResolver().delete(uri, selection, selectionArgs);
- } catch (SecurityException ignored) {
- }
- }
-
- public static void renamePlaylist(@NonNull final Context context, final long id, final String newName) {
- ContentValues contentValues = new ContentValues();
- contentValues.put(MediaStore.Audio.PlaylistsColumns.NAME, newName);
- try {
- context.getContentResolver().update(EXTERNAL_CONTENT_URI,
- contentValues,
- MediaStore.Audio.Playlists._ID + "=?",
- new String[]{String.valueOf(id)});
- } catch (SecurityException ignored) {
- }
- }
-
- @Nullable
- public static File savePlaylist(@NonNull Context context,
- @NonNull Playlist playlist) throws IOException {
- return M3UWriter.write(context, new File(Environment.getExternalStorageDirectory(), "Playlists"), playlist);
- }
-
- static void addToPlaylist(@NonNull Context context,
- @NonNull Song song,
- int playlistId,
- boolean showToastOnFinish) {
- List helperList = new ArrayList<>();
- helperList.add(song);
- addToPlaylist(context, helperList, playlistId, showToastOnFinish);
- }
-
- private static boolean doesPlaylistExist(@NonNull Context context, @NonNull final String selection,
- @NonNull final String[] values) {
- Cursor cursor = context.getContentResolver().query(EXTERNAL_CONTENT_URI,
- new String[]{}, selection, values, null);
-
- boolean exists = false;
- if (cursor != null) {
- exists = cursor.getCount() != 0;
- cursor.close();
- }
- return exists;
- }*/
-}
\ No newline at end of file
diff --git a/app/src/main/java/code/name/monkey/retromusic/util/PreferenceUtil.java b/app/src/main/java/code/name/monkey/retromusic/util/PreferenceUtil.java
deleted file mode 100644
index f38ccdaa7..000000000
--- a/app/src/main/java/code/name/monkey/retromusic/util/PreferenceUtil.java
+++ /dev/null
@@ -1,790 +0,0 @@
-/*
- * Copyright (c) 2019 Hemanth Savarala.
- *
- * Licensed under the GNU General Public License v3
- *
- * This is free software: you can redistribute it and/or modify it under
- * the terms of the GNU General Public License as published by
- * the Free Software Foundation either version 3 of the License, or (at your option) any later version.
- *
- * This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
- * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- * See the GNU General Public License for more details.
- */
-
-package code.name.monkey.retromusic.util;
-
-import android.annotation.SuppressLint;
-import android.content.Context;
-import android.content.SharedPreferences;
-import android.content.SharedPreferences.Editor;
-import android.content.SharedPreferences.OnSharedPreferenceChangeListener;
-import android.content.res.TypedArray;
-import android.net.ConnectivityManager;
-import android.net.NetworkInfo;
-import android.net.Uri;
-import android.preference.PreferenceManager;
-
-import androidx.annotation.LayoutRes;
-import androidx.annotation.NonNull;
-import androidx.annotation.StyleRes;
-import androidx.viewpager.widget.ViewPager;
-
-import com.google.android.material.bottomnavigation.LabelVisibilityMode;
-import com.google.gson.Gson;
-import com.google.gson.JsonSyntaxException;
-import com.google.gson.reflect.TypeToken;
-
-import java.io.File;
-import java.lang.reflect.Type;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Objects;
-
-import code.name.monkey.retromusic.R;
-import code.name.monkey.retromusic.fragments.AlbumCoverStyle;
-import code.name.monkey.retromusic.fragments.NowPlayingScreen;
-import code.name.monkey.retromusic.fragments.mainactivity.FoldersFragment;
-import code.name.monkey.retromusic.helper.SortOrder.AlbumSongSortOrder;
-import code.name.monkey.retromusic.model.CategoryInfo;
-import code.name.monkey.retromusic.model.CategoryInfo.Category;
-import code.name.monkey.retromusic.transform.CascadingPageTransformer;
-import code.name.monkey.retromusic.transform.DepthTransformation;
-import code.name.monkey.retromusic.transform.HingeTransformation;
-import code.name.monkey.retromusic.transform.HorizontalFlipTransformation;
-import code.name.monkey.retromusic.transform.NormalPageTransformer;
-import code.name.monkey.retromusic.transform.VerticalFlipTransformation;
-import code.name.monkey.retromusic.transform.VerticalStackTransformer;
-import code.name.monkey.retromusic.util.theme.ThemeMode;
-
-import static code.name.monkey.retromusic.helper.SortOrder.AlbumSortOrder;
-import static code.name.monkey.retromusic.helper.SortOrder.ArtistAlbumSortOrder;
-import static code.name.monkey.retromusic.helper.SortOrder.ArtistSongSortOrder;
-import static code.name.monkey.retromusic.helper.SortOrder.ArtistSortOrder;
-import static code.name.monkey.retromusic.helper.SortOrder.GenreSortOrder;
-import static code.name.monkey.retromusic.helper.SortOrder.SongSortOrder;
-
-public final class PreferenceUtil {
-
- public static final String LIBRARY_CATEGORIES = "library_categories";
- public static final String EXTRA_SONG_INFO = "extra_song_info";
- public static final String DESATURATED_COLOR = "desaturated_color";
- public static final String BLACK_THEME = "black_theme";
- public static final String KEEP_SCREEN_ON = "keep_screen_on";
- public static final String TOGGLE_HOME_BANNER = "toggle_home_banner";
- public static final String NOW_PLAYING_SCREEN_ID = "now_playing_screen_id";
- public static final String CAROUSEL_EFFECT = "carousel_effect";
- public static final String COLORED_NOTIFICATION = "colored_notification";
- public static final String CLASSIC_NOTIFICATION = "classic_notification";
- public static final String GAPLESS_PLAYBACK = "gapless_playback";
- public static final String ALBUM_ART_ON_LOCKSCREEN = "album_art_on_lockscreen";
- public static final String BLURRED_ALBUM_ART = "blurred_album_art";
- public static final String NEW_BLUR_AMOUNT = "new_blur_amount";
- public static final String TOGGLE_HEADSET = "toggle_headset";
- public static final String GENERAL_THEME = "general_theme";
- public static final String CIRCULAR_ALBUM_ART = "circular_album_art";
- public static final String USER_NAME = "user_name";
- public static final String TOGGLE_FULL_SCREEN = "toggle_full_screen";
- public static final String TOGGLE_VOLUME = "toggle_volume";
- public static final String ROUND_CORNERS = "corner_window";
- public static final String TOGGLE_GENRE = "toggle_genre";
- public static final String PROFILE_IMAGE_PATH = "profile_image_path";
- public static final String BANNER_IMAGE_PATH = "banner_image_path";
- public static final String ADAPTIVE_COLOR_APP = "adaptive_color_app";
- public static final String TOGGLE_SEPARATE_LINE = "toggle_separate_line";
- public static final String HOME_ARTIST_GRID_STYLE = "home_artist_grid_style";
- public static final String TOGGLE_ADD_CONTROLS = "toggle_add_controls";
- public static final String ALBUM_COVER_STYLE = "album_cover_style_id";
- public static final String ALBUM_COVER_TRANSFORM = "album_cover_transform";
- public static final String TAB_TEXT_MODE = "tab_text_mode";
- public static final String LANGUAGE_NAME = "language_name";
- private static final String DIALOG_CORNER = "dialog_corner";
- private static final String SLEEP_TIMER_FINISH_SONG = "sleep_timer_finish_song";
- private static final String ALBUM_GRID_STYLE = "album_grid_style_home";
- private static final String ARTIST_GRID_STYLE = "artist_grid_style_home";
- private static final String SAF_SDCARD_URI = "saf_sdcard_uri";
- private static final String SONG_SORT_ORDER = "song_sort_order";
- private static final String SONG_GRID_SIZE = "song_grid_size";
- private static final String GENRE_SORT_ORDER = "genre_sort_order";
- private static final String LAST_PAGE = "last_start_page";
- private static final String BLUETOOTH_PLAYBACK = "bluetooth_playback";
- private static final String INITIALIZED_BLACKLIST = "initialized_blacklist";
- private static final String ARTIST_SORT_ORDER = "artist_sort_order";
- private static final String ARTIST_ALBUM_SORT_ORDER = "artist_album_sort_order";
- private static final String ALBUM_SORT_ORDER = "album_sort_order";
- private static final String ALBUM_SONG_SORT_ORDER = "album_song_sort_order";
- private static final String ARTIST_SONG_SORT_ORDER = "artist_song_sort_order";
- private static final String ALBUM_GRID_SIZE = "album_grid_size";
- private static final String ALBUM_GRID_SIZE_LAND = "album_grid_size_land";
- private static final String SONG_GRID_SIZE_LAND = "song_grid_size_land";
- private static final String ARTIST_GRID_SIZE = "artist_grid_size";
- private static final String ARTIST_GRID_SIZE_LAND = "artist_grid_size_land";
- private static final String COLORED_APP_SHORTCUTS = "colored_app_shortcuts";
- private static final String AUDIO_DUCKING = "audio_ducking";
- private static final String LAST_ADDED_CUTOFF = "last_added_interval";
- private static final String LAST_SLEEP_TIMER_VALUE = "last_sleep_timer_value";
- private static final String NEXT_SLEEP_TIMER_ELAPSED_REALTIME = "next_sleep_timer_elapsed_real_time";
- private static final String IGNORE_MEDIA_STORE_ARTWORK = "ignore_media_store_artwork";
- private static final String LAST_CHANGELOG_VERSION = "last_changelog_version";
- private static final String AUTO_DOWNLOAD_IMAGES_POLICY = "auto_download_images_policy";
- private static final String START_DIRECTORY = "start_directory";
- private static final String LOCK_SCREEN = "lock_screen";
- private static final String ALBUM_DETAIL_SONG_SORT_ORDER = "album_detail_song_sort_order";
- private static final String LYRICS_OPTIONS = "lyrics_tab_position";
- private static final String CHOOSE_EQUALIZER = "choose_equalizer";
- private static final String TOGGLE_SHUFFLE = "toggle_shuffle";
- private static final String SONG_GRID_STYLE = "song_grid_style";
- private static final String PAUSE_ON_ZERO_VOLUME = "pause_on_zero_volume";
- private static final String FILTER_SONG = "filter_song";
- private static final String EXPAND_NOW_PLAYING_PANEL = "expand_now_playing_panel";
- private static PreferenceUtil sInstance;
- private final SharedPreferences mPreferences;
-
- private PreferenceUtil(@NonNull final Context context) {
- mPreferences = PreferenceManager.getDefaultSharedPreferences(context);
- }
-
- @NonNull
- public static PreferenceUtil getInstance(Context context) {
- if (sInstance == null) {
- sInstance = new PreferenceUtil(context);
- }
- return sInstance;
- }
-
- @StyleRes
- public static int getThemeResFromPrefValue(@NonNull String themePrefValue) {
- switch (themePrefValue) {
- case "light":
- return R.style.Theme_RetroMusic_Light;
- case "dark":
- default:
- return R.style.Theme_RetroMusic;
- }
- }
-
- public static boolean isAllowedToDownloadMetadata(@NonNull Context context) {
- switch (getInstance(context).autoDownloadImagesPolicy()) {
- case "always":
- return true;
- case "only_wifi":
- final ConnectivityManager connectivityManager = (ConnectivityManager) context
- .getSystemService(Context.CONNECTIVITY_SERVICE);
- NetworkInfo netInfo = null;
- if (connectivityManager != null) {
- netInfo = connectivityManager.getActiveNetworkInfo();
- }
- return netInfo != null && netInfo.getType() == ConnectivityManager.TYPE_WIFI && netInfo
- .isConnectedOrConnecting();
- case "never":
- default:
- return false;
- }
- }
-
- public final boolean albumArtOnLockscreen() {
- return mPreferences.getBoolean(ALBUM_ART_ON_LOCKSCREEN, true);
- }
-
- public final boolean audioDucking() {
- return mPreferences.getBoolean(AUDIO_DUCKING, true);
- }
-
- public final String autoDownloadImagesPolicy() {
- return mPreferences.getString(AUTO_DOWNLOAD_IMAGES_POLICY, "only_wifi");
- }
-
- public boolean bluetoothSpeaker() {
- return mPreferences.getBoolean(BLUETOOTH_PLAYBACK, false);
- }
-
- public final boolean blurredAlbumArt() {
- return mPreferences.getBoolean(BLURRED_ALBUM_ART, false);
- }
-
- public boolean carouselEffect() {
- return mPreferences.getBoolean(CAROUSEL_EFFECT, false);
- }
-
- public final boolean classicNotification() {
- return mPreferences.getBoolean(CLASSIC_NOTIFICATION, false);
- }
-
- public final boolean coloredAppShortcuts() {
- return mPreferences.getBoolean(COLORED_APP_SHORTCUTS, true);
- }
-
- public final boolean coloredNotification() {
- return mPreferences.getBoolean(COLORED_NOTIFICATION, true);
- }
-
- public boolean desaturatedColor() {
- return mPreferences.getBoolean(DESATURATED_COLOR, false);
- }
-
- public final boolean gaplessPlayback() {
- return mPreferences.getBoolean(GAPLESS_PLAYBACK, false);
- }
-
- public boolean getAdaptiveColor() {
- return mPreferences.getBoolean(ADAPTIVE_COLOR_APP, false);
- }
-
- public final AlbumCoverStyle getAlbumCoverStyle() {
- int id = mPreferences.getInt(ALBUM_COVER_STYLE, 0);
- for (AlbumCoverStyle albumCoverStyle : AlbumCoverStyle.values()) {
- if (albumCoverStyle.getId() == id) {
- return albumCoverStyle;
- }
- }
- return AlbumCoverStyle.CARD;
- }
-
- public void setAlbumCoverStyle(AlbumCoverStyle albumCoverStyle) {
- final SharedPreferences.Editor editor = mPreferences.edit();
- editor.putInt(ALBUM_COVER_STYLE, albumCoverStyle.getId());
- editor.apply();
- }
-
- public ViewPager.PageTransformer getAlbumCoverTransform() {
- int style = Integer.parseInt(Objects.requireNonNull(mPreferences.getString(ALBUM_COVER_TRANSFORM, "0")));
- switch (style) {
- default:
- case 0:
- return new NormalPageTransformer();
- case 1:
- return new CascadingPageTransformer();
- case 2:
- return new DepthTransformation();
- case 3:
- return new HorizontalFlipTransformation();
- case 4:
- return new VerticalFlipTransformation();
- case 5:
- return new HingeTransformation();
- case 6:
- return new VerticalStackTransformer();
- }
- }
-
- public String getAlbumDetailSongSortOrder() {
- return mPreferences
- .getString(ALBUM_DETAIL_SONG_SORT_ORDER, AlbumSongSortOrder.SONG_TRACK_LIST);
- }
-
- public void setAlbumDetailSongSortOrder(String sortOrder) {
- Editor edit = this.mPreferences.edit();
- edit.putString(ALBUM_DETAIL_SONG_SORT_ORDER, sortOrder);
- edit.apply();
- }
-
- public final int getAlbumGridSize(@NonNull Context context) {
- return mPreferences
- .getInt(ALBUM_GRID_SIZE, context.getResources().getInteger(R.integer.default_grid_columns));
- }
-
- public final int getAlbumGridSizeLand(@NonNull Context context) {
- return mPreferences
- .getInt(ALBUM_GRID_SIZE_LAND, context.getResources().getInteger(R.integer.default_grid_columns_land));
- }
-
-
- @LayoutRes
- public int getAlbumGridStyle() {
- return mPreferences.getInt(ALBUM_GRID_STYLE, R.layout.item_grid);
- }
-
- public void setAlbumGridStyle(int layoutRes) {
- mPreferences.edit()
- .putInt(ALBUM_GRID_STYLE, layoutRes)
- .apply();
- }
-
- public final String getAlbumSongSortOrder() {
- return mPreferences
- .getString(ALBUM_SONG_SORT_ORDER, AlbumSongSortOrder.SONG_TRACK_LIST);
- }
-
- public final String getArtistSongSortOrder() {
- return mPreferences
- .getString(ARTIST_SONG_SORT_ORDER, ArtistSongSortOrder.SONG_A_Z);
- }
-
- public final String getAlbumSortOrder() {
- return mPreferences.getString(ALBUM_SORT_ORDER, AlbumSortOrder.ALBUM_A_Z);
- }
-
- public void setAlbumSortOrder(final String sortOrder) {
- final SharedPreferences.Editor editor = mPreferences.edit();
- editor.putString(ALBUM_SORT_ORDER, sortOrder);
- editor.apply();
- }
-
- public final String getArtistAlbumSortOrder() {
- return mPreferences.getString(ARTIST_ALBUM_SORT_ORDER, ArtistAlbumSortOrder.ALBUM_A_Z);
- }
-
- public final int getArtistGridSize(Context context) {
- return mPreferences.getInt(ARTIST_GRID_SIZE,
- context.getResources().getInteger(R.integer.default_list_artist_columns));
- }
-
- public final int getArtistGridSizeLand(Context context) {
- return mPreferences.getInt(ARTIST_GRID_SIZE_LAND,
- context.getResources().getInteger(R.integer.default_list_artist_columns_land));
- }
-
- @LayoutRes
- public int getArtistGridStyle() {
- return mPreferences.getInt(ARTIST_GRID_STYLE, R.layout.item_grid_circle);
- }
-
- public void setArtistGridStyle(@LayoutRes int artistGridStyle) {
- mPreferences.edit().putInt(ARTIST_GRID_STYLE, artistGridStyle).apply();
- }
-
- public final String getArtistSortOrder() {
- return mPreferences.getString(ARTIST_SORT_ORDER, ArtistSortOrder.ARTIST_A_Z);
- }
-
- public void setArtistSortOrder(final String sortOrder) {
- final SharedPreferences.Editor editor = mPreferences.edit();
- editor.putString(ARTIST_SORT_ORDER, sortOrder);
- editor.apply();
- }
-
- public String getBannerImage() {
- return mPreferences.getString(BANNER_IMAGE_PATH, "");
- }
-
- public String getBaseTheme() {
- return mPreferences.getString(GENERAL_THEME, "auto");
- }
-
- @NonNull
- public List getDefaultLibraryCategoryInfos() {
- List defaultCategoryInfos = new ArrayList<>(8);
- defaultCategoryInfos.add(new CategoryInfo(Category.HOME, true));
- defaultCategoryInfos.add(new CategoryInfo(Category.SONGS, true));
- defaultCategoryInfos.add(new CategoryInfo(Category.ALBUMS, true));
- defaultCategoryInfos.add(new CategoryInfo(Category.ARTISTS, true));
- defaultCategoryInfos.add(new CategoryInfo(Category.PLAYLISTS, true));
- defaultCategoryInfos.add(new CategoryInfo(Category.GENRES, false));
- defaultCategoryInfos.add(new CategoryInfo(Category.QUEUE, false));
- defaultCategoryInfos.add(new CategoryInfo(Category.FOLDER, false));
- return defaultCategoryInfos;
- }
-
- public float getDialogCorner() {
- return mPreferences.getInt(DIALOG_CORNER, 16);
- }
-
- public int getFilterLength() {
- return mPreferences.getInt(FILTER_SONG, 20);
- }
-
- public boolean getFullScreenMode() {
- return mPreferences.getBoolean(TOGGLE_FULL_SCREEN, false);
- }
-
- @NonNull
- public ThemeMode getGeneralThemeValue(boolean isSystemDark) {
- String themeMode = mPreferences.getString(GENERAL_THEME, "auto");
- if (isBlackMode() && isSystemDark) {
- return ThemeMode.BLACK;
- } else if (themeMode != null) {
- if (isBlackMode() && themeMode.equals("dark")) {
- return ThemeMode.BLACK;
- } else {
- switch (themeMode) {
- case "light":
- return ThemeMode.LIGHT;
- case "dark":
- return ThemeMode.DARK;
- case "auto":
- default:
- return ThemeMode.AUTO;
- }
- }
- }
- return ThemeMode.AUTO;
- }
-
- public final String getGenreSortOrder() {
- return mPreferences.getString(GENRE_SORT_ORDER, GenreSortOrder.GENRE_A_Z);
- }
-
- public boolean getHeadsetPlugged() {
- return mPreferences.getBoolean(TOGGLE_HEADSET, false);
- }
-
- @LayoutRes
- public int getHomeGridStyle(@NonNull Context context) {
- String position = mPreferences.getString(HOME_ARTIST_GRID_STYLE, "0");
- int pos = 0;
- if (position != null) {
- pos = Integer.parseInt(position);
- }
- TypedArray typedArray = context.getResources().obtainTypedArray(R.array.pref_home_grid_style_layout);
- int layoutRes = typedArray.getResourceId(pos, 0);
- typedArray.recycle();
- if (layoutRes == 0) {
- return R.layout.item_artist;
- }
- return layoutRes;
- }
-
- public long getLastAddedCutoff() {
- final CalendarUtil calendarUtil = new CalendarUtil();
- long interval = calendarUtil.getElapsedMonth();
- String cutOff = mPreferences.getString(LAST_ADDED_CUTOFF, "this_month");
- if (cutOff != null) {
- switch (cutOff) {
- case "today":
- interval = calendarUtil.getElapsedToday();
- break;
- case "this_week":
- interval = calendarUtil.getElapsedWeek();
- break;
- case "past_three_months":
- interval = calendarUtil.getElapsedMonths(3);
- break;
- case "this_year":
- interval = calendarUtil.getElapsedYear();
- break;
- case "this_month":
- default:
- interval = calendarUtil.getElapsedMonth();
- break;
- }
- }
- return (System.currentTimeMillis() - interval) / 1000;
- }
-
- public final int getLastChangelogVersion() {
- return mPreferences.getInt(LAST_CHANGELOG_VERSION, -1);
- }
-
- public final int getLastPage() {
- return mPreferences.getInt(LAST_PAGE, R.id.action_song);
- }
-
- public void setLastPage(final int value) {
- final SharedPreferences.Editor editor = mPreferences.edit();
- editor.putInt(LAST_PAGE, value);
- editor.apply();
- }
-
- public int getLastSleepTimerValue() {
- return mPreferences.getInt(LAST_SLEEP_TIMER_VALUE, 30);
- }
-
- public void setLastSleepTimerValue(final int value) {
- final SharedPreferences.Editor editor = mPreferences.edit();
- editor.putInt(LAST_SLEEP_TIMER_VALUE, value);
- editor.apply();
- }
-
- @NonNull
- public List getLibraryCategoryInfos() {
- String data = mPreferences.getString(LIBRARY_CATEGORIES, null);
- if (data != null) {
- Gson gson = new Gson();
- Type collectionType = new TypeToken>() {
- }.getType();
-
- try {
- return gson.fromJson(data, collectionType);
- } catch (JsonSyntaxException e) {
- e.printStackTrace();
- }
- }
-
- return getDefaultLibraryCategoryInfos();
- }
-
- public void setLibraryCategoryInfos(List categories) {
- Gson gson = new Gson();
- Type collectionType = new TypeToken>() {
- }.getType();
-
- final SharedPreferences.Editor editor = mPreferences.edit();
- editor.putString(LIBRARY_CATEGORIES, gson.toJson(categories, collectionType));
- editor.apply();
- }
-
- public boolean getLockScreen() {
- return mPreferences.getBoolean(LOCK_SCREEN, false);
- }
-
- public int getLyricsOptions() {
- return mPreferences.getInt(LYRICS_OPTIONS, 1);
- }
-
- public void setLyricsOptions(int i) {
- mPreferences.edit().putInt(LYRICS_OPTIONS, i).apply();
- }
-
- public long getNextSleepTimerElapsedRealTime() {
- return mPreferences.getLong(NEXT_SLEEP_TIMER_ELAPSED_REALTIME, -1);
- }
-
- public final NowPlayingScreen getNowPlayingScreen() {
- int id = mPreferences.getInt(NOW_PLAYING_SCREEN_ID, 0);
- for (NowPlayingScreen nowPlayingScreen : NowPlayingScreen.values()) {
- if (nowPlayingScreen.getId() == id) {
- return nowPlayingScreen;
- }
- }
- return NowPlayingScreen.Adaptive;
- }
-
- @SuppressLint("CommitPrefEdits")
- public void setNowPlayingScreen(NowPlayingScreen nowPlayingScreen) {
- final SharedPreferences.Editor editor = mPreferences.edit();
- editor.putInt(NOW_PLAYING_SCREEN_ID, nowPlayingScreen.getId());
- editor.apply();
- }
-
-
- public final String getSAFSDCardUri() {
- return mPreferences.getString(SAF_SDCARD_URI, "");
- }
-
- public final void setSAFSDCardUri(Uri uri) {
- mPreferences.edit().putString(SAF_SDCARD_URI, uri.toString()).apply();
- }
-
- public String getSelectedEqualizer() {
- return mPreferences.getString(CHOOSE_EQUALIZER, "system");
- }
-
- public boolean getSleepTimerFinishMusic() {
- return mPreferences.getBoolean(SLEEP_TIMER_FINISH_SONG, false);
- }
-
- public void setSleepTimerFinishMusic(final boolean value) {
- final SharedPreferences.Editor editor = mPreferences.edit();
- editor.putBoolean(SLEEP_TIMER_FINISH_SONG, value);
- editor.apply();
- }
-
- public final int getSongGridSize(Context context) {
- return mPreferences
- .getInt(SONG_GRID_SIZE, context.getResources().getInteger(R.integer.default_list_columns));
- }
-
- public final int getSongGridSizeLand(Context context) {
- return mPreferences.getInt(SONG_GRID_SIZE_LAND,
- context.getResources().getInteger(R.integer.default_list_columns_land));
- }
-
- public int getSongGridStyle() {
- return mPreferences.getInt(SONG_GRID_STYLE, R.layout.item_list);
- }
-
- public void setSongGridStyle(int viewAs) {
- mPreferences.edit().putInt(SONG_GRID_STYLE, viewAs).apply();
- }
-
- public final String getSongSortOrder() {
- return mPreferences.getString(SONG_SORT_ORDER, SongSortOrder.SONG_A_Z);
- }
-
- public void setSongSortOrder(final String sortOrder) {
- final SharedPreferences.Editor editor = mPreferences.edit();
- editor.putString(SONG_SORT_ORDER, sortOrder);
- editor.apply();
- }
-
- public final File getStartDirectory() {
- String folderPath = FoldersFragment.getDefaultStartDirectory().getPath();
- String file = mPreferences.getString(START_DIRECTORY, folderPath);
- if (file != null) {
- return new File(file);
- }
- return new File(FoldersFragment.getDefaultStartDirectory().getPath());
- }
-
- public void setStartDirectory(File file) {
- final SharedPreferences.Editor editor = mPreferences.edit();
- editor.putString(START_DIRECTORY, FileUtil.safeGetCanonicalPath(file));
- editor.apply();
- }
-
- @LabelVisibilityMode
- public int getTabTitleMode() {
- String textMode = mPreferences.getString(TAB_TEXT_MODE, "1");
- int mode = 0;
- if (textMode != null) {
- mode = Integer.parseInt(textMode);
- }
- switch (mode) {
- default:
- case 1:
- return LabelVisibilityMode.LABEL_VISIBILITY_LABELED;
- case 0:
- return LabelVisibilityMode.LABEL_VISIBILITY_AUTO;
- case 2:
- return LabelVisibilityMode.LABEL_VISIBILITY_SELECTED;
- case 3:
- return LabelVisibilityMode.LABEL_VISIBILITY_UNLABELED;
- }
- }
-
-
- public String getUserName() {
- return mPreferences.getString(USER_NAME, "User");
- }
-
- public void setUserName(String name) {
- mPreferences.edit().putString(USER_NAME, name).apply();
- }
-
- public boolean getVolumeToggle() {
- return mPreferences.getBoolean(TOGGLE_VOLUME, false);
- }
-
- public final boolean ignoreMediaStoreArtwork() {
- return mPreferences.getBoolean(IGNORE_MEDIA_STORE_ARTWORK, false);
- }
-
- public final boolean initializedBlacklist() {
- return mPreferences.getBoolean(INITIALIZED_BLACKLIST, false);
- }
-
- private boolean isBlackMode() {
- return mPreferences.getBoolean(BLACK_THEME, false);
- }
-
-
- public boolean isExtraControls() {
- return mPreferences.getBoolean(TOGGLE_ADD_CONTROLS, false);
- }
-
-
- public final boolean isHomeBanner() {
- return mPreferences.getBoolean(TOGGLE_HOME_BANNER, false);
- }
-
- public boolean isRoundCorners() {
- return mPreferences.getBoolean(ROUND_CORNERS, false);
- }
-
- public boolean isScreenOnEnabled() {
- return mPreferences.getBoolean(KEEP_SCREEN_ON, false);
- }
-
- public boolean isShuffleModeOn() {
- return mPreferences.getBoolean(TOGGLE_SHUFFLE, false);
- }
-
-
- public boolean isSongInfo() {
- return mPreferences.getBoolean(EXTRA_SONG_INFO, false);
- }
-
- public boolean pauseOnZeroVolume() {
- return mPreferences.getBoolean(PAUSE_ON_ZERO_VOLUME, false);
- }
-
- public void registerOnSharedPreferenceChangedListener(
- SharedPreferences.OnSharedPreferenceChangeListener sharedPreferenceChangeListener) {
- mPreferences.registerOnSharedPreferenceChangeListener(sharedPreferenceChangeListener);
- }
-
-
- public void setAlbumGridSize(final int gridSize) {
- final SharedPreferences.Editor editor = mPreferences.edit();
- editor.putInt(ALBUM_GRID_SIZE, gridSize);
- editor.apply();
- }
-
- public void setAlbumGridSizeLand(final int gridSize) {
- final SharedPreferences.Editor editor = mPreferences.edit();
- editor.putInt(ALBUM_GRID_SIZE_LAND, gridSize);
- editor.apply();
- }
-
-
- public void setArtistGridSize(final int gridSize) {
- final SharedPreferences.Editor editor = mPreferences.edit();
- editor.putInt(ARTIST_GRID_SIZE, gridSize);
- editor.apply();
- }
-
- public void setArtistGridSizeLand(final int gridSize) {
- final SharedPreferences.Editor editor = mPreferences.edit();
- editor.putInt(ARTIST_GRID_SIZE_LAND, gridSize);
- editor.apply();
- }
-
- public void setBannerImagePath(String bannerImagePath) {
- mPreferences.edit().putString(BANNER_IMAGE_PATH, bannerImagePath)
- .apply();
- }
-
- public void setClassicNotification(final boolean value) {
- final SharedPreferences.Editor editor = mPreferences.edit();
- editor.putBoolean(CLASSIC_NOTIFICATION, value);
- editor.apply();
- }
-
- public void setColoredAppShortcuts(final boolean value) {
- final SharedPreferences.Editor editor = mPreferences.edit();
- editor.putBoolean(COLORED_APP_SHORTCUTS, value);
- editor.apply();
- }
-
- public final void setColoredNotification(boolean b) {
- mPreferences.edit().putBoolean(COLORED_NOTIFICATION, b).apply();
- }
-
- public void setDesaturatedColor(boolean value) {
- final SharedPreferences.Editor editor = mPreferences.edit();
- editor.putBoolean(DESATURATED_COLOR, value);
- editor.apply();
- }
-
- public void setInitializedBlacklist() {
- final Editor editor = mPreferences.edit();
- editor.putBoolean(INITIALIZED_BLACKLIST, true);
- editor.apply();
- }
-
- public void setLastChangeLogVersion(int version) {
- mPreferences.edit().putInt(LAST_CHANGELOG_VERSION, version).apply();
- }
-
-
- public void setNextSleepTimerElapsedRealtime(final long value) {
- final SharedPreferences.Editor editor = mPreferences.edit();
- editor.putLong(NEXT_SLEEP_TIMER_ELAPSED_REALTIME, value);
- editor.apply();
- }
-
- public void setSongGridSize(final int gridSize) {
- final SharedPreferences.Editor editor = mPreferences.edit();
- editor.putInt(SONG_GRID_SIZE, gridSize);
- editor.apply();
- }
-
- public void setSongGridSizeLand(final int gridSize) {
- final SharedPreferences.Editor editor = mPreferences.edit();
- editor.putInt(SONG_GRID_SIZE_LAND, gridSize);
- editor.apply();
- }
-
- public void unregisterOnSharedPreferenceChangedListener(
- @NonNull OnSharedPreferenceChangeListener sharedPreferenceChangeListener) {
- mPreferences.unregisterOnSharedPreferenceChangeListener(sharedPreferenceChangeListener);
- }
-
- public boolean isExpandPanel() {
- return mPreferences.getBoolean(EXPAND_NOW_PLAYING_PANEL, false);
- }
-
- public String getLanguageCode() {
- return mPreferences.getString(LANGUAGE_NAME, "auto");
- }
-}
diff --git a/app/src/main/java/code/name/monkey/retromusic/util/PreferenceUtil.kt b/app/src/main/java/code/name/monkey/retromusic/util/PreferenceUtil.kt
new file mode 100644
index 000000000..d01451cc7
--- /dev/null
+++ b/app/src/main/java/code/name/monkey/retromusic/util/PreferenceUtil.kt
@@ -0,0 +1,552 @@
+package code.name.monkey.retromusic.util
+
+import android.content.SharedPreferences.OnSharedPreferenceChangeListener
+import android.net.ConnectivityManager
+import android.net.NetworkInfo
+import androidx.core.content.ContextCompat
+import androidx.core.content.edit
+import androidx.preference.PreferenceManager
+import androidx.viewpager.widget.ViewPager
+import code.name.monkey.retromusic.*
+import code.name.monkey.retromusic.extensions.getIntRes
+import code.name.monkey.retromusic.extensions.getStringOrDefault
+import code.name.monkey.retromusic.fragments.AlbumCoverStyle
+import code.name.monkey.retromusic.fragments.NowPlayingScreen
+import code.name.monkey.retromusic.fragments.mainactivity.FoldersFragment
+import code.name.monkey.retromusic.helper.SortOrder.*
+import code.name.monkey.retromusic.model.CategoryInfo
+import code.name.monkey.retromusic.transform.*
+import code.name.monkey.retromusic.util.theme.ThemeMode
+import com.google.android.material.bottomnavigation.LabelVisibilityMode
+import com.google.gson.Gson
+import com.google.gson.JsonSyntaxException
+import com.google.gson.reflect.TypeToken
+import java.io.File
+
+object PreferenceUtilKT {
+ private val sharedPreferences = PreferenceManager.getDefaultSharedPreferences(App.getContext())
+
+ val defaultCategories = listOf(
+ CategoryInfo(CategoryInfo.Category.HOME, true),
+ CategoryInfo(CategoryInfo.Category.SONGS, true),
+ CategoryInfo(CategoryInfo.Category.ALBUMS, true),
+ CategoryInfo(CategoryInfo.Category.ARTISTS, true),
+ CategoryInfo(CategoryInfo.Category.PLAYLISTS, true),
+ CategoryInfo(CategoryInfo.Category.GENRES, false),
+ CategoryInfo(CategoryInfo.Category.QUEUE, false),
+ CategoryInfo(CategoryInfo.Category.FOLDER, false)
+ )
+
+ var libraryCategory: List
+ get() {
+ val gson = Gson()
+ val collectionType = object : TypeToken>() {}.type
+
+ val data = sharedPreferences.getStringOrDefault(
+ LIBRARY_CATEGORIES,
+ gson.toJson(defaultCategories, collectionType)
+ )
+ return try {
+ Gson().fromJson(data, collectionType)
+ } catch (e: JsonSyntaxException) {
+ e.printStackTrace()
+ return defaultCategories
+ }
+ }
+ set(value) {
+ val collectionType = object : TypeToken?>() {}.type
+ sharedPreferences.edit {
+ putString(LIBRARY_CATEGORIES, Gson().toJson(value, collectionType))
+ }
+ }
+
+ fun registerOnSharedPreferenceChangedListener(
+ changeListener: OnSharedPreferenceChangeListener
+ ) {
+ sharedPreferences.registerOnSharedPreferenceChangeListener(changeListener)
+ }
+
+ fun unregisterOnSharedPreferenceChangedListener(
+ changeListener: OnSharedPreferenceChangeListener
+ ) {
+ sharedPreferences.unregisterOnSharedPreferenceChangeListener(changeListener)
+ }
+
+ val baseTheme get() = sharedPreferences.getStringOrDefault(GENERAL_THEME, "auto")
+
+ fun getGeneralThemeValue(isSystemDark: Boolean): ThemeMode {
+ val themeMode: String =
+ sharedPreferences.getStringOrDefault(GENERAL_THEME, "auto")
+ return if (isBlackMode && isSystemDark) {
+ ThemeMode.BLACK
+ } else {
+ if (isBlackMode && themeMode == "dark") {
+ ThemeMode.BLACK
+ } else {
+ when (themeMode) {
+ "light" -> ThemeMode.LIGHT
+ "dark" -> ThemeMode.DARK
+ "auto" -> ThemeMode.AUTO
+ else -> ThemeMode.AUTO
+ }
+ }
+ }
+ }
+
+ val languageCode get() = sharedPreferences.getString(LANGUAGE_NAME, "auto")
+
+ var userName
+ get() = sharedPreferences.getString(USER_NAME, "User Name")
+ set(value) = sharedPreferences.edit {
+ putString(USER_NAME, value)
+ }
+
+ var safSdCardUri
+ get() = sharedPreferences.getStringOrDefault(SAF_SDCARD_URI, "")
+ set(value) = sharedPreferences.edit {
+ putString(SAF_SDCARD_URI, value)
+ }
+
+
+ val selectedEqualizer
+ get() = sharedPreferences.getStringOrDefault(
+ CHOOSE_EQUALIZER,
+ "system"
+ )
+
+ val autoDownloadImagesPolicy
+ get() = sharedPreferences.getStringOrDefault(
+ AUTO_DOWNLOAD_IMAGES_POLICY,
+ "only_wifi"
+ )
+
+ var albumDetailSongSortOrder
+ get() = sharedPreferences.getStringOrDefault(
+ ALBUM_DETAIL_SONG_SORT_ORDER,
+ AlbumSongSortOrder.SONG_TRACK_LIST
+ )
+ set(value) = sharedPreferences.edit { putString(ALBUM_DETAIL_SONG_SORT_ORDER, value) }
+
+ var songSortOrder
+ get() = sharedPreferences.getStringOrDefault(
+ SONG_SORT_ORDER,
+ SongSortOrder.SONG_A_Z
+ )
+ set(value) = sharedPreferences.edit {
+ putString(SONG_SORT_ORDER, value)
+ }
+
+ var albumSortOrder
+ get() = sharedPreferences.getStringOrDefault(
+ ALBUM_SORT_ORDER,
+ AlbumSortOrder.ALBUM_A_Z
+ )
+ set(value) = sharedPreferences.edit {
+ putString(ALBUM_SORT_ORDER, value)
+ }
+
+ var artistSortOrder
+ get() = sharedPreferences.getStringOrDefault(
+ ARTIST_SORT_ORDER,
+ AlbumSortOrder.ALBUM_A_Z
+ )
+ set(value) = sharedPreferences.edit {
+ putString(ARTIST_SORT_ORDER, value)
+ }
+
+ val albumSongSortOrder
+ get() = sharedPreferences.getStringOrDefault(
+ ALBUM_SONG_SORT_ORDER,
+ AlbumSongSortOrder.SONG_TRACK_LIST
+ )
+
+ val artistSongSortOrder
+ get() = sharedPreferences.getStringOrDefault(
+ ARTIST_SONG_SORT_ORDER,
+ AlbumSongSortOrder.SONG_TRACK_LIST
+ )
+
+ val artistAlbumSortOrder
+ get() = sharedPreferences.getStringOrDefault(
+ ARTIST_ALBUM_SORT_ORDER,
+ ArtistAlbumSortOrder.ALBUM_A_Z
+ )
+
+ val genreSortOrder
+ get() = sharedPreferences.getStringOrDefault(
+ GENRE_SORT_ORDER,
+ GenreSortOrder.GENRE_A_Z
+ )
+
+ val isIgnoreMediaStoreArtwork
+ get() = sharedPreferences.getBoolean(
+ IGNORE_MEDIA_STORE_ARTWORK,
+ false
+ )
+
+ val isVolumeVisibilityMode
+ get() = sharedPreferences.getBoolean(
+ TOGGLE_VOLUME, false
+ )
+
+ var isInitializedBlacklist
+ get() = sharedPreferences.getBoolean(
+ INITIALIZED_BLACKLIST, false
+ )
+ set(value) = sharedPreferences.edit {
+ putBoolean(INITIALIZED_BLACKLIST, value)
+ }
+
+ private val isBlackMode
+ get() = sharedPreferences.getBoolean(
+ BLACK_THEME, false
+ )
+
+ val isExtraControls
+ get() = sharedPreferences.getBoolean(
+ TOGGLE_ADD_CONTROLS, false
+ )
+
+ val isHomeBanner
+ get() = sharedPreferences.getBoolean(
+ TOGGLE_HOME_BANNER, false
+ )
+ var isClassicNotification
+ get() = sharedPreferences.getBoolean(CLASSIC_NOTIFICATION, false)
+ set(value) = sharedPreferences.edit { putBoolean(CLASSIC_NOTIFICATION, value) }
+
+ val isScreenOnEnabled get() = sharedPreferences.getBoolean(KEEP_SCREEN_ON, false)
+
+ val isShuffleModeOn get() = sharedPreferences.getBoolean(TOGGLE_SHUFFLE, false)
+
+ val isSongInfo get() = sharedPreferences.getBoolean(EXTRA_SONG_INFO, false)
+
+ val isPauseOnZeroVolume get() = sharedPreferences.getBoolean(PAUSE_ON_ZERO_VOLUME, false)
+
+ var isSleepTimerFinishMusic
+ get() = sharedPreferences.getBoolean(
+ SLEEP_TIMER_FINISH_SONG, false
+ )
+ set(value) = sharedPreferences.edit {
+ putBoolean(SLEEP_TIMER_FINISH_SONG, value)
+ }
+
+ val isExpandPanel get() = sharedPreferences.getBoolean(EXPAND_NOW_PLAYING_PANEL, false)
+
+ val isHeadsetPlugged
+ get() = sharedPreferences.getBoolean(
+ TOGGLE_HEADSET, false
+ )
+
+ val isAlbumArtOnLockScreen
+ get() = sharedPreferences.getBoolean(
+ ALBUM_ART_ON_LOCKSCREEN, false
+ )
+
+ val isAudioDucking
+ get() = sharedPreferences.getBoolean(
+ AUDIO_DUCKING, true
+ )
+
+ val isBluetoothSpeaker
+ get() = sharedPreferences.getBoolean(
+ BLUETOOTH_PLAYBACK, false
+ )
+
+ val isBlurredAlbumArt
+ get() = sharedPreferences.getBoolean(
+ BLURRED_ALBUM_ART, false
+ )
+
+ val isCarouselEffect
+ get() = sharedPreferences.getBoolean(
+ CAROUSEL_EFFECT, false
+ )
+
+ var isColoredAppShortcuts
+ get() = sharedPreferences.getBoolean(
+ COLORED_APP_SHORTCUTS, true
+ )
+ set(value) = sharedPreferences.edit {
+ putBoolean(COLORED_APP_SHORTCUTS, value)
+ }
+
+ var isColoredNotification
+ get() = sharedPreferences.getBoolean(
+ COLORED_NOTIFICATION, true
+ )
+ set(value) = sharedPreferences.edit {
+ putBoolean(COLORED_NOTIFICATION, value)
+ }
+
+ var isDesaturatedColor
+ get() = sharedPreferences.getBoolean(
+ DESATURATED_COLOR, false
+ )
+ set(value) = sharedPreferences.edit {
+ putBoolean(DESATURATED_COLOR, value)
+ }
+
+ val isGapLessPlayback
+ get() = sharedPreferences.getBoolean(
+ GAPLESS_PLAYBACK, false
+ )
+
+ val isAdaptiveColor
+ get() = sharedPreferences.getBoolean(
+ ADAPTIVE_COLOR_APP, false
+ )
+
+ val isFullScreenMode
+ get() = sharedPreferences.getBoolean(
+ TOGGLE_FULL_SCREEN, false
+ )
+
+ val isLockScreen get() = sharedPreferences.getBoolean(LOCK_SCREEN, false)
+
+ fun isAllowedToDownloadMetadata(): Boolean {
+ return when (autoDownloadImagesPolicy) {
+ "always" -> true
+ "only_wifi" -> {
+ val connectivityManager = ContextCompat.getSystemService(
+ App.getContext(),
+ ConnectivityManager::class.java
+ )
+ var netInfo: NetworkInfo? = null
+ if (connectivityManager != null) {
+ netInfo = connectivityManager.activeNetworkInfo
+ }
+ netInfo != null && netInfo.type == ConnectivityManager.TYPE_WIFI && netInfo.isConnectedOrConnecting
+ }
+ "never" -> false
+ else -> false
+ }
+ }
+
+
+ var lyricsOption
+ get() = sharedPreferences.getInt(LYRICS_OPTIONS, 1)
+ set(value) = sharedPreferences.edit {
+ putInt(LYRICS_OPTIONS, value)
+ }
+
+ var songGridStyle
+ get() = sharedPreferences.getInt(SONG_GRID_STYLE, R.layout.item_grid)
+ set(value) = sharedPreferences.edit {
+ putInt(SONG_GRID_STYLE, value)
+ }
+
+ var albumGridStyle
+ get() = sharedPreferences.getInt(ALBUM_GRID_STYLE, R.layout.item_grid)
+ set(value) = sharedPreferences.edit {
+ putInt(ALBUM_GRID_STYLE, value)
+ }
+
+ var artistGridStyle
+ get() = sharedPreferences.getInt(ARTIST_GRID_STYLE, R.layout.item_grid_circle)
+ set(value) = sharedPreferences.edit {
+ putInt(ARTIST_GRID_STYLE, value)
+ }
+
+ val filterLength get() = sharedPreferences.getInt(FILTER_SONG, 20)
+
+ var lastVersion
+ get() = sharedPreferences.getInt(LAST_CHANGELOG_VERSION, 0)
+ set(value) = sharedPreferences.edit {
+ putInt(LAST_CHANGELOG_VERSION, value)
+ }
+
+ var lastSleepTimerValue
+ get() = sharedPreferences.getInt(
+ LAST_SLEEP_TIMER_VALUE,
+ 30
+ )
+ set(value) = sharedPreferences.edit {
+ putInt(LAST_SLEEP_TIMER_VALUE, value)
+ }
+
+ var lastPage
+ get() = sharedPreferences.getInt(LAST_PAGE, R.id.action_song)
+ set(value) = sharedPreferences.edit {
+ putInt(LAST_PAGE, value)
+ }
+
+ var nextSleepTimerElapsedRealTime
+ get() = sharedPreferences.getInt(
+ NEXT_SLEEP_TIMER_ELAPSED_REALTIME,
+ -1
+ )
+ set(value) = sharedPreferences.edit {
+ putInt(NEXT_SLEEP_TIMER_ELAPSED_REALTIME, value)
+ }
+
+ fun themeResFromPrefValue(themePrefValue: String): Int {
+ return when (themePrefValue) {
+ "light" -> R.style.Theme_RetroMusic_Light
+ "dark" -> R.style.Theme_RetroMusic
+ else -> R.style.Theme_RetroMusic
+ }
+ }
+
+ val homeGridStyle: Int
+ get() {
+ val position =
+ sharedPreferences.getStringOrDefault(
+ HOME_ARTIST_GRID_STYLE, "0"
+ ).toInt()
+ val typedArray =
+ App.getContext().resources.obtainTypedArray(R.array.pref_home_grid_style_layout)
+ val layoutRes = typedArray.getResourceId(position, 0)
+ typedArray.recycle()
+ return if (layoutRes == 0) {
+ R.layout.item_artist
+ } else layoutRes
+ }
+
+ val tabTitleMode: Int
+ get() {
+ return when (sharedPreferences.getStringOrDefault(
+ TAB_TEXT_MODE, "1"
+ ).toInt()) {
+ 1 -> LabelVisibilityMode.LABEL_VISIBILITY_LABELED
+ 0 -> LabelVisibilityMode.LABEL_VISIBILITY_AUTO
+ 2 -> LabelVisibilityMode.LABEL_VISIBILITY_SELECTED
+ 3 -> LabelVisibilityMode.LABEL_VISIBILITY_UNLABELED
+ else -> LabelVisibilityMode.LABEL_VISIBILITY_LABELED
+ }
+ }
+
+
+ var songGridSize
+ get() = sharedPreferences.getInt(
+ SONG_GRID_SIZE,
+ App.getContext().getIntRes(R.integer.default_grid_columns)
+ )
+ set(value) = sharedPreferences.edit {
+ putInt(SONG_GRID_SIZE, value)
+ }
+
+ var songGridSizeLand
+ get() = sharedPreferences.getInt(
+ SONG_GRID_SIZE_LAND,
+ App.getContext().getIntRes(R.integer.default_grid_columns_land)
+ )
+ set(value) = sharedPreferences.edit {
+ putInt(SONG_GRID_SIZE_LAND, value)
+ }
+
+
+ var albumGridSize: Int
+ get() = sharedPreferences.getInt(
+ ALBUM_GRID_SIZE,
+ App.getContext().getIntRes(R.integer.default_grid_columns)
+ )
+ set(value) = sharedPreferences.edit {
+ putInt(ALBUM_GRID_SIZE, value)
+ }
+
+
+ var albumGridSizeLand
+ get() = sharedPreferences.getInt(
+ ALBUM_GRID_SIZE_LAND,
+ App.getContext().getIntRes(R.integer.default_grid_columns_land)
+ )
+ set(value) = sharedPreferences.edit {
+ putInt(ALBUM_GRID_SIZE_LAND, value)
+ }
+
+
+ var artistGridSize
+ get() = sharedPreferences.getInt(
+ ARTIST_GRID_SIZE,
+ App.getContext().getIntRes(R.integer.default_grid_columns)
+ )
+ set(value) = sharedPreferences.edit {
+ putInt(ARTIST_GRID_SIZE, value)
+ }
+
+
+ var artistGridSizeLand
+ get() = sharedPreferences.getInt(
+ ALBUM_GRID_SIZE_LAND,
+ App.getContext().getIntRes(R.integer.default_grid_columns_land)
+ )
+ set(value) = sharedPreferences.edit {
+ putInt(ALBUM_GRID_SIZE_LAND, value)
+ }
+
+
+ var albumCoverStyle: AlbumCoverStyle
+ get() {
+ val id: Int = sharedPreferences.getInt(ALBUM_COVER_STYLE, 0)
+ for (albumCoverStyle in AlbumCoverStyle.values()) {
+ if (albumCoverStyle.id == id) {
+ return albumCoverStyle
+ }
+ }
+ return AlbumCoverStyle.CARD
+ }
+ set(value) = sharedPreferences.edit { putInt(ALBUM_COVER_STYLE, value.id) }
+
+
+ var nowPlayingScreen: NowPlayingScreen
+ get() {
+ val id: Int = sharedPreferences.getInt(NOW_PLAYING_SCREEN_ID, 0)
+ for (nowPlayingScreen in NowPlayingScreen.values()) {
+ if (nowPlayingScreen.id == id) {
+ return nowPlayingScreen
+ }
+ }
+ return NowPlayingScreen.Adaptive
+ }
+ set(value) = sharedPreferences.edit {
+ putInt(NOW_PLAYING_SCREEN_ID, value.id)
+ }
+
+ val albumCoverTransform: ViewPager.PageTransformer
+ get() {
+ val style = sharedPreferences.getStringOrDefault(
+ ALBUM_COVER_TRANSFORM,
+ "0"
+ ).toInt()
+ return when (style) {
+ 0 -> NormalPageTransformer()
+ 1 -> CascadingPageTransformer()
+ 2 -> DepthTransformation()
+ 3 -> HorizontalFlipTransformation()
+ 4 -> VerticalFlipTransformation()
+ 5 -> HingeTransformation()
+ 6 -> VerticalStackTransformer()
+ else -> NormalPageTransformer()
+ }
+ }
+
+ var startDirectory: File
+ get() {
+ val folderPath = FoldersFragment.getDefaultStartDirectory().path
+ val filePath: String = sharedPreferences.getStringOrDefault(START_DIRECTORY, folderPath)
+ return File(filePath) ?: File(FoldersFragment.getDefaultStartDirectory().path)
+ }
+ set(value) = sharedPreferences.edit {
+ putString(
+ START_DIRECTORY,
+ FileUtil.safeGetCanonicalPath(value)
+ )
+ }
+
+ val lastAddedCutoff: Long
+ get() {
+ val calendarUtil = CalendarUtil()
+ val interval =
+ when (sharedPreferences.getStringOrDefault(LAST_ADDED_CUTOFF, "this_month")) {
+ "today" -> calendarUtil.elapsedToday
+ "this_week" -> calendarUtil.elapsedWeek
+ "past_three_months" -> calendarUtil.getElapsedMonths(3)
+ "this_year" -> calendarUtil.elapsedYear
+ "this_month" -> calendarUtil.elapsedMonth
+ else -> calendarUtil.elapsedMonth
+ }
+ return (System.currentTimeMillis() - interval) / 1000
+ }
+
+}
diff --git a/app/src/main/java/code/name/monkey/retromusic/util/PremiumShow.kt b/app/src/main/java/code/name/monkey/retromusic/util/PremiumShow.kt
index 32adff228..e85870d79 100644
--- a/app/src/main/java/code/name/monkey/retromusic/util/PremiumShow.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/util/PremiumShow.kt
@@ -10,6 +10,7 @@ object PremiumShow {
private const val PREF_NAME = "premium_show"
private const val LAUNCH_COUNT = "launch_count"
private const val DATE_FIRST_LAUNCH = "date_first_launch"
+
@JvmStatic
fun launch(context: Context) {
val pref = context.getSharedPreferences(PREF_NAME, Context.MODE_PRIVATE)
diff --git a/app/src/main/java/code/name/monkey/retromusic/util/RetroUtil.java b/app/src/main/java/code/name/monkey/retromusic/util/RetroUtil.java
index d4f5d3680..6a62c1cf0 100755
--- a/app/src/main/java/code/name/monkey/retromusic/util/RetroUtil.java
+++ b/app/src/main/java/code/name/monkey/retromusic/util/RetroUtil.java
@@ -142,7 +142,7 @@ public class RetroUtil {
}
public static boolean isAllowedToDownloadMetadata(final @NonNull Context context) {
- switch (PreferenceUtil.getInstance(context).autoDownloadImagesPolicy()) {
+ switch (PreferenceUtilKT.INSTANCE.getAutoDownloadImagesPolicy()) {
case "always":
return true;
case "only_wifi":
diff --git a/app/src/main/java/code/name/monkey/retromusic/util/RingtoneManager.kt b/app/src/main/java/code/name/monkey/retromusic/util/RingtoneManager.kt
index 75ce21381..6d99d0bb0 100644
--- a/app/src/main/java/code/name/monkey/retromusic/util/RingtoneManager.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/util/RingtoneManager.kt
@@ -26,9 +26,7 @@ import android.widget.Toast
import code.name.monkey.retromusic.R
import code.name.monkey.retromusic.model.Song
import code.name.monkey.retromusic.util.MusicUtil.getSongFileUri
-import com.afollestad.materialdialogs.LayoutMode
import com.afollestad.materialdialogs.MaterialDialog
-import com.afollestad.materialdialogs.bottomsheets.BottomSheet
class RingtoneManager(val context: Context) {
fun setRingtone(song: Song) {
@@ -76,7 +74,6 @@ class RingtoneManager(val context: Context) {
fun getDialog(context: Context): MaterialDialog {
return MaterialDialog(context).show {
- cornerRadius(PreferenceUtil.getInstance(context).dialogCorner)
title(R.string.dialog_title_set_ringtone)
message(R.string.dialog_message_set_ringtone)
positiveButton(android.R.string.ok) {
diff --git a/app/src/main/java/code/name/monkey/retromusic/util/SAFUtil.java b/app/src/main/java/code/name/monkey/retromusic/util/SAFUtil.java
index d8d2af696..725747923 100644
--- a/app/src/main/java/code/name/monkey/retromusic/util/SAFUtil.java
+++ b/app/src/main/java/code/name/monkey/retromusic/util/SAFUtil.java
@@ -119,19 +119,19 @@ public class SAFUtil {
public static void saveTreeUri(Context context, Intent data) {
Uri uri = data.getData();
context.getContentResolver().takePersistableUriPermission(uri, Intent.FLAG_GRANT_WRITE_URI_PERMISSION | Intent.FLAG_GRANT_READ_URI_PERMISSION);
- PreferenceUtil.getInstance(context).setSAFSDCardUri(uri);
+ PreferenceUtilKT.INSTANCE.setSafSdCardUri(uri.toString());
}
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
public static boolean isTreeUriSaved(Context context) {
- return !TextUtils.isEmpty(PreferenceUtil.getInstance(context).getSAFSDCardUri());
+ return !TextUtils.isEmpty(PreferenceUtilKT.INSTANCE.getSafSdCardUri());
}
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
public static boolean isSDCardAccessGranted(Context context) {
if (!isTreeUriSaved(context)) return false;
- String sdcardUri = PreferenceUtil.getInstance(context).getSAFSDCardUri();
+ String sdcardUri = PreferenceUtilKT.INSTANCE.getSafSdCardUri();
List perms = context.getContentResolver().getPersistedUriPermissions();
for (UriPermission perm : perms) {
@@ -198,7 +198,7 @@ public class SAFUtil {
if (isTreeUriSaved(context)) {
List pathSegments = new ArrayList<>(Arrays.asList(audio.getFile().getAbsolutePath().split("/")));
- Uri sdcard = Uri.parse(PreferenceUtil.getInstance(context).getSAFSDCardUri());
+ Uri sdcard = Uri.parse(PreferenceUtilKT.INSTANCE.getSafSdCardUri());
uri = findDocument(DocumentFile.fromTreeUri(context, sdcard), pathSegments);
}
@@ -271,7 +271,7 @@ public class SAFUtil {
if (isTreeUriSaved(context)) {
List pathSegments = new ArrayList<>(Arrays.asList(path.split("/")));
- Uri sdcard = Uri.parse(PreferenceUtil.getInstance(context).getSAFSDCardUri());
+ Uri sdcard = Uri.parse(PreferenceUtilKT.INSTANCE.getSafSdCardUri());
uri = findDocument(DocumentFile.fromTreeUri(context, sdcard), pathSegments);
}
diff --git a/app/src/main/java/code/name/monkey/retromusic/util/ViewUtil.kt b/app/src/main/java/code/name/monkey/retromusic/util/ViewUtil.kt
index b256915d9..d20338fbf 100644
--- a/app/src/main/java/code/name/monkey/retromusic/util/ViewUtil.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/util/ViewUtil.kt
@@ -41,7 +41,8 @@ object ViewUtil {
if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.LOLLIPOP_MR1) {
val layerDrawable = progressSlider.progressDrawable as LayerDrawable
val progressDrawable = layerDrawable.findDrawableByLayerId(android.R.id.progress)
- progressDrawable.colorFilter = BlendModeColorFilterCompat.createBlendModeColorFilterCompat(newColor, SRC_IN)
+ progressDrawable.colorFilter =
+ BlendModeColorFilterCompat.createBlendModeColorFilterCompat(newColor, SRC_IN)
} else {
progressSlider.progressTintList = ColorStateList.valueOf(newColor)
}
diff --git a/app/src/main/java/code/name/monkey/retromusic/util/theme/ThemeManager.kt b/app/src/main/java/code/name/monkey/retromusic/util/theme/ThemeManager.kt
index 409cbc150..106ecb994 100644
--- a/app/src/main/java/code/name/monkey/retromusic/util/theme/ThemeManager.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/util/theme/ThemeManager.kt
@@ -1,13 +1,10 @@
package code.name.monkey.retromusic.util.theme
import android.content.Context
-import android.content.res.Configuration
-import android.os.PowerManager
import androidx.annotation.StyleRes
import androidx.appcompat.app.AppCompatDelegate
import code.name.monkey.retromusic.R
-import code.name.monkey.retromusic.util.PreferenceUtil
-import code.name.monkey.retromusic.util.theme.ThemeManager.isSystemDarkModeEnabled
+import code.name.monkey.retromusic.extensions.generalThemeValue
import code.name.monkey.retromusic.util.theme.ThemeMode.*
object ThemeManager {
@@ -30,19 +27,5 @@ object ThemeManager {
BLACK -> AppCompatDelegate.MODE_NIGHT_YES
AUTO -> AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM
}
-
- fun isSystemDarkModeEnabled(context: Context): Boolean {
- val isBatterySaverEnabled =
- (context.getSystemService(Context.POWER_SERVICE) as PowerManager?)?.isPowerSaveMode
- ?: false
- val isDarkModeEnabled =
- (context.resources.configuration.uiMode and Configuration.UI_MODE_NIGHT_MASK) == Configuration.UI_MODE_NIGHT_YES
-
- return isBatterySaverEnabled or isDarkModeEnabled
- }
}
-val Context.generalThemeValue: ThemeMode
- get() {
- return PreferenceUtil.getInstance(this).getGeneralThemeValue(isSystemDarkModeEnabled(this))
- }
\ No newline at end of file
diff --git a/app/src/main/java/code/name/monkey/retromusic/views/BottomNavigationBarTinted.kt b/app/src/main/java/code/name/monkey/retromusic/views/BottomNavigationBarTinted.kt
index c7e6f1552..32cdf55ee 100644
--- a/app/src/main/java/code/name/monkey/retromusic/views/BottomNavigationBarTinted.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/views/BottomNavigationBarTinted.kt
@@ -25,7 +25,7 @@ import code.name.monkey.appthemehelper.util.ATHUtil
import code.name.monkey.appthemehelper.util.ColorUtil
import code.name.monkey.appthemehelper.util.NavigationViewUtil
import code.name.monkey.retromusic.R
-import code.name.monkey.retromusic.util.PreferenceUtil
+import code.name.monkey.retromusic.util.PreferenceUtilKT
import code.name.monkey.retromusic.util.RippleUtils
import com.google.android.material.bottomnavigation.BottomNavigationView
@@ -36,8 +36,8 @@ class BottomNavigationBarTinted @JvmOverloads constructor(
) : BottomNavigationView(context, attrs, defStyleAttr) {
init {
- labelVisibilityMode = PreferenceUtil.getInstance(context).tabTitleMode
- selectedItemId = PreferenceUtil.getInstance(context).lastPage
+ labelVisibilityMode = PreferenceUtilKT.tabTitleMode
+ selectedItemId = PreferenceUtilKT.lastPage
val iconColor = ATHUtil.resolveColor(context, android.R.attr.colorControlNormal)
val accentColor = ThemeStore.accentColor(context)
diff --git a/app/src/main/java/code/name/monkey/retromusic/views/ColorIconsImageView.kt b/app/src/main/java/code/name/monkey/retromusic/views/ColorIconsImageView.kt
index 18f3bd30f..48e7dd856 100644
--- a/app/src/main/java/code/name/monkey/retromusic/views/ColorIconsImageView.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/views/ColorIconsImageView.kt
@@ -23,7 +23,7 @@ import androidx.core.content.ContextCompat
import code.name.monkey.appthemehelper.util.ATHUtil
import code.name.monkey.appthemehelper.util.ColorUtil
import code.name.monkey.retromusic.R
-import code.name.monkey.retromusic.util.PreferenceUtil
+import code.name.monkey.retromusic.util.PreferenceUtilKT
import code.name.monkey.retromusic.util.RetroColorUtil
@@ -46,7 +46,7 @@ class ColorIconsImageView @JvmOverloads constructor(
fun setIconBackgroundColor(color: Int) {
background = ContextCompat.getDrawable(context, R.drawable.color_circle_gradient)
- if (ATHUtil.isWindowBackgroundDark(context) && PreferenceUtil.getInstance(context).desaturatedColor()) {
+ if (ATHUtil.isWindowBackgroundDark(context) && PreferenceUtilKT.isDesaturatedColor) {
val desaturatedColor = RetroColorUtil.desaturateColor(color, 0.4f)
backgroundTintList = ColorStateList.valueOf(desaturatedColor)
imageTintList =
diff --git a/app/src/main/java/code/name/monkey/retromusic/views/PopupBackground.java b/app/src/main/java/code/name/monkey/retromusic/views/PopupBackground.java
index 36b6aac95..88b930c73 100644
--- a/app/src/main/java/code/name/monkey/retromusic/views/PopupBackground.java
+++ b/app/src/main/java/code/name/monkey/retromusic/views/PopupBackground.java
@@ -118,7 +118,7 @@ public class PopupBackground extends Drawable {
updatePath();
return true;
}
-
+
@Override
protected void onBoundsChange(@NonNull Rect bounds) {
diff --git a/app/src/main/res/anim/item_animation_fall_down.xml b/app/src/main/res/anim/item_animation_fall_down.xml
deleted file mode 100644
index a13e21e6f..000000000
--- a/app/src/main/res/anim/item_animation_fall_down.xml
+++ /dev/null
@@ -1,23 +0,0 @@
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/anim/layout_animation_fall_down.xml b/app/src/main/res/anim/layout_animation_fall_down.xml
deleted file mode 100644
index 6736b9f7d..000000000
--- a/app/src/main/res/anim/layout_animation_fall_down.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable-anydpi-v24/ic_notification.xml b/app/src/main/res/drawable-anydpi-v24/ic_notification.xml
index 4dbbe7f3d..5f83d4813 100644
--- a/app/src/main/res/drawable-anydpi-v24/ic_notification.xml
+++ b/app/src/main/res/drawable-anydpi-v24/ic_notification.xml
@@ -4,10 +4,11 @@
android:viewportWidth="26.086956"
android:viewportHeight="26.086956"
android:tint="#FFFFFF">
-
-
-
+
+
+
diff --git a/app/src/main/res/drawable-v24/ic_launcher_foreground.xml b/app/src/main/res/drawable-v24/ic_launcher_foreground.xml
index 33f5953d2..da4d42d65 100644
--- a/app/src/main/res/drawable-v24/ic_launcher_foreground.xml
+++ b/app/src/main/res/drawable-v24/ic_launcher_foreground.xml
@@ -4,55 +4,68 @@
android:height="108dp"
android:viewportWidth="921.0526"
android:viewportHeight="921.0526">
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/drawable/ic_check_circle_white_24dp.xml b/app/src/main/res/drawable/ic_check_circle_white_24dp.xml
index 7cdc15de0..5ab22cc67 100644
--- a/app/src/main/res/drawable/ic_check_circle_white_24dp.xml
+++ b/app/src/main/res/drawable/ic_check_circle_white_24dp.xml
@@ -1,5 +1,10 @@
-
-
+
+
diff --git a/app/src/main/res/drawable/ic_expand_less_white_24dp.xml b/app/src/main/res/drawable/ic_expand_less_white_24dp.xml
index 5042d801a..076afd8b5 100644
--- a/app/src/main/res/drawable/ic_expand_less_white_24dp.xml
+++ b/app/src/main/res/drawable/ic_expand_less_white_24dp.xml
@@ -1,5 +1,10 @@
-
-
+
+
diff --git a/app/src/main/res/drawable/ic_invert_colors_white_24dp.xml b/app/src/main/res/drawable/ic_invert_colors_white_24dp.xml
index e40023612..ff8356e28 100644
--- a/app/src/main/res/drawable/ic_invert_colors_white_24dp.xml
+++ b/app/src/main/res/drawable/ic_invert_colors_white_24dp.xml
@@ -1,5 +1,10 @@
-
-
+
+
diff --git a/app/src/main/res/drawable/ic_retro_music_icon.xml b/app/src/main/res/drawable/ic_retro_music_icon.xml
index 059ba1c20..4c3025dfc 100644
--- a/app/src/main/res/drawable/ic_retro_music_icon.xml
+++ b/app/src/main/res/drawable/ic_retro_music_icon.xml
@@ -4,52 +4,64 @@
android:height="350dp"
android:viewportWidth="276"
android:viewportHeight="350">
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/layout-land/fragment_banner_home.xml b/app/src/main/res/layout-land/fragment_banner_home.xml
index 49a9efae1..52043a540 100644
--- a/app/src/main/res/layout-land/fragment_banner_home.xml
+++ b/app/src/main/res/layout-land/fragment_banner_home.xml
@@ -23,23 +23,26 @@
android:overScrollMode="never"
app:layout_behavior="com.google.android.material.appbar.AppBarLayout$ScrollingViewBehavior">
-
+ app:cardUseCompatPadding="true"
+ app:layout_constraintDimensionRatio="21:7"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintTop_toTopOf="parent">
-
-
-
-
-
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout-land/fragment_circle_player.xml b/app/src/main/res/layout-land/fragment_circle_player.xml
index 0795e18e9..e3d9a5338 100644
--- a/app/src/main/res/layout-land/fragment_circle_player.xml
+++ b/app/src/main/res/layout-land/fragment_circle_player.xml
@@ -58,11 +58,16 @@
@@ -193,6 +198,7 @@
android:textColor="?android:attr/textColorSecondary"
android:textSize="12sp"
app:layout_constraintBottom_toBottomOf="@id/progressSlider"
+ app:layout_constraintEnd_toStartOf="@id/progressSlider"
app:layout_constraintStart_toEndOf="@id/guideline"
app:layout_constraintTop_toTopOf="@id/progressSlider"
tools:ignore="RtlHardcoded,RtlSymmetry"
@@ -207,8 +213,8 @@
android:ellipsize="end"
android:gravity="center"
android:maxLines="1"
- android:paddingStart="16dp"
- android:paddingEnd="16dp"
+ android:paddingHorizontal="16dp"
+ android:paddingBottom="12dp"
android:textColor="?android:attr/textColorSecondary"
android:textSize="12sp"
app:layout_constrainedWidth="true"
diff --git a/app/src/main/res/layout-xlarge-land/fragment_player.xml b/app/src/main/res/layout-xlarge-land/fragment_player.xml
index c596fd193..1c7834145 100644
--- a/app/src/main/res/layout-xlarge-land/fragment_player.xml
+++ b/app/src/main/res/layout-xlarge-land/fragment_player.xml
@@ -1,96 +1,65 @@
-
-
-
+ android:layout_width="0dp"
+ android:layout_height="0dp"
+ app:layout_constraintBottom_toBottomOf="parent"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintTop_toTopOf="parent" />
-
-
+ android:layout_height="wrap_content"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintTop_toTopOf="parent">
+
+
-
+
-
-
+
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/app/src/main/res/layout-xlarge-land/fragment_player_playback_controls.xml b/app/src/main/res/layout-xlarge-land/fragment_player_playback_controls.xml
index c705b3618..248a9d723 100755
--- a/app/src/main/res/layout-xlarge-land/fragment_player_playback_controls.xml
+++ b/app/src/main/res/layout-xlarge-land/fragment_player_playback_controls.xml
@@ -20,12 +20,11 @@
android:freezesText="true"
android:gravity="center"
android:marqueeRepeatLimit="marquee_forever"
- android:paddingStart="24dp"
- android:paddingTop="8dp"
- android:paddingEnd="24dp"
+ android:paddingHorizontal="24dp"
+ android:paddingTop="12dp"
android:scrollHorizontally="true"
android:singleLine="true"
- android:textAppearance="@style/TextViewHeadline3"
+ android:textAppearance="@style/TextViewHeadline4"
android:textColor="?android:attr/textColorPrimary"
android:textStyle="bold"
app:layout_constraintEnd_toEndOf="parent"
@@ -41,9 +40,9 @@
android:ellipsize="end"
android:gravity="center"
android:maxLines="2"
- android:paddingStart="24dp"
- android:paddingEnd="24dp"
- android:textAppearance="@style/TextViewHeadline4"
+ android:paddingHorizontal="24dp"
+ android:paddingVertical="12dp"
+ android:textAppearance="@style/TextViewHeadline5"
android:textColor="?android:attr/textColorSecondary"
app:layout_constraintBottom_toTopOf="@+id/songInfo"
app:layout_constraintEnd_toEndOf="parent"
@@ -60,26 +59,44 @@
android:ellipsize="end"
android:gravity="center"
android:maxLines="2"
- android:paddingStart="16dp"
- android:paddingEnd="16dp"
- android:textAppearance="@style/TextViewHeadline6"
+ android:paddingHorizontal="24dp"
+ android:paddingBottom="12dp"
android:textColor="?android:attr/textColorSecondary"
android:visibility="visible"
app:layout_constraintBottom_toTopOf="@+id/playPauseButton"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/text"
tools:text="@tools:sample/lorem/random"
tools:visibility="visible" />
+
+
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout-xlarge/activity_user_info.xml b/app/src/main/res/layout-xlarge/activity_user_info.xml
index 9e64e5c0f..a61488c08 100644
--- a/app/src/main/res/layout-xlarge/activity_user_info.xml
+++ b/app/src/main/res/layout-xlarge/activity_user_info.xml
@@ -23,7 +23,7 @@
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ android:layout_marginEnd="16dp"
+ app:hintEnabled="true"
+ app:layout_constraintBottom_toBottomOf="@id/next"
+ app:layout_constraintEnd_toStartOf="@id/next"
+ app:layout_constraintStart_toStartOf="@id/imageContainer"
+ app:layout_constraintTop_toTopOf="@id/next">
-
+ android:background="@null"
+ android:hint="@string/my_name"
+ android:inputType="textPersonName|textCapWords|text"
+ android:textAppearance="@style/TextAppearance.AppCompat.Subhead" />
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout-xlarge/fragment_mini_player.xml b/app/src/main/res/layout-xlarge/fragment_mini_player.xml
index d7dc59220..e51b2dde3 100644
--- a/app/src/main/res/layout-xlarge/fragment_mini_player.xml
+++ b/app/src/main/res/layout-xlarge/fragment_mini_player.xml
@@ -1,90 +1,109 @@
-
-
+
-
-
-
-
-
-
-
+ tools:src="@drawable/default_album_art" />
+
+
+
+
+
-
-
+
+
+
+
+
-
\ No newline at end of file
+ android:progress="20"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintTop_toTopOf="parent" />
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_playing_queue.xml b/app/src/main/res/layout/activity_playing_queue.xml
index b95d78542..38db7846d 100755
--- a/app/src/main/res/layout/activity_playing_queue.xml
+++ b/app/src/main/res/layout/activity_playing_queue.xml
@@ -42,7 +42,6 @@
android:layout_width="match_parent"
android:layout_height="match_parent"
android:clipToPadding="false"
- android:layoutAnimation="@anim/layout_animation_fall_down"
android:overScrollMode="never"
android:paddingBottom="96dp"
android:scrollbars="none"
diff --git a/app/src/main/res/layout/dialog_sleep_timer.xml b/app/src/main/res/layout/dialog_sleep_timer.xml
index 8d4fe4da7..ecd1f9927 100644
--- a/app/src/main/res/layout/dialog_sleep_timer.xml
+++ b/app/src/main/res/layout/dialog_sleep_timer.xml
@@ -9,26 +9,26 @@
android:id="@+id/timerDisplay"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
- android:layout_gravity="center"
+ android:layout_marginStart="8dp"
+ android:paddingHorizontal="16dp"
+ android:paddingVertical="16dp"
android:textAppearance="@style/TextViewHeadline6" />
-
diff --git a/app/src/main/res/layout/fragment_folder.xml b/app/src/main/res/layout/fragment_folder.xml
index ffe3abd50..0f7ff63a5 100644
--- a/app/src/main/res/layout/fragment_folder.xml
+++ b/app/src/main/res/layout/fragment_folder.xml
@@ -54,7 +54,6 @@
android:layout_width="match_parent"
android:layout_height="match_parent"
android:clipToPadding="false"
- android:layoutAnimation="@anim/layout_animation_fall_down"
android:overScrollMode="never"
android:scrollbars="none"
app:layout_behavior="com.google.android.material.appbar.AppBarLayout$ScrollingViewBehavior" />
diff --git a/app/src/main/res/layout/fragment_home_player.xml b/app/src/main/res/layout/fragment_home_player.xml
index 397147ce0..d99613cc1 100644
--- a/app/src/main/res/layout/fragment_home_player.xml
+++ b/app/src/main/res/layout/fragment_home_player.xml
@@ -67,6 +67,7 @@
app:layout_constraintEnd_toEndOf="parent"
tools:text="@tools:sample/full_names"
tools:textColor="@color/md_black_1000" />
+
diff --git a/app/src/main/res/layout/fragment_simple_controls_fragment.xml b/app/src/main/res/layout/fragment_simple_controls_fragment.xml
index af0214169..6e8d1f4d4 100644
--- a/app/src/main/res/layout/fragment_simple_controls_fragment.xml
+++ b/app/src/main/res/layout/fragment_simple_controls_fragment.xml
@@ -10,6 +10,7 @@
android:id="@+id/titleContainer"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
+ android:paddingHorizontal="16dp"
app:layout_constraintBottom_toTopOf="@+id/text"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
@@ -26,8 +27,6 @@
android:freezesText="true"
android:gravity="center"
android:marqueeRepeatLimit="marquee_forever"
- android:paddingStart="16dp"
- android:paddingEnd="16dp"
android:scrollHorizontally="true"
android:singleLine="true"
android:textAppearance="@style/TextViewHeadline6"
@@ -38,18 +37,18 @@
-
+
+
+
+
+ tools:backgroundTint="@color/md_green_500"
+ tools:srcCompat="@drawable/ic_play_arrow_white_32dp" />
-
+
-
-
+
-
-
-
-
-
-
-
-
-
-
-
-
+ app:layout_constraintTop_toTopOf="parent"
+ app:retroCornerSize="56dp"
+ tools:src="@tools:sample/avatars" />
\ No newline at end of file
diff --git a/app/src/main/res/layout/item_card.xml b/app/src/main/res/layout/item_card.xml
index dca4e532c..8ce8c74e7 100644
--- a/app/src/main/res/layout/item_card.xml
+++ b/app/src/main/res/layout/item_card.xml
@@ -51,7 +51,7 @@
android:singleLine="true"
android:textAppearance="@style/TextViewSubtitle1"
android:textStyle="bold"
- tools:text="@tools:sample/full_names"/>
+ tools:text="@tools:sample/full_names" />
+ tools:text="@tools:sample/full_names" />
diff --git a/app/src/main/res/layout/item_grid_circle.xml b/app/src/main/res/layout/item_grid_circle.xml
index c3574cc3e..5308f9a97 100644
--- a/app/src/main/res/layout/item_grid_circle.xml
+++ b/app/src/main/res/layout/item_grid_circle.xml
@@ -9,7 +9,6 @@
android:padding="4dp"
tools:ignore="MissingPrefix">
-
-
diff --git a/app/src/main/res/layout/item_list.xml b/app/src/main/res/layout/item_list.xml
index 3e5935da9..136ad6c98 100755
--- a/app/src/main/res/layout/item_list.xml
+++ b/app/src/main/res/layout/item_list.xml
@@ -4,9 +4,9 @@
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:layout_marginStart="2dp"
- android:layout_marginEnd="2dp"
- android:layout_marginBottom="2dp"
+ android:layout_marginStart="1dp"
+ android:layout_marginEnd="1dp"
+ android:layout_marginBottom="1dp"
android:background="?rectSelector"
android:clickable="true"
android:focusable="true"
diff --git a/app/src/main/res/layout/list_item_view.xml b/app/src/main/res/layout/list_item_view.xml
index 79ea44fd0..8a2222511 100644
--- a/app/src/main/res/layout/list_item_view.xml
+++ b/app/src/main/res/layout/list_item_view.xml
@@ -31,8 +31,10 @@
android:id="@android:id/icon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
+ android:layout_marginTop="4dp"
+ app:layout_constraintBottom_toBottomOf="@android:id/title"
app:layout_constraintStart_toStartOf="parent"
- app:layout_constraintTop_toTopOf="parent"
+ app:layout_constraintTop_toTopOf="@android:id/title"
app:tint="?attr/colorControlNormal"
tools:srcCompat="@drawable/ic_telegram_white" />
diff --git a/app/src/main/res/layout/list_setting_item_view.xml b/app/src/main/res/layout/list_setting_item_view.xml
index 3336af667..bd10afee8 100644
--- a/app/src/main/res/layout/list_setting_item_view.xml
+++ b/app/src/main/res/layout/list_setting_item_view.xml
@@ -12,13 +12,13 @@
~ See the GNU General Public License for more details.
-->
-
@@ -27,36 +27,47 @@
android:id="@+id/icon"
android:layout_width="@dimen/adaptive_icon_size"
android:layout_height="@dimen/adaptive_icon_size"
- android:padding="@dimen/adaptive_icon_padding"
android:layout_gravity="center"
android:layout_marginStart="8dp"
+ android:padding="@dimen/adaptive_icon_padding"
app:iconBackgroundColor="@color/md_blue_A400"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintTop_toTopOf="@id/title"
app:srcCompat="@drawable/ic_theme_palette_white_24dp" />
-
+ android:layout_marginStart="16dp"
+ android:layout_marginTop="16dp"
+ android:layout_marginEnd="16dp"
+ android:ellipsize="marquee"
+ android:fadingEdge="horizontal"
+ android:singleLine="true"
+ android:textAppearance="@style/TextViewSubtitle1"
+ android:textStyle="bold"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintStart_toEndOf="@id/icon"
+ app:layout_constraintTop_toTopOf="parent"
+ tools:text="@tools:sample/lorem/random" />
-
+
-
-
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml b/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml
index bbd3e0212..eca70cfe5 100644
--- a/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml
+++ b/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml
@@ -1,5 +1,5 @@
-
-
+
+
\ No newline at end of file
diff --git a/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml b/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml
index bbd3e0212..eca70cfe5 100644
--- a/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml
+++ b/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml
@@ -1,5 +1,5 @@
-
-
+
+
\ No newline at end of file
diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml
index 61f0d3a2f..eafddf295 100644
--- a/app/src/main/res/values/styles.xml
+++ b/app/src/main/res/values/styles.xml
@@ -7,7 +7,7 @@
- none
- @font/google_san
- @font/google_san
- - @font/google_san
+ - 16dp
diff --git a/app/src/main/res/xml/pref_advanced.xml b/app/src/main/res/xml/pref_advanced.xml
index 6ceb9d369..490cc5f17 100755
--- a/app/src/main/res/xml/pref_advanced.xml
+++ b/app/src/main/res/xml/pref_advanced.xml
@@ -17,7 +17,7 @@
android:layout="@layout/preference_category_title"
android:title="@string/pref_header_playlists">
-