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.
#-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 { *; }

View file

@ -8,6 +8,12 @@ import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.withContext
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 */)
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.view.WindowManager
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() {
override fun onCreate(savedInstanceState: Bundle?) {
val springFestivalTheme =
Repository.getPreferenceBoolean(ToDoApplication.context, "spring_festival_theme", false)
if (springFestivalTheme) {
setTheme(R.style.Theme_SpringFestival)
}
// enableEdgeToEdge()
super.onCreate(savedInstanceState)
// 适配刘海屏

View file

@ -4,8 +4,10 @@ import android.content.Intent
import android.net.Uri
import android.os.Build
import android.os.Bundle
import cn.super12138.todo.ToDoApplication
import cn.super12138.todo.constant.Constants
import cn.super12138.todo.databinding.ActivityAboutBinding
import cn.super12138.todo.logic.Repository
import cn.super12138.todo.views.BaseActivity
import showToast
@ -59,6 +61,24 @@ class AboutActivity : BaseActivity() {
when (clickCount) {
5 -> {
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()
}
}

View file

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

View file

@ -21,6 +21,7 @@ import cn.super12138.todo.logic.model.ToDo
import cn.super12138.todo.views.progress.ProgressFragmentViewModel
import com.google.android.material.dialog.MaterialAlertDialogBuilder
import kotlinx.coroutines.launch
import showToast
import java.util.UUID
class ToDoFragment : Fragment() {
@ -95,44 +96,58 @@ class ToDoFragment : Fragment() {
ToDoDialogBinding.todoContent.error =
getString(R.string.content_cannot_be_empty)
} 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)
}
// 显示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
if (todoContent == "/DEV MODE") {
if (Repository.getPreferenceBoolean(
ToDoApplication.context,
"dev_mode",
true
)
)
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)
dialog.dismiss()
// 显示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()
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_surfaceContainerHigh_highContrast">#272A2F</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>

View file

@ -51,4 +51,56 @@
<item name="preferenceTheme">@style/AppPreferenceThemeOverlay</item>
<item name="alertDialogTheme">@style/ToDo.M3AlertDialog</item>
</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>

View file

@ -6,4 +6,10 @@
<item name="android:statusBarColor">@android:color/transparent</item>
<item name="android:windowLightStatusBar">?attr/isLightTheme</item>
</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>

View file

@ -144,4 +144,146 @@
<color name="md_theme_surfaceContainer_highContrast">#ECEEF4</color>
<color name="md_theme_surfaceContainerHigh_highContrast">#E6E8EE</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>

View file

@ -68,4 +68,56 @@
<item name="android:colorBackground">?attr/colorSurfaceContainerHigh</item>
<item name="android:layout">@layout/m3_alert_dialog</item>
</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>