Fixed release version cannot restore database

This commit is contained in:
Super12138 2024-01-25 17:38:23 +08:00
parent 8c22d7ac5f
commit 9e8372fb3d
14 changed files with 513 additions and 46 deletions

View file

@ -20,4 +20,11 @@
# hide the original source file name. # hide the original source file name.
#-renamesourcefileattribute SourceFile #-renamesourcefileattribute SourceFile
# Gson
-keepattributes Signature
-keep class com.google.gson.reflect.TypeToken { *; }
-keep class * extends com.google.gson.reflect.TypeToken
-keepattributes AnnotationDefault,RuntimeVisibleAnnotations
# ToDo Room
-keep class cn.super12138.todo.logic.dao.ToDoRoom { *; } -keep class cn.super12138.todo.logic.dao.ToDoRoom { *; }

View file

@ -8,6 +8,12 @@ import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.withContext import kotlinx.coroutines.withContext
object Repository { object Repository {
/**
* 设置数据到应用设置中
*/
fun setPreference(context: Context, key: String, value: Any) =
SPHelper.setPreference(context, key, value)
/** /**
* 获取应用设置里的数据 * 获取应用设置里的数据
*/ */

View file

@ -15,4 +15,20 @@ object SPHelper {
PreferenceManager.getDefaultSharedPreferences(context /* Activity context */) PreferenceManager.getDefaultSharedPreferences(context /* Activity context */)
return sharedPreferences.getBoolean(name, defaultValue) return sharedPreferences.getBoolean(name, defaultValue)
} }
fun setPreference(context: Context, name: String, value: Any) {
val sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context)
val editor = sharedPreferences.edit()
when (value) {
is String -> editor.putString(name, value)
is Boolean -> editor.putBoolean(name, value)
is Int -> editor.putInt(name, value)
is Float -> editor.putFloat(name, value)
is Long -> editor.putLong(name, value)
else -> throw IllegalArgumentException("Unsupported data type")
}
editor.apply()
}
} }

View file

