refactor: 把 Material Icon 替换成 Material Symbols

并优化部分无障碍表述
This commit is contained in:
Super12138 2025-11-16 15:09:26 +08:00
parent 6ed4fe7e19
commit 3487c64fe5
60 changed files with 446 additions and 124 deletions

View file

@ -106,8 +106,6 @@ dependencies {
implementation(libs.androidx.ui.graphics)
implementation(libs.androidx.ui.tooling.preview)
implementation(libs.androidx.material3)
implementation(libs.androidx.material.icon.core)
implementation(libs.androidx.material.icon.extended)
implementation(libs.androidx.navigation3.runtime)
implementation(libs.androidx.navigation3.ui)
// About Libraries

View file

@ -4,8 +4,6 @@ import androidx.compose.foundation.layout.ExperimentalLayoutApi
import androidx.compose.foundation.layout.FlowRow
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.outlined.Check
import androidx.compose.material3.FilterChip
import androidx.compose.material3.FilterChipDefaults
import androidx.compose.material3.Icon
@ -18,6 +16,7 @@ import androidx.compose.runtime.saveable.rememberSaveable
import androidx.compose.runtime.setValue
import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalView
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.unit.dp
import cn.super12138.todo.R
@ -71,8 +70,8 @@ private fun FilterChipItem(
if (selected) {
{
Icon(
imageVector = Icons.Outlined.Check,
contentDescription = stringResource(R.string.tip_select_this),
painter = painterResource(R.drawable.ic_check),
contentDescription = stringResource(R.string.tip_selected),
modifier = Modifier.size(FilterChipDefaults.IconSize)
)
}

View file

@ -1,10 +1,9 @@
package cn.super12138.todo.ui.components
import androidx.annotation.DrawableRes
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.verticalScroll
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.outlined.ErrorOutline
import androidx.compose.material3.AlertDialog
import androidx.compose.material3.ButtonDefaults
import androidx.compose.material3.ExperimentalMaterial3ExpressiveApi
@ -14,8 +13,9 @@ import androidx.compose.material3.Text
import androidx.compose.material3.TextButton
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.vector.ImageVector
import androidx.compose.ui.graphics.painter.Painter
import androidx.compose.ui.platform.LocalView
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.window.DialogProperties
import cn.super12138.todo.R
@ -25,7 +25,7 @@ import cn.super12138.todo.utils.VibrationUtils
fun ConfirmDialog(
modifier: Modifier = Modifier,
visible: Boolean,
icon: ImageVector = Icons.Outlined.ErrorOutline,
@DrawableRes iconRes: Int,
title: String = stringResource(R.string.title_warning),
text: String,
confirmButtonText: String = stringResource(R.string.action_confirm),
@ -37,7 +37,7 @@ fun ConfirmDialog(
) {
BasicDialog(
visible = visible,
icon = icon,
painter = painterResource(iconRes),
title = title,
text = { Text(text) }, // 已经实现好滚动了
confirmButton = confirmButtonText,
@ -57,7 +57,7 @@ fun ConfirmDialog(
fun BasicDialog(
modifier: Modifier = Modifier,
visible: Boolean,
icon: ImageVector,
painter: Painter,
title: String,
text: @Composable (() -> Unit)? = null,
confirmButton: String,
@ -71,7 +71,7 @@ fun BasicDialog(
visible = visible,
icon = {
Icon(
imageVector = icon,
painter = painter,
contentDescription = null // 会跟下面的文本重复,所以设置为 null
)
},

View file

@ -1,5 +1,6 @@
package cn.super12138.todo.ui.components
import androidx.annotation.DrawableRes
import androidx.compose.foundation.interaction.MutableInteractionSource
import androidx.compose.material3.ExperimentalMaterial3ExpressiveApi
import androidx.compose.material3.FloatingActionButtonDefaults
@ -12,8 +13,8 @@ import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.graphics.Shape
import androidx.compose.ui.graphics.vector.ImageVector
import androidx.compose.ui.platform.LocalView
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.text.style.TextOverflow
import cn.super12138.todo.utils.VibrationUtils
@ -22,7 +23,7 @@ import cn.super12138.todo.utils.VibrationUtils
* * 现在内置组件的动画好像好一点了
*
* 将缩放部分转为最简单的`AnimatedVisibility`实现
* @param icon FAB 的前置图标
* @param iconRes FAB 的前置图标
* @param text FAB 的文本
* @param expanded 是否为展开状态
* @param containerColor FAB 容器的颜色
@ -35,7 +36,7 @@ import cn.super12138.todo.utils.VibrationUtils
@Composable
fun TodoFloatingActionButton(
text: String,
icon: ImageVector,
@DrawableRes iconRes: Int,
onClick: () -> Unit,
modifier: Modifier = Modifier,
expanded: Boolean = true,
@ -56,7 +57,7 @@ fun TodoFloatingActionButton(
},
icon = {
Icon(
imageVector = icon,
painter = painterResource(iconRes),
contentDescription = null
)
},

View file

@ -4,8 +4,6 @@ import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.PaddingValues
import androidx.compose.foundation.layout.RowScope
import androidx.compose.foundation.layout.WindowInsets
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.automirrored.outlined.ArrowBack
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.ExperimentalMaterial3ExpressiveApi
import androidx.compose.material3.FabPosition
@ -22,6 +20,7 @@ import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.input.nestedscroll.nestedScroll
import androidx.compose.ui.platform.LocalView
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.style.TextOverflow
import cn.super12138.todo.R
@ -68,7 +67,7 @@ fun LargeTopAppBarScaffold(
}
) {
Icon(
imageVector = Icons.AutoMirrored.Outlined.ArrowBack,
painter = painterResource(R.drawable.ic_arrow_back),
contentDescription = stringResource(R.string.action_back)
)
}

View file

@ -10,8 +10,6 @@ import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.text.selection.SelectionContainer
import androidx.compose.foundation.verticalScroll
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.automirrored.outlined.ExitToApp
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.ExperimentalMaterial3ExpressiveApi
import androidx.compose.material3.Icon
@ -28,6 +26,7 @@ import androidx.compose.runtime.remember
import androidx.compose.ui.Modifier
import androidx.compose.ui.input.nestedscroll.nestedScroll
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.SpanStyle
import androidx.compose.ui.text.buildAnnotatedString
@ -83,7 +82,7 @@ fun CrashPage(
text = { Text(stringResource(R.string.action_exit_app)) },
icon = {
Icon(
imageVector = Icons.AutoMirrored.Outlined.ExitToApp,
painter = painterResource(R.drawable.ic_exit_to_app),
contentDescription = null
)
},

View file

@ -17,10 +17,6 @@ import androidx.compose.foundation.layout.imePadding
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size
import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.automirrored.outlined.Undo
import androidx.compose.material.icons.outlined.Delete
import androidx.compose.material.icons.outlined.Save
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.ExperimentalMaterial3ExpressiveApi
import androidx.compose.material3.MaterialTheme
@ -128,7 +124,7 @@ fun TodoEditorPage(
if (toDo !== null) {
TodoFloatingActionButton(
text = stringResource(R.string.action_delete),
icon = Icons.Outlined.Delete,
iconRes = R.drawable.ic_delete,
expanded = true,
containerColor = MaterialTheme.colorScheme.errorContainer,
onClick = { uiState.showDeleteConfirmDialog = true }
@ -136,7 +132,7 @@ fun TodoEditorPage(
}
TodoFloatingActionButton(
text = stringResource(R.string.action_save),
icon = Icons.Outlined.Save,
iconRes = R.drawable.ic_save,
expanded = true,
onClick = {
if (uiState.setErrorIfNotValid()) {
@ -256,7 +252,7 @@ fun TodoEditorPage(
ConfirmDialog(
visible = uiState.showExitConfirmDialog,
icon = Icons.AutoMirrored.Outlined.Undo,
iconRes = R.drawable.ic_undo,
text = stringResource(R.string.tip_discard_changes),
onConfirm = {
uiState.showExitConfirmDialog = false
@ -267,7 +263,7 @@ fun TodoEditorPage(
ConfirmDialog(
visible = uiState.showDeleteConfirmDialog,
icon = Icons.Outlined.Delete,
iconRes = R.drawable.ic_delete,
text = stringResource(R.string.tip_delete_task, 1),
onConfirm = onDelete,
onDismiss = { uiState.showDeleteConfirmDialog = false }

View file

@ -8,9 +8,6 @@ import androidx.compose.foundation.layout.WindowInsets
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.lazy.rememberLazyListState
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.outlined.Add
import androidx.compose.material.icons.outlined.Delete
import androidx.compose.material3.ExperimentalMaterial3ExpressiveApi
import androidx.compose.material3.Scaffold
import androidx.compose.material3.animateFloatingActionButton
@ -24,7 +21,6 @@ import androidx.compose.runtime.saveable.rememberSaveable
import androidx.compose.runtime.setValue
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.layout.ModifierLocalBeyondBoundsLayout
import androidx.compose.ui.res.stringResource
import androidx.navigation3.ui.LocalNavAnimatedContentScope
import cn.super12138.todo.R
@ -82,7 +78,7 @@ fun MainPage(
with(sharedTransitionScope) {
TodoFloatingActionButton(
text = stringResource(R.string.action_add_task),
icon = Icons.Outlined.Add,
iconRes = R.drawable.ic_add,
expanded = expandedFab,
onClick = { toTodoEditPage(null) },
modifier = Modifier
@ -175,7 +171,7 @@ fun MainPage(
/*}*/
ConfirmDialog(
visible = showDeleteConfirmDialog,
icon = Icons.Outlined.Delete,
iconRes = R.drawable.ic_delete,
text = stringResource(R.string.tip_delete_task, selectedTodoIds.size),
onConfirm = { viewModel.deleteSelectedTodo() },
onDismiss = { showDeleteConfirmDialog = false }

View file

@ -119,8 +119,12 @@ fun ProgressFragment(
}
AnimatedVisibility(
visible = remainTasks != 0,
enter = fadeIn(MaterialTheme.motionScheme.fastSpatialSpec()) + expandVertically(MaterialTheme.motionScheme.fastSpatialSpec()),
exit = fadeOut(MaterialTheme.motionScheme.fastSpatialSpec()) + shrinkVertically(MaterialTheme.motionScheme.fastSpatialSpec()),
enter = fadeIn(MaterialTheme.motionScheme.fastSpatialSpec()) + expandVertically(
MaterialTheme.motionScheme.fastSpatialSpec()
),
exit = fadeOut(MaterialTheme.motionScheme.fastSpatialSpec()) + shrinkVertically(
MaterialTheme.motionScheme.fastSpatialSpec()
),
) {
Text(
text = stringResource(R.string.tip_remain_tasks, remainTasks),

View file

@ -15,8 +15,6 @@ import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.shape.CircleShape
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.outlined.Check
import androidx.compose.material3.Badge
import androidx.compose.material3.BadgedBox
import androidx.compose.material3.ElevatedCard
@ -31,6 +29,7 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.platform.LocalView
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.style.TextDecoration
import androidx.compose.ui.text.style.TextOverflow
@ -87,9 +86,9 @@ fun TodoCard(
.padding(5.dp)
) {
Icon(
imageVector = Icons.Outlined.Check,
painter = painterResource(R.drawable.ic_check),
tint = contentColorFor(MaterialTheme.colorScheme.secondary),
contentDescription = stringResource(R.string.tip_select_this)
contentDescription = stringResource(R.string.tip_selected)
)
}
}
@ -158,7 +157,7 @@ fun TodoCard(
}
) {
Icon(
imageVector = Icons.Outlined.Check,
painter = painterResource(R.drawable.ic_check),
tint = MaterialTheme.colorScheme.primary,
contentDescription = stringResource(R.string.tip_mark_completed)
)

View file

@ -11,11 +11,6 @@ import androidx.compose.animation.scaleIn
import androidx.compose.animation.shrinkOut
import androidx.compose.animation.togetherWith
import androidx.compose.foundation.layout.Row
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.outlined.Close
import androidx.compose.material.icons.outlined.Delete
import androidx.compose.material.icons.outlined.SelectAll
import androidx.compose.material.icons.outlined.Settings
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.Icon
import androidx.compose.material3.IconButton
@ -30,6 +25,7 @@ import androidx.compose.runtime.setValue
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalView
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.tooling.preview.Preview
@ -70,7 +66,7 @@ fun TodoTopAppBar(
}
) {
Icon(
imageVector = Icons.Outlined.Close,
painter = painterResource(R.drawable.ic_close),
contentDescription = stringResource(R.string.tip_clear_selected_items)
)
}
@ -125,7 +121,7 @@ fun TodoTopAppBar(
}
) {
Icon(
imageVector = Icons.Outlined.Settings,
painter = painterResource(R.drawable.ic_settings),
contentDescription = stringResource(R.string.page_settings)
)
}
@ -138,7 +134,7 @@ fun TodoTopAppBar(
}
) {
Icon(
imageVector = Icons.Outlined.SelectAll,
painter = painterResource(R.drawable.ic_select_all),
contentDescription = stringResource(R.string.tip_select_all)
)
}
@ -149,7 +145,7 @@ fun TodoTopAppBar(
}
) {
Icon(
imageVector = Icons.Outlined.Delete,
painter = painterResource(R.drawable.ic_delete),
contentDescription = stringResource(R.string.action_delete)
)
}

View file

@ -7,11 +7,6 @@ import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.verticalScroll
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.outlined.Balance
import androidx.compose.material.icons.outlined.DeveloperMode
import androidx.compose.material.icons.outlined.Numbers
import androidx.compose.material.icons.outlined.Person4
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.ExperimentalMaterial3ExpressiveApi
import androidx.compose.material3.TopAppBarDefaults
@ -82,7 +77,7 @@ fun SettingsAbout(
}
SettingsItem(
leadingIcon = Icons.Outlined.Numbers,
leadingIconRes = R.drawable.ic_numbers,
title = stringResource(R.string.pref_app_version),
description = SystemUtils.getAppVersion(context),
onClick = {
@ -98,7 +93,7 @@ fun SettingsAbout(
}
)
SettingsItem(
leadingIcon = Icons.Outlined.Person4,
leadingIconRes = R.drawable.ic_person_4,
title = stringResource(R.string.pref_developer),
description = stringResource(R.string.developer_name),
onClick = { uriHandler.openUri(Constants.DEVELOPER_GITHUB) }
@ -110,13 +105,13 @@ fun SettingsAbout(
onClick = { uriHandler.openUri(Constants.GITHUB_REPO) }
)
SettingsItem(
leadingIcon = Icons.Outlined.Balance,
leadingIconRes = R.drawable.ic_balance,
title = stringResource(R.string.pref_licence),
description = stringResource(R.string.pref_licence_desc),
onClick = toLicencePage
)
SettingsItem(
leadingIcon = Icons.Outlined.DeveloperMode,
leadingIconRes = R.drawable.ic_code_blocks,
title = stringResource(R.string.pref_developer_options),
description = stringResource(R.string.pref_developer_options_desc),
onClick = toDevPage

View file

@ -5,8 +5,6 @@ import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.verticalScroll
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.outlined.AutoAwesome
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.TopAppBarDefaults
import androidx.compose.runtime.Composable
@ -60,7 +58,7 @@ fun SettingsAppearance(
Settings {
SwitchSettingsItem(
checked = dynamicColor,
leadingIcon = Icons.Outlined.AutoAwesome,
leadingIconRes = R.drawable.ic_wand_stars,
title = stringResource(R.string.pref_appearance_dynamic_color),
description = stringResource(R.string.pref_appearance_dynamic_color_desc),
onCheckedChange = { scope.launch { DataStoreManager.setDynamicColor(it) } },

View file

@ -9,11 +9,6 @@ import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.verticalScroll
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.outlined.Category
import androidx.compose.material.icons.outlined.FileDownload
import androidx.compose.material.icons.outlined.FileUpload
import androidx.compose.material.icons.outlined.RestartAlt
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.ExperimentalMaterial3ExpressiveApi
import androidx.compose.material3.SnackbarHost
@ -126,7 +121,7 @@ fun SettingsData(
SettingsCategory(stringResource(R.string.pref_category_data_management))
Settings {
SettingsItem(
leadingIcon = Icons.Outlined.FileDownload,
leadingIconRes = R.drawable.ic_download,
title = stringResource(R.string.pref_backup),
description = stringResource(R.string.pref_backup_desc),
onClick = {
@ -134,7 +129,7 @@ fun SettingsData(
}
)
SettingsItem(
leadingIcon = Icons.Outlined.FileUpload,
leadingIconRes = R.drawable.ic_upload,
title = stringResource(R.string.pref_restore),
description = stringResource(R.string.pref_restore_desc),
onClick = {
@ -145,7 +140,7 @@ fun SettingsData(
SettingsCategory(stringResource(R.string.pref_category_category_management))
Settings {
SettingsItem(
leadingIcon = Icons.Outlined.Category,
leadingIconRes = R.drawable.ic_category,
title = stringResource(R.string.pref_category_category_management),
description = stringResource(R.string.pref_category_management_desc),
onClick = toCategoryManager
@ -155,7 +150,7 @@ fun SettingsData(
}
ConfirmDialog(
visible = showRestoreDialog,
icon = Icons.Outlined.RestartAlt,
iconRes = R.drawable.ic_restart_alt,
title = stringResource(R.string.tip_tips),
text = stringResource(R.string.tip_restore_success),
showDismissButton = false,

View file

@ -10,8 +10,6 @@ import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.lazy.items
import androidx.compose.foundation.lazy.rememberLazyListState
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.outlined.Add
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.SnackbarHost
@ -66,7 +64,7 @@ fun SettingsDataCategory(
snackbarHost = { SnackbarHost(snackbarHostState) },
floatingActionButton = {
TodoFloatingActionButton(
icon = Icons.Outlined.Add,
iconRes = R.drawable.ic_add,
text = stringResource(R.string.action_add_category),
expanded = isExpanded,
onClick = {

View file

@ -5,8 +5,6 @@ import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.verticalScroll
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.outlined.Padding
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.TopAppBarDefaults
import androidx.compose.runtime.Composable
@ -42,7 +40,7 @@ fun SettingsDeveloperOptions(
) {
Settings {
SettingsItem(
leadingIcon = Icons.Outlined.Padding,
leadingIconRes = R.drawable.ic_padding,
title = stringResource(R.string.pref_padding),
onClick = toPaddingPage
)

View file

@ -5,11 +5,6 @@ import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.verticalScroll
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.automirrored.outlined.Sort
import androidx.compose.material.icons.outlined.Checklist
import androidx.compose.material.icons.outlined.Shield
import androidx.compose.material.icons.outlined.Vibration
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.ExperimentalMaterial3ExpressiveApi
import androidx.compose.material3.TopAppBarDefaults
@ -71,14 +66,14 @@ fun SettingsInterface(
SettingsCategory(stringResource(R.string.pref_category_todo_list))
Settings {
SwitchSettingsItem(
checked = showCompleted,
leadingIcon = Icons.Outlined.Checklist,
leadingIconRes = R.drawable.ic_checklist,
title = stringResource(R.string.pref_show_completed),
description = stringResource(R.string.pref_show_completed_desc),
checked = showCompleted,
onCheckedChange = { scope.launch { DataStoreManager.setShowCompleted(it) } },
)
SettingsItem(
leadingIcon = Icons.AutoMirrored.Outlined.Sort,
leadingIconRes = R.drawable.ic_sort,
title = stringResource(R.string.pref_sorting_method),
description = SortingMethod.fromId(sortingMethod).getDisplayName(context),
onClick = { showSortingMethodDialog = true }
@ -88,14 +83,14 @@ fun SettingsInterface(
Settings {
SwitchSettingsItem(
checked = secureMode,
leadingIcon = Icons.Outlined.Shield,
leadingIconRes = R.drawable.ic_shield,
title = stringResource(R.string.pref_secure_mode),
description = stringResource(R.string.pref_secure_mode_desc),
onCheckedChange = { scope.launch { DataStoreManager.setSecureMode(it) } }
)
SwitchSettingsItem(
checked = hapticFeedback,
leadingIcon = Icons.Outlined.Vibration,
leadingIconRes = R.drawable.ic_touch_long,
title = stringResource(R.string.pref_haptic_feedback),
description = stringResource(R.string.pref_haptic_feedback_desc),
onCheckedChange = { scope.launch { DataStoreManager.setHapticFeedback(it) } }

View file

@ -5,11 +5,6 @@ import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.verticalScroll
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.outlined.ColorLens
import androidx.compose.material.icons.outlined.Dns
import androidx.compose.material.icons.outlined.Info
import androidx.compose.material.icons.outlined.ViewComfy
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.ExperimentalMaterial3ExpressiveApi
import androidx.compose.material3.TopAppBarDefaults
@ -49,25 +44,25 @@ fun SettingsMain(
) {
Settings {
SettingsItem(
leadingIcon = Icons.Outlined.ColorLens,
leadingIconRes = R.drawable.ic_palette,
title = stringResource(R.string.pref_appearance),
description = stringResource(R.string.pref_appearance_desc),
onClick = toAppearancePage
)
SettingsItem(
leadingIcon = Icons.Outlined.ViewComfy,
leadingIconRes = R.drawable.ic_view_comfy,
title = stringResource(R.string.pref_interface_interaction),
description = stringResource(R.string.pref_interface_interaction_desc),
onClick = toInterfacePage
)
SettingsItem(
leadingIcon = Icons.Outlined.Dns,
leadingIconRes = R.drawable.ic_dns,
title = stringResource(R.string.pref_data),
description = stringResource(R.string.pref_data_desc),
onClick = toDataPage
)
SettingsItem(
leadingIcon = Icons.Outlined.Info,
leadingIconRes = R.drawable.ic_info,
title = stringResource(R.string.pref_about),
description = stringResource(R.string.pref_about_desc),
onClick = toAboutPage

View file

@ -1,5 +1,6 @@
package cn.super12138.todo.ui.pages.settings.components
import androidx.annotation.DrawableRes
import androidx.compose.foundation.background
import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.Column
@ -17,13 +18,35 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.graphics.Shape
import androidx.compose.ui.graphics.painter.Painter
import androidx.compose.ui.graphics.vector.ImageVector
import androidx.compose.ui.platform.LocalView
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.sp
import cn.super12138.todo.ui.TodoDefaults
import cn.super12138.todo.utils.VibrationUtils
@Composable
fun SettingsItem(
modifier: Modifier = Modifier,
@DrawableRes leadingIconRes: Int,
title: String,
description: String? = null,
enableClick: Boolean = true,
onClick: () -> Unit = {}
) {
SettingsItem(
leadingIcon = painterResource(leadingIconRes),
title = title,
description = description,
trailingContent = null,
enableClick = enableClick,
onClick = onClick,
modifier = modifier
)
}
@Composable
fun SettingsItem(
modifier: Modifier = Modifier,
@ -44,6 +67,38 @@ fun SettingsItem(
)
}
@Composable
fun SettingsItem(
modifier: Modifier = Modifier,
leadingIcon: Painter? = null,
title: String,
description: String? = null,
trailingContent: (@Composable () -> Unit)? = null,
background: Color = MaterialTheme.colorScheme.surfaceContainerHigh,
enableClick: Boolean = true,
onClick: () -> Unit = {}
) {
SettingsItem(
leadingIcon = {
leadingIcon?.let {
Icon(
painter = leadingIcon,
contentDescription = null,
tint = MaterialTheme.colorScheme.onSurface,
modifier = Modifier.padding(end = TodoDefaults.settingsItemHorizontalPadding),
)
}
},
title = title,
description = description,
trailingContent = trailingContent,
background = background,
enableClick = enableClick,
onClick = onClick,
modifier = modifier
)
}
@Composable
fun SettingsItem(
modifier: Modifier = Modifier,

View file

@ -6,13 +6,12 @@ import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size
import androidx.compose.foundation.layout.wrapContentHeight
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.outlined.Info
import androidx.compose.material3.Icon
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.semantics.clearAndSetSemantics
import androidx.compose.ui.semantics.contentDescription
@ -37,7 +36,7 @@ fun SettingsPlainBox(
),
) {
Icon(
imageVector = Icons.Outlined.Info,
painter = painterResource(R.drawable.ic_info),
contentDescription = null
)
Spacer(Modifier.size(20.dp))

View file

@ -1,14 +1,45 @@
package cn.super12138.todo.ui.pages.settings.components
import androidx.annotation.DrawableRes
import androidx.compose.foundation.layout.padding
import androidx.compose.material3.Switch
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.vector.ImageVector
import androidx.compose.ui.platform.LocalView
import androidx.compose.ui.res.painterResource
import cn.super12138.todo.ui.TodoDefaults
import cn.super12138.todo.utils.VibrationUtils
@Composable
fun SwitchSettingsItem(
modifier: Modifier = Modifier,
@DrawableRes leadingIconRes: Int,
title: String,
description: String? = null,
checked: Boolean,
onCheckedChange: (Boolean) -> Unit
) {
val view = LocalView.current
SettingsItem(
leadingIcon = painterResource(leadingIconRes),
title = title,
description = description,
trailingContent = {
Switch(
checked = checked,
onCheckedChange = {
VibrationUtils.performHapticFeedback(view)
onCheckedChange(it)
},
modifier = Modifier.padding(start = TodoDefaults.settingsItemHorizontalPadding / 2)
)
},
onClick = { onCheckedChange(!checked) },
modifier = modifier,
)
}
@Composable
fun SwitchSettingsItem(
modifier: Modifier = Modifier,

View file

@ -1,5 +1,6 @@
package cn.super12138.todo.ui.pages.settings.components.appearance.darkmode
import androidx.annotation.DrawableRes
import androidx.compose.animation.core.animateDpAsState
import androidx.compose.foundation.background
import androidx.compose.foundation.border
@ -18,15 +19,15 @@ import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.graphics.vector.ImageVector
import androidx.compose.ui.platform.LocalView
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.semantics.Role
import androidx.compose.ui.unit.dp
import cn.super12138.todo.utils.VibrationUtils
@Composable
fun DarkModeItem(
icon: ImageVector,
@DrawableRes iconRes: Int,
name: String,
contentColor: Color,
containerColor: Color,
@ -61,7 +62,7 @@ fun DarkModeItem(
),
) {
Icon(
imageVector = icon,
painter = painterResource(iconRes),
contentDescription = null,
tint = contentColor,
modifier = Modifier

View file

@ -44,7 +44,7 @@ fun DarkModePicker(
val isSelected by remember { derivedStateOf { currentDarkMode() == it } }
DarkModeItem(
icon = it.icon,
iconRes = it.iconRes,
name = it.getDisplayName(context),
contentColor = contentColor,
containerColor = containerColor,

View file

@ -7,8 +7,6 @@ import androidx.compose.foundation.text.input.TextFieldLineLimits
import androidx.compose.foundation.text.input.clearText
import androidx.compose.foundation.text.input.rememberTextFieldState
import androidx.compose.foundation.text.input.setTextAndPlaceCursorAtEnd
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.outlined.Info
import androidx.compose.material3.OutlinedTextField
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
@ -19,6 +17,7 @@ import androidx.compose.runtime.remember
import androidx.compose.runtime.saveable.rememberSaveable
import androidx.compose.runtime.setValue
import androidx.compose.ui.Modifier
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.unit.dp
import androidx.compose.ui.window.DialogProperties
@ -53,7 +52,7 @@ fun CategoryPromptDialog(
BasicDialog(
visible = visible,
icon = Icons.Outlined.Info,
painter = painterResource(R.drawable.ic_info),
title = stringResource(R.string.tip_tips),
text = {
// 已经是实现好滚动的Column布局

View file

@ -5,8 +5,6 @@ import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.wrapContentHeight
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.outlined.Delete
import androidx.compose.material3.Icon
import androidx.compose.material3.IconButton
import androidx.compose.material3.MaterialTheme
@ -16,6 +14,7 @@ import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip
import androidx.compose.ui.platform.LocalView
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.style.TextOverflow
import cn.super12138.todo.R
@ -64,7 +63,7 @@ fun CategoryItem(
}
) {
Icon(
imageVector = Icons.Outlined.Delete,
painter = painterResource(R.drawable.ic_delete),
contentDescription = stringResource(R.string.action_delete)
)
}

View file

@ -1,20 +1,15 @@
package cn.super12138.todo.ui.theme
import android.content.Context
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.outlined.DarkMode
import androidx.compose.material.icons.outlined.LightMode
import androidx.compose.material.icons.outlined.SettingsSuggest
import androidx.compose.ui.graphics.vector.ImageVector
import cn.super12138.todo.R
enum class DarkMode(
val id: Int,
val icon: ImageVector
val iconRes: Int
) {
FollowSystem(-1, Icons.Outlined.SettingsSuggest),
Light(1, Icons.Outlined.LightMode),
Dark(2, Icons.Outlined.DarkMode);
FollowSystem(-1, R.drawable.ic_lightbulb_2),
Light(1, R.drawable.ic_light_mode),
Dark(2, R.drawable.ic_dark_mode);
fun getDisplayName(context: Context): String {
val resId = when (this) {

View file

@ -0,0 +1,9 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="960"
android:viewportHeight="960">
<path
android:fillColor="@android:color/white"
android:pathData="M440,520L240,520Q223,520 211.5,508.5Q200,497 200,480Q200,463 211.5,451.5Q223,440 240,440L440,440L440,240Q440,223 451.5,211.5Q463,200 480,200Q497,200 508.5,211.5Q520,223 520,240L520,440L720,440Q737,440 748.5,451.5Q760,463 760,480Q760,497 748.5,508.5Q737,520 720,520L520,520L520,720Q520,737 508.5,748.5Q497,760 480,760Q463,760 451.5,748.5Q440,737 440,720L440,520Z" />
</vector>

View file

@ -0,0 +1,10 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:autoMirrored="true"
android:viewportWidth="960"
android:viewportHeight="960">
<path
android:fillColor="@android:color/white"
android:pathData="M313,520L509,716Q521,728 520.5,744Q520,760 508,772Q496,783 480,783.5Q464,784 452,772L188,508Q182,502 179.5,495Q177,488 177,480Q177,472 179.5,465Q182,458 188,452L452,188Q463,177 479.5,177Q496,177 508,188Q520,200 520,216.5Q520,233 508,245L313,440L760,440Q777,440 788.5,451.5Q800,463 800,480Q800,497 788.5,508.5Q777,520 760,520L313,520Z" />
</vector>

View file

@ -0,0 +1,9 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="960"
android:viewportHeight="960">
<path
android:fillColor="@android:color/white"
android:pathData="M120,840Q103,840 91.5,828.5Q80,817 80,800Q80,783 91.5,771.5Q103,760 120,760L440,760L440,313Q414,304 395,285Q376,266 367,240L240,240L350,498Q355,509 356,520.5Q357,532 355,544Q346,590 305.5,615Q265,640 220,640Q175,640 134.5,615Q94,590 85,544Q83,532 84,520.5Q85,509 90,498L200,240L160,240Q143,240 131.5,228.5Q120,217 120,200Q120,183 131.5,171.5Q143,160 160,160L367,160Q379,125 410,102.5Q441,80 480,80Q519,80 550,102.5Q581,125 593,160L800,160Q817,160 828.5,171.5Q840,183 840,200Q840,217 828.5,228.5Q817,240 800,240L760,240L870,498Q875,509 876,520.5Q877,532 875,544Q866,590 825.5,615Q785,640 740,640Q695,640 654.5,615Q614,590 605,544Q603,532 604,520.5Q605,509 610,498L720,240L593,240Q584,266 565,285Q546,304 520,313L520,760L840,760Q857,760 868.5,771.5Q880,783 880,800Q880,817 868.5,828.5Q857,840 840,840L120,840ZM665,520L815,520L740,346L665,520ZM145,520L295,520L220,346L145,520ZM480,240Q497,240 508.5,228.5Q520,217 520,200Q520,183 508.5,171.5Q497,160 480,160Q463,160 451.5,171.5Q440,183 440,200Q440,217 451.5,228.5Q463,240 480,240Z" />
</vector>

View file

@ -0,0 +1,9 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="960"
android:viewportHeight="960">
<path
android:fillColor="@android:color/white"
android:pathData="M297,379L446,136Q452,126 461,121.5Q470,117 480,117Q490,117 499,121.5Q508,126 514,136L663,379Q669,389 669,400Q669,411 664,420Q659,429 650,434.5Q641,440 629,440L331,440Q319,440 310,434.5Q301,429 296,420Q291,411 291,400Q291,389 297,379ZM700,880Q625,880 572.5,827.5Q520,775 520,700Q520,625 572.5,572.5Q625,520 700,520Q775,520 827.5,572.5Q880,625 880,700Q880,775 827.5,827.5Q775,880 700,880ZM120,820L120,580Q120,563 131.5,551.5Q143,540 160,540L400,540Q417,540 428.5,551.5Q440,563 440,580L440,820Q440,837 428.5,848.5Q417,860 400,860L160,860Q143,860 131.5,848.5Q120,837 120,820ZM700,800Q742,800 771,771Q800,742 800,700Q800,658 771,629Q742,600 700,600Q658,600 629,629Q600,658 600,700Q600,742 629,771Q658,800 700,800ZM200,780L360,780L360,620L200,620L200,780ZM402,360L558,360L480,234L402,360ZM480,360L480,360L480,360ZM360,620L360,620L360,620L360,620ZM700,700Q700,700 700,700Q700,700 700,700Q700,700 700,700Q700,700 700,700Q700,700 700,700Q700,700 700,700Q700,700 700,700Q700,700 700,700Z" />
</vector>

View file

@ -0,0 +1,9 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="960"
android:viewportHeight="960">
<path
android:fillColor="@android:color/white"
android:pathData="M382,606L721,267Q733,255 749,255Q765,255 777,267Q789,279 789,295.5Q789,312 777,324L410,692Q398,704 382,704Q366,704 354,692L182,520Q170,508 170.5,491.5Q171,475 183,463Q195,451 211.5,451Q228,451 240,463L382,606Z" />
</vector>

View file

@ -0,0 +1,9 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="960"
android:viewportHeight="960">
<path
android:fillColor="@android:color/white"
android:pathData="M221,647L363,505Q375,493 391,493.5Q407,494 419,506Q430,518 430,534Q430,550 419,562L250,732Q238,744 222,744Q206,744 194,732L108,646Q97,635 97,618Q97,601 108,590Q119,579 136,579Q153,579 164,590L221,647ZM221,327L363,185Q375,173 391,173.5Q407,174 419,186Q430,198 430,214Q430,230 419,242L250,412Q238,424 222,424Q206,424 194,412L108,326Q97,315 97,298Q97,281 108,270Q119,259 136,259Q153,259 164,270L221,327ZM560,680Q543,680 531.5,668.5Q520,657 520,640Q520,623 531.5,611.5Q543,600 560,600L840,600Q857,600 868.5,611.5Q880,623 880,640Q880,657 868.5,668.5Q857,680 840,680L560,680ZM560,360Q543,360 531.5,348.5Q520,337 520,320Q520,303 531.5,291.5Q543,280 560,280L840,280Q857,280 868.5,291.5Q880,303 880,320Q880,337 868.5,348.5Q857,360 840,360L560,360Z" />
</vector>

View file

@ -0,0 +1,9 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="960"
android:viewportHeight="960">
<path
android:fillColor="@android:color/white"
android:pathData="M480,536L284,732Q273,743 256,743Q239,743 228,732Q217,721 217,704Q217,687 228,676L424,480L228,284Q217,273 217,256Q217,239 228,228Q239,217 256,217Q273,217 284,228L480,424L676,228Q687,217 704,217Q721,217 732,228Q743,239 743,256Q743,273 732,284L536,480L732,676Q743,687 743,704Q743,721 732,732Q721,743 704,743Q687,743 676,732L480,536Z" />
</vector>

View file

@ -0,0 +1,9 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="960"
android:viewportHeight="960">
<path
android:fillColor="@android:color/white"
android:pathData="M353,480L412,421Q424,409 424,393Q424,377 412,365Q400,353 383.5,353Q367,353 355,365L268,452Q262,458 259.5,465Q257,472 257,480Q257,488 259.5,495Q262,502 268,508L355,595Q367,607 383.5,607Q400,607 412,595Q424,583 424,567Q424,551 412,539L353,480ZM607,480L548,539Q536,551 536,567Q536,583 548,595Q560,607 576.5,607Q593,607 605,595L692,508Q698,502 700.5,495Q703,488 703,480Q703,472 700.5,465Q698,458 692,452L605,365Q599,359 591.5,356Q584,353 576.5,353Q569,353 561.5,356Q554,359 548,365Q536,377 536,393Q536,409 548,421L607,480ZM200,840Q167,840 143.5,816.5Q120,793 120,760L120,200Q120,167 143.5,143.5Q167,120 200,120L760,120Q793,120 816.5,143.5Q840,167 840,200L840,760Q840,793 816.5,816.5Q793,840 760,840L200,840ZM200,760L760,760Q760,760 760,760Q760,760 760,760L760,200Q760,200 760,200Q760,200 760,200L200,200Q200,200 200,200Q200,200 200,200L200,760Q200,760 200,760Q200,760 200,760ZM200,200L200,200Q200,200 200,200Q200,200 200,200L200,760Q200,760 200,760Q200,760 200,760L200,760Q200,760 200,760Q200,760 200,760L200,200Q200,200 200,200Q200,200 200,200Z" />
</vector>

View file

@ -0,0 +1,9 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="960"
android:viewportHeight="960">
<path
android:fillColor="@android:color/white"
android:pathData="M480,840Q329,840 224.5,735.5Q120,631 120,480Q120,342 210,240.5Q300,139 440,122Q453,120 463,125.5Q473,131 479,140Q485,149 485.5,161Q486,173 478,184Q461,210 452.5,239Q444,268 444,300Q444,390 507,453Q570,516 660,516Q691,516 721.5,507Q752,498 776,482Q787,475 798.5,475.5Q810,476 819,481Q829,486 834.5,496Q840,506 838,520Q824,658 720.5,749Q617,840 480,840ZM480,760Q568,760 638,711.5Q708,663 740,585Q720,590 700,593Q680,596 660,596Q537,596 450.5,509.5Q364,423 364,300Q364,280 367,260Q370,240 375,220Q297,252 248.5,322Q200,392 200,480Q200,596 282,678Q364,760 480,760ZM470,490Q470,490 470,490Q470,490 470,490Q470,490 470,490Q470,490 470,490Q470,490 470,490Q470,490 470,490Q470,490 470,490Q470,490 470,490Q470,490 470,490Q470,490 470,490Q470,490 470,490Q470,490 470,490Z" />
</vector>

View file

@ -0,0 +1,9 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="960"
android:viewportHeight="960">
<path
android:fillColor="@android:color/white"
android:pathData="M280,840Q247,840 223.5,816.5Q200,793 200,760L200,240L200,240Q183,240 171.5,228.5Q160,217 160,200Q160,183 171.5,171.5Q183,160 200,160L360,160L360,160Q360,143 371.5,131.5Q383,120 400,120L560,120Q577,120 588.5,131.5Q600,143 600,160L600,160L760,160Q777,160 788.5,171.5Q800,183 800,200Q800,217 788.5,228.5Q777,240 760,240L760,240L760,760Q760,793 736.5,816.5Q713,840 680,840L280,840ZM680,240L280,240L280,760Q280,760 280,760Q280,760 280,760L680,760Q680,760 680,760Q680,760 680,760L680,240ZM400,680Q417,680 428.5,668.5Q440,657 440,640L440,360Q440,343 428.5,331.5Q417,320 400,320Q383,320 371.5,331.5Q360,343 360,360L360,640Q360,657 371.5,668.5Q383,680 400,680ZM560,680Q577,680 588.5,668.5Q600,657 600,640L600,360Q600,343 588.5,331.5Q577,320 560,320Q543,320 531.5,331.5Q520,343 520,360L520,640Q520,657 531.5,668.5Q543,680 560,680ZM280,240L280,240L280,760Q280,760 280,760Q280,760 280,760L280,760Q280,760 280,760Q280,760 280,760L280,240Z" />
</vector>

View file

@ -0,0 +1,9 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="960"
android:viewportHeight="960">
<path
android:fillColor="@android:color/white"
android:pathData="M300,240Q275,240 257.5,257.5Q240,275 240,300Q240,325 257.5,342.5Q275,360 300,360Q325,360 342.5,342.5Q360,325 360,300Q360,275 342.5,257.5Q325,240 300,240ZM300,640Q275,640 257.5,657.5Q240,675 240,700Q240,725 257.5,742.5Q275,760 300,760Q325,760 342.5,742.5Q360,725 360,700Q360,675 342.5,657.5Q325,640 300,640ZM160,120L800,120Q817,120 828.5,131.5Q840,143 840,160L840,440Q840,457 828.5,468.5Q817,480 800,480L160,480Q143,480 131.5,468.5Q120,457 120,440L120,160Q120,143 131.5,131.5Q143,120 160,120ZM200,200L200,400L760,400L760,200L200,200ZM160,520L800,520Q817,520 828.5,531.5Q840,543 840,560L840,840Q840,857 828.5,868.5Q817,880 800,880L160,880Q143,880 131.5,868.5Q120,857 120,840L120,560Q120,543 131.5,531.5Q143,520 160,520ZM200,600L200,800L760,800L760,600L200,600ZM200,200L200,200L200,400L200,400L200,200ZM200,600L200,600L200,800L200,800L200,600Z" />
</vector>

View file

@ -0,0 +1,9 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="960"
android:viewportHeight="960">
<path
android:fillColor="@android:color/white"
android:pathData="M480,623Q472,623 465,620.5Q458,618 452,612L308,468Q296,456 296.5,440Q297,424 308,412Q320,400 336.5,399.5Q353,399 365,411L440,486L440,200Q440,183 451.5,171.5Q463,160 480,160Q497,160 508.5,171.5Q520,183 520,200L520,486L595,411Q607,399 623.5,399.5Q640,400 652,412Q663,424 663.5,440Q664,456 652,468L508,612Q502,618 495,620.5Q488,623 480,623ZM240,800Q207,800 183.5,776.5Q160,753 160,720L160,640Q160,623 171.5,611.5Q183,600 200,600Q217,600 228.5,611.5Q240,623 240,640L240,720Q240,720 240,720Q240,720 240,720L720,720Q720,720 720,720Q720,720 720,720L720,640Q720,623 731.5,611.5Q743,600 760,600Q777,600 788.5,611.5Q800,623 800,640L800,720Q800,753 776.5,776.5Q753,800 720,800L240,800Z" />
</vector>

View file

@ -0,0 +1,10 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:autoMirrored="true"
android:viewportWidth="960"
android:viewportHeight="960">
<path
android:fillColor="@android:color/white"
android:pathData="M200,840Q167,840 143.5,816.5Q120,793 120,760L120,640Q120,623 131.5,611.5Q143,600 160,600Q177,600 188.5,611.5Q200,623 200,640L200,760Q200,760 200,760Q200,760 200,760L760,760Q760,760 760,760Q760,760 760,760L760,200Q760,200 760,200Q760,200 760,200L200,200Q200,200 200,200Q200,200 200,200L200,320Q200,337 188.5,348.5Q177,360 160,360Q143,360 131.5,348.5Q120,337 120,320L120,200Q120,167 143.5,143.5Q167,120 200,120L760,120Q793,120 816.5,143.5Q840,167 840,200L840,760Q840,793 816.5,816.5Q793,840 760,840L200,840ZM466,520L160,520Q143,520 131.5,508.5Q120,497 120,480Q120,463 131.5,451.5Q143,440 160,440L466,440L392,366Q380,354 380.5,338Q381,322 392,310Q404,298 420.5,297.5Q437,297 449,309L592,452Q598,458 600.5,465Q603,472 603,480Q603,488 600.5,495Q598,502 592,508L449,651Q437,663 420.5,662.5Q404,662 392,650Q381,638 380.5,622Q380,606 392,594L466,520Z" />
</vector>

View file

@ -0,0 +1,9 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="960"
android:viewportHeight="960">
<path
android:fillColor="@android:color/white"
android:pathData="M480,680Q497,680 508.5,668.5Q520,657 520,640L520,480Q520,463 508.5,451.5Q497,440 480,440Q463,440 451.5,451.5Q440,463 440,480L440,640Q440,657 451.5,668.5Q463,680 480,680ZM480,360Q497,360 508.5,348.5Q520,337 520,320Q520,303 508.5,291.5Q497,280 480,280Q463,280 451.5,291.5Q440,303 440,320Q440,337 451.5,348.5Q463,360 480,360ZM480,880Q397,880 324,848.5Q251,817 197,763Q143,709 111.5,636Q80,563 80,480Q80,397 111.5,324Q143,251 197,197Q251,143 324,111.5Q397,80 480,80Q563,80 636,111.5Q709,143 763,197Q817,251 848.5,324Q880,397 880,480Q880,563 848.5,636Q817,709 763,763Q709,817 636,848.5Q563,880 480,880ZM480,800Q614,800 707,707Q800,614 800,480Q800,346 707,253Q614,160 480,160Q346,160 253,253Q160,346 160,480Q160,614 253,707Q346,800 480,800ZM480,480Q480,480 480,480Q480,480 480,480Q480,480 480,480Q480,480 480,480Q480,480 480,480Q480,480 480,480Q480,480 480,480Q480,480 480,480Z" />
</vector>

View file

@ -0,0 +1,9 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="960"
android:viewportHeight="960">
<path
android:fillColor="@android:color/white"
android:pathData="M480,600Q530,600 565,565Q600,530 600,480Q600,430 565,395Q530,360 480,360Q430,360 395,395Q360,430 360,480Q360,530 395,565Q430,600 480,600ZM480,680Q397,680 338.5,621.5Q280,563 280,480Q280,397 338.5,338.5Q397,280 480,280Q563,280 621.5,338.5Q680,397 680,480Q680,563 621.5,621.5Q563,680 480,680ZM80,520Q63,520 51.5,508.5Q40,497 40,480Q40,463 51.5,451.5Q63,440 80,440L160,440Q177,440 188.5,451.5Q200,463 200,480Q200,497 188.5,508.5Q177,520 160,520L80,520ZM800,520Q783,520 771.5,508.5Q760,497 760,480Q760,463 771.5,451.5Q783,440 800,440L880,440Q897,440 908.5,451.5Q920,463 920,480Q920,497 908.5,508.5Q897,520 880,520L800,520ZM480,200Q463,200 451.5,188.5Q440,177 440,160L440,80Q440,63 451.5,51.5Q463,40 480,40Q497,40 508.5,51.5Q520,63 520,80L520,160Q520,177 508.5,188.5Q497,200 480,200ZM480,920Q463,920 451.5,908.5Q440,897 440,880L440,800Q440,783 451.5,771.5Q463,760 480,760Q497,760 508.5,771.5Q520,783 520,800L520,880Q520,897 508.5,908.5Q497,920 480,920ZM226,282L183,240Q171,229 171.5,212Q172,195 183,183Q195,171 212,171Q229,171 240,183L282,226Q293,238 293,254Q293,270 282,282Q271,294 254.5,293.5Q238,293 226,282ZM720,777L678,734Q667,722 667,705.5Q667,689 678,678Q689,666 705.5,666.5Q722,667 734,678L777,720Q789,731 788.5,748Q788,765 777,777Q765,789 748,789Q731,789 720,777ZM678,282Q666,271 666.5,254.5Q667,238 678,226L720,183Q731,171 748,171.5Q765,172 777,183Q789,195 789,212Q789,229 777,240L734,282Q722,293 706,293Q690,293 678,282ZM183,777Q171,765 171,748Q171,731 183,720L226,678Q238,667 254.5,667Q271,667 282,678Q294,689 293.5,705.5Q293,722 282,734L240,777Q229,789 212,788.5Q195,788 183,777ZM480,480Q480,480 480,480Q480,480 480,480Q480,480 480,480Q480,480 480,480Q480,480 480,480Q480,480 480,480Q480,480 480,480Q480,480 480,480Z" />
</vector>

View file

@ -0,0 +1,9 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="960"
android:viewportHeight="960">
<path
android:fillColor="@android:color/white"
android:pathData="M400,720Q367,720 343.5,696.5Q320,673 320,640L320,590Q263,551 231.5,490Q200,429 200,360Q200,243 281.5,161.5Q363,80 480,80Q597,80 678.5,161.5Q760,243 760,360Q760,429 728.5,489.5Q697,550 640,590L640,640Q640,673 616.5,696.5Q593,720 560,720L400,720ZM400,640L560,640Q560,640 560,640Q560,640 560,640L560,569Q560,559 564.5,550Q569,541 577,536L594,524Q635,496 657.5,452.5Q680,409 680,360Q680,277 621.5,218.5Q563,160 480,160Q397,160 338.5,218.5Q280,277 280,360Q280,409 302.5,452.5Q325,496 366,524L383,536Q391,541 395.5,550Q400,559 400,569L400,640Q400,640 400,640Q400,640 400,640ZM400,880Q383,880 371.5,868.5Q360,857 360,840Q360,823 371.5,811.5Q383,800 400,800L560,800Q577,800 588.5,811.5Q600,823 600,840Q600,857 588.5,868.5Q577,880 560,880L400,880ZM480,360Q480,360 480,360Q480,360 480,360L480,360Q480,360 480,360Q480,360 480,360L480,360Q480,360 480,360Q480,360 480,360Q480,360 480,360Q480,360 480,360Q480,360 480,360Q480,360 480,360Q480,360 480,360Q480,360 480,360L480,360Q480,360 480,360Q480,360 480,360L480,360Q480,360 480,360Q480,360 480,360Z" />
</vector>

View file

@ -0,0 +1,9 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="960"
android:viewportHeight="960">
<path
android:fillColor="@android:color/white"
android:pathData="M360,640L327,771Q324,784 314,792Q304,800 290,800Q271,800 259,785Q247,770 252,752L280,640L171,640Q151,640 139,624.5Q127,609 132,590Q135,576 146,568Q157,560 171,560L300,560L340,400L231,400Q211,400 199,384.5Q187,369 192,350Q195,336 206,328Q217,320 231,320L360,320L393,189Q396,176 406,168Q416,160 430,160Q449,160 461,175Q473,190 468,208L440,320L600,320L633,189Q636,176 646,168Q656,160 670,160Q689,160 701,175Q713,190 708,208L680,320L789,320Q809,320 821,335.5Q833,351 828,370Q825,384 814,392Q803,400 789,400L660,400L620,560L729,560Q749,560 761,575.5Q773,591 768,610Q765,624 754,632Q743,640 729,640L600,640L567,771Q564,784 554,792Q544,800 530,800Q511,800 499,785Q487,770 492,752L520,640L360,640ZM380,560L540,560L580,400L420,400L380,560Z" />
</vector>

View file

@ -0,0 +1,9 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="960"
android:viewportHeight="960">
<path
android:fillColor="@android:color/white"
android:pathData="M320,360Q337,360 348.5,348.5Q360,337 360,320Q360,303 348.5,291.5Q337,280 320,280Q303,280 291.5,291.5Q280,303 280,320Q280,337 291.5,348.5Q303,360 320,360ZM480,360Q497,360 508.5,348.5Q520,337 520,320Q520,303 508.5,291.5Q497,280 480,280Q463,280 451.5,291.5Q440,303 440,320Q440,337 451.5,348.5Q463,360 480,360ZM640,360Q657,360 668.5,348.5Q680,337 680,320Q680,303 668.5,291.5Q657,280 640,280Q623,280 611.5,291.5Q600,303 600,320Q600,337 611.5,348.5Q623,360 640,360ZM200,840Q167,840 143.5,816.5Q120,793 120,760L120,200Q120,167 143.5,143.5Q167,120 200,120L760,120Q793,120 816.5,143.5Q840,167 840,200L840,760Q840,793 816.5,816.5Q793,840 760,840L200,840ZM200,760L760,760Q760,760 760,760Q760,760 760,760L760,200Q760,200 760,200Q760,200 760,200L200,200Q200,200 200,200Q200,200 200,200L200,760Q200,760 200,760Q200,760 200,760ZM200,200L200,200Q200,200 200,200Q200,200 200,200L200,760Q200,760 200,760Q200,760 200,760L200,760Q200,760 200,760Q200,760 200,760L200,200Q200,200 200,200Q200,200 200,200Z" />
</vector>

View file

@ -0,0 +1,9 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="960"
android:viewportHeight="960">
<path
android:fillColor="@android:color/white"
android:pathData="M480,880Q398,880 325,848.5Q252,817 197.5,762.5Q143,708 111.5,635Q80,562 80,480Q80,397 112.5,324Q145,251 200.5,197Q256,143 330,111.5Q404,80 488,80Q568,80 639,107.5Q710,135 763.5,183.5Q817,232 848.5,298.5Q880,365 880,442Q880,557 810,618.5Q740,680 640,680L566,680Q557,680 553.5,685Q550,690 550,696Q550,708 565,730.5Q580,753 580,782Q580,832 552.5,856Q525,880 480,880ZM480,480Q480,480 480,480Q480,480 480,480Q480,480 480,480Q480,480 480,480Q480,480 480,480Q480,480 480,480Q480,480 480,480Q480,480 480,480L480,480Q480,480 480,480Q480,480 480,480Q480,480 480,480Q480,480 480,480Q480,480 480,480Q480,480 480,480ZM260,520Q286,520 303,503Q320,486 320,460Q320,434 303,417Q286,400 260,400Q234,400 217,417Q200,434 200,460Q200,486 217,503Q234,520 260,520ZM380,360Q406,360 423,343Q440,326 440,300Q440,274 423,257Q406,240 380,240Q354,240 337,257Q320,274 320,300Q320,326 337,343Q354,360 380,360ZM580,360Q606,360 623,343Q640,326 640,300Q640,274 623,257Q606,240 580,240Q554,240 537,257Q520,274 520,300Q520,326 537,343Q554,360 580,360ZM700,520Q726,520 743,503Q760,486 760,460Q760,434 743,417Q726,400 700,400Q674,400 657,417Q640,434 640,460Q640,486 657,503Q674,520 700,520ZM480,800Q489,800 494.5,795Q500,790 500,782Q500,768 485,749Q470,730 470,692Q470,650 499,625Q528,600 570,600L640,600Q706,600 753,561.5Q800,523 800,442Q800,321 707.5,240.5Q615,160 488,160Q352,160 256,253Q160,346 160,480Q160,613 253.5,706.5Q347,800 480,800Z" />
</vector>

View file

@ -0,0 +1,9 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="960"
android:viewportHeight="960">
<path
android:fillColor="@android:color/white"
android:pathData="M480,520Q414,520 367,473Q320,426 320,360L320,220Q320,195 337.5,177.5Q355,160 380,160Q395,160 408.5,167Q422,174 430,187Q438,174 451.5,167Q465,160 480,160Q495,160 508.5,167Q522,174 530,187Q538,174 551.5,167Q565,160 580,160Q605,160 622.5,177.5Q640,195 640,220L640,360Q640,426 593,473Q546,520 480,520ZM480,440Q513,440 536.5,416.5Q560,393 560,360L560,260L400,260L400,360Q400,393 423.5,416.5Q447,440 480,440ZM160,760L160,728Q160,694 177.5,665.5Q195,637 224,622Q286,591 350,575.5Q414,560 480,560Q546,560 610,575.5Q674,591 736,622Q765,637 782.5,665.5Q800,694 800,728L800,760Q800,793 776.5,816.5Q753,840 720,840L240,840Q207,840 183.5,816.5Q160,793 160,760ZM240,760L720,760L720,728Q720,717 714.5,708Q709,699 700,694Q646,667 591,653.5Q536,640 480,640Q424,640 369,653.5Q314,667 260,694Q251,699 245.5,708Q240,717 240,728L240,760ZM480,760L480,760Q480,760 480,760Q480,760 480,760Q480,760 480,760Q480,760 480,760Q480,760 480,760Q480,760 480,760Q480,760 480,760Q480,760 480,760L480,760ZM480,260Q480,260 480,260Q480,260 480,260L480,260L480,260L480,260Q480,260 480,260Q480,260 480,260Z" />
</vector>

View file

@ -0,0 +1,9 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="960"
android:viewportHeight="960">
<path
android:fillColor="@android:color/white"
android:pathData="M393,828Q290,799 225,714.5Q160,630 160,520Q160,463 179,411.5Q198,360 233,317Q244,305 260,304.5Q276,304 289,317Q300,328 300.5,344Q301,360 290,374Q266,405 253,442Q240,479 240,520Q240,601 287.5,664.5Q335,728 410,751Q423,755 431.5,766Q440,777 440,790Q440,810 426,821.5Q412,833 393,828ZM567,828Q548,833 534,821Q520,809 520,789Q520,777 528.5,766Q537,755 550,751Q625,727 672.5,664Q720,601 720,520Q720,420 650,350Q580,280 480,280L477,280L493,296Q504,307 504,324Q504,341 493,352Q482,363 465,363Q448,363 437,352L353,268Q347,262 344.5,255Q342,248 342,240Q342,232 344.5,225Q347,218 353,212L437,128Q448,117 465,117Q482,117 493,128Q504,139 504,156Q504,173 493,184L477,200L480,200Q614,200 707,293Q800,386 800,520Q800,629 735,714Q670,799 567,828Z" />
</vector>

View file

@ -0,0 +1,9 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="960"
android:viewportHeight="960">
<path
android:fillColor="@android:color/white"
android:pathData="M200,840Q167,840 143.5,816.5Q120,793 120,760L120,200Q120,167 143.5,143.5Q167,120 200,120L647,120Q663,120 677.5,126Q692,132 703,143L817,257Q828,268 834,282.5Q840,297 840,313L840,760Q840,793 816.5,816.5Q793,840 760,840L200,840ZM760,314L646,200L200,200Q200,200 200,200Q200,200 200,200L200,760Q200,760 200,760Q200,760 200,760L760,760Q760,760 760,760Q760,760 760,760L760,314ZM480,720Q530,720 565,685Q600,650 600,600Q600,550 565,515Q530,480 480,480Q430,480 395,515Q360,550 360,600Q360,650 395,685Q430,720 480,720ZM280,400L560,400Q577,400 588.5,388.5Q600,377 600,360L600,280Q600,263 588.5,251.5Q577,240 560,240L280,240Q263,240 251.5,251.5Q240,263 240,280L240,360Q240,377 251.5,388.5Q263,400 280,400ZM200,314L200,760Q200,760 200,760Q200,760 200,760L200,760Q200,760 200,760Q200,760 200,760L200,200Q200,200 200,200Q200,200 200,200L200,200L200,314Z" />
</vector>

View file

@ -0,0 +1,9 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="960"
android:viewportHeight="960">
<path
android:fillColor="@android:color/white"
android:pathData="M160,200Q143,200 131.5,188.5Q120,177 120,160Q120,143 131.5,131.5Q143,120 160,120Q177,120 188.5,131.5Q200,143 200,160Q200,177 188.5,188.5Q177,200 160,200ZM320,200Q303,200 291.5,188.5Q280,177 280,160Q280,143 291.5,131.5Q303,120 320,120Q337,120 348.5,131.5Q360,143 360,160Q360,177 348.5,188.5Q337,200 320,200ZM480,200Q463,200 451.5,188.5Q440,177 440,160Q440,143 451.5,131.5Q463,120 480,120Q497,120 508.5,131.5Q520,143 520,160Q520,177 508.5,188.5Q497,200 480,200ZM640,200Q623,200 611.5,188.5Q600,177 600,160Q600,143 611.5,131.5Q623,120 640,120Q657,120 668.5,131.5Q680,143 680,160Q680,177 668.5,188.5Q657,200 640,200ZM800,200Q783,200 771.5,188.5Q760,177 760,160Q760,143 771.5,131.5Q783,120 800,120Q817,120 828.5,131.5Q840,143 840,160Q840,177 828.5,188.5Q817,200 800,200ZM160,360Q143,360 131.5,348.5Q120,337 120,320Q120,303 131.5,291.5Q143,280 160,280Q177,280 188.5,291.5Q200,303 200,320Q200,337 188.5,348.5Q177,360 160,360ZM800,360Q783,360 771.5,348.5Q760,337 760,320Q760,303 771.5,291.5Q783,280 800,280Q817,280 828.5,291.5Q840,303 840,320Q840,337 828.5,348.5Q817,360 800,360ZM160,520Q143,520 131.5,508.5Q120,497 120,480Q120,463 131.5,451.5Q143,440 160,440Q177,440 188.5,451.5Q200,463 200,480Q200,497 188.5,508.5Q177,520 160,520ZM800,520Q783,520 771.5,508.5Q760,497 760,480Q760,463 771.5,451.5Q783,440 800,440Q817,440 828.5,451.5Q840,463 840,480Q840,497 828.5,508.5Q817,520 800,520ZM160,680Q143,680 131.5,668.5Q120,657 120,640Q120,623 131.5,611.5Q143,600 160,600Q177,600 188.5,611.5Q200,623 200,640Q200,657 188.5,668.5Q177,680 160,680ZM800,680Q783,680 771.5,668.5Q760,657 760,640Q760,623 771.5,611.5Q783,600 800,600Q817,600 828.5,611.5Q840,623 840,640Q840,657 828.5,668.5Q817,680 800,680ZM160,840Q143,840 131.5,828.5Q120,817 120,800Q120,783 131.5,771.5Q143,760 160,760Q177,760 188.5,771.5Q200,783 200,800Q200,817 188.5,828.5Q177,840 160,840ZM320,840Q303,840 291.5,828.5Q280,817 280,800Q280,783 291.5,771.5Q303,760 320,760Q337,760 348.5,771.5Q360,783 360,800Q360,817 348.5,828.5Q337,840 320,840ZM480,840Q463,840 451.5,828.5Q440,817 440,800Q440,783 451.5,771.5Q463,760 480,760Q497,760 508.5,771.5Q520,783 520,800Q520,817 508.5,828.5Q497,840 480,840ZM640,840Q623,840 611.5,828.5Q600,817 600,800Q600,783 611.5,771.5Q623,760 640,760Q657,760 668.5,771.5Q680,783 680,800Q680,817 668.5,828.5Q657,840 640,840ZM800,840Q783,840 771.5,828.5Q760,817 760,800Q760,783 771.5,771.5Q783,760 800,760Q817,760 828.5,771.5Q840,783 840,800Q840,817 828.5,828.5Q817,840 800,840ZM360,680Q327,680 303.5,656.5Q280,633 280,600L280,360Q280,327 303.5,303.5Q327,280 360,280L600,280Q633,280 656.5,303.5Q680,327 680,360L680,600Q680,633 656.5,656.5Q633,680 600,680L360,680ZM360,600L600,600Q600,600 600,600Q600,600 600,600L600,360Q600,360 600,360Q600,360 600,360L360,360Q360,360 360,360Q360,360 360,360L360,600Q360,600 360,600Q360,600 360,600Z" />
</vector>

View file

@ -0,0 +1,9 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="960"
android:viewportHeight="960">
<path
android:fillColor="@android:color/white"
android:pathData="M433,880Q406,880 386.5,862Q367,844 363,818L354,752Q341,747 329.5,740Q318,733 307,725L245,751Q220,762 195,753Q170,744 156,721L109,639Q95,616 101,590Q107,564 128,547L181,507Q180,500 180,493.5Q180,487 180,480Q180,473 180,466.5Q180,460 181,453L128,413Q107,396 101,370Q95,344 109,321L156,239Q170,216 195,207Q220,198 245,209L307,235Q318,227 330,220Q342,213 354,208L363,142Q367,116 386.5,98Q406,80 433,80L527,80Q554,80 573.5,98Q593,116 597,142L606,208Q619,213 630.5,220Q642,227 653,235L715,209Q740,198 765,207Q790,216 804,239L851,321Q865,344 859,370Q853,396 832,413L779,453Q780,460 780,466.5Q780,473 780,480Q780,487 780,493.5Q780,500 778,507L831,547Q852,564 858,590Q864,616 850,639L802,721Q788,744 763,753Q738,762 713,751L653,725Q642,733 630,740Q618,747 606,752L597,818Q593,844 573.5,862Q554,880 527,880L433,880ZM440,800L519,800L533,694Q564,686 590.5,670.5Q617,655 639,633L738,674L777,606L691,541Q696,527 698,511.5Q700,496 700,480Q700,464 698,448.5Q696,433 691,419L777,354L738,286L639,328Q617,305 590.5,289.5Q564,274 533,266L520,160L441,160L427,266Q396,274 369.5,289.5Q343,305 321,327L222,286L183,354L269,418Q264,433 262,448Q260,463 260,480Q260,496 262,511Q264,526 269,541L183,606L222,674L321,632Q343,655 369.5,670.5Q396,686 427,694L440,800ZM482,620Q540,620 581,579Q622,538 622,480Q622,422 581,381Q540,340 482,340Q423,340 382.5,381Q342,422 342,480Q342,538 382.5,579Q423,620 482,620ZM480,480L480,480Q480,480 480,480Q480,480 480,480L480,480L480,480L480,480Q480,480 480,480Q480,480 480,480Q480,480 480,480Q480,480 480,480L480,480L480,480L480,480Q480,480 480,480Q480,480 480,480L480,480L480,480L480,480Q480,480 480,480Q480,480 480,480L480,480L480,480L480,480Q480,480 480,480Q480,480 480,480Q480,480 480,480Q480,480 480,480L480,480L480,480L480,480Q480,480 480,480Q480,480 480,480L480,480Z" />
</vector>

View file

@ -0,0 +1,9 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="960"
android:viewportHeight="960">
<path
android:fillColor="@android:color/white"
android:pathData="M480,876Q473,876 467,875Q461,874 455,872Q320,827 240,705.5Q160,584 160,444L160,255Q160,230 174.5,210Q189,190 212,181L452,91Q466,86 480,86Q494,86 508,91L748,181Q771,190 785.5,210Q800,230 800,255L800,444Q800,584 720,705.5Q640,827 505,872Q499,874 493,875Q487,876 480,876ZM480,796Q584,763 652,664Q720,565 720,444L720,255Q720,255 720,255Q720,255 720,255L480,165Q480,165 480,165Q480,165 480,165L240,255Q240,255 240,255Q240,255 240,255L240,444Q240,565 308,664Q376,763 480,796ZM480,480Q480,480 480,480Q480,480 480,480L480,480Q480,480 480,480Q480,480 480,480L480,480Q480,480 480,480Q480,480 480,480L480,480Q480,480 480,480Q480,480 480,480L480,480Q480,480 480,480Q480,480 480,480Z" />
</vector>

View file

@ -0,0 +1,11 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:autoMirrored="true"
android:viewportWidth="960"
android:viewportHeight="960">
<path
android:fillColor="@android:color/white"
android:pathData="M160,720Q143,720 131.5,708.5Q120,697 120,680Q120,663 131.5,651.5Q143,640 160,640L320,640Q337,640 348.5,651.5Q360,663 360,680Q360,697 348.5,708.5Q337,720 320,720L160,720ZM160,520Q143,520 131.5,508.5Q120,497 120,480Q120,463 131.5,451.5Q143,440 160,440L560,440Q577,440 588.5,451.5Q600,463 600,480Q600,497 588.5,508.5Q577,520 560,520L160,520ZM160,320Q143,320 131.5,308.5Q120,297 120,280Q120,263 131.5,251.5Q143,240 160,240L800,240Q817,240 828.5,251.5Q840,263 840,280Q840,297 828.5,308.5Q817,320 800,320L160,320Z" />
</vector>

View file

@ -0,0 +1,9 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="960"
android:viewportHeight="960">
<path
android:fillColor="@android:color/white"
android:pathData="M419,880Q391,880 366.5,868Q342,856 325,834L124,579Q116,570 117,557.5Q118,545 126,537L126,537Q146,516 174,512Q202,508 226,523L300,568L300,240Q300,223 311.5,211.5Q323,200 340,200Q357,200 369,211.5Q381,223 381,240L381,640Q381,663 360.5,674.5Q340,686 320,674L284,652L388,785Q394,792 402,796Q410,800 419,800L640,800Q673,800 696.5,776.5Q720,753 720,720L720,560Q720,543 708.5,531.5Q697,520 680,520L501,520Q484,520 472.5,508.5Q461,497 461,480L461,480Q461,463 472.5,451.5Q484,440 501,440L680,440Q730,440 765,475Q800,510 800,560L800,720Q800,786 753,833Q706,880 640,880L419,880ZM502,620L502,620L502,620L502,620Q502,620 502,620Q502,620 502,620L502,620Q502,620 502,620Q502,620 502,620L502,620Q502,620 502,620Q502,620 502,620L502,620L502,620Q502,620 502,620Q502,620 502,620ZM339,0Q439,0 509,70Q579,140 579,240Q579,265 574,288.5Q569,312 559,335Q554,346 543.5,349Q533,352 522,347Q511,342 506.5,330Q502,318 507,305Q513,289 516,273Q519,257 519,240Q519,165 466.5,112.5Q414,60 339,60Q264,60 211.5,112.5Q159,165 159,240Q159,257 161.5,273.5Q164,290 170,305Q175,318 170.5,330Q166,342 155,347Q144,352 133.5,348.5Q123,345 118,334Q109,312 104,288.5Q99,265 99,240Q99,140 169,70Q239,0 339,0ZM339,100Q397,100 438,141Q479,182 479,240Q479,250 477.5,259Q476,268 474,277Q470,290 459,296Q448,302 436,298Q424,294 417.5,283Q411,272 415,260Q416,257 418,240Q418,207 394.5,183.5Q371,160 338,160Q305,160 281.5,183Q258,206 258,240Q258,245 258.5,250.5Q259,256 261,261Q264,273 258,283Q252,293 240,296Q228,299 217.5,293Q207,287 203,275Q201,268 200,259.5Q199,251 199,240Q199,181 240,140.5Q281,100 339,100Z" />
</vector>

View file

@ -0,0 +1,10 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:autoMirrored="true"
android:viewportWidth="960"
android:viewportHeight="960">
<path
android:fillColor="@android:color/white"
android:pathData="M320,760Q303,760 291.5,748.5Q280,737 280,720Q280,703 291.5,691.5Q303,680 320,680L564,680Q627,680 673.5,640Q720,600 720,540Q720,480 673.5,440Q627,400 564,400L312,400L388,476Q399,487 399,504Q399,521 388,532Q377,543 360,543Q343,543 332,532L188,388Q182,382 179.5,375Q177,368 177,360Q177,352 179.5,345Q182,338 188,332L332,188Q343,177 360,177Q377,177 388,188Q399,199 399,216Q399,233 388,244L312,320L564,320Q661,320 730.5,383Q800,446 800,540Q800,634 730.5,697Q661,760 564,760L320,760Z" />
</vector>

View file

@ -0,0 +1,9 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="960"
android:viewportHeight="960">
<path
android:fillColor="@android:color/white"
android:pathData="M240,800Q207,800 183.5,776.5Q160,753 160,720L160,640Q160,623 171.5,611.5Q183,600 200,600Q217,600 228.5,611.5Q240,623 240,640L240,720Q240,720 240,720Q240,720 240,720L720,720Q720,720 720,720Q720,720 720,720L720,640Q720,623 731.5,611.5Q743,600 760,600Q777,600 788.5,611.5Q800,623 800,640L800,720Q800,753 776.5,776.5Q753,800 720,800L240,800ZM440,314L365,389Q353,401 336.5,400.5Q320,400 308,388Q297,376 296.5,360Q296,344 308,332L452,188Q458,182 465,179.5Q472,177 480,177Q488,177 495,179.5Q502,182 508,188L652,332Q664,344 663.5,360Q663,376 652,388Q640,400 623.5,400.5Q607,401 595,389L520,314L520,600Q520,617 508.5,628.5Q497,640 480,640Q463,640 451.5,628.5Q440,617 440,600L440,314Z" />
</vector>

View file

@ -0,0 +1,9 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="960"
android:viewportHeight="960">
<path
android:fillColor="@android:color/white"
android:pathData="M80,720L80,240Q80,207 103.5,183.5Q127,160 160,160L800,160Q833,160 856.5,183.5Q880,207 880,240L880,720Q880,753 856.5,776.5Q833,800 800,800L160,800Q127,800 103.5,776.5Q80,753 80,720ZM800,440L800,240Q800,240 800,240Q800,240 800,240L160,240Q160,240 160,240Q160,240 160,240L160,440Q160,440 160,440Q160,440 160,440L800,440Q800,440 800,440Q800,440 800,440ZM400,720L800,720Q800,720 800,720Q800,720 800,720L800,520Q800,520 800,520Q800,520 800,520L400,520Q400,520 400,520Q400,520 400,520L400,720Q400,720 400,720Q400,720 400,720ZM160,720L320,720Q320,720 320,720Q320,720 320,720L320,520Q320,520 320,520Q320,520 320,520L160,520Q160,520 160,520Q160,520 160,520L160,720Q160,720 160,720Q160,720 160,720Z" />
</vector>

View file

@ -0,0 +1,9 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="960"
android:viewportHeight="960">
<path
android:fillColor="@android:color/white"
android:pathData="M646,522L560,660Q549,677 529.5,674Q510,671 505,651L477,539L204,812Q193,823 176.5,823.5Q160,824 148,812Q137,801 137,784Q137,767 148,756L421,482L309,454Q289,449 286,429.5Q283,410 300,399L438,314L426,151Q424,131 442,122Q460,113 475,126L600,231L751,170Q770,162 784,176Q798,190 790,209L729,360L834,484Q847,499 838,517Q829,535 809,533L646,522ZM134,254Q128,248 128,240Q128,232 134,226L186,174Q192,168 200,168Q208,168 214,174L266,226Q272,232 272,240Q272,248 266,254L214,306Q208,312 200,312Q192,312 186,306L134,254ZM555,517L603,438L696,445L636,374L671,288L585,323L514,264L521,356L442,405L532,427L555,517ZM706,826L654,774Q648,768 648,760Q648,752 654,746L706,694Q712,688 720,688Q728,688 734,694L786,746Q792,752 792,760Q792,768 786,774L734,826Q728,832 720,832Q712,832 706,826ZM569,390L569,390L569,390L569,390L569,390L569,390L569,390L569,390L569,390L569,390Z" />
</vector>

View file

@ -116,4 +116,5 @@
<string name="pref_developer_options">Developer Options</string>
<string name="pref_developer_options_desc">Some debugging options, only for DEVELOPMENT use</string>
<string name="pref_padding">Padding</string>
<string name="tip_selected">Selected</string>
</resources>

View file

@ -8,7 +8,6 @@ datastore = "1.1.7"
activityCompose = "1.11.0"
composeBom = "2025.11.00"
liveData = "1.9.4"
icons = "1.7.8"
room = "2.8.3"
material3 = "1.5.0-alpha08"
adaptive = "1.2.0"
@ -58,8 +57,6 @@ androidx-ui-tooling-preview = { group = "androidx.compose.ui", name = "ui-toolin
androidx-ui-test-manifest = { group = "androidx.compose.ui", name = "ui-test-manifest" }
androidx-ui-test-junit4 = { group = "androidx.compose.ui", name = "ui-test-junit4" }
androidx-material3 = { group = "androidx.compose.material3", name = "material3", version.ref = "material3" }
androidx-material-icon-core = { group = "androidx.compose.material", name = "material-icons-core", version.ref = "icons" }
androidx-material-icon-extended = { group = "androidx.compose.material", name = "material-icons-extended", version.ref = "icons" }
androidx-navigation3-runtime = { module = "androidx.navigation3:navigation3-runtime", version.ref = "nav3Core" }
androidx-navigation3-ui = { module = "androidx.navigation3:navigation3-ui", version.ref = "nav3Core" }