Add new settings and add animation of list

This commit is contained in:
Super12138 2024-01-11 21:03:44 +08:00
parent c61255f1ad
commit 8f88809e5f
12 changed files with 138 additions and 12 deletions

View file

@ -0,0 +1,52 @@
{
"formatVersion": 1,
"database": {
"version": 1,
"identityHash": "bf23f9a3f857e7cfe28dce9eb1657534",
"entities": [
{
"tableName": "todo",
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`uuid` TEXT NOT NULL, `state` INTEGER NOT NULL, `subject` TEXT NOT NULL, `content` TEXT NOT NULL, PRIMARY KEY(`uuid`))",
"fields": [
{
"fieldPath": "uuid",
"columnName": "uuid",
"affinity": "TEXT",
"notNull": true
},
{
"fieldPath": "state",
"columnName": "state",
"affinity": "INTEGER",
"notNull": true
},
{
"fieldPath": "subject",
"columnName": "subject",
"affinity": "TEXT",
"notNull": true
},
{
"fieldPath": "content",
"columnName": "content",
"affinity": "TEXT",
"notNull": true
}
],
"primaryKey": {
"autoGenerate": false,
"columnNames": [
"uuid"
]
},
"indices": [],
"foreignKeys": []
}
],
"views": [],
"setupQueries": [
"CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)",
"INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, 'bf23f9a3f857e7cfe28dce9eb1657534')"
]
}
}

View file

@ -14,6 +14,13 @@ object Repository {
fun getPreferenceString(context: Context, key: String, defaultValue: String) = fun getPreferenceString(context: Context, key: String, defaultValue: String) =
SPHelper.getPreferenceString(context, key, defaultValue) SPHelper.getPreferenceString(context, key, defaultValue)
/**
* 获取应用设置的布尔值
*/
fun getPreferenceBoolean(context: Context, key: String, defaultValue: Boolean) =
SPHelper.getPreferenceBoolean(context, key, defaultValue)
// Room // Room
private val db get() = ToDoApplication.db private val db get() = ToDoApplication.db
val todoDao = db.toDoRoomDao() val todoDao = db.toDoRoomDao()

View file

@ -9,4 +9,9 @@ object SPHelper {
PreferenceManager.getDefaultSharedPreferences(context /* Activity context */) PreferenceManager.getDefaultSharedPreferences(context /* Activity context */)
return sharedPreferences.getString(name, defaultValue) return sharedPreferences.getString(name, defaultValue)
} }
fun getPreferenceBoolean(context: Context, name: String, defaultValue: Boolean): Boolean? {
val sharedPreferences =
PreferenceManager.getDefaultSharedPreferences(context /* Activity context */)
return sharedPreferences.getBoolean(name, defaultValue)
}
} }

View file

@ -1,3 +1,5 @@
package cn.super12138.todo.logic.model package cn.super12138.todo.logic.model
data class ToDo(val uuid: String, val content: String, val subject: String) data class ToDo(val uuid: String, val content: String, val subject: String){
var isAnimated = false
}

View file

@ -56,10 +56,11 @@ class AboutActivity : BaseActivity() {
binding.appVersion.setOnClickListener { binding.appVersion.setOnClickListener {
clickCount++ clickCount++
when (clickCount) {
if (clickCount == 5) { 5 -> {
clickCount = 0 clickCount = 0
"🧧".showToast() "🧧".showToast()
}
} }
} }
} }

View file

@ -2,6 +2,7 @@ package cn.super12138.todo.views.main
// 2023.11.18立项 // 2023.11.18立项
import android.content.Intent import android.content.Intent
import android.os.Bundle import android.os.Bundle
import android.view.WindowManager
import androidx.appcompat.app.AppCompatDelegate import androidx.appcompat.app.AppCompatDelegate
import cn.super12138.todo.R import cn.super12138.todo.R
import cn.super12138.todo.ToDoApplication import cn.super12138.todo.ToDoApplication
@ -48,6 +49,7 @@ class MainActivity : BaseActivity() {
}*/ }*/
val isDarkMode = Repository.getPreferenceString(this, "dark_mode", "0") val isDarkMode = Repository.getPreferenceString(this, "dark_mode", "0")
val isSecureMode = Repository.getPreferenceBoolean(this, "secure_mode", false)
when (isDarkMode) { when (isDarkMode) {
"0" -> AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM) "0" -> AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM)
@ -55,5 +57,14 @@ class MainActivity : BaseActivity() {
"2" -> AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO) "2" -> AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO)
} }
when (isSecureMode) {
true -> window.setFlags(
WindowManager.LayoutParams.FLAG_SECURE,
WindowManager.LayoutParams.FLAG_SECURE
)
false -> window.clearFlags(WindowManager.LayoutParams.FLAG_SECURE)
else -> window.clearFlags(WindowManager.LayoutParams.FLAG_SECURE)
}
} }
} }

View file

