diff --git a/app/build.gradle b/app/build.gradle
index 73138d84..d3cd0119 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -124,6 +124,10 @@ dependencies {
implementation 'androidx.navigation:navigation-ui-ktx:2.3.2'
implementation 'androidx.preference:preference-ktx:1.1.1'
implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.1.0'
+
+
+ //Appearance
+ implementation 'com.github.madrapps:pikolo:2.0.1'
implementation 'com.google.android.material:material:1.3.0-alpha04'
// JSON parser
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 1f3b62cb..31ebd398 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -51,14 +51,14 @@
+ android:theme="@style/DarkTheme"/>
+ android:theme="@style/DarkTheme">
diff --git a/app/src/main/java/com/vanced/manager/ui/core/SplashScreenActivity.kt b/app/src/main/java/com/vanced/manager/ui/core/SplashScreenActivity.kt
index 5131bd7b..871f07e9 100644
--- a/app/src/main/java/com/vanced/manager/ui/core/SplashScreenActivity.kt
+++ b/app/src/main/java/com/vanced/manager/ui/core/SplashScreenActivity.kt
@@ -4,7 +4,6 @@ import android.content.Intent
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import androidx.preference.PreferenceManager.getDefaultSharedPreferences
-import com.vanced.manager.R
import com.vanced.manager.ui.MainActivity
import com.vanced.manager.ui.WelcomeActivity
diff --git a/app/src/main/java/com/vanced/manager/ui/core/ThemedMaterialButton.kt b/app/src/main/java/com/vanced/manager/ui/core/ThemedMaterialButton.kt
new file mode 100644
index 00000000..bb1b2a44
--- /dev/null
+++ b/app/src/main/java/com/vanced/manager/ui/core/ThemedMaterialButton.kt
@@ -0,0 +1,37 @@
+package com.vanced.manager.ui.core
+
+import android.content.Context
+import android.util.AttributeSet
+import androidx.core.content.res.ResourcesCompat
+import androidx.core.graphics.ColorUtils
+import com.google.android.material.button.MaterialButton
+import com.vanced.manager.R
+import com.vanced.manager.utils.Extensions.getDefaultPrefs
+import com.vanced.manager.utils.Extensions.lifecycleOwner
+import com.vanced.manager.utils.ThemeHelper.accentColor
+import com.vanced.manager.utils.ThemeHelper.defAccentColor
+
+class ThemedMaterialButton @JvmOverloads constructor(
+ context: Context,
+ attributeSet: AttributeSet? = null,
+ defStyleAttr: Int = 0
+) : MaterialButton(context, attributeSet, defStyleAttr) {
+
+ init {
+ setBgColor(context.getDefaultPrefs().getInt("manager_accent", defAccentColor))
+ context.lifecycleOwner()?.let { owner ->
+ accentColor.observe(owner) { color ->
+ setBgColor(color.toInt())
+ }
+ }
+ }
+
+ private fun setBgColor(color: Int) {
+ setBackgroundColor(color)
+ if (ColorUtils.calculateLuminance(color) < 0.75) {
+ setTextColor(ResourcesCompat.getColor(resources, R.color.White, null))
+ } else {
+ setTextColor(ResourcesCompat.getColor(resources, R.color.Black, null))
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/vanced/manager/ui/core/ThemedMaterialCheckbox.kt b/app/src/main/java/com/vanced/manager/ui/core/ThemedMaterialCheckbox.kt
new file mode 100644
index 00000000..4f419cf5
--- /dev/null
+++ b/app/src/main/java/com/vanced/manager/ui/core/ThemedMaterialCheckbox.kt
@@ -0,0 +1,25 @@
+package com.vanced.manager.ui.core
+
+import android.content.Context
+import android.content.res.ColorStateList
+import android.util.AttributeSet
+import com.google.android.material.checkbox.MaterialCheckBox
+import com.vanced.manager.R
+import com.vanced.manager.utils.Extensions.getDefaultPrefs
+import com.vanced.manager.utils.Extensions.lifecycleOwner
+import com.vanced.manager.utils.ThemeHelper.accentColor
+import com.vanced.manager.utils.ThemeHelper.defAccentColor
+
+class ThemedMaterialCheckbox @JvmOverloads constructor(
+ context: Context,
+ attributeSet: AttributeSet? = null,
+) : MaterialCheckBox(context, attributeSet, R.attr.checkboxStyle) {
+ init {
+ buttonTintList = ColorStateList.valueOf(context.getDefaultPrefs().getInt("manager_accent", defAccentColor))
+ context.lifecycleOwner()?.let { owner ->
+ accentColor.observe(owner) { color ->
+ buttonTintList = ColorStateList.valueOf(color.toInt())
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/vanced/manager/ui/core/ThemedMaterialRadioButton.kt b/app/src/main/java/com/vanced/manager/ui/core/ThemedMaterialRadioButton.kt
new file mode 100644
index 00000000..fec702cb
--- /dev/null
+++ b/app/src/main/java/com/vanced/manager/ui/core/ThemedMaterialRadioButton.kt
@@ -0,0 +1,25 @@
+package com.vanced.manager.ui.core
+
+import android.content.Context
+import android.content.res.ColorStateList
+import android.util.AttributeSet
+import com.google.android.material.radiobutton.MaterialRadioButton
+import com.vanced.manager.R
+import com.vanced.manager.utils.Extensions.getDefaultPrefs
+import com.vanced.manager.utils.Extensions.lifecycleOwner
+import com.vanced.manager.utils.ThemeHelper.accentColor
+import com.vanced.manager.utils.ThemeHelper.defAccentColor
+
+class ThemedMaterialRadioButton @JvmOverloads constructor(
+ context: Context,
+ attributeSet: AttributeSet? = null,
+) : MaterialRadioButton(context, attributeSet, R.attr.radioButtonStyle) {
+ init {
+ buttonTintList = ColorStateList.valueOf(context.getDefaultPrefs().getInt("manager_accent", defAccentColor))
+ context.lifecycleOwner()?.let { owner ->
+ accentColor.observe(owner) { color ->
+ buttonTintList = ColorStateList.valueOf(color.toInt())
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/vanced/manager/ui/core/ThemedOutlinedMaterialButton.kt b/app/src/main/java/com/vanced/manager/ui/core/ThemedOutlinedMaterialButton.kt
new file mode 100644
index 00000000..0211fd9b
--- /dev/null
+++ b/app/src/main/java/com/vanced/manager/ui/core/ThemedOutlinedMaterialButton.kt
@@ -0,0 +1,24 @@
+package com.vanced.manager.ui.core
+
+import android.content.Context
+import android.util.AttributeSet
+import com.google.android.material.button.MaterialButton
+import com.vanced.manager.utils.Extensions.getDefaultPrefs
+import com.vanced.manager.utils.Extensions.lifecycleOwner
+import com.vanced.manager.utils.ThemeHelper.accentColor
+import com.vanced.manager.utils.ThemeHelper.defAccentColor
+
+class ThemedOutlinedMaterialButton @JvmOverloads constructor(
+ context: Context,
+ attributeSet: AttributeSet? = null,
+ defStyleAttr: Int = 0
+) : MaterialButton(context, attributeSet, defStyleAttr) {
+ init {
+ setTextColor(context.getDefaultPrefs().getInt("manager_accent", defAccentColor))
+ context.lifecycleOwner()?.let { owner ->
+ accentColor.observe(owner) { color ->
+ setTextColor(color.toInt())
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/vanced/manager/ui/core/ThemedSwitchCompat.kt b/app/src/main/java/com/vanced/manager/ui/core/ThemedSwitchCompat.kt
new file mode 100644
index 00000000..1e15464d
--- /dev/null
+++ b/app/src/main/java/com/vanced/manager/ui/core/ThemedSwitchCompat.kt
@@ -0,0 +1,38 @@
+package com.vanced.manager.ui.core
+
+import android.content.Context
+import android.content.res.ColorStateList
+import android.graphics.Color
+import android.util.AttributeSet
+import androidx.appcompat.widget.SwitchCompat
+import androidx.core.graphics.ColorUtils
+import androidx.core.graphics.drawable.DrawableCompat
+import com.vanced.manager.R
+import com.vanced.manager.utils.Extensions.getDefaultPrefs
+import com.vanced.manager.utils.Extensions.lifecycleOwner
+import com.vanced.manager.utils.ThemeHelper.accentColor
+import com.vanced.manager.utils.ThemeHelper.defAccentColor
+
+class ThemedSwitchCompat @JvmOverloads constructor(
+ context: Context,
+ attributeSet: AttributeSet? = null,
+) : SwitchCompat(context, attributeSet, R.attr.switchStyle) {
+
+ private val states = arrayOf(intArrayOf(-android.R.attr.state_checked), intArrayOf(android.R.attr.state_checked))
+
+ init {
+ setSwitchColors(context.getDefaultPrefs().getInt("manager_accent", defAccentColor))
+ context.lifecycleOwner()?.let { owner ->
+ accentColor.observe(owner) { color ->
+ setSwitchColors(color.toInt())
+ }
+ }
+ }
+
+ private fun setSwitchColors(color: Int) {
+ val thumbColors = intArrayOf(Color.LTGRAY, color)
+ val trackColors = intArrayOf(Color.GRAY, ColorUtils.setAlphaComponent(color, 70))
+ DrawableCompat.setTintList(DrawableCompat.wrap(thumbDrawable), ColorStateList(states, thumbColors))
+ DrawableCompat.setTintList(DrawableCompat.wrap(trackDrawable), ColorStateList(states, trackColors))
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/vanced/manager/ui/core/ThemedTextView.kt b/app/src/main/java/com/vanced/manager/ui/core/ThemedTextView.kt
new file mode 100644
index 00000000..ddc3f287
--- /dev/null
+++ b/app/src/main/java/com/vanced/manager/ui/core/ThemedTextView.kt
@@ -0,0 +1,24 @@
+package com.vanced.manager.ui.core
+
+import android.content.Context
+import android.util.AttributeSet
+import androidx.appcompat.widget.AppCompatTextView
+import com.vanced.manager.utils.Extensions.getDefaultPrefs
+import com.vanced.manager.utils.Extensions.lifecycleOwner
+import com.vanced.manager.utils.ThemeHelper.accentColor
+import com.vanced.manager.utils.ThemeHelper.defAccentColor
+
+class ThemedTextView @JvmOverloads constructor(
+ context: Context,
+ attributeSet: AttributeSet? = null,
+ defStyleAttr: Int = 0
+) : AppCompatTextView(context, attributeSet, defStyleAttr) {
+ init {
+ setTextColor(context.getDefaultPrefs().getInt("manager_accent", defAccentColor))
+ context.lifecycleOwner()?.let { owner ->
+ accentColor.observe(owner) { color ->
+ setTextColor(color.toInt())
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/vanced/manager/ui/dialogs/AppVersionSelectorDialog.kt b/app/src/main/java/com/vanced/manager/ui/dialogs/AppVersionSelectorDialog.kt
index 53635097..f1de4c20 100644
--- a/app/src/main/java/com/vanced/manager/ui/dialogs/AppVersionSelectorDialog.kt
+++ b/app/src/main/java/com/vanced/manager/ui/dialogs/AppVersionSelectorDialog.kt
@@ -10,6 +10,7 @@ import com.vanced.manager.R
import com.vanced.manager.core.ui.base.BindingBottomSheetDialogFragment
import com.vanced.manager.core.ui.ext.showDialog
import com.vanced.manager.databinding.DialogBottomRadioButtonBinding
+import com.vanced.manager.ui.core.ThemedMaterialRadioButton
import com.vanced.manager.utils.Extensions.getCheckedButtonTag
import com.vanced.manager.utils.Extensions.getDefaultPrefs
@@ -73,7 +74,7 @@ class AppVersionSelectorDialog : BindingBottomSheetDialogFragment
- MaterialRadioButton(requireActivity()).apply {
+ ThemedMaterialRadioButton(requireActivity()).apply {
text = version
tag = version
textSize = 18f
diff --git a/app/src/main/java/com/vanced/manager/ui/dialogs/ManagerAccentColorDialog.kt b/app/src/main/java/com/vanced/manager/ui/dialogs/ManagerAccentColorDialog.kt
index bca19100..6d4f705e 100644
--- a/app/src/main/java/com/vanced/manager/ui/dialogs/ManagerAccentColorDialog.kt
+++ b/app/src/main/java/com/vanced/manager/ui/dialogs/ManagerAccentColorDialog.kt
@@ -1,16 +1,23 @@
package com.vanced.manager.ui.dialogs
+import android.graphics.Color
import android.os.Bundle
+import android.util.Log
import android.view.LayoutInflater
import android.view.ViewGroup
+import android.widget.TextView
+import android.widget.Toast
import androidx.core.content.edit
import androidx.preference.PreferenceManager.getDefaultSharedPreferences
-import com.google.android.material.radiobutton.MaterialRadioButton
-import com.vanced.manager.core.ui.base.BindingBottomSheetDialogFragment
+import com.madrapps.pikolo.listeners.OnColorSelectionListener
+import com.vanced.manager.R
+import com.vanced.manager.core.ui.base.BindingDialogFragment
import com.vanced.manager.databinding.DialogManagerAccentColorBinding
-import com.vanced.manager.utils.Extensions.getCheckedButtonTag
+import com.vanced.manager.utils.Extensions.toHex
+import com.vanced.manager.utils.ThemeHelper.defAccentColor
+import com.vanced.manager.utils.ThemeHelper.mutableAccentColor
-class ManagerAccentColorDialog : BindingBottomSheetDialogFragment() {
+class ManagerAccentColorDialog : BindingDialogFragment() {
companion object {
fun newInstance(): ManagerAccentColorDialog = ManagerAccentColorDialog().apply {
@@ -28,21 +35,52 @@ class ManagerAccentColorDialog : BindingBottomSheetDialogFragment(accent).isChecked = true
+ val accent = prefs.getInt("manager_accent", defAccentColor)
+ hexEdittext.setText(accent.toHex(), TextView.BufferType.EDITABLE)
+ accentPicker.apply {
+ setColor(accent)
+ setColorSelectionListener(object : OnColorSelectionListener {
+ override fun onColorSelected(color: Int) {
+ mutableAccentColor.value = color
+ hexEdittext.setText(color.toHex(), TextView.BufferType.EDITABLE)
+ }
+
+ override fun onColorSelectionEnd(color: Int) {
+ return
+ }
+
+ override fun onColorSelectionStart(color: Int) {
+ return
+ }
+
+ })
+ }
accentSave.setOnClickListener {
- val newPref = binding.accentRadiogroup.getCheckedButtonTag()
- if (accent != newPref) {
- prefs.edit { putString("manager_accent", newPref) }
- dismiss()
- requireActivity().recreate()
- } else {
- dismiss()
+ try {
+ val colorFromEdittext = Color.parseColor(hexEdittext.text.toString())
+ mutableAccentColor.value = colorFromEdittext
+ prefs.edit { putInt("manager_accent", colorFromEdittext) }
+ } catch (e: IllegalArgumentException) {
+ Log.d("VMTheme", getString(R.string.failed_accent))
+ Toast.makeText(requireActivity(), getString(R.string.failed_accent), Toast.LENGTH_SHORT).show()
+ return@setOnClickListener
}
+
+ dismiss()
+ }
+ accentSave.setOnClickListener {
+ mutableAccentColor.value = accent
+ dismiss()
+ }
+ accentReset.setOnClickListener {
+ prefs.edit { putInt("manager_accent", defAccentColor) }
+ mutableAccentColor.value = defAccentColor
+ dismiss()
}
}
}
diff --git a/app/src/main/java/com/vanced/manager/ui/dialogs/ManagerLanguageDialog.kt b/app/src/main/java/com/vanced/manager/ui/dialogs/ManagerLanguageDialog.kt
index b967f254..4ed9ef16 100644
--- a/app/src/main/java/com/vanced/manager/ui/dialogs/ManagerLanguageDialog.kt
+++ b/app/src/main/java/com/vanced/manager/ui/dialogs/ManagerLanguageDialog.kt
@@ -7,10 +7,10 @@ import android.view.ViewGroup.LayoutParams.MATCH_PARENT
import android.view.ViewGroup.LayoutParams.WRAP_CONTENT
import androidx.core.content.edit
import androidx.preference.PreferenceManager.getDefaultSharedPreferences
-import com.google.android.material.radiobutton.MaterialRadioButton
import com.vanced.manager.BuildConfig.MANAGER_LANGUAGES
import com.vanced.manager.core.ui.base.BindingBottomSheetDialogFragment
import com.vanced.manager.databinding.DialogManagerLanguageBinding
+import com.vanced.manager.ui.core.ThemedMaterialRadioButton
import com.vanced.manager.utils.Extensions.getCheckedButtonTag
import com.vanced.manager.utils.LanguageHelper.getLanguageFormat
@@ -41,7 +41,7 @@ class ManagerLanguageDialog : BindingBottomSheetDialogFragment(language).isChecked = true
+ root.findViewWithTag(language).isChecked = true
languageSave.setOnClickListener {
val newPref = binding.languageRadiogroup.getCheckedButtonTag()
if (language != newPref) {
@@ -57,7 +57,7 @@ class ManagerLanguageDialog : BindingBottomSheetDialogFragment
- MaterialRadioButton(requireActivity()).apply {
+ ThemedMaterialRadioButton(requireActivity()).apply {
text = getLanguageFormat(requireActivity(), lang)
textSize = 18f
tag = lang
diff --git a/app/src/main/java/com/vanced/manager/ui/dialogs/URLChangeDialog.kt b/app/src/main/java/com/vanced/manager/ui/dialogs/URLChangeDialog.kt
index 8289b95c..b328a45a 100644
--- a/app/src/main/java/com/vanced/manager/ui/dialogs/URLChangeDialog.kt
+++ b/app/src/main/java/com/vanced/manager/ui/dialogs/URLChangeDialog.kt
@@ -37,7 +37,6 @@ class URLChangeDialog : BindingDialogFragment() {
private fun bindData() {
with(binding) {
-
urlInput.setText(
if (arguments != null) {
arguments?.getString("url")
diff --git a/app/src/main/java/com/vanced/manager/ui/dialogs/VancedLanguageSelectionDialog.kt b/app/src/main/java/com/vanced/manager/ui/dialogs/VancedLanguageSelectionDialog.kt
index f132a544..efab39c7 100644
--- a/app/src/main/java/com/vanced/manager/ui/dialogs/VancedLanguageSelectionDialog.kt
+++ b/app/src/main/java/com/vanced/manager/ui/dialogs/VancedLanguageSelectionDialog.kt
@@ -16,6 +16,7 @@ import com.vanced.manager.R
import com.vanced.manager.core.ui.base.BindingBottomSheetDialogFragment
import com.vanced.manager.core.ui.ext.showDialog
import com.vanced.manager.databinding.DialogVancedLanguageSelectionBinding
+import com.vanced.manager.ui.core.ThemedMaterialCheckbox
import com.vanced.manager.utils.InternetTools.vanced
import com.vanced.manager.utils.LanguageHelper.getDefaultVancedLanguages
import java.util.*
@@ -66,7 +67,7 @@ class VancedLanguageSelectionDialog : BindingBottomSheetDialogFragment
val loc = Locale(lang)
- val box: MaterialCheckBox = MaterialCheckBox(requireActivity()).apply {
+ val box = ThemedMaterialCheckbox(requireActivity()).apply {
tag = lang
isChecked = langPrefs?.contains(lang) ?: false
text = loc.getDisplayLanguage(loc).capitalize(Locale.ROOT)
diff --git a/app/src/main/java/com/vanced/manager/ui/dialogs/VancedThemeSelectorDialog.kt b/app/src/main/java/com/vanced/manager/ui/dialogs/VancedThemeSelectorDialog.kt
index 73bd7afc..d56ab39c 100644
--- a/app/src/main/java/com/vanced/manager/ui/dialogs/VancedThemeSelectorDialog.kt
+++ b/app/src/main/java/com/vanced/manager/ui/dialogs/VancedThemeSelectorDialog.kt
@@ -6,11 +6,11 @@ import android.os.Bundle
import android.view.LayoutInflater
import android.view.ViewGroup
import androidx.core.content.edit
-import com.google.android.material.radiobutton.MaterialRadioButton
import com.vanced.manager.R
import com.vanced.manager.core.ui.base.BindingBottomSheetDialogFragment
import com.vanced.manager.core.ui.ext.showDialog
import com.vanced.manager.databinding.DialogBottomRadioButtonBinding
+import com.vanced.manager.ui.core.ThemedMaterialRadioButton
import com.vanced.manager.utils.Extensions.convertToAppTheme
import com.vanced.manager.utils.Extensions.getCheckedButtonTag
import com.vanced.manager.utils.InternetTools.vanced
@@ -46,7 +46,7 @@ class VancedThemeSelectorDialog : BindingBottomSheetDialogFragment(prefs.getString("theme", "dark"))
+ val tag = root.findViewWithTag(prefs.getString("theme", "dark"))
if (tag != null) {
tag.isChecked = true
}
@@ -61,7 +61,7 @@ class VancedThemeSelectorDialog : BindingBottomSheetDialogFragment("themes")?.value?.map {theme ->
- MaterialRadioButton(requireActivity()).apply {
+ ThemedMaterialRadioButton(requireActivity()).apply {
text = theme.convertToAppTheme(requireActivity())
tag = theme
textSize = 18f
diff --git a/app/src/main/java/com/vanced/manager/ui/fragments/SettingsFragment.kt b/app/src/main/java/com/vanced/manager/ui/fragments/SettingsFragment.kt
index 04f6bfd4..f0cda948 100644
--- a/app/src/main/java/com/vanced/manager/ui/fragments/SettingsFragment.kt
+++ b/app/src/main/java/com/vanced/manager/ui/fragments/SettingsFragment.kt
@@ -17,7 +17,10 @@ import com.vanced.manager.core.ui.base.BindingFragment
import com.vanced.manager.core.ui.ext.showDialog
import com.vanced.manager.databinding.FragmentSettingsBinding
import com.vanced.manager.ui.dialogs.*
+import com.vanced.manager.utils.Extensions.toHex
import com.vanced.manager.utils.LanguageHelper.getLanguageFormat
+import com.vanced.manager.utils.ThemeHelper.accentColor
+import com.vanced.manager.utils.ThemeHelper.defAccentColor
import java.io.File
class SettingsFragment : BindingFragment() {
@@ -26,10 +29,6 @@ class SettingsFragment : BindingFragment() {
const val LIGHT = "Light"
const val DARK = "Dark"
- const val BLUE = "Blue"
- const val RED = "Red"
- const val GREEN = "Green"
- const val YELLOW = "Yellow"
}
private val prefs by lazy { getDefaultSharedPreferences(requireActivity()) }
@@ -105,18 +104,12 @@ class SettingsFragment : BindingFragment() {
}
private fun FragmentSettingsBinding.bindManagerAccentColor() {
- val accentPref = prefs.getString("manager_accent", "Blue")
+ managerAccentColor.setSummary(prefs.getInt("manager_accent", defAccentColor).toHex())
managerAccentColor.apply {
- setSummary(
- when (accentPref) {
- BLUE -> getString(R.string.accent_blue)
- RED -> getString(R.string.accent_red)
- GREEN -> getString(R.string.accent_green)
- YELLOW -> getString(R.string.accent_yellow)
- else -> getString(R.string.accent_purple)
- }
- )
setOnClickListener { showDialog(ManagerAccentColorDialog()) }
+ accentColor.observe(viewLifecycleOwner) {
+ managerAccentColor.setSummary(prefs.getInt("manager_accent", defAccentColor).toHex())
+ }
}
}
diff --git a/app/src/main/java/com/vanced/manager/utils/Extensions.kt b/app/src/main/java/com/vanced/manager/utils/Extensions.kt
index 7ce0a679..2a03666f 100644
--- a/app/src/main/java/com/vanced/manager/utils/Extensions.kt
+++ b/app/src/main/java/com/vanced/manager/utils/Extensions.kt
@@ -2,10 +2,12 @@ package com.vanced.manager.utils
import android.app.Activity
import android.content.Context
+import android.content.ContextWrapper
import android.content.SharedPreferences
import android.widget.RadioGroup
import androidx.fragment.app.DialogFragment
import androidx.fragment.app.FragmentActivity
+import androidx.lifecycle.LifecycleOwner
import androidx.preference.PreferenceManager.getDefaultSharedPreferences
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout
import com.google.android.material.radiobutton.MaterialRadioButton
@@ -20,10 +22,6 @@ object Extensions {
return findViewById(checkedRadioButtonId)?.tag?.toString()
}
- fun RadioGroup.getCheckedButtonText(): String {
- return findViewById(checkedRadioButtonId).text.toString()
- }
-
fun DialogFragment.show(activity: FragmentActivity) {
show(activity.supportFragmentManager, "")
}
@@ -71,4 +69,19 @@ object Extensions {
fun SharedPreferences.getInstallUrl() = getString("install_url", baseUrl)
+ fun Context.lifecycleOwner(): LifecycleOwner? {
+ var curContext = this
+ var maxDepth = 20
+ while (maxDepth-- > 0 && curContext !is LifecycleOwner) {
+ curContext = (curContext as ContextWrapper).baseContext
+ }
+ return if (curContext is LifecycleOwner) {
+ curContext
+ } else {
+ null
+ }
+ }
+
+ fun Int.toHex(): String = java.lang.String.format("#%06X", 0xFFFFFF and this)
+
}
\ No newline at end of file
diff --git a/app/src/main/java/com/vanced/manager/utils/PackageHelper.kt b/app/src/main/java/com/vanced/manager/utils/PackageHelper.kt
index c1cb1149..b3d119fc 100644
--- a/app/src/main/java/com/vanced/manager/utils/PackageHelper.kt
+++ b/app/src/main/java/com/vanced/manager/utils/PackageHelper.kt
@@ -10,7 +10,6 @@ import android.os.Build
import android.util.Log
import com.topjohnwu.superuser.Shell
import com.topjohnwu.superuser.io.SuFile
-import com.topjohnwu.superuser.io.SuFileInputStream
import com.topjohnwu.superuser.io.SuFileOutputStream
import com.vanced.manager.BuildConfig
import com.vanced.manager.core.installer.AppInstallerService
@@ -31,7 +30,6 @@ import java.util.*
import java.util.regex.Pattern
import kotlin.collections.ArrayList
import kotlin.collections.HashMap
-import kotlin.jvm.Throws
object PackageHelper {
diff --git a/app/src/main/java/com/vanced/manager/utils/ThemeHelper.kt b/app/src/main/java/com/vanced/manager/utils/ThemeHelper.kt
index 306f787e..e53b769e 100644
--- a/app/src/main/java/com/vanced/manager/utils/ThemeHelper.kt
+++ b/app/src/main/java/com/vanced/manager/utils/ThemeHelper.kt
@@ -2,46 +2,29 @@ package com.vanced.manager.utils
import android.app.Activity
import android.content.res.Configuration
+import androidx.lifecycle.LiveData
+import androidx.lifecycle.MutableLiveData
import com.vanced.manager.R
import com.vanced.manager.utils.Extensions.getDefaultPrefs
object ThemeHelper {
+ const val defAccentColor: Int = -13732865
+
+ val mutableAccentColor = MutableLiveData()
+ val accentColor: LiveData = mutableAccentColor
+
fun Activity.setFinalTheme() {
- val prefs = getDefaultPrefs()
- val currentAccent = prefs.getString("manager_accent", "Blue")
- when (prefs.getString("manager_theme", "System Default")) {
- "Light" -> setTheme(getLightAccent(currentAccent))
- "Dark" -> setTheme(getDarkAccent(currentAccent))
+ when (getDefaultPrefs().getString("manager_theme", "System Default")) {
+ "Light" -> setTheme(R.style.LightTheme)
+ "Dark" -> setTheme(R.style.DarkTheme)
"System Default" -> {
when (resources.configuration.uiMode and Configuration.UI_MODE_NIGHT_MASK) {
- Configuration.UI_MODE_NIGHT_YES -> setTheme(getDarkAccent(currentAccent))
- Configuration.UI_MODE_NIGHT_NO -> setTheme(getLightAccent(currentAccent))
+ Configuration.UI_MODE_NIGHT_YES -> setTheme(R.style.DarkTheme)
+ Configuration.UI_MODE_NIGHT_NO -> setTheme(R.style.LightTheme)
}
}
- else -> setTheme(getLightAccent("Blue"))
- }
- }
-
- private fun getDarkAccent(accentColor: String?): Int {
- return when (accentColor) {
- "Blue" -> R.style.DarkTheme_Blue
- "Red" -> R.style.DarkTheme_Red
- "Green" -> R.style.DarkTheme_Green
- "Yellow" -> R.style.DarkTheme_Yellow
- "Purple" -> R.style.DarkTheme_Purple
- else -> R.style.DarkTheme_Blue
- }
- }
-
- private fun getLightAccent(accentColor: String?): Int {
- return when (accentColor) {
- "Blue" -> R.style.LightTheme_Blue
- "Red" -> R.style.LightTheme_Red
- "Green" -> R.style.LightTheme_Green
- "Yellow" -> R.style.LightTheme_Yellow
- "Purple" -> R.style.LightTheme_Purple
- else -> R.style.LightTheme_Blue
+ else -> setTheme(R.style.LightTheme)
}
}
diff --git a/app/src/main/res/layout/dialog_app_download.xml b/app/src/main/res/layout/dialog_app_download.xml
index 9ce9c2ca..724b9c3d 100644
--- a/app/src/main/res/layout/dialog_app_download.xml
+++ b/app/src/main/res/layout/dialog_app_download.xml
@@ -58,7 +58,7 @@
android:textSize="15sp"
tools:text="Downloading base.apk..." />
-
-
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/dialog_bottom_radio_button.xml b/app/src/main/res/layout/dialog_bottom_radio_button.xml
index d7fc825b..9e6459d9 100644
--- a/app/src/main/res/layout/dialog_bottom_radio_button.xml
+++ b/app/src/main/res/layout/dialog_bottom_radio_button.xml
@@ -23,7 +23,7 @@
-
diff --git a/app/src/main/res/layout/dialog_custom_url.xml b/app/src/main/res/layout/dialog_custom_url.xml
index aeb33382..1bef148a 100644
--- a/app/src/main/res/layout/dialog_custom_url.xml
+++ b/app/src/main/res/layout/dialog_custom_url.xml
@@ -37,13 +37,13 @@
android:layout_height="wrap_content"
android:layout_marginTop="8dp">
-
-
-
-
+
+
diff --git a/app/src/main/res/layout/dialog_manager_accent_color.xml b/app/src/main/res/layout/dialog_manager_accent_color.xml
index 73bb0728..3ed493dd 100644
--- a/app/src/main/res/layout/dialog_manager_accent_color.xml
+++ b/app/src/main/res/layout/dialog_manager_accent_color.xml
@@ -1,5 +1,6 @@
-
-
+ android:layout_height="350dp" />
-
+
-
+
-
+
-
+
-
+
-
-
-
+
-
+
diff --git a/app/src/main/res/layout/dialog_manager_language.xml b/app/src/main/res/layout/dialog_manager_language.xml
index edda4478..7e2b515b 100644
--- a/app/src/main/res/layout/dialog_manager_language.xml
+++ b/app/src/main/res/layout/dialog_manager_language.xml
@@ -21,7 +21,7 @@
android:layout_height="wrap_content" />
-
diff --git a/app/src/main/res/layout/dialog_manager_theme.xml b/app/src/main/res/layout/dialog_manager_theme.xml
index 4144fb40..0fe43d6a 100644
--- a/app/src/main/res/layout/dialog_manager_theme.xml
+++ b/app/src/main/res/layout/dialog_manager_theme.xml
@@ -20,32 +20,35 @@
android:layout_width="match_parent"
android:layout_height="wrap_content">
-
-
-
+
-
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/dialog_manager_update.xml b/app/src/main/res/layout/dialog_manager_update.xml
index 9bb8b47a..81d60923 100644
--- a/app/src/main/res/layout/dialog_manager_update.xml
+++ b/app/src/main/res/layout/dialog_manager_update.xml
@@ -41,7 +41,7 @@
tools:progress="10"
tools:visibility="visible" />
-
-
-
-
diff --git a/app/src/main/res/layout/dialog_music_preferences.xml b/app/src/main/res/layout/dialog_music_preferences.xml
index d32ad612..a312705e 100644
--- a/app/src/main/res/layout/dialog_music_preferences.xml
+++ b/app/src/main/res/layout/dialog_music_preferences.xml
@@ -34,7 +34,7 @@
android:src="@drawable/ic_baseline_navigate_next_36" />
-
diff --git a/app/src/main/res/layout/dialog_select_apps.xml b/app/src/main/res/layout/dialog_select_apps.xml
index 4cd2d73a..16d51796 100644
--- a/app/src/main/res/layout/dialog_select_apps.xml
+++ b/app/src/main/res/layout/dialog_select_apps.xml
@@ -19,7 +19,7 @@
tools:itemCount="2"
tools:listitem="@layout/view_app_checkbox" />
-
-
diff --git a/app/src/main/res/layout/dialog_vanced_preferences.xml b/app/src/main/res/layout/dialog_vanced_preferences.xml
index 1f778ed6..04cc4520 100644
--- a/app/src/main/res/layout/dialog_vanced_preferences.xml
+++ b/app/src/main/res/layout/dialog_vanced_preferences.xml
@@ -82,7 +82,7 @@
android:src="@drawable/ic_baseline_navigate_next_36" />
-
diff --git a/app/src/main/res/layout/fragment_home.xml b/app/src/main/res/layout/fragment_home.xml
index 9b1782fa..d62b1257 100644
--- a/app/src/main/res/layout/fragment_home.xml
+++ b/app/src/main/res/layout/fragment_home.xml
@@ -26,7 +26,7 @@
tools:itemCount="3"
tools:listitem="@layout/view_app" />
-
-
-
-
-
-
-
-
-
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/view_preference_category.xml b/app/src/main/res/layout/view_preference_category.xml
index 60019b3f..00f4ba52 100644
--- a/app/src/main/res/layout/view_preference_category.xml
+++ b/app/src/main/res/layout/view_preference_category.xml
@@ -1,5 +1,5 @@
-
-
diff --git a/app/src/main/res/values-v23/themes.xml b/app/src/main/res/values-v23/themes.xml
index 3fde76bd..cd627ed4 100644
--- a/app/src/main/res/values-v23/themes.xml
+++ b/app/src/main/res/values-v23/themes.xml
@@ -1,7 +1,7 @@
-
diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml
index f541a0a2..05a0077b 100644
--- a/app/src/main/res/values/colors.xml
+++ b/app/src/main/res/values/colors.xml
@@ -10,6 +10,8 @@
#17191A
#5F5E5E
+ #ffffff
+ #000000
#131317
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 1ebad831..a0ef3c7d 100755
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -105,6 +105,7 @@
Failed to `chown` APK to system owner, please try again.
Error Downloading %1$s
Failed to uninstall package %1$s
+ Failed to apply new accent color
Failed to locate the required files for installation. Re-download the installation files, then try again.
Failed to locate apk file for black/dark theme from storage, please try again.
Installation failed because the user aborted the installation.
diff --git a/app/src/main/res/values/themes.xml b/app/src/main/res/values/themes.xml
index 498de273..a15277ce 100644
--- a/app/src/main/res/values/themes.xml
+++ b/app/src/main/res/values/themes.xml
@@ -2,7 +2,7 @@
-
-
-
-
-
-
-
+
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/build.gradle b/build.gradle
index 996c4493..b7593355 100644
--- a/build.gradle
+++ b/build.gradle
@@ -1,7 +1,7 @@
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
- ext.kotlin_version = '1.4.10'
+ ext.kotlin_version = '1.4.21'
repositories {
google()
jcenter()
@@ -13,7 +13,7 @@ buildscript {
classpath 'com.google.gms:google-services:4.3.4'
classpath 'com.google.firebase:perf-plugin:1.3.4'
classpath 'com.google.firebase:firebase-crashlytics-gradle:2.4.1'
- classpath 'androidx.navigation:navigation-safe-args-gradle-plugin:2.3.1'
+ classpath 'androidx.navigation:navigation-safe-args-gradle-plugin:2.3.2'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files