269 lines
No EOL
11 KiB
Kotlin
269 lines
No EOL
11 KiB
Kotlin
package ani.dantotsu.widgets.statistics
|
|
|
|
import android.appwidget.AppWidgetManager
|
|
import android.content.Context
|
|
import android.content.Intent
|
|
import android.content.res.ColorStateList
|
|
import android.graphics.Color
|
|
import android.os.Bundle
|
|
import android.util.TypedValue
|
|
import android.view.View
|
|
import androidx.appcompat.app.AppCompatActivity
|
|
import ani.dantotsu.R
|
|
import ani.dantotsu.databinding.StatisticsWidgetConfigureBinding
|
|
import ani.dantotsu.themes.ThemeManager
|
|
import com.google.android.material.button.MaterialButton
|
|
import eltos.simpledialogfragment.SimpleDialog
|
|
import eltos.simpledialogfragment.color.SimpleColorDialog
|
|
|
|
/**
|
|
* The configuration screen for the [ProfileStatsWidget] AppWidget.
|
|
*/
|
|
class ProfileStatsConfigure : AppCompatActivity(),
|
|
SimpleDialog.OnDialogResultListener {
|
|
private var appWidgetId = AppWidgetManager.INVALID_APPWIDGET_ID
|
|
private var isMonetEnabled = false
|
|
private var onClickListener = View.OnClickListener {
|
|
val context = this@ProfileStatsConfigure
|
|
|
|
// It is the responsibility of the configuration activity to update the app widget
|
|
val appWidgetManager = AppWidgetManager.getInstance(context)
|
|
//updateAppWidget(context, appWidgetManager, appWidgetId)
|
|
|
|
|
|
ProfileStatsWidget.updateAppWidget(
|
|
context,
|
|
appWidgetManager,
|
|
appWidgetId
|
|
)
|
|
|
|
// Make sure we pass back the original appWidgetId
|
|
val resultValue = Intent()
|
|
resultValue.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId)
|
|
setResult(RESULT_OK, resultValue)
|
|
finish()
|
|
}
|
|
private lateinit var binding: StatisticsWidgetConfigureBinding
|
|
|
|
public override fun onCreate(icicle: Bundle?) {
|
|
|
|
ThemeManager(this).applyTheme()
|
|
super.onCreate(icicle)
|
|
|
|
// Set the result to CANCELED. This will cause the widget host to cancel
|
|
// out of the widget placement if the user presses the back button.
|
|
setResult(RESULT_CANCELED)
|
|
|
|
binding = StatisticsWidgetConfigureBinding.inflate(layoutInflater)
|
|
setContentView(binding.root)
|
|
|
|
appWidgetId = intent.getIntExtra(
|
|
AppWidgetManager.EXTRA_APPWIDGET_ID,
|
|
AppWidgetManager.INVALID_APPWIDGET_ID
|
|
)
|
|
val prefs =
|
|
getSharedPreferences(ProfileStatsWidget.getPrefsName(appWidgetId), Context.MODE_PRIVATE)
|
|
val topBackground =
|
|
prefs.getInt(ProfileStatsWidget.PREF_BACKGROUND_COLOR, Color.parseColor("#80000000"))
|
|
(binding.topBackgroundButton as MaterialButton).iconTint =
|
|
ColorStateList.valueOf(topBackground)
|
|
binding.topBackgroundButton.setOnClickListener {
|
|
val tag = ProfileStatsWidget.PREF_BACKGROUND_COLOR
|
|
SimpleColorDialog().title(R.string.custom_theme)
|
|
.colorPreset(topBackground)
|
|
.colors(
|
|
this@ProfileStatsConfigure,
|
|
SimpleColorDialog.MATERIAL_COLOR_PALLET
|
|
)
|
|
.setupColorWheelAlpha(true)
|
|
.allowCustom(true)
|
|
.showOutline(0x46000000)
|
|
.gridNumColumn(5)
|
|
.choiceMode(SimpleColorDialog.SINGLE_CHOICE)
|
|
.neg()
|
|
.show(this@ProfileStatsConfigure, tag)
|
|
}
|
|
val bottomBackground =
|
|
prefs.getInt(ProfileStatsWidget.PREF_BACKGROUND_FADE, Color.parseColor("#00000000"))
|
|
(binding.bottomBackgroundButton as MaterialButton).iconTint =
|
|
ColorStateList.valueOf(bottomBackground)
|
|
binding.bottomBackgroundButton.setOnClickListener {
|
|
val tag = ProfileStatsWidget.PREF_BACKGROUND_FADE
|
|
SimpleColorDialog().title(R.string.custom_theme)
|
|
.colorPreset(bottomBackground)
|
|
.colors(
|
|
this@ProfileStatsConfigure,
|
|
SimpleColorDialog.MATERIAL_COLOR_PALLET
|
|
)
|
|
.setupColorWheelAlpha(true)
|
|
.allowCustom(true)
|
|
.showOutline(0x46000000)
|
|
.gridNumColumn(5)
|
|
.choiceMode(SimpleColorDialog.SINGLE_CHOICE)
|
|
.neg()
|
|
.show(this@ProfileStatsConfigure, tag)
|
|
}
|
|
val titleColor = prefs.getInt(ProfileStatsWidget.PREF_TITLE_TEXT_COLOR, Color.WHITE)
|
|
(binding.titleColorButton as MaterialButton).iconTint = ColorStateList.valueOf(titleColor)
|
|
binding.titleColorButton.setOnClickListener {
|
|
val tag = ProfileStatsWidget.PREF_TITLE_TEXT_COLOR
|
|
SimpleColorDialog().title(R.string.custom_theme)
|
|
.colorPreset(titleColor)
|
|
.colors(
|
|
this@ProfileStatsConfigure,
|
|
SimpleColorDialog.MATERIAL_COLOR_PALLET
|
|
)
|
|
.setupColorWheelAlpha(true)
|
|
.allowCustom(true)
|
|
.showOutline(0x46000000)
|
|
.gridNumColumn(5)
|
|
.choiceMode(SimpleColorDialog.SINGLE_CHOICE)
|
|
.neg()
|
|
.show(this@ProfileStatsConfigure, tag)
|
|
}
|
|
val statsColor = prefs.getInt(ProfileStatsWidget.PREF_STATS_TEXT_COLOR, Color.WHITE)
|
|
(binding.statsColorButton as MaterialButton).iconTint = ColorStateList.valueOf(statsColor)
|
|
binding.statsColorButton.setOnClickListener {
|
|
val tag = ProfileStatsWidget.PREF_STATS_TEXT_COLOR
|
|
SimpleColorDialog().title(R.string.custom_theme)
|
|
.colorPreset(statsColor)
|
|
.colors(
|
|
this@ProfileStatsConfigure,
|
|
SimpleColorDialog.MATERIAL_COLOR_PALLET
|
|
)
|
|
.setupColorWheelAlpha(true)
|
|
.allowCustom(true)
|
|
.showOutline(0x46000000)
|
|
.gridNumColumn(5)
|
|
.choiceMode(SimpleColorDialog.SINGLE_CHOICE)
|
|
.neg()
|
|
.show(this@ProfileStatsConfigure, tag)
|
|
}
|
|
binding.useAppTheme.setOnCheckedChangeListener { _, isChecked ->
|
|
isMonetEnabled = isChecked
|
|
if (isChecked) {
|
|
binding.topBackgroundButton.visibility = View.GONE
|
|
binding.bottomBackgroundButton.visibility = View.GONE
|
|
binding.titleColorButton.visibility = View.GONE
|
|
binding.statsColorButton.visibility = View.GONE
|
|
themeColors()
|
|
|
|
} else {
|
|
binding.topBackgroundButton.visibility = View.VISIBLE
|
|
binding.bottomBackgroundButton.visibility = View.VISIBLE
|
|
binding.titleColorButton.visibility = View.VISIBLE
|
|
binding.statsColorButton.visibility = View.VISIBLE
|
|
}
|
|
}
|
|
binding.addButton.setOnClickListener(onClickListener)
|
|
|
|
// Find the widget id from the intent.
|
|
val intent = intent
|
|
val extras = intent.extras
|
|
if (extras != null) {
|
|
appWidgetId = extras.getInt(
|
|
AppWidgetManager.EXTRA_APPWIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID
|
|
)
|
|
}
|
|
|
|
// If this activity was started with an intent without an app widget ID, finish with an error.
|
|
if (appWidgetId == AppWidgetManager.INVALID_APPWIDGET_ID) {
|
|
finish()
|
|
return
|
|
}
|
|
}
|
|
|
|
private fun themeColors() {
|
|
val typedValueSurface = TypedValue()
|
|
theme.resolveAttribute(
|
|
com.google.android.material.R.attr.colorSurface,
|
|
typedValueSurface,
|
|
true
|
|
)
|
|
val backgroundColor = typedValueSurface.data
|
|
|
|
val typedValuePrimary = TypedValue()
|
|
theme.resolveAttribute(
|
|
com.google.android.material.R.attr.colorPrimary,
|
|
typedValuePrimary,
|
|
true
|
|
)
|
|
val textColor = typedValuePrimary.data
|
|
|
|
val typedValueOutline = TypedValue()
|
|
theme.resolveAttribute(
|
|
com.google.android.material.R.attr.colorOutline,
|
|
typedValueOutline,
|
|
true
|
|
)
|
|
val subTextColor = typedValueOutline.data
|
|
|
|
getSharedPreferences(
|
|
ProfileStatsWidget.getPrefsName(appWidgetId),
|
|
Context.MODE_PRIVATE
|
|
).edit().apply {
|
|
putInt(ProfileStatsWidget.PREF_BACKGROUND_COLOR, backgroundColor)
|
|
putInt(ProfileStatsWidget.PREF_BACKGROUND_FADE, backgroundColor)
|
|
putInt(ProfileStatsWidget.PREF_TITLE_TEXT_COLOR, textColor)
|
|
putInt(ProfileStatsWidget.PREF_STATS_TEXT_COLOR, subTextColor)
|
|
apply()
|
|
}
|
|
}
|
|
|
|
override fun onResult(dialogTag: String, which: Int, extras: Bundle): Boolean {
|
|
if (which == SimpleDialog.OnDialogResultListener.BUTTON_POSITIVE) {
|
|
if (!isMonetEnabled) {
|
|
val prefs = getSharedPreferences(
|
|
ProfileStatsWidget.getPrefsName(appWidgetId),
|
|
Context.MODE_PRIVATE
|
|
)
|
|
when (dialogTag) {
|
|
ProfileStatsWidget.PREF_BACKGROUND_COLOR -> {
|
|
prefs.edit()
|
|
.putInt(
|
|
ProfileStatsWidget.PREF_BACKGROUND_COLOR,
|
|
extras.getInt(SimpleColorDialog.COLOR)
|
|
)
|
|
.apply()
|
|
(binding.topBackgroundButton as MaterialButton).iconTint =
|
|
ColorStateList.valueOf(extras.getInt(SimpleColorDialog.COLOR))
|
|
}
|
|
|
|
ProfileStatsWidget.PREF_BACKGROUND_FADE -> {
|
|
prefs.edit()
|
|
.putInt(
|
|
ProfileStatsWidget.PREF_BACKGROUND_FADE,
|
|
extras.getInt(SimpleColorDialog.COLOR)
|
|
)
|
|
.apply()
|
|
(binding.bottomBackgroundButton as MaterialButton).iconTint =
|
|
ColorStateList.valueOf(extras.getInt(SimpleColorDialog.COLOR))
|
|
}
|
|
|
|
ProfileStatsWidget.PREF_TITLE_TEXT_COLOR -> {
|
|
prefs.edit()
|
|
.putInt(
|
|
ProfileStatsWidget.PREF_TITLE_TEXT_COLOR,
|
|
extras.getInt(SimpleColorDialog.COLOR)
|
|
)
|
|
.apply()
|
|
(binding.titleColorButton as MaterialButton).iconTint =
|
|
ColorStateList.valueOf(extras.getInt(SimpleColorDialog.COLOR))
|
|
}
|
|
|
|
ProfileStatsWidget.PREF_STATS_TEXT_COLOR -> {
|
|
prefs.edit()
|
|
.putInt(
|
|
ProfileStatsWidget.PREF_STATS_TEXT_COLOR,
|
|
extras.getInt(SimpleColorDialog.COLOR)
|
|
)
|
|
.apply()
|
|
(binding.statsColorButton as MaterialButton).iconTint =
|
|
ColorStateList.valueOf(extras.getInt(SimpleColorDialog.COLOR))
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return true
|
|
}
|
|
} |