@ -1,12 +1,17 @@
package cn.super12138.todo.views.settings package cn.super12138.todo.views.settings
import android.os.Bundle import android.os.Bundle
import android.os.Process
import android.view.WindowManager
import androidx.appcompat.app.AppCompatDelegate import androidx.appcompat.app.AppCompatDelegate
import androidx.preference.ListPreference import androidx.preference.ListPreference
import androidx.preference.PreferenceFragmentCompat import androidx.preference.PreferenceFragmentCompat
import androidx.preference.SwitchPreference
import cn.super12138.todo.R import cn.super12138.todo.R
import cn.super12138.todo.databinding.ActivitySettingsBinding import cn.super12138.todo.databinding.ActivitySettingsBinding
import cn.super12138.todo.views.BaseActivity import cn.super12138.todo.views.BaseActivity
import com.google.android.material.snackbar.Snackbar
import kotlin.system.exitProcess
class SettingsActivity : BaseActivity() { class SettingsActivity : BaseActivity() {
private lateinit var binding: ActivitySettingsBinding private lateinit var binding: ActivitySettingsBinding
@ -48,6 +53,29 @@ class SettingsActivity : BaseActivity() {
true true
} }
} }
findPreference<SwitchPreference>("secure_mode")?.apply {
setOnPreferenceChangeListener { preference, newValue ->
when (newValue) {
true -> activity?.window?.setFlags(
WindowManager.LayoutParams.FLAG_SECURE,
WindowManager.LayoutParams.FLAG_SECURE
)
false -> activity?.window?.clearFlags(WindowManager.LayoutParams.FLAG_SECURE)
}
view?.let {
Snackbar.make(it, R.string.need_restart_app, Snackbar.LENGTH_LONG)
.setAction(R.string.restart_app_now) {
Process.killProcess(Process.myPid())
exitProcess(10)
}
.show()
}
true
}
}
} }
} }
} }

View file

@ -116,6 +116,11 @@ class ToDoAdapter(val todoList: MutableList<ToDo>, val viewModelStoreOwner: View
val todo = todoList[position] val todo = todoList[position]
holder.todoContext.text = todo.content holder.todoContext.text = todo.content
holder.todoSubject.text = todo.subject holder.todoSubject.text = todo.subject
if (!todo.isAnimated) {
holder.itemView.alpha = 0f
holder.itemView.animate().alpha(1f).duration = 200
todo.isAnimated = true
}
} }
override fun getItemCount() = todoList.size override fun getItemCount() = todoList.size

View file

@ -11,14 +11,16 @@
android:layout_marginLeft="15dp" android:layout_marginLeft="15dp"
android:layout_marginRight="15dp" android:layout_marginRight="15dp"
android:max="100" android:max="100"
app:indicatorSize="160dp"
app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" app:layout_constraintTop_toTopOf="parent"
app:indicatorSize="160dp"
app:trackColor="?attr/colorSurfaceContainerHighest" app:trackColor="?attr/colorSurfaceContainerHighest"
app:trackCornerRadius="5dp" app:trackCornerRadius="25dp"
app:trackThickness="10dp" /> app:trackThickness="10dp"
app:showDelay="150"
app:indicatorTrackGapSize="10dp"/>
<LinearLayout <LinearLayout
android:layout_width="wrap_content" android:layout_width="wrap_content"

View file

@ -41,4 +41,8 @@
<string name="view_source">在 GitHub 上查看源代码</string> <string name="view_source">在 GitHub 上查看源代码</string>
<string name="config">配置</string> <string name="config">配置</string>
<string name="others">其它</string> <string name="others">其它</string>
<string name="secure_mode">阻止截屏</string>
<string name="secure_mode_summary">开启后任何人将不能对待办列表进行截屏</string>
<string name="need_restart_app">重启应用后生效</string>
<string name="restart_app_now">立即重启</string>
</resources> </resources>

View file

@ -41,4 +41,8 @@
<string name="dark_mode_summary">Enable or disable the dark mode for this app</string> <string name="dark_mode_summary">Enable or disable the dark mode for this app</string>
<string name="config">Config</string> <string name="config">Config</string>
<string name="others">Others</string> <string name="others">Others</string>
<string name="secure_mode">Prevent screenshot</string>
<string name="secure_mode_summary">When it opens anybody cannot take screenshot for to do list</string>
<string name="need_restart_app">Effective after restarting the app</string>
<string name="restart_app_now">Restart now</string>
</resources> </resources>

View file

@ -10,16 +10,21 @@
app:summary="@string/dark_mode_summary" /> app:summary="@string/dark_mode_summary" />
</PreferenceCategory> </PreferenceCategory>
<!--<PreferenceCategory app:title="@string/config"> <PreferenceCategory app:title="@string/config">
<EditTextPreference <!--<EditTextPreference
android:defaultValue="" android:defaultValue=""
android:key="todo_predict_custom" android:key="todo_predict_custom"
android:selectAllOnFocus="true" android:selectAllOnFocus="true"
android:singleLine="true" android:singleLine="true"
android:title="文本预测项目" android:title="文本预测项目"
app:dialogMessage="多个项目请使用英文逗号隔开" app:dialogMessage="多个项目请使用英文逗号隔开"
app:summary="自定义创建待办时文本框的预测项" /> app:summary="自定义创建待办时文本框的预测项" />-->
</PreferenceCategory>--> <SwitchPreference
android:defaultValue="false"
android:key="secure_mode"
android:title="@string/secure_mode"
app:summary="@string/secure_mode_summary" />
</PreferenceCategory>
<PreferenceCategory android:title="@string/others"> <PreferenceCategory android:title="@string/others">
<Preference app:title="@string/about_label"> <Preference app:title="@string/about_label">