From a5cc0572a82780ad7fb19affedcfdd9cd8ac030d Mon Sep 17 00:00:00 2001 From: Hemanth S Date: Sun, 24 May 2020 03:17:23 +0530 Subject: [PATCH] Kotlin code refactor Refactor dialogs --- .../retromusic/activities/AboutActivity.kt | 1 - .../retromusic/activities/MainActivity.kt | 39 +++-- .../retromusic/dialogs/AddToPlaylistDialog.kt | 36 ++--- .../dialogs/ClearSmartPlaylistDialog.kt | 23 ++- .../dialogs/CreatePlaylistDialog.kt | 78 ++++------ .../dialogs/DeletePlaylistDialog.kt | 37 +++-- .../dialogs/DeleteSongsAsyncTask.java | 3 +- .../retromusic/dialogs/DeleteSongsDialog.kt | 58 ++++--- .../dialogs/RemoveFromPlaylistDialog.kt | 34 ++-- .../dialogs/RenamePlaylistDialog.kt | 67 ++++---- .../retromusic/dialogs/SleepTimerDialog.kt | 146 ++++++++---------- .../retromusic/dialogs/SongDetailDialog.kt | 74 ++++----- .../retromusic/dialogs/SongShareDialog.kt | 99 ++++++------ .../retromusic/extensions/ActivityEx.kt | 11 ++ .../monkey/retromusic/extensions/ColorExt.kt | 13 ++ .../retromusic/extensions/FragmentExt.kt | 11 ++ .../monkey/retromusic/loaders/ArtistLoader.kt | 8 +- .../monkey/retromusic/loaders/GenreLoader.kt | 7 +- .../AlbumCoverStylePreferenceDialog.kt | 3 +- .../main/res/layout/dialog_sleep_timer.xml | 2 - .../dialogs/ATEPreferenceDialogFragment.java | 5 +- 21 files changed, 371 insertions(+), 384 deletions(-) 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 8d8a7dd3..58650582 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 @@ -54,7 +54,6 @@ class AboutActivity : AbsBaseActivity(), View.OnClickListener { return json } - override fun onCreate(savedInstanceState: Bundle?) { setDrawUnderStatusBar() super.onCreate(savedInstanceState) 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 index 5c911142..c0c9f71a 100644 --- a/app/src/main/java/code/name/monkey/retromusic/activities/MainActivity.kt +++ b/app/src/main/java/code/name/monkey/retromusic/activities/MainActivity.kt @@ -15,6 +15,7 @@ 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.* @@ -59,9 +60,11 @@ 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(), @@ -73,7 +76,7 @@ class MainActivity : AbsSlidingMusicPanelActivity(), } lateinit var libraryViewModel: LibraryViewModel - private lateinit var cab: MaterialCab + private var cab: MaterialCab? = null private val intentFilter = IntentFilter(Intent.ACTION_SCREEN_OFF) private lateinit var currentFragment: MainActivityFragmentCallbacks private var appUpdateManager: AppUpdateManager? = null @@ -81,10 +84,10 @@ class MainActivity : AbsSlidingMusicPanelActivity(), private val listener = object : InstallStateUpdatedListener { override fun onStateUpdate(state: InstallState) { when { - state.installStatus() == InstallStatus.DOWNLOADED -> { + state.installStatus() == DOWNLOADED -> { popupSnackBarForCompleteUpdate() } - state.installStatus() == InstallStatus.INSTALLED -> { + state.installStatus() == INSTALLED -> { appUpdateManager?.unregisterListener(this) } else -> { @@ -156,7 +159,7 @@ class MainActivity : AbsSlidingMusicPanelActivity(), appUpdateManager?.appUpdateInfo ?.addOnSuccessListener { appUpdateInfo: AppUpdateInfo -> - if (appUpdateInfo.installStatus() == InstallStatus.DOWNLOADED) { + if (appUpdateInfo.installStatus() == DOWNLOADED) { popupSnackBarForCompleteUpdate() } try { @@ -213,10 +216,7 @@ class MainActivity : AbsSlidingMusicPanelActivity(), gridSizeItem.setTitle(R.string.action_grid_size_land) } setUpGridSizeMenu(fragment, gridSizeItem.subMenu) - - val layoutItem: MenuItem = menu.findItem(R.id.action_layout_type) - setupLayoutMenu(fragment, layoutItem.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) @@ -425,8 +425,7 @@ class MainActivity : AbsSlidingMusicPanelActivity(), R.id.action_album_sort_order_asc, 0, R.string.sort_order_a_z - ).isChecked = - currentSortOrder == AlbumSortOrder.ALBUM_A_Z + ).isChecked = currentSortOrder == AlbumSortOrder.ALBUM_A_Z sortOrderMenu.add( 0, R.id.action_album_sort_order_desc, @@ -565,14 +564,11 @@ class MainActivity : AbsSlidingMusicPanelActivity(), 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)) @@ -748,7 +744,7 @@ class MainActivity : AbsSlidingMusicPanelActivity(), try { id = idString.toLong() } catch (e: NumberFormatException) { - Log.e(MainActivity.TAG, e.message) + Log.e(TAG, e.message) } } } @@ -756,26 +752,29 @@ class MainActivity : AbsSlidingMusicPanelActivity(), } override fun handleBackPress(): Boolean { - if (cab.isActive) { - cab.finish() + if (cab != null && cab!!.isActive) { + cab?.finish() return true } return super.handleBackPress() || currentFragment.handleBackPress() } override fun openCab(menuRes: Int, callback: MaterialCab.Callback): MaterialCab { - if (cab != null && cab.isActive) { - cab.finish() + 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( - resolveColor(this, R.attr.colorSurface) + ATHUtil.resolveColor( + this, + R.attr.colorSurface + ) ) ) .start(callback) - return cab + return cab as MaterialCab } } \ No newline at end of file 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 659bf59d..de6e8c31 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 @@ -18,11 +18,11 @@ import android.app.Dialog import android.os.Bundle import androidx.fragment.app.DialogFragment 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 com.afollestad.materialdialogs.MaterialDialog -import com.afollestad.materialdialogs.list.listItems +import com.google.android.material.dialog.MaterialAlertDialogBuilder class AddToPlaylistDialog : DialogFragment() { @@ -30,34 +30,34 @@ 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) - - 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()) { dialog, which -> + val songs = extraNotNull>("songs") + if (which == 0) { + CreatePlaylistDialog.create(songs.value) + .show(childFragmentManager, "ADD_TO_PLAYLIST") + dismiss() } else { - dialog.dismiss() PlaylistsUtil.addToPlaylist( requireContext(), - songs, - playlists[index - 1].id, + songs.value, + playlists[which - 1].id, true ) + dismiss() } } - } + .create() } companion object { 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 index fb9d9fdc..02315069 100644 --- a/app/src/main/java/code/name/monkey/retromusic/dialogs/ClearSmartPlaylistDialog.kt +++ b/app/src/main/java/code/name/monkey/retromusic/dialogs/ClearSmartPlaylistDialog.kt @@ -20,7 +20,7 @@ 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 com.afollestad.materialdialogs.MaterialDialog +import com.google.android.material.dialog.MaterialAlertDialogBuilder class ClearSmartPlaylistDialog : DialogFragment() { @@ -30,23 +30,22 @@ class ClearSmartPlaylistDialog : DialogFragment() { val playlist = requireArguments().getParcelable("playlist") val title = R.string.clear_playlist_title - val content = HtmlCompat.fromHtml( + val message = HtmlCompat.fromHtml( getString(R.string.clear_playlist_x, playlist!!.name), HtmlCompat.FROM_HTML_MODE_LEGACY ) - return MaterialDialog(requireContext()).show { - title(title) - - message(text = content) - positiveButton(R.string.clear_action) { - if (activity == null) { - return@positiveButton - } + return MaterialAlertDialogBuilder( + requireContext(), + R.style.ThemeOverlay_MaterialComponents_Dialog_Alert + ) + .setTitle(title) + .setMessage(message) + .setPositiveButton(R.string.clear_action) { _, _ -> playlist.clear(requireActivity()) } - negativeButton { (android.R.string.cancel) } - } + .setNegativeButton(android.R.string.cancel, null) + .create() } companion object { 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 f14a5ac1..34479293 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,70 +14,60 @@ 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 android.view.View +import androidx.appcompat.app.AlertDialog 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.model.Song import code.name.monkey.retromusic.util.PlaylistsUtil -import com.afollestad.materialdialogs.MaterialDialog -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 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 { + val view = LayoutInflater.from(requireActivity()).inflate(R.layout.dialog_playlist, null) + val playlistView: TextInputEditText = view.findViewById(R.id.actionNewPlaylist) + val playlistContainer: TextInputLayout = view.findViewById(R.id.actionNewPlaylistContainer) + MaterialUtil.setTint(playlistContainer, false) - 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 - - 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>("songs") + 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) } } } + .create() + } - 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 + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + (dialog as AlertDialog) } companion object { 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 6ca075f2..802c5dd7 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 @@ -19,10 +19,9 @@ 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.R.string import code.name.monkey.retromusic.model.Playlist import code.name.monkey.retromusic.util.PlaylistsUtil -import com.afollestad.materialdialogs.MaterialDialog +import com.google.android.material.dialog.MaterialAlertDialogBuilder import java.util.* class DeletePlaylistDialog : DialogFragment() { @@ -30,33 +29,33 @@ class DeletePlaylistDialog : DialogFragment() { override fun onCreateDialog(savedInstanceState: Bundle?): Dialog { val playlists = requireArguments().getParcelableArrayList("playlist") 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), + title = R.string.delete_playlists_title + message = HtmlCompat.fromHtml( + 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( + getString(R.string.delete_playlist_x, playlists[0].name), HtmlCompat.FROM_HTML_MODE_LEGACY ) } - return MaterialDialog(requireContext()) - .show { - - 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 { 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 e55488c7..5cc00d76 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? = requireArguments().getParcelableArrayList("songs") + val songs = extraNotNull>("songsĀ¬").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( + getString(R.string.delete_x_songs, songs.size), + HtmlCompat.FROM_HTML_MODE_LEGACY + ) + } else { + title = R.string.delete_song_title + message = HtmlCompat.fromHtml( + 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() - } - - 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?) { 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 5d28482e..54065227 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 @@ -22,7 +22,7 @@ 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 com.afollestad.materialdialogs.MaterialDialog +import com.google.android.material.dialog.MaterialAlertDialogBuilder class RemoveFromPlaylistDialog : DialogFragment() { @@ -30,17 +30,17 @@ class RemoveFromPlaylistDialog : DialogFragment() { val songs = requireArguments().getParcelableArrayList("songs") 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( + message = HtmlCompat.fromHtml( 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( + message = HtmlCompat.fromHtml( getString( code.name.monkey.retromusic.R.string.remove_song_x_from_playlist, songs[0].title @@ -50,22 +50,18 @@ 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 - ) - } - + 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 { 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 34482502..cd9f2e99 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,59 +14,50 @@ 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 com.afollestad.materialdialogs.MaterialDialog -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 { - 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 d6502502..e3ad1b3e 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,28 +23,25 @@ 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.PreferenceUtilKT import code.name.monkey.retromusic.util.ViewUtil import com.afollestad.materialdialogs.MaterialDialog import com.afollestad.materialdialogs.WhichButton import com.afollestad.materialdialogs.actions.getActionButton -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() { @@ -54,85 +52,26 @@ class SleepTimerDialog : DialogFragment() { private lateinit var seekBar: SeekBar private lateinit var timerDisplay: TextView + @SuppressLint("InflateParams") override fun onCreateDialog(savedInstanceState: Bundle?): Dialog { timerUpdater = TimerUpdater() - - materialDialog = MaterialDialog(requireContext()) - .title(R.string.action_sleep_timer) - .positiveButton(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) - - 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 - } - - 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 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) val finishMusic = PreferenceUtilKT.isSleepTimerFinishMusic - shouldFinishLastSong.isChecked = finishMusic - - - seekArcProgress = PreferenceUtilKT.lastSleepTimerValue - updateTimeDisplayTime() - seekBar.progress = seekArcProgress - - setProgressBarColor(ThemeStore.accentColor(requireContext())) + shouldFinishLastSong.apply { + addAccentColor() + isChecked = finishMusic + } + seekBar.apply { + addAccentColor() + seekArcProgress = PreferenceUtilKT.lastSleepTimerValue + updateTimeDisplayTime() + seekBar.progress = seekArcProgress + } seekBar.setOnSeekBarChangeListener(object : SeekBar.OnSeekBarChangeListener { override fun onProgressChanged(seekBar: SeekBar, i: Int, b: Boolean) { @@ -151,8 +90,51 @@ class SleepTimerDialog : DialogFragment() { 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() { 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 8fcaf79b..ca36e61d 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,11 +14,13 @@ 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 @@ -26,12 +28,9 @@ import androidx.annotation.NonNull import androidx.core.text.HtmlCompat import androidx.fragment.app.DialogFragment 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 com.afollestad.materialdialogs.MaterialDialog -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 @@ -48,22 +47,12 @@ inline fun ViewGroup.forEach(action: (View) -> Unit) { class SongDetailDialog : DialogFragment() { + @SuppressLint("InflateParams") override fun onCreateDialog(savedInstanceState: Bundle?): Dialog { val context: Context = requireContext() + val dialogView = LayoutInflater.from(context).inflate(R.layout.dialog_file_details, null) + 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) - - } - val dialogView = materialDialog.getCustomView() - val fileName: TextView = dialogView.findViewById(R.id.fileName) val filePath: TextView = dialogView.findViewById(R.id.filePath) val fileSize: TextView = dialogView.findViewById(R.id.fileSize) @@ -72,23 +61,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 { @@ -96,21 +85,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) { @@ -118,50 +107,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 { 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 b5bd3c88..a29a0041 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 @@ -22,62 +22,69 @@ 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 com.afollestad.materialdialogs.MaterialDialog -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 = + val listening: String = getString(R.string.currently_listening_to_x_by_x, song?.title, song?.artistName) - return MaterialDialog(requireContext()) - .title(R.string.what_do_you_want_to_share) - .show { + 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() + } - 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 { 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 14f55b4c..615a8acb 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,6 +14,7 @@ package code.name.monkey.retromusic.extensions +import android.app.Activity import androidx.annotation.IdRes import androidx.appcompat.app.AppCompatActivity import androidx.fragment.app.Fragment @@ -62,4 +63,14 @@ fun AppCompatActivity.replaceFragment( } 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 45c28f78..b5d37920 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/FragmentExt.kt b/app/src/main/java/code/name/monkey/retromusic/extensions/FragmentExt.kt index 36328cba..6e724dc1 100644 --- a/app/src/main/java/code/name/monkey/retromusic/extensions/FragmentExt.kt +++ b/app/src/main/java/code/name/monkey/retromusic/extensions/FragmentExt.kt @@ -26,3 +26,14 @@ fun Context.isSystemDarkModeEnabled(): Boolean { (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/loaders/ArtistLoader.kt b/app/src/main/java/code/name/monkey/retromusic/loaders/ArtistLoader.kt index 5f19eab3..c5056ead 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 @@ -21,7 +21,7 @@ import code.name.monkey.retromusic.model.Artist import code.name.monkey.retromusic.util.PreferenceUtilKT object ArtistLoader { - private fun getSongLoaderSortOrder(context: Context): String { + private fun getSongLoaderSortOrder(): String { return PreferenceUtilKT.artistSortOrder + ", " + PreferenceUtilKT.artistAlbumSortOrder + ", " + PreferenceUtilKT.artistSongSortOrder @@ -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 09f0ba24..d6ca71b4 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 @@ -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? { 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 eed6adee..e5b1af56 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 @@ -79,7 +79,8 @@ class AlbumCoverStylePreferenceDialog : DialogFragment(), viewPager.pageMargin = ViewUtil.convertDpToPixel(32f, resources).toInt() viewPager.currentItem = PreferenceUtilKT.albumCoverStyle.ordinal - return MaterialAlertDialogBuilder(requireActivity()) + 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] diff --git a/app/src/main/res/layout/dialog_sleep_timer.xml b/app/src/main/res/layout/dialog_sleep_timer.xml index 8d4fe4da..0c9c6cfd 100644 --- a/app/src/main/res/layout/dialog_sleep_timer.xml +++ b/app/src/main/res/layout/dialog_sleep_timer.xml @@ -19,9 +19,7 @@ android:layout_height="wrap_content" android:maxHeight="3dp" android:paddingTop="12dp" - android:progressDrawable="@drawable/color_progress_seek" android:splitTrack="false" - android:thumb="@drawable/switch_thumb_material" tools:progress="20" />