implemented custom themes

This commit is contained in:
deniscerri 2023-04-22 16:40:59 +02:00
parent f78ec2c16d
commit f5edae69b2
No known key found for this signature in database
GPG key ID: 95C43D517D830350
43 changed files with 1174 additions and 67 deletions

View file

@ -29,7 +29,7 @@
android:requestLegacyExternalStorage="true"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme"
android:theme="@style/BaseTheme"
tools:ignore="DataExtractionRules"
tools:targetApi="tiramisu">
<profileable
@ -119,7 +119,7 @@
android:exported="true"
android:label="@string/terminal"
android:parentActivityName=".MainActivity"
android:theme="@style/AppTheme">
android:theme="@style/BaseTheme">
<intent-filter>
<action android:name="ytdlnis.TerminalActivity" />

View file

@ -29,9 +29,11 @@ import androidx.navigation.fragment.findNavController
import androidx.navigation.ui.setupWithNavController
import com.deniscerri.ytdlnis.database.viewmodel.CookieViewModel
import com.deniscerri.ytdlnis.database.viewmodel.ResultViewModel
import com.deniscerri.ytdlnis.ui.BaseActivity
import com.deniscerri.ytdlnis.ui.HomeFragment
import com.deniscerri.ytdlnis.ui.downloads.DownloadQueueActivity
import com.deniscerri.ytdlnis.ui.more.settings.SettingsActivity
import com.deniscerri.ytdlnis.util.ThemeUtil
import com.deniscerri.ytdlnis.util.UpdateUtil
import com.google.android.material.bottomnavigation.BottomNavigationView
import com.google.android.material.dialog.MaterialAlertDialogBuilder
@ -48,7 +50,7 @@ import java.nio.charset.Charset
import java.nio.charset.StandardCharsets
import kotlin.system.exitProcess
class MainActivity : AppCompatActivity() {
class MainActivity : BaseActivity() {
lateinit var context: Context
private lateinit var preferences: SharedPreferences
@ -157,7 +159,6 @@ class MainActivity : AppCompatActivity() {
true
}
}
cookieViewModel.updateCookiesFile()
val intent = intent
handleIntents(intent)

View file

@ -135,6 +135,38 @@ class DownloadViewModel(private val application: Application) : AndroidViewModel
}
fun createResultItemFromDownload(downloadItem: DownloadItem) : ResultItem {
return ResultItem(
0,
downloadItem.url,
downloadItem.title,
downloadItem.author,
downloadItem.duration,
downloadItem.thumb,
downloadItem.website,
downloadItem.playlistTitle,
downloadItem.allFormats,
System.currentTimeMillis()
)
}
fun createResultItemFromHistory(downloadItem: HistoryItem) : ResultItem {
return ResultItem(
0,
downloadItem.url,
downloadItem.title,
downloadItem.author,
downloadItem.duration,
downloadItem.thumb,
downloadItem.website,
"",
arrayListOf(),
System.currentTimeMillis()
)
}
fun switchDownloadType(list: List<DownloadItem>, type: Type) : List<DownloadItem>{
list.forEach {
val format = getFormat(it.allFormats, type)

View file

@ -141,7 +141,7 @@ class ShareActivity : AppCompatActivity() {
private fun showDownloadSheet(it: ResultItem){
if (sharedPreferences.getBoolean("download_card", true)){
val bottomSheet = DownloadBottomSheetDialog(it, DownloadViewModel.Type.valueOf(sharedPreferences.getString("preferred_download_type", "video")!!))
val bottomSheet = DownloadBottomSheetDialog(it, DownloadViewModel.Type.valueOf(sharedPreferences.getString("preferred_download_type", "video")!!), null)
bottomSheet.show(supportFragmentManager, "downloadSingleSheet")
}else{
lifecycleScope.launch(Dispatchers.IO){

View file

@ -0,0 +1,12 @@
package com.deniscerri.ytdlnis.ui
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import com.deniscerri.ytdlnis.util.ThemeUtil
open class BaseActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
ThemeUtil.updateTheme(this)
super.onCreate(savedInstanceState)
}
}

View file

@ -495,7 +495,7 @@ class HomeFragment : Fragment(), HomeAdapter.OnItemClickListener, View.OnClickLi
}
private fun showSingleDownloadSheet(resultItem : ResultItem, type: DownloadViewModel.Type){
val bottomSheet = DownloadBottomSheetDialog(resultItem, type)
val bottomSheet = DownloadBottomSheetDialog(resultItem, type, null)
bottomSheet.show(parentFragmentManager, "downloadSingleSheet")
}

View file

@ -41,7 +41,7 @@ import java.text.SimpleDateFormat
import java.util.*
class DownloadBottomSheetDialog(private val resultItem: ResultItem, private val type: Type) : BottomSheetDialogFragment() {
class DownloadBottomSheetDialog(private val resultItem: ResultItem, private val type: Type, private val downloadItem: DownloadItem?) : BottomSheetDialogFragment() {
private lateinit var tabLayout: TabLayout
private lateinit var viewPager2: ViewPager2
private lateinit var fragmentAdapter : DownloadFragmentAdapter
@ -50,6 +50,10 @@ class DownloadBottomSheetDialog(private val resultItem: ResultItem, private val
private lateinit var commandTemplateDao : CommandTemplateDao
private lateinit var uiUtil: UiUtil
private lateinit var downloadAudioFragment: DownloadAudioFragment
private lateinit var downloadVideoFragment: DownloadVideoFragment
private lateinit var downloadCommandFragment: DownloadCommandFragment
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
downloadViewModel = ViewModelProvider(this)[DownloadViewModel::class.java]
@ -78,14 +82,16 @@ class DownloadBottomSheetDialog(private val resultItem: ResultItem, private val
isNestedScrollingEnabled = false
overScrollMode = View.OVER_SCROLL_NEVER
}
val fragments = mutableListOf<Fragment>(DownloadAudioFragment(resultItem, null), DownloadVideoFragment(resultItem, null))
downloadAudioFragment = DownloadAudioFragment(resultItem, downloadItem)
downloadVideoFragment = DownloadVideoFragment(resultItem, downloadItem)
val fragments = mutableListOf(downloadAudioFragment, downloadVideoFragment)
var commandTemplateNr = 0
lifecycleScope.launch{
withContext(Dispatchers.IO){
commandTemplateNr = commandTemplateDao.getTotalNumber()
if(commandTemplateNr > 0){
fragments.add(DownloadCommandFragment(resultItem, null))
downloadCommandFragment = DownloadCommandFragment(resultItem, downloadItem)
fragments.add(downloadCommandFragment)
}else{
(tabLayout.getChildAt(0) as? ViewGroup)?.getChildAt(2)?.isClickable = true
(tabLayout.getChildAt(0) as? ViewGroup)?.getChildAt(2)?.alpha = 0.3f
@ -212,11 +218,9 @@ class DownloadBottomSheetDialog(private val resultItem: ResultItem, private val
private fun cleanUp(){
kotlin.runCatching {
parentFragmentManager.beginTransaction().remove(parentFragmentManager.findFragmentByTag("downloadSingleSheet")!!).commit()
for (i in 0 until viewPager2.adapter?.itemCount!!){
if (parentFragmentManager.findFragmentByTag("f${i}") != null){
parentFragmentManager.beginTransaction().remove(parentFragmentManager.findFragmentByTag("f$i")!!).commit()
}
}
parentFragmentManager.beginTransaction().remove(downloadVideoFragment).commit()
parentFragmentManager.beginTransaction().remove(downloadVideoFragment).commit()
parentFragmentManager.beginTransaction().remove(downloadCommandFragment).commit()
if (activity is ShareActivity){
(activity as ShareActivity).finish()
}

View file

@ -145,7 +145,7 @@ class SelectPlaylistItemsBottomSheetDialog(private val items: List<ResultItem?>,
val checkedResultItems = items.filter { item -> checkedItems.contains(item!!.url) }
if (checkedResultItems.size == 1){
val resultItem = resultViewModel.getItemByURL(checkedResultItems[0]!!.url)
val bottomSheet = DownloadBottomSheetDialog(resultItem, type)
val bottomSheet = DownloadBottomSheetDialog(resultItem, type, null)
bottomSheet.show(parentFragmentManager, "downloadSingleSheet")
}else{
val downloadItems = mutableListOf<DownloadItem>()

View file

@ -69,7 +69,9 @@ class ActiveDownloadsFragment() : Fragment(), ActiveDownloadAdapter.OnItemClickL
val landScape = resources.configuration.orientation == Configuration.ORIENTATION_LANDSCAPE
val displayMetrics: DisplayMetrics = requireContext().resources.displayMetrics
val dpWidth: Float = displayMetrics.widthPixels / displayMetrics.density
if (dpWidth > 1200 && landScape){
if (dpWidth >= 1600 && landScape) {
activeRecyclerView.layoutManager = GridLayoutManager(context, 4)
}else if (dpWidth > 1200 && landScape){
activeRecyclerView.layoutManager = GridLayoutManager(context, 3)
}else if (landScape || dpWidth >= 650){
activeRecyclerView.layoutManager = GridLayoutManager(context, 2)

View file

@ -25,6 +25,7 @@ import com.deniscerri.ytdlnis.adapter.GenericDownloadAdapter
import com.deniscerri.ytdlnis.database.models.DownloadItem
import com.deniscerri.ytdlnis.database.viewmodel.DownloadViewModel
import com.deniscerri.ytdlnis.databinding.FragmentHomeBinding
import com.deniscerri.ytdlnis.ui.downloadcard.DownloadBottomSheetDialog
import com.deniscerri.ytdlnis.util.FileUtil
import com.deniscerri.ytdlnis.util.UiUtil
import com.google.android.material.bottomsheet.BottomSheetDialog
@ -80,7 +81,9 @@ class CancelledDownloadsFragment : Fragment(), GenericDownloadAdapter.OnItemClic
val landScape = resources.configuration.orientation == Configuration.ORIENTATION_LANDSCAPE
val displayMetrics: DisplayMetrics = requireContext().resources.displayMetrics
val dpWidth: Float = displayMetrics.widthPixels / displayMetrics.density
if (dpWidth > 1200 && landScape){
if (dpWidth >= 1600 && landScape) {
cancelledRecyclerView.layoutManager = GridLayoutManager(context, 4)
}else if (dpWidth > 1200 && landScape){
cancelledRecyclerView.layoutManager = GridLayoutManager(context, 3)
}else if (landScape || dpWidth >= 650){
cancelledRecyclerView.layoutManager = GridLayoutManager(context, 2)
@ -191,6 +194,13 @@ class CancelledDownloadsFragment : Fragment(), GenericDownloadAdapter.OnItemClic
bottomSheet.cancel()
}
redownload.setOnLongClickListener {
bottomSheet.cancel()
val sheet = DownloadBottomSheetDialog(downloadViewModel.createResultItemFromDownload(item), item.type, item)
sheet.show(parentFragmentManager, "downloadSingleSheet")
true
}
openFile.visibility = View.GONE
bottomSheet.show()

View file

@ -15,6 +15,7 @@ import androidx.work.WorkManager
import androidx.work.await
import com.deniscerri.ytdlnis.R
import com.deniscerri.ytdlnis.database.viewmodel.DownloadViewModel
import com.deniscerri.ytdlnis.ui.BaseActivity
import com.deniscerri.ytdlnis.util.NotificationUtil
import com.google.android.material.appbar.MaterialToolbar
import com.google.android.material.dialog.MaterialAlertDialogBuilder
@ -25,7 +26,7 @@ import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
class DownloadQueueActivity : AppCompatActivity(){
class DownloadQueueActivity : BaseActivity(){
private lateinit var downloadViewModel: DownloadViewModel
private lateinit var topAppBar: MaterialToolbar
private lateinit var workManager: WorkManager

View file

@ -28,6 +28,7 @@ import com.deniscerri.ytdlnis.adapter.GenericDownloadAdapter
import com.deniscerri.ytdlnis.database.models.DownloadItem
import com.deniscerri.ytdlnis.database.viewmodel.DownloadViewModel
import com.deniscerri.ytdlnis.databinding.FragmentHomeBinding
import com.deniscerri.ytdlnis.ui.downloadcard.DownloadBottomSheetDialog
import com.deniscerri.ytdlnis.ui.more.downloadLogs.DownloadLogActivity
import com.deniscerri.ytdlnis.util.FileUtil
import com.deniscerri.ytdlnis.util.UiUtil
@ -83,7 +84,9 @@ class ErroredDownloadsFragment : Fragment(), GenericDownloadAdapter.OnItemClickL
val landScape = resources.configuration.orientation == Configuration.ORIENTATION_LANDSCAPE
val displayMetrics: DisplayMetrics = requireContext().resources.displayMetrics
val dpWidth: Float = displayMetrics.widthPixels / displayMetrics.density
if (dpWidth > 1200 && landScape){
if (dpWidth >= 1600 && landScape) {
erroredRecyclerView.layoutManager = GridLayoutManager(context, 4)
}else if (dpWidth > 1200 && landScape){
erroredRecyclerView.layoutManager = GridLayoutManager(context, 3)
}else if (landScape || dpWidth >= 650){
erroredRecyclerView.layoutManager = GridLayoutManager(context, 2)
@ -191,6 +194,13 @@ class ErroredDownloadsFragment : Fragment(), GenericDownloadAdapter.OnItemClickL
bottomSheet.cancel()
}
redownload.setOnLongClickListener {
bottomSheet.cancel()
val sheet = DownloadBottomSheetDialog(downloadViewModel.createResultItemFromDownload(item), item.type, item)
sheet.show(parentFragmentManager, "downloadSingleSheet")
true
}
openFile.visibility = View.GONE
bottomSheet.show()

View file

@ -34,6 +34,7 @@ import com.deniscerri.ytdlnis.database.repository.HistoryRepository.HistorySort
import com.deniscerri.ytdlnis.database.viewmodel.DownloadViewModel
import com.deniscerri.ytdlnis.database.viewmodel.HistoryViewModel
import com.deniscerri.ytdlnis.databinding.FragmentHistoryBinding
import com.deniscerri.ytdlnis.ui.downloadcard.DownloadBottomSheetDialog
import com.deniscerri.ytdlnis.util.FileUtil
import com.deniscerri.ytdlnis.util.UiUtil
import com.google.android.material.appbar.AppBarLayout
@ -118,7 +119,9 @@ class HistoryFragment : Fragment(), HistoryAdapter.OnItemClickListener{
val landScape = resources.configuration.orientation == Configuration.ORIENTATION_LANDSCAPE
val displayMetrics: DisplayMetrics = requireContext().resources.displayMetrics
val dpWidth: Float = displayMetrics.widthPixels / displayMetrics.density
if (dpWidth > 1200 && landScape){
if (dpWidth >= 1600 && landScape) {
recyclerView?.layoutManager = GridLayoutManager(context, 4)
}else if (dpWidth > 1200 && landScape){
recyclerView?.layoutManager = GridLayoutManager(context, 3)
}else if (landScape || dpWidth >= 650){
recyclerView?.layoutManager = GridLayoutManager(context, 2)
@ -486,6 +489,13 @@ class HistoryFragment : Fragment(), HistoryAdapter.OnItemClickListener{
bottomSheet!!.cancel()
}
redownload.setOnLongClickListener {
bottomSheet!!.cancel()
val sheet = DownloadBottomSheetDialog(downloadViewModel.createResultItemFromHistory(item), item.type, null)
sheet.show(parentFragmentManager, "downloadSingleSheet")
true
}
if (!isPresent) openFile.visibility = GONE
else redownload.visibility = GONE

View file

@ -91,7 +91,9 @@ class QueuedDownloadsFragment : Fragment(), GenericDownloadAdapter.OnItemClickLi
val landScape = resources.configuration.orientation == Configuration.ORIENTATION_LANDSCAPE
val displayMetrics: DisplayMetrics = requireContext().resources.displayMetrics
val dpWidth: Float = displayMetrics.widthPixels / displayMetrics.density
if (dpWidth > 1200 && landScape){
if (dpWidth >= 1600 && landScape) {
queuedRecyclerView.layoutManager = GridLayoutManager(context, 4)
}else if (dpWidth > 1200 && landScape){
queuedRecyclerView.layoutManager = GridLayoutManager(context, 3)
}else if (landScape || dpWidth >= 650){
queuedRecyclerView.layoutManager = GridLayoutManager(context, 2)

View file

@ -14,6 +14,7 @@ import com.deniscerri.ytdlnis.R
import com.deniscerri.ytdlnis.adapter.TemplatesAdapter
import com.deniscerri.ytdlnis.database.models.CommandTemplate
import com.deniscerri.ytdlnis.database.viewmodel.CommandTemplateViewModel
import com.deniscerri.ytdlnis.ui.BaseActivity
import com.deniscerri.ytdlnis.util.FileUtil
import com.deniscerri.ytdlnis.util.UiUtil
import com.google.android.material.appbar.MaterialToolbar
@ -24,7 +25,7 @@ import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
class CommandTemplatesActivity : AppCompatActivity(), TemplatesAdapter.OnItemClickListener {
class CommandTemplatesActivity : BaseActivity(), TemplatesAdapter.OnItemClickListener {
private lateinit var recyclerView: RecyclerView
private lateinit var templatesAdapter: TemplatesAdapter
private lateinit var topAppBar: MaterialToolbar

View file

@ -18,6 +18,7 @@ import com.deniscerri.ytdlnis.R
import com.deniscerri.ytdlnis.adapter.CookieAdapter
import com.deniscerri.ytdlnis.database.models.CookieItem
import com.deniscerri.ytdlnis.database.viewmodel.CookieViewModel
import com.deniscerri.ytdlnis.ui.BaseActivity
import com.deniscerri.ytdlnis.util.FileUtil
import com.deniscerri.ytdlnis.util.UiUtil
import com.google.android.material.appbar.MaterialToolbar
@ -28,7 +29,7 @@ import kotlinx.coroutines.launch
import java.io.File
class CookiesActivity : AppCompatActivity(), CookieAdapter.OnItemClickListener {
class CookiesActivity : BaseActivity(), CookieAdapter.OnItemClickListener {
private lateinit var recyclerView: RecyclerView
private lateinit var listAdapter: CookieAdapter
private lateinit var topAppBar: MaterialToolbar

View file

@ -28,6 +28,7 @@ import androidx.lifecycle.lifecycleScope
import androidx.work.*
import com.deniscerri.ytdlnis.R
import com.deniscerri.ytdlnis.database.viewmodel.CommandTemplateViewModel
import com.deniscerri.ytdlnis.ui.BaseActivity
import com.deniscerri.ytdlnis.util.FileUtil
import com.deniscerri.ytdlnis.util.NotificationUtil
import com.deniscerri.ytdlnis.util.UiUtil
@ -46,7 +47,7 @@ import java.io.File
import kotlin.properties.Delegates
class TerminalActivity : AppCompatActivity() {
class TerminalActivity : BaseActivity() {
private var topAppBar: MaterialToolbar? = null
private lateinit var notificationUtil: NotificationUtil
private var output: TextView? = null

View file

@ -12,6 +12,7 @@ import androidx.lifecycle.lifecycleScope
import com.deniscerri.ytdlnis.R
import com.deniscerri.ytdlnis.database.models.CookieItem
import com.deniscerri.ytdlnis.database.viewmodel.CookieViewModel
import com.deniscerri.ytdlnis.ui.BaseActivity
import com.google.android.material.appbar.AppBarLayout
import com.google.android.material.appbar.MaterialToolbar
import com.google.android.material.button.MaterialButton
@ -20,7 +21,7 @@ import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
class WebViewActivity : AppCompatActivity() {
class WebViewActivity : BaseActivity() {
private lateinit var cookiesViewModel: CookieViewModel
private lateinit var webView: WebView
private lateinit var toolbar: MaterialToolbar

View file

@ -10,12 +10,13 @@ import android.widget.ScrollView
import android.widget.TextView
import androidx.appcompat.app.AppCompatActivity
import com.deniscerri.ytdlnis.R
import com.deniscerri.ytdlnis.ui.BaseActivity
import com.google.android.material.appbar.MaterialToolbar
import com.google.android.material.floatingactionbutton.ExtendedFloatingActionButton
import java.io.File
class DownloadLogActivity : AppCompatActivity() {
class DownloadLogActivity : BaseActivity() {
private lateinit var content: TextView
private lateinit var contentScrollView : ScrollView
private lateinit var topAppBar: MaterialToolbar

View file

@ -15,12 +15,13 @@ import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import com.deniscerri.ytdlnis.R
import com.deniscerri.ytdlnis.adapter.DownloadLogsAdapter
import com.deniscerri.ytdlnis.ui.BaseActivity
import com.google.android.material.appbar.MaterialToolbar
import com.google.android.material.dialog.MaterialAlertDialogBuilder
import java.io.File
class DownloadLogListActivity : AppCompatActivity(), DownloadLogsAdapter.OnItemClickListener {
class DownloadLogListActivity : BaseActivity(), DownloadLogsAdapter.OnItemClickListener {
private lateinit var recyclerView: RecyclerView
private lateinit var downloadLogAdapter: DownloadLogsAdapter
private lateinit var noResults: RelativeLayout

View file

@ -6,10 +6,11 @@ import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import androidx.fragment.app.FragmentManager
import com.deniscerri.ytdlnis.R
import com.deniscerri.ytdlnis.ui.BaseActivity
import com.google.android.material.appbar.MaterialToolbar
class SettingsActivity : AppCompatActivity() {
class SettingsActivity : BaseActivity() {
private var fm: FragmentManager? = null
private var topAppBar: MaterialToolbar? = null
private lateinit var sharedPreferences: SharedPreferences

View file

@ -10,9 +10,9 @@ import android.os.Bundle
import android.os.Environment
import android.os.PowerManager
import android.provider.Settings
import android.util.Log
import android.widget.Toast
import androidx.activity.result.contract.ActivityResultContracts
import androidx.appcompat.app.AppCompatActivity
import androidx.appcompat.app.AppCompatDelegate
import androidx.core.os.LocaleListCompat
import androidx.lifecycle.lifecycleScope
@ -23,6 +23,7 @@ import com.deniscerri.ytdlnis.BuildConfig
import com.deniscerri.ytdlnis.MainActivity
import com.deniscerri.ytdlnis.R
import com.deniscerri.ytdlnis.util.FileUtil
import com.deniscerri.ytdlnis.util.ThemeUtil
import com.deniscerri.ytdlnis.util.UpdateUtil
import com.google.android.material.dialog.MaterialAlertDialogBuilder
import com.yausername.youtubedl_android.YoutubeDL
@ -35,6 +36,8 @@ import java.util.*
class SettingsFragment : PreferenceFragmentCompat() {
private var language: ListPreference? = null
private var theme: ListPreference? = null
private var accent: ListPreference? = null
private var highContrast: SwitchPreferenceCompat? = null
private var ignoreBatteryOptimization: Preference? = null
private var musicPath: Preference? = null
private var videoPath: Preference? = null
@ -105,6 +108,8 @@ class SettingsFragment : PreferenceFragmentCompat() {
val editor = preferences.edit()
language = findPreference("app_language")
theme = findPreference("ytdlnis_theme")
accent = findPreference("theme_accent")
highContrast = findPreference("high_contrast")
ignoreBatteryOptimization = findPreference("ignore_battery")
musicPath = findPreference("music_path")
videoPath = findPreference("video_path")
@ -164,7 +169,9 @@ class SettingsFragment : PreferenceFragmentCompat() {
ignoreBatteryOptimization!!.isVisible = false
}
editor.putString("theme", theme!!.value)
editor.putString("ytdlnis_theme", theme!!.value)
editor.putString("theme_accent", accent!!.value)
editor.putBoolean("high_contrast", highContrast!!.isChecked)
if (preferences.getString("music_path", "")!!.isEmpty()) {
editor.putString("music_path", getString(R.string.music_path))
@ -230,32 +237,57 @@ class SettingsFragment : PreferenceFragmentCompat() {
true
}
theme!!.summary = when(theme!!.value){
"Default" -> getString(R.string.defaultValue)
"Dark" -> getString(R.string.dark)
else -> getString(R.string.light)
}
theme!!.summary = theme!!.entry
theme!!.onPreferenceChangeListener =
Preference.OnPreferenceChangeListener { _: Preference?, newValue: Any ->
when(newValue){
"Default" -> {
theme!!.summary = getString(R.string.defaultValue)
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM)
"System" -> {
theme!!.summary = getString(R.string.system)
}
"Dark" -> {
theme!!.summary = getString(R.string.dark)
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES)
}
else -> {
theme!!.summary = getString(R.string.light)
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO)
}
}
editor.putString("ytdlnis_theme", newValue.toString())
editor.apply()
editor.commit()
ThemeUtil.updateTheme(requireActivity() as AppCompatActivity)
val intent = Intent(requireContext(), MainActivity::class.java)
this.startActivity(intent)
requireActivity().finishAffinity()
true
}
accent!!.summary = accent!!.entry
accent!!.onPreferenceChangeListener =
Preference.OnPreferenceChangeListener { _: Preference?, newValue: Any ->
editor.putString("theme_accent", newValue.toString())
editor.apply().apply {
accent!!.summary = accent!!.entry
}
ThemeUtil.updateTheme(requireActivity() as AppCompatActivity)
val intent = Intent(requireContext(), MainActivity::class.java)
this.startActivity(intent)
requireActivity().finishAffinity()
true
}
highContrast!!.onPreferenceChangeListener =
Preference.OnPreferenceChangeListener { _: Preference?, newValue: Any ->
val enable = newValue as Boolean
editor.putBoolean("high_contrast", enable)
editor.apply()
ThemeUtil.updateTheme(requireActivity() as AppCompatActivity)
val intent = Intent(requireContext(), MainActivity::class.java)
this.startActivity(intent)
requireActivity().finishAffinity()
true
}
ignoreBatteryOptimization!!.onPreferenceClickListener =
Preference.OnPreferenceClickListener {
val intent = Intent()

View file

@ -0,0 +1,46 @@
package com.deniscerri.ytdlnis.util
import android.app.Application
import android.util.Log
import androidx.appcompat.app.AppCompatActivity
import androidx.appcompat.app.AppCompatDelegate
import com.deniscerri.ytdlnis.R
import com.google.android.material.color.DynamicColors
object ThemeUtil {
fun updateTheme(activity: AppCompatActivity) {
val sharedPreferences = activity.getSharedPreferences("root_preferences", Application.MODE_PRIVATE)
val themeMode = sharedPreferences.getString("ytdlnis_theme", "Default")!!
//update accent
val themeAccent = sharedPreferences.getString("theme_accent","blue")
when (themeAccent) {
"Default" -> activity.setTheme(R.style.BaseTheme)
"blue" -> activity.setTheme(R.style.Theme_Blue)
"red" -> activity.setTheme(R.style.Theme_Red)
"green" -> activity.setTheme(R.style.Theme_Green)
"purple" -> activity.setTheme(R.style.Theme_Purple)
"yellow" -> activity.setTheme(R.style.Theme_Yellow)
"monochrome" -> activity.setTheme(R.style.Theme_Monochrome)
}
//dynamic colors
if (themeAccent == "Default") DynamicColors.applyToActivityIfAvailable(activity)
//high contrast theme
val highContrast = sharedPreferences.getBoolean(
"high_contrast",
false
)
if (highContrast) activity.theme.applyStyle(R.style.Pure, true)
when (themeMode) {
"System" -> AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM)
"Light" -> AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO)
"Dark" -> AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES)
}
}
}

View file

@ -0,0 +1,5 @@
<vector android:height="24dp"
android:viewportHeight="24" android:viewportWidth="24"
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="?android:colorAccent" android:pathData="M12,3c-4.97,0 -9,4.03 -9,9s4.03,9 9,9c0.83,0 1.5,-0.67 1.5,-1.5 0,-0.39 -0.15,-0.74 -0.39,-1.01 -0.23,-0.26 -0.38,-0.61 -0.38,-0.99 0,-0.83 0.67,-1.5 1.5,-1.5L16,16c2.76,0 5,-2.24 5,-5 0,-4.42 -4.03,-8 -9,-8zM6.5,12c-0.83,0 -1.5,-0.67 -1.5,-1.5S5.67,9 6.5,9 8,9.67 8,10.5 7.33,12 6.5,12zM9.5,8C8.67,8 8,7.33 8,6.5S8.67,5 9.5,5s1.5,0.67 1.5,1.5S10.33,8 9.5,8zM14.5,8c-0.83,0 -1.5,-0.67 -1.5,-1.5S13.67,5 14.5,5s1.5,0.67 1.5,1.5S15.33,8 14.5,8zM17.5,12c-0.83,0 -1.5,-0.67 -1.5,-1.5S16.67,9 17.5,9s1.5,0.67 1.5,1.5 -0.67,1.5 -1.5,1.5z"/>
</vector>

View file

@ -0,0 +1,5 @@
<vector android:height="24dp"
android:viewportHeight="24" android:viewportWidth="24"
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="?android:colorAccent" android:pathData="M12,4.81L12,19c-3.31,0 -6,-2.63 -6,-5.87c0,-1.56 0.62,-3.03 1.75,-4.14L12,4.81M6.35,7.56L6.35,7.56C4.9,8.99 4,10.96 4,13.13C4,17.48 7.58,21 12,21c4.42,0 8,-3.52 8,-7.87c0,-2.17 -0.9,-4.14 -2.35,-5.57l0,0L12,2L6.35,7.56z"/>
</vector>

View file

@ -117,7 +117,6 @@
android:id="@+id/home_toolbar"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:theme="@style/Toolbar"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"

View file

@ -93,6 +93,7 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="10dp"
android:textAlignment="textStart"
android:singleLine="true"
android:text="@string/app_name"
android:textSize="15sp"

View file

@ -109,7 +109,7 @@
<Button
android:id="@+id/bottom_sheet_link"
style="@style/Widget.Material3.Button.TextButton.Icon"
android:layout_width="wrap_content"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="10dp"
android:textAlignment="textStart"

View file

@ -21,7 +21,6 @@
app:layout_scrollFlags="scroll"
app:title="@string/downloads"
app:menu="@menu/history_menu"
android:theme="@style/Toolbar"
/>
<RelativeLayout

View file

@ -113,7 +113,6 @@
android:layout_width="match_parent"
app:title="@string/app_name"
app:layout_scrollFlags="scroll"
android:theme="@style/Toolbar"
android:layout_height="wrap_content" />
<com.google.android.material.search.SearchBar

View file

@ -15,7 +15,6 @@
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:theme="@style/Toolbar"
app:layout_scrollFlags="scroll"
app:title="@string/app_name" />

View file

@ -20,7 +20,6 @@
android:layout_height="?attr/actionBarSize"
app:layout_scrollFlags="scroll"
app:navigationIcon="?attr/homeAsUpIndicator"
android:theme="@style/Toolbar"
>
<Button

View file

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" android:theme="@style/AppDefaultTheme">
<menu xmlns:android="http://schemas.android.com/apk/res/android" android:theme="@style/BaseTheme">
<item android:title="@string/home"
android:icon="@drawable/ic_home"

View file

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" android:theme="@style/AppDefaultTheme">
<menu xmlns:android="http://schemas.android.com/apk/res/android" android:theme="@style/BaseTheme">
<item android:title="@string/home"
android:icon="@drawable/ic_home"

View file

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:theme="@style/AppDefaultTheme">
android:theme="@style/BaseTheme">
<item android:title="@string/command_templates"
android:icon="@drawable/ic_terminal"

View file

@ -2,5 +2,5 @@
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@drawable/ic_launcher_background"/>
<foreground android:drawable="@drawable/ic_launcher_foreground"/>
<monochrome android:drawable="@drawable/ic_launcher_foreground" />
<monochrome android:drawable="@drawable/ic_launcher_foreground"/>
</adaptive-icon>

View file

@ -0,0 +1,208 @@
<resources xmlns:tools="http://schemas.android.com/tools">
<style name="BaseTheme" parent="Theme.Material3.DayNight.NoActionBar">
<item name="android:windowLightStatusBar">?attr/isLightTheme</item>
<item name="android:statusBarColor">@android:color/transparent</item>
<item name="android:color">@android:color/transparent</item>
<item name="windowActionModeOverlay">true</item>
<item name="alertDialogTheme">@style/ThemeOverlay.Material3.MaterialAlertDialog</item>
<item name="dialogCornerRadius">28dp</item>
<item name="switchPreferenceCompatStyle">@style/Preference.SwitchPreferenceCompat.Material3</item>
<item name="snackbarStyle">@style/snackBarStyle</item>
</style>
<style name="Theme.Red" parent="BaseTheme">
<item name="colorPrimary">@color/red_md_theme_dark_primary</item>
<item name="colorOnPrimary">@color/red_md_theme_dark_onPrimary</item>
<item name="colorPrimaryContainer">@color/red_md_theme_dark_primaryContainer</item>
<item name="colorOnPrimaryContainer">@color/red_md_theme_dark_onPrimaryContainer</item>
<item name="colorSecondary">@color/red_md_theme_dark_secondary</item>
<item name="colorOnSecondary">@color/red_md_theme_dark_onSecondary</item>
<item name="colorSecondaryContainer">@color/red_md_theme_dark_secondaryContainer</item>
<item name="colorOnSecondaryContainer">@color/red_md_theme_dark_onSecondaryContainer</item>
<item name="colorTertiary">@color/red_md_theme_dark_tertiary</item>
<item name="colorOnTertiary">@color/red_md_theme_dark_onTertiary</item>
<item name="colorTertiaryContainer">@color/red_md_theme_dark_tertiaryContainer</item>
<item name="colorOnTertiaryContainer">@color/red_md_theme_dark_onTertiaryContainer</item>
<item name="colorError">@color/red_md_theme_dark_error</item>
<item name="colorErrorContainer">@color/red_md_theme_dark_errorContainer</item>
<item name="colorOnError">@color/red_md_theme_dark_onError</item>
<item name="colorOnErrorContainer">@color/red_md_theme_dark_onErrorContainer</item>
<item name="android:colorBackground">@color/red_md_theme_dark_background</item>
<item name="colorOnBackground">@color/red_md_theme_dark_onBackground</item>
<item name="colorSurface">@color/red_md_theme_dark_surface</item>
<item name="colorOnSurface">@color/red_md_theme_dark_onSurface</item>
<item name="colorSurfaceVariant">@color/red_md_theme_dark_surfaceVariant</item>
<item name="colorOnSurfaceVariant">@color/red_md_theme_dark_onSurfaceVariant</item>
<item name="colorOutline">@color/red_md_theme_dark_outline</item>
<item name="colorOnSurfaceInverse">@color/red_md_theme_dark_inverseOnSurface</item>
<item name="colorSurfaceInverse">@color/red_md_theme_dark_inverseSurface</item>
<item name="colorPrimaryInverse">@color/red_md_theme_dark_inversePrimary</item>
</style>
<style name="Theme.Blue" parent="BaseTheme">
<item name="colorPrimary">@color/blue_md_theme_dark_primary</item>
<item name="colorOnPrimary">@color/blue_md_theme_dark_onPrimary</item>
<item name="colorPrimaryContainer">@color/blue_md_theme_dark_primaryContainer</item>
<item name="colorOnPrimaryContainer">@color/blue_md_theme_dark_onPrimaryContainer</item>
<item name="colorSecondary">@color/blue_md_theme_dark_secondary</item>
<item name="colorOnSecondary">@color/blue_md_theme_dark_onSecondary</item>
<item name="colorSecondaryContainer">@color/blue_md_theme_dark_secondaryContainer</item>
<item name="colorOnSecondaryContainer">@color/blue_md_theme_dark_onSecondaryContainer</item>
<item name="colorTertiary">@color/blue_md_theme_dark_tertiary</item>
<item name="colorOnTertiary">@color/blue_md_theme_dark_onTertiary</item>
<item name="colorTertiaryContainer">@color/blue_md_theme_dark_tertiaryContainer</item>
<item name="colorOnTertiaryContainer">@color/blue_md_theme_dark_onTertiaryContainer</item>
<item name="colorError">@color/blue_md_theme_dark_error</item>
<item name="colorErrorContainer">@color/blue_md_theme_dark_errorContainer</item>
<item name="colorOnError">@color/blue_md_theme_dark_onError</item>
<item name="colorOnErrorContainer">@color/blue_md_theme_dark_onErrorContainer</item>
<item name="android:colorBackground">@color/blue_md_theme_dark_background</item>
<item name="colorOnBackground">@color/blue_md_theme_dark_onBackground</item>
<item name="colorSurface">@color/blue_md_theme_dark_surface</item>
<item name="colorOnSurface">@color/blue_md_theme_dark_onSurface</item>
<item name="colorSurfaceVariant">@color/blue_md_theme_dark_surfaceVariant</item>
<item name="colorOnSurfaceVariant">@color/blue_md_theme_dark_onSurfaceVariant</item>
<item name="colorOutline">@color/blue_md_theme_dark_outline</item>
<item name="colorOnSurfaceInverse">@color/blue_md_theme_dark_inverseOnSurface</item>
<item name="colorSurfaceInverse">@color/blue_md_theme_dark_inverseSurface</item>
<item name="colorPrimaryInverse">@color/blue_md_theme_dark_inversePrimary</item>
</style>
<style name="Theme.Yellow" parent="BaseTheme">
<item name="colorPrimary">@color/yellow_md_theme_dark_primary</item>
<item name="colorOnPrimary">@color/yellow_md_theme_dark_onPrimary</item>
<item name="colorPrimaryContainer">@color/yellow_md_theme_dark_primaryContainer</item>
<item name="colorOnPrimaryContainer">@color/yellow_md_theme_dark_onPrimaryContainer</item>
<item name="colorSecondary">@color/yellow_md_theme_dark_secondary</item>
<item name="colorOnSecondary">@color/yellow_md_theme_dark_onSecondary</item>
<item name="colorSecondaryContainer">@color/yellow_md_theme_dark_secondaryContainer</item>
<item name="colorOnSecondaryContainer">@color/yellow_md_theme_dark_onSecondaryContainer
</item>
<item name="colorTertiary">@color/yellow_md_theme_dark_tertiary</item>
<item name="colorOnTertiary">@color/yellow_md_theme_dark_onTertiary</item>
<item name="colorTertiaryContainer">@color/yellow_md_theme_dark_tertiaryContainer</item>
<item name="colorOnTertiaryContainer">@color/yellow_md_theme_dark_onTertiaryContainer</item>
<item name="colorError">@color/yellow_md_theme_dark_error</item>
<item name="colorErrorContainer">@color/yellow_md_theme_dark_errorContainer</item>
<item name="colorOnError">@color/yellow_md_theme_dark_onError</item>
<item name="colorOnErrorContainer">@color/yellow_md_theme_dark_onErrorContainer</item>
<item name="android:colorBackground">@color/yellow_md_theme_dark_background</item>
<item name="colorOnBackground">@color/yellow_md_theme_dark_onBackground</item>
<item name="colorOnSurface">@color/yellow_md_theme_dark_onSurface</item>
<item name="colorOnSurfaceVariant">@color/yellow_md_theme_dark_onSurfaceVariant</item>
<item name="colorOutline">@color/yellow_md_theme_dark_outline</item>
<item name="colorOnSurfaceInverse">@color/yellow_md_theme_dark_inverseOnSurface</item>
<item name="colorPrimaryInverse">@color/yellow_md_theme_dark_inversePrimary</item>
</style>
<style name="Theme.Green" parent="BaseTheme">
<item name="colorPrimary">@color/green_md_theme_dark_primary</item>
<item name="colorOnPrimary">@color/green_md_theme_dark_onPrimary</item>
<item name="colorPrimaryContainer">@color/green_md_theme_dark_primaryContainer</item>
<item name="colorOnPrimaryContainer">@color/green_md_theme_dark_onPrimaryContainer</item>
<item name="colorSecondary">@color/green_md_theme_dark_secondary</item>
<item name="colorOnSecondary">@color/green_md_theme_dark_onSecondary</item>
<item name="colorSecondaryContainer">@color/green_md_theme_dark_secondaryContainer</item>
<item name="colorOnSecondaryContainer">@color/green_md_theme_dark_onSecondaryContainer
</item>
<item name="colorTertiary">@color/green_md_theme_dark_tertiary</item>
<item name="colorOnTertiary">@color/green_md_theme_dark_onTertiary</item>
<item name="colorTertiaryContainer">@color/green_md_theme_dark_tertiaryContainer</item>
<item name="colorOnTertiaryContainer">@color/green_md_theme_dark_onTertiaryContainer</item>
<item name="colorError">@color/green_md_theme_dark_error</item>
<item name="colorErrorContainer">@color/green_md_theme_dark_errorContainer</item>
<item name="colorOnError">@color/green_md_theme_dark_onError</item>
<item name="colorOnErrorContainer">@color/green_md_theme_dark_onErrorContainer</item>
<item name="android:colorBackground">@color/green_md_theme_dark_background</item>
<item name="colorOnBackground">@color/green_md_theme_dark_onBackground</item>
<item name="colorSurface">@color/green_md_theme_dark_surface</item>
<item name="colorOnSurface">@color/green_md_theme_dark_onSurface</item>
<item name="colorSurfaceVariant">@color/green_md_theme_dark_surfaceVariant</item>
<item name="colorOnSurfaceVariant">@color/green_md_theme_dark_onSurfaceVariant</item>
<item name="colorOutline">@color/green_md_theme_dark_outline</item>
<item name="colorOnSurfaceInverse">@color/green_md_theme_dark_inverseOnSurface</item>
<item name="colorSurfaceInverse">@color/green_md_theme_dark_inverseSurface</item>
<item name="colorPrimaryInverse">@color/green_md_theme_dark_inversePrimary</item>
</style>
<style name="Theme.Purple" parent="BaseTheme">
<item name="colorPrimary">@color/purple_md_theme_dark_primary</item>
<item name="colorOnPrimary">@color/purple_md_theme_dark_onPrimary</item>
<item name="colorPrimaryContainer">@color/purple_md_theme_dark_primaryContainer</item>
<item name="colorOnPrimaryContainer">@color/purple_md_theme_dark_onPrimaryContainer</item>
<item name="colorSecondary">@color/purple_md_theme_dark_secondary</item>
<item name="colorOnSecondary">@color/purple_md_theme_dark_onSecondary</item>
<item name="colorSecondaryContainer">@color/purple_md_theme_dark_secondaryContainer</item>
<item name="colorOnSecondaryContainer">@color/purple_md_theme_dark_onSecondaryContainer
</item>
<item name="colorTertiary">@color/purple_md_theme_dark_tertiary</item>
<item name="colorOnTertiary">@color/purple_md_theme_dark_onTertiary</item>
<item name="colorTertiaryContainer">@color/purple_md_theme_dark_tertiaryContainer</item>
<item name="colorOnTertiaryContainer">@color/purple_md_theme_dark_onTertiaryContainer</item>
<item name="colorError">@color/purple_md_theme_dark_error</item>
<item name="colorErrorContainer">@color/purple_md_theme_dark_errorContainer</item>
<item name="colorOnError">@color/purple_md_theme_dark_onError</item>
<item name="colorOnErrorContainer">@color/purple_md_theme_dark_onErrorContainer</item>
<item name="android:colorBackground">@color/purple_md_theme_dark_background</item>
<item name="colorOnBackground">@color/purple_md_theme_dark_onBackground</item>
<item name="colorSurface">@color/purple_md_theme_dark_surface</item>
<item name="colorOnSurface">@color/purple_md_theme_dark_onSurface</item>
<item name="colorSurfaceVariant">@color/purple_md_theme_dark_surfaceVariant</item>
<item name="colorOnSurfaceVariant">@color/purple_md_theme_dark_onSurfaceVariant</item>
<item name="colorOutline">@color/purple_md_theme_dark_outline</item>
<item name="colorOnSurfaceInverse">@color/purple_md_theme_dark_inverseOnSurface</item>
<item name="colorSurfaceInverse">@color/purple_md_theme_dark_inverseSurface</item>
<item name="colorPrimaryInverse">@color/purple_md_theme_dark_inversePrimary</item>
</style>
<style name="Theme.Monochrome" parent="BaseTheme">
<item name="colorPrimary">@color/monochrome_theme_dark_primary</item>
<item name="colorOnPrimary">@color/monochrome_theme_dark_onPrimary</item>
<item name="colorPrimaryContainer">@color/monochrome_theme_dark_primaryContainer</item>
<item name="colorOnPrimaryContainer">@color/monochrome_theme_dark_onPrimaryContainer</item>
<item name="colorSecondary">@color/monochrome_theme_dark_secondary</item>
<item name="colorOnSecondary">@color/monochrome_theme_dark_onSecondary</item>
<item name="colorSecondaryContainer">@color/monochrome_theme_dark_secondaryContainer</item>
<item name="colorOnSecondaryContainer">@color/monochrome_theme_dark_onSecondaryContainer
</item>
<item name="colorTertiary">@color/monochrome_theme_dark_tertiary</item>
<item name="colorOnTertiary">@color/monochrome_theme_dark_onTertiary</item>
<item name="colorTertiaryContainer">@color/monochrome_theme_dark_tertiaryContainer</item>
<item name="colorOnTertiaryContainer">@color/monochrome_theme_dark_onTertiaryContainer
</item>
<item name="colorError">@color/monochrome_theme_dark_error</item>
<item name="colorErrorContainer">@color/monochrome_theme_dark_errorContainer</item>
<item name="colorOnError">@color/monochrome_theme_dark_onError</item>
<item name="colorOnErrorContainer">@color/monochrome_theme_dark_onErrorContainer</item>
<item name="android:colorBackground">@color/monochrome_theme_dark_background</item>
<item name="colorOnBackground">@color/monochrome_theme_dark_onBackground</item>
<item name="colorSurface">@color/monochrome_theme_dark_surface</item>
<item name="colorOnSurface">@color/monochrome_theme_dark_onSurface</item>
<item name="colorSurfaceVariant">@color/monochrome_theme_dark_surfaceVariant</item>
<item name="colorOnSurfaceVariant">@color/monochrome_theme_dark_onSurfaceVariant</item>
<item name="colorOutline">@color/monochrome_theme_dark_outline</item>
<item name="colorOnSurfaceInverse">@color/monochrome_theme_dark_inverseOnSurface</item>
<item name="colorSurfaceInverse">@color/monochrome_theme_dark_inverseSurface</item>
<item name="colorPrimaryInverse">@color/monochrome_theme_dark_inversePrimary</item>
</style>
<style name="Pure">
<item name="android:colorBackground">@android:color/black</item>
<item name="colorSurface">@android:color/black</item>
</style>
</resources>

View file

@ -165,14 +165,42 @@
</array>
<array name="themes">
<item>@string/defaultValue</item>
<item>@string/system</item>
<item>@string/dark</item>
<item>@string/light</item>
</array>
<array name="themes_values">
<item>Default</item>
<item>System</item>
<item>Dark</item>
<item>Light</item>
</array>
<array name="accents">
<item>@string/material_you</item>
<item>@string/blue</item>
<item>@string/red</item>
<item>@string/green</item>
<item>@string/purple</item>
<item>@string/yellow</item>
<item>@string/monochrome</item>
</array>
<array name="accents_values">
<item>Default</item>
<item>blue</item>
<item>red</item>
<item>green</item>
<item>purple</item>
<item>yellow</item>
<item>monochrome</item>
</array>
<string name="material_you">Material You</string>
<string name="blue">Blue</string>
<string name="red">Red</string>
<string name="green">Green</string>
<string name="purple">Purple</string>
<string name="yellow">Yellow</string>
<string name="monochrome">Monochrome</string>
</resources>

View file

@ -6,4 +6,449 @@
<color name="light_grey">#A6A6A6</color>
<color name="icon_bg">@android:color/background_dark</color>
<color name="icon_fg">#d43c3c</color>
<color name="duration_background_color">#AA000000</color>
<color name="duration_text_color">#EEFFFFFF</color>
<color name="shortcut_color">#0061A6</color>
<color name="blue_md_theme_light_primary">#0058CB</color>
<color name="blue_md_theme_light_onPrimary">#FFFFFF</color>
<color name="blue_md_theme_light_primaryContainer">#D9E2FF</color>
<color name="blue_md_theme_light_onPrimaryContainer">#001945</color>
<color name="blue_md_theme_light_secondary">#575E71</color>
<color name="blue_md_theme_light_onSecondary">#FFFFFF</color>
<color name="blue_md_theme_light_secondaryContainer">#DCE2F9</color>
<color name="blue_md_theme_light_onSecondaryContainer">#141B2C</color>
<color name="blue_md_theme_light_tertiary">#725572</color>
<color name="blue_md_theme_light_onTertiary">#FFFFFF</color>
<color name="blue_md_theme_light_tertiaryContainer">#FDD7FA</color>
<color name="blue_md_theme_light_onTertiaryContainer">#2A132C</color>
<color name="blue_md_theme_light_error">#BA1A1A</color>
<color name="blue_md_theme_light_errorContainer">#FFDAD6</color>
<color name="blue_md_theme_light_onError">#FFFFFF</color>
<color name="blue_md_theme_light_onErrorContainer">#410002</color>
<color name="blue_md_theme_light_background">#FEFBFF</color>
<color name="blue_md_theme_light_onBackground">#1B1B1F</color>
<color name="blue_md_theme_light_surface">#FEFBFF</color>
<color name="blue_md_theme_light_onSurface">#1B1B1F</color>
<color name="blue_md_theme_light_surfaceVariant">#E1E2EC</color>
<color name="blue_md_theme_light_onSurfaceVariant">#44464F</color>
<color name="blue_md_theme_light_outline">#757780</color>
<color name="blue_md_theme_light_inverseOnSurface">#F2F0F4</color>
<color name="blue_md_theme_light_inverseSurface">#303034</color>
<color name="blue_md_theme_light_inversePrimary">#B0C6FF</color>
<color name="blue_md_theme_light_shadow">#000000</color>
<color name="blue_md_theme_light_surfaceTint">#0058CB</color>
<color name="blue_md_theme_light_surfaceTintColor">#0058CB</color>
<color name="blue_md_theme_dark_primary">#B0C6FF</color>
<color name="blue_md_theme_dark_onPrimary">#002D6F</color>
<color name="blue_md_theme_dark_primaryContainer">#00429B</color>
<color name="blue_md_theme_dark_onPrimaryContainer">#D9E2FF</color>
<color name="blue_md_theme_dark_secondary">#C0C6DC</color>
<color name="blue_md_theme_dark_onSecondary">#293042</color>
<color name="blue_md_theme_dark_secondaryContainer">#404659</color>
<color name="blue_md_theme_dark_onSecondaryContainer">#DCE2F9</color>
<color name="blue_md_theme_dark_tertiary">#E0BBDD</color>
<color name="blue_md_theme_dark_onTertiary">#412742</color>
<color name="blue_md_theme_dark_tertiaryContainer">#593D5A</color>
<color name="blue_md_theme_dark_onTertiaryContainer">#FDD7FA</color>
<color name="blue_md_theme_dark_error">#FFB4AB</color>
<color name="blue_md_theme_dark_errorContainer">#93000A</color>
<color name="blue_md_theme_dark_onError">#690005</color>
<color name="blue_md_theme_dark_onErrorContainer">#FFDAD6</color>
<color name="blue_md_theme_dark_background">#1B1B1F</color>
<color name="blue_md_theme_dark_onBackground">#E3E2E6</color>
<color name="blue_md_theme_dark_surface">#1B1B1F</color>
<color name="blue_md_theme_dark_onSurface">#E3E2E6</color>
<color name="blue_md_theme_dark_surfaceVariant">#44464F</color>
<color name="blue_md_theme_dark_onSurfaceVariant">#C5C6D0</color>
<color name="blue_md_theme_dark_outline">#8F9099</color>
<color name="blue_md_theme_dark_inverseOnSurface">#1B1B1F</color>
<color name="blue_md_theme_dark_inverseSurface">#E3E2E6</color>
<color name="blue_md_theme_dark_inversePrimary">#0058CB</color>
<color name="blue_md_theme_dark_shadow">#000000</color>
<color name="blue_md_theme_dark_surfaceTint">#B0C6FF</color>
<color name="blue_md_theme_dark_surfaceTintColor">#B0C6FF</color>
<color name="red_md_theme_light_primary">#9F4034</color>
<color name="red_md_theme_light_onPrimary">#FFFFFF</color>
<color name="red_md_theme_light_primaryContainer">#FFDAD5</color>
<color name="red_md_theme_light_onPrimaryContainer">#410000</color>
<color name="red_md_theme_light_secondary">#775652</color>
<color name="red_md_theme_light_onSecondary">#FFFFFF</color>
<color name="red_md_theme_light_secondaryContainer">#FFDAD5</color>
<color name="red_md_theme_light_onSecondaryContainer">#2C1512</color>
<color name="red_md_theme_light_tertiary">#705C2E</color>
<color name="red_md_theme_light_onTertiary">#FFFFFF</color>
<color name="red_md_theme_light_tertiaryContainer">#FCDFA6</color>
<color name="red_md_theme_light_onTertiaryContainer">#251A00</color>
<color name="red_md_theme_light_error">#BA1A1A</color>
<color name="red_md_theme_light_errorContainer">#FFDAD6</color>
<color name="red_md_theme_light_onError">#FFFFFF</color>
<color name="red_md_theme_light_onErrorContainer">#410002</color>
<color name="red_md_theme_light_background">#FFFBFF</color>
<color name="red_md_theme_light_onBackground">#201A19</color>
<color name="red_md_theme_light_surface">#FFFBFF</color>
<color name="red_md_theme_light_onSurface">#201A19</color>
<color name="red_md_theme_light_surfaceVariant">#F5DDDA</color>
<color name="red_md_theme_light_onSurfaceVariant">#534341</color>
<color name="red_md_theme_light_outline">#857370</color>
<color name="red_md_theme_light_inverseOnSurface">#FBEEEC</color>
<color name="red_md_theme_light_inverseSurface">#362F2E</color>
<color name="red_md_theme_light_inversePrimary">#FFB4A9</color>
<color name="red_md_theme_light_shadow">#000000</color>
<color name="red_md_theme_light_surfaceTint">#9F4034</color>
<color name="red_md_theme_light_surfaceTintColor">#9F4034</color>
<color name="red_md_theme_dark_primary">#FFB4A9</color>
<color name="red_md_theme_dark_onPrimary">#61120C</color>
<color name="red_md_theme_dark_primaryContainer">#7F291F</color>
<color name="red_md_theme_dark_onPrimaryContainer">#FFDAD5</color>
<color name="red_md_theme_dark_secondary">#E7BDB6</color>
<color name="red_md_theme_dark_onSecondary">#442925</color>
<color name="red_md_theme_dark_secondaryContainer">#5D3F3B</color>
<color name="red_md_theme_dark_onSecondaryContainer">#FFDAD5</color>
<color name="red_md_theme_dark_tertiary">#DEC38C</color>
<color name="red_md_theme_dark_onTertiary">#3E2E04</color>
<color name="red_md_theme_dark_tertiaryContainer">#574419</color>
<color name="red_md_theme_dark_onTertiaryContainer">#FCDFA6</color>
<color name="red_md_theme_dark_error">#FFB4AB</color>
<color name="red_md_theme_dark_errorContainer">#93000A</color>
<color name="red_md_theme_dark_onError">#690005</color>
<color name="red_md_theme_dark_onErrorContainer">#FFDAD6</color>
<color name="red_md_theme_dark_background">#201A19</color>
<color name="red_md_theme_dark_onBackground">#EDE0DE</color>
<color name="red_md_theme_dark_surface">#201A19</color>
<color name="red_md_theme_dark_onSurface">#EDE0DE</color>
<color name="red_md_theme_dark_surfaceVariant">#534341</color>
<color name="red_md_theme_dark_onSurfaceVariant">#D8C2BE</color>
<color name="red_md_theme_dark_outline">#A08C89</color>
<color name="red_md_theme_dark_inverseOnSurface">#201A19</color>
<color name="red_md_theme_dark_inverseSurface">#EDE0DE</color>
<color name="red_md_theme_dark_inversePrimary">#9F4034</color>
<color name="red_md_theme_dark_shadow">#000000</color>
<color name="red_md_theme_dark_surfaceTint">#FFB4A9</color>
<color name="red_md_theme_dark_surfaceTintColor">#FFB4A9</color>
<color name="yellow_md_theme_light_primary">#745B00</color>
<color name="yellow_md_theme_light_onPrimary">#FFFFFF</color>
<color name="yellow_md_theme_light_primaryContainer">#FFE08D</color>
<color name="yellow_md_theme_light_onPrimaryContainer">#241A00</color>
<color name="yellow_md_theme_light_secondary">#695D3F</color>
<color name="yellow_md_theme_light_onSecondary">#FFFFFF</color>
<color name="yellow_md_theme_light_secondaryContainer">#F2E1BB</color>
<color name="yellow_md_theme_light_onSecondaryContainer">#231B04</color>
<color name="yellow_md_theme_light_tertiary">#47664A</color>
<color name="yellow_md_theme_light_onTertiary">#FFFFFF</color>
<color name="yellow_md_theme_light_tertiaryContainer">#C9ECC8</color>
<color name="yellow_md_theme_light_onTertiaryContainer">#04210B</color>
<color name="yellow_md_theme_light_error">#BA1A1A</color>
<color name="yellow_md_theme_light_errorContainer">#FFDAD6</color>
<color name="yellow_md_theme_light_onError">#FFFFFF</color>
<color name="yellow_md_theme_light_onErrorContainer">#410002</color>
<color name="yellow_md_theme_light_background">#FFFBFF</color>
<color name="yellow_md_theme_light_onBackground">#1E1B16</color>
<color name="yellow_md_theme_light_surface">#FFFBFF</color>
<color name="yellow_md_theme_light_onSurface">#1E1B16</color>
<color name="yellow_md_theme_light_surfaceVariant">#EBE1CF</color>
<color name="yellow_md_theme_light_onSurfaceVariant">#4C4639</color>
<color name="yellow_md_theme_light_outline">#7E7667</color>
<color name="yellow_md_theme_light_inverseOnSurface">#F7F0E7</color>
<color name="yellow_md_theme_light_inverseSurface">#33302A</color>
<color name="yellow_md_theme_light_inversePrimary">#EBC248</color>
<color name="yellow_md_theme_light_shadow">#000000</color>
<color name="yellow_md_theme_light_surfaceTint">#745B00</color>
<color name="yellow_md_theme_light_surfaceTintColor">#745B00</color>
<color name="yellow_md_theme_dark_primary">#EBC248</color>
<color name="yellow_md_theme_dark_onPrimary">#3D2F00</color>
<color name="yellow_md_theme_dark_primaryContainer">#584400</color>
<color name="yellow_md_theme_dark_onPrimaryContainer">#FFE08D</color>
<color name="yellow_md_theme_dark_secondary">#D5C5A1</color>
<color name="yellow_md_theme_dark_onSecondary">#392F15</color>
<color name="yellow_md_theme_dark_secondaryContainer">#50462A</color>
<color name="yellow_md_theme_dark_onSecondaryContainer">#F2E1BB</color>
<color name="yellow_md_theme_dark_tertiary">#ADCFAD</color>
<color name="yellow_md_theme_dark_onTertiary">#19361F</color>
<color name="yellow_md_theme_dark_tertiaryContainer">#304D34</color>
<color name="yellow_md_theme_dark_onTertiaryContainer">#C9ECC8</color>
<color name="yellow_md_theme_dark_error">#FFB4AB</color>
<color name="yellow_md_theme_dark_errorContainer">#93000A</color>
<color name="yellow_md_theme_dark_onError">#690005</color>
<color name="yellow_md_theme_dark_onErrorContainer">#FFDAD6</color>
<color name="yellow_md_theme_dark_background">#1E1B16</color>
<color name="yellow_md_theme_dark_onBackground">#E8E1D9</color>
<color name="yellow_md_theme_dark_surface">#1E1B16</color>
<color name="yellow_md_theme_dark_onSurface">#E8E1D9</color>
<color name="yellow_md_theme_dark_surfaceVariant">#4C4639</color>
<color name="yellow_md_theme_dark_onSurfaceVariant">#CFC5B4</color>
<color name="yellow_md_theme_dark_outline">#989080</color>
<color name="yellow_md_theme_dark_inverseOnSurface">#1E1B16</color>
<color name="yellow_md_theme_dark_inverseSurface">#E8E1D9</color>
<color name="yellow_md_theme_dark_inversePrimary">#745B00</color>
<color name="yellow_md_theme_dark_shadow">#000000</color>
<color name="yellow_md_theme_dark_surfaceTint">#EBC248</color>
<color name="yellow_md_theme_dark_surfaceTintColor">#EBC248</color>
<color name="green_md_theme_light_primary">#3E6A00</color>
<color name="green_md_theme_light_onPrimary">#FFFFFF</color>
<color name="green_md_theme_light_primaryContainer">#B9F474</color>
<color name="green_md_theme_light_onPrimaryContainer">#0F2000</color>
<color name="green_md_theme_light_secondary">#576249</color>
<color name="green_md_theme_light_onSecondary">#FFFFFF</color>
<color name="green_md_theme_light_secondaryContainer">#DBE7C8</color>
<color name="green_md_theme_light_onSecondaryContainer">#151E0B</color>
<color name="green_md_theme_light_tertiary">#386663</color>
<color name="green_md_theme_light_onTertiary">#FFFFFF</color>
<color name="green_md_theme_light_tertiaryContainer">#BBECE8</color>
<color name="green_md_theme_light_onTertiaryContainer">#00201E</color>
<color name="green_md_theme_light_error">#BA1A1A</color>
<color name="green_md_theme_light_errorContainer">#FFDAD6</color>
<color name="green_md_theme_light_onError">#FFFFFF</color>
<color name="green_md_theme_light_onErrorContainer">#410002</color>
<color name="green_md_theme_light_background">#FDFCF5</color>
<color name="green_md_theme_light_onBackground">#1B1C18</color>
<color name="green_md_theme_light_surface">#FDFCF5</color>
<color name="green_md_theme_light_onSurface">#1B1C18</color>
<color name="green_md_theme_light_surfaceVariant">#E1E4D5</color>
<color name="green_md_theme_light_onSurfaceVariant">#44483D</color>
<color name="green_md_theme_light_outline">#75796C</color>
<color name="green_md_theme_light_inverseOnSurface">#F2F1E9</color>
<color name="green_md_theme_light_inverseSurface">#30312C</color>
<color name="green_md_theme_light_inversePrimary">#9ED75B</color>
<color name="green_md_theme_light_shadow">#000000</color>
<color name="green_md_theme_light_surfaceTint">#3E6A00</color>
<color name="green_md_theme_light_surfaceTintColor">#3E6A00</color>
<color name="green_md_theme_dark_primary">#9ED75B</color>
<color name="green_md_theme_dark_onPrimary">#1E3700</color>
<color name="green_md_theme_dark_primaryContainer">#2E4F00</color>
<color name="green_md_theme_dark_onPrimaryContainer">#B9F474</color>
<color name="green_md_theme_dark_secondary">#BFCBAD</color>
<color name="green_md_theme_dark_onSecondary">#2A331E</color>
<color name="green_md_theme_dark_secondaryContainer">#404A33</color>
<color name="green_md_theme_dark_onSecondaryContainer">#DBE7C8</color>
<color name="green_md_theme_dark_tertiary">#A0D0CC</color>
<color name="green_md_theme_dark_onTertiary">#003735</color>
<color name="green_md_theme_dark_tertiaryContainer">#1F4E4B</color>
<color name="green_md_theme_dark_onTertiaryContainer">#BBECE8</color>
<color name="green_md_theme_dark_error">#FFB4AB</color>
<color name="green_md_theme_dark_errorContainer">#93000A</color>
<color name="green_md_theme_dark_onError">#690005</color>
<color name="green_md_theme_dark_onErrorContainer">#FFDAD6</color>
<color name="green_md_theme_dark_background">#1B1C18</color>
<color name="green_md_theme_dark_onBackground">#E3E3DB</color>
<color name="green_md_theme_dark_surface">#1B1C18</color>
<color name="green_md_theme_dark_onSurface">#E3E3DB</color>
<color name="green_md_theme_dark_surfaceVariant">#44483D</color>
<color name="green_md_theme_dark_onSurfaceVariant">#C5C8BA</color>
<color name="green_md_theme_dark_outline">#8E9285</color>
<color name="green_md_theme_dark_inverseOnSurface">#1B1C18</color>
<color name="green_md_theme_dark_inverseSurface">#E3E3DB</color>
<color name="green_md_theme_dark_inversePrimary">#3E6A00</color>
<color name="green_md_theme_dark_shadow">#000000</color>
<color name="green_md_theme_dark_surfaceTint">#9ED75B</color>
<color name="green_md_theme_dark_surfaceTintColor">#9ED75B</color>
<color name="purple_md_theme_light_primary">#9B3489</color>
<color name="purple_md_theme_light_onPrimary">#FFFFFF</color>
<color name="purple_md_theme_light_primaryContainer">#FFD7F0</color>
<color name="purple_md_theme_light_onPrimaryContainer">#3A0032</color>
<color name="purple_md_theme_light_secondary">#6F5767</color>
<color name="purple_md_theme_light_onSecondary">#FFFFFF</color>
<color name="purple_md_theme_light_secondaryContainer">#F9DAEC</color>
<color name="purple_md_theme_light_onSecondaryContainer">#281623</color>
<color name="purple_md_theme_light_tertiary">#815341</color>
<color name="purple_md_theme_light_onTertiary">#FFFFFF</color>
<color name="purple_md_theme_light_tertiaryContainer">#FFDBCE</color>
<color name="purple_md_theme_light_onTertiaryContainer">#321205</color>
<color name="purple_md_theme_light_error">#BA1A1A</color>
<color name="purple_md_theme_light_errorContainer">#FFDAD6</color>
<color name="purple_md_theme_light_onError">#FFFFFF</color>
<color name="purple_md_theme_light_onErrorContainer">#410002</color>
<color name="purple_md_theme_light_background">#FFFBFF</color>
<color name="purple_md_theme_light_onBackground">#1F1A1D</color>
<color name="purple_md_theme_light_surface">#FFFBFF</color>
<color name="purple_md_theme_light_onSurface">#1F1A1D</color>
<color name="purple_md_theme_light_surfaceVariant">#EFDEE6</color>
<color name="purple_md_theme_light_onSurfaceVariant">#4F444A</color>
<color name="purple_md_theme_light_outline">#81737B</color>
<color name="purple_md_theme_light_inverseOnSurface">#F8EEF1</color>
<color name="purple_md_theme_light_inverseSurface">#342F32</color>
<color name="purple_md_theme_light_inversePrimary">#FFACE7</color>
<color name="purple_md_theme_light_shadow">#000000</color>
<color name="purple_md_theme_light_surfaceTint">#9B3489</color>
<color name="purple_md_theme_light_surfaceTintColor">#9B3489</color>
<color name="purple_md_theme_dark_primary">#FFACE7</color>
<color name="purple_md_theme_dark_onPrimary">#5E0052</color>
<color name="purple_md_theme_dark_primaryContainer">#7E186F</color>
<color name="purple_md_theme_dark_onPrimaryContainer">#FFD7F0</color>
<color name="purple_md_theme_dark_secondary">#DCBED0</color>
<color name="purple_md_theme_dark_onSecondary">#3E2A38</color>
<color name="purple_md_theme_dark_secondaryContainer">#56404F</color>
<color name="purple_md_theme_dark_onSecondaryContainer">#F9DAEC</color>
<color name="purple_md_theme_dark_tertiary">#F5B9A2</color>
<color name="purple_md_theme_dark_onTertiary">#4B2617</color>
<color name="purple_md_theme_dark_tertiaryContainer">#663C2B</color>
<color name="purple_md_theme_dark_onTertiaryContainer">#FFDBCE</color>
<color name="purple_md_theme_dark_error">#FFB4AB</color>
<color name="purple_md_theme_dark_errorContainer">#93000A</color>
<color name="purple_md_theme_dark_onError">#690005</color>
<color name="purple_md_theme_dark_onErrorContainer">#FFDAD6</color>
<color name="purple_md_theme_dark_background">#1F1A1D</color>
<color name="purple_md_theme_dark_onBackground">#EAE0E3</color>
<color name="purple_md_theme_dark_surface">#1F1A1D</color>
<color name="purple_md_theme_dark_onSurface">#EAE0E3</color>
<color name="purple_md_theme_dark_surfaceVariant">#4F444A</color>
<color name="purple_md_theme_dark_onSurfaceVariant">#D2C2CA</color>
<color name="purple_md_theme_dark_outline">#9B8D94</color>
<color name="purple_md_theme_dark_inverseOnSurface">#1F1A1D</color>
<color name="purple_md_theme_dark_inverseSurface">#EAE0E3</color>
<color name="purple_md_theme_dark_inversePrimary">#9B3489</color>
<color name="purple_md_theme_dark_shadow">#000000</color>
<color name="purple_md_theme_dark_surfaceTint">#FFACE7</color>
<color name="purple_md_theme_dark_surfaceTintColor">#FFACE7</color>
// Colors without comments seem to be not used
<color name="monochrome_theme_light_primary">#616161</color>
// LibreTube Logo, Hyperlinks and on-off switch (on status: filling) (also influence on the
navbar colour)
<color name="monochrome_theme_light_onPrimary">#FFFFFF</color>
// on-off switch (on status: circle)
<color name="monochrome_theme_light_primaryContainer">#DCDCDC</color>
<color name="monochrome_theme_light_onPrimaryContainer">#272727</color>
<color name="monochrome_theme_light_secondary">#797979</color>
// Headline Text
<color name="monochrome_theme_light_onSecondary">#B39494</color>
// SponsorBlock marker
<color name="monochrome_theme_light_secondaryContainer">#DCDCDC</color>
// NavBar Icon Container (selected)
<color name="monochrome_theme_light_onSecondaryContainer">#272727</color>
// Navbar Icon (selected)
<color name="monochrome_theme_light_tertiary">#DCDCDC</color>
<color name="monochrome_theme_light_onTertiary">#272727</color>
<color name="monochrome_theme_light_tertiaryContainer">#DCDCDC</color>
<color name="monochrome_theme_light_onTertiaryContainer">#272727</color>
<color name="monochrome_theme_light_error">#DCDCDC</color>
<color name="monochrome_theme_light_errorContainer">#DCDCDC</color>
<color name="monochrome_theme_light_onError">#272727</color>
<color name="monochrome_theme_light_onErrorContainer">#272727</color>
<color name="monochrome_theme_light_background">#FFFFFF</color>
// Background (Settings and home)
<color name="monochrome_theme_light_onBackground">#272727</color>
<color name="monochrome_theme_light_surface">#FFFFFF</color>
// Navbar and Flyouts (uses also the "primary" color)
<color name="monochrome_theme_light_onSurface">#272727</color>
// NavBar Text (selected) and some Flyout Headlines
<color name="monochrome_theme_light_surfaceVariant">#DCDCDC</color>
// on-off switch (off status: filling)
<color name="monochrome_theme_light_onSurfaceVariant">#353535</color>
// text in Flyouts, Animation color (subscription button)
<color name="monochrome_theme_light_outline">#797979</color>
// on-off switch (off status: border)
<color name="monochrome_theme_light_inverseOnSurface">#DCDCDC</color>
<color name="monochrome_theme_light_inverseSurface">#606060</color>
<color name="monochrome_theme_light_inversePrimary">#C1C1C1</color>
<color name="monochrome_theme_light_shadow">#000000</color>
<color name="monochrome_theme_light_surfaceTint">#717171</color>
<color name="monochrome_theme_light_surfaceTintColor">#717171</color>
<color name="monochrome_theme_dark_primary">#959595</color>
// LibreTube Logo, Hyperlinks and on-off switch (on status: filling) (also influence on the
navbar colour)
<color name="monochrome_theme_dark_onPrimary">#161616</color>
// on-off switch (on status: circle)
<color name="monochrome_theme_dark_primaryContainer">#4D4D4D</color>
<color name="monochrome_theme_dark_onPrimaryContainer">#A3A3A3</color>
<color name="monochrome_theme_dark_secondary">#A3A3A3</color>
// Headline Text
<color name="monochrome_theme_dark_onSecondary">#886A6A</color>
// SponsorBlock marker
<color name="monochrome_theme_dark_secondaryContainer">#4D4D4D</color>
// NavBar Icon Container (selected)
<color name="monochrome_theme_dark_onSecondaryContainer">#CCCCCC</color>
// Navbar Icon Color (selected)
<color name="monochrome_theme_dark_tertiary">#4D4D4D</color>
<color name="monochrome_theme_dark_onTertiary">#A3A3A3</color>
<color name="monochrome_theme_dark_tertiaryContainer">#4D4D4D</color>
<color name="monochrome_theme_dark_onTertiaryContainer">#A3A3A3</color>
<color name="monochrome_theme_dark_error">#4D4D4D</color>
<color name="monochrome_theme_dark_errorContainer">#4D4D4D</color>
<color name="monochrome_theme_dark_onError">#A3A3A3</color>
<color name="monochrome_theme_dark_onErrorContainer">#A3A3A3</color>
<color name="monochrome_theme_dark_background">#161616</color>
// Background (Settings and home)
<color name="monochrome_theme_dark_onBackground">#A3A3A3</color>
<color name="monochrome_theme_dark_surface">#161616</color>
// Navbar and Flyouts (uses also the "primary" color)
<color name="monochrome_theme_dark_onSurface">#BDBDBD</color>
// NavBar Text (selected) and some Flyout Headlines
<color name="monochrome_theme_dark_surfaceVariant">#4D4D4D</color>
// on-off switch (off status: filling)
<color name="monochrome_theme_dark_onSurfaceVariant">#A3A3A3</color>
// text in Flyouts, Animation color (subscription button)
<color name="monochrome_theme_dark_outline">#A3A3A3</color>
// on-off switch (off status: border)
<color name="monochrome_theme_dark_inverseOnSurface">#404040</color>
<color name="monochrome_theme_dark_inverseSurface">#C3C3C3</color>
<color name="monochrome_theme_dark_inversePrimary">#707070</color>
<color name="monochrome_theme_dark_shadow">#000000</color>
<color name="monochrome_theme_dark_surfaceTint">#C3C3C3</color>
<color name="monochrome_theme_dark_surfaceTintColor">#C3C3C3</color>
<color name="violet_theme_light_primary">#714AAA</color>
<color name="violet_theme_light_onPrimary">#FFFFFF</color>
<color name="violet_theme_light_primaryContainer">#EDDCFF</color>
<color name="violet_theme_light_onPrimaryContainer">#290055</color>
<color name="violet_theme_light_secondary">#714AAA</color>
<color name="violet_theme_light_onSecondary">#FFFFFF</color>
<color name="violet_theme_light_secondaryContainer">#EDDCFF</color>
<color name="violet_theme_light_onSecondaryContainer">#290055</color>
<color name="violet_theme_light_tertiary">#714AAA</color>
<color name="violet_theme_light_onTertiary">#FFFFFF</color>
<color name="violet_theme_light_tertiaryContainer">#EDDCFF</color>
<color name="violet_theme_light_onTertiaryContainer">#290055</color>
<color name="violet_theme_light_error">#BA1A1A</color>
<color name="violet_theme_light_errorContainer">#FFDAD6</color>
<color name="violet_theme_light_onError">#FFFFFF</color>
<color name="violet_theme_light_onErrorContainer">#410002</color>
<color name="violet_theme_light_background">#FFFBFF</color>
<color name="violet_theme_light_onBackground">#2B0052</color>
<color name="violet_theme_light_surface">#FFFBFF</color>
<color name="violet_theme_light_onSurface">#2B0052</color>
<color name="violet_theme_light_surfaceVariant">#E8E0EB</color>
<color name="violet_theme_light_onSurfaceVariant">#4A454E</color>
<color name="violet_theme_light_outline">#7B757F</color>
<color name="violet_theme_light_inverseOnSurface">#F9ECFF</color>
<color name="violet_theme_light_inverseSurface">#421A6C</color>
<color name="violet_theme_light_inversePrimary">#D7BAFF</color>
<color name="violet_theme_light_shadow">#000000</color>
<color name="violet_theme_light_surfaceTint">#714AAA</color>
<color name="violet_theme_light_surfaceTintColor">#714AAA</color>
<color name="violet_theme_dark_primary">#D7BAFF</color>
<color name="violet_theme_dark_onPrimary">#411478</color>
<color name="violet_theme_dark_primaryContainer">#593090</color>
<color name="violet_theme_dark_onPrimaryContainer">#EDDCFF</color>
<color name="violet_theme_dark_secondary">#D7BAFF</color>
<color name="violet_theme_dark_onSecondary">#411478</color>
<color name="violet_theme_dark_secondaryContainer">#593090</color>
<color name="violet_theme_dark_onSecondaryContainer">#EDDCFF</color>
<color name="violet_theme_dark_tertiary">#D7BAFF</color>
<color name="violet_theme_dark_onTertiary">#411478</color>
<color name="violet_theme_dark_tertiaryContainer">#593090</color>
<color name="violet_theme_dark_onTertiaryContainer">#EDDCFF</color>
<color name="violet_theme_dark_error">#FFB4AB</color>
<color name="violet_theme_dark_errorContainer">#93000A</color>
<color name="violet_theme_dark_onError">#690005</color>
<color name="violet_theme_dark_onErrorContainer">#FFDAD6</color>
<color name="violet_theme_dark_background">#2B0052</color>
<color name="violet_theme_dark_onBackground">#EFDBFF</color>
<color name="violet_theme_dark_surface">#2B0052</color>
<color name="violet_theme_dark_onSurface">#EFDBFF</color>
<color name="violet_theme_dark_surfaceVariant">#4A454E</color>
<color name="violet_theme_dark_onSurfaceVariant">#CCC4CF</color>
<color name="violet_theme_dark_outline">#958E99</color>
<color name="violet_theme_dark_inverseOnSurface">#2B0052</color>
<color name="violet_theme_dark_inverseSurface">#EFDBFF</color>
<color name="violet_theme_dark_inversePrimary">#714AAA</color>
<color name="violet_theme_dark_shadow">#000000</color>
<color name="violet_theme_dark_surfaceTint">#D7BAFF</color>
<color name="violet_theme_dark_surfaceTintColor">#D7BAFF</color>
</resources>

View file

@ -227,4 +227,10 @@
<string name="dark">Dark</string>
<string name="light">Light</string>
<string name="quality">Quality</string>
<string name="system">System</string>
<string name="black">Pure Black</string>
<string name="white">Pure White</string>
<string name="accents">Accents</string>
<string name="high_contrast">High Contrast</string>
<string name="pure_theme_summary">Pure Black / White Theme</string>
</resources>

View file

@ -1,15 +1,4 @@
<resources>
<style name="AppDefaultTheme" parent="Theme.Material3.DayNight.NoActionBar">
<item name="colorPrimary">#228DFF</item>
<item name="colorPrimaryDark">#1B6CC3</item>
<item name="android:windowLightStatusBar">?attr/isLightTheme</item>
<item name="android:statusBarColor">@android:color/transparent</item>
<item name="android:color">@android:color/transparent</item>
<item name="windowActionModeOverlay">true</item>
<item name="alertDialogTheme">@style/ThemeOverlay.Material3.MaterialAlertDialog</item>
<item name="dialogCornerRadius">28dp</item>
</style>
<style name="Theme.BottomSheet" parent="Theme.Material3.DayNight.NoActionBar">
<item name="windowNoTitle">true</item>
<item name="android:windowBackground">@android:color/transparent</item>
@ -18,8 +7,6 @@
<item name="android:windowContentOverlay">@null</item>
</style>
<style name="AppTheme" parent="AppDefaultTheme" />
<style name="Toolbar" parent="Theme.Material3.DayNight.NoActionBar">
<item name="searchViewStyle">@style/searchStyle</item>
</style>
@ -74,4 +61,17 @@
<item name="cornerSize">0dp</item>
</style>
<style name="Preference.SwitchPreferenceCompat.Material3" parent="@style/Preference.SwitchPreferenceCompat.Material">
<item name="widgetLayout">@layout/preferece_material_switch</item>
</style>
<style name="snackBarStyle" parent="@style/Widget.Material3.Snackbar">
<item name="shapeAppearance">@style/ShapeAppearance.Material3.Corner.ExtraLarge</item>
<item name="android:paddingStart">20dp</item>
<item name="android:paddingEnd">20dp</item>
<item name="maxLines">2</item>
<item name="animationMode">slide</item>
</style>
</resources>

View file

@ -0,0 +1,228 @@
<resources xmlns:tools="http://schemas.android.com/tools">
<style name="BaseTheme" parent="Theme.Material3.DayNight.NoActionBar">
<item name="android:windowLightStatusBar">?attr/isLightTheme</item>
<item name="android:statusBarColor">@android:color/transparent</item>
<item name="android:color">@android:color/transparent</item>
<item name="windowActionModeOverlay">true</item>
<item name="alertDialogTheme">@style/ThemeOverlay.Material3.MaterialAlertDialog</item>
<item name="dialogCornerRadius">28dp</item>
<item name="switchPreferenceCompatStyle">@style/Preference.SwitchPreferenceCompat.Material3</item>
<item name="snackbarStyle">@style/snackBarStyle</item>
</style>
<style name="Theme.Red" parent="BaseTheme">
<item name="colorPrimary">@color/red_md_theme_light_primary</item>
<item name="colorOnPrimary">@color/red_md_theme_light_onPrimary</item>
<item name="colorPrimaryContainer">@color/red_md_theme_light_primaryContainer</item>
<item name="colorOnPrimaryContainer">@color/red_md_theme_light_onPrimaryContainer</item>
<item name="colorSecondary">@color/red_md_theme_light_secondary</item>
<item name="colorOnSecondary">@color/red_md_theme_light_onSecondary</item>
<item name="colorSecondaryContainer">@color/red_md_theme_light_secondaryContainer</item>
<item name="colorOnSecondaryContainer">@color/red_md_theme_light_onSecondaryContainer</item>
<item name="colorTertiary">@color/red_md_theme_light_tertiary</item>
<item name="colorOnTertiary">@color/red_md_theme_light_onTertiary</item>
<item name="colorTertiaryContainer">@color/red_md_theme_light_tertiaryContainer</item>
<item name="colorOnTertiaryContainer">@color/red_md_theme_light_onTertiaryContainer</item>
<item name="colorError">@color/red_md_theme_light_error</item>
<item name="colorErrorContainer">@color/red_md_theme_light_errorContainer</item>
<item name="colorOnError">@color/red_md_theme_light_onError</item>
<item name="colorOnErrorContainer">@color/red_md_theme_light_onErrorContainer</item>
<item name="android:colorBackground">@color/red_md_theme_light_background</item>
<item name="colorOnBackground">@color/red_md_theme_light_onBackground</item>
<item name="colorSurface">@color/red_md_theme_light_surface</item>
<item name="colorOnSurface">@color/red_md_theme_light_onSurface</item>
<item name="colorSurfaceVariant">@color/red_md_theme_light_surfaceVariant</item>
<item name="colorOnSurfaceVariant">@color/red_md_theme_light_onSurfaceVariant</item>
<item name="colorOutline">@color/red_md_theme_light_outline</item>
<item name="colorOnSurfaceInverse">@color/red_md_theme_light_inverseOnSurface</item>
<item name="colorSurfaceInverse">@color/red_md_theme_light_inverseSurface</item>
<item name="colorPrimaryInverse">@color/red_md_theme_light_inversePrimary</item>
</style>
<style name="Theme.Amoled" parent="BaseTheme">
<item name="android:colorForeground">@color/black</item>
<item name="android:colorPrimaryDark">@color/black</item>
<item name="android:textColorPrimary">@color/white</item>
<item name="android:colorAccent">@color/white</item>
<item name="android:color">@color/white</item>
<item name="android:windowBackground">#111</item>
<item name="android:colorBackground">#111</item>
<item name="colorOnBackground">#111</item>
<item name="android:navigationBarColor">@color/black</item>
<item name="android:actionBarStyle">@color/black</item>
</style>
<style name="Theme.Blue" parent="BaseTheme">
<item name="colorPrimary">@color/blue_md_theme_light_primary</item>
<item name="colorOnPrimary">@color/blue_md_theme_light_onPrimary</item>
<item name="colorPrimaryContainer">@color/blue_md_theme_light_primaryContainer</item>
<item name="colorOnPrimaryContainer">@color/blue_md_theme_light_onPrimaryContainer</item>
<item name="colorSecondary">@color/blue_md_theme_light_secondary</item>
<item name="colorOnSecondary">@color/blue_md_theme_light_onSecondary</item>
<item name="colorSecondaryContainer">@color/blue_md_theme_light_secondaryContainer</item>
<item name="colorOnSecondaryContainer">@color/blue_md_theme_light_onSecondaryContainer
</item>
<item name="colorTertiary">@color/blue_md_theme_light_tertiary</item>
<item name="colorOnTertiary">@color/blue_md_theme_light_onTertiary</item>
<item name="colorTertiaryContainer">@color/blue_md_theme_light_tertiaryContainer</item>
<item name="colorOnTertiaryContainer">@color/blue_md_theme_light_onTertiaryContainer</item>
<item name="colorError">@color/blue_md_theme_light_error</item>
<item name="colorErrorContainer">@color/blue_md_theme_light_errorContainer</item>
<item name="colorOnError">@color/blue_md_theme_light_onError</item>
<item name="colorOnErrorContainer">@color/blue_md_theme_light_onErrorContainer</item>
<item name="android:colorBackground">@color/blue_md_theme_light_background</item>
<item name="colorOnBackground">@color/blue_md_theme_light_onBackground</item>
<item name="colorSurface">@color/blue_md_theme_light_surface</item>
<item name="colorOnSurface">@color/blue_md_theme_light_onSurface</item>
<item name="colorSurfaceVariant">@color/blue_md_theme_light_surfaceVariant</item>
<item name="colorOnSurfaceVariant">@color/blue_md_theme_light_onSurfaceVariant</item>
<item name="colorOutline">@color/blue_md_theme_light_outline</item>
<item name="colorOnSurfaceInverse">@color/blue_md_theme_light_inverseOnSurface</item>
<item name="colorSurfaceInverse">@color/blue_md_theme_light_inverseSurface</item>
<item name="colorPrimaryInverse">@color/blue_md_theme_light_inversePrimary</item>
</style>
<style name="Theme.Yellow" parent="BaseTheme">
<item name="colorPrimary">@color/yellow_md_theme_light_primary</item>
<item name="colorOnPrimary">@color/yellow_md_theme_light_onPrimary</item>
<item name="colorPrimaryContainer">@color/yellow_md_theme_light_primaryContainer</item>
<item name="colorOnPrimaryContainer">@color/yellow_md_theme_light_onPrimaryContainer</item>
<item name="colorSecondary">@color/yellow_md_theme_light_secondary</item>
<item name="colorOnSecondary">@color/yellow_md_theme_light_onSecondary</item>
<item name="colorSecondaryContainer">@color/yellow_md_theme_light_secondaryContainer</item>
<item name="colorOnSecondaryContainer">@color/yellow_md_theme_light_onSecondaryContainer
</item>
<item name="colorTertiary">@color/yellow_md_theme_light_tertiary</item>
<item name="colorOnTertiary">@color/yellow_md_theme_light_onTertiary</item>
<item name="colorTertiaryContainer">@color/yellow_md_theme_light_tertiaryContainer</item>
<item name="colorOnTertiaryContainer">@color/yellow_md_theme_light_onTertiaryContainer
</item>
<item name="colorError">@color/yellow_md_theme_light_error</item>
<item name="colorErrorContainer">@color/yellow_md_theme_light_errorContainer</item>
<item name="colorOnError">@color/yellow_md_theme_light_onError</item>
<item name="colorOnErrorContainer">@color/yellow_md_theme_light_onErrorContainer</item>
<item name="android:colorBackground">@color/yellow_md_theme_light_background</item>
<item name="colorOnBackground">@color/yellow_md_theme_light_onBackground</item>
<item name="colorSurface">@color/yellow_md_theme_light_surface</item>
<item name="colorOnSurface">@color/yellow_md_theme_light_onSurface</item>
<item name="colorSurfaceVariant">@color/yellow_md_theme_light_surfaceVariant</item>
<item name="colorOnSurfaceVariant">@color/yellow_md_theme_light_onSurfaceVariant</item>
<item name="colorOutline">@color/yellow_md_theme_light_outline</item>
<item name="colorOnSurfaceInverse">@color/yellow_md_theme_light_inverseOnSurface</item>
<item name="colorSurfaceInverse">@color/yellow_md_theme_light_inverseSurface</item>
<item name="colorPrimaryInverse">@color/yellow_md_theme_light_inversePrimary</item>
</style>
<style name="Theme.Green" parent="BaseTheme">
<item name="colorPrimary">@color/green_md_theme_light_primary</item>
<item name="colorOnPrimary">@color/green_md_theme_light_onPrimary</item>
<item name="colorPrimaryContainer">@color/green_md_theme_light_primaryContainer</item>
<item name="colorOnPrimaryContainer">@color/green_md_theme_light_onPrimaryContainer</item>
<item name="colorSecondary">@color/green_md_theme_light_secondary</item>
<item name="colorOnSecondary">@color/green_md_theme_light_onSecondary</item>
<item name="colorSecondaryContainer">@color/green_md_theme_light_secondaryContainer</item>
<item name="colorOnSecondaryContainer">@color/green_md_theme_light_onSecondaryContainer
</item>
<item name="colorTertiary">@color/green_md_theme_light_tertiary</item>
<item name="colorOnTertiary">@color/green_md_theme_light_onTertiary</item>
<item name="colorTertiaryContainer">@color/green_md_theme_light_tertiaryContainer</item>
<item name="colorOnTertiaryContainer">@color/green_md_theme_light_onTertiaryContainer</item>
<item name="colorError">@color/green_md_theme_light_error</item>
<item name="colorErrorContainer">@color/green_md_theme_light_errorContainer</item>
<item name="colorOnError">@color/green_md_theme_light_onError</item>
<item name="colorOnErrorContainer">@color/green_md_theme_light_onErrorContainer</item>
<item name="android:colorBackground">@color/green_md_theme_light_background</item>
<item name="colorOnBackground">@color/green_md_theme_light_onBackground</item>
<item name="colorSurface">@color/green_md_theme_light_surface</item>
<item name="colorOnSurface">@color/green_md_theme_light_onSurface</item>
<item name="colorSurfaceVariant">@color/green_md_theme_light_surfaceVariant</item>
<item name="colorOnSurfaceVariant">@color/green_md_theme_light_onSurfaceVariant</item>
<item name="colorOutline">@color/green_md_theme_light_outline</item>
<item name="colorOnSurfaceInverse">@color/green_md_theme_light_inverseOnSurface</item>
<item name="colorSurfaceInverse">@color/green_md_theme_light_inverseSurface</item>
<item name="colorPrimaryInverse">@color/green_md_theme_light_inversePrimary</item>
</style>
<style name="Theme.Purple" parent="BaseTheme">
<item name="colorPrimary">@color/purple_md_theme_light_primary</item>
<item name="colorOnPrimary">@color/purple_md_theme_light_onPrimary</item>
<item name="colorPrimaryContainer">@color/purple_md_theme_light_primaryContainer</item>
<item name="colorOnPrimaryContainer">@color/purple_md_theme_light_onPrimaryContainer</item>
<item name="colorSecondary">@color/purple_md_theme_light_secondary</item>
<item name="colorOnSecondary">@color/purple_md_theme_light_onSecondary</item>
<item name="colorSecondaryContainer">@color/purple_md_theme_light_secondaryContainer</item>
<item name="colorOnSecondaryContainer">@color/purple_md_theme_light_onSecondaryContainer
</item>
<item name="colorTertiary">@color/purple_md_theme_light_tertiary</item>
<item name="colorOnTertiary">@color/purple_md_theme_light_onTertiary</item>
<item name="colorTertiaryContainer">@color/purple_md_theme_light_tertiaryContainer</item>
<item name="colorOnTertiaryContainer">@color/purple_md_theme_light_onTertiaryContainer
</item>
<item name="colorError">@color/purple_md_theme_light_error</item>
<item name="colorErrorContainer">@color/purple_md_theme_light_errorContainer</item>
<item name="colorOnError">@color/purple_md_theme_light_onError</item>
<item name="colorOnErrorContainer">@color/purple_md_theme_light_onErrorContainer</item>
<item name="android:colorBackground">@color/purple_md_theme_light_background</item>
<item name="colorOnBackground">@color/purple_md_theme_light_onBackground</item>
<item name="colorSurface">@color/purple_md_theme_light_surface</item>
<item name="colorOnSurface">@color/purple_md_theme_light_onSurface</item>
<item name="colorSurfaceVariant">@color/purple_md_theme_light_surfaceVariant</item>
<item name="colorOnSurfaceVariant">@color/purple_md_theme_light_onSurfaceVariant</item>
<item name="colorOutline">@color/purple_md_theme_light_outline</item>
<item name="colorOnSurfaceInverse">@color/purple_md_theme_light_inverseOnSurface</item>
<item name="colorSurfaceInverse">@color/purple_md_theme_light_inverseSurface</item>
<item name="colorPrimaryInverse">@color/purple_md_theme_light_inversePrimary</item>
</style>
<style name="Theme.Monochrome" parent="BaseTheme">
<item name="colorPrimary">@color/monochrome_theme_light_primary</item>
<item name="colorOnPrimary">@color/monochrome_theme_light_onPrimary</item>
<item name="colorPrimaryContainer">@color/monochrome_theme_light_primaryContainer</item>
<item name="colorOnPrimaryContainer">@color/monochrome_theme_light_onPrimaryContainer</item>
<item name="colorSecondary">@color/monochrome_theme_light_secondary</item>
<item name="colorOnSecondary">@color/monochrome_theme_light_onSecondary</item>
<item name="colorSecondaryContainer">@color/monochrome_theme_light_secondaryContainer</item>
<item name="colorOnSecondaryContainer">@color/monochrome_theme_light_onSecondaryContainer
</item>
<item name="colorTertiary">@color/monochrome_theme_light_tertiary</item>
<item name="colorOnTertiary">@color/monochrome_theme_light_onTertiary</item>
<item name="colorTertiaryContainer">@color/monochrome_theme_light_tertiaryContainer</item>
<item name="colorOnTertiaryContainer">@color/monochrome_theme_light_onTertiaryContainer
</item>
<item name="colorError">@color/monochrome_theme_light_error</item>
<item name="colorErrorContainer">@color/monochrome_theme_light_errorContainer</item>
<item name="colorOnError">@color/monochrome_theme_light_onError</item>
<item name="colorOnErrorContainer">@color/monochrome_theme_light_onErrorContainer</item>
<item name="android:colorBackground">@color/monochrome_theme_light_background</item>
<item name="colorOnBackground">@color/monochrome_theme_light_onBackground</item>
<item name="colorSurface">@color/monochrome_theme_light_surface</item>
<item name="colorOnSurface">@color/monochrome_theme_light_onSurface</item>
<item name="colorSurfaceVariant">@color/monochrome_theme_light_surfaceVariant</item>
<item name="colorOnSurfaceVariant">@color/monochrome_theme_light_onSurfaceVariant</item>
<item name="colorOutline">@color/monochrome_theme_light_outline</item>
<item name="colorOnSurfaceInverse">@color/monochrome_theme_light_inverseOnSurface</item>
<item name="colorSurfaceInverse">@color/monochrome_theme_light_inverseSurface</item>
<item name="colorPrimaryInverse">@color/monochrome_theme_light_inversePrimary</item>
</style>
<style name="Pure">
<item name="android:colorBackground">@android:color/white</item>
<item name="colorSurface">@android:color/white</item>
</style>
</resources>

View file

@ -17,6 +17,23 @@
app:summary="@string/defaultValue"
app:title="@string/Theme" />
<ListPreference
android:entries="@array/accents"
android:entryValues="@array/accents_values"
android:icon="@drawable/baseline_color_lens_24"
app:defaultValue="blue"
app:key="theme_accent"
app:summary="Blue"
app:title="@string/accents" />
<SwitchPreferenceCompat
android:widgetLayout="@layout/preferece_material_switch"
app:defaultValue="false"
android:icon="@drawable/baseline_invert_colors_24"
android:key="high_contrast"
app:summary="@string/pure_theme_summary"
app:title="@string/high_contrast" />
<Preference
app:icon="@drawable/ic_battery"
app:key="ignore_battery"