PlayerAndroid/app/src/main/java/code/name/monkey/retromusic/preferences/NowPlayingScreenPreferenceD...

168 lines
6.6 KiB
Kotlin
Raw Normal View History

2019-03-03 09:30:48 +00:00
/*
* 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.
*/
2018-12-06 08:52:57 +00:00
package code.name.monkey.retromusic.preferences
import android.app.Dialog
import android.content.Context
import android.os.Bundle
2019-02-19 10:38:51 +00:00
import android.util.AttributeSet
2018-12-06 08:52:57 +00:00
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.ImageView
import android.widget.TextView
import android.widget.Toast
2019-02-19 10:38:51 +00:00
import androidx.preference.DialogPreference
import androidx.preference.PreferenceDialogFragmentCompat
2018-12-06 08:52:57 +00:00
import androidx.viewpager.widget.PagerAdapter
import androidx.viewpager.widget.ViewPager
import code.name.monkey.retromusic.App
import code.name.monkey.retromusic.R
2019-04-20 05:29:45 +00:00
import code.name.monkey.retromusic.fragments.NowPlayingScreen
2018-12-06 08:52:57 +00:00
import code.name.monkey.retromusic.util.NavigationUtil
import code.name.monkey.retromusic.util.PreferenceUtil
import code.name.monkey.retromusic.util.ViewUtil
import com.afollestad.materialdialogs.MaterialDialog
2019-05-11 13:53:20 +00:00
import com.afollestad.materialdialogs.bottomsheets.BottomSheet
2019-02-19 10:38:51 +00:00
import com.afollestad.materialdialogs.customview.customView
2018-12-06 08:52:57 +00:00
import com.bumptech.glide.Glide
2019-02-19 10:38:51 +00:00
class NowPlayingScreenPreference : DialogPreference {
2018-12-06 08:52:57 +00:00
2019-02-19 10:38:51 +00:00
constructor(context: Context) : super(context) {}
2018-12-06 08:52:57 +00:00
2019-02-19 10:38:51 +00:00
constructor(context: Context, attrs: AttributeSet) : super(context, attrs) {}
constructor(context: Context, attrs: AttributeSet, defStyleAttr: Int) : super(context, attrs, defStyleAttr) {}
constructor(context: Context, attrs: AttributeSet, defStyleAttr: Int, defStyleRes: Int) : super(context, attrs, defStyleAttr, defStyleRes) {}
private val mLayoutRes = R.layout.preference_dialog_now_playing_screen
override fun getDialogLayoutResource(): Int {
return mLayoutRes;
}
}
class NowPlayingScreenPreferenceDialog : PreferenceDialogFragmentCompat(), ViewPager.OnPageChangeListener {
2018-12-06 08:52:57 +00:00
private var viewPagerPosition: Int = 0
2019-02-19 10:38:51 +00:00
override fun onPageScrollStateChanged(state: Int) {
2018-12-06 08:52:57 +00:00
2019-02-19 10:38:51 +00:00
}
override fun onPageScrolled(position: Int, positionOffset: Float, positionOffsetPixels: Int) {
2018-12-06 08:52:57 +00:00
}
2019-02-19 10:38:51 +00:00
override fun onPageSelected(position: Int) {
this.viewPagerPosition = position
2018-12-06 08:52:57 +00:00
}
2019-02-19 10:38:51 +00:00
override fun onDialogClosed(positiveResult: Boolean) {
2018-12-06 08:52:57 +00:00
}
2019-02-19 10:38:51 +00:00
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
val view = LayoutInflater.from(activity).inflate(R.layout.preference_dialog_now_playing_screen, null)
val viewPager = view.findViewById<ViewPager>(R.id.now_playing_screen_view_pager)
?: throw IllegalStateException("Dialog view must contain a ViewPager with id 'now_playing_screen_view_pager'")
viewPager.adapter = NowPlayingScreenAdapter(activity!!)
viewPager.addOnPageChangeListener(this)
viewPager.pageMargin = ViewUtil.convertDpToPixel(32f, resources).toInt()
viewPager.currentItem = PreferenceUtil.getInstance().nowPlayingScreen.ordinal
return MaterialDialog(activity!!).show {
2019-02-19 10:38:51 +00:00
title(R.string.pref_title_album_cover_style)
positiveButton(R.string.set) {
val nowPlayingScreen = NowPlayingScreen.values()[viewPagerPosition]
if (isNowPlayingThemes(nowPlayingScreen)) {
val result = getString(nowPlayingScreen.titleRes) + " theme is Pro version feature."
Toast.makeText(context, result, Toast.LENGTH_SHORT).show()
NavigationUtil.goToProVersion(activity!!)
} else {
PreferenceUtil.getInstance().nowPlayingScreen = nowPlayingScreen
}
}
2019-02-19 10:38:51 +00:00
negativeButton(android.R.string.cancel)
customView(view = view, scrollable = false, noVerticalPadding = false)
}
}
2018-12-06 08:52:57 +00:00
2019-02-19 10:38:51 +00:00
private fun isNowPlayingThemes(nowPlayingScreen: NowPlayingScreen): Boolean {
2018-12-06 08:52:57 +00:00
if (nowPlayingScreen == NowPlayingScreen.BLUR_CARD) {
PreferenceUtil.getInstance().resetCarouselEffect()
PreferenceUtil.getInstance().resetCircularAlbumArt()
}
return (nowPlayingScreen == NowPlayingScreen.FULL ||
nowPlayingScreen == NowPlayingScreen.CARD ||
nowPlayingScreen == NowPlayingScreen.PLAIN ||
nowPlayingScreen == NowPlayingScreen.BLUR ||
nowPlayingScreen == NowPlayingScreen.COLOR ||
nowPlayingScreen == NowPlayingScreen.SIMPLE ||
nowPlayingScreen == NowPlayingScreen.BLUR_CARD ||
nowPlayingScreen == NowPlayingScreen.ADAPTIVE)
&& !App.isProVersion
}
2019-02-19 10:38:51 +00:00
companion object {
private const val EXTRA_KEY = "key"
fun newInstance(key: String): NowPlayingScreenPreferenceDialog {
val args = Bundle()
args.putString(EXTRA_KEY, key)
val fragment = NowPlayingScreenPreferenceDialog()
fragment.arguments = args
return fragment
}
2018-12-06 08:52:57 +00:00
}
2019-02-19 10:38:51 +00:00
}
2018-12-06 08:52:57 +00:00
2019-02-19 10:38:51 +00:00
private class NowPlayingScreenAdapter internal constructor(private val context: Context) : PagerAdapter() {
2018-12-06 08:52:57 +00:00
2019-02-19 10:38:51 +00:00
override fun instantiateItem(collection: ViewGroup, position: Int): Any {
val nowPlayingScreen = NowPlayingScreen.values()[position]
2018-12-06 08:52:57 +00:00
2019-02-19 10:38:51 +00:00
val inflater = LayoutInflater.from(context)
val layout = inflater.inflate(R.layout.preference_now_playing_screen_item, collection, false) as ViewGroup
collection.addView(layout)
2018-12-06 08:52:57 +00:00
2019-02-19 10:38:51 +00:00
val image = layout.findViewById<ImageView>(R.id.image)
val title = layout.findViewById<TextView>(R.id.title)
Glide.with(context).load(nowPlayingScreen.drawableResId).into(image)
title.setText(nowPlayingScreen.titleRes)
2018-12-06 08:52:57 +00:00
2019-02-19 10:38:51 +00:00
return layout
}
2018-12-06 08:52:57 +00:00
2019-02-19 10:38:51 +00:00
override fun destroyItem(collection: ViewGroup,
position: Int,
view: Any) {
collection.removeView(view as View)
}
2018-12-06 08:52:57 +00:00
2019-02-19 10:38:51 +00:00
override fun getCount(): Int {
return NowPlayingScreen.values().size
2018-12-06 08:52:57 +00:00
}
2019-02-19 10:38:51 +00:00
override fun isViewFromObject(view: View, `object`: Any): Boolean {
return view === `object`
}
2018-12-06 08:52:57 +00:00
2019-02-19 10:38:51 +00:00
override fun getPageTitle(position: Int): CharSequence? {
return context.getString(NowPlayingScreen.values()[position].titleRes)
2018-12-06 08:52:57 +00:00
}
2019-02-19 10:38:51 +00:00
}