forked from MarcoBuster/Magisk
Updated Flash / SuRequest activities with app themes
CompatActivity/Fragment logic has been moved to respective BaseUI. Some deprecated and unused styles have been removed in favor or newer themes.
This commit is contained in:
parent
fbe776db0b
commit
7bf7bfb9c6
|
@ -9,14 +9,14 @@ import androidx.core.net.toUri
|
||||||
import com.topjohnwu.magisk.R
|
import com.topjohnwu.magisk.R
|
||||||
import com.topjohnwu.magisk.core.Const
|
import com.topjohnwu.magisk.core.Const
|
||||||
import com.topjohnwu.magisk.core.intent
|
import com.topjohnwu.magisk.core.intent
|
||||||
|
import com.topjohnwu.magisk.core.view.Notifications
|
||||||
import com.topjohnwu.magisk.databinding.ActivityFlashBinding
|
import com.topjohnwu.magisk.databinding.ActivityFlashBinding
|
||||||
import com.topjohnwu.magisk.extensions.snackbar
|
import com.topjohnwu.magisk.extensions.snackbar
|
||||||
import com.topjohnwu.magisk.model.events.BackPressEvent
|
|
||||||
import com.topjohnwu.magisk.model.events.PermissionEvent
|
import com.topjohnwu.magisk.model.events.PermissionEvent
|
||||||
import com.topjohnwu.magisk.model.events.SnackbarEvent
|
import com.topjohnwu.magisk.model.events.SnackbarEvent
|
||||||
import com.topjohnwu.magisk.model.events.ViewEvent
|
import com.topjohnwu.magisk.model.events.ViewEvent
|
||||||
import com.topjohnwu.magisk.ui.base.BaseUIActivity
|
import com.topjohnwu.magisk.ui.base.BaseUIActivity
|
||||||
import com.topjohnwu.magisk.core.view.Notifications
|
import com.topjohnwu.magisk.ui.base.CompatNavigationDelegate
|
||||||
import org.koin.androidx.viewmodel.ext.android.viewModel
|
import org.koin.androidx.viewmodel.ext.android.viewModel
|
||||||
import org.koin.core.parameter.parametersOf
|
import org.koin.core.parameter.parametersOf
|
||||||
import java.io.File
|
import java.io.File
|
||||||
|
@ -24,7 +24,6 @@ import java.io.File
|
||||||
open class FlashActivity : BaseUIActivity<FlashViewModel, ActivityFlashBinding>() {
|
open class FlashActivity : BaseUIActivity<FlashViewModel, ActivityFlashBinding>() {
|
||||||
|
|
||||||
override val layoutRes: Int = R.layout.activity_flash
|
override val layoutRes: Int = R.layout.activity_flash
|
||||||
override val themeRes: Int = R.style.MagiskTheme_Flashing
|
|
||||||
override val viewModel: FlashViewModel by viewModel {
|
override val viewModel: FlashViewModel by viewModel {
|
||||||
val uri = intent.data ?: let { finish(); Uri.EMPTY }
|
val uri = intent.data ?: let { finish(); Uri.EMPTY }
|
||||||
val additionalUri = intent.getParcelableExtra(Const.Key.FLASH_DATA) ?: uri
|
val additionalUri = intent.getParcelableExtra(Const.Key.FLASH_DATA) ?: uri
|
||||||
|
@ -32,6 +31,9 @@ open class FlashActivity : BaseUIActivity<FlashViewModel, ActivityFlashBinding>(
|
||||||
parametersOf(action, uri, additionalUri)
|
parametersOf(action, uri, additionalUri)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override val navigation: CompatNavigationDelegate<BaseUIActivity<FlashViewModel, ActivityFlashBinding>>? =
|
||||||
|
null
|
||||||
|
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_NOSENSOR
|
requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_NOSENSOR
|
||||||
super.onCreate(savedInstanceState)
|
super.onCreate(savedInstanceState)
|
||||||
|
@ -49,7 +51,6 @@ open class FlashActivity : BaseUIActivity<FlashViewModel, ActivityFlashBinding>(
|
||||||
super.onEventDispatched(event)
|
super.onEventDispatched(event)
|
||||||
when (event) {
|
when (event) {
|
||||||
is SnackbarEvent -> snackbar(snackbarView, event.message(this), event.length, event.f)
|
is SnackbarEvent -> snackbar(snackbarView, event.message(this), event.length, event.f)
|
||||||
is BackPressEvent -> onBackPressed()
|
|
||||||
is PermissionEvent -> withPermissions(*event.permissions.toTypedArray()) {
|
is PermissionEvent -> withPermissions(*event.permissions.toTypedArray()) {
|
||||||
onSuccess { event.callback.onNext(true) }
|
onSuccess { event.callback.onNext(true) }
|
||||||
onFailure {
|
onFailure {
|
||||||
|
|
|
@ -13,7 +13,7 @@ import com.topjohnwu.magisk.core.Config
|
||||||
import com.topjohnwu.magisk.core.Const
|
import com.topjohnwu.magisk.core.Const
|
||||||
import com.topjohnwu.magisk.databinding.ComparableRvItem
|
import com.topjohnwu.magisk.databinding.ComparableRvItem
|
||||||
import com.topjohnwu.magisk.extensions.*
|
import com.topjohnwu.magisk.extensions.*
|
||||||
import com.topjohnwu.magisk.model.entity.recycler.ConsoleRvItem
|
import com.topjohnwu.magisk.model.entity.recycler.ConsoleItem
|
||||||
import com.topjohnwu.magisk.model.events.SnackbarEvent
|
import com.topjohnwu.magisk.model.events.SnackbarEvent
|
||||||
import com.topjohnwu.magisk.model.flash.FlashResultListener
|
import com.topjohnwu.magisk.model.flash.FlashResultListener
|
||||||
import com.topjohnwu.magisk.model.flash.Flashing
|
import com.topjohnwu.magisk.model.flash.Flashing
|
||||||
|
@ -48,7 +48,7 @@ class FlashViewModel(
|
||||||
private val logItems = Collections.synchronizedList(mutableListOf<String>())
|
private val logItems = Collections.synchronizedList(mutableListOf<String>())
|
||||||
|
|
||||||
init {
|
init {
|
||||||
outItems.sendUpdatesTo(items) { it.map { ConsoleRvItem(it) } }
|
outItems.sendUpdatesTo(items) { it.map { ConsoleItem(it) } }
|
||||||
outItems.copyNewInputInto(logItems)
|
outItems.copyNewInputInto(logItems)
|
||||||
|
|
||||||
state = State.LOADING
|
state = State.LOADING
|
||||||
|
|
|
@ -2,6 +2,7 @@ package com.topjohnwu.magisk.legacy.surequest
|
||||||
|
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
import android.content.pm.ActivityInfo
|
import android.content.pm.ActivityInfo
|
||||||
|
import android.content.res.Resources
|
||||||
import android.os.Build
|
import android.os.Build
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.view.Window
|
import android.view.Window
|
||||||
|
@ -13,14 +14,17 @@ import com.topjohnwu.magisk.model.events.DieEvent
|
||||||
import com.topjohnwu.magisk.model.events.ViewActionEvent
|
import com.topjohnwu.magisk.model.events.ViewActionEvent
|
||||||
import com.topjohnwu.magisk.model.events.ViewEvent
|
import com.topjohnwu.magisk.model.events.ViewEvent
|
||||||
import com.topjohnwu.magisk.ui.base.BaseUIActivity
|
import com.topjohnwu.magisk.ui.base.BaseUIActivity
|
||||||
|
import com.topjohnwu.magisk.ui.base.CompatNavigationDelegate
|
||||||
import org.koin.androidx.viewmodel.ext.android.viewModel
|
import org.koin.androidx.viewmodel.ext.android.viewModel
|
||||||
|
|
||||||
open class SuRequestActivity : BaseUIActivity<SuRequestViewModel, ActivityRequestBinding>() {
|
open class SuRequestActivity : BaseUIActivity<SuRequestViewModel, ActivityRequestBinding>() {
|
||||||
|
|
||||||
override val layoutRes: Int = R.layout.activity_request
|
override val layoutRes: Int = R.layout.activity_request
|
||||||
override val themeRes: Int = R.style.MagiskTheme_SU
|
|
||||||
override val viewModel: SuRequestViewModel by viewModel()
|
override val viewModel: SuRequestViewModel by viewModel()
|
||||||
|
|
||||||
|
override val navigation: CompatNavigationDelegate<BaseUIActivity<SuRequestViewModel, ActivityRequestBinding>>? =
|
||||||
|
null
|
||||||
|
|
||||||
override fun onBackPressed() {
|
override fun onBackPressed() {
|
||||||
viewModel.denyPressed()
|
viewModel.denyPressed()
|
||||||
}
|
}
|
||||||
|
@ -58,6 +62,12 @@ open class SuRequestActivity : BaseUIActivity<SuRequestViewModel, ActivityReques
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun getTheme(): Resources.Theme {
|
||||||
|
val theme = super.getTheme()
|
||||||
|
theme.applyStyle(R.style.Foundation_Floating, true)
|
||||||
|
return theme
|
||||||
|
}
|
||||||
|
|
||||||
override fun onEventDispatched(event: ViewEvent) {
|
override fun onEventDispatched(event: ViewEvent) {
|
||||||
super.onEventDispatched(event)
|
super.onEventDispatched(event)
|
||||||
when (event) {
|
when (event) {
|
||||||
|
|
|
@ -1,11 +0,0 @@
|
||||||
package com.topjohnwu.magisk.model.navigation
|
|
||||||
|
|
||||||
import androidx.fragment.app.Fragment
|
|
||||||
import kotlin.reflect.KClass
|
|
||||||
|
|
||||||
interface Navigator {
|
|
||||||
|
|
||||||
//TODO Elevate Fragment to MagiskFragment<*,*> once everything is on board with it
|
|
||||||
val baseFragments: List<KClass<out Fragment>>
|
|
||||||
|
|
||||||
}
|
|
|
@ -1,24 +1,41 @@
|
||||||
package com.topjohnwu.magisk.ui.base
|
package com.topjohnwu.magisk.ui.base
|
||||||
|
|
||||||
|
import android.content.Intent
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
|
import android.view.View
|
||||||
|
import android.view.ViewGroup
|
||||||
import androidx.appcompat.app.AppCompatDelegate
|
import androidx.appcompat.app.AppCompatDelegate
|
||||||
|
import androidx.core.graphics.Insets
|
||||||
import androidx.databinding.DataBindingUtil
|
import androidx.databinding.DataBindingUtil
|
||||||
|
import androidx.databinding.OnRebindCallback
|
||||||
import androidx.databinding.ViewDataBinding
|
import androidx.databinding.ViewDataBinding
|
||||||
|
import androidx.fragment.app.Fragment
|
||||||
import com.topjohnwu.magisk.BR
|
import com.topjohnwu.magisk.BR
|
||||||
import com.topjohnwu.magisk.R
|
|
||||||
import com.topjohnwu.magisk.core.Config
|
import com.topjohnwu.magisk.core.Config
|
||||||
import com.topjohnwu.magisk.core.base.BaseActivity
|
import com.topjohnwu.magisk.core.base.BaseActivity
|
||||||
|
import com.topjohnwu.magisk.extensions.snackbar
|
||||||
|
import com.topjohnwu.magisk.extensions.startAnimations
|
||||||
import com.topjohnwu.magisk.model.events.EventHandler
|
import com.topjohnwu.magisk.model.events.EventHandler
|
||||||
|
import com.topjohnwu.magisk.model.events.SnackbarEvent
|
||||||
|
import com.topjohnwu.magisk.model.events.ViewEvent
|
||||||
|
import com.topjohnwu.magisk.ui.theme.Theme
|
||||||
|
import kotlin.reflect.KClass
|
||||||
|
|
||||||
abstract class BaseUIActivity<ViewModel : BaseViewModel, Binding : ViewDataBinding> :
|
abstract class BaseUIActivity<ViewModel : BaseViewModel, Binding : ViewDataBinding> :
|
||||||
BaseActivity(), EventHandler {
|
BaseActivity(), CompatView<ViewModel>, EventHandler {
|
||||||
|
|
||||||
protected lateinit var binding: Binding
|
protected lateinit var binding: Binding
|
||||||
protected abstract val layoutRes: Int
|
protected abstract val layoutRes: Int
|
||||||
abstract val viewModel: ViewModel
|
protected open val themeRes: Int = Theme.selected.themeRes
|
||||||
protected open val themeRes: Int = R.style.MagiskTheme
|
|
||||||
|
|
||||||
|
override val viewRoot: View get() = binding.root
|
||||||
|
override val navigation by lazy { CompatNavigationDelegate(this) as CompatNavigationDelegate? }
|
||||||
|
|
||||||
|
private val delegate by lazy { CompatDelegate(this) }
|
||||||
|
|
||||||
|
open val navHost: Int = 0
|
||||||
open val snackbarView get() = binding.root
|
open val snackbarView get() = binding.root
|
||||||
|
open val baseFragments = listOf<KClass<out Fragment>>()
|
||||||
|
|
||||||
init {
|
init {
|
||||||
val theme = Config.darkThemeExtended
|
val theme = Config.darkThemeExtended
|
||||||
|
@ -35,5 +52,49 @@ abstract class BaseUIActivity<ViewModel : BaseViewModel, Binding : ViewDataBindi
|
||||||
setVariable(BR.viewModel, viewModel)
|
setVariable(BR.viewModel, viewModel)
|
||||||
lifecycleOwner = this@BaseUIActivity
|
lifecycleOwner = this@BaseUIActivity
|
||||||
}
|
}
|
||||||
|
|
||||||
|
binding.addOnRebindCallback(object : OnRebindCallback<Binding>() {
|
||||||
|
override fun onPreBind(binding: Binding): Boolean {
|
||||||
|
(binding.root as? ViewGroup)?.startAnimations()
|
||||||
|
return super.onPreBind(binding)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
delegate.onCreate()
|
||||||
|
navigation?.onCreate(savedInstanceState)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
|
||||||
|
super.onActivityResult(requestCode, resultCode, data)
|
||||||
|
navigation?.onActivityResult(requestCode, resultCode, data)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onResume() {
|
||||||
|
super.onResume()
|
||||||
|
delegate.onResume()
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onSaveInstanceState(outState: Bundle) {
|
||||||
|
super.onSaveInstanceState(outState)
|
||||||
|
navigation?.onSaveInstanceState(outState)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onEventDispatched(event: ViewEvent) {
|
||||||
|
delegate.onEventExecute(event, this)
|
||||||
|
when (event) {
|
||||||
|
is SnackbarEvent -> snackbar(snackbarView, event.message(this), event.length, event.f)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onBackPressed() {
|
||||||
|
if (navigation == null || navigation?.onBackPressed()?.not() == true) {
|
||||||
|
super.onBackPressed()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun peekSystemWindowInsets(insets: Insets) {
|
||||||
|
viewModel.insets.value = insets
|
||||||
|
}
|
||||||
|
|
||||||
|
protected fun ViewEvent.dispatchOnSelf() = onEventDispatched(this)
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,20 +4,28 @@ import android.os.Bundle
|
||||||
import android.view.LayoutInflater
|
import android.view.LayoutInflater
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.view.ViewGroup
|
import android.view.ViewGroup
|
||||||
|
import androidx.core.graphics.Insets
|
||||||
import androidx.databinding.DataBindingUtil
|
import androidx.databinding.DataBindingUtil
|
||||||
|
import androidx.databinding.OnRebindCallback
|
||||||
import androidx.databinding.ViewDataBinding
|
import androidx.databinding.ViewDataBinding
|
||||||
import androidx.fragment.app.Fragment
|
import androidx.fragment.app.Fragment
|
||||||
import com.topjohnwu.magisk.BR
|
import com.topjohnwu.magisk.BR
|
||||||
|
import com.topjohnwu.magisk.extensions.startAnimations
|
||||||
import com.topjohnwu.magisk.model.events.EventHandler
|
import com.topjohnwu.magisk.model.events.EventHandler
|
||||||
import com.topjohnwu.magisk.model.events.ViewEvent
|
import com.topjohnwu.magisk.model.events.ViewEvent
|
||||||
|
|
||||||
abstract class BaseUIFragment<ViewModel : BaseViewModel, Binding : ViewDataBinding> :
|
abstract class BaseUIFragment<ViewModel : BaseViewModel, Binding : ViewDataBinding> :
|
||||||
Fragment(), EventHandler {
|
Fragment(), CompatView<ViewModel>, EventHandler {
|
||||||
|
|
||||||
protected val activity get() = requireActivity() as BaseUIActivity<*, *>
|
protected val activity get() = requireActivity() as BaseUIActivity<*, *>
|
||||||
protected lateinit var binding: Binding
|
protected lateinit var binding: Binding
|
||||||
protected abstract val layoutRes: Int
|
protected abstract val layoutRes: Int
|
||||||
abstract val viewModel: ViewModel
|
|
||||||
|
override val viewRoot: View get() = binding.root
|
||||||
|
override val navigation by lazy { activity.navigation }
|
||||||
|
private val delegate by lazy { CompatDelegate(this) }
|
||||||
|
|
||||||
|
override fun consumeSystemWindowInsets(insets: Insets) = insets
|
||||||
|
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
super.onCreate(savedInstanceState)
|
super.onCreate(savedInstanceState)
|
||||||
|
@ -25,9 +33,9 @@ abstract class BaseUIFragment<ViewModel : BaseViewModel, Binding : ViewDataBindi
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onCreateView(
|
override fun onCreateView(
|
||||||
inflater: LayoutInflater,
|
inflater: LayoutInflater,
|
||||||
container: ViewGroup?,
|
container: ViewGroup?,
|
||||||
savedInstanceState: Bundle?
|
savedInstanceState: Bundle?
|
||||||
): View? {
|
): View? {
|
||||||
binding = DataBindingUtil.inflate<Binding>(inflater, layoutRes, container, false).apply {
|
binding = DataBindingUtil.inflate<Binding>(inflater, layoutRes, container, false).apply {
|
||||||
setVariable(BR.viewModel, viewModel)
|
setVariable(BR.viewModel, viewModel)
|
||||||
|
@ -39,9 +47,35 @@ abstract class BaseUIFragment<ViewModel : BaseViewModel, Binding : ViewDataBindi
|
||||||
|
|
||||||
override fun onEventDispatched(event: ViewEvent) {
|
override fun onEventDispatched(event: ViewEvent) {
|
||||||
super.onEventDispatched(event)
|
super.onEventDispatched(event)
|
||||||
activity.onEventDispatched(event)
|
delegate.onEventExecute(event, this)
|
||||||
}
|
}
|
||||||
|
|
||||||
open fun onBackPressed(): Boolean = false
|
open fun onBackPressed(): Boolean = false
|
||||||
|
|
||||||
|
|
||||||
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
|
super.onViewCreated(view, savedInstanceState)
|
||||||
|
|
||||||
|
binding.addOnRebindCallback(object : OnRebindCallback<Binding>() {
|
||||||
|
override fun onPreBind(binding: Binding): Boolean {
|
||||||
|
this@BaseUIFragment.onPreBind(binding)
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
delegate.onCreate()
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onResume() {
|
||||||
|
super.onResume()
|
||||||
|
|
||||||
|
delegate.onResume()
|
||||||
|
}
|
||||||
|
|
||||||
|
protected open fun onPreBind(binding: Binding) {
|
||||||
|
(binding.root as? ViewGroup)?.startAnimations()
|
||||||
|
}
|
||||||
|
|
||||||
|
protected fun ViewEvent.dispatchOnSelf() = delegate.onEventExecute(this, this@BaseUIFragment)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,84 +1,14 @@
|
||||||
package com.topjohnwu.magisk.ui.base
|
package com.topjohnwu.magisk.ui.base
|
||||||
|
|
||||||
import android.app.Activity
|
import android.app.Activity
|
||||||
import android.content.Intent
|
|
||||||
import android.os.Bundle
|
|
||||||
import android.view.View
|
|
||||||
import android.view.ViewGroup
|
|
||||||
import android.view.inputmethod.InputMethodManager
|
import android.view.inputmethod.InputMethodManager
|
||||||
import androidx.core.content.getSystemService
|
import androidx.core.content.getSystemService
|
||||||
import androidx.databinding.OnRebindCallback
|
|
||||||
import androidx.databinding.ViewDataBinding
|
import androidx.databinding.ViewDataBinding
|
||||||
import androidx.fragment.app.Fragment
|
|
||||||
import com.topjohnwu.magisk.extensions.snackbar
|
|
||||||
import com.topjohnwu.magisk.extensions.startAnimations
|
|
||||||
import com.topjohnwu.magisk.model.events.SnackbarEvent
|
|
||||||
import com.topjohnwu.magisk.model.events.ViewEvent
|
|
||||||
import com.topjohnwu.magisk.model.navigation.Navigator
|
|
||||||
import com.topjohnwu.magisk.ui.theme.Theme
|
|
||||||
import kotlin.reflect.KClass
|
|
||||||
|
|
||||||
// TODO (diareuse): Merge into BaseUIActivity after all legacy UI is migrated
|
// TODO (diareuse): Merge into BaseUIActivity after all legacy UI is migrated
|
||||||
|
|
||||||
abstract class CompatActivity<ViewModel : BaseViewModel, Binding : ViewDataBinding> :
|
abstract class CompatActivity<ViewModel : BaseViewModel, Binding : ViewDataBinding> :
|
||||||
BaseUIActivity<ViewModel, Binding>(), CompatView<ViewModel>, Navigator {
|
BaseUIActivity<ViewModel, Binding>()
|
||||||
|
|
||||||
override val themeRes = Theme.selected.themeRes
|
|
||||||
override val viewRoot: View get() = binding.root
|
|
||||||
override val navigation: CompatNavigationDelegate<CompatActivity<ViewModel, Binding>>? by lazy {
|
|
||||||
CompatNavigationDelegate(this)
|
|
||||||
}
|
|
||||||
override val baseFragments = listOf<KClass<out Fragment>>()
|
|
||||||
private val delegate by lazy { CompatDelegate(this) }
|
|
||||||
|
|
||||||
internal abstract val navHost: Int
|
|
||||||
|
|
||||||
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
|
|
||||||
super.onActivityResult(requestCode, resultCode, data)
|
|
||||||
navigation?.onActivityResult(requestCode, resultCode, data)
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
|
||||||
super.onCreate(savedInstanceState)
|
|
||||||
|
|
||||||
binding.addOnRebindCallback(object : OnRebindCallback<Binding>() {
|
|
||||||
override fun onPreBind(binding: Binding): Boolean {
|
|
||||||
(binding.root as? ViewGroup)?.startAnimations()
|
|
||||||
return super.onPreBind(binding)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
|
|
||||||
delegate.onCreate()
|
|
||||||
navigation?.onCreate(savedInstanceState)
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onResume() {
|
|
||||||
super.onResume()
|
|
||||||
|
|
||||||
delegate.onResume()
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onSaveInstanceState(outState: Bundle) {
|
|
||||||
super.onSaveInstanceState(outState)
|
|
||||||
navigation?.onSaveInstanceState(outState)
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onEventDispatched(event: ViewEvent) {
|
|
||||||
delegate.onEventExecute(event, this)
|
|
||||||
when (event) {
|
|
||||||
is SnackbarEvent -> snackbar(snackbarView, event.message(this), event.length, event.f)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onBackPressed() {
|
|
||||||
if (navigation?.onBackPressed()?.not() == true) {
|
|
||||||
super.onBackPressed()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
protected fun ViewEvent.dispatchOnSelf() = onEventDispatched(this)
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
fun Activity.hideKeyboard() {
|
fun Activity.hideKeyboard() {
|
||||||
val view = currentFocus ?: return
|
val view = currentFocus ?: return
|
||||||
|
|
|
@ -18,7 +18,6 @@ class CompatDelegate internal constructor(
|
||||||
|
|
||||||
fun onCreate() {
|
fun onCreate() {
|
||||||
ensureInsets()
|
ensureInsets()
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fun onResume() {
|
fun onResume() {
|
||||||
|
|
|
@ -1,56 +1,10 @@
|
||||||
package com.topjohnwu.magisk.ui.base
|
package com.topjohnwu.magisk.ui.base
|
||||||
|
|
||||||
import android.os.Bundle
|
|
||||||
import android.view.View
|
|
||||||
import android.view.ViewGroup
|
|
||||||
import androidx.databinding.OnRebindCallback
|
|
||||||
import androidx.databinding.ViewDataBinding
|
import androidx.databinding.ViewDataBinding
|
||||||
import androidx.fragment.app.Fragment
|
import androidx.fragment.app.Fragment
|
||||||
import com.topjohnwu.magisk.extensions.startAnimations
|
|
||||||
import com.topjohnwu.magisk.model.events.ViewEvent
|
|
||||||
|
|
||||||
// TODO (diareuse): Merge into BaseUIFragment after all legacy UI is migrated
|
|
||||||
|
|
||||||
abstract class CompatFragment<ViewModel : BaseViewModel, Binding : ViewDataBinding>
|
abstract class CompatFragment<ViewModel : BaseViewModel, Binding : ViewDataBinding>
|
||||||
: BaseUIFragment<ViewModel, Binding>(), CompatView<ViewModel> {
|
: BaseUIFragment<ViewModel, Binding>(), CompatView<ViewModel>
|
||||||
|
|
||||||
override val viewRoot: View get() = binding.root
|
|
||||||
override val navigation by lazy { compatActivity.navigation }
|
|
||||||
|
|
||||||
private val delegate by lazy { CompatDelegate(this) }
|
|
||||||
|
|
||||||
protected val compatActivity get() = requireActivity() as CompatActivity<*, *>
|
|
||||||
|
|
||||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
|
||||||
super.onViewCreated(view, savedInstanceState)
|
|
||||||
|
|
||||||
binding.addOnRebindCallback(object : OnRebindCallback<Binding>() {
|
|
||||||
override fun onPreBind(binding: Binding): Boolean {
|
|
||||||
this@CompatFragment.onPreBind(binding)
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
})
|
|
||||||
|
|
||||||
delegate.onCreate()
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onResume() {
|
|
||||||
super.onResume()
|
|
||||||
|
|
||||||
delegate.onResume()
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onEventDispatched(event: ViewEvent) {
|
|
||||||
delegate.onEventExecute(event, this)
|
|
||||||
}
|
|
||||||
|
|
||||||
protected open fun onPreBind(binding: Binding) {
|
|
||||||
(binding.root as? ViewGroup)?.startAnimations()
|
|
||||||
}
|
|
||||||
|
|
||||||
protected fun ViewEvent.dispatchOnSelf() = delegate.onEventExecute(this, this@CompatFragment)
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
fun Fragment.hideKeyboard() {
|
fun Fragment.hideKeyboard() {
|
||||||
activity?.hideKeyboard()
|
activity?.hideKeyboard()
|
||||||
|
|
|
@ -7,14 +7,13 @@ import com.ncapdevi.fragnav.FragNavTransactionOptions
|
||||||
import com.topjohnwu.magisk.R
|
import com.topjohnwu.magisk.R
|
||||||
import com.topjohnwu.magisk.model.navigation.MagiskAnimBuilder
|
import com.topjohnwu.magisk.model.navigation.MagiskAnimBuilder
|
||||||
import com.topjohnwu.magisk.model.navigation.MagiskNavigationEvent
|
import com.topjohnwu.magisk.model.navigation.MagiskNavigationEvent
|
||||||
import com.topjohnwu.magisk.model.navigation.Navigator
|
|
||||||
import com.topjohnwu.magisk.ui.ReselectionTarget
|
import com.topjohnwu.magisk.ui.ReselectionTarget
|
||||||
import timber.log.Timber
|
import timber.log.Timber
|
||||||
|
|
||||||
class CompatNavigationDelegate<out Source>(
|
class CompatNavigationDelegate<out Source>(
|
||||||
private val source: Source,
|
private val source: Source,
|
||||||
private val listener: FragNavController.TransactionListener? = null
|
private val listener: FragNavController.TransactionListener? = null
|
||||||
) : FragNavController.RootFragmentListener where Source : CompatActivity<*, *>, Source : Navigator {
|
) : FragNavController.RootFragmentListener where Source : BaseUIActivity<*, *> {
|
||||||
|
|
||||||
private val controller by lazy {
|
private val controller by lazy {
|
||||||
check(source.navHost != 0) { "Did you forget to override \"navHostId\"?" }
|
check(source.navHost != 0) { "Did you forget to override \"navHostId\"?" }
|
||||||
|
|
|
@ -6,7 +6,6 @@ import android.view.Menu
|
||||||
import android.view.MenuInflater
|
import android.view.MenuInflater
|
||||||
import android.view.MenuItem
|
import android.view.MenuItem
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import androidx.core.graphics.Insets
|
|
||||||
import androidx.core.view.isVisible
|
import androidx.core.view.isVisible
|
||||||
import androidx.recyclerview.widget.LinearLayoutManager
|
import androidx.recyclerview.widget.LinearLayoutManager
|
||||||
import androidx.recyclerview.widget.RecyclerView
|
import androidx.recyclerview.widget.RecyclerView
|
||||||
|
@ -29,8 +28,6 @@ class HideFragment : CompatFragment<HideViewModel, FragmentHideMd2Binding>() {
|
||||||
MotionRevealHelper.withViews(binding.hideFilter, binding.hideFilterToggle, value)
|
MotionRevealHelper.withViews(binding.hideFilter, binding.hideFilterToggle, value)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun consumeSystemWindowInsets(insets: Insets) = insets
|
|
||||||
|
|
||||||
override fun onAttach(context: Context) {
|
override fun onAttach(context: Context) {
|
||||||
super.onAttach(context)
|
super.onAttach(context)
|
||||||
activity.setTitle(R.string.magiskhide)
|
activity.setTitle(R.string.magiskhide)
|
||||||
|
|
|
@ -3,7 +3,6 @@ package com.topjohnwu.magisk.ui.home
|
||||||
import android.view.Menu
|
import android.view.Menu
|
||||||
import android.view.MenuInflater
|
import android.view.MenuInflater
|
||||||
import android.view.MenuItem
|
import android.view.MenuItem
|
||||||
import androidx.core.graphics.Insets
|
|
||||||
import com.topjohnwu.magisk.R
|
import com.topjohnwu.magisk.R
|
||||||
import com.topjohnwu.magisk.databinding.FragmentHomeMd2Binding
|
import com.topjohnwu.magisk.databinding.FragmentHomeMd2Binding
|
||||||
import com.topjohnwu.magisk.model.navigation.Navigation
|
import com.topjohnwu.magisk.model.navigation.Navigation
|
||||||
|
@ -15,8 +14,6 @@ class HomeFragment : CompatFragment<HomeViewModel, FragmentHomeMd2Binding>() {
|
||||||
override val layoutRes = R.layout.fragment_home_md2
|
override val layoutRes = R.layout.fragment_home_md2
|
||||||
override val viewModel by viewModel<HomeViewModel>()
|
override val viewModel by viewModel<HomeViewModel>()
|
||||||
|
|
||||||
override fun consumeSystemWindowInsets(insets: Insets) = insets
|
|
||||||
|
|
||||||
override fun onStart() {
|
override fun onStart() {
|
||||||
super.onStart()
|
super.onStart()
|
||||||
activity.title = resources.getString(R.string.section_home)
|
activity.title = resources.getString(R.string.section_home)
|
||||||
|
|
|
@ -1,7 +1,6 @@
|
||||||
package com.topjohnwu.magisk.ui.install
|
package com.topjohnwu.magisk.ui.install
|
||||||
|
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
import androidx.core.graphics.Insets
|
|
||||||
import com.topjohnwu.magisk.R
|
import com.topjohnwu.magisk.R
|
||||||
import com.topjohnwu.magisk.databinding.FragmentInstallMd2Binding
|
import com.topjohnwu.magisk.databinding.FragmentInstallMd2Binding
|
||||||
import com.topjohnwu.magisk.model.events.RequestFileEvent
|
import com.topjohnwu.magisk.model.events.RequestFileEvent
|
||||||
|
@ -13,8 +12,6 @@ class InstallFragment : CompatFragment<InstallViewModel, FragmentInstallMd2Bindi
|
||||||
override val layoutRes = R.layout.fragment_install_md2
|
override val layoutRes = R.layout.fragment_install_md2
|
||||||
override val viewModel by viewModel<InstallViewModel>()
|
override val viewModel by viewModel<InstallViewModel>()
|
||||||
|
|
||||||
override fun consumeSystemWindowInsets(insets: Insets) = insets
|
|
||||||
|
|
||||||
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
|
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
|
||||||
super.onActivityResult(requestCode, resultCode, data)
|
super.onActivityResult(requestCode, resultCode, data)
|
||||||
viewModel.data.value = RequestFileEvent.resolve(requestCode, resultCode, data)
|
viewModel.data.value = RequestFileEvent.resolve(requestCode, resultCode, data)
|
||||||
|
|
|
@ -5,7 +5,6 @@ import android.view.Menu
|
||||||
import android.view.MenuInflater
|
import android.view.MenuInflater
|
||||||
import android.view.MenuItem
|
import android.view.MenuItem
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import androidx.core.graphics.Insets
|
|
||||||
import androidx.core.view.isVisible
|
import androidx.core.view.isVisible
|
||||||
import com.topjohnwu.magisk.R
|
import com.topjohnwu.magisk.R
|
||||||
import com.topjohnwu.magisk.databinding.FragmentLogMd2Binding
|
import com.topjohnwu.magisk.databinding.FragmentLogMd2Binding
|
||||||
|
@ -28,8 +27,6 @@ class LogFragment : CompatFragment<LogViewModel, FragmentLogMd2Binding>() {
|
||||||
(activity as MainActivity).invalidateToolbar()
|
(activity as MainActivity).invalidateToolbar()
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun consumeSystemWindowInsets(insets: Insets) = insets
|
|
||||||
|
|
||||||
override fun onStart() {
|
override fun onStart() {
|
||||||
super.onStart()
|
super.onStart()
|
||||||
setHasOptionsMenu(true)
|
setHasOptionsMenu(true)
|
||||||
|
|
|
@ -6,7 +6,6 @@ import android.view.Menu
|
||||||
import android.view.MenuInflater
|
import android.view.MenuInflater
|
||||||
import android.view.MenuItem
|
import android.view.MenuItem
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import androidx.core.graphics.Insets
|
|
||||||
import androidx.core.view.isVisible
|
import androidx.core.view.isVisible
|
||||||
import androidx.recyclerview.widget.RecyclerView
|
import androidx.recyclerview.widget.RecyclerView
|
||||||
import androidx.recyclerview.widget.StaggeredGridLayoutManager
|
import androidx.recyclerview.widget.StaggeredGridLayoutManager
|
||||||
|
@ -39,8 +38,6 @@ class ModuleFragment : CompatFragment<ModuleViewModel, FragmentModuleMd2Binding>
|
||||||
MotionRevealHelper.withViews(binding.moduleFilter, binding.moduleFilterToggle, value)
|
MotionRevealHelper.withViews(binding.moduleFilter, binding.moduleFilterToggle, value)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun consumeSystemWindowInsets(insets: Insets) = insets
|
|
||||||
|
|
||||||
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
|
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
|
||||||
super.onActivityResult(requestCode, resultCode, data)
|
super.onActivityResult(requestCode, resultCode, data)
|
||||||
InstallExternalModuleEvent.onActivityResult(requireContext(), requestCode, resultCode, data)
|
InstallExternalModuleEvent.onActivityResult(requireContext(), requestCode, resultCode, data)
|
||||||
|
|
|
@ -2,7 +2,6 @@ package com.topjohnwu.magisk.ui.settings
|
||||||
|
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import androidx.core.graphics.Insets
|
|
||||||
import com.topjohnwu.magisk.R
|
import com.topjohnwu.magisk.R
|
||||||
import com.topjohnwu.magisk.databinding.FragmentSettingsMd2Binding
|
import com.topjohnwu.magisk.databinding.FragmentSettingsMd2Binding
|
||||||
import com.topjohnwu.magisk.ui.base.CompatFragment
|
import com.topjohnwu.magisk.ui.base.CompatFragment
|
||||||
|
@ -14,8 +13,6 @@ class SettingsFragment : CompatFragment<SettingsViewModel, FragmentSettingsMd2Bi
|
||||||
override val layoutRes = R.layout.fragment_settings_md2
|
override val layoutRes = R.layout.fragment_settings_md2
|
||||||
override val viewModel by viewModel<SettingsViewModel>()
|
override val viewModel by viewModel<SettingsViewModel>()
|
||||||
|
|
||||||
override fun consumeSystemWindowInsets(insets: Insets) = insets
|
|
||||||
|
|
||||||
override fun onStart() {
|
override fun onStart() {
|
||||||
super.onStart()
|
super.onStart()
|
||||||
|
|
||||||
|
|
|
@ -5,7 +5,6 @@ import android.view.Menu
|
||||||
import android.view.MenuInflater
|
import android.view.MenuInflater
|
||||||
import android.view.MenuItem
|
import android.view.MenuItem
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import androidx.core.graphics.Insets
|
|
||||||
import com.topjohnwu.magisk.R
|
import com.topjohnwu.magisk.R
|
||||||
import com.topjohnwu.magisk.databinding.FragmentSuperuserMd2Binding
|
import com.topjohnwu.magisk.databinding.FragmentSuperuserMd2Binding
|
||||||
import com.topjohnwu.magisk.model.navigation.Navigation
|
import com.topjohnwu.magisk.model.navigation.Navigation
|
||||||
|
@ -18,8 +17,6 @@ class SuperuserFragment : CompatFragment<SuperuserViewModel, FragmentSuperuserMd
|
||||||
override val layoutRes = R.layout.fragment_superuser_md2
|
override val layoutRes = R.layout.fragment_superuser_md2
|
||||||
override val viewModel by viewModel<SuperuserViewModel>()
|
override val viewModel by viewModel<SuperuserViewModel>()
|
||||||
|
|
||||||
override fun consumeSystemWindowInsets(insets: Insets) = insets
|
|
||||||
|
|
||||||
override fun onStart() {
|
override fun onStart() {
|
||||||
super.onStart()
|
super.onStart()
|
||||||
activity.title = resources.getString(R.string.superuser)
|
activity.title = resources.getString(R.string.superuser)
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
package com.topjohnwu.magisk.ui.theme
|
package com.topjohnwu.magisk.ui.theme
|
||||||
|
|
||||||
import androidx.core.graphics.Insets
|
|
||||||
import com.topjohnwu.magisk.R
|
import com.topjohnwu.magisk.R
|
||||||
import com.topjohnwu.magisk.databinding.FragmentThemeMd2Binding
|
import com.topjohnwu.magisk.databinding.FragmentThemeMd2Binding
|
||||||
import com.topjohnwu.magisk.ui.base.CompatFragment
|
import com.topjohnwu.magisk.ui.base.CompatFragment
|
||||||
|
@ -11,8 +10,6 @@ class ThemeFragment : CompatFragment<ThemeViewModel, FragmentThemeMd2Binding>()
|
||||||
override val layoutRes = R.layout.fragment_theme_md2
|
override val layoutRes = R.layout.fragment_theme_md2
|
||||||
override val viewModel by viewModel<ThemeViewModel>()
|
override val viewModel by viewModel<ThemeViewModel>()
|
||||||
|
|
||||||
override fun consumeSystemWindowInsets(insets: Insets) = insets
|
|
||||||
|
|
||||||
override fun onStart() {
|
override fun onStart() {
|
||||||
super.onStart()
|
super.onStart()
|
||||||
|
|
||||||
|
|
|
@ -16,20 +16,27 @@
|
||||||
android:layout_height="match_parent">
|
android:layout_height="match_parent">
|
||||||
|
|
||||||
<com.google.android.material.appbar.AppBarLayout
|
<com.google.android.material.appbar.AppBarLayout
|
||||||
|
style="@style/WidgetFoundation.Appbar"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content">
|
||||||
android:theme="@style/AppBarLayoutTheme.Flashing">
|
|
||||||
|
|
||||||
<androidx.appcompat.widget.Toolbar
|
<!--todo(diareuse) replace this with menus and navigation icon like a normal human being-->
|
||||||
|
|
||||||
|
<com.google.android.material.appbar.MaterialToolbar
|
||||||
|
style="@style/WidgetFoundation.Toolbar"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="?attr/actionBarSize"
|
android:layout_height="wrap_content"
|
||||||
|
android:minHeight="?attr/actionBarSize"
|
||||||
app:contentInsetLeft="0dp"
|
app:contentInsetLeft="0dp"
|
||||||
app:contentInsetStart="0dp"
|
app:contentInsetStart="0dp"
|
||||||
app:popupTheme="@style/ToolbarPopupTheme.Flashing">
|
app:layout_scrollFlags="scroll|enterAlways">
|
||||||
|
|
||||||
<androidx.constraintlayout.widget.ConstraintLayout
|
<androidx.constraintlayout.widget.ConstraintLayout
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="?attr/actionBarSize"
|
||||||
|
android:layout_marginLeft="@{viewModel.insets.left}"
|
||||||
|
android:layout_marginTop="@{viewModel.insets.top}"
|
||||||
|
android:layout_marginRight="@{viewModel.insets.right}"
|
||||||
android:animateLayoutChanges="true">
|
android:animateLayoutChanges="true">
|
||||||
|
|
||||||
<FrameLayout
|
<FrameLayout
|
||||||
|
@ -46,7 +53,7 @@
|
||||||
android:layout_gravity="center"
|
android:layout_gravity="center"
|
||||||
android:background="@android:color/transparent"
|
android:background="@android:color/transparent"
|
||||||
app:srcCompat="@drawable/ic_back"
|
app:srcCompat="@drawable/ic_back"
|
||||||
app:tint="@android:color/white" />
|
app:tint="?colorOnSurface" />
|
||||||
|
|
||||||
</FrameLayout>
|
</FrameLayout>
|
||||||
|
|
||||||
|
@ -57,7 +64,7 @@
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:fontFamily="monospace"
|
android:fontFamily="monospace"
|
||||||
android:textColor="@android:color/white"
|
android:textColor="?colorOnSurface"
|
||||||
app:layout_constraintBottom_toBottomOf="parent"
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
app:layout_constraintLeft_toLeftOf="parent"
|
app:layout_constraintLeft_toLeftOf="parent"
|
||||||
app:layout_constraintRight_toRightOf="parent"
|
app:layout_constraintRight_toRightOf="parent"
|
||||||
|
@ -78,74 +85,46 @@
|
||||||
android:layout_gravity="center"
|
android:layout_gravity="center"
|
||||||
android:background="@android:color/transparent"
|
android:background="@android:color/transparent"
|
||||||
app:srcCompat="@drawable/ic_save_compat"
|
app:srcCompat="@drawable/ic_save_compat"
|
||||||
app:tint="@android:color/white" />
|
app:tint="?colorOnSurface" />
|
||||||
|
|
||||||
</FrameLayout>
|
</FrameLayout>
|
||||||
|
|
||||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||||
|
|
||||||
</androidx.appcompat.widget.Toolbar>
|
</com.google.android.material.appbar.MaterialToolbar>
|
||||||
|
|
||||||
</com.google.android.material.appbar.AppBarLayout>
|
</com.google.android.material.appbar.AppBarLayout>
|
||||||
|
|
||||||
<androidx.constraintlayout.widget.ConstraintLayout
|
<androidx.recyclerview.widget.RecyclerView
|
||||||
|
android:id="@+id/flash_content"
|
||||||
|
itemBinding="@{viewModel.itemBinding}"
|
||||||
|
items="@{viewModel.items}"
|
||||||
|
scrollToLast="@{true}"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
app:layout_behavior="@string/appbar_scrolling_view_behavior">
|
android:clipToPadding="false"
|
||||||
|
android:orientation="vertical"
|
||||||
|
android:paddingLeft="@{viewModel.insets.left}"
|
||||||
|
android:paddingRight="@{viewModel.insets.right}"
|
||||||
|
android:paddingBottom="@{viewModel.insets.bottom}"
|
||||||
|
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
|
||||||
|
app:layout_behavior="@string/appbar_scrolling_view_behavior"
|
||||||
|
tools:listitem="@layout/item_console" />
|
||||||
|
|
||||||
<androidx.recyclerview.widget.RecyclerView
|
<com.google.android.material.floatingactionbutton.ExtendedFloatingActionButton
|
||||||
itemBinding="@{viewModel.itemBinding}"
|
invisibleScale="@{!viewModel.loaded || !viewModel.canShowReboot}"
|
||||||
items="@{viewModel.items}"
|
android:layout_width="wrap_content"
|
||||||
android:id="@+id/flash_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_width="match_parent"
|
android:layout_gravity="bottom|end"
|
||||||
android:layout_height="match_parent"
|
android:layout_margin="@dimen/l1"
|
||||||
android:orientation="vertical"
|
android:layout_marginBottom="@{(int) @dimen/l1 + viewModel.insets.bottom}"
|
||||||
scrollToLast="@{true}"
|
android:onClick="@{() -> viewModel.restartPressed()}"
|
||||||
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
|
android:text="@string/reboot"
|
||||||
tools:listitem="@layout/item_console" />
|
android:textAllCaps="false"
|
||||||
|
android:textStyle="bold"
|
||||||
<com.google.android.material.card.MaterialCardView
|
app:backgroundTint="?colorPrimary"
|
||||||
invisibleScale="@{!viewModel.loaded || !viewModel.canShowReboot}"
|
app:icon="@drawable/ic_restart"
|
||||||
android:layout_width="wrap_content"
|
app:tint="?colorOnPrimary" />
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_margin="@dimen/margin_generic"
|
|
||||||
app:cardBackgroundColor="@color/colorSecondary"
|
|
||||||
app:cardCornerRadius="26dp"
|
|
||||||
app:cardPreventCornerOverlap="true"
|
|
||||||
app:layout_constraintBottom_toBottomOf="parent"
|
|
||||||
app:layout_constraintRight_toRightOf="parent">
|
|
||||||
|
|
||||||
<LinearLayout
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:animateLayoutChanges="true"
|
|
||||||
android:background="?attr/selectableItemBackground"
|
|
||||||
android:gravity="center"
|
|
||||||
android:onClick="@{() -> viewModel.restartPressed()}"
|
|
||||||
android:padding="@dimen/margin_generic_half">
|
|
||||||
|
|
||||||
<androidx.appcompat.widget.AppCompatImageView
|
|
||||||
style="@style/Widget.Icon"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:background="@android:color/transparent"
|
|
||||||
app:srcCompat="@drawable/ic_restart"
|
|
||||||
app:tint="@color/colorTextTinted" />
|
|
||||||
|
|
||||||
<androidx.appcompat.widget.AppCompatTextView
|
|
||||||
style="@style/Widget.Text.Emphasize.Tinted"
|
|
||||||
gone="@{!viewModel.showRestartTitle}"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_marginLeft="@dimen/margin_generic_half"
|
|
||||||
android:paddingRight="@dimen/margin_generic_half"
|
|
||||||
android:text="@string/reboot" />
|
|
||||||
|
|
||||||
</LinearLayout>
|
|
||||||
|
|
||||||
</com.google.android.material.card.MaterialCardView>
|
|
||||||
|
|
||||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
|
||||||
|
|
||||||
</androidx.coordinatorlayout.widget.CoordinatorLayout>
|
</androidx.coordinatorlayout.widget.CoordinatorLayout>
|
||||||
|
|
||||||
|
|
|
@ -1,17 +1,4 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<resources>
|
<resources>
|
||||||
|
|
||||||
<style name="ThemeFoundation" parent="Theme.MaterialComponents.NoActionBar" />
|
|
||||||
|
|
||||||
<style name="MagiskTheme.SUFoundation" parent="Theme.MaterialComponents.Dialog" />
|
|
||||||
|
|
||||||
<style name="MagiskTheme" parent="ThemeFoundation.Colored.ExtraProps">
|
|
||||||
<!--All of these attributes are deprecated and will be removed-->
|
|
||||||
<item name="cardStyle">@style/CardViewStyle.Dark</item>
|
|
||||||
<item name="imageColorTint">@color/dark_secondary_text</item>
|
|
||||||
<item name="colorControl">?android:attr/textColorSecondary</item>
|
|
||||||
<item name="colorAccentFallback">@color/accentFallback</item>
|
|
||||||
<item name="android:windowBackground">@android:color/black</item>
|
|
||||||
</style>
|
|
||||||
|
|
||||||
</resources>
|
</resources>
|
|
@ -1,65 +1,5 @@
|
||||||
<resources>
|
<resources>
|
||||||
|
|
||||||
<style name="ThemeFoundation" parent="Theme.MaterialComponents.Light.NoActionBar" />
|
|
||||||
|
|
||||||
<style name="ThemeFoundation.Colored">
|
|
||||||
<item name="colorPrimary">@color/colorPrimary</item>
|
|
||||||
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
|
|
||||||
<item name="colorPrimaryVariant">@color/colorPrimaryDark</item>
|
|
||||||
<item name="colorAccent">@color/colorSecondary</item>
|
|
||||||
<item name="colorSecondary">@color/colorSecondary</item>
|
|
||||||
<item name="colorSecondaryVariant">@color/colorSecondaryDark</item>
|
|
||||||
<item name="android:windowBackground">@android:color/white</item>
|
|
||||||
</style>
|
|
||||||
|
|
||||||
<style name="ThemeFoundation.Colored.ExtraProps" />
|
|
||||||
|
|
||||||
<style name="MagiskTheme" parent="ThemeFoundation.Colored.ExtraProps">
|
|
||||||
<!--All of these attributes are deprecated and will be removed-->
|
|
||||||
<item name="cardStyle">@style/CardViewStyle.Light</item>
|
|
||||||
<item name="imageColorTint">@color/icon_grey</item>
|
|
||||||
<item name="colorControl">?android:attr/textColorSecondary</item>
|
|
||||||
<item name="colorAccentFallback">@color/accentFallback</item>
|
|
||||||
</style>
|
|
||||||
|
|
||||||
<style name="MagiskTheme.Flashing" parent="Theme.MaterialComponents.NoActionBar">
|
|
||||||
<item name="colorPrimary">@android:color/black</item>
|
|
||||||
<item name="colorPrimaryDark">@android:color/black</item>
|
|
||||||
<item name="colorAccent">@color/colorSecondary</item>
|
|
||||||
<item name="colorSecondary">@color/colorSecondary</item>
|
|
||||||
<item name="colorSecondaryVariant">@color/colorSecondaryDark</item>
|
|
||||||
<item name="android:windowBackground">@android:color/black</item>
|
|
||||||
</style>
|
|
||||||
|
|
||||||
<style name="MagiskTheme.SUFoundation" parent="Theme.MaterialComponents.Light.Dialog" />
|
|
||||||
|
|
||||||
<style name="MagiskTheme.SU" parent="MagiskTheme.SUFoundation">
|
|
||||||
<item name="android:windowIsFloating">true</item>
|
|
||||||
<item name="android:windowIsTranslucent">true</item>
|
|
||||||
<item name="windowActionBar">false</item>
|
|
||||||
<item name="windowNoTitle">true</item>
|
|
||||||
</style>
|
|
||||||
|
|
||||||
<!--Overlays-->
|
|
||||||
|
|
||||||
<style name="AppBarLayoutTheme" parent="ThemeOverlay.AppCompat.Dark" />
|
|
||||||
|
|
||||||
<style name="AppBarLayoutTheme.Flashing" parent="ThemeOverlay.AppCompat.Dark" />
|
|
||||||
|
|
||||||
<style name="ToolbarPopupTheme" parent="ThemeOverlay.AppCompat.Light" />
|
|
||||||
|
|
||||||
<style name="ToolbarPopupTheme.Flashing" parent="ThemeOverlay.AppCompat.Dark" />
|
|
||||||
|
|
||||||
<!--CardView-->
|
|
||||||
|
|
||||||
<style name="CardViewStyle.Dark" parent="CardView">
|
|
||||||
<item name="cardBackgroundColor">@color/card_background_color_dark</item>
|
|
||||||
</style>
|
|
||||||
|
|
||||||
<style name="CardViewStyle.Light" parent="CardView">
|
|
||||||
<item name="cardBackgroundColor">@color/card_background_color_light</item>
|
|
||||||
</style>
|
|
||||||
|
|
||||||
<style name="SplashTheme" parent="SplashThemeBase"/>
|
<style name="SplashTheme" parent="SplashThemeBase"/>
|
||||||
|
|
||||||
</resources>
|
</resources>
|
||||||
|
|
|
@ -9,6 +9,8 @@
|
||||||
<style name="Foundation.Compat" />
|
<style name="Foundation.Compat" />
|
||||||
|
|
||||||
<!--region Do not remove-->
|
<!--region Do not remove-->
|
||||||
|
<style name="Empty" />
|
||||||
|
|
||||||
<style name="WidgetFoundation" parent="android:Widget" />
|
<style name="WidgetFoundation" parent="android:Widget" />
|
||||||
|
|
||||||
<style name="AppearanceFoundation">
|
<style name="AppearanceFoundation">
|
||||||
|
@ -31,4 +33,9 @@
|
||||||
<item name="android:windowBackground">?colorSurface</item>
|
<item name="android:windowBackground">?colorSurface</item>
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
|
<style name="Foundation.Floating" parent="Empty">
|
||||||
|
<item name="android:windowIsFloating">true</item>
|
||||||
|
<item name="android:windowIsTranslucent">true</item>
|
||||||
|
</style>
|
||||||
|
|
||||||
</resources>
|
</resources>
|
Loading…
Reference in New Issue
Block a user