Dialog corner and Filter song duration

This commit is contained in:
h4h13 2019-02-19 16:08:51 +05:30
parent a5a27e62aa
commit fc868e1c2e
75 changed files with 1409 additions and 1294 deletions

View file

@ -28,6 +28,7 @@ import code.name.monkey.retromusic.ui.activities.base.AbsBaseActivity
import code.name.monkey.retromusic.ui.adapter.ContributorAdapter
import code.name.monkey.retromusic.util.NavigationUtil
import com.afollestad.materialdialogs.MaterialDialog
import com.afollestad.materialdialogs.list.listItems
import com.google.gson.Gson
import com.google.gson.reflect.TypeToken
import kotlinx.android.synthetic.main.activity_about.*
@ -117,7 +118,7 @@ class AboutActivity : AbsBaseActivity(), View.OnClickListener {
override fun onClick(view: View) {
when (view.id) {
R.id.pinterestLink->openUrl(PINTEREST)
R.id.pinterestLink -> openUrl(PINTEREST)
R.id.faqLink -> openUrl(FAQ_LINK)
R.id.telegramLink -> openUrl(APP_TELEGRAM_LINK)
R.id.discordLink -> openUrl(DISCORD_LINK)
@ -135,17 +136,15 @@ class AboutActivity : AbsBaseActivity(), View.OnClickListener {
}
private fun showChangeLogOptions() {
MaterialDialog.Builder(this)
.items("Telegram Channel", "App")
.itemsCallback { _, _, position, _ ->
if (position == 0) {
openUrl(TELEGRAM_CHANGE_LOG)
} else {
NavigationUtil.gotoWhatNews(this@AboutActivity)
}
MaterialDialog(this).show {
listItems(items = listOf("Telegram Channel", "App")) { _, position, _ ->
if (position == 0) {
openUrl(TELEGRAM_CHANGE_LOG)
} else {
NavigationUtil.gotoWhatNews(this@AboutActivity)
}
.build()
.show()
}
}
}
private fun getAppVersion(): String {

View file

@ -27,6 +27,7 @@ import code.name.monkey.retromusic.util.MusicUtil
import code.name.monkey.retromusic.util.PreferenceUtil
import code.name.monkey.retromusic.util.RetroUtil
import com.afollestad.materialdialogs.MaterialDialog
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.*
@ -133,19 +134,18 @@ class LyricsActivity : AbsMusicServiceActivity(), View.OnClickListener, ViewPage
e.printStackTrace()
}
MaterialDialog.Builder(this)
.title("Add lyrics")
.neutralText("Search")
.content("Add time frame lyrics")
.negativeText("Delete")
.onNegative { _, _ ->
LyricUtil.deleteLrcFile(song.title, song.artistName)
}
.onNeutral { _, _ -> RetroUtil.openUrl(this@LyricsActivity, googleSearchLrcUrl) }
.inputType(InputType.TYPE_CLASS_TEXT or InputType.TYPE_TEXT_FLAG_MULTI_LINE)
.input("Paste lyrics here", content) { _, input ->
LyricUtil.writeLrcToLoc(song.title, song.artistName, input.toString())
}.show()
MaterialDialog(this).show {
title(text = "Add lyrics")
neutralButton(text = "Search") { RetroUtil.openUrl(this@LyricsActivity, googleSearchLrcUrl) }
message(text = "Add time frame lyrics")
negativeButton(text = "Delete") { LyricUtil.deleteLrcFile(song.title, song.artistName) }
input(hint = "Paste lyrics here",
prefill = content,
inputType = InputType.TYPE_CLASS_TEXT or InputType.TYPE_TEXT_FLAG_MULTI_LINE) { _, input ->
LyricUtil.writeLrcToLoc(song.title, song.artistName, input.toString())
}
positiveButton(android.R.string.ok)
}
}
private fun showLyricsSaveDialog() {
@ -154,17 +154,20 @@ class LyricsActivity : AbsMusicServiceActivity(), View.OnClickListener, ViewPage
} else {
lyricsString!!
}
MaterialDialog.Builder(this)
.title("Add lyrics")
.neutralText("Search")
.onNeutral { _, _ -> RetroUtil.openUrl(this@LyricsActivity, getGoogleSearchUrl(song.title, song.artistName)) }
.inputType(InputType.TYPE_CLASS_TEXT or InputType.TYPE_TEXT_FLAG_MULTI_LINE)
.input("Paste lyrics here", content) { _, input ->
val fieldKeyValueMap = EnumMap<FieldKey, String>(FieldKey::class.java)
fieldKeyValueMap[FieldKey.LYRICS] = input.toString()
WriteTagsAsyncTask(this@LyricsActivity).execute(WriteTagsAsyncTask.LoadingInfo(getSongPaths(song), fieldKeyValueMap, null))
}
.show()
MaterialDialog(this).show {
title(text = "Add lyrics")
neutralButton(text = "Search") { RetroUtil.openUrl(this@LyricsActivity, googleSearchLrcUrl) }
negativeButton(text = "Delete") { LyricUtil.deleteLrcFile(song.title, song.artistName) }
input(hint = "Paste lyrics here",
prefill = content,
inputType = InputType.TYPE_CLASS_TEXT or InputType.TYPE_TEXT_FLAG_MULTI_LINE) { _, input ->
val fieldKeyValueMap = EnumMap<FieldKey, String>(FieldKey::class.java)
fieldKeyValueMap[FieldKey.LYRICS] = input.toString()
WriteTagsAsyncTask(this@LyricsActivity).execute(WriteTagsAsyncTask.LoadingInfo(getSongPaths(song), fieldKeyValueMap, null))
}
positiveButton(android.R.string.ok)
}
}
private fun getSongPaths(song: Song): ArrayList<String> {

View file

@ -12,7 +12,6 @@ import android.view.View
import android.view.ViewGroup
import androidx.core.app.ActivityCompat
import androidx.fragment.app.Fragment
import code.name.monkey.retromusic.App
import code.name.monkey.retromusic.R
import code.name.monkey.retromusic.helper.MusicPlayerRemote
import code.name.monkey.retromusic.helper.SearchQueryHelper
@ -27,6 +26,7 @@ import code.name.monkey.retromusic.ui.fragments.mainactivity.home.BannerHomeFrag
import code.name.monkey.retromusic.util.NavigationUtil
import code.name.monkey.retromusic.util.PreferenceUtil
import com.afollestad.materialdialogs.MaterialDialog
import com.afollestad.materialdialogs.callbacks.onDismiss
import io.reactivex.disposables.CompositeDisposable
import java.util.*
@ -262,18 +262,17 @@ class MainActivity : AbsSlidingMusicPanelActivity(), SharedPreferences.OnSharedP
}
private fun showPromotionalOffer() {
MaterialDialog.Builder(this)
.positiveText("Buy")
.onPositive { _, _ -> startActivity(Intent(this@MainActivity, PurchaseActivity::class.java)) }
.negativeText(android.R.string.cancel)
.customView(R.layout.dialog_promotional_offer, false)
.dismissListener {
PreferenceManager.getDefaultSharedPreferences(this@MainActivity)
.edit()
.putBoolean("shown", true)
.apply()
}
.show()
/*MaterialDialog(this).show {
positiveButton(text = "Buy") { startActivity(Intent(this@MainActivity, PurchaseActivity::class.java)) }
negativeButton(android.R.string.cancel)
customView(R.layout.dialog_promotional_offer)
onDismiss {
PreferenceManager.getDefaultSharedPreferences(this@MainActivity)
.edit()
.putBoolean("shown", true)
.apply()
}
}*/
}
private fun selectedFragment(itemId: Int) {

View file

@ -3,28 +3,22 @@ package code.name.monkey.retromusic.ui.activities
import android.content.SharedPreferences
import android.os.Bundle
import android.view.MenuItem
import androidx.annotation.ColorInt
import androidx.annotation.StringRes
import androidx.fragment.app.Fragment
import code.name.monkey.appthemehelper.ThemeStore
import code.name.monkey.appthemehelper.util.ColorUtil
import code.name.monkey.appthemehelper.util.ToolbarContentTintHelper
import code.name.monkey.appthemehelper.util.VersionUtils
import code.name.monkey.retromusic.App.Companion.context
import code.name.monkey.retromusic.R
import code.name.monkey.retromusic.appshortcuts.DynamicShortcutManager
import code.name.monkey.retromusic.ui.activities.base.AbsBaseActivity
import code.name.monkey.retromusic.ui.fragments.settings.MainSettingsFragment
import code.name.monkey.retromusic.util.PreferenceUtil
import com.afollestad.materialdialogs.color.ColorChooserDialog
import kotlinx.android.synthetic.main.activity_settings.*
class SettingsActivity : AbsBaseActivity(), ColorChooserDialog.ColorCallback, SharedPreferences.OnSharedPreferenceChangeListener {
class SettingsActivity : AbsBaseActivity(), /*ColorChooserDialog.ColorCallback,*/ SharedPreferences.OnSharedPreferenceChangeListener {
private val fragmentManager = supportFragmentManager
override fun onColorSelection(dialog: ColorChooserDialog, @ColorInt selectedColor: Int) {
/* override fun onColorSelection(dialog: ColorChooserDialog, @ColorInt selectedColor: Int) {
when (dialog.title) {
R.string.primary_color -> {
val theme = if (ColorUtil.isColorLight(selectedColor))
@ -43,7 +37,7 @@ class SettingsActivity : AbsBaseActivity(), ColorChooserDialog.ColorCallback, Sh
override fun onColorChooserDismissed(dialog: ColorChooserDialog) {
}
}*/
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)

View file

@ -22,6 +22,7 @@ import code.name.monkey.retromusic.util.Compressor
import code.name.monkey.retromusic.util.ImageUtil
import code.name.monkey.retromusic.util.PreferenceUtil
import com.afollestad.materialdialogs.MaterialDialog
import com.afollestad.materialdialogs.list.listItems
import io.reactivex.android.schedulers.AndroidSchedulers
import io.reactivex.disposables.CompositeDisposable
import io.reactivex.schedulers.Schedulers
@ -29,7 +30,6 @@ import kotlinx.android.synthetic.main.activity_user_info.*
import java.io.File
import java.io.FileOutputStream
import java.io.IOException
import java.util.*
class UserInfoActivity : AbsBaseActivity() {
@ -56,15 +56,15 @@ class UserInfoActivity : AbsBaseActivity() {
loadBannerFromStorage(PreferenceUtil.getInstance().bannerImage)
}
userImage.setOnClickListener {
MaterialDialog.Builder(this)
.title("Set a profile photo")
.items(Arrays.asList(getString(R.string.new_profile_photo), getString(R.string.remove_profile_photo)))
.itemsCallback { _, _, position, _ ->
when (position) {
0 -> pickNewPhoto()
1 -> PreferenceUtil.getInstance().saveProfileImage("")
}
}.show()
MaterialDialog(this).show {
title(text = "Set a profile photo")
listItems(items = listOf(getString(R.string.new_profile_photo), getString(R.string.remove_profile_photo))) { _, position, _ ->
when (position) {
0 -> pickNewPhoto()
1 -> PreferenceUtil.getInstance().saveProfileImage("")
}
}
}
}
bannerSelect.setOnClickListener {
showBannerOptions()
@ -103,16 +103,16 @@ class UserInfoActivity : AbsBaseActivity() {
private fun showBannerOptions() {
MaterialDialog.Builder(this)
.title(R.string.select_banner_photo)
.items(Arrays.asList(getString(R.string.new_banner_photo),
getString(R.string.remove_banner_photo)))
.itemsCallback { _, _, position, _ ->
when (position) {
0 -> selectBannerImage()
1 -> PreferenceUtil.getInstance().setBannerImagePath("")
}
}.show()
MaterialDialog(this).show {
title(R.string.select_banner_photo)
listItems(items = listOf(getString(R.string.new_banner_photo), getString(R.string.remove_banner_photo)))
{ _, position, _ ->
when (position) {
0 -> selectBannerImage()
1 -> PreferenceUtil.getInstance().setBannerImagePath("")
}
}
}
}
private fun selectBannerImage() {

View file

@ -7,7 +7,6 @@ import android.os.Bundle;
import android.webkit.WebView;
import android.widget.TextView;
import com.afollestad.materialdialogs.internal.ThemeSingleton;
import com.google.android.material.appbar.AppBarLayout;
import java.io.BufferedReader;
@ -17,6 +16,7 @@ import java.io.InputStreamReader;
import androidx.annotation.NonNull;
import androidx.appcompat.widget.Toolbar;
import code.name.monkey.appthemehelper.ThemeStore;
import code.name.monkey.appthemehelper.util.ATHUtil;
import code.name.monkey.appthemehelper.util.ColorUtil;
import code.name.monkey.appthemehelper.util.ToolbarContentTintHelper;
import code.name.monkey.retromusic.R;
@ -79,12 +79,12 @@ public class WhatsNewActivity extends AbsBaseActivity {
// Inject color values for WebView body background and links
final String backgroundColor = colorToHex(ThemeStore.Companion.primaryColor(this));
final String contentColor = ThemeSingleton.get().darkTheme ? "#ffffff" : "#000000";
final String contentColor = ATHUtil.INSTANCE.isWindowBackgroundDark(this) ? "#ffffff" : "#000000";
webView.loadData(buf.toString()
.replace("{style-placeholder}",
String.format("body { background-color: %s; color: %s; }", backgroundColor, contentColor))
.replace("{link-color}", colorToHex(ThemeSingleton.get().positiveColor.getDefaultColor()))
.replace("{link-color-active}", colorToHex(ColorUtil.INSTANCE.lightenColor(ThemeSingleton.get().positiveColor.getDefaultColor())))
.replace("{link-color}", colorToHex(ThemeStore.Companion.accentColor(this)))
.replace("{link-color-active}", colorToHex(ColorUtil.INSTANCE.lightenColor(ThemeStore.Companion.accentColor(this))))
, "text/html", "UTF-8");
} catch (Throwable e) {
webView.loadData("<h1>Unable to load</h1><p>" + e.getLocalizedMessage() + "</p>", "text/html", "UTF-8");

View file

@ -24,7 +24,7 @@ abstract class AbsThemeActivity : AbsCrashCollector(), Runnable {
setTheme(PreferenceUtil.getInstance().generalTheme)
hideStatusBar()
super.onCreate(savedInstanceState)
MaterialDialogsUtil.updateMaterialDialogsThemeSingleton(this)
//MaterialDialogsUtil.updateMaterialDialogsThemeSingleton(this)
changeBackgroundShape()
setImmersiveFullscreen()

View file

@ -14,6 +14,7 @@ import android.view.inputmethod.EditorInfo
import android.widget.Toast
import androidx.annotation.StringDef
import androidx.annotation.StringRes
import androidx.appcompat.app.AlertDialog
import code.name.monkey.appthemehelper.ThemeStore
import code.name.monkey.appthemehelper.util.TintHelper
import code.name.monkey.retromusic.R
@ -25,6 +26,7 @@ import code.name.monkey.retromusic.ui.activities.bugreport.model.github.ExtraInf
import code.name.monkey.retromusic.ui.activities.bugreport.model.github.GithubLogin
import code.name.monkey.retromusic.ui.activities.bugreport.model.github.GithubTarget
import com.afollestad.materialdialogs.MaterialDialog
import com.afollestad.materialdialogs.callbacks.onCancel
import com.google.android.material.floatingactionbutton.FloatingActionButton
import com.google.android.material.textfield.TextInputLayout
import kotlinx.android.synthetic.main.activity_bug_report.*
@ -223,12 +225,8 @@ open class BugReportActivity : AbsThemeActivity() {
private class ReportIssueAsyncTask private constructor(activity: Activity, private val report: Report, private val target: GithubTarget,
private val login: GithubLogin) : DialogAsyncTask<Void, Void, String>(activity) {
override fun createDialog(context: Context): Dialog {
return MaterialDialog.Builder(context)
.progress(true, 0)
.progressIndeterminateStyle(true)
.title(R.string.bug_report_uploading)
return AlertDialog.Builder(context)
.show()
}
@ -269,28 +267,27 @@ open class BugReportActivity : AbsThemeActivity() {
when (result) {
RESULT_SUCCESS -> tryToFinishActivity()
RESULT_BAD_CREDENTIALS -> MaterialDialog.Builder(context)
.title(R.string.bug_report_failed)
.content(R.string.bug_report_failed_wrong_credentials)
.positiveText(android.R.string.ok)
.show()
RESULT_INVALID_TOKEN -> MaterialDialog.Builder(context)
.title(R.string.bug_report_failed)
.content(R.string.bug_report_failed_invalid_token)
.positiveText(android.R.string.ok)
.show()
RESULT_ISSUES_NOT_ENABLED -> MaterialDialog.Builder(context)
.title(R.string.bug_report_failed)
.content(R.string.bug_report_failed_issues_not_available)
.positiveText(android.R.string.ok)
.show()
else -> MaterialDialog.Builder(context)
.title(R.string.bug_report_failed)
.content(R.string.bug_report_failed_unknown)
.positiveText(android.R.string.ok)
.onPositive { _, _ -> tryToFinishActivity() }
.cancelListener { tryToFinishActivity() }
.show()
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() }
}
}
}

View file

@ -17,6 +17,7 @@ import code.name.monkey.retromusic.R
import code.name.monkey.retromusic.ui.activities.base.AbsBaseActivity
import code.name.monkey.retromusic.util.RetroUtil
import com.afollestad.materialdialogs.MaterialDialog
import com.afollestad.materialdialogs.list.listItems
import kotlinx.android.synthetic.main.activity_album_tag_editor.*
import org.jaudiotagger.audio.AudioFile
import org.jaudiotagger.audio.AudioFileIO
@ -34,18 +35,17 @@ abstract class AbsTagEditorActivity : AbsBaseActivity() {
private var songPaths: List<String>? = null
protected val show: MaterialDialog
get() = MaterialDialog.Builder(this@AbsTagEditorActivity)
.title(R.string.update_image)
.items(*items)
.itemsCallback { _, _, position, _ ->
when (position) {
0 -> getImageFromLastFM()
1 -> startImagePicker()
2 -> searchImageOnWeb()
3 -> deleteImage()
}
}.show()
get() = MaterialDialog(this@AbsTagEditorActivity).show {
title(R.string.update_image)
listItems(items = items as List<String>) { _, position, _ ->
when (position) {
0 -> getImageFromLastFM()
1 -> startImagePicker()
2 -> searchImageOnWeb()
3 -> deleteImage()
}
}
}
protected abstract val contentViewLayout: Int
internal val albumArtist: String?

View file

@ -5,8 +5,6 @@ import android.app.Dialog;
import android.content.Context;
import android.graphics.Bitmap;
import android.media.MediaScannerConnection;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import com.afollestad.materialdialogs.MaterialDialog;
@ -28,6 +26,8 @@ import java.io.IOException;
import java.util.Collection;
import java.util.Map;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import code.name.monkey.retromusic.R;
import code.name.monkey.retromusic.misc.DialogAsyncTask;
import code.name.monkey.retromusic.misc.UpdateToastMediaScannerCompletionListener;
@ -134,18 +134,16 @@ public class WriteTagsAsyncTask extends
@Override
protected Dialog createDialog(@NonNull Context context) {
return new MaterialDialog.Builder(context)
.title(R.string.saving_changes)
.cancelable(false)
.progress(false, 0)
.build();
return new MaterialDialog(context)
.title(R.string.saving_changes, "")
.cancelable(false);
}
@Override
protected void onProgressUpdate(@NonNull Dialog dialog, Integer... values) {
super.onProgressUpdate(dialog, values);
((MaterialDialog) dialog).setMaxProgress(values[1]);
((MaterialDialog) dialog).setProgress(values[0]);
//((MaterialDialog) dialog).setMaxProgress(values[1]);
//((MaterialDialog) dialog).setProgress(values[0]);
}
public static class LoadingInfo {

View file

@ -543,8 +543,7 @@ public class FoldersFragment extends AbsMainActivityFragment implements
}
}
private static class ListSongsAsyncTask extends
ListingFilesDialogAsyncTask<ListSongsAsyncTask.LoadingInfo, Void, ArrayList<Song>> {
private static class ListSongsAsyncTask extends ListingFilesDialogAsyncTask<ListSongsAsyncTask.LoadingInfo, Void, ArrayList<Song>> {
private final Object extra;
private WeakReference<Context> contextWeakReference;
@ -738,15 +737,8 @@ public class FoldersFragment extends AbsMainActivityFragment implements
@Override
protected Dialog createDialog(@NonNull Context context) {
return new MaterialDialog.Builder(context)
.title(R.string.listing_files)
.progress(true, 0)
.progressIndeterminateStyle(true)
.cancelListener(dialog -> cancel(false))
.dismissListener(dialog -> cancel(false))
.negativeText(android.R.string.cancel)
.onNegative((dialog, which) -> cancel(false))
.show();
return new MaterialDialog(context)
.title(R.string.listing_files,"");
}
}
}

View file

@ -4,6 +4,7 @@ import android.animation.ArgbEvaluator
import android.animation.ValueAnimator
import android.annotation.SuppressLint
import android.content.Intent
import android.graphics.Color
import android.graphics.drawable.Drawable
import android.os.AsyncTask
import android.os.Bundle
@ -12,6 +13,7 @@ import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.appcompat.widget.Toolbar
import androidx.palette.graphics.Palette
import code.name.monkey.appthemehelper.util.ATHUtil
import code.name.monkey.appthemehelper.util.ColorUtil
import code.name.monkey.appthemehelper.util.MaterialValueHelper
@ -142,6 +144,10 @@ class ColorFragment : AbsPlayerFragment() {
override fun onResourceReady(resource: BitmapPaletteWrapper, glideAnimation: Transition<in BitmapPaletteWrapper>?) {
super.onResourceReady(resource, glideAnimation)
val background = resource.palette.getColor()
val accentColor = resource.palette.getContrastColor(background)
val palette = resource.palette
val swatch = RetroColorUtil.getSwatch(palette)
@ -298,3 +304,17 @@ class ColorFragment : AbsPlayerFragment() {
}
}
}
private fun Palette.getContrastColor(background: Int): Int {
return 0
}
private fun Palette.getColor(): Int {
return when {
darkMutedSwatch != null -> darkMutedSwatch!!.rgb
mutedSwatch != null -> mutedSwatch!!.rgb
lightMutedSwatch != null -> lightMutedSwatch!!.rgb
else -> Palette.Swatch(Color.BLACK, 1).rgb
}
}

View file

@ -1,78 +0,0 @@
package code.name.monkey.retromusic.ui.fragments.settings;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.os.Bundle;
import android.view.View;
import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.DialogFragment;
import androidx.preference.ListPreference;
import androidx.preference.Preference;
import androidx.preference.PreferenceManager;
import code.name.monkey.appthemehelper.ThemeStore;
import code.name.monkey.appthemehelper.common.prefs.supportv7.ATEPreferenceFragmentCompat;
import code.name.monkey.retromusic.preferences.AlbumCoverStylePreference;
import code.name.monkey.retromusic.preferences.AlbumCoverStylePreferenceDialog;
import code.name.monkey.retromusic.preferences.BlacklistPreference;
import code.name.monkey.retromusic.preferences.BlacklistPreferenceDialog;
import code.name.monkey.retromusic.preferences.NowPlayingScreenPreference;
import code.name.monkey.retromusic.preferences.NowPlayingScreenPreferenceDialog;
import code.name.monkey.retromusic.util.NavigationUtil;
/**
* @author Hemanth S (h4h13).
*/
public abstract class AbsSettingsFragment extends ATEPreferenceFragmentCompat {
void showProToastAndNavigate(String message) {
Toast.makeText(getContext(), message + " is Pro version feature.", Toast.LENGTH_SHORT).show();
//noinspection ConstantConditions
NavigationUtil.goToProVersion(getActivity());
}
protected void setSummary(@NonNull Preference preference) {
setSummary(preference, PreferenceManager
.getDefaultSharedPreferences(preference.getContext())
.getString(preference.getKey(), ""));
}
void setSummary(Preference preference, @NonNull Object value) {
String stringValue = value.toString();
if (preference instanceof ListPreference) {
ListPreference listPreference = (ListPreference) preference;
int index = listPreference.findIndexOfValue(stringValue);
preference.setSummary(index >= 0 ? listPreference.getEntries()[index] : null);
} else {
preference.setSummary(stringValue);
}
}
public abstract void invalidateSettings();
@Override
public void onViewCreated(@NonNull View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
setDivider(new ColorDrawable(Color.TRANSPARENT));
getListView().setBackgroundColor(ThemeStore.Companion.primaryColor(getContext()));
getListView().setOverScrollMode(View.OVER_SCROLL_NEVER);
getListView().setPadding(0, 0, 0, 0);
getListView().setPaddingRelative(0, 0, 0, 0);
invalidateSettings();
}
@Nullable
@Override
public DialogFragment onCreatePreferenceDialog(Preference preference) {
if (preference instanceof NowPlayingScreenPreference) {
return NowPlayingScreenPreferenceDialog.Companion.newInstance();
} else if (preference instanceof BlacklistPreference) {
return BlacklistPreferenceDialog.newInstance();
} else if (preference instanceof AlbumCoverStylePreference) {
return AlbumCoverStylePreferenceDialog.Companion.newInstance();
}
return super.onCreatePreferenceDialog(preference);
}
}

View file

@ -0,0 +1,80 @@
package code.name.monkey.retromusic.ui.fragments.settings
import android.graphics.Color
import android.graphics.drawable.ColorDrawable
import android.os.Bundle
import android.view.View
import android.widget.Toast
import androidx.fragment.app.DialogFragment
import androidx.preference.ListPreference
import androidx.preference.Preference
import androidx.preference.PreferenceFragmentCompat
import androidx.preference.PreferenceManager
import code.name.monkey.appthemehelper.ThemeStore
import code.name.monkey.retromusic.preferences.*
import code.name.monkey.retromusic.util.NavigationUtil
/**
* @author Hemanth S (h4h13).
*/
abstract class AbsSettingsFragment : PreferenceFragmentCompat() {
internal fun showProToastAndNavigate(message: String) {
Toast.makeText(context, "$message is Pro version feature.", Toast.LENGTH_SHORT).show()
NavigationUtil.goToProVersion(activity!!)
}
protected fun setSummary(preference: Preference) {
setSummary(preference, PreferenceManager
.getDefaultSharedPreferences(preference.context)
.getString(preference.key, "")!!)
}
internal fun setSummary(preference: Preference, value: Any) {
val stringValue = value.toString()
if (preference is ListPreference) {
val index = preference.findIndexOfValue(stringValue)
preference.setSummary(if (index >= 0) preference.entries[index] else null)
} else {
preference.summary = stringValue
}
}
abstract fun invalidateSettings()
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
setDivider(ColorDrawable(Color.TRANSPARENT))
listView.setBackgroundColor(ThemeStore.primaryColor(context!!))
listView.overScrollMode = View.OVER_SCROLL_NEVER
listView.setPadding(0, 0, 0, 0)
listView.setPaddingRelative(0, 0, 0, 0)
invalidateSettings()
}
override fun onDisplayPreferenceDialog(preference: Preference) {
var dialogFragment: DialogFragment? = null
if (preference is NowPlayingScreenPreference) {
dialogFragment = NowPlayingScreenPreferenceDialog.newInstance(preference.key);
} else if (preference is AlbumCoverStylePreference) {
dialogFragment = AlbumCoverStylePreferenceDialog.newInstance(preference.key);
}
if (preference is MaterialListPreference) {
val entries = preference.entries
dialogFragment = MaterialListPreferenceDialog.newInstance(preference)
}
if (preference is BlacklistPreference) {
dialogFragment = BlacklistPreferenceDialog.newInstance(preference.key)
}
if (dialogFragment != null) {
// The dialog was created (it was one of our custom Preferences), show the dialog for it
dialogFragment.setTargetFragment(this, 0);
dialogFragment.show(this.fragmentManager, "android.support.v7.preference.PreferenceFragment.DIALOG");
} else {
// Dialog creation could not be handled here. Try with the super method.
super.onDisplayPreferenceDialog(preference);
}
}
}

View file

@ -1,8 +1,7 @@
package code.name.monkey.retromusic.ui.fragments.settings
import android.os.Bundle
import androidx.preference.Preference
import android.view.View
import code.name.monkey.retromusic.R
/**
@ -23,4 +22,10 @@ class ImageSettingFragment : AbsSettingsFragment() {
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
addPreferencesFromResource(R.xml.pref_images)
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
val preference = findPreference("auto_download_images_policy")
setSummary(preference)
}
}

View file

@ -4,9 +4,10 @@ import android.content.SharedPreferences
import android.os.Bundle
import android.view.View
import androidx.preference.TwoStatePreference
import code.name.monkey.retromusic.R
import code.name.monkey.retromusic.App
import code.name.monkey.retromusic.R
import code.name.monkey.retromusic.util.PreferenceUtil
import code.name.monkey.retromusic.util.PreferenceUtil.*
/**
* @author Hemanth S (h4h13).
@ -26,39 +27,37 @@ class NowPlayingSettingsFragment : AbsSettingsFragment(), SharedPreferences.OnSh
}
true
}
}
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
addPreferencesFromResource(R.xml.pref_now_playing_screen)
}
private fun updateNowPlayingScreenSummary() {
private fun updateAlbumCoverStyleSummary() {
findPreference(ALBUM_COVER_STYLE).setSummary(getInstance().albumCoverStyle.titleRes)
}
findPreference("now_playing_screen_id").setSummary(PreferenceUtil.getInstance().nowPlayingScreen.titleRes)
private fun updateNowPlayingScreenSummary() {
findPreference(NOW_PLAYING_SCREEN_ID).setSummary(getInstance().nowPlayingScreen.titleRes)
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
PreferenceUtil.getInstance().registerOnSharedPreferenceChangedListener(this)
getInstance().registerOnSharedPreferenceChangedListener(this)
val preference = findPreference("album_cover_transform")
setSummary(preference)
}
override fun onDestroyView() {
super.onDestroyView()
PreferenceUtil.getInstance().unregisterOnSharedPreferenceChangedListener(this)
getInstance().unregisterOnSharedPreferenceChangedListener(this)
}
override fun onSharedPreferenceChanged(sharedPreferences: SharedPreferences, key: String) {
when (key) {
PreferenceUtil.NOW_PLAYING_SCREEN_ID -> updateNowPlayingScreenSummary()
PreferenceUtil.ALBUM_COVER_STYLE -> updateAlbumCoverStyleSummary()
PreferenceUtil.CIRCULAR_ALBUM_ART, PreferenceUtil.CAROUSEL_EFFECT -> invalidateSettings()
NOW_PLAYING_SCREEN_ID -> updateNowPlayingScreenSummary()
ALBUM_COVER_STYLE -> updateAlbumCoverStyleSummary()
CIRCULAR_ALBUM_ART, CAROUSEL_EFFECT -> invalidateSettings()
}
}
private fun updateAlbumCoverStyleSummary() {
findPreference("album_cover_style_id").setSummary(PreferenceUtil.getInstance().albumCoverStyle.titleRes)
}
}

View file

@ -1,6 +1,7 @@
package code.name.monkey.retromusic.ui.fragments.settings
import android.os.Bundle
import android.view.View
import code.name.monkey.retromusic.R
@ -18,4 +19,10 @@ class OtherSettingsFragment : AbsSettingsFragment() {
addPreferencesFromResource(R.xml.pref_playlists)
addPreferencesFromResource(R.xml.pref_advanced)
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
val preference = findPreference("last_added_interval")
setSummary(preference)
}
}

View file

@ -28,8 +28,6 @@ class PersonaizeSettingsFragment : AbsSettingsFragment(), SharedPreferences.OnSh
activity!!.recreate()
true
}
}
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
@ -41,11 +39,19 @@ class PersonaizeSettingsFragment : AbsSettingsFragment(), SharedPreferences.OnSh
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
PreferenceUtil.getInstance().registerOnSharedPreferenceChangedListener(this)
var preference = findPreference("album_grid_style")
setSummary(preference)
preference = findPreference("artist_grid_style")
setSummary(preference)
preference = findPreference("home_artist_grid_style")
setSummary(preference)
preference = findPreference("tab_text_mode")
setSummary(preference)
}
override fun onDestroyView() {
super.onDestroyView()
PreferenceUtil.getInstance().unregisterOnSharedPreferenceChangedListener(this)
}
@ -54,5 +60,4 @@ class PersonaizeSettingsFragment : AbsSettingsFragment(), SharedPreferences.OnSh
PreferenceUtil.CAROUSEL_EFFECT -> invalidateSettings()
}
}
}

View file

@ -1,11 +1,12 @@
package code.name.monkey.retromusic.ui.fragments.settings
import android.graphics.Color
import android.graphics.Color.BLUE
import android.os.Build
import android.os.Bundle
import androidx.core.content.ContextCompat
import androidx.preference.TwoStatePreference
import code.name.monkey.appthemehelper.ThemeStore
import code.name.monkey.appthemehelper.*
import code.name.monkey.appthemehelper.common.prefs.supportv7.ATEColorPreference
import code.name.monkey.appthemehelper.util.ColorUtil
import code.name.monkey.appthemehelper.util.VersionUtils
@ -13,7 +14,9 @@ import code.name.monkey.retromusic.App
import code.name.monkey.retromusic.R
import code.name.monkey.retromusic.appshortcuts.DynamicShortcutManager
import code.name.monkey.retromusic.util.PreferenceUtil
import com.afollestad.materialdialogs.color.ColorChooserDialog
import com.afollestad.materialdialogs.MaterialDialog
import com.afollestad.materialdialogs.color.colorChooser
/**
* @author Hemanth S (h4h13).
@ -23,16 +26,26 @@ class ThemeSettingsFragment : AbsSettingsFragment() {
override fun invalidateSettings() {
val primaryColorPref = findPreference("primary_color") as ATEColorPreference
primaryColorPref.isVisible = PreferenceUtil.getInstance().generalTheme == R.style.Theme_RetroMusic_Color
primaryColorPref.isVisible = PreferenceUtil.getInstance().generalTheme == code.name.monkey.retromusic.R.style.Theme_RetroMusic_Color
val primaryColor = ThemeStore.primaryColor(activity!!)
primaryColorPref.setColor(primaryColor, ColorUtil.darkenColor(primaryColor))
primaryColorPref.setOnPreferenceClickListener {
ColorChooserDialog.Builder(activity!!, R.string.primary_color)
.accentMode(false)
.allowUserColorInput(true)
.allowUserColorInputAlpha(false)
.preselect(primaryColor)
.show(activity!!)
MaterialDialog(activity!!).show {
title(code.name.monkey.retromusic.R.string.primary_color)
positiveButton(R.string.set)
colorChooser(initialSelection = BLUE, allowCustomArgb = true, colors = PRIMARY_COLORS, subColors = PRIMARY_COLORS_SUB) { _, color ->
val theme = if (ColorUtil.isColorLight(color))
PreferenceUtil.getThemeResFromPrefValue("light")
else
PreferenceUtil.getThemeResFromPrefValue("dark")
ThemeStore.editTheme(context).activityTheme(theme).primaryColor(color).commit()
if (VersionUtils.hasNougatMR())
DynamicShortcutManager(context).updateDynamicShortcuts()
activity!!.recreate()
}
}
true
}
@ -55,8 +68,8 @@ class ThemeSettingsFragment : AbsSettingsFragment() {
when (theme) {
"light" -> ThemeStore.editTheme(context!!).primaryColor(Color.WHITE).commit()
"black" -> ThemeStore.editTheme(context!!).primaryColor(Color.BLACK).commit()
"dark" -> ThemeStore.editTheme(context!!).primaryColor(ContextCompat.getColor(context!!, R.color.md_grey_900)).commit()
"color" -> ThemeStore.editTheme(context!!).primaryColor(ContextCompat.getColor(context!!, R.color.md_blue_grey_800)).commit()
"dark" -> ThemeStore.editTheme(context!!).primaryColor(ContextCompat.getColor(context!!, code.name.monkey.retromusic.R.color.md_grey_900)).commit()
"color" -> ThemeStore.editTheme(context!!).primaryColor(ContextCompat.getColor(context!!, code.name.monkey.retromusic.R.color.md_blue_grey_800)).commit()
}
ThemeStore.editTheme(activity!!)
@ -77,13 +90,17 @@ class ThemeSettingsFragment : AbsSettingsFragment() {
accentColorPref.setColor(accentColor, ColorUtil.darkenColor(accentColor))
accentColorPref.setOnPreferenceClickListener {
ColorChooserDialog.Builder(context!!, R.string.accent_color)
.accentMode(true)
.allowUserColorInput(true)
.allowUserColorInputAlpha(false)
.preselect(accentColor)
.show(activity!!)
true
MaterialDialog(activity!!).show {
title(code.name.monkey.retromusic.R.string.primary_color)
positiveButton(R.string.set)
colorChooser(colors = ACCENT_COLORS, subColors = ACCENT_COLORS_SUB) { _, color ->
ThemeStore.editTheme(context).accentColor(color).commit()
if (VersionUtils.hasNougatMR())
DynamicShortcutManager(context).updateDynamicShortcuts()
activity!!.recreate()
}
}
return@setOnPreferenceClickListener true
}
val colorAppShortcuts = findPreference("should_color_app_shortcuts") as TwoStatePreference
@ -102,6 +119,6 @@ class ThemeSettingsFragment : AbsSettingsFragment() {
}
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
addPreferencesFromResource(R.xml.pref_general)
addPreferencesFromResource( R.xml.pref_general)
}
}