mirror of
https://github.com/topjohnwu/Magisk.git
synced 2025-12-31 07:36:47 +00:00
Added theme mode picker dialog
Redesigned settings' selector for dark mode a bit
This commit is contained in:
@@ -0,0 +1,50 @@
|
||||
package com.topjohnwu.magisk.model.events.dialog
|
||||
|
||||
import android.app.Activity
|
||||
import androidx.appcompat.app.AppCompatActivity
|
||||
import androidx.appcompat.app.AppCompatDelegate
|
||||
import com.topjohnwu.magisk.Config
|
||||
import com.topjohnwu.magisk.R
|
||||
import com.topjohnwu.magisk.model.events.ActivityExecutor
|
||||
import com.topjohnwu.magisk.view.MagiskDialog
|
||||
import java.lang.ref.WeakReference
|
||||
|
||||
class DarkThemeDialog : DialogEvent(), ActivityExecutor {
|
||||
|
||||
private var activity: WeakReference<Activity>? = null
|
||||
|
||||
override fun invoke(activity: AppCompatActivity) {
|
||||
this.activity = WeakReference(activity)
|
||||
}
|
||||
|
||||
override fun build(dialog: MagiskDialog) {
|
||||
dialog.applyTitle(R.string.settings_dark_mode_title)
|
||||
.applyMessage(R.string.settings_dark_mode_message)
|
||||
.applyButton(MagiskDialog.ButtonType.POSITIVE) {
|
||||
titleRes = R.string.settings_dark_mode_light
|
||||
icon = R.drawable.ic_day
|
||||
onClick { selectTheme(AppCompatDelegate.MODE_NIGHT_NO) }
|
||||
}
|
||||
.applyButton(MagiskDialog.ButtonType.NEUTRAL) {
|
||||
titleRes = R.string.settings_dark_mode_system
|
||||
icon = R.drawable.ic_day_night
|
||||
onClick { selectTheme(AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM) }
|
||||
}
|
||||
.applyButton(MagiskDialog.ButtonType.NEGATIVE) {
|
||||
titleRes = R.string.settings_dark_mode_dark
|
||||
icon = R.drawable.ic_night
|
||||
onClick { selectTheme(AppCompatDelegate.MODE_NIGHT_YES) }
|
||||
}
|
||||
.onDismiss {
|
||||
activity?.clear()
|
||||
activity = null
|
||||
}
|
||||
}
|
||||
|
||||
private fun selectTheme(mode: Int) {
|
||||
Config.darkThemeExtended = mode
|
||||
activity?.get()?.recreate()
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -4,14 +4,13 @@ import com.topjohnwu.magisk.Config
|
||||
import com.topjohnwu.magisk.extensions.addOnPropertyChangedCallback
|
||||
import com.topjohnwu.magisk.extensions.toggle
|
||||
import com.topjohnwu.magisk.model.events.DieEvent
|
||||
import com.topjohnwu.magisk.model.events.RecreateEvent
|
||||
import com.topjohnwu.magisk.model.events.dialog.DarkThemeDialog
|
||||
import com.topjohnwu.magisk.redesign.compat.CompatViewModel
|
||||
import com.topjohnwu.magisk.utils.KObservableField
|
||||
|
||||
class SettingsViewModel : CompatViewModel() {
|
||||
|
||||
val redesign = KObservableField(Config.redesign)
|
||||
val darkTheme = KObservableField(Config.darkTheme)
|
||||
|
||||
init {
|
||||
//todo make observable preference
|
||||
@@ -19,12 +18,9 @@ class SettingsViewModel : CompatViewModel() {
|
||||
Config.redesign = redesign.value
|
||||
DieEvent().publish()
|
||||
}
|
||||
darkTheme.addOnPropertyChangedCallback {
|
||||
Config.darkTheme = darkTheme.value
|
||||
RecreateEvent().publish()
|
||||
}
|
||||
}
|
||||
|
||||
fun toggle(item: KObservableField<Boolean>) = item.toggle()
|
||||
fun darkModePressed() = DarkThemeDialog().publish()
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user