mirror of
https://github.com/topjohnwu/Magisk.git
synced 2025-12-30 16:26:27 +00:00
Support theme switching pre SDK 21
This commit is contained in:
@@ -52,11 +52,6 @@ class SettingsViewModel(
|
||||
Customization,
|
||||
Theme, Language
|
||||
)
|
||||
if (Build.VERSION.SDK_INT < 21) {
|
||||
// Pre 5.0 does not support getting colors from attributes,
|
||||
// making theming a pain in the ass. Just forget about it
|
||||
list.remove(Theme)
|
||||
}
|
||||
if (isRunningAsStub && ShortcutManagerCompat.isRequestPinShortcutSupported(context))
|
||||
list.add(AddShortcut)
|
||||
|
||||
|
||||
@@ -1,8 +1,16 @@
|
||||
package com.topjohnwu.magisk.ui.theme
|
||||
|
||||
import android.os.Bundle
|
||||
import android.view.ContextThemeWrapper
|
||||
import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import android.widget.FrameLayout
|
||||
import com.topjohnwu.magisk.BR
|
||||
import com.topjohnwu.magisk.R
|
||||
import com.topjohnwu.magisk.arch.BaseUIFragment
|
||||
import com.topjohnwu.magisk.databinding.FragmentThemeMd2Binding
|
||||
import com.topjohnwu.magisk.databinding.ItemThemeBindingImpl
|
||||
import org.koin.androidx.viewmodel.ext.android.viewModel
|
||||
|
||||
class ThemeFragment : BaseUIFragment<ThemeViewModel, FragmentThemeMd2Binding>() {
|
||||
@@ -10,6 +18,46 @@ class ThemeFragment : BaseUIFragment<ThemeViewModel, FragmentThemeMd2Binding>()
|
||||
override val layoutRes = R.layout.fragment_theme_md2
|
||||
override val viewModel by viewModel<ThemeViewModel>()
|
||||
|
||||
private fun <T> Array<T>.paired(): List<Pair<T, T?>> {
|
||||
val iterator = iterator()
|
||||
if (!iterator.hasNext()) return emptyList()
|
||||
val result = mutableListOf<Pair<T, T?>>()
|
||||
while (iterator.hasNext()) {
|
||||
val a = iterator.next()
|
||||
val b = if (iterator.hasNext()) iterator.next() else null
|
||||
result.add(a to b)
|
||||
}
|
||||
return result
|
||||
}
|
||||
|
||||
override fun onCreateView(
|
||||
inflater: LayoutInflater,
|
||||
container: ViewGroup?,
|
||||
savedInstanceState: Bundle?
|
||||
): View? {
|
||||
super.onCreateView(inflater, container, savedInstanceState)
|
||||
|
||||
for ((a, b) in Theme.values().paired()) {
|
||||
val c = inflater.inflate(R.layout.item_theme_container, null, false)
|
||||
val left = c.findViewById<FrameLayout>(R.id.left)
|
||||
val right = c.findViewById<FrameLayout>(R.id.right)
|
||||
|
||||
for ((theme, view) in listOf(a to left, b to right)) {
|
||||
theme ?: continue
|
||||
val themed = ContextThemeWrapper(activity, theme.themeRes)
|
||||
ItemThemeBindingImpl.inflate(LayoutInflater.from(themed), view, true).also {
|
||||
it.setVariable(BR.viewModel, viewModel)
|
||||
it.setVariable(BR.theme, theme)
|
||||
it.lifecycleOwner = this
|
||||
}
|
||||
}
|
||||
|
||||
binding.themeContainer.addView(c)
|
||||
}
|
||||
|
||||
return binding.root
|
||||
}
|
||||
|
||||
override fun onStart() {
|
||||
super.onStart()
|
||||
|
||||
|
||||
Reference in New Issue
Block a user