From b9a4c01a91cb6164d44063592c68573b019f15d0 Mon Sep 17 00:00:00 2001 From: Hemanth S Date: Sun, 24 May 2020 23:34:50 +0530 Subject: [PATCH] Revamped Dialog --- app/build.gradle | 6 +- .../activities/AlbumDetailsActivity.kt | 1 - .../retromusic/activities/LyricsActivity.kt | 23 +-- .../retromusic/activities/MainActivity.kt | 6 + .../retromusic/activities/SettingsActivity.kt | 21 +- .../activities/base/AbsThemeActivity.kt | 2 + .../activities/bugreport/BugReportActivity.kt | 44 ++--- .../tageditor/AbsTagEditorActivity.kt | 25 +-- .../dialogs/BlacklistFolderChooserDialog.java | 157 +++++++++++++++ .../dialogs/BlacklistFolderChooserDialog.kt | 180 ------------------ .../retromusic/dialogs/SleepTimerDialog.kt | 7 +- .../fragments/settings/AbsSettingsFragment.kt | 4 +- .../settings/ImageSettingFragment.kt | 1 - .../settings/NowPlayingSettingsFragment.kt | 15 +- .../settings/OtherSettingsFragment.kt | 21 +- .../settings/PersonalizeSettingsFragment.kt | 35 ++-- .../settings/ThemeSettingsFragment.kt | 27 +-- .../preferences/BlacklistPreferenceDialog.kt | 1 - .../preferences/MaterialListPreference.kt | 54 +++--- .../name/monkey/retromusic/util/AppRater.kt | 45 ++--- .../monkey/retromusic/util/RingtoneManager.kt | 17 +- .../res/layout/preference_category_title.xml | 2 +- .../main/res/values-v27/styles_parents.xml | 2 - app/src/main/res/values/colors.xml | 7 + app/src/main/res/values/styles_parents.xml | 3 +- app/src/main/res/xml/pref_advanced.xml | 2 +- app/src/main/res/xml/pref_general.xml | 4 +- app/src/main/res/xml/pref_images.xml | 2 +- .../main/res/xml/pref_now_playing_screen.xml | 2 +- app/src/main/res/xml/pref_ui.xml | 4 +- appthemehelper/build.gradle | 7 +- .../name/monkey/appthemehelper/ThemeStore.kt | 59 +++++- .../prefs/supportv7/ATEColorPreference.kt | 1 - .../prefs/supportv7/ATEEditTextPreference.kt | 32 ---- .../prefs/supportv7/ATEListPreference.kt | 2 - .../ATEPreferenceFragmentCompat.java | 51 +++++ .../supportv7/ATEPreferenceFragmentCompat.kt | 60 ------ ...ATEListPreferenceDialogFragmentCompat.java | 39 ++-- .../dialogs/ATEPreferenceDialogFragment.java | 62 +++--- .../util/MaterialDialogsUtil.kt | 25 +++ .../appthemehelper/util/MaterialUtil.kt | 28 --- 41 files changed, 539 insertions(+), 547 deletions(-) create mode 100644 app/src/main/java/code/name/monkey/retromusic/dialogs/BlacklistFolderChooserDialog.java delete mode 100644 app/src/main/java/code/name/monkey/retromusic/dialogs/BlacklistFolderChooserDialog.kt delete mode 100755 appthemehelper/src/main/java/code/name/monkey/appthemehelper/common/prefs/supportv7/ATEEditTextPreference.kt create mode 100644 appthemehelper/src/main/java/code/name/monkey/appthemehelper/common/prefs/supportv7/ATEPreferenceFragmentCompat.java delete mode 100644 appthemehelper/src/main/java/code/name/monkey/appthemehelper/common/prefs/supportv7/ATEPreferenceFragmentCompat.kt create mode 100644 appthemehelper/src/main/java/code/name/monkey/appthemehelper/util/MaterialDialogsUtil.kt diff --git a/app/build.gradle b/app/build.gradle index 266fbde9..1ff417ac 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -137,11 +137,9 @@ dependencies { implementation "com.squareup.retrofit2:retrofit:$retrofit_version" implementation "com.squareup.retrofit2:converter-gson:$retrofit_version" - def material_dialog_version = "3.1.1" + def material_dialog_version = "0.9.6.0" implementation "com.afollestad.material-dialogs:core:$material_dialog_version" - implementation "com.afollestad.material-dialogs:input:$material_dialog_version" - implementation "com.afollestad.material-dialogs:color:$material_dialog_version" - implementation "com.afollestad.material-dialogs:bottomsheets:$material_dialog_version" + implementation "com.afollestad.material-dialogs:commons:$material_dialog_version" implementation 'com.afollestad:material-cab:0.1.12' implementation 'com.github.bumptech.glide:glide:3.8.0' 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 c3c1c5e5..2a1185d4 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 @@ -277,7 +277,6 @@ class AlbumDetailsActivity : AbsSlidingMusicPanelActivity(), AlbumDetailsView, C MaterialUtil.setTint(button = shuffleAction, color = buttonColor) MaterialUtil.setTint(button = playAction, color = buttonColor) - toolbar.setBackgroundColor(surfaceColor()) setSupportActionBar(toolbar) supportActionBar?.title = null 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 a6d5dd39..224d85e9 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 @@ -6,7 +6,6 @@ import android.content.res.ColorStateList import android.os.AsyncTask import android.os.Build import android.os.Bundle -import android.text.InputType import android.text.TextUtils import android.view.* import androidx.annotation.StringRes @@ -16,12 +15,14 @@ import androidx.fragment.app.FragmentManager import androidx.fragment.app.FragmentStatePagerAdapter import androidx.viewpager.widget.ViewPager import code.name.monkey.appthemehelper.ThemeStore -import code.name.monkey.appthemehelper.util.* 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.appthemehelper.util.TintHelper +import code.name.monkey.appthemehelper.util.ToolbarContentTintHelper import code.name.monkey.retromusic.App import code.name.monkey.retromusic.R import code.name.monkey.retromusic.activities.base.AbsMusicServiceActivity -import code.name.monkey.retromusic.activities.tageditor.WriteTagsAsyncTask import code.name.monkey.retromusic.extensions.surfaceColor import code.name.monkey.retromusic.extensions.textColorSecondary import code.name.monkey.retromusic.fragments.base.AbsMusicServiceFragment @@ -34,18 +35,10 @@ 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.PreferenceUtilKT -import code.name.monkey.retromusic.util.RetroUtil -import com.afollestad.materialdialogs.MaterialDialog -import com.afollestad.materialdialogs.input.getInputLayout -import com.afollestad.materialdialogs.input.input import kotlinx.android.synthetic.main.activity_lyrics.* import kotlinx.android.synthetic.main.fragment_lyrics.* import kotlinx.android.synthetic.main.fragment_synced.* -import org.jaudiotagger.tag.FieldKey import java.io.File -import java.util.* -import kotlin.collections.ArrayList -import kotlin.collections.set class LyricsActivity : AbsMusicServiceActivity(), View.OnClickListener, ViewPager.OnPageChangeListener { @@ -170,7 +163,7 @@ class LyricsActivity : AbsMusicServiceActivity(), View.OnClickListener, e.printStackTrace() } - val materialDialog = MaterialDialog(this) + /*val materialDialog = MaterialDialog(this) .show { title(R.string.add_time_framed_lryics) negativeButton(R.string.action_search) { @@ -188,7 +181,7 @@ class LyricsActivity : AbsMusicServiceActivity(), View.OnClickListener, } } - MaterialUtil.setTint(materialDialog.getInputLayout(), false) + MaterialUtil.setTint(materialDialog.getInputLayout(), false)*/ } private fun updateSong() { @@ -206,7 +199,7 @@ class LyricsActivity : AbsMusicServiceActivity(), View.OnClickListener, lyricsString!! } - val materialDialog = MaterialDialog( + /*val materialDialog = MaterialDialog( this ).show { @@ -231,7 +224,7 @@ class LyricsActivity : AbsMusicServiceActivity(), View.OnClickListener, updateSong() } } - MaterialUtil.setTint(materialDialog.getInputLayout(), false) + MaterialUtil.setTint(materialDialog.getInputLayout(), false)*/ } private fun getSongPaths(song: Song): ArrayList { 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 34be7380..9b14e3e8 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 @@ -228,6 +228,12 @@ class MainActivity : AbsSlidingMusicPanelActivity(), 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) + ToolbarContentTintHelper.handleOnCreateOptionsMenu( + this, + toolbar, + menu, + getToolbarBackgroundColor(toolbar) + ) return super.onCreateOptionsMenu(menu) } 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 6872f1ea..241d59c4 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,13 +4,17 @@ import android.os.Bundle import android.view.MenuItem import androidx.annotation.StringRes import androidx.fragment.app.Fragment +import code.name.monkey.appthemehelper.ThemeStore +import code.name.monkey.appthemehelper.util.VersionUtils import code.name.monkey.retromusic.R import code.name.monkey.retromusic.activities.base.AbsBaseActivity +import code.name.monkey.retromusic.appshortcuts.DynamicShortcutManager import code.name.monkey.retromusic.extensions.applyToolbar import code.name.monkey.retromusic.fragments.settings.MainSettingsFragment +import com.afollestad.materialdialogs.color.ColorChooserDialog import kotlinx.android.synthetic.main.activity_settings.* -class SettingsActivity : AbsBaseActivity() { +class SettingsActivity : AbsBaseActivity(), ColorChooserDialog.ColorCallback { private val fragmentManager = supportFragmentManager @@ -69,4 +73,19 @@ class SettingsActivity : AbsBaseActivity() { companion object { const val TAG: String = "SettingsActivity" } + + override fun onColorSelection(dialog: ColorChooserDialog, selectedColor: Int) { + when (dialog.title) { + R.string.accent_color -> { + ThemeStore.editTheme(this).accentColor(selectedColor).commit() + if (VersionUtils.hasNougatMR()) + DynamicShortcutManager(this).updateDynamicShortcuts() + } + } + recreate() + } + + override fun onColorChooserDismissed(dialog: ColorChooserDialog) { + + } } 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 fac356ec..09b66575 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 @@ -14,6 +14,7 @@ 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.MaterialDialogsUtil import code.name.monkey.appthemehelper.util.VersionUtils import code.name.monkey.retromusic.LanguageContextWrapper import code.name.monkey.retromusic.R @@ -33,6 +34,7 @@ abstract class AbsThemeActivity : ATHToolbarActivity(), Runnable { setImmersiveFullscreen() registerSystemUiVisibility() toggleScreenOn() + MaterialDialogsUtil.updateMaterialDialogsThemeSingleton(this) } diff --git a/app/src/main/java/code/name/monkey/retromusic/activities/bugreport/BugReportActivity.kt b/app/src/main/java/code/name/monkey/retromusic/activities/bugreport/BugReportActivity.kt index 4ee68b9b..9e1bd13c 100644 --- a/app/src/main/java/code/name/monkey/retromusic/activities/bugreport/BugReportActivity.kt +++ b/app/src/main/java/code/name/monkey/retromusic/activities/bugreport/BugReportActivity.kt @@ -28,8 +28,7 @@ import code.name.monkey.retromusic.activities.bugreport.model.github.ExtraInfo import code.name.monkey.retromusic.activities.bugreport.model.github.GithubLogin import code.name.monkey.retromusic.activities.bugreport.model.github.GithubTarget import code.name.monkey.retromusic.misc.DialogAsyncTask -import com.afollestad.materialdialogs.MaterialDialog -import com.afollestad.materialdialogs.callbacks.onCancel +import com.google.android.material.dialog.MaterialAlertDialogBuilder import com.google.android.material.floatingactionbutton.FloatingActionButton import com.google.android.material.textfield.TextInputLayout import kotlinx.android.synthetic.main.activity_bug_report.* @@ -278,27 +277,25 @@ open class BugReportActivity : AbsThemeActivity() { when (result) { RESULT_SUCCESS -> tryToFinishActivity() - RESULT_BAD_CREDENTIALS -> MaterialDialog(context).show { - title(R.string.bug_report_failed) - message(R.string.bug_report_failed_wrong_credentials) - positiveButton(android.R.string.ok) - } - RESULT_INVALID_TOKEN -> MaterialDialog(context).show { - title(R.string.bug_report_failed) - message(R.string.bug_report_failed_invalid_token) - positiveButton(android.R.string.ok) - } - RESULT_ISSUES_NOT_ENABLED -> MaterialDialog(context).show { - title(R.string.bug_report_failed) - message(R.string.bug_report_failed_issues_not_available) - positiveButton(android.R.string.ok) - } - else -> MaterialDialog(context).show { - title(R.string.bug_report_failed) - message(R.string.bug_report_failed_unknown) - positiveButton(android.R.string.ok) { tryToFinishActivity() } - onCancel { tryToFinishActivity() } - } + RESULT_BAD_CREDENTIALS -> MaterialAlertDialogBuilder(context) + .setTitle(R.string.bug_report_failed) + .setMessage(R.string.bug_report_failed_wrong_credentials) + .setPositiveButton(android.R.string.ok, null) + .show() + RESULT_INVALID_TOKEN -> MaterialAlertDialogBuilder(context) + .setTitle(R.string.bug_report_failed) + .setMessage(R.string.bug_report_failed_invalid_token) + .setPositiveButton(android.R.string.ok, null).show() + RESULT_ISSUES_NOT_ENABLED -> MaterialAlertDialogBuilder(context) + .setTitle(R.string.bug_report_failed) + .setMessage(R.string.bug_report_failed_issues_not_available) + .setPositiveButton(android.R.string.ok, null) + + else -> MaterialAlertDialogBuilder(context) + .setTitle(R.string.bug_report_failed) + .setMessage(R.string.bug_report_failed_unknown) + .setPositiveButton(android.R.string.ok) { _, _ -> tryToFinishActivity() } + .setNegativeButton(android.R.string.cancel) { _, _ -> { tryToFinishActivity() } } } } @@ -309,6 +306,7 @@ open class BugReportActivity : AbsThemeActivity() { } } + companion object { fun report( 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 7d81bcee..8b49a57c 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 @@ -13,6 +13,7 @@ import android.util.Log import android.view.MenuItem import android.view.View import android.view.animation.OvershootInterpolator +import androidx.appcompat.app.AlertDialog import code.name.monkey.appthemehelper.ThemeStore import code.name.monkey.appthemehelper.util.ATHUtil import code.name.monkey.appthemehelper.util.ColorUtil @@ -24,9 +25,8 @@ import code.name.monkey.retromusic.activities.base.AbsBaseActivity import code.name.monkey.retromusic.activities.saf.SAFGuideActivity import code.name.monkey.retromusic.util.RetroUtil import code.name.monkey.retromusic.util.SAFUtil -import com.afollestad.materialdialogs.MaterialDialog -import com.afollestad.materialdialogs.list.listItems import com.google.android.material.button.MaterialButton +import com.google.android.material.dialog.MaterialAlertDialogBuilder import kotlinx.android.synthetic.main.activity_album_tag_editor.* import org.jaudiotagger.audio.AudioFile import org.jaudiotagger.audio.AudioFileIO @@ -48,17 +48,18 @@ abstract class AbsTagEditorActivity : AbsBaseActivity() { private var savedTags: Map? = null private var savedArtworkInfo: ArtworkInfo? = null - protected val show: MaterialDialog - get() = MaterialDialog(this).show { - title(R.string.update_image) - listItems(items = items) { _, position, _ -> - when (position) { - 0 -> startImagePicker() - 1 -> searchImageOnWeb() - 2 -> deleteImage() + protected val show: AlertDialog + get() = + MaterialAlertDialogBuilder(this) + .setTitle(R.string.update_image) + .setItems(items.toTypedArray()) { _, position -> + when (position) { + 0 -> startImagePicker() + 1 -> searchImageOnWeb() + 2 -> deleteImage() + } } - } - } + .show() protected abstract val contentViewLayout: Int internal val albumArtist: String? diff --git a/app/src/main/java/code/name/monkey/retromusic/dialogs/BlacklistFolderChooserDialog.java b/app/src/main/java/code/name/monkey/retromusic/dialogs/BlacklistFolderChooserDialog.java new file mode 100644 index 00000000..a276db9c --- /dev/null +++ b/app/src/main/java/code/name/monkey/retromusic/dialogs/BlacklistFolderChooserDialog.java @@ -0,0 +1,157 @@ +package code.name.monkey.retromusic.dialogs; + +import android.Manifest; +import android.app.Dialog; +import android.content.pm.PackageManager; +import android.os.Build; +import android.os.Bundle; +import android.os.Environment; +import android.view.View; + +import androidx.annotation.NonNull; +import androidx.core.app.ActivityCompat; +import androidx.fragment.app.DialogFragment; + +import com.afollestad.materialdialogs.MaterialDialog; + +import java.io.File; +import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; +import java.util.List; + +import code.name.monkey.retromusic.R; + +public class BlacklistFolderChooserDialog extends DialogFragment implements MaterialDialog.ListCallback { + + String initialPath = Environment.getExternalStorageDirectory().getAbsolutePath(); + private File parentFolder; + private File[] parentContents; + private boolean canGoUp = false; + private FolderCallback callback; + + public static BlacklistFolderChooserDialog create() { + return new BlacklistFolderChooserDialog(); + } + + private String[] getContentsArray() { + if (parentContents == null) { + if (canGoUp) { + return new String[]{".."}; + } + return new String[]{}; + } + String[] results = new String[parentContents.length + (canGoUp ? 1 : 0)]; + if (canGoUp) { + results[0] = ".."; + } + for (int i = 0; i < parentContents.length; i++) { + results[canGoUp ? i + 1 : i] = parentContents[i].getName(); + } + return results; + } + + private File[] listFiles() { + File[] contents = parentFolder.listFiles(); + List results = new ArrayList<>(); + if (contents != null) { + for (File fi : contents) { + if (fi.isDirectory()) { + results.add(fi); + } + } + Collections.sort(results, new FolderSorter()); + return results.toArray(new File[results.size()]); + } + return null; + } + + @NonNull + @Override + public Dialog onCreateDialog(Bundle savedInstanceState) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M + && ActivityCompat.checkSelfPermission( + getActivity(), Manifest.permission.READ_EXTERNAL_STORAGE) + != PackageManager.PERMISSION_GRANTED) { + return new MaterialDialog.Builder(getActivity()) + .title(R.string.md_error_label) + .content(R.string.md_storage_perm_error) + .positiveText(android.R.string.ok) + .build(); + } + if (savedInstanceState == null) { + savedInstanceState = new Bundle(); + } + if (!savedInstanceState.containsKey("current_path")) { + savedInstanceState.putString("current_path", initialPath); + } + parentFolder = new File(savedInstanceState.getString("current_path", File.pathSeparator)); + checkIfCanGoUp(); + parentContents = listFiles(); + MaterialDialog.Builder builder = + new MaterialDialog.Builder(getActivity()) + .title(parentFolder.getAbsolutePath()) + .items((CharSequence[]) getContentsArray()) + .itemsCallback(this) + .autoDismiss(false) + .onPositive((dialog, which) -> { + dismiss(); + callback.onFolderSelection(BlacklistFolderChooserDialog.this, parentFolder); + }) + .onNegative((materialDialog, dialogAction) -> dismiss()) + .positiveText(R.string.add_action) + .negativeText(android.R.string.cancel); + return builder.build(); + } + + @Override + public void onSelection(MaterialDialog materialDialog, View view, int i, CharSequence s) { + if (canGoUp && i == 0) { + parentFolder = parentFolder.getParentFile(); + if (parentFolder.getAbsolutePath().equals("/storage/emulated")) { + parentFolder = parentFolder.getParentFile(); + } + checkIfCanGoUp(); + } else { + parentFolder = parentContents[canGoUp ? i - 1 : i]; + canGoUp = true; + if (parentFolder.getAbsolutePath().equals("/storage/emulated")) { + parentFolder = Environment.getExternalStorageDirectory(); + } + } + reload(); + } + + private void checkIfCanGoUp() { + canGoUp = parentFolder.getParent() != null; + } + + private void reload() { + parentContents = listFiles(); + MaterialDialog dialog = (MaterialDialog) getDialog(); + dialog.setTitle(parentFolder.getAbsolutePath()); + dialog.setItems((CharSequence[]) getContentsArray()); + } + + @Override + public void onSaveInstanceState(Bundle outState) { + super.onSaveInstanceState(outState); + outState.putString("current_path", parentFolder.getAbsolutePath()); + } + + public void setCallback(FolderCallback callback) { + this.callback = callback; + } + + public interface FolderCallback { + void onFolderSelection(@NonNull BlacklistFolderChooserDialog dialog, @NonNull File folder); + } + + private static class FolderSorter implements Comparator { + + @Override + public int compare(File lhs, File rhs) { + return lhs.getName().compareTo(rhs.getName()); + } + } +} \ No newline at end of file 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 deleted file mode 100644 index 25ace5fa..00000000 --- a/app/src/main/java/code/name/monkey/retromusic/dialogs/BlacklistFolderChooserDialog.kt +++ /dev/null @@ -1,180 +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.Manifest -import android.app.Dialog -import android.content.pm.PackageManager -import android.os.Build -import android.os.Bundle -import android.os.Environment -import androidx.core.app.ActivityCompat -import androidx.fragment.app.DialogFragment -import code.name.monkey.retromusic.R -import com.afollestad.materialdialogs.MaterialDialog -import com.afollestad.materialdialogs.list.listItems -import java.io.File -import java.util.* -import kotlin.collections.ArrayList - -class BlacklistFolderChooserDialog : DialogFragment() { - - private val initialPath = Environment.getExternalStorageDirectory().absolutePath - private var parentFolder: File? = null - private var parentContents: Array? = null - private var canGoUp = false - private var callback: FolderCallback? = null - - - private fun contentsArray(): List { - if (parentContents == null) { - return if (canGoUp) { - return listOf("..") - } else listOf() - } - - val results = arrayOfNulls(parentContents!!.size + if (canGoUp) 1 else 0) - if (canGoUp) { - results[0] = ".." - } - for (i in parentContents!!.indices) { - results[if (canGoUp) i + 1 else i] = parentContents!![i].name - } - - val data = ArrayList() - for (i in results) { - data.add(i!!) - } - return data - } - - private fun listFiles(): Array? { - val contents = parentFolder!!.listFiles() - val results = ArrayList() - if (contents != null) { - for (fi in contents) { - if (fi.isDirectory) { - results.add(fi) - } - } - Collections.sort(results, FolderSorter()) - return results.toTypedArray() - } - return null - } - - override fun onCreateDialog(savedInstanceState: Bundle?): Dialog { - var savedInstanceStateFinal = savedInstanceState - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && - ActivityCompat.checkSelfPermission( - requireActivity(), - Manifest.permission.READ_EXTERNAL_STORAGE - ) != PackageManager.PERMISSION_GRANTED - ) { - return MaterialDialog(requireActivity()).show { - title(R.string.md_error_label) - - message(R.string.md_storage_perm_error) - positiveButton(android.R.string.ok) - } - } - if (savedInstanceStateFinal == null) { - savedInstanceStateFinal = Bundle() - } - if (!savedInstanceStateFinal.containsKey("current_path")) { - savedInstanceStateFinal.putString("current_path", initialPath) - } - parentFolder = File(savedInstanceStateFinal.getString("current_path", File.pathSeparator)) - checkIfCanGoUp() - parentContents = listFiles() - - return MaterialDialog(requireContext()).show { - title(text = parentFolder!!.absolutePath) - - listItems(items = contentsArray(), waitForPositiveButton = false) { _, index, _ -> - onSelection(index) - } - noAutoDismiss() - positiveButton(R.string.add_action) { - dismiss() - callback!!.onFolderSelection(this@BlacklistFolderChooserDialog, parentFolder!!) - } - negativeButton(android.R.string.cancel) { - dismiss() - } - } - } - - private fun onSelection(i: Int) { - if (canGoUp && i == 0) { - parentFolder = parentFolder!!.parentFile - if (parentFolder!!.absolutePath == "/storage/emulated") { - parentFolder = parentFolder!!.parentFile - } - checkIfCanGoUp() - } else { - parentFolder = parentContents!![if (canGoUp) i - 1 else i] - canGoUp = true - if (parentFolder!!.absolutePath == "/storage/emulated") { - parentFolder = Environment.getExternalStorageDirectory() - } - } - reload() - } - - private fun checkIfCanGoUp() { - canGoUp = parentFolder!!.parent != null - } - - private fun reload() { - parentContents = listFiles() - val dialog = dialog as MaterialDialog? - - dialog?.apply { - - setTitle(parentFolder!!.absolutePath) - listItems(items = contentsArray()) { _, index, _ -> - onSelection(index) - } - } - } - - override fun onSaveInstanceState(outState: Bundle) { - super.onSaveInstanceState(outState) - outState.putString("current_path", parentFolder!!.absolutePath) - } - - fun setCallback(callback: FolderCallback) { - this.callback = callback - } - - interface FolderCallback { - fun onFolderSelection(dialog: BlacklistFolderChooserDialog, folder: File) - } - - private class FolderSorter : Comparator { - - override fun compare(lhs: File, rhs: File): Int { - return lhs.name.compareTo(rhs.name) - } - } - - companion object { - - fun create(): BlacklistFolderChooserDialog { - return BlacklistFolderChooserDialog() - } - } -} \ No newline at end of file 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 4af19be4..a1e946cf 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 @@ -36,9 +36,8 @@ 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.PreferenceUtilKT +import com.afollestad.materialdialogs.DialogAction import com.afollestad.materialdialogs.MaterialDialog -import com.afollestad.materialdialogs.WhichButton -import com.afollestad.materialdialogs.actions.getActionButton import com.google.android.material.dialog.MaterialAlertDialogBuilder class SleepTimerDialog : DialogFragment() { @@ -153,10 +152,10 @@ class SleepTimerDialog : DialogFragment() { private fun updateCancelButton() { val musicService = MusicPlayerRemote.musicService if (musicService != null && musicService.pendingQuit) { - materialDialog.getActionButton(WhichButton.NEGATIVE).text = + materialDialog.getActionButton(DialogAction.NEUTRAL).text = materialDialog.context.getString(R.string.cancel_current_timer) } else { - materialDialog.getActionButton(WhichButton.NEGATIVE).text = null + materialDialog.getActionButton(DialogAction.NEUTRAL).text = null } } 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 4c323310..b7d51f06 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 @@ -21,8 +21,8 @@ import android.view.View import android.widget.Toast 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.* @@ -32,7 +32,7 @@ import code.name.monkey.retromusic.util.NavigationUtil * @author Hemanth S (h4h13). */ -abstract class AbsSettingsFragment : PreferenceFragmentCompat() { +abstract class AbsSettingsFragment : ATEPreferenceFragmentCompat() { internal fun showProToastAndNavigate(message: String) { Toast.makeText(requireContext(), "$message is Pro version feature.", Toast.LENGTH_SHORT) diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/settings/ImageSettingFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/settings/ImageSettingFragment.kt index 2f60f1ba..9b5873fa 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/settings/ImageSettingFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/settings/ImageSettingFragment.kt @@ -31,7 +31,6 @@ class ImageSettingFragment : AbsSettingsFragment() { setSummary(autoDownloadImagesPolicy, o) true } - } 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 cc032d19..7e2b7048 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 @@ -48,20 +48,23 @@ class NowPlayingSettingsFragment : AbsSettingsFragment(), } private fun updateAlbumCoverStyleSummary() { - val preference: Preference = findPreference(ALBUM_COVER_STYLE)!! - preference.setSummary(PreferenceUtilKT.albumCoverStyle.titleRes) + val preference: Preference? = findPreference(ALBUM_COVER_STYLE) + preference?.setSummary(PreferenceUtilKT.albumCoverStyle.titleRes) } private fun updateNowPlayingScreenSummary() { - val preference: Preference = findPreference(NOW_PLAYING_SCREEN_ID)!! - preference.setSummary(PreferenceUtilKT.nowPlayingScreen.titleRes) + val preference: Preference? = findPreference(NOW_PLAYING_SCREEN_ID) + preference?.setSummary(PreferenceUtilKT.nowPlayingScreen.titleRes) } override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) PreferenceUtilKT.registerOnSharedPreferenceChangedListener(this) - val preference: Preference = findPreference("album_cover_transform")!! - setSummary(preference) + val preference: Preference? = findPreference("album_cover_transform") + preference?.setOnPreferenceChangeListener { albumPrefs, newValue -> + setSummary(albumPrefs, newValue) + true + } } override fun onDestroyView() { diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/settings/OtherSettingsFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/settings/OtherSettingsFragment.kt index 398bd4ee..2338c6f7 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/settings/OtherSettingsFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/settings/OtherSettingsFragment.kt @@ -17,9 +17,8 @@ package code.name.monkey.retromusic.fragments.settings import android.os.Bundle import android.view.View import androidx.preference.Preference - +import code.name.monkey.appthemehelper.common.prefs.supportv7.ATEListPreference import code.name.monkey.retromusic.R -import code.name.monkey.retromusic.preferences.MaterialListPreference /** * @author Hemanth S (h4h13). @@ -27,8 +26,8 @@ import code.name.monkey.retromusic.preferences.MaterialListPreference class OtherSettingsFragment : AbsSettingsFragment() { override fun invalidateSettings() { - val languagePreference: MaterialListPreference = findPreference("language_name")!! - languagePreference.setOnPreferenceChangeListener { _, _ -> + val languagePreference: ATEListPreference? = findPreference("language_name") + languagePreference?.setOnPreferenceChangeListener { _, _ -> requireActivity().recreate() return@setOnPreferenceChangeListener true } @@ -40,9 +39,15 @@ class OtherSettingsFragment : AbsSettingsFragment() { override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) - val preference: Preference = findPreference("last_added_interval")!! - setSummary(preference) - val languagePreference: Preference = findPreference("language_name")!! - setSummary(languagePreference) + val preference: Preference? = findPreference("last_added_interval") + preference?.setOnPreferenceChangeListener { lastAdded, newValue -> + setSummary(lastAdded, newValue) + true + } + val languagePreference: Preference? = findPreference("language_name") + languagePreference?.setOnPreferenceChangeListener { prefs, newValue -> + setSummary(prefs, newValue) + true + } } } 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 bac4ba93..0a386b34 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 @@ -14,21 +14,15 @@ package code.name.monkey.retromusic.fragments.settings -import android.content.SharedPreferences 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.appthemehelper.common.prefs.supportv7.ATEListPreference import code.name.monkey.retromusic.R -import code.name.monkey.retromusic.util.PreferenceUtilKT - -class PersonalizeSettingsFragment : AbsSettingsFragment(), - SharedPreferences.OnSharedPreferenceChangeListener { +class PersonalizeSettingsFragment : AbsSettingsFragment() { override fun invalidateSettings() { - val toggleFullScreen: TwoStatePreference = findPreference("toggle_full_screen")!! toggleFullScreen.setOnPreferenceChangeListener { _, _ -> requireActivity().recreate() @@ -42,22 +36,15 @@ class PersonalizeSettingsFragment : AbsSettingsFragment(), override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) - PreferenceUtilKT.registerOnSharedPreferenceChangedListener(this) - - var preference: Preference? = findPreference("home_artist_grid_style") - setSummary(preference!!) - preference = findPreference("tab_text_mode") - setSummary(preference!!) - } - - override fun onDestroyView() { - super.onDestroyView() - PreferenceUtilKT.unregisterOnSharedPreferenceChangedListener(this) - } - - override fun onSharedPreferenceChanged(sharedPreferences: SharedPreferences, key: String) { - when (key) { - CAROUSEL_EFFECT -> invalidateSettings() + val homeArtistStyle: ATEListPreference? = findPreference("home_artist_grid_style") + homeArtistStyle?.setOnPreferenceChangeListener { preference, newValue -> + setSummary(preference, newValue) + true + } + val tabTextMode: ATEListPreference? = findPreference("tab_text_mode") + tabTextMode?.setOnPreferenceChangeListener { prefs, newValue -> + setSummary(prefs, newValue) + true } } } 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 7471850c..6568aa74 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 @@ -18,8 +18,6 @@ import android.os.Build import android.os.Bundle import androidx.preference.Preference import androidx.preference.TwoStatePreference -import code.name.monkey.appthemehelper.ACCENT_COLORS -import code.name.monkey.appthemehelper.ACCENT_COLORS_SUB import code.name.monkey.appthemehelper.ThemeStore import code.name.monkey.appthemehelper.common.prefs.supportv7.ATEColorPreference import code.name.monkey.appthemehelper.common.prefs.supportv7.ATESwitchPreference @@ -30,9 +28,7 @@ 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.PreferenceUtilKT -import com.afollestad.materialdialogs.MaterialDialog -import com.afollestad.materialdialogs.color.colorChooser - +import com.afollestad.materialdialogs.color.ColorChooserDialog /** * @author Hemanth S (h4h13). @@ -62,21 +58,12 @@ class ThemeSettingsFragment : AbsSettingsFragment() { accentColorPref.setColor(accentColor, ColorUtil.darkenColor(accentColor)) accentColorPref.setOnPreferenceClickListener { - MaterialDialog(requireActivity()).show { - title(R.string.accent_color) - positiveButton(R.string.set) - colorChooser( - colors = ACCENT_COLORS, - allowCustomArgb = true, - subColors = ACCENT_COLORS_SUB - ) { _, color -> - ThemeStore.editTheme(requireContext()).accentColor(color).commit() - if (VersionUtils.hasNougatMR()) - DynamicShortcutManager(requireContext()).updateDynamicShortcuts() - - requireActivity().recreate() - } - } + ColorChooserDialog.Builder(requireContext(), R.string.accent_color) + .accentMode(true) + .allowUserColorInput(true) + .allowUserColorInputAlpha(false) + .preselect(accentColor) + .show(requireActivity()) return@setOnPreferenceClickListener true } val blackTheme: ATESwitchPreference? = findPreference("black_theme") 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 ef800422..e43b778d 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 @@ -16,7 +16,6 @@ package code.name.monkey.retromusic.preferences import android.app.Dialog import android.content.Context -import android.content.DialogInterface import android.os.Bundle import android.util.AttributeSet import androidx.core.graphics.BlendModeColorFilterCompat 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 a2f2ca6b..75c7e83c 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 @@ -23,13 +23,10 @@ import androidx.core.graphics.BlendModeColorFilterCompat import androidx.core.graphics.BlendModeCompat.SRC_IN import androidx.preference.ListPreference import androidx.preference.PreferenceDialogFragmentCompat -import code.name.monkey.appthemehelper.ThemeStore import code.name.monkey.retromusic.R import code.name.monkey.retromusic.extensions.colorControlNormal import com.afollestad.materialdialogs.MaterialDialog -import com.afollestad.materialdialogs.WhichButton -import com.afollestad.materialdialogs.actions.getActionButton -import com.afollestad.materialdialogs.list.listItemsSingleChoice +import com.google.android.material.dialog.MaterialAlertDialogBuilder class MaterialListPreference @JvmOverloads constructor( context: Context, @@ -72,30 +69,31 @@ class MaterialListPreferenceDialog : PreferenceDialogFragmentCompat() { val entries = arguments?.getStringArrayList(EXTRA_ENTRIES) val entriesValues = arguments?.getStringArrayList(EXTRA_ENTRIES_VALUES) val position: Int = arguments?.getInt(EXTRA_POSITION) ?: 0 - materialDialog = MaterialDialog(requireContext()) - .title(text = materialListPreference.title.toString()) - .positiveButton(R.string.set) - .listItemsSingleChoice( - items = entries, - initialSelection = position, - waitForPositiveButton = true - ) { _, index, _ -> - entriesValues?.let { - materialListPreference.callChangeListener(it[index]) - materialListPreference.setCustomValue(it[index]) - } - entries?.let { - materialListPreference.summary = it[index] - val value = materialListPreference.entryValues[index].toString() - if (materialListPreference.callChangeListener(value)) { - materialListPreference.value = value - } - } - dismiss() - } - materialDialog.getActionButton(WhichButton.POSITIVE) - .updateTextColor(ThemeStore.accentColor(requireContext())) - return materialDialog + /* materialDialog = MaterialDialog(requireContext()) + .title(text = materialListPreference.title.toString()) + .positiveButton(R.string.set) + .listItemsSingleChoice( + items = entries, + initialSelection = position, + waitForPositiveButton = true + ) { _, index, _ -> + entriesValues?.let { + materialListPreference.callChangeListener(it[index]) + materialListPreference.setCustomValue(it[index]) + } + entries?.let { + materialListPreference.summary = it[index] + val value = materialListPreference.entryValues[index].toString() + if (materialListPreference.callChangeListener(value)) { + materialListPreference.value = value + } + } + dismiss() + } + materialDialog.getActionButton(WhichButton.POSITIVE) + .updateTextColor(ThemeStore.accentColor(requireContext())) + return materialDialog*/ + return MaterialAlertDialogBuilder(requireContext()).create() } override fun onDestroyView() { 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 4c31a4a4..3f06af68 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 @@ -17,12 +17,9 @@ package code.name.monkey.retromusic.util import android.content.Context import android.content.Intent import android.content.SharedPreferences -import android.graphics.Color import android.net.Uri import code.name.monkey.retromusic.R -import com.afollestad.materialdialogs.MaterialDialog -import com.afollestad.materialdialogs.WhichButton -import com.afollestad.materialdialogs.actions.getActionButton +import com.google.android.material.dialog.MaterialAlertDialogBuilder object AppRater { private const val DO_NOT_SHOW_AGAIN = "do_not_show_again"// Package Name @@ -64,30 +61,24 @@ object AppRater { } private fun showRateDialog(context: Context, editor: SharedPreferences.Editor) { - MaterialDialog(context) - .show { - 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) { - context.startActivity( - Intent( - Intent.ACTION_VIEW, - Uri.parse("market://details?id=${context.packageName}") - ) + MaterialAlertDialogBuilder(context) + .setTitle("Rate this App") + .setMessage("If you enjoy using Retro Music, please take a moment to rate it. Thanks for your support!") + .setPositiveButton(R.string.app_name) { _, _ -> + context.startActivity( + Intent( + Intent.ACTION_VIEW, + Uri.parse("market://details?id=${context.packageName}") ) - editor.putBoolean(DO_NOT_SHOW_AGAIN, true) - editor.commit() - dismiss() - } - negativeButton(text = "Later") { - dismiss() - } - neutralButton(text = " No thanks") { - editor.putBoolean(DO_NOT_SHOW_AGAIN, true) - editor.commit() - dismiss() - } - getActionButton(WhichButton.POSITIVE).updateTextColor(Color.RED) + ) + editor.putBoolean(DO_NOT_SHOW_AGAIN, true) + editor.commit() } + .setNeutralButton("Not now", null) + .setNegativeButton("No thanks") { _, _ -> + editor.putBoolean(DO_NOT_SHOW_AGAIN, true) + editor.commit() + } + .show() } } \ No newline at end of file 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 6d99d0bb..00052977 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 @@ -23,10 +23,11 @@ import android.provider.BaseColumns import android.provider.MediaStore import android.provider.Settings import android.widget.Toast +import androidx.appcompat.app.AlertDialog 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.MaterialDialog +import com.google.android.material.dialog.MaterialAlertDialogBuilder class RingtoneManager(val context: Context) { fun setRingtone(song: Song) { @@ -72,17 +73,17 @@ class RingtoneManager(val context: Context) { return false } - fun getDialog(context: Context): MaterialDialog { - return MaterialDialog(context).show { - title(R.string.dialog_title_set_ringtone) - message(R.string.dialog_message_set_ringtone) - positiveButton(android.R.string.ok) { + fun getDialog(context: Context): AlertDialog { + return MaterialAlertDialogBuilder(context) + .setTitle(R.string.dialog_title_set_ringtone) + .setMessage(R.string.dialog_message_set_ringtone) + .setPositiveButton(android.R.string.ok) { _, _ -> val intent = Intent(Settings.ACTION_MANAGE_WRITE_SETTINGS) intent.data = Uri.parse("package:" + context.applicationContext.packageName) context.startActivity(intent) } - negativeButton(android.R.string.cancel) - } + .setNegativeButton(android.R.string.cancel, null) + .create() } } } \ No newline at end of file diff --git a/app/src/main/res/layout/preference_category_title.xml b/app/src/main/res/layout/preference_category_title.xml index 4a7563f7..cdbefb6f 100644 --- a/app/src/main/res/layout/preference_category_title.xml +++ b/app/src/main/res/layout/preference_category_title.xml @@ -25,5 +25,5 @@ android:paddingTop="16dp" android:paddingEnd="16dp" android:textAppearance="@style/TextViewOverline" - tools:text="@string/about_settings_summary" /> + tools:text="@tools:sample/full_names" /> \ No newline at end of file diff --git a/app/src/main/res/values-v27/styles_parents.xml b/app/src/main/res/values-v27/styles_parents.xml index a6fca6f5..ca42d097 100644 --- a/app/src/main/res/values-v27/styles_parents.xml +++ b/app/src/main/res/values-v27/styles_parents.xml @@ -32,7 +32,6 @@ diff --git a/app/src/main/res/xml/pref_advanced.xml b/app/src/main/res/xml/pref_advanced.xml index 490cc5f1..643cbcef 100755 --- a/app/src/main/res/xml/pref_advanced.xml +++ b/app/src/main/res/xml/pref_advanced.xml @@ -70,7 +70,7 @@ app:showSeekBarValue="true" /> - - diff --git a/app/src/main/res/xml/pref_images.xml b/app/src/main/res/xml/pref_images.xml index b2dc9d11..0ed21464 100755 --- a/app/src/main/res/xml/pref_images.xml +++ b/app/src/main/res/xml/pref_images.xml @@ -10,7 +10,7 @@ android:title="@string/pref_title_ignore_media_store_artwork" app:icon="@drawable/ic_image_white_24dp" /> - - - - { - mClickedDialogEntryIndex = i; + builder.setSingleChoiceItems(preference.getEntries(), mClickedDialogEntryIndex, (dialog, which) -> { + mClickedDialogEntryIndex = which; + onClick(dialog, which); + dismiss(); }); - builder.setPositiveButton("Ok", null); - builder.setNegativeButton("", null); - builder.setNeutralButton("", null); + /* + * The typical interaction for list-based dialogs is to have + * click-on-an-item dismiss the dialog instead of the user having to + * press 'Ok'. + */ + builder.setPositiveButton(null, null); + builder.setNegativeButton(null, null); + builder.setNeutralButton(null, null); } @Override public void onDialogClosed(boolean positiveResult) { final ListPreference preference = getListPreference(); + Log.i(TAG, "onDialogClosed: " + positiveResult); if (positiveResult && mClickedDialogEntryIndex >= 0 && preference.getEntryValues() != null) { String value = preference.getEntryValues()[mClickedDialogEntryIndex].toString(); + Log.i(TAG, "onDialogClosed: value " + value); if (preference.callChangeListener(value)) { preference.setValue(value); + Log.i(TAG, "onDialogClosed: set value "); } } } + + @Override + public void onClick(DialogInterface dialog, int which) { + Log.i(TAG, "onClick: " + which); + mClickedDialogEntryIndex = which; + super.onClick(dialog, DialogInterface.BUTTON_POSITIVE); + } } \ No newline at end of file diff --git a/appthemehelper/src/main/java/code/name/monkey/appthemehelper/common/prefs/supportv7/dialogs/ATEPreferenceDialogFragment.java b/appthemehelper/src/main/java/code/name/monkey/appthemehelper/common/prefs/supportv7/dialogs/ATEPreferenceDialogFragment.java index 2f886215..2fb36a80 100644 --- a/appthemehelper/src/main/java/code/name/monkey/appthemehelper/common/prefs/supportv7/dialogs/ATEPreferenceDialogFragment.java +++ b/appthemehelper/src/main/java/code/name/monkey/appthemehelper/common/prefs/supportv7/dialogs/ATEPreferenceDialogFragment.java @@ -14,16 +14,17 @@ package code.name.monkey.appthemehelper.common.prefs.supportv7.dialogs; - import android.app.Dialog; +import android.content.DialogInterface; import android.os.Bundle; +import android.util.Log; import android.view.Window; import androidx.annotation.NonNull; -import androidx.annotation.Nullable; import androidx.appcompat.app.AlertDialog; import androidx.fragment.app.DialogFragment; import androidx.fragment.app.Fragment; +import androidx.fragment.app.FragmentActivity; import androidx.preference.DialogPreference; import com.google.android.material.dialog.MaterialAlertDialogBuilder; @@ -33,10 +34,10 @@ import code.name.monkey.appthemehelper.R; /** * @author Karim Abou Zeid (kabouzeid) */ -public class ATEPreferenceDialogFragment extends DialogFragment { - - static final String ARG_KEY = "key"; - +public class ATEPreferenceDialogFragment extends DialogFragment implements DialogInterface.OnClickListener { + protected static final String ARG_KEY = "key"; + private static final String TAG = "ATEPreferenceDialog"; + private int mWhichButtonClicked; private DialogPreference mPreference; public static ATEPreferenceDialogFragment newInstance(String key) { @@ -59,34 +60,27 @@ public class ATEPreferenceDialogFragment extends DialogFragment { } } - public DialogPreference getPreference() { - return this.mPreference; - } - @NonNull - public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) { - MaterialAlertDialogBuilder materialDialog = new MaterialAlertDialogBuilder(requireActivity(), + public Dialog onCreateDialog(Bundle savedInstanceState) { + FragmentActivity context = this.getActivity(); + MaterialAlertDialogBuilder builder = new MaterialAlertDialogBuilder(context, R.style.ThemeOverlay_MaterialComponents_Dialog_Alert) - .setTitle(mPreference.getTitle()) - .setIcon(mPreference.getIcon()) - .setMessage(mPreference.getDialogMessage()) - .setPositiveButton(mPreference.getPositiveButtonText(), (dialogInterface, i) -> { - onDialogClosed(true); - }) - .setNegativeButton(mPreference.getNegativeButtonText(), (dialogInterface, i) -> { - onDialogClosed(false); - }); + .setTitle(this.mPreference.getDialogTitle()) + .setIcon(this.mPreference.getDialogIcon()) + .setMessage(this.mPreference.getDialogMessage()) + .setPositiveButton(this.mPreference.getPositiveButtonText(), this) + .setNegativeButton(this.mPreference.getNegativeButtonText(), this); - //this.onPrepareDialogBuilder(materialDialog); - AlertDialog dialog = materialDialog.create(); + this.onPrepareDialogBuilder(builder); + AlertDialog dialog = builder.create(); if (this.needInputMethod()) { this.requestInputMethod(dialog); } return dialog; } - public void onDialogClosed(boolean positiveResult) { - + public DialogPreference getPreference() { + return this.mPreference; } protected void onPrepareDialogBuilder(MaterialAlertDialogBuilder builder) { @@ -100,4 +94,22 @@ public class ATEPreferenceDialogFragment extends DialogFragment { Window window = dialog.getWindow(); window.setSoftInputMode(5); } + + @Override + public void onDismiss(DialogInterface dialog) { + super.onDismiss(dialog); + Log.i(TAG, "onDismiss: " + mWhichButtonClicked); + onDialogClosed(mWhichButtonClicked == DialogInterface.BUTTON_POSITIVE); + } + + public void onDialogClosed(boolean positiveResult) { + + } + + @Override + public void onClick(DialogInterface dialog, int which) { + Log.i(TAG, "onClick: " + which); + mWhichButtonClicked = which; + onDialogClosed(which == DialogInterface.BUTTON_POSITIVE); + } } \ No newline at end of file diff --git a/appthemehelper/src/main/java/code/name/monkey/appthemehelper/util/MaterialDialogsUtil.kt b/appthemehelper/src/main/java/code/name/monkey/appthemehelper/util/MaterialDialogsUtil.kt new file mode 100644 index 00000000..5d2f3881 --- /dev/null +++ b/appthemehelper/src/main/java/code/name/monkey/appthemehelper/util/MaterialDialogsUtil.kt @@ -0,0 +1,25 @@ +package code.name.monkey.appthemehelper.util + +import android.content.Context +import android.content.res.ColorStateList +import code.name.monkey.appthemehelper.ThemeStore +import code.name.monkey.appthemehelper.util.ATHUtil.isWindowBackgroundDark +import com.afollestad.materialdialogs.internal.ThemeSingleton + +/** + * @author Karim Abou Zeid (kabouzeid) + */ +object MaterialDialogsUtil { + fun updateMaterialDialogsThemeSingleton(context: Context) { + val md = ThemeSingleton.get() + md.titleColor = ThemeStore.textColorPrimary(context) + md.contentColor = ThemeStore.textColorSecondary(context) + md.itemColor = md.titleColor + md.widgetColor = ThemeStore.accentColor(context) + md.linkColor = ColorStateList.valueOf(md.widgetColor) + md.positiveColor = ColorStateList.valueOf(md.widgetColor) + md.neutralColor = ColorStateList.valueOf(md.widgetColor) + md.negativeColor = ColorStateList.valueOf(md.widgetColor) + md.darkTheme = isWindowBackgroundDark(context) + } +} \ No newline at end of file diff --git a/appthemehelper/src/main/java/code/name/monkey/appthemehelper/util/MaterialUtil.kt b/appthemehelper/src/main/java/code/name/monkey/appthemehelper/util/MaterialUtil.kt index 388e3e37..4eca6ea1 100644 --- a/appthemehelper/src/main/java/code/name/monkey/appthemehelper/util/MaterialUtil.kt +++ b/appthemehelper/src/main/java/code/name/monkey/appthemehelper/util/MaterialUtil.kt @@ -1,9 +1,7 @@ package code.name.monkey.appthemehelper.util import android.content.res.ColorStateList -import androidx.appcompat.widget.AppCompatButton import code.name.monkey.appthemehelper.ThemeStore -import com.afollestad.materialdialogs.internal.button.DialogActionButton import com.google.android.material.button.MaterialButton import com.google.android.material.textfield.TextInputLayout @@ -54,30 +52,4 @@ object MaterialUtil { textInputLayout.isHintAnimationEnabled = true } } - - @JvmOverloads - @JvmStatic - fun setTint( - button: DialogActionButton, - color: Int = ThemeStore.accentColor(button.context), - background: Boolean = true - ) { - val temp = button as AppCompatButton - val context = temp.context - val colorState = ColorStateList.valueOf(color) - val textColor = - ColorStateList.valueOf( - MaterialValueHelper.getPrimaryTextColor( - context, - ColorUtil.isColorLight(color) - ) - ) - - if (background) { - temp.backgroundTintList = colorState - temp.setTextColor(textColor) - } else { - temp.setTextColor(colorState) - } - } }