@ -4,9 +4,17 @@ import android.os.Build
import android.os.Bundle import android.os.Bundle
import android.view.WindowManager import android.view.WindowManager
import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.app.AppCompatActivity
import cn.super12138.todo.R
import cn.super12138.todo.ToDoApplication
import cn.super12138.todo.logic.Repository
open class BaseActivity : AppCompatActivity() { open class BaseActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
val springFestivalTheme =
Repository.getPreferenceBoolean(ToDoApplication.context, "spring_festival_theme", false)
if (springFestivalTheme) {
setTheme(R.style.Theme_SpringFestival)
}
// enableEdgeToEdge() // enableEdgeToEdge()
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
// 适配刘海屏 // 适配刘海屏

View file

@ -4,8 +4,10 @@ import android.content.Intent
import android.net.Uri import android.net.Uri
import android.os.Build import android.os.Build
import android.os.Bundle import android.os.Bundle
import cn.super12138.todo.ToDoApplication
import cn.super12138.todo.constant.Constants import cn.super12138.todo.constant.Constants
import cn.super12138.todo.databinding.ActivityAboutBinding import cn.super12138.todo.databinding.ActivityAboutBinding
import cn.super12138.todo.logic.Repository
import cn.super12138.todo.views.BaseActivity import cn.super12138.todo.views.BaseActivity
import showToast import showToast
@ -59,6 +61,24 @@ class AboutActivity : BaseActivity() {
when (clickCount) { when (clickCount) {
5 -> { 5 -> {
clickCount = 0 clickCount = 0
val isSpringFestivalTheme = Repository.getPreferenceBoolean(
ToDoApplication.context,
"spring_festival_theme",
false
)
if (isSpringFestivalTheme) {
Repository.setPreference(
ToDoApplication.context,
"spring_festival_theme",
false
)
} else {
Repository.setPreference(
ToDoApplication.context,
"spring_festival_theme",
true
)
}
"🧧".showToast() "🧧".showToast()
} }
} }

View file

@ -5,21 +5,19 @@ import android.os.Process
import android.view.WindowManager import android.view.WindowManager
import androidx.appcompat.app.AlertDialog import androidx.appcompat.app.AlertDialog
import androidx.appcompat.app.AppCompatDelegate import androidx.appcompat.app.AppCompatDelegate
import androidx.lifecycle.ViewModelProvider
import androidx.lifecycle.lifecycleScope import androidx.lifecycle.lifecycleScope
import androidx.preference.ListPreference import androidx.preference.ListPreference
import androidx.preference.Preference import androidx.preference.Preference
import androidx.preference.PreferenceFragmentCompat import androidx.preference.PreferenceFragmentCompat
import androidx.preference.SwitchPreferenceCompat import androidx.preference.SwitchPreferenceCompat
import cn.super12138.todo.R import cn.super12138.todo.R
import cn.super12138.todo.ToDoApplication
import cn.super12138.todo.databinding.ActivitySettingsBinding import cn.super12138.todo.databinding.ActivitySettingsBinding
import cn.super12138.todo.databinding.DialogBackupBinding import cn.super12138.todo.databinding.DialogBackupBinding
import cn.super12138.todo.databinding.DialogRestoreBinding import cn.super12138.todo.databinding.DialogRestoreBinding
import cn.super12138.todo.logic.Repository import cn.super12138.todo.logic.Repository
import cn.super12138.todo.logic.dao.ToDoRoom import cn.super12138.todo.logic.dao.ToDoRoom
import cn.super12138.todo.views.BaseActivity import cn.super12138.todo.views.BaseActivity
import cn.super12138.todo.views.progress.ProgressFragmentViewModel
import cn.super12138.todo.views.todo.ToDoFragmentViewModel
import com.google.android.material.dialog.MaterialAlertDialogBuilder import com.google.android.material.dialog.MaterialAlertDialogBuilder
import com.google.android.material.snackbar.Snackbar import com.google.android.material.snackbar.Snackbar
import com.google.gson.Gson import com.google.gson.Gson
@ -56,10 +54,8 @@ class SettingsActivity : BaseActivity() {
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
setPreferencesFromResource(R.xml.preferences, rootKey) setPreferencesFromResource(R.xml.preferences, rootKey)
val gson = Gson() val gson = Gson()
val progressViewModel = val isDevMode =
ViewModelProvider(requireActivity()).get(ProgressFragmentViewModel::class.java) Repository.getPreferenceBoolean(ToDoApplication.context, "dev_mode", false)
val todoViewModel =
ViewModelProvider(requireActivity()).get(ToDoFragmentViewModel::class.java)
findPreference<ListPreference>("dark_mode")?.apply { findPreference<ListPreference>("dark_mode")?.apply {
setOnPreferenceChangeListener { preference, newValue -> setOnPreferenceChangeListener { preference, newValue ->
@ -161,8 +157,12 @@ class SettingsActivity : BaseActivity() {
restoreBinding.jsonInput.error = restoreBinding.jsonInput.error =
getString(R.string.json_data_incorrect) getString(R.string.json_data_incorrect)
} catch (e: Exception) { } catch (e: Exception) {
restoreBinding.jsonInput.error = if (isDevMode) {
getString(R.string.restore_failed) restoreBinding.jsonInput.error = e.toString()
} else {
restoreBinding.jsonInput.error =
getString(R.string.restore_failed)
}
} }
} }
} }

View file

@ -35,7 +35,7 @@ class ToDoAdapter(val todoList: MutableList<ToDo>, val viewModelStoreOwner: View
ViewModelProvider(viewModelStoreOwner).get(ToDoFragmentViewModel::class.java) ViewModelProvider(viewModelStoreOwner).get(ToDoFragmentViewModel::class.java)
val view = LayoutInflater.from(parent.context) val view = LayoutInflater.from(parent.context)
.inflate(R.layout.todo_item, parent, false) .inflate(R.layout.item_todo, parent, false)
val holder = ViewHolder(view) val holder = ViewHolder(view)
holder.checkToDoBtn.setOnClickListener { holder.checkToDoBtn.setOnClickListener {

View file

@ -21,6 +21,7 @@ import cn.super12138.todo.logic.model.ToDo
import cn.super12138.todo.views.progress.ProgressFragmentViewModel import cn.super12138.todo.views.progress.ProgressFragmentViewModel
import com.google.android.material.dialog.MaterialAlertDialogBuilder import com.google.android.material.dialog.MaterialAlertDialogBuilder
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import showToast
import java.util.UUID import java.util.UUID
class ToDoFragment : Fragment() { class ToDoFragment : Fragment() {
@ -95,44 +96,58 @@ class ToDoFragment : Fragment() {
ToDoDialogBinding.todoContent.error = ToDoDialogBinding.todoContent.error =
getString(R.string.content_cannot_be_empty) getString(R.string.content_cannot_be_empty)
} else { } else {
val randomUUID = UUID.randomUUID().toString() if (todoContent == "/DEV MODE") {
val todoSubject = when (ToDoDialogBinding.todoSubject.checkedChipId) { if (Repository.getPreferenceBoolean(
R.id.subject_chinese -> getString(R.string.subject_chinese) ToDoApplication.context,
R.id.subject_math -> getString(R.string.subject_math) "dev_mode",
R.id.subject_english -> getString(R.string.subject_english) true
R.id.subject_biology -> getString(R.string.subject_biology)
R.id.subject_geography -> getString(R.string.subject_geography)
R.id.subject_history -> getString(R.string.subject_history)
R.id.subject_physics -> getString(R.string.subject_physics)
R.id.subject_law -> getString(R.string.subject_law)
R.id.subject_other -> getString(R.string.subject_other)
else -> getString(R.string.subject_unknown)
}
// 显示RecyclerView
if (todoList.size + 1 > 0) {
todoViewModel.emptyTipVis.value = View.GONE
}
// 添加到RecyclerView
todoList.add(
ToDo(randomUUID, todoContent, todoSubject)
)
lifecycleScope.launch {
Repository.insert(
ToDoRoom(
randomUUID,
0,
todoSubject,
todoContent
) )
) ) {
progressViewModel.updateProgress() Repository.setPreference(ToDoApplication.context, "dev_mode", false)
} } else {
Repository.setPreference(ToDoApplication.context, "dev_mode", true)
"Dev Mode".showToast()
}
dialog.dismiss()
} else {
val randomUUID = UUID.randomUUID().toString()
val todoSubject = when (ToDoDialogBinding.todoSubject.checkedChipId) {
R.id.subject_chinese -> getString(R.string.subject_chinese)
R.id.subject_math -> getString(R.string.subject_math)
R.id.subject_english -> getString(R.string.subject_english)
R.id.subject_biology -> getString(R.string.subject_biology)
R.id.subject_geography -> getString(R.string.subject_geography)
R.id.subject_history -> getString(R.string.subject_history)
R.id.subject_physics -> getString(R.string.subject_physics)
R.id.subject_law -> getString(R.string.subject_law)
R.id.subject_other -> getString(R.string.subject_other)
else -> getString(R.string.subject_unknown)
}
binding.todoList.adapter?.notifyItemInserted(todoList.size + 1) // 显示RecyclerView
dialog.dismiss() if (todoList.size + 1 > 0) {
todoViewModel.emptyTipVis.value = View.GONE
}
// 添加到RecyclerView
todoList.add(
ToDo(randomUUID, todoContent, todoSubject)
)
lifecycleScope.launch {
Repository.insert(
ToDoRoom(
randomUUID,
0,
todoSubject,
todoContent
)
)
progressViewModel.updateProgress()
binding.todoList.adapter?.notifyItemInserted(todoList.size + 1)
dialog.dismiss()
}
}
} }
} }
} }

View file

@ -140,4 +140,147 @@
<color name="md_theme_surfaceContainer_highContrast">#1D2024</color> <color name="md_theme_surfaceContainer_highContrast">#1D2024</color>
<color name="md_theme_surfaceContainerHigh_highContrast">#272A2F</color> <color name="md_theme_surfaceContainerHigh_highContrast">#272A2F</color>
<color name="md_theme_surfaceContainerHighest_highContrast">#32353A</color> <color name="md_theme_surfaceContainerHighest_highContrast">#32353A</color>
<!-- Red -->
<color name="md_theme_red_primary">#FFB4A8</color>
<color name="md_theme_red_onPrimary">#690100</color>
<color name="md_theme_red_primaryContainer">#940100</color>
<color name="md_theme_red_onPrimaryContainer">#FFD8D2</color>
<color name="md_theme_red_secondary">#FFB4A8</color>
<color name="md_theme_red_onSecondary">#630F08</color>
<color name="md_theme_red_secondaryContainer">#751D13</color>
<color name="md_theme_red_onSecondaryContainer">#FFC3B9</color>
<color name="md_theme_red_tertiary">#F1BE6F</color>
<color name="md_theme_red_onTertiary">#442C00</color>
<color name="md_theme_red_tertiaryContainer">#614000</color>
<color name="md_theme_red_onTertiaryContainer">#FFDAA6</color>
<color name="md_theme_red_error">#FFB4AB</color>
<color name="md_theme_red_onError">#690005</color>
<color name="md_theme_red_errorContainer">#93000A</color>
<color name="md_theme_red_onErrorContainer">#FFDAD6</color>
<color name="md_theme_red_background">#1E0F0D</color>
<color name="md_theme_red_onBackground">#FADCD7</color>
<color name="md_theme_red_surface">#1E0F0D</color>
<color name="md_theme_red_onSurface">#FADCD7</color>
<color name="md_theme_red_surfaceVariant">#5C403B</color>
<color name="md_theme_red_onSurfaceVariant">#E5BEB7</color>
<color name="md_theme_red_outline">#AC8983</color>
<color name="md_theme_red_outlineVariant">#5C403B</color>
<color name="md_theme_red_scrim">#000000</color>
<color name="md_theme_red_inverseSurface">#FADCD7</color>
<color name="md_theme_red_inverseOnSurface">#3E2C29</color>
<color name="md_theme_red_inversePrimary">#BB190E</color>
<color name="md_theme_red_primaryFixed">#FFDAD4</color>
<color name="md_theme_red_onPrimaryFixed">#410000</color>
<color name="md_theme_red_primaryFixedDim">#FFB4A8</color>
<color name="md_theme_red_onPrimaryFixedVariant">#930100</color>
<color name="md_theme_red_secondaryFixed">#FFDAD4</color>
<color name="md_theme_red_onSecondaryFixed">#410000</color>
<color name="md_theme_red_secondaryFixedDim">#FFB4A8</color>
<color name="md_theme_red_onSecondaryFixedVariant">#82261B</color>
<color name="md_theme_red_tertiaryFixed">#FFDDAF</color>
<color name="md_theme_red_onTertiaryFixed">#281800</color>
<color name="md_theme_red_tertiaryFixedDim">#F1BE6F</color>
<color name="md_theme_red_onTertiaryFixedVariant">#614000</color>
<color name="md_theme_red_surfaceDim">#1E0F0D</color>
<color name="md_theme_red_surfaceBright">#483531</color>
<color name="md_theme_red_surfaceContainerLowest">#190A08</color>
<color name="md_theme_red_surfaceContainerLow">#281715</color>
<color name="md_theme_red_surfaceContainer">#2C1B19</color>
<color name="md_theme_red_surfaceContainerHigh">#372623</color>
<color name="md_theme_red_surfaceContainerHighest">#43302D</color>
<color name="md_theme_red_primary_mediumContrast">#FFBAAF</color>
<color name="md_theme_red_onPrimary_mediumContrast">#370000</color>
<color name="md_theme_red_primaryContainer_mediumContrast">#FF5540</color>
<color name="md_theme_red_onPrimaryContainer_mediumContrast">#000000</color>
<color name="md_theme_red_secondary_mediumContrast">#FFBAAF</color>
<color name="md_theme_red_onSecondary_mediumContrast">#370000</color>
<color name="md_theme_red_secondaryContainer_mediumContrast">#E26E5D</color>
<color name="md_theme_red_onSecondaryContainer_mediumContrast">#000000</color>
<color name="md_theme_red_tertiary_mediumContrast">#F6C273</color>
<color name="md_theme_red_onTertiary_mediumContrast">#211400</color>
<color name="md_theme_red_tertiaryContainer_mediumContrast">#B6893F</color>
<color name="md_theme_red_onTertiaryContainer_mediumContrast">#000000</color>
<color name="md_theme_red_error_mediumContrast">#FFBAB1</color>
<color name="md_theme_red_onError_mediumContrast">#370001</color>
<color name="md_theme_red_errorContainer_mediumContrast">#FF5449</color>
<color name="md_theme_red_onErrorContainer_mediumContrast">#000000</color>
<color name="md_theme_red_background_mediumContrast">#1E0F0D</color>
<color name="md_theme_red_onBackground_mediumContrast">#FADCD7</color>
<color name="md_theme_red_surface_mediumContrast">#1E0F0D</color>
<color name="md_theme_red_onSurface_mediumContrast">#FFF9F8</color>
<color name="md_theme_red_surfaceVariant_mediumContrast">#5C403B</color>
<color name="md_theme_red_onSurfaceVariant_mediumContrast">#E9C2BB</color>
<color name="md_theme_red_outline_mediumContrast">#BF9A95</color>
<color name="md_theme_red_outlineVariant_mediumContrast">#9D7B76</color>
<color name="md_theme_red_scrim_mediumContrast">#000000</color>
<color name="md_theme_red_inverseSurface_mediumContrast">#FADCD7</color>
<color name="md_theme_red_inverseOnSurface_mediumContrast">#372623</color>
<color name="md_theme_red_inversePrimary_mediumContrast">#950100</color>
<color name="md_theme_red_primaryFixed_mediumContrast">#FFDAD4</color>
<color name="md_theme_red_onPrimaryFixed_mediumContrast">#2D0000</color>
<color name="md_theme_red_primaryFixedDim_mediumContrast">#FFB4A8</color>
<color name="md_theme_red_onPrimaryFixedVariant_mediumContrast">#740100</color>
<color name="md_theme_red_secondaryFixed_mediumContrast">#FFDAD4</color>
<color name="md_theme_red_onSecondaryFixed_mediumContrast">#2D0000</color>
<color name="md_theme_red_secondaryFixedDim_mediumContrast">#FFB4A8</color>
<color name="md_theme_red_onSecondaryFixedVariant_mediumContrast">#6B150D</color>
<color name="md_theme_red_tertiaryFixed_mediumContrast">#FFDDAF</color>
<color name="md_theme_red_onTertiaryFixed_mediumContrast">#1B0F00</color>
<color name="md_theme_red_tertiaryFixedDim_mediumContrast">#F1BE6F</color>
<color name="md_theme_red_onTertiaryFixedVariant_mediumContrast">#4B3100</color>
<color name="md_theme_red_surfaceDim_mediumContrast">#1E0F0D</color>
<color name="md_theme_red_surfaceBright_mediumContrast">#483531</color>
<color name="md_theme_red_surfaceContainerLowest_mediumContrast">#190A08</color>
<color name="md_theme_red_surfaceContainerLow_mediumContrast">#281715</color>
<color name="md_theme_red_surfaceContainer_mediumContrast">#2C1B19</color>
<color name="md_theme_red_surfaceContainerHigh_mediumContrast">#372623</color>
<color name="md_theme_red_surfaceContainerHighest_mediumContrast">#43302D</color>
<color name="md_theme_red_primary_highContrast">#FFF9F8</color>
<color name="md_theme_red_onPrimary_highContrast">#000000</color>
<color name="md_theme_red_primaryContainer_highContrast">#FFBAAF</color>
<color name="md_theme_red_onPrimaryContainer_highContrast">#000000</color>
<color name="md_theme_red_secondary_highContrast">#FFF9F8</color>
<color name="md_theme_red_onSecondary_highContrast">#000000</color>
<color name="md_theme_red_secondaryContainer_highContrast">#FFBAAF</color>
<color name="md_theme_red_onSecondaryContainer_highContrast">#000000</color>
<color name="md_theme_red_tertiary_highContrast">#FFFAF7</color>
<color name="md_theme_red_onTertiary_highContrast">#000000</color>
<color name="md_theme_red_tertiaryContainer_highContrast">#F6C273</color>
<color name="md_theme_red_onTertiaryContainer_highContrast">#000000</color>
<color name="md_theme_red_error_highContrast">#FFF9F9</color>
<color name="md_theme_red_onError_highContrast">#000000</color>
<color name="md_theme_red_errorContainer_highContrast">#FFBAB1</color>
<color name="md_theme_red_onErrorContainer_highContrast">#000000</color>
<color name="md_theme_red_background_highContrast">#1E0F0D</color>
<color name="md_theme_red_onBackground_highContrast">#FADCD7</color>
<color name="md_theme_red_surface_highContrast">#1E0F0D</color>
<color name="md_theme_red_onSurface_highContrast">#FFFFFF</color>
<color name="md_theme_red_surfaceVariant_highContrast">#5C403B</color>
<color name="md_theme_red_onSurfaceVariant_highContrast">#FFF9F8</color>
<color name="md_theme_red_outline_highContrast">#E9C2BB</color>
<color name="md_theme_red_outlineVariant_highContrast">#E9C2BB</color>
<color name="md_theme_red_scrim_highContrast">#000000</color>
<color name="md_theme_red_inverseSurface_highContrast">#FADCD7</color>
<color name="md_theme_red_inverseOnSurface_highContrast">#000000</color>
<color name="md_theme_red_inversePrimary_highContrast">#5C0000</color>
<color name="md_theme_red_primaryFixed_highContrast">#FFE0DB</color>
<color name="md_theme_red_onPrimaryFixed_highContrast">#000000</color>
<color name="md_theme_red_primaryFixedDim_highContrast">#FFBAAF</color>
<color name="md_theme_red_onPrimaryFixedVariant_highContrast">#370000</color>
<color name="md_theme_red_secondaryFixed_highContrast">#FFE0DB</color>
<color name="md_theme_red_onSecondaryFixed_highContrast">#000000</color>
<color name="md_theme_red_secondaryFixedDim_highContrast">#FFBAAF</color>
<color name="md_theme_red_onSecondaryFixedVariant_highContrast">#370000</color>
<color name="md_theme_red_tertiaryFixed_highContrast">#FFE3BD</color>
<color name="md_theme_red_onTertiaryFixed_highContrast">#000000</color>
<color name="md_theme_red_tertiaryFixedDim_highContrast">#F6C273</color>
<color name="md_theme_red_onTertiaryFixedVariant_highContrast">#211400</color>
<color name="md_theme_red_surfaceDim_highContrast">#1E0F0D</color>
<color name="md_theme_red_surfaceBright_highContrast">#483531</color>
<color name="md_theme_red_surfaceContainerLowest_highContrast">#190A08</color>
<color name="md_theme_red_surfaceContainerLow_highContrast">#281715</color>
<color name="md_theme_red_surfaceContainer_highContrast">#2C1B19</color>
<color name="md_theme_red_surfaceContainerHigh_highContrast">#372623</color>
<color name="md_theme_red_surfaceContainerHighest_highContrast">#43302D</color>
</resources> </resources>

View file

@ -51,4 +51,56 @@
<item name="preferenceTheme">@style/AppPreferenceThemeOverlay</item> <item name="preferenceTheme">@style/AppPreferenceThemeOverlay</item>
<item name="alertDialogTheme">@style/ToDo.M3AlertDialog</item> <item name="alertDialogTheme">@style/ToDo.M3AlertDialog</item>
</style> </style>
<style name="Base.Theme.SpringFestival" parent="Theme.Material3.Dark.NoActionBar">
<item name="colorPrimary">@color/md_theme_red_primary</item>
<item name="colorOnPrimary">@color/md_theme_red_onPrimary</item>
<item name="colorPrimaryContainer">@color/md_theme_red_primaryContainer</item>
<item name="colorOnPrimaryContainer">@color/md_theme_red_onPrimaryContainer</item>
<item name="colorSecondary">@color/md_theme_red_secondary</item>
<item name="colorOnSecondary">@color/md_theme_red_onSecondary</item>
<item name="colorSecondaryContainer">@color/md_theme_red_secondaryContainer</item>
<item name="colorOnSecondaryContainer">@color/md_theme_red_onSecondaryContainer</item>
<item name="colorTertiary">@color/md_theme_red_tertiary</item>
<item name="colorOnTertiary">@color/md_theme_red_onTertiary</item>
<item name="colorTertiaryContainer">@color/md_theme_red_tertiaryContainer</item>
<item name="colorOnTertiaryContainer">@color/md_theme_red_onTertiaryContainer</item>
<item name="colorError">@color/md_theme_red_error</item>
<item name="colorOnError">@color/md_theme_red_onError</item>
<item name="colorErrorContainer">@color/md_theme_red_errorContainer</item>
<item name="colorOnErrorContainer">@color/md_theme_red_onErrorContainer</item>
<item name="android:colorBackground">@color/md_theme_red_background</item>
<item name="colorOnBackground">@color/md_theme_red_onBackground</item>
<item name="colorSurface">@color/md_theme_red_surface</item>
<item name="colorOnSurface">@color/md_theme_red_onSurface</item>
<item name="colorSurfaceVariant">@color/md_theme_red_surfaceVariant</item>
<item name="colorOnSurfaceVariant">@color/md_theme_red_onSurfaceVariant</item>
<item name="colorOutline">@color/md_theme_red_outline</item>
<item name="colorOutlineVariant">@color/md_theme_red_outlineVariant</item>
<item name="colorSurfaceInverse">@color/md_theme_red_inverseSurface</item>
<item name="colorOnSurfaceInverse">@color/md_theme_red_inverseOnSurface</item>
<item name="colorPrimaryInverse">@color/md_theme_red_inversePrimary</item>
<item name="colorPrimaryFixed">@color/md_theme_red_primaryFixed</item>
<item name="colorOnPrimaryFixed">@color/md_theme_red_onPrimaryFixed</item>
<item name="colorPrimaryFixedDim">@color/md_theme_red_primaryFixedDim</item>
<item name="colorOnPrimaryFixedVariant">@color/md_theme_red_onPrimaryFixedVariant</item>
<item name="colorSecondaryFixed">@color/md_theme_red_secondaryFixed</item>
<item name="colorOnSecondaryFixed">@color/md_theme_red_onSecondaryFixed</item>
<item name="colorSecondaryFixedDim">@color/md_theme_red_secondaryFixedDim</item>
<item name="colorOnSecondaryFixedVariant">@color/md_theme_red_onSecondaryFixedVariant</item>
<item name="colorTertiaryFixed">@color/md_theme_red_tertiaryFixed</item>
<item name="colorOnTertiaryFixed">@color/md_theme_red_onTertiaryFixed</item>
<item name="colorTertiaryFixedDim">@color/md_theme_red_tertiaryFixedDim</item>
<item name="colorOnTertiaryFixedVariant">@color/md_theme_red_onTertiaryFixedVariant</item>
<item name="colorSurfaceDim">@color/md_theme_red_surfaceDim</item>
<item name="colorSurfaceBright">@color/md_theme_red_surfaceBright</item>
<item name="colorSurfaceContainerLowest">@color/md_theme_red_surfaceContainerLowest</item>
<item name="colorSurfaceContainerLow">@color/md_theme_red_surfaceContainerLow</item>
<item name="colorSurfaceContainer">@color/md_theme_red_surfaceContainer</item>
<item name="colorSurfaceContainerHigh">@color/md_theme_red_surfaceContainerHigh</item>
<item name="colorSurfaceContainerHighest">@color/md_theme_red_surfaceContainerHighest</item>
<item name="preferenceTheme">@style/AppPreferenceThemeOverlay</item>
<item name="alertDialogTheme">@style/ToDo.M3AlertDialog</item>
</style>
</resources> </resources>

View file

@ -6,4 +6,10 @@
<item name="android:statusBarColor">@android:color/transparent</item> <item name="android:statusBarColor">@android:color/transparent</item>
<item name="android:windowLightStatusBar">?attr/isLightTheme</item> <item name="android:windowLightStatusBar">?attr/isLightTheme</item>
</style> </style>
<style name="Theme.SpringFestival" parent="Base.Theme.SpringFestival">
<!-- Transparent system bars for edge-to-edge. -->
<item name="android:navigationBarColor">@android:color/transparent</item>
<item name="android:statusBarColor">@android:color/transparent</item>
<item name="android:windowLightStatusBar">?attr/isLightTheme</item>
</style>
</resources> </resources>

View file

@ -144,4 +144,146 @@
<color name="md_theme_surfaceContainer_highContrast">#ECEEF4</color> <color name="md_theme_surfaceContainer_highContrast">#ECEEF4</color>
<color name="md_theme_surfaceContainerHigh_highContrast">#E6E8EE</color> <color name="md_theme_surfaceContainerHigh_highContrast">#E6E8EE</color>
<color name="md_theme_surfaceContainerHighest_highContrast">#E1E2E8</color> <color name="md_theme_surfaceContainerHighest_highContrast">#E1E2E8</color>
<!-- Red -->
<color name="md_theme_red_primary">#7E0100</color>
<color name="md_theme_red_onPrimary">#FFFFFF</color>
<color name="md_theme_red_primaryContainer">#BB1A0E</color>
<color name="md_theme_red_onPrimaryContainer">#FFFFFF</color>
<color name="md_theme_red_secondary">#A23E30</color>
<color name="md_theme_red_onSecondary">#FFFFFF</color>
<color name="md_theme_red_secondaryContainer">#FF9281</color>
<color name="md_theme_red_onSecondaryContainer">#520201</color>
<color name="md_theme_red_tertiary">#533700</color>
<color name="md_theme_red_onTertiary">#FFFFFF</color>
<color name="md_theme_red_tertiaryContainer">#7E5811</color>
<color name="md_theme_red_onTertiaryContainer">#FFFFFF</color>
<color name="md_theme_red_error">#BA1A1A</color>
<color name="md_theme_red_onError">#FFFFFF</color>
<color name="md_theme_red_errorContainer">#FFDAD6</color>
<color name="md_theme_red_onErrorContainer">#410002</color>
<color name="md_theme_red_background">#FFF8F6</color>
<color name="md_theme_red_onBackground">#281715</color>
<color name="md_theme_red_surface">#FFF8F6</color>
<color name="md_theme_red_onSurface">#281715</color>
<color name="md_theme_red_surfaceVariant">#FFDAD4</color>
<color name="md_theme_red_onSurfaceVariant">#5C403B</color>
<color name="md_theme_red_outline">#906F6A</color>
<color name="md_theme_red_outlineVariant">#E5BEB7</color>
<color name="md_theme_red_scrim">#000000</color>
<color name="md_theme_red_inverseSurface">#3E2C29</color>
<color name="md_theme_red_inverseOnSurface">#FFEDEA</color>
<color name="md_theme_red_inversePrimary">#FFB4A8</color>
<color name="md_theme_red_primaryFixed">#FFDAD4</color>
<color name="md_theme_red_onPrimaryFixed">#410000</color>
<color name="md_theme_red_primaryFixedDim">#FFB4A8</color>
<color name="md_theme_red_onPrimaryFixedVariant">#930100</color>
<color name="md_theme_red_secondaryFixed">#FFDAD4</color>
<color name="md_theme_red_onSecondaryFixed">#410000</color>
<color name="md_theme_red_secondaryFixedDim">#FFB4A8</color>
<color name="md_theme_red_onSecondaryFixedVariant">#82261B</color>
<color name="md_theme_red_tertiaryFixed">#FFDDAF</color>
<color name="md_theme_red_onTertiaryFixed">#281800</color>
<color name="md_theme_red_tertiaryFixedDim">#F1BE6F</color>
<color name="md_theme_red_onTertiaryFixedVariant">#614000</color>
<color name="md_theme_red_surfaceDim">#F1D3CE</color>
<color name="md_theme_red_surfaceBright">#FFF8F6</color>
<color name="md_theme_red_surfaceContainerLowest">#FFFFFF</color>
<color name="md_theme_red_surfaceContainerLow">#FFF0EE</color>
<color name="md_theme_red_surfaceContainer">#FFE9E6</color>
<color name="md_theme_red_surfaceContainerHigh">#FFE2DD</color>
<color name="md_theme_red_surfaceContainerHighest">#FADCD7</color>
<color name="md_theme_red_primary_mediumContrast">#7E0100</color>
<color name="md_theme_red_onPrimary_mediumContrast">#FFFFFF</color>
<color name="md_theme_red_primaryContainer_mediumContrast">#BB1A0E</color>
<color name="md_theme_red_onPrimaryContainer_mediumContrast">#FFFFFF</color>
<color name="md_theme_red_secondary_mediumContrast">#7D2318</color>
<color name="md_theme_red_onSecondary_mediumContrast">#FFFFFF</color>
<color name="md_theme_red_secondaryContainer_mediumContrast">#BF5344</color>
<color name="md_theme_red_onSecondaryContainer_mediumContrast">#FFFFFF</color>
<color name="md_theme_red_tertiary_mediumContrast">#533700</color>
<color name="md_theme_red_onTertiary_mediumContrast">#FFFFFF</color>
<color name="md_theme_red_tertiaryContainer_mediumContrast">#7E5811</color>
<color name="md_theme_red_onTertiaryContainer_mediumContrast">#FFFFFF</color>
<color name="md_theme_red_error_mediumContrast">#8C0009</color>
<color name="md_theme_red_onError_mediumContrast">#FFFFFF</color>
<color name="md_theme_red_errorContainer_mediumContrast">#DA342E</color>
<color name="md_theme_red_onErrorContainer_mediumContrast">#FFFFFF</color>
<color name="md_theme_red_background_mediumContrast">#FFF8F6</color>
<color name="md_theme_red_onBackground_mediumContrast">#281715</color>
<color name="md_theme_red_surface_mediumContrast">#FFF8F6</color>
<color name="md_theme_red_onSurface_mediumContrast">#281715</color>
<color name="md_theme_red_surfaceVariant_mediumContrast">#FFDAD4</color>
<color name="md_theme_red_onSurfaceVariant_mediumContrast">#573C38</color>
<color name="md_theme_red_outline_mediumContrast">#765853</color>
<color name="md_theme_red_outlineVariant_mediumContrast">#94736E</color>
<color name="md_theme_red_scrim_mediumContrast">#000000</color>
<color name="md_theme_red_inverseSurface_mediumContrast">#3E2C29</color>
<color name="md_theme_red_inverseOnSurface_mediumContrast">#FFEDEA</color>
<color name="md_theme_red_inversePrimary_mediumContrast">#FFB4A8</color>
<color name="md_theme_red_primaryFixed_mediumContrast">#DB3323</color>
<color name="md_theme_red_onPrimaryFixed_mediumContrast">#FFFFFF</color>
<color name="md_theme_red_primaryFixedDim_mediumContrast">#B7160B</color>
<color name="md_theme_red_onPrimaryFixedVariant_mediumContrast">#FFFFFF</color>
<color name="md_theme_red_secondaryFixed_mediumContrast">#BF5344</color>
<color name="md_theme_red_onSecondaryFixed_mediumContrast">#FFFFFF</color>
<color name="md_theme_red_secondaryFixedDim_mediumContrast">#9E3B2E</color>
<color name="md_theme_red_onSecondaryFixedVariant_mediumContrast">#FFFFFF</color>
<color name="md_theme_red_tertiaryFixed_mediumContrast">#966D26</color>
<color name="md_theme_red_onTertiaryFixed_mediumContrast">#FFFFFF</color>
<color name="md_theme_red_tertiaryFixedDim_mediumContrast">#7B550D</color>
<color name="md_theme_red_onTertiaryFixedVariant_mediumContrast">#FFFFFF</color>
<color name="md_theme_red_surfaceDim_mediumContrast">#F1D3CE</color>
<color name="md_theme_red_surfaceBright_mediumContrast">#FFF8F6</color>
<color name="md_theme_red_surfaceContainerLowest_mediumContrast">#FFFFFF</color>
<color name="md_theme_red_surfaceContainerLow_mediumContrast">#FFF0EE</color>
<color name="md_theme_red_surfaceContainer_mediumContrast">#FFE9E6</color>
<color name="md_theme_red_surfaceContainerHigh_mediumContrast">#FFE2DD</color>
<color name="md_theme_red_surfaceContainerHighest_mediumContrast">#FADCD7</color>
<color name="md_theme_red_primary_highContrast">#4E0000</color>
<color name="md_theme_red_onPrimary_highContrast">#FFFFFF</color>
<color name="md_theme_red_primaryContainer_highContrast">#8C0100</color>
<color name="md_theme_red_onPrimaryContainer_highContrast">#FFFFFF</color>
<color name="md_theme_red_secondary_highContrast">#4E0000</color>
<color name="md_theme_red_onSecondary_highContrast">#FFFFFF</color>
<color name="md_theme_red_secondaryContainer_highContrast">#7D2318</color>
<color name="md_theme_red_onSecondaryContainer_highContrast">#FFFFFF</color>
<color name="md_theme_red_tertiary_highContrast">#311F00</color>
<color name="md_theme_red_onTertiary_highContrast">#FFFFFF</color>
<color name="md_theme_red_tertiaryContainer_highContrast">#5C3D00</color>
<color name="md_theme_red_onTertiaryContainer_highContrast">#FFFFFF</color>
<color name="md_theme_red_error_highContrast">#4E0002</color>
<color name="md_theme_red_onError_highContrast">#FFFFFF</color>
<color name="md_theme_red_errorContainer_highContrast">#8C0009</color>
<color name="md_theme_red_onErrorContainer_highContrast">#FFFFFF</color>
<color name="md_theme_red_background_highContrast">#FFF8F6</color>
<color name="md_theme_red_onBackground_highContrast">#281715</color>
<color name="md_theme_red_surface_highContrast">#FFF8F6</color>
<color name="md_theme_red_onSurface_highContrast">#000000</color>
<color name="md_theme_red_surfaceVariant_highContrast">#FFDAD4</color>
<color name="md_theme_red_onSurfaceVariant_highContrast">#351E1A</color>
<color name="md_theme_red_outline_highContrast">#573C38</color>
<color name="md_theme_red_outlineVariant_highContrast">#573C38</color>
<color name="md_theme_red_scrim_highContrast">#000000</color>
<color name="md_theme_red_inverseSurface_highContrast">#3E2C29</color>
<color name="md_theme_red_inverseOnSurface_highContrast">#FFFFFF</color>
<color name="md_theme_red_inversePrimary_highContrast">#FFE7E3</color>
<color name="md_theme_red_primaryFixed_highContrast">#8C0100</color>
<color name="md_theme_red_onPrimaryFixed_highContrast">#FFFFFF</color>
<color name="md_theme_red_primaryFixedDim_highContrast">#620100</color>
<color name="md_theme_red_onPrimaryFixedVariant_highContrast">#FFFFFF</color>
<color name="md_theme_red_secondaryFixed_highContrast">#7D2318</color>
<color name="md_theme_red_onSecondaryFixed_highContrast">#FFFFFF</color>
<color name="md_theme_red_secondaryFixedDim_highContrast">#5D0B05</color>
<color name="md_theme_red_onSecondaryFixedVariant_highContrast">#FFFFFF</color>
<color name="md_theme_red_tertiaryFixed_highContrast">#5C3D00</color>
<color name="md_theme_red_onTertiaryFixed_highContrast">#FFFFFF</color>
<color name="md_theme_red_tertiaryFixedDim_highContrast">#3F2800</color>
<color name="md_theme_red_onTertiaryFixedVariant_highContrast">#FFFFFF</color>
<color name="md_theme_red_surfaceDim_highContrast">#F1D3CE</color>
<color name="md_theme_red_surfaceBright_highContrast">#FFF8F6</color>
<color name="md_theme_red_surfaceContainerLowest_highContrast">#FFFFFF</color>
<color name="md_theme_red_surfaceContainerLow_highContrast">#FFF0EE</color>
<color name="md_theme_red_surfaceContainer_highContrast">#FFE9E6</color>
<color name="md_theme_red_surfaceContainerHigh_highContrast">#FFE2DD</color>
<color name="md_theme_red_surfaceContainerHighest_highContrast">#FADCD7</color>
</resources> </resources>

View file

@ -68,4 +68,56 @@
<item name="android:colorBackground">?attr/colorSurfaceContainerHigh</item> <item name="android:colorBackground">?attr/colorSurfaceContainerHigh</item>
<item name="android:layout">@layout/m3_alert_dialog</item> <item name="android:layout">@layout/m3_alert_dialog</item>
</style> </style>
<style name="Base.Theme.SpringFestival" parent="Theme.Material3.Light.NoActionBar">
<item name="colorPrimary">@color/md_theme_red_primary</item>
<item name="colorOnPrimary">@color/md_theme_red_onPrimary</item>
<item name="colorPrimaryContainer">@color/md_theme_red_primaryContainer</item>
<item name="colorOnPrimaryContainer">@color/md_theme_red_onPrimaryContainer</item>
<item name="colorSecondary">@color/md_theme_red_secondary</item>
<item name="colorOnSecondary">@color/md_theme_red_onSecondary</item>
<item name="colorSecondaryContainer">@color/md_theme_red_secondaryContainer</item>
<item name="colorOnSecondaryContainer">@color/md_theme_red_onSecondaryContainer</item>
<item name="colorTertiary">@color/md_theme_red_tertiary</item>
<item name="colorOnTertiary">@color/md_theme_red_onTertiary</item>
<item name="colorTertiaryContainer">@color/md_theme_red_tertiaryContainer</item>
<item name="colorOnTertiaryContainer">@color/md_theme_red_onTertiaryContainer</item>
<item name="colorError">@color/md_theme_red_error</item>
<item name="colorOnError">@color/md_theme_red_onError</item>
<item name="colorErrorContainer">@color/md_theme_red_errorContainer</item>
<item name="colorOnErrorContainer">@color/md_theme_red_onErrorContainer</item>
<item name="android:colorBackground">@color/md_theme_red_background</item>
<item name="colorOnBackground">@color/md_theme_red_onBackground</item>
<item name="colorSurface">@color/md_theme_red_surface</item>
<item name="colorOnSurface">@color/md_theme_red_onSurface</item>
<item name="colorSurfaceVariant">@color/md_theme_red_surfaceVariant</item>
<item name="colorOnSurfaceVariant">@color/md_theme_red_onSurfaceVariant</item>
<item name="colorOutline">@color/md_theme_red_outline</item>
<item name="colorOutlineVariant">@color/md_theme_red_outlineVariant</item>
<item name="colorSurfaceInverse">@color/md_theme_red_inverseSurface</item>
<item name="colorOnSurfaceInverse">@color/md_theme_red_inverseOnSurface</item>
<item name="colorPrimaryInverse">@color/md_theme_red_inversePrimary</item>
<item name="colorPrimaryFixed">@color/md_theme_red_primaryFixed</item>
<item name="colorOnPrimaryFixed">@color/md_theme_red_onPrimaryFixed</item>
<item name="colorPrimaryFixedDim">@color/md_theme_red_primaryFixedDim</item>
<item name="colorOnPrimaryFixedVariant">@color/md_theme_red_onPrimaryFixedVariant</item>
<item name="colorSecondaryFixed">@color/md_theme_red_secondaryFixed</item>
<item name="colorOnSecondaryFixed">@color/md_theme_red_onSecondaryFixed</item>
<item name="colorSecondaryFixedDim">@color/md_theme_red_secondaryFixedDim</item>
<item name="colorOnSecondaryFixedVariant">@color/md_theme_red_onSecondaryFixedVariant</item>
<item name="colorTertiaryFixed">@color/md_theme_red_tertiaryFixed</item>
<item name="colorOnTertiaryFixed">@color/md_theme_red_onTertiaryFixed</item>
<item name="colorTertiaryFixedDim">@color/md_theme_red_tertiaryFixedDim</item>
<item name="colorOnTertiaryFixedVariant">@color/md_theme_red_onTertiaryFixedVariant</item>
<item name="colorSurfaceDim">@color/md_theme_red_surfaceDim</item>
<item name="colorSurfaceBright">@color/md_theme_red_surfaceBright</item>
<item name="colorSurfaceContainerLowest">@color/md_theme_red_surfaceContainerLowest</item>
<item name="colorSurfaceContainerLow">@color/md_theme_red_surfaceContainerLow</item>
<item name="colorSurfaceContainer">@color/md_theme_red_surfaceContainer</item>
<item name="colorSurfaceContainerHigh">@color/md_theme_red_surfaceContainerHigh</item>
<item name="colorSurfaceContainerHighest">@color/md_theme_red_surfaceContainerHighest</item>
<item name="preferenceTheme">@style/AppPreferenceThemeOverlay</item>
<item name="alertDialogTheme">@style/ToDo.M3AlertDialog</item>
</style>
</resources> </resources>