Added theme mode picker dialog

Redesigned settings' selector for dark mode a bit
This commit is contained in:
Viktor De Pasquale
2019-10-20 17:28:18 +02:00
parent 27fb0474d5
commit dc09ec7598
8 changed files with 134 additions and 28 deletions

View File

@@ -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()
}
}

View File

@@ -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()
}