Migrate to Material symbols
This commit is contained in:
@@ -78,7 +78,6 @@ dependencies {
|
||||
implementation(libs.androidx.compose.ui)
|
||||
implementation(libs.androidx.compose.uitooling)
|
||||
implementation(libs.androidx.compose.material3)
|
||||
implementation(libs.androidx.compose.materialicons)
|
||||
implementation(libs.androidx.compose.animation)
|
||||
implementation(libs.androidx.compose.animationgraphics)
|
||||
implementation(libs.androidx.constraintlayout.compose)
|
||||
|
||||
@@ -2,7 +2,6 @@ package de.mm20.launcher2.ui.common
|
||||
|
||||
import androidx.compose.animation.AnimatedContent
|
||||
import androidx.compose.animation.EnterExitState
|
||||
import androidx.compose.animation.SharedTransitionScope
|
||||
import androidx.compose.animation.core.animateFloat
|
||||
import androidx.compose.foundation.ScrollState
|
||||
import androidx.compose.foundation.horizontalScroll
|
||||
@@ -14,11 +13,6 @@ import androidx.compose.foundation.layout.fillMaxHeight
|
||||
import androidx.compose.foundation.layout.fillMaxWidth
|
||||
import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.foundation.layout.size
|
||||
import androidx.compose.material.icons.Icons
|
||||
import androidx.compose.material.icons.rounded.Edit
|
||||
import androidx.compose.material.icons.rounded.ExpandLess
|
||||
import androidx.compose.material.icons.rounded.ExpandMore
|
||||
import androidx.compose.material.icons.rounded.Star
|
||||
import androidx.compose.material3.FilterChip
|
||||
import androidx.compose.material3.FilterChipDefaults
|
||||
import androidx.compose.material3.FloatingActionButtonDefaults
|
||||
@@ -33,13 +27,13 @@ import androidx.compose.runtime.remember
|
||||
import androidx.compose.ui.Alignment
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.draw.rotate
|
||||
import androidx.compose.ui.res.painterResource
|
||||
import androidx.compose.ui.res.stringResource
|
||||
import androidx.compose.ui.unit.dp
|
||||
import de.mm20.launcher2.search.Tag
|
||||
import de.mm20.launcher2.ui.R
|
||||
import de.mm20.launcher2.ui.launcher.sheets.LocalBottomSheetManager
|
||||
import de.mm20.launcher2.ui.layout.TopReversed
|
||||
import de.mm20.launcher2.ui.modifier.consumeAllScrolling
|
||||
|
||||
@Composable
|
||||
fun FavoritesTagSelector(
|
||||
@@ -84,7 +78,7 @@ fun FavoritesTagSelector(
|
||||
leadingIcon = if (compact) null else {
|
||||
{
|
||||
Icon(
|
||||
imageVector = Icons.Rounded.Star,
|
||||
painter = painterResource(R.drawable.star_20px_filled),
|
||||
contentDescription = null,
|
||||
modifier = Modifier.size(FilterChipDefaults.IconSize),
|
||||
)
|
||||
@@ -93,7 +87,7 @@ fun FavoritesTagSelector(
|
||||
label = {
|
||||
if (compact) {
|
||||
Icon(
|
||||
imageVector = Icons.Rounded.Star,
|
||||
painter = painterResource(R.drawable.star_20px_filled),
|
||||
contentDescription = null,
|
||||
modifier = Modifier.size(FilterChipDefaults.IconSize),
|
||||
)
|
||||
@@ -129,7 +123,7 @@ fun FavoritesTagSelector(
|
||||
modifier = Modifier
|
||||
.rotate(rot),
|
||||
onClick = { onExpand(true) }) {
|
||||
Icon(Icons.Rounded.ExpandMore, null)
|
||||
Icon(painterResource(R.drawable.arrow_drop_down_24px), null)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -141,7 +135,7 @@ fun FavoritesTagSelector(
|
||||
onClick = { sheetManager.showEditFavoritesSheet() }
|
||||
) {
|
||||
Icon(
|
||||
imageVector = Icons.Rounded.Edit,
|
||||
painter = painterResource(R.drawable.edit_24px),
|
||||
contentDescription = null
|
||||
)
|
||||
}
|
||||
@@ -164,7 +158,7 @@ fun FavoritesTagSelector(
|
||||
leadingIcon = if (compact) null else {
|
||||
{
|
||||
Icon(
|
||||
imageVector = Icons.Rounded.Star,
|
||||
painter = painterResource(R.drawable.star_20px_filled),
|
||||
contentDescription = null,
|
||||
modifier = Modifier.size(FilterChipDefaults.IconSize),
|
||||
)
|
||||
@@ -173,7 +167,7 @@ fun FavoritesTagSelector(
|
||||
label = {
|
||||
if (compact) {
|
||||
Icon(
|
||||
imageVector = Icons.Rounded.Star,
|
||||
painter = painterResource(R.drawable.star_20px_filled),
|
||||
contentDescription = null,
|
||||
modifier = Modifier.size(FilterChipDefaults.IconSize),
|
||||
)
|
||||
@@ -215,7 +209,7 @@ fun FavoritesTagSelector(
|
||||
.rotate(rot),
|
||||
onClick = { onExpand(false) }
|
||||
) {
|
||||
Icon(Icons.Rounded.ExpandLess, null)
|
||||
Icon(painterResource(R.drawable.arrow_drop_up_24px), null)
|
||||
}
|
||||
|
||||
if (editButton) {
|
||||
@@ -224,7 +218,7 @@ fun FavoritesTagSelector(
|
||||
onClick = { sheetManager.showEditFavoritesSheet() }
|
||||
) {
|
||||
Icon(
|
||||
imageVector = Icons.Rounded.Edit,
|
||||
painter = painterResource(R.drawable.edit_24px),
|
||||
contentDescription = null
|
||||
)
|
||||
}
|
||||
|
||||
@@ -13,10 +13,6 @@ import androidx.compose.foundation.lazy.grid.GridCells
|
||||
import androidx.compose.foundation.lazy.grid.GridItemSpan
|
||||
import androidx.compose.foundation.lazy.grid.LazyVerticalGrid
|
||||
import androidx.compose.foundation.lazy.grid.items
|
||||
import androidx.compose.material.icons.Icons
|
||||
import androidx.compose.material.icons.rounded.ArrowDropDown
|
||||
import androidx.compose.material.icons.rounded.FilterAlt
|
||||
import androidx.compose.material.icons.rounded.Search
|
||||
import androidx.compose.material3.Button
|
||||
import androidx.compose.material3.ButtonDefaults
|
||||
import androidx.compose.material3.CircularProgressIndicator
|
||||
@@ -36,6 +32,7 @@ import androidx.compose.runtime.setValue
|
||||
import androidx.compose.ui.Alignment
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.platform.LocalContext
|
||||
import androidx.compose.ui.res.painterResource
|
||||
import androidx.compose.ui.res.stringResource
|
||||
import androidx.compose.ui.unit.dp
|
||||
import coil.compose.AsyncImage
|
||||
@@ -98,7 +95,7 @@ fun IconPicker(
|
||||
SearchBarDefaults.InputField(
|
||||
leadingIcon = {
|
||||
Icon(
|
||||
imageVector = Icons.Rounded.Search,
|
||||
painterResource(R.drawable.search_24px),
|
||||
contentDescription = null
|
||||
)
|
||||
},
|
||||
@@ -164,7 +161,7 @@ fun IconPicker(
|
||||
modifier = Modifier
|
||||
.padding(end = ButtonDefaults.IconSpacing)
|
||||
.size(ButtonDefaults.IconSize),
|
||||
imageVector = Icons.Rounded.FilterAlt,
|
||||
painter = painterResource(R.drawable.filter_alt_20px),
|
||||
contentDescription = null
|
||||
)
|
||||
} else {
|
||||
@@ -218,7 +215,7 @@ fun IconPicker(
|
||||
modifier = Modifier.animateContentSize()
|
||||
)
|
||||
Icon(
|
||||
Icons.Rounded.ArrowDropDown,
|
||||
painterResource(R.drawable.arrow_drop_down_20px),
|
||||
modifier = Modifier
|
||||
.padding(start = ButtonDefaults.IconSpacing)
|
||||
.size(ButtonDefaults.IconSize),
|
||||
|
||||
@@ -12,10 +12,6 @@ import androidx.compose.foundation.layout.aspectRatio
|
||||
import androidx.compose.foundation.layout.fillMaxWidth
|
||||
import androidx.compose.foundation.layout.height
|
||||
import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.material.icons.Icons
|
||||
import androidx.compose.material.icons.rounded.DarkMode
|
||||
import androidx.compose.material.icons.rounded.ErrorOutline
|
||||
import androidx.compose.material.icons.rounded.LightMode
|
||||
import androidx.compose.material3.Button
|
||||
import androidx.compose.material3.CircularProgressIndicator
|
||||
import androidx.compose.material3.Icon
|
||||
@@ -37,6 +33,7 @@ import androidx.compose.ui.draw.clip
|
||||
import androidx.compose.ui.graphics.Color
|
||||
import androidx.compose.ui.graphics.toArgb
|
||||
import androidx.compose.ui.platform.LocalContext
|
||||
import androidx.compose.ui.res.painterResource
|
||||
import androidx.compose.ui.res.stringResource
|
||||
import androidx.compose.ui.unit.dp
|
||||
import androidx.lifecycle.viewmodel.compose.viewModel
|
||||
@@ -87,7 +84,7 @@ fun ImportThemeSheet(
|
||||
contentAlignment = Alignment.Center
|
||||
) {
|
||||
LargeMessage(
|
||||
icon = Icons.Rounded.ErrorOutline,
|
||||
icon = R.drawable.error_48px,
|
||||
text = stringResource(R.string.import_theme_error),
|
||||
)
|
||||
}
|
||||
@@ -157,14 +154,14 @@ fun ThemePreview(
|
||||
selected = !darkTheme,
|
||||
onClick = { darkTheme = false }
|
||||
) {
|
||||
Icon(Icons.Rounded.LightMode, null)
|
||||
Icon(painterResource(R.drawable.light_mode_24px), null)
|
||||
}
|
||||
SegmentedButton(
|
||||
shape = SegmentedButtonDefaults.itemShape(index = 1, count = 2),
|
||||
selected = darkTheme,
|
||||
onClick = { darkTheme = true }
|
||||
) {
|
||||
Icon(Icons.Rounded.DarkMode, null)
|
||||
Icon(painterResource(R.drawable.dark_mode_24px), null)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -9,11 +9,6 @@ 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.rounded.CheckCircleOutline
|
||||
import androidx.compose.material.icons.rounded.ErrorOutline
|
||||
import androidx.compose.material.icons.rounded.Info
|
||||
import androidx.compose.material.icons.rounded.Warning
|
||||
import androidx.compose.material3.Button
|
||||
import androidx.compose.material3.CircularProgressIndicator
|
||||
import androidx.compose.material3.MaterialTheme
|
||||
@@ -48,7 +43,7 @@ fun RestoreBackupSheet(
|
||||
val compatibility by viewModel.compatibility
|
||||
|
||||
BottomSheetDialog(onDismissRequest) {
|
||||
Column (
|
||||
Column(
|
||||
modifier = Modifier
|
||||
.fillMaxWidth()
|
||||
.padding(it),
|
||||
@@ -67,13 +62,15 @@ fun RestoreBackupSheet(
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
RestoreBackupState.InvalidFile -> {
|
||||
LargeMessage(
|
||||
modifier = Modifier.aspectRatio(1f),
|
||||
icon = Icons.Rounded.ErrorOutline,
|
||||
icon = R.drawable.error_48px,
|
||||
text = stringResource(id = R.string.restore_invalid_file)
|
||||
)
|
||||
}
|
||||
|
||||
RestoreBackupState.Ready -> {
|
||||
val metadata by viewModel.metadata
|
||||
|
||||
@@ -84,7 +81,7 @@ fun RestoreBackupSheet(
|
||||
.fillMaxWidth()
|
||||
.wrapContentHeight()
|
||||
.padding(bottom = 16.dp),
|
||||
icon = Icons.Rounded.Info,
|
||||
icon = R.drawable.info_24px,
|
||||
text = stringResource(
|
||||
R.string.restore_meta,
|
||||
DateUtils.formatDateTime(
|
||||
@@ -99,7 +96,7 @@ fun RestoreBackupSheet(
|
||||
if (compatibility == BackupCompatibility.Incompatible) {
|
||||
LargeMessage(
|
||||
modifier = Modifier.aspectRatio(1f),
|
||||
icon = Icons.Rounded.ErrorOutline,
|
||||
icon = R.drawable.error_48px,
|
||||
text = stringResource(
|
||||
id = R.string.restore_incompatible_file,
|
||||
stringResource(R.string.app_name)
|
||||
@@ -112,18 +109,19 @@ fun RestoreBackupSheet(
|
||||
modifier = Modifier
|
||||
.fillMaxWidth()
|
||||
.padding(bottom = 16.dp),
|
||||
icon = Icons.Rounded.Warning,
|
||||
icon = R.drawable.warning_24px,
|
||||
text =
|
||||
stringResource(
|
||||
R.string.restore_different_minor_version,
|
||||
stringResource(R.string.app_name)
|
||||
)
|
||||
stringResource(
|
||||
R.string.restore_different_minor_version,
|
||||
stringResource(R.string.app_name)
|
||||
)
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
RestoreBackupState.Restoring -> {
|
||||
Box(
|
||||
modifier = Modifier
|
||||
@@ -136,10 +134,11 @@ fun RestoreBackupSheet(
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
RestoreBackupState.Restored -> {
|
||||
LargeMessage(
|
||||
modifier = Modifier.aspectRatio(1f),
|
||||
icon = Icons.Rounded.CheckCircleOutline,
|
||||
icon = R.drawable.check_circle_48px,
|
||||
text = stringResource(
|
||||
id = R.string.restore_complete
|
||||
)
|
||||
|
||||
@@ -8,9 +8,6 @@ import androidx.compose.foundation.layout.fillMaxWidth
|
||||
import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.foundation.lazy.LazyColumn
|
||||
import androidx.compose.foundation.lazy.items
|
||||
import androidx.compose.material.icons.Icons
|
||||
import androidx.compose.material.icons.rounded.CheckCircle
|
||||
import androidx.compose.material.icons.rounded.Search
|
||||
import androidx.compose.material3.Icon
|
||||
import androidx.compose.material3.MaterialTheme
|
||||
import androidx.compose.material3.OutlinedTextField
|
||||
@@ -21,6 +18,7 @@ import androidx.compose.runtime.getValue
|
||||
import androidx.compose.runtime.remember
|
||||
import androidx.compose.ui.Alignment
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.res.painterResource
|
||||
import androidx.compose.ui.res.stringResource
|
||||
import androidx.compose.ui.text.style.TextOverflow
|
||||
import androidx.compose.ui.unit.dp
|
||||
@@ -53,7 +51,7 @@ fun SearchablePicker(
|
||||
value = viewModel.searchQuery,
|
||||
onValueChange = { viewModel.onSearchQueryChanged(it) },
|
||||
leadingIcon = {
|
||||
Icon(Icons.Rounded.Search, null)
|
||||
Icon(painterResource(R.drawable.search_24px), null)
|
||||
},
|
||||
placeholder = {
|
||||
Text(stringResource(R.string.search_bar_placeholder))
|
||||
@@ -99,7 +97,7 @@ fun SearchablePicker(
|
||||
)
|
||||
if (selected) {
|
||||
Icon(
|
||||
imageVector = Icons.Rounded.CheckCircle,
|
||||
painterResource(R.drawable.check_circle_24px_filled),
|
||||
contentDescription = null,
|
||||
tint = MaterialTheme.colorScheme.secondary,
|
||||
)
|
||||
|
||||
@@ -12,14 +12,11 @@ import androidx.compose.foundation.combinedClickable
|
||||
import androidx.compose.foundation.layout.Arrangement
|
||||
import androidx.compose.foundation.layout.Row
|
||||
import androidx.compose.foundation.layout.height
|
||||
import androidx.compose.foundation.layout.heightIn
|
||||
import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.foundation.layout.size
|
||||
import androidx.compose.foundation.layout.width
|
||||
import androidx.compose.foundation.layout.widthIn
|
||||
import androidx.compose.foundation.shape.CircleShape
|
||||
import androidx.compose.material.icons.Icons
|
||||
import androidx.compose.material.icons.rounded.Close
|
||||
import androidx.compose.material3.FilterChipDefaults
|
||||
import androidx.compose.material3.Icon
|
||||
import androidx.compose.material3.InputChipDefaults
|
||||
@@ -32,6 +29,7 @@ import androidx.compose.ui.Alignment
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.draw.shadow
|
||||
import androidx.compose.ui.graphics.Color
|
||||
import androidx.compose.ui.res.painterResource
|
||||
import androidx.compose.ui.text.style.TextAlign
|
||||
import androidx.compose.ui.unit.dp
|
||||
import de.mm20.launcher2.icons.IconService
|
||||
@@ -41,6 +39,7 @@ import de.mm20.launcher2.icons.VectorLayer
|
||||
import de.mm20.launcher2.search.Tag
|
||||
import de.mm20.launcher2.ui.component.ShapedLauncherIcon
|
||||
import de.mm20.launcher2.ui.ktx.toPixels
|
||||
import de.mm20.launcher2.ui.R
|
||||
import org.koin.compose.koinInject
|
||||
|
||||
@Composable
|
||||
@@ -141,7 +140,7 @@ fun TagChip(
|
||||
modifier = Modifier
|
||||
.padding(start = 4.dp)
|
||||
.size(FilterChipDefaults.IconSize),
|
||||
imageVector = foregroundLayer.vector,
|
||||
painter = painterResource(foregroundLayer.icon),
|
||||
contentDescription = null,
|
||||
tint = iconColor
|
||||
)
|
||||
@@ -162,7 +161,7 @@ fun TagChip(
|
||||
onClear?.invoke()
|
||||
}
|
||||
.size(FilterChipDefaults.IconSize),
|
||||
imageVector = Icons.Rounded.Close,
|
||||
painter = painterResource(R.drawable.close_20px),
|
||||
contentDescription = null,
|
||||
)
|
||||
}
|
||||
|
||||
@@ -8,9 +8,6 @@ import androidx.compose.foundation.layout.fillMaxWidth
|
||||
import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.foundation.lazy.LazyColumn
|
||||
import androidx.compose.foundation.lazy.items
|
||||
import androidx.compose.material.icons.Icons
|
||||
import androidx.compose.material.icons.rounded.Error
|
||||
import androidx.compose.material.icons.rounded.Search
|
||||
import androidx.compose.material3.CircularProgressIndicator
|
||||
import androidx.compose.material3.Icon
|
||||
import androidx.compose.material3.SearchBar
|
||||
@@ -24,6 +21,7 @@ import androidx.compose.runtime.rememberCoroutineScope
|
||||
import androidx.compose.runtime.setValue
|
||||
import androidx.compose.ui.Alignment
|
||||
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.lifecycle.viewmodel.compose.viewModel
|
||||
@@ -57,7 +55,7 @@ fun WeatherLocationSearchDialog(
|
||||
SearchBarDefaults.InputField(
|
||||
leadingIcon = {
|
||||
Icon(
|
||||
imageVector = Icons.Rounded.Search,
|
||||
painterResource(R.drawable.search_24px),
|
||||
contentDescription = null
|
||||
)
|
||||
},
|
||||
@@ -103,7 +101,7 @@ fun WeatherLocationSearchDialog(
|
||||
} else if (query.isNotEmpty()) {
|
||||
SmallMessage(
|
||||
modifier = Modifier.fillMaxWidth(),
|
||||
icon = Icons.Rounded.Error,
|
||||
icon = R.drawable.error_24px,
|
||||
text = stringResource(R.string.weather_location_search_no_result)
|
||||
)
|
||||
}
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package de.mm20.launcher2.ui.component
|
||||
|
||||
import androidx.annotation.DrawableRes
|
||||
import androidx.compose.foundation.layout.Arrangement
|
||||
import androidx.compose.foundation.layout.Box
|
||||
import androidx.compose.foundation.layout.Column
|
||||
@@ -17,13 +18,14 @@ import androidx.compose.ui.Alignment
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.graphics.Color
|
||||
import androidx.compose.ui.graphics.vector.ImageVector
|
||||
import androidx.compose.ui.res.painterResource
|
||||
import androidx.compose.ui.unit.dp
|
||||
|
||||
@Composable
|
||||
fun Banner(
|
||||
modifier: Modifier = Modifier,
|
||||
text: String,
|
||||
icon: ImageVector,
|
||||
@DrawableRes icon: Int,
|
||||
color: Color = MaterialTheme.colorScheme.surfaceContainer,
|
||||
primaryAction: (@Composable () -> Unit)? = null,
|
||||
secondaryAction: (@Composable () -> Unit)? = null,
|
||||
@@ -45,7 +47,7 @@ fun Banner(
|
||||
) {
|
||||
Icon(
|
||||
modifier = Modifier.padding(end = 16.dp),
|
||||
imageVector = icon,
|
||||
painter = painterResource(icon),
|
||||
contentDescription = null
|
||||
)
|
||||
Text(
|
||||
|
||||
@@ -21,8 +21,6 @@ import androidx.compose.foundation.layout.requiredSize
|
||||
import androidx.compose.foundation.layout.requiredWidth
|
||||
import androidx.compose.foundation.layout.width
|
||||
import androidx.compose.foundation.shape.CircleShape
|
||||
import androidx.compose.material.icons.Icons
|
||||
import androidx.compose.material.icons.rounded.UnfoldMore
|
||||
import androidx.compose.material3.Icon
|
||||
import androidx.compose.material3.MaterialTheme
|
||||
import androidx.compose.material3.Text
|
||||
@@ -37,10 +35,12 @@ import androidx.compose.ui.draw.rotate
|
||||
import androidx.compose.ui.hapticfeedback.HapticFeedbackType
|
||||
import androidx.compose.ui.platform.LocalDensity
|
||||
import androidx.compose.ui.platform.LocalHapticFeedback
|
||||
import androidx.compose.ui.res.painterResource
|
||||
import androidx.compose.ui.unit.Dp
|
||||
import androidx.compose.ui.unit.coerceIn
|
||||
import androidx.compose.ui.unit.dp
|
||||
import androidx.compose.ui.unit.isUnspecified
|
||||
import de.mm20.launcher2.ui.R
|
||||
|
||||
enum class ResizeAxis {
|
||||
Horizontal,
|
||||
@@ -135,7 +135,7 @@ fun DragResizeHandle(
|
||||
.padding(8.dp)
|
||||
.rotate(90f)
|
||||
.align(Alignment.Center),
|
||||
imageVector = Icons.Rounded.UnfoldMore,
|
||||
painter = painterResource(R.drawable.unfold_more_24px),
|
||||
contentDescription = null,
|
||||
tint = MaterialTheme.colorScheme.onPrimary,
|
||||
)
|
||||
@@ -191,7 +191,7 @@ fun DragResizeHandle(
|
||||
.background(MaterialTheme.colorScheme.primary, CircleShape)
|
||||
.padding(8.dp)
|
||||
.align(Alignment.Center),
|
||||
imageVector = Icons.Rounded.UnfoldMore,
|
||||
painter = painterResource(R.drawable.unfold_more_24px),
|
||||
contentDescription = null,
|
||||
tint = MaterialTheme.colorScheme.onPrimary,
|
||||
)
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package de.mm20.launcher2.ui.component
|
||||
|
||||
import androidx.annotation.DrawableRes
|
||||
import androidx.compose.foundation.layout.Arrangement
|
||||
import androidx.compose.foundation.layout.Column
|
||||
import androidx.compose.foundation.layout.padding
|
||||
@@ -13,13 +14,17 @@ import androidx.compose.ui.Alignment
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.graphics.Color
|
||||
import androidx.compose.ui.graphics.vector.ImageVector
|
||||
import androidx.compose.ui.res.painterResource
|
||||
import androidx.compose.ui.text.style.TextAlign
|
||||
import androidx.compose.ui.unit.dp
|
||||
|
||||
/**
|
||||
* @param icon the icon resource id. Should be an icon with optical size 48px.
|
||||
*/
|
||||
@Composable
|
||||
fun LargeMessage(
|
||||
modifier: Modifier = Modifier,
|
||||
icon: ImageVector,
|
||||
@DrawableRes icon: Int,
|
||||
text: String,
|
||||
color: Color = LocalContentColor.current
|
||||
) {
|
||||
@@ -29,7 +34,7 @@ fun LargeMessage(
|
||||
verticalArrangement = Arrangement.Center,
|
||||
) {
|
||||
Icon(
|
||||
imageVector = icon,
|
||||
painter = painterResource(icon),
|
||||
contentDescription = null,
|
||||
modifier = Modifier
|
||||
.padding(bottom = 24.dp)
|
||||
|
||||
@@ -1,8 +1,6 @@
|
||||
package de.mm20.launcher2.ui.component
|
||||
|
||||
import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.material.icons.Icons
|
||||
import androidx.compose.material.icons.rounded.Lock
|
||||
import androidx.compose.material3.Button
|
||||
import androidx.compose.material3.Text
|
||||
import androidx.compose.runtime.Composable
|
||||
@@ -21,7 +19,7 @@ fun MissingPermissionBanner(
|
||||
Banner(
|
||||
modifier = modifier,
|
||||
text = text,
|
||||
icon = Icons.Rounded.Lock,
|
||||
icon = R.drawable.lock_24px,
|
||||
primaryAction = {
|
||||
Button(
|
||||
modifier = Modifier.padding(start = 8.dp),
|
||||
|
||||
@@ -14,9 +14,6 @@ import androidx.compose.foundation.layout.size
|
||||
import androidx.compose.foundation.rememberScrollState
|
||||
import androidx.compose.foundation.text.BasicTextField
|
||||
import androidx.compose.foundation.text.KeyboardActions
|
||||
import androidx.compose.material.icons.Icons
|
||||
import androidx.compose.material.icons.rounded.Clear
|
||||
import androidx.compose.material.icons.rounded.Tag
|
||||
import androidx.compose.material3.DropdownMenu
|
||||
import androidx.compose.material3.DropdownMenuItem
|
||||
import androidx.compose.material3.Icon
|
||||
@@ -42,10 +39,12 @@ import androidx.compose.ui.graphics.SolidColor
|
||||
import androidx.compose.ui.input.key.Key
|
||||
import androidx.compose.ui.input.key.key
|
||||
import androidx.compose.ui.input.key.onKeyEvent
|
||||
import androidx.compose.ui.res.painterResource
|
||||
import androidx.compose.ui.text.TextStyle
|
||||
import androidx.compose.ui.text.input.VisualTransformation
|
||||
import androidx.compose.ui.unit.dp
|
||||
import androidx.compose.ui.window.PopupProperties
|
||||
import de.mm20.launcher2.ui.R
|
||||
import kotlinx.collections.immutable.toImmutableList
|
||||
import kotlinx.coroutines.launch
|
||||
|
||||
@@ -153,7 +152,7 @@ fun OutlinedTagsInputField(
|
||||
Icon(
|
||||
modifier = Modifier
|
||||
.size(InputChipDefaults.IconSize),
|
||||
imageVector = Icons.Rounded.Tag,
|
||||
painter = painterResource(R.drawable.tag_20px),
|
||||
contentDescription = null
|
||||
)
|
||||
},
|
||||
@@ -165,7 +164,7 @@ fun OutlinedTagsInputField(
|
||||
.clickable {
|
||||
onTagsChange(tags.filterIndexed { index, _ -> index != i })
|
||||
},
|
||||
imageVector = Icons.Rounded.Clear,
|
||||
painter = painterResource(R.drawable.close_20px),
|
||||
contentDescription = null
|
||||
)
|
||||
},
|
||||
|
||||
@@ -4,10 +4,6 @@ import android.icu.text.DecimalFormat
|
||||
import androidx.compose.foundation.layout.Row
|
||||
import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.foundation.layout.size
|
||||
import androidx.compose.material.icons.Icons
|
||||
import androidx.compose.material.icons.automirrored.rounded.StarHalf
|
||||
import androidx.compose.material.icons.rounded.Star
|
||||
import androidx.compose.material.icons.rounded.StarOutline
|
||||
import androidx.compose.material3.Icon
|
||||
import androidx.compose.material3.MaterialTheme
|
||||
import androidx.compose.material3.Text
|
||||
@@ -15,9 +11,11 @@ import androidx.compose.runtime.Composable
|
||||
import androidx.compose.ui.Alignment
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.graphics.Color
|
||||
import androidx.compose.ui.res.painterResource
|
||||
import androidx.compose.ui.tooling.preview.Preview
|
||||
import androidx.compose.ui.unit.Dp
|
||||
import androidx.compose.ui.unit.dp
|
||||
import de.mm20.launcher2.ui.R
|
||||
import kotlin.math.round
|
||||
|
||||
/**
|
||||
@@ -43,7 +41,7 @@ fun RatingBar(
|
||||
) {
|
||||
for (i in 0 until fullStars) {
|
||||
Icon(
|
||||
imageVector = Icons.Rounded.Star,
|
||||
painter = painterResource(R.drawable.star_20px_filled),
|
||||
contentDescription = null,
|
||||
tint = tint,
|
||||
modifier = iconModifier
|
||||
@@ -51,7 +49,7 @@ fun RatingBar(
|
||||
}
|
||||
if (halfStar) {
|
||||
Icon(
|
||||
imageVector = Icons.AutoMirrored.Rounded.StarHalf,
|
||||
painter = painterResource(R.drawable.star_half_20px),
|
||||
contentDescription = null,
|
||||
tint = tint,
|
||||
modifier = iconModifier
|
||||
@@ -59,7 +57,7 @@ fun RatingBar(
|
||||
}
|
||||
for (i in 0 until emptyStars) {
|
||||
Icon(
|
||||
imageVector = Icons.Rounded.StarOutline,
|
||||
painter = painterResource(R.drawable.star_20px),
|
||||
contentDescription = null,
|
||||
tint = tint,
|
||||
modifier = iconModifier
|
||||
|
||||
@@ -4,49 +4,20 @@ import android.content.ComponentName
|
||||
import android.content.pm.PackageManager
|
||||
import android.graphics.drawable.Drawable
|
||||
import androidx.compose.foundation.layout.size
|
||||
import androidx.compose.material.icons.Icons
|
||||
import androidx.compose.material.icons.automirrored.rounded.StickyNote2
|
||||
import androidx.compose.material.icons.rounded.Alarm
|
||||
import androidx.compose.material.icons.rounded.Call
|
||||
import androidx.compose.material.icons.rounded.Email
|
||||
import androidx.compose.material.icons.rounded.Error
|
||||
import androidx.compose.material.icons.rounded.Event
|
||||
import androidx.compose.material.icons.rounded.FindInPage
|
||||
import androidx.compose.material.icons.rounded.Games
|
||||
import androidx.compose.material.icons.rounded.ImageSearch
|
||||
import androidx.compose.material.icons.rounded.Language
|
||||
import androidx.compose.material.icons.rounded.LocationOn
|
||||
import androidx.compose.material.icons.rounded.ManageSearch
|
||||
import androidx.compose.material.icons.rounded.Movie
|
||||
import androidx.compose.material.icons.rounded.MusicNote
|
||||
import androidx.compose.material.icons.rounded.Person
|
||||
import androidx.compose.material.icons.rounded.PersonAdd
|
||||
import androidx.compose.material.icons.rounded.PersonSearch
|
||||
import androidx.compose.material.icons.rounded.Place
|
||||
import androidx.compose.material.icons.rounded.QueryStats
|
||||
import androidx.compose.material.icons.rounded.Search
|
||||
import androidx.compose.material.icons.rounded.Share
|
||||
import androidx.compose.material.icons.rounded.Sms
|
||||
import androidx.compose.material.icons.rounded.SportsEsports
|
||||
import androidx.compose.material.icons.rounded.StickyNote2
|
||||
import androidx.compose.material.icons.rounded.Timer
|
||||
import androidx.compose.material.icons.rounded.Translate
|
||||
import androidx.compose.material.icons.rounded.TravelExplore
|
||||
import androidx.compose.material.icons.rounded.Warning
|
||||
import androidx.compose.material3.Icon
|
||||
import androidx.compose.material3.MaterialTheme
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.runtime.LaunchedEffect
|
||||
import androidx.compose.runtime.getValue
|
||||
import androidx.compose.runtime.mutableStateOf
|
||||
import androidx.compose.runtime.remember
|
||||
import androidx.compose.runtime.getValue
|
||||
import androidx.compose.runtime.setValue
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.graphics.Color
|
||||
import androidx.compose.ui.graphics.ColorFilter
|
||||
import androidx.compose.ui.graphics.isSpecified
|
||||
import androidx.compose.ui.graphics.vector.ImageVector
|
||||
import androidx.compose.ui.platform.LocalContext
|
||||
import androidx.compose.ui.res.painterResource
|
||||
import androidx.compose.ui.unit.Dp
|
||||
import androidx.compose.ui.unit.dp
|
||||
import coil.compose.AsyncImage
|
||||
@@ -55,6 +26,7 @@ import de.mm20.launcher2.searchactions.actions.SearchAction
|
||||
import de.mm20.launcher2.searchactions.actions.SearchActionIcon
|
||||
import de.mm20.launcher2.searchactions.builders.AppSearchActionBuilder
|
||||
import de.mm20.launcher2.searchactions.builders.CustomizableSearchActionBuilder
|
||||
import de.mm20.launcher2.ui.R
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.withContext
|
||||
|
||||
@@ -66,7 +38,7 @@ fun SearchActionIcon(
|
||||
componentName: ComponentName? = null,
|
||||
size: Dp = 20.dp
|
||||
) {
|
||||
val tint = when(color) {
|
||||
val tint = when (color) {
|
||||
0 -> MaterialTheme.colorScheme.primary
|
||||
1 -> Color.Unspecified
|
||||
else -> Color(color)
|
||||
@@ -74,7 +46,7 @@ fun SearchActionIcon(
|
||||
if (icon != SearchActionIcon.Custom || customIcon == null && componentName == null) {
|
||||
Icon(
|
||||
modifier = Modifier.size(size),
|
||||
imageVector = getSearchActionIconVector(icon),
|
||||
painter = painterResource(getSearchActionIconVector(icon)),
|
||||
contentDescription = null,
|
||||
tint = tint,
|
||||
)
|
||||
@@ -121,39 +93,39 @@ fun SearchActionIcon(action: SearchAction, size: Dp = 20.dp) {
|
||||
|
||||
@Composable
|
||||
fun SearchActionIcon(builder: CustomizableSearchActionBuilder, size: Dp = 20.dp) {
|
||||
SearchActionIcon(
|
||||
icon = builder.icon,
|
||||
color = builder.iconColor,
|
||||
customIcon = builder.customIcon,
|
||||
componentName = (builder as? AppSearchActionBuilder)?.baseIntent?.component,
|
||||
size = size,
|
||||
)
|
||||
SearchActionIcon(
|
||||
icon = builder.icon,
|
||||
color = builder.iconColor,
|
||||
customIcon = builder.customIcon,
|
||||
componentName = (builder as? AppSearchActionBuilder)?.baseIntent?.component,
|
||||
size = size,
|
||||
)
|
||||
}
|
||||
|
||||
fun getSearchActionIconVector(icon: SearchActionIcon): ImageVector {
|
||||
fun getSearchActionIconVector(icon: SearchActionIcon): Int {
|
||||
return when (icon) {
|
||||
SearchActionIcon.Phone -> Icons.Rounded.Call
|
||||
SearchActionIcon.Website -> Icons.Rounded.Language
|
||||
SearchActionIcon.Alarm -> Icons.Rounded.Alarm
|
||||
SearchActionIcon.Timer -> Icons.Rounded.Timer
|
||||
SearchActionIcon.Contact -> Icons.Rounded.PersonAdd
|
||||
SearchActionIcon.Email -> Icons.Rounded.Email
|
||||
SearchActionIcon.Message -> Icons.Rounded.Sms
|
||||
SearchActionIcon.Calendar -> Icons.Rounded.Event
|
||||
SearchActionIcon.Translate -> Icons.Rounded.Translate
|
||||
SearchActionIcon.Search -> Icons.Rounded.Search
|
||||
SearchActionIcon.Custom -> Icons.Rounded.Warning
|
||||
SearchActionIcon.WebSearch -> Icons.Rounded.TravelExplore
|
||||
SearchActionIcon.PersonSearch -> Icons.Rounded.PersonSearch
|
||||
SearchActionIcon.StatsSearch -> Icons.Rounded.QueryStats
|
||||
SearchActionIcon.SearchPage -> Icons.Rounded.FindInPage
|
||||
SearchActionIcon.SearchList -> Icons.Rounded.ManageSearch
|
||||
SearchActionIcon.ImageSearch -> Icons.Rounded.ImageSearch
|
||||
SearchActionIcon.Location -> Icons.Rounded.Place
|
||||
SearchActionIcon.Movie -> Icons.Rounded.Movie
|
||||
SearchActionIcon.Music -> Icons.Rounded.MusicNote
|
||||
SearchActionIcon.Game -> Icons.Rounded.SportsEsports
|
||||
SearchActionIcon.Note -> Icons.AutoMirrored.Rounded.StickyNote2
|
||||
SearchActionIcon.Share -> Icons.Rounded.Share
|
||||
SearchActionIcon.Phone -> R.drawable.call_24px
|
||||
SearchActionIcon.Website -> R.drawable.language_24px
|
||||
SearchActionIcon.Alarm -> R.drawable.alarm_24px
|
||||
SearchActionIcon.Timer -> R.drawable.timer_24px
|
||||
SearchActionIcon.Contact -> R.drawable.person_add_24px
|
||||
SearchActionIcon.Email -> R.drawable.mail_24px
|
||||
SearchActionIcon.Message -> R.drawable.sms_24px
|
||||
SearchActionIcon.Calendar -> R.drawable.event_24px
|
||||
SearchActionIcon.Translate -> R.drawable.translate_24px
|
||||
SearchActionIcon.Search -> R.drawable.search_24px
|
||||
SearchActionIcon.Custom -> R.drawable.warning_24px
|
||||
SearchActionIcon.WebSearch -> R.drawable.travel_explore_24px
|
||||
SearchActionIcon.PersonSearch -> R.drawable.person_search_24px
|
||||
SearchActionIcon.StatsSearch -> R.drawable.query_stats_24px
|
||||
SearchActionIcon.SearchPage -> R.drawable.find_in_page_24px
|
||||
SearchActionIcon.SearchList -> R.drawable.manage_search_24px
|
||||
SearchActionIcon.ImageSearch -> R.drawable.image_search_24px
|
||||
SearchActionIcon.Location -> R.drawable.location_on_24px
|
||||
SearchActionIcon.Movie -> R.drawable.movie_24px
|
||||
SearchActionIcon.Music -> R.drawable.music_note_24px
|
||||
SearchActionIcon.Game -> R.drawable.sports_esports_24px
|
||||
SearchActionIcon.Note -> R.drawable.sticky_note_2_24px
|
||||
SearchActionIcon.Share -> R.drawable.share_24px
|
||||
}
|
||||
}
|
||||
@@ -18,7 +18,6 @@ import androidx.compose.foundation.text.BasicTextField
|
||||
import androidx.compose.foundation.text.KeyboardActionScope
|
||||
import androidx.compose.foundation.text.KeyboardActions
|
||||
import androidx.compose.foundation.text.KeyboardOptions
|
||||
import androidx.compose.material.icons.rounded.Search
|
||||
import androidx.compose.material3.Icon
|
||||
import androidx.compose.material3.LocalContentColor
|
||||
import androidx.compose.material3.MaterialTheme
|
||||
@@ -36,6 +35,7 @@ import androidx.compose.ui.focus.onFocusChanged
|
||||
import androidx.compose.ui.graphics.Color
|
||||
import androidx.compose.ui.graphics.SolidColor
|
||||
import androidx.compose.ui.platform.LocalContext
|
||||
import androidx.compose.ui.res.painterResource
|
||||
import androidx.compose.ui.res.stringResource
|
||||
import androidx.compose.ui.semantics.contentDescription
|
||||
import androidx.compose.ui.semantics.semantics
|
||||
@@ -151,7 +151,7 @@ fun SearchBar(
|
||||
) {
|
||||
Icon(
|
||||
modifier = Modifier.padding(12.dp),
|
||||
imageVector = androidx.compose.material.icons.Icons.Rounded.Search,
|
||||
painter = painterResource(R.drawable.search_24px),
|
||||
contentDescription = null,
|
||||
tint = contentColor
|
||||
)
|
||||
|
||||
@@ -10,7 +10,6 @@ import android.graphics.RectF
|
||||
import android.graphics.drawable.AdaptiveIconDrawable
|
||||
import androidx.compose.animation.core.animateFloatAsState
|
||||
import androidx.compose.foundation.Canvas
|
||||
import androidx.compose.foundation.Image
|
||||
import androidx.compose.foundation.layout.Box
|
||||
import androidx.compose.foundation.layout.fillMaxSize
|
||||
import androidx.compose.foundation.layout.padding
|
||||
@@ -214,15 +213,15 @@ fun ShapedLauncherIcon(
|
||||
|
||||
is VectorLayer -> {
|
||||
Icon(
|
||||
imageVector = fg.vector, contentDescription = null,
|
||||
painter = painterResource(fg.icon), contentDescription = null,
|
||||
tint = if (fg.color == 0) {
|
||||
Color(renderSettings.fgThemeColor)
|
||||
} else {
|
||||
Color(getTone(fg.color, renderSettings.fgTone))
|
||||
},
|
||||
modifier = Modifier.size(size / 2f),
|
||||
)
|
||||
}
|
||||
|
||||
else -> {}
|
||||
}
|
||||
} else {
|
||||
@@ -268,7 +267,7 @@ fun ShapedLauncherIcon(
|
||||
modifier = Modifier
|
||||
.fillMaxSize()
|
||||
.padding(size / 24),
|
||||
imageVector = badgeIcon.imageVector,
|
||||
painter = painterResource(badgeIcon.iconRes),
|
||||
contentDescription = null,
|
||||
tint = MaterialTheme.colorScheme.onTertiary,
|
||||
)
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package de.mm20.launcher2.ui.component
|
||||
|
||||
import androidx.annotation.DrawableRes
|
||||
import androidx.compose.foundation.layout.Row
|
||||
import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.material3.*
|
||||
@@ -8,13 +9,14 @@ import androidx.compose.ui.Alignment
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.graphics.Color
|
||||
import androidx.compose.ui.graphics.vector.ImageVector
|
||||
import androidx.compose.ui.res.painterResource
|
||||
import androidx.compose.ui.unit.dp
|
||||
|
||||
|
||||
@Composable
|
||||
fun SmallMessage(
|
||||
modifier: Modifier = Modifier,
|
||||
icon: ImageVector,
|
||||
@DrawableRes icon: Int,
|
||||
text: String,
|
||||
color: Color = MaterialTheme.colorScheme.surfaceVariant
|
||||
) {
|
||||
@@ -29,7 +31,7 @@ fun SmallMessage(
|
||||
.padding(16.dp),
|
||||
verticalAlignment = Alignment.CenterVertically
|
||||
) {
|
||||
Icon(imageVector = icon, contentDescription = null)
|
||||
Icon(painterResource(icon), contentDescription = null)
|
||||
Text(
|
||||
text = text,
|
||||
modifier = Modifier.padding(start = 16.dp),
|
||||
|
||||
@@ -8,9 +8,6 @@ import androidx.compose.foundation.layout.Spacer
|
||||
import androidx.compose.foundation.layout.offset
|
||||
import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.foundation.layout.size
|
||||
import androidx.compose.material.icons.Icons
|
||||
import androidx.compose.material.icons.rounded.ChevronRight
|
||||
import androidx.compose.material.icons.rounded.MoreVert
|
||||
import androidx.compose.material3.DropdownMenu
|
||||
import androidx.compose.material3.DropdownMenuItem
|
||||
import androidx.compose.material3.Icon
|
||||
@@ -22,8 +19,8 @@ import androidx.compose.runtime.mutableStateOf
|
||||
import androidx.compose.runtime.remember
|
||||
import androidx.compose.runtime.setValue
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.graphics.vector.ImageVector
|
||||
import androidx.compose.ui.res.integerResource
|
||||
import androidx.compose.ui.res.painterResource
|
||||
import androidx.compose.ui.res.stringResource
|
||||
import androidx.compose.ui.unit.dp
|
||||
import de.mm20.launcher2.ui.R
|
||||
@@ -55,7 +52,10 @@ fun Icons(actions: List<ToolbarAction>, slots: Int) {
|
||||
var showMenu by remember { mutableStateOf(false) }
|
||||
Box {
|
||||
IconButton(onClick = { showMenu = true }) {
|
||||
Icon(Icons.Rounded.MoreVert, contentDescription = stringResource(R.string.action_more_actions))
|
||||
Icon(
|
||||
painterResource(R.drawable.more_vert_24px),
|
||||
contentDescription = stringResource(R.string.action_more_actions)
|
||||
)
|
||||
}
|
||||
Box(
|
||||
modifier = Modifier
|
||||
@@ -80,7 +80,7 @@ fun Icons(actions: List<ToolbarAction>, slots: Int) {
|
||||
IconButton(
|
||||
onClick = action.action,
|
||||
) {
|
||||
Icon(action.icon, contentDescription = action.label)
|
||||
Icon(painterResource(action.icon), contentDescription = action.label)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -92,7 +92,10 @@ fun Icons(actions: List<ToolbarAction>, slots: Int) {
|
||||
showMenu = true
|
||||
},
|
||||
) {
|
||||
Icon(action.icon, contentDescription = action.label)
|
||||
Icon(
|
||||
painterResource(action.icon),
|
||||
contentDescription = action.label
|
||||
)
|
||||
}
|
||||
Box(
|
||||
modifier = Modifier
|
||||
@@ -132,10 +135,10 @@ fun ColumnScope.OverflowMenuItems(items: List<ToolbarAction>, onDismiss: () -> U
|
||||
)
|
||||
},
|
||||
leadingIcon = {
|
||||
Icon(action.icon, null)
|
||||
Icon(painterResource(action.icon), null)
|
||||
},
|
||||
trailingIcon = {
|
||||
Icon(Icons.Rounded.ChevronRight, null)
|
||||
Icon(painterResource(R.drawable.chevron_forward_24px), null)
|
||||
}
|
||||
)
|
||||
}
|
||||
@@ -152,7 +155,7 @@ fun ColumnScope.OverflowMenuItems(items: List<ToolbarAction>, onDismiss: () -> U
|
||||
)
|
||||
},
|
||||
leadingIcon = {
|
||||
Icon(action.icon, null)
|
||||
Icon(painterResource(action.icon), null)
|
||||
}
|
||||
)
|
||||
}
|
||||
@@ -166,17 +169,17 @@ fun ColumnScope.OverflowMenuItems(items: List<ToolbarAction>, onDismiss: () -> U
|
||||
|
||||
interface ToolbarAction {
|
||||
val label: String
|
||||
val icon: ImageVector
|
||||
val icon: Int
|
||||
}
|
||||
|
||||
data class DefaultToolbarAction(
|
||||
override val label: String,
|
||||
override val icon: ImageVector,
|
||||
override val icon: Int,
|
||||
val action: () -> Unit
|
||||
) : ToolbarAction
|
||||
|
||||
data class SubmenuToolbarAction(
|
||||
override val label: String,
|
||||
override val icon: ImageVector,
|
||||
override val icon: Int,
|
||||
val children: List<ToolbarAction>
|
||||
) : ToolbarAction
|
||||
@@ -58,11 +58,32 @@ fun EmojiPicker(
|
||||
}
|
||||
}
|
||||
val categoryNames = stringArrayResource(R.array.category_names)
|
||||
|
||||
val categoryIcons = remember {
|
||||
val typedArray = context.resources.obtainTypedArray(R.array.emoji_categories_icons)
|
||||
IntArray(typedArray.length()) { typedArray.getResourceId(it, 0) }.also {
|
||||
typedArray.recycle()
|
||||
}
|
||||
listOf(
|
||||
R.drawable.mood_24px,
|
||||
R.drawable.emoji_people_24px,
|
||||
R.drawable.emoji_nature_24px,
|
||||
R.drawable.emoji_food_beverage_24px,
|
||||
R.drawable.emoji_transportation_24px,
|
||||
R.drawable.trophy_24px,
|
||||
R.drawable.emoji_objects_24px,
|
||||
R.drawable.emoji_symbols_24px,
|
||||
R.drawable.flag_24px,
|
||||
)
|
||||
}
|
||||
val categoryIconsFilled = remember {
|
||||
listOf(
|
||||
R.drawable.mood_24px_filled,
|
||||
R.drawable.emoji_people_24px_filled,
|
||||
R.drawable.emoji_nature_24px_filled,
|
||||
R.drawable.emoji_food_beverage_24px_filled,
|
||||
R.drawable.emoji_transportation_24px_filled,
|
||||
R.drawable.trophy_24px_filled,
|
||||
R.drawable.emoji_objects_24px_filled,
|
||||
R.drawable.emoji_symbols_24px_filled,
|
||||
R.drawable.flag_24px_filled,
|
||||
)
|
||||
}
|
||||
|
||||
val emojis = remember {
|
||||
@@ -106,7 +127,10 @@ fun EmojiPicker(
|
||||
) {
|
||||
if (i < categoryIcons.size && categoryIcons[i] != 0) {
|
||||
Icon(
|
||||
painterResource(id = categoryIcons[i]),
|
||||
painterResource(
|
||||
if (selectedCategory.intValue == i) categoryIconsFilled[i]
|
||||
else categoryIcons[i]
|
||||
),
|
||||
contentDescription = categoryNames[i]
|
||||
)
|
||||
}
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package de.mm20.launcher2.ui.component.preferences
|
||||
|
||||
import androidx.annotation.DrawableRes
|
||||
import androidx.compose.material3.Checkbox
|
||||
import androidx.compose.material3.CheckboxColors
|
||||
import androidx.compose.material3.CheckboxDefaults
|
||||
@@ -9,7 +10,7 @@ import androidx.compose.ui.graphics.vector.ImageVector
|
||||
@Composable
|
||||
fun CheckboxPreference(
|
||||
title: String,
|
||||
icon: ImageVector? = null,
|
||||
@DrawableRes icon: Int? = null,
|
||||
iconPadding: Boolean = icon != null,
|
||||
summary: String? = null,
|
||||
value: Boolean,
|
||||
|
||||
@@ -1,18 +1,16 @@
|
||||
package de.mm20.launcher2.ui.component.preferences
|
||||
|
||||
import androidx.annotation.DrawableRes
|
||||
import androidx.compose.foundation.background
|
||||
import androidx.compose.foundation.layout.Column
|
||||
import androidx.compose.foundation.layout.fillMaxWidth
|
||||
import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.material.icons.Icons
|
||||
import androidx.compose.material.icons.rounded.Lock
|
||||
import androidx.compose.material3.Button
|
||||
import androidx.compose.material3.MaterialTheme
|
||||
import androidx.compose.material3.Text
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.draw.clip
|
||||
import androidx.compose.ui.graphics.vector.ImageVector
|
||||
import androidx.compose.ui.res.stringResource
|
||||
import androidx.compose.ui.unit.dp
|
||||
import de.mm20.launcher2.ui.R
|
||||
@@ -23,7 +21,7 @@ fun GuardedPreference(
|
||||
locked: Boolean,
|
||||
onUnlock: (() -> Unit)? = null,
|
||||
description: String,
|
||||
icon: ImageVector = Icons.Rounded.Lock,
|
||||
@DrawableRes icon: Int = R.drawable.lock_24px,
|
||||
unlockLabel: String = stringResource(R.string.grant_permission),
|
||||
preference: @Composable () -> Unit,
|
||||
) {
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package de.mm20.launcher2.ui.component.preferences
|
||||
|
||||
import androidx.annotation.DrawableRes
|
||||
import androidx.compose.foundation.clickable
|
||||
import androidx.compose.foundation.layout.*
|
||||
import androidx.compose.foundation.lazy.LazyColumn
|
||||
@@ -17,7 +18,7 @@ import androidx.compose.ui.window.Dialog
|
||||
@Composable
|
||||
fun <T> ListPreference(
|
||||
title: String,
|
||||
icon: ImageVector? = null,
|
||||
@DrawableRes icon: Int? = null,
|
||||
iconPadding: Boolean = icon != null,
|
||||
items: List<ListPreferenceItem<T>>,
|
||||
value: T,
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package de.mm20.launcher2.ui.component.preferences
|
||||
|
||||
import androidx.annotation.DrawableRes
|
||||
import androidx.compose.foundation.background
|
||||
import androidx.compose.foundation.clickable
|
||||
import androidx.compose.foundation.layout.*
|
||||
@@ -17,6 +18,7 @@ import androidx.compose.ui.draw.alpha
|
||||
import androidx.compose.ui.draw.clip
|
||||
import androidx.compose.ui.graphics.Color
|
||||
import androidx.compose.ui.graphics.vector.ImageVector
|
||||
import androidx.compose.ui.res.painterResource
|
||||
import androidx.compose.ui.unit.dp
|
||||
|
||||
@Composable
|
||||
@@ -113,7 +115,7 @@ fun Preference(
|
||||
@Composable
|
||||
fun Preference(
|
||||
title: String,
|
||||
icon: ImageVector? = null,
|
||||
@DrawableRes icon: Int? = null,
|
||||
iconPadding: Boolean = icon != null,
|
||||
summary: String? = null,
|
||||
onClick: () -> Unit = {},
|
||||
@@ -126,7 +128,7 @@ fun Preference(
|
||||
icon = {
|
||||
if (icon != null) {
|
||||
Icon(
|
||||
imageVector = icon,
|
||||
painter = painterResource(icon),
|
||||
contentDescription = null,
|
||||
tint = MaterialTheme.colorScheme.primary,
|
||||
)
|
||||
|
||||
@@ -15,11 +15,7 @@ import androidx.compose.foundation.lazy.LazyColumn
|
||||
import androidx.compose.foundation.lazy.LazyListScope
|
||||
import androidx.compose.foundation.lazy.LazyListState
|
||||
import androidx.compose.foundation.lazy.rememberLazyListState
|
||||
import androidx.compose.material.icons.Icons
|
||||
import androidx.compose.material.icons.automirrored.rounded.ArrowBack
|
||||
import androidx.compose.material.icons.rounded.HelpOutline
|
||||
import androidx.compose.material3.CenterAlignedTopAppBar
|
||||
import androidx.compose.material3.FilledTonalIconButton
|
||||
import androidx.compose.material3.Icon
|
||||
import androidx.compose.material3.IconButton
|
||||
import androidx.compose.material3.MaterialTheme
|
||||
@@ -39,12 +35,13 @@ import androidx.compose.ui.input.nestedscroll.NestedScrollSource
|
||||
import androidx.compose.ui.input.nestedscroll.nestedScroll
|
||||
import androidx.compose.ui.platform.LocalContext
|
||||
import androidx.compose.ui.platform.LocalViewConfiguration
|
||||
import androidx.compose.ui.res.painterResource
|
||||
import androidx.compose.ui.res.stringResource
|
||||
import androidx.compose.ui.text.style.TextOverflow
|
||||
import androidx.compose.ui.unit.dp
|
||||
import androidx.core.net.toUri
|
||||
import de.mm20.launcher2.ui.locals.LocalNavController
|
||||
import de.mm20.launcher2.ui.R
|
||||
import de.mm20.launcher2.ui.locals.LocalNavController
|
||||
|
||||
|
||||
@Composable
|
||||
@@ -134,7 +131,7 @@ fun PreferenceScreen(
|
||||
}
|
||||
}) {
|
||||
Icon(
|
||||
imageVector = Icons.AutoMirrored.Rounded.ArrowBack,
|
||||
painter = painterResource(R.drawable.arrow_back_24px),
|
||||
contentDescription = "Back"
|
||||
)
|
||||
}
|
||||
@@ -152,7 +149,7 @@ fun PreferenceScreen(
|
||||
.build().launchUrl(context, helpUrl.toUri())
|
||||
}) {
|
||||
Icon(
|
||||
imageVector = Icons.Rounded.HelpOutline,
|
||||
painter = painterResource(R.drawable.help_24px),
|
||||
contentDescription = stringResource(R.string.help)
|
||||
)
|
||||
}
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package de.mm20.launcher2.ui.component.preferences
|
||||
|
||||
import androidx.annotation.DrawableRes
|
||||
import androidx.compose.foundation.background
|
||||
import androidx.compose.foundation.layout.*
|
||||
import androidx.compose.material3.LocalContentColor
|
||||
@@ -16,7 +17,7 @@ import androidx.compose.ui.unit.dp
|
||||
fun PreferenceWithSwitch(
|
||||
title: String,
|
||||
summary: String? = null,
|
||||
icon: ImageVector? = null,
|
||||
@DrawableRes icon: Int? = null,
|
||||
enabled: Boolean = true,
|
||||
onClick: () -> Unit = {},
|
||||
switchValue: Boolean,
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package de.mm20.launcher2.ui.component.preferences
|
||||
|
||||
import androidx.annotation.DrawableRes
|
||||
import androidx.compose.foundation.background
|
||||
import androidx.compose.foundation.layout.*
|
||||
import androidx.compose.material3.Slider
|
||||
@@ -11,6 +12,7 @@ import androidx.compose.ui.Alignment
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.draw.alpha
|
||||
import androidx.compose.ui.graphics.vector.ImageVector
|
||||
import androidx.compose.ui.res.painterResource
|
||||
import androidx.compose.ui.text.style.TextAlign
|
||||
import androidx.compose.ui.unit.dp
|
||||
import java.text.DecimalFormat
|
||||
@@ -21,7 +23,7 @@ import kotlin.math.roundToInt
|
||||
@Composable
|
||||
fun SliderPreference(
|
||||
title: String,
|
||||
icon: ImageVector? = null,
|
||||
@DrawableRes icon: Int? = null,
|
||||
iconPadding: Boolean = icon != null,
|
||||
value: Float,
|
||||
min: Float = 0f,
|
||||
@@ -52,7 +54,7 @@ fun SliderPreference(
|
||||
) {
|
||||
if (icon != null) {
|
||||
Icon(
|
||||
imageVector = icon,
|
||||
painter = painterResource(icon),
|
||||
contentDescription = null,
|
||||
tint = MaterialTheme.colorScheme.primary,
|
||||
)
|
||||
@@ -106,7 +108,7 @@ fun SliderPreference(
|
||||
@Composable
|
||||
fun SliderPreference(
|
||||
title: String,
|
||||
icon: ImageVector? = null,
|
||||
@DrawableRes icon: Int? = null,
|
||||
value: Int,
|
||||
min: Int = 0,
|
||||
max: Int = 100,
|
||||
@@ -135,7 +137,7 @@ fun SliderPreference(
|
||||
@Composable
|
||||
inline fun <reified T: Enum<T>> SliderPreference(
|
||||
title: String,
|
||||
icon: ImageVector? = null,
|
||||
@DrawableRes icon: Int? = null,
|
||||
value: T,
|
||||
enabled: Boolean = true,
|
||||
labels: List<EnumLocalization<T>>? = null,
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package de.mm20.launcher2.ui.component.preferences
|
||||
|
||||
import androidx.annotation.DrawableRes
|
||||
import androidx.compose.material3.MaterialTheme
|
||||
import androidx.compose.material3.Switch
|
||||
import androidx.compose.runtime.Composable
|
||||
@@ -9,7 +10,7 @@ import androidx.compose.ui.graphics.vector.ImageVector
|
||||
@Composable
|
||||
fun SwitchPreference(
|
||||
title: String,
|
||||
icon: ImageVector? = null,
|
||||
@DrawableRes icon: Int? = null,
|
||||
iconPadding: Boolean = icon != null,
|
||||
summary: String? = null,
|
||||
value: Boolean,
|
||||
|
||||
@@ -8,11 +8,6 @@ import androidx.compose.animation.graphics.res.animatedVectorResource
|
||||
import androidx.compose.animation.graphics.res.rememberAnimatedVectorPainter
|
||||
import androidx.compose.animation.graphics.vector.AnimatedImageVector
|
||||
import androidx.compose.foundation.layout.*
|
||||
import androidx.compose.material.icons.Icons
|
||||
import androidx.compose.material.icons.rounded.AcUnit
|
||||
import androidx.compose.material.icons.rounded.Air
|
||||
import androidx.compose.material.icons.rounded.Bolt
|
||||
import androidx.compose.material.icons.rounded.Thermostat
|
||||
import androidx.compose.material3.*
|
||||
import androidx.compose.runtime.*
|
||||
import androidx.compose.ui.Alignment
|
||||
@@ -21,15 +16,9 @@ import androidx.compose.ui.draw.clipToBounds
|
||||
import androidx.compose.ui.draw.rotate
|
||||
import androidx.compose.ui.draw.scale
|
||||
import androidx.compose.ui.geometry.Offset
|
||||
import androidx.compose.ui.res.painterResource
|
||||
import androidx.compose.ui.tooling.preview.Preview
|
||||
import androidx.compose.ui.unit.dp
|
||||
import de.mm20.launcher2.icons.WeatherCloud
|
||||
import de.mm20.launcher2.icons.WeatherFog
|
||||
import de.mm20.launcher2.icons.WeatherHailAnimatable
|
||||
import de.mm20.launcher2.icons.WeatherLightRainAnimatable
|
||||
import de.mm20.launcher2.icons.WeatherRainAnimatable
|
||||
import de.mm20.launcher2.icons.WeatherSleetRainAnimatable
|
||||
import de.mm20.launcher2.icons.WeatherSleetSnowAnimatable
|
||||
import de.mm20.launcher2.ui.R
|
||||
import kotlin.math.PI
|
||||
import kotlin.math.sin
|
||||
@@ -126,7 +115,7 @@ private fun LightningBolt(icon: WeatherIcon, colors: WeatherIconColors) {
|
||||
}
|
||||
|
||||
Icon(
|
||||
Icons.Rounded.Bolt,
|
||||
painter = painterResource(R.drawable.bolt_24px_filled),
|
||||
null,
|
||||
modifier = Modifier
|
||||
.size(32.dp)
|
||||
@@ -156,7 +145,7 @@ private fun LightningBolt2(icon: WeatherIcon, colors: WeatherIconColors) {
|
||||
}
|
||||
|
||||
Icon(
|
||||
Icons.Rounded.Bolt,
|
||||
painter = painterResource(R.drawable.bolt_24px_filled),
|
||||
null,
|
||||
modifier = Modifier
|
||||
.size(32.dp)
|
||||
@@ -236,7 +225,7 @@ private fun Cloud1(icon: WeatherIcon, colors: WeatherIconColors) {
|
||||
}
|
||||
|
||||
Icon(
|
||||
Icons.Rounded.WeatherCloud,
|
||||
WeatherCloud,
|
||||
null,
|
||||
modifier = Modifier
|
||||
.size(32.dp)
|
||||
@@ -312,7 +301,7 @@ private fun Cloud2(icon: WeatherIcon, colors: WeatherIconColors) {
|
||||
}
|
||||
|
||||
Icon(
|
||||
Icons.Rounded.WeatherCloud,
|
||||
WeatherCloud,
|
||||
null,
|
||||
modifier = Modifier
|
||||
.size(32.dp)
|
||||
@@ -379,7 +368,7 @@ private fun Cloud3(icon: WeatherIcon, colors: WeatherIconColors) {
|
||||
}
|
||||
|
||||
Icon(
|
||||
Icons.Rounded.WeatherCloud,
|
||||
WeatherCloud,
|
||||
null,
|
||||
modifier = Modifier
|
||||
.size(32.dp)
|
||||
@@ -399,7 +388,7 @@ private fun Hot(icon: WeatherIcon, colors: WeatherIconColors) {
|
||||
}
|
||||
)
|
||||
Icon(
|
||||
Icons.Rounded.Thermostat,
|
||||
painterResource(R.drawable.heat_24px),
|
||||
null,
|
||||
modifier = Modifier
|
||||
.scale(scale)
|
||||
@@ -418,7 +407,7 @@ private fun Cold(icon: WeatherIcon, colors: WeatherIconColors) {
|
||||
}
|
||||
)
|
||||
Icon(
|
||||
Icons.Rounded.AcUnit,
|
||||
painterResource(R.drawable.severe_cold_24px),
|
||||
null,
|
||||
modifier = Modifier
|
||||
.scale(scale)
|
||||
@@ -437,7 +426,7 @@ private fun Wind1(icon: WeatherIcon, colors: WeatherIconColors) {
|
||||
}
|
||||
)
|
||||
Icon(
|
||||
Icons.Rounded.Air,
|
||||
painterResource(R.drawable.air_20px),
|
||||
null,
|
||||
modifier = Modifier
|
||||
.scale(scale)
|
||||
@@ -457,7 +446,7 @@ private fun Wind2(icon: WeatherIcon, colors: WeatherIconColors) {
|
||||
}
|
||||
)
|
||||
Icon(
|
||||
Icons.Rounded.Air,
|
||||
painterResource(R.drawable.air_20px),
|
||||
null,
|
||||
modifier = Modifier
|
||||
.scale(scale)
|
||||
@@ -470,7 +459,7 @@ private fun Wind2(icon: WeatherIcon, colors: WeatherIconColors) {
|
||||
@Preview
|
||||
@Composable
|
||||
fun AnimatedWeatherIconTestPanel() {
|
||||
var icon by remember { mutableStateOf(WeatherIcon.MostlyCloudy) }
|
||||
var icon by remember { mutableStateOf(WeatherIcon.ThunderstormWithRain) }
|
||||
var night by remember { mutableStateOf(false) }
|
||||
Row {
|
||||
val icons = WeatherIcon.values()
|
||||
@@ -532,7 +521,7 @@ private fun Precipitation(icon: WeatherIcon, colors: WeatherIconColors) {
|
||||
modifier = Modifier
|
||||
.size(32.dp)
|
||||
.offset(y = 8.dp + 11.dp * animProgress),
|
||||
imageVector = Icons.Rounded.WeatherLightRainAnimatable,
|
||||
imageVector = WeatherLightRainAnimatable,
|
||||
contentDescription = null,
|
||||
tint = colors.rain
|
||||
)
|
||||
@@ -548,7 +537,7 @@ private fun Precipitation(icon: WeatherIcon, colors: WeatherIconColors) {
|
||||
modifier = Modifier
|
||||
.size(32.dp)
|
||||
.offset(y = 8.dp + 11.dp * animProgress),
|
||||
imageVector = Icons.Rounded.WeatherHailAnimatable,
|
||||
imageVector = WeatherHailAnimatable,
|
||||
contentDescription = null,
|
||||
tint = colors.hail,
|
||||
)
|
||||
@@ -567,7 +556,7 @@ private fun Precipitation(icon: WeatherIcon, colors: WeatherIconColors) {
|
||||
x = sin(animProgress * 2 * PI).dp,
|
||||
y = 8.dp + 11.dp * animProgress
|
||||
),
|
||||
imageVector = Icons.Rounded.WeatherHailAnimatable,
|
||||
imageVector = WeatherHailAnimatable,
|
||||
contentDescription = null,
|
||||
tint = colors.snow,
|
||||
)
|
||||
@@ -585,7 +574,7 @@ private fun Precipitation(icon: WeatherIcon, colors: WeatherIconColors) {
|
||||
modifier = Modifier
|
||||
.size(32.dp)
|
||||
.offset(y = 8.dp + 11.dp * animProgress),
|
||||
imageVector = Icons.Rounded.WeatherRainAnimatable,
|
||||
imageVector = WeatherRainAnimatable,
|
||||
contentDescription = null,
|
||||
tint = colors.rain,
|
||||
)
|
||||
@@ -601,7 +590,7 @@ private fun Precipitation(icon: WeatherIcon, colors: WeatherIconColors) {
|
||||
modifier = Modifier
|
||||
.size(32.dp)
|
||||
.offset(y = 8.dp + 11.dp * animProgress),
|
||||
imageVector = Icons.Rounded.WeatherSleetRainAnimatable,
|
||||
imageVector = WeatherSleetRainAnimatable,
|
||||
contentDescription = null,
|
||||
tint = colors.rain,
|
||||
)
|
||||
@@ -609,7 +598,7 @@ private fun Precipitation(icon: WeatherIcon, colors: WeatherIconColors) {
|
||||
modifier = Modifier
|
||||
.size(32.dp)
|
||||
.offset(y = 8.dp + 11.dp * animProgress),
|
||||
imageVector = Icons.Rounded.WeatherSleetSnowAnimatable,
|
||||
imageVector = WeatherSleetSnowAnimatable,
|
||||
contentDescription = null,
|
||||
tint = colors.snow,
|
||||
)
|
||||
@@ -629,7 +618,7 @@ private fun Fog(icon: WeatherIcon, colors: WeatherIconColors) {
|
||||
.size(32.dp)
|
||||
.scale(scale)
|
||||
.offset(x = 6.dp, y = 7.dp),
|
||||
imageVector = Icons.Rounded.WeatherFog,
|
||||
imageVector = WeatherFog,
|
||||
contentDescription = null,
|
||||
tint = colors.fog
|
||||
)
|
||||
|
||||
@@ -0,0 +1,720 @@
|
||||
package de.mm20.launcher2.ui.component.weather
|
||||
|
||||
import androidx.compose.ui.graphics.Color
|
||||
import androidx.compose.ui.graphics.SolidColor
|
||||
import androidx.compose.ui.graphics.StrokeCap
|
||||
import androidx.compose.ui.graphics.StrokeJoin
|
||||
import androidx.compose.ui.graphics.vector.ImageVector
|
||||
import androidx.compose.ui.graphics.vector.PathBuilder
|
||||
import androidx.compose.ui.graphics.vector.path
|
||||
import androidx.compose.ui.unit.dp
|
||||
|
||||
|
||||
private fun weatherIcon(
|
||||
name: String,
|
||||
path: PathBuilder.() -> Unit,
|
||||
): ImageVector {
|
||||
return ImageVector.Builder(
|
||||
name = name,
|
||||
defaultHeight = 24.dp,
|
||||
defaultWidth = 24.dp,
|
||||
viewportWidth = 24f,
|
||||
viewportHeight = 24f,
|
||||
).apply {
|
||||
path(
|
||||
fill = SolidColor(Color.Black),
|
||||
fillAlpha = 1f,
|
||||
stroke = null,
|
||||
strokeAlpha = 1f,
|
||||
strokeLineWidth = 1f,
|
||||
strokeLineCap = StrokeCap.Butt,
|
||||
strokeLineJoin = StrokeJoin.Bevel,
|
||||
strokeLineMiter = 1f,
|
||||
pathBuilder = path
|
||||
)
|
||||
}.build()
|
||||
}
|
||||
|
||||
val WeatherCloud = weatherIcon("WeatherCloud") {
|
||||
moveTo(15.240234f, 6.953125f)
|
||||
arcTo(4.2818656f, 4.2818656f, 0f, false, false, 11.722656f, 8.7949219f)
|
||||
arcTo(3.8614116f, 3.8614116f, 0f, false, false, 9.2871094f, 7.9296875f)
|
||||
arcTo(3.8614116f, 3.8614116f, 0f, false, false, 5.4257812f, 11.791016f)
|
||||
arcTo(3.8614116f, 3.8614116f, 0f, false, false, 5.4335938f, 12.035156f)
|
||||
arcTo(3.0096498f, 3.0096498f, 0f, false, false, 4.8671875f, 11.980469f)
|
||||
arcTo(3.0096498f, 3.0096498f, 0f, false, false, 1.8574219f, 14.990234f)
|
||||
arcTo(3.0096498f, 3.0096498f, 0f, false, false, 4.8671875f, 18f)
|
||||
arcTo(3.0096498f, 3.0096498f, 0f, false, false, 4.9316406f, 18f)
|
||||
lineTo(19.220703f, 18f)
|
||||
lineTo(19.220703f, 17.998047f)
|
||||
arcTo(2.5873528f, 2.5873528f, 0f, false, false, 21.742188f, 15.412109f)
|
||||
arcTo(2.5873528f, 2.5873528f, 0f, false, false, 19.214844f, 12.826172f)
|
||||
arcTo(4.2818656f, 4.2818656f, 0f, false, false, 19.523438f, 11.234375f)
|
||||
arcTo(4.2818656f, 4.2818656f, 0f, false, false, 15.240234f, 6.953125f)
|
||||
close()
|
||||
}
|
||||
|
||||
|
||||
val WeatherLightRain = weatherIcon("WeatherLightRain") {
|
||||
moveTo(7.7747158f, 16.298471f)
|
||||
curveTo(7.7747158f, 16.298471f, 6.3149844f, 17.454229f, 6.1717047f, 18.266809f)
|
||||
arcTo(1.237673f, 1.237673f, 0f, false, false, 7.1769077f, 19.699334f)
|
||||
arcTo(1.237673f, 1.237673f, 0f, false, false, 8.6094328f, 18.696345f)
|
||||
curveTo(8.7527126f, 17.883765f, 7.7747158f, 16.298471f, 7.7747158f, 16.298471f)
|
||||
close()
|
||||
moveTo(12.3092f, 16.298471f)
|
||||
curveTo(12.3092f, 16.298471f, 10.849468f, 17.454229f, 10.706189f, 18.266809f)
|
||||
arcTo(1.237673f, 1.237673f, 0f, false, false, 11.711392f, 19.699334f)
|
||||
arcTo(1.237673f, 1.237673f, 0f, false, false, 13.143917f, 18.696345f)
|
||||
curveTo(13.287198f, 17.883765f, 12.3092f, 16.298471f, 12.3092f, 16.298471f)
|
||||
close()
|
||||
moveTo(16.843685f, 16.298471f)
|
||||
curveTo(16.843685f, 16.298471f, 15.383952f, 17.454229f, 15.240673f, 18.266809f)
|
||||
arcTo(1.237673f, 1.237673f, 0f, false, false, 16.245876f, 19.699334f)
|
||||
arcTo(1.237673f, 1.237673f, 0f, false, false, 17.678401f, 18.696345f)
|
||||
curveTo(17.821682f, 17.883765f, 16.843685f, 16.298471f, 16.843685f, 16.298471f)
|
||||
close()
|
||||
}
|
||||
|
||||
val WeatherHail = weatherIcon("WeatherHail") {
|
||||
moveTo(7.4093667f, 16.258438f)
|
||||
curveTo(6.6975174f, 16.235656f, 6.09006f, 16.947847f, 6.2243877f, 17.647106f)
|
||||
curveTo(6.3138584f, 18.353739f, 7.1127111f, 18.841403f, 7.7821731f, 18.599057f)
|
||||
curveTo(8.4660776f, 18.399808f, 8.8227568f, 17.533933f, 8.4775745f, 16.910825f)
|
||||
curveTo(8.2792236f, 16.515419f, 7.8517895f, 16.254332f, 7.4093667f, 16.258438f)
|
||||
close()
|
||||
moveTo(11.935705f, 16.258438f)
|
||||
curveTo(11.223856f, 16.235656f, 10.616399f, 16.947847f, 10.750726f, 17.647106f)
|
||||
curveTo(10.840183f, 18.35367f, 11.639079f, 18.841563f, 12.308486f, 18.598897f)
|
||||
curveTo(12.992113f, 18.399396f, 13.348471f, 17.533766f, 13.003396f, 16.910825f)
|
||||
curveTo(12.805121f, 16.51558f, 12.377952f, 16.254528f, 11.935705f, 16.258438f)
|
||||
close()
|
||||
moveTo(16.462044f, 16.258438f)
|
||||
curveTo(15.750195f, 16.235656f, 15.142737f, 16.947847f, 15.277065f, 17.647106f)
|
||||
curveTo(15.366522f, 18.35367f, 16.165418f, 18.841563f, 16.834825f, 18.598897f)
|
||||
curveTo(17.518452f, 18.399396f, 17.87481f, 17.533766f, 17.529735f, 16.910825f)
|
||||
curveTo(17.331459f, 16.51558f, 16.904291f, 16.254528f, 16.462044f, 16.258438f)
|
||||
close()
|
||||
}
|
||||
|
||||
val WeatherSleetSnow = weatherIcon("WeatherSleetSnow") {
|
||||
moveTo(11.935705f, 16.258438f)
|
||||
curveTo(11.223856f, 16.235656f, 10.616399f, 16.947847f, 10.750726f, 17.647106f)
|
||||
curveTo(10.840183f, 18.35367f, 11.639079f, 18.841563f, 12.308486f, 18.598897f)
|
||||
curveTo(12.992113f, 18.399396f, 13.348471f, 17.533766f, 13.003396f, 16.910825f)
|
||||
curveTo(12.805121f, 16.51558f, 12.377952f, 16.254528f, 11.935705f, 16.258438f)
|
||||
close()
|
||||
}
|
||||
|
||||
val WeatherSleetRain = weatherIcon("WeatherSleetRain") {
|
||||
moveTo(6.347656f, 15.96875f)
|
||||
curveTo(5.938469f, 15.896599f, 5.550666f, 16.166984f, 5.478515f, 16.576172f)
|
||||
lineTo(5.044922f, 19.039062f)
|
||||
curveTo(4.972771f, 19.44825f, 5.243156f, 19.836052f, 5.652344f, 19.908203f)
|
||||
curveTo(6.061531f, 19.980354f, 6.449333f, 19.708016f, 6.521484f, 19.298828f)
|
||||
lineTo(6.955078f, 16.837891f)
|
||||
curveTo(7.0272288f, 16.428703f, 6.7568437f, 16.040901f, 6.347656f, 15.96875f)
|
||||
close()
|
||||
moveTo(18.347656f, 15.96875f)
|
||||
curveTo(17.938469f, 15.896599f, 17.550666f, 16.166984f, 17.478516f, 16.576172f)
|
||||
lineTo(17.044922f, 19.039062f)
|
||||
curveTo(16.972771f, 19.44825f, 17.243156f, 19.836052f, 17.652344f, 19.908203f)
|
||||
curveTo(18.061531f, 19.980354f, 18.449333f, 19.708016f, 18.521484f, 19.298828f)
|
||||
lineTo(18.955078f, 16.837891f)
|
||||
curveTo(19.027229f, 16.428703f, 18.756844f, 16.040901f, 18.347656f, 15.96875f)
|
||||
close()
|
||||
}
|
||||
|
||||
val WeatherRain = weatherIcon("WeatherRain") {
|
||||
moveTo(6.347656f, 15.96875f)
|
||||
curveTo(5.938469f, 15.896599f, 5.550666f, 16.166984f, 5.478515f, 16.576172f)
|
||||
lineTo(5.044922f, 19.039062f)
|
||||
curveTo(4.972771f, 19.44825f, 5.243156f, 19.836052f, 5.652344f, 19.908203f)
|
||||
curveTo(6.061531f, 19.980354f, 6.449333f, 19.708016f, 6.521484f, 19.298828f)
|
||||
lineTo(6.955078f, 16.837891f)
|
||||
curveTo(7.0272288f, 16.428703f, 6.7568437f, 16.040901f, 6.347656f, 15.96875f)
|
||||
close()
|
||||
moveTo(9.3476561f, 15.96875f)
|
||||
curveTo(8.9384685f, 15.896599f, 8.5506663f, 16.166984f, 8.4785155f, 16.576172f)
|
||||
lineTo(8.0449218f, 19.039062f)
|
||||
curveTo(7.9727709f, 19.44825f, 8.243156f, 19.836052f, 8.6523436f, 19.908203f)
|
||||
curveTo(9.0615312f, 19.980354f, 9.4493334f, 19.708016f, 9.5214842f, 19.298828f)
|
||||
lineTo(9.955078f, 16.837891f)
|
||||
curveTo(10.027229f, 16.428703f, 9.7568437f, 16.040901f, 9.3476561f, 15.96875f)
|
||||
close()
|
||||
moveTo(12.347656f, 15.96875f)
|
||||
curveTo(11.938469f, 15.896599f, 11.550666f, 16.166984f, 11.478516f, 16.576172f)
|
||||
lineTo(11.044922f, 19.039062f)
|
||||
curveTo(10.972771f, 19.44825f, 11.243156f, 19.836052f, 11.652344f, 19.908203f)
|
||||
curveTo(12.061531f, 19.980354f, 12.449333f, 19.708016f, 12.521484f, 19.298828f)
|
||||
lineTo(12.955078f, 16.837891f)
|
||||
curveTo(13.027229f, 16.428703f, 12.756844f, 16.040901f, 12.347656f, 15.96875f)
|
||||
close()
|
||||
moveTo(15.347656f, 15.96875f)
|
||||
curveTo(14.938469f, 15.896599f, 14.550666f, 16.166984f, 14.478516f, 16.576172f)
|
||||
lineTo(14.044922f, 19.039062f)
|
||||
curveTo(13.972771f, 19.44825f, 14.243156f, 19.836052f, 14.652344f, 19.908203f)
|
||||
curveTo(15.061531f, 19.980354f, 15.449333f, 19.708016f, 15.521484f, 19.298828f)
|
||||
lineTo(15.955078f, 16.837891f)
|
||||
curveTo(16.027229f, 16.428703f, 15.756844f, 16.040901f, 15.347656f, 15.96875f)
|
||||
close()
|
||||
moveTo(18.347656f, 15.96875f)
|
||||
curveTo(17.938469f, 15.896599f, 17.550666f, 16.166984f, 17.478516f, 16.576172f)
|
||||
lineTo(17.044922f, 19.039062f)
|
||||
curveTo(16.972771f, 19.44825f, 17.243156f, 19.836052f, 17.652344f, 19.908203f)
|
||||
curveTo(18.061531f, 19.980354f, 18.449333f, 19.708016f, 18.521484f, 19.298828f)
|
||||
lineTo(18.955078f, 16.837891f)
|
||||
curveTo(19.027229f, 16.428703f, 18.756844f, 16.040901f, 18.347656f, 15.96875f)
|
||||
close()
|
||||
}
|
||||
|
||||
val WeatherLightRainAnimatable = weatherIcon("WeatherLightRainAnimatable") {
|
||||
moveTo(4.828129f, 0f)
|
||||
curveTo(4.828129f, 0f, 3.6375041f, 1.3394488f, 3.6375041f, 2.1332031f)
|
||||
curveTo(3.6375041f, 2.7907671f, 4.1705651f, 3.3238281f, 4.828129f, 3.3238281f)
|
||||
curveTo(5.485693f, 3.3238281f, 6.018754f, 2.7907671f, 6.018754f, 2.1332031f)
|
||||
curveTo(6.018754f, 1.3394488f, 4.828129f, 0f, 4.828129f, 0f)
|
||||
close()
|
||||
moveTo(12.765629f, 0f)
|
||||
curveTo(12.765629f, 0f, 11.575004f, 1.3394488f, 11.575004f, 2.1332031f)
|
||||
curveTo(11.575004f, 2.7907671f, 12.108065f, 3.3238281f, 12.765629f, 3.3238281f)
|
||||
curveTo(13.423193f, 3.3238281f, 13.956254f, 2.7907671f, 13.956254f, 2.1332031f)
|
||||
curveTo(13.956254f, 1.3394488f, 12.765629f, 0f, 12.765629f, 0f)
|
||||
close()
|
||||
moveTo(20.703129f, 0f)
|
||||
curveTo(20.703129f, 0f, 19.512504f, 1.3394488f, 19.512504f, 2.1332031f)
|
||||
curveTo(19.512504f, 2.7907671f, 20.045565f, 3.3238281f, 20.703129f, 3.3238281f)
|
||||
curveTo(21.360693f, 3.3238281f, 21.893754f, 2.7907671f, 21.893754f, 2.1332031f)
|
||||
curveTo(21.893754f, 1.3394488f, 20.703129f, 0f, 20.703129f, 0f)
|
||||
close()
|
||||
moveTo(8.796879f, 3.96875f)
|
||||
curveTo(8.796879f, 3.96875f, 7.606254f, 5.3081983f, 7.606254f, 6.101953f)
|
||||
curveTo(7.606254f, 6.759517f, 8.1393151f, 7.292578f, 8.796879f, 7.292578f)
|
||||
curveTo(9.4544429f, 7.292578f, 9.987504f, 6.759517f, 9.987504f, 6.101953f)
|
||||
curveTo(9.987504f, 5.3081983f, 8.796879f, 3.96875f, 8.796879f, 3.96875f)
|
||||
close()
|
||||
moveTo(16.734379f, 3.96875f)
|
||||
curveTo(16.734379f, 3.96875f, 16.659965f, 4.0524664f, 16.548344f, 4.1904419f)
|
||||
curveTo(16.21348f, 4.6043688f, 15.543754f, 5.5066369f, 15.543754f, 6.101953f)
|
||||
curveTo(15.54381f, 6.7411813f, 16.048624f, 7.2662972f, 16.687353f, 7.2915446f)
|
||||
curveTo(16.70302f, 7.2921986f, 16.718698f, 7.2925434f, 16.734379f, 7.292578f)
|
||||
curveTo(17.391943f, 7.292578f, 17.925004f, 6.759517f, 17.925004f, 6.101953f)
|
||||
curveTo(17.925004f, 5.3081983f, 16.734379f, 3.96875f, 16.734379f, 3.96875f)
|
||||
close()
|
||||
moveTo(4.828129f, 7.9374999f)
|
||||
curveTo(4.828129f, 7.9374999f, 3.6375041f, 9.2769485f, 3.6375041f, 10.070703f)
|
||||
curveTo(3.6375041f, 10.728267f, 4.1705651f, 11.261328f, 4.828129f, 11.261328f)
|
||||
curveTo(5.485693f, 11.261328f, 6.018754f, 10.728267f, 6.018754f, 10.070703f)
|
||||
curveTo(6.018754f, 9.2769485f, 4.828129f, 7.9374999f, 4.828129f, 7.9374999f)
|
||||
close()
|
||||
moveTo(12.765629f, 7.9374999f)
|
||||
curveTo(12.765629f, 7.9374999f, 12.691215f, 8.0212162f, 12.579594f, 8.1591919f)
|
||||
curveTo(12.24473f, 8.5731188f, 11.575004f, 9.4753868f, 11.575004f, 10.070703f)
|
||||
curveTo(11.57496f, 10.567853f, 11.883816f, 11.012697f, 12.349634f, 11.186397f)
|
||||
curveTo(12.364344f, 11.191857f, 12.379161f, 11.197026f, 12.394075f, 11.2019f)
|
||||
curveTo(12.499019f, 11.236323f, 12.608242f, 11.255976f, 12.718603f, 11.260295f)
|
||||
curveTo(12.73427f, 11.260949f, 12.749948f, 11.261293f, 12.765629f, 11.261328f)
|
||||
curveTo(13.423193f, 11.261328f, 13.956254f, 10.728267f, 13.956254f, 10.070703f)
|
||||
curveTo(13.956254f, 9.2769485f, 12.765629f, 7.9374999f, 12.765629f, 7.9374999f)
|
||||
close()
|
||||
moveTo(20.703129f, 7.9374999f)
|
||||
curveTo(20.703129f, 7.9374999f, 20.628715f, 8.0212162f, 20.517094f, 8.1591919f)
|
||||
curveTo(20.18223f, 8.5731188f, 19.512504f, 9.4753868f, 19.512504f, 10.070703f)
|
||||
curveTo(19.51256f, 10.709931f, 20.017374f, 11.235047f, 20.656103f, 11.260295f)
|
||||
curveTo(20.67177f, 11.260949f, 20.687448f, 11.261293f, 20.703129f, 11.261328f)
|
||||
curveTo(21.360693f, 11.261328f, 21.893754f, 10.728267f, 21.893754f, 10.070703f)
|
||||
curveTo(21.893754f, 9.2769485f, 20.703129f, 7.9374999f, 20.703129f, 7.9374999f)
|
||||
close()
|
||||
moveTo(8.796879f, 11.90625f)
|
||||
curveTo(8.796879f, 11.90625f, 7.606254f, 13.245698f, 7.606254f, 14.039453f)
|
||||
curveTo(7.606254f, 14.697017f, 8.1393151f, 15.230078f, 8.796879f, 15.230078f)
|
||||
curveTo(9.4544429f, 15.230078f, 9.987504f, 14.697017f, 9.987504f, 14.039453f)
|
||||
curveTo(9.987504f, 13.245698f, 8.796879f, 11.90625f, 8.796879f, 11.90625f)
|
||||
close()
|
||||
moveTo(16.734379f, 11.90625f)
|
||||
curveTo(16.734379f, 11.90625f, 15.543754f, 13.245698f, 15.543754f, 14.039453f)
|
||||
curveTo(15.543754f, 14.697017f, 16.076815f, 15.230078f, 16.734379f, 15.230078f)
|
||||
curveTo(17.391943f, 15.230078f, 17.925004f, 14.697017f, 17.925004f, 14.039453f)
|
||||
curveTo(17.925004f, 13.245698f, 16.734379f, 11.90625f, 16.734379f, 11.90625f)
|
||||
close()
|
||||
moveTo(4.828129f, 15.875f)
|
||||
curveTo(4.828129f, 15.875f, 3.6375041f, 17.214448f, 3.6375041f, 18.008203f)
|
||||
curveTo(3.6375041f, 18.665767f, 4.1705651f, 19.198828f, 4.828129f, 19.198828f)
|
||||
curveTo(5.485693f, 19.198828f, 6.018754f, 18.665767f, 6.018754f, 18.008203f)
|
||||
curveTo(6.018754f, 17.214448f, 4.828129f, 15.875f, 4.828129f, 15.875f)
|
||||
close()
|
||||
moveTo(12.765629f, 15.875f)
|
||||
curveTo(12.765629f, 15.875f, 11.575004f, 17.214448f, 11.575004f, 18.008203f)
|
||||
curveTo(11.575004f, 18.665767f, 12.108065f, 19.198828f, 12.765629f, 19.198828f)
|
||||
curveTo(13.423193f, 19.198828f, 13.956254f, 18.665767f, 13.956254f, 18.008203f)
|
||||
curveTo(13.956254f, 17.214448f, 12.765629f, 15.875f, 12.765629f, 15.875f)
|
||||
close()
|
||||
moveTo(20.703129f, 15.875f)
|
||||
curveTo(20.703129f, 15.875f, 19.512504f, 17.214448f, 19.512504f, 18.008203f)
|
||||
curveTo(19.512504f, 18.665767f, 20.045565f, 19.198828f, 20.703129f, 19.198828f)
|
||||
curveTo(21.360693f, 19.198828f, 21.893754f, 18.665767f, 21.893754f, 18.008203f)
|
||||
curveTo(21.893754f, 17.214448f, 20.703129f, 15.875f, 20.703129f, 15.875f)
|
||||
close()
|
||||
}
|
||||
|
||||
|
||||
val WeatherHailAnimatable = weatherIcon("WeatherHailAnimatable") {
|
||||
|
||||
moveTo(4.8281292f, 1.0583334f)
|
||||
arcTo(1.2307138f, 1.2307138f, 0f, false, false, 3.5971949f, 2.2892661f)
|
||||
arcTo(1.2307138f, 1.2307138f, 0f, false, false, 4.8281292f, 3.5201987f)
|
||||
arcTo(1.2307138f, 1.2307138f, 0f, false, false, 6.0585449f, 2.2892661f)
|
||||
arcTo(1.2307138f, 1.2307138f, 0f, false, false, 4.8281292f, 1.0583334f)
|
||||
close()
|
||||
moveTo(12.765629f, 1.0583334f)
|
||||
arcTo(1.2307138f, 1.2307138f, 0f, false, false, 11.534695f, 2.2892661f)
|
||||
arcTo(1.2307138f, 1.2307138f, 0f, false, false, 12.765629f, 3.5201987f)
|
||||
arcTo(1.2307138f, 1.2307138f, 0f, false, false, 13.996045f, 2.2892661f)
|
||||
arcTo(1.2307138f, 1.2307138f, 0f, false, false, 12.765629f, 1.0583334f)
|
||||
close()
|
||||
moveTo(20.703129f, 1.0583334f)
|
||||
arcTo(1.2307138f, 1.2307138f, 0f, false, false, 19.472195f, 2.2892661f)
|
||||
arcTo(1.2307138f, 1.2307138f, 0f, false, false, 20.703129f, 3.5201987f)
|
||||
arcTo(1.2307138f, 1.2307138f, 0f, false, false, 21.933545f, 2.2892661f)
|
||||
arcTo(1.2307138f, 1.2307138f, 0f, false, false, 20.703129f, 1.0583334f)
|
||||
close()
|
||||
moveTo(8.7968792f, 5.0270833f)
|
||||
arcTo(1.2307138f, 1.2307138f, 0f, false, false, 7.5659449f, 6.258016f)
|
||||
arcTo(1.2307138f, 1.2307138f, 0f, false, false, 8.7968792f, 7.4889487f)
|
||||
arcTo(1.2307138f, 1.2307138f, 0f, false, false, 10.027295f, 6.258016f)
|
||||
arcTo(1.2307138f, 1.2307138f, 0f, false, false, 8.7968792f, 5.0270833f)
|
||||
close()
|
||||
moveTo(16.734379f, 5.0270833f)
|
||||
arcTo(1.2307138f, 1.2307138f, 0f, false, false, 15.503445f, 6.258016f)
|
||||
arcTo(1.2307138f, 1.2307138f, 0f, false, false, 16.734379f, 7.4889487f)
|
||||
arcTo(1.2307138f, 1.2307138f, 0f, false, false, 17.964795f, 6.258016f)
|
||||
arcTo(1.2307138f, 1.2307138f, 0f, false, false, 16.734379f, 5.0270833f)
|
||||
close()
|
||||
moveTo(4.8281292f, 8.9958333f)
|
||||
arcTo(1.2307138f, 1.2307138f, 0f, false, false, 3.5971949f, 10.226766f)
|
||||
arcTo(1.2307138f, 1.2307138f, 0f, false, false, 4.8281292f, 11.457699f)
|
||||
arcTo(1.2307138f, 1.2307138f, 0f, false, false, 6.0585449f, 10.226766f)
|
||||
arcTo(1.2307138f, 1.2307138f, 0f, false, false, 4.8281292f, 8.9958333f)
|
||||
close()
|
||||
moveTo(12.765629f, 8.9958333f)
|
||||
arcTo(1.2307138f, 1.2307138f, 0f, false, false, 11.534695f, 10.226766f)
|
||||
arcTo(1.2307138f, 1.2307138f, 0f, false, false, 12.765629f, 11.457699f)
|
||||
arcTo(1.2307138f, 1.2307138f, 0f, false, false, 13.996045f, 10.226766f)
|
||||
arcTo(1.2307138f, 1.2307138f, 0f, false, false, 12.765629f, 8.9958333f)
|
||||
close()
|
||||
moveTo(20.703129f, 8.9958333f)
|
||||
arcTo(1.2307138f, 1.2307138f, 0f, false, false, 19.472195f, 10.226766f)
|
||||
arcTo(1.2307138f, 1.2307138f, 0f, false, false, 20.703129f, 11.457699f)
|
||||
arcTo(1.2307138f, 1.2307138f, 0f, false, false, 21.933545f, 10.226766f)
|
||||
arcTo(1.2307138f, 1.2307138f, 0f, false, false, 20.703129f, 8.9958333f)
|
||||
close()
|
||||
moveTo(8.7968792f, 12.964583f)
|
||||
arcTo(1.2307138f, 1.2307138f, 0f, false, false, 7.5659449f, 14.195516f)
|
||||
arcTo(1.2307138f, 1.2307138f, 0f, false, false, 8.7968792f, 15.426449f)
|
||||
arcTo(1.2307138f, 1.2307138f, 0f, false, false, 10.027295f, 14.195516f)
|
||||
arcTo(1.2307138f, 1.2307138f, 0f, false, false, 8.7968792f, 12.964583f)
|
||||
close()
|
||||
moveTo(16.734379f, 12.964583f)
|
||||
arcTo(1.2307138f, 1.2307138f, 0f, false, false, 15.503445f, 14.195516f)
|
||||
arcTo(1.2307138f, 1.2307138f, 0f, false, false, 16.734379f, 15.426449f)
|
||||
arcTo(1.2307138f, 1.2307138f, 0f, false, false, 17.964795f, 14.195516f)
|
||||
arcTo(1.2307138f, 1.2307138f, 0f, false, false, 16.734379f, 12.964583f)
|
||||
close()
|
||||
moveTo(4.8281292f, 16.933333f)
|
||||
arcTo(1.2307138f, 1.2307138f, 0f, false, false, 3.5971949f, 18.164266f)
|
||||
arcTo(1.2307138f, 1.2307138f, 0f, false, false, 4.8281292f, 19.395199f)
|
||||
arcTo(1.2307138f, 1.2307138f, 0f, false, false, 6.0585449f, 18.164266f)
|
||||
arcTo(1.2307138f, 1.2307138f, 0f, false, false, 4.8281292f, 16.933333f)
|
||||
close()
|
||||
moveTo(12.765629f, 16.933333f)
|
||||
arcTo(1.2307138f, 1.2307138f, 0f, false, false, 11.534695f, 18.164266f)
|
||||
arcTo(1.2307138f, 1.2307138f, 0f, false, false, 12.765629f, 19.395199f)
|
||||
arcTo(1.2307138f, 1.2307138f, 0f, false, false, 13.996045f, 18.164266f)
|
||||
arcTo(1.2307138f, 1.2307138f, 0f, false, false, 12.765629f, 16.933333f)
|
||||
close()
|
||||
moveTo(20.703129f, 16.933333f)
|
||||
arcTo(1.2307138f, 1.2307138f, 0f, false, false, 19.472195f, 18.164266f)
|
||||
arcTo(1.2307138f, 1.2307138f, 0f, false, false, 20.703129f, 19.395199f)
|
||||
arcTo(1.2307138f, 1.2307138f, 0f, false, false, 21.933545f, 18.164266f)
|
||||
arcTo(1.2307138f, 1.2307138f, 0f, false, false, 20.703129f, 16.933333f)
|
||||
close()
|
||||
}
|
||||
|
||||
|
||||
val WeatherRainAnimatable = weatherIcon("WeatherRainAnimatable") {
|
||||
|
||||
moveTo(4.828129f, 0.1133928f)
|
||||
curveTo(4.41263f, 0.1133928f, 4.0777866f, 0.4477181f, 4.0777866f, 0.8632184f)
|
||||
verticalLineTo(4.8634909f)
|
||||
curveTo(4.0777866f, 5.278991f, 4.41263f, 5.6133161f, 4.828129f, 5.6133161f)
|
||||
curveTo(5.243628f, 5.6133161f, 5.5779529f, 5.278991f, 5.5779529f, 4.8634909f)
|
||||
verticalLineTo(0.8632184f)
|
||||
curveTo(5.5779529f, 0.4477181f, 5.243628f, 0.1133928f, 4.828129f, 0.1133928f)
|
||||
close()
|
||||
moveTo(12.765629f, 0.1133928f)
|
||||
curveTo(12.35013f, 0.1133928f, 12.015286f, 0.4477181f, 12.015286f, 0.8632184f)
|
||||
verticalLineTo(4.8634909f)
|
||||
curveTo(12.015286f, 5.278991f, 12.35013f, 5.6133161f, 12.765629f, 5.6133161f)
|
||||
curveTo(13.181128f, 5.6133161f, 13.515453f, 5.278991f, 13.515453f, 4.8634909f)
|
||||
verticalLineTo(0.8632184f)
|
||||
curveTo(13.515453f, 0.4477181f, 13.181128f, 0.1133928f, 12.765629f, 0.1133928f)
|
||||
close()
|
||||
moveTo(20.703129f, 0.1133928f)
|
||||
curveTo(20.28763f, 0.1133928f, 19.952786f, 0.4477181f, 19.952786f, 0.8632184f)
|
||||
verticalLineTo(4.8634909f)
|
||||
curveTo(19.952786f, 5.278991f, 20.28763f, 5.6133161f, 20.703129f, 5.6133161f)
|
||||
curveTo(21.118628f, 5.6133161f, 21.452953f, 5.278991f, 21.452953f, 4.8634909f)
|
||||
verticalLineTo(0.8632184f)
|
||||
curveTo(21.452953f, 0.4477181f, 21.118628f, 0.1133928f, 20.703129f, 0.1133928f)
|
||||
close()
|
||||
moveTo(8.796879f, 4.0821433f)
|
||||
curveTo(8.3813799f, 4.0821433f, 8.0465365f, 4.4164684f, 8.0465365f, 4.8319684f)
|
||||
verticalLineTo(8.8322408f)
|
||||
curveTo(8.0465365f, 9.247741f, 8.3813799f, 9.582066f, 8.796879f, 9.582066f)
|
||||
curveTo(9.212378f, 9.582066f, 9.5467028f, 9.247741f, 9.5467028f, 8.8322408f)
|
||||
verticalLineTo(4.8319684f)
|
||||
curveTo(9.5467028f, 4.4164684f, 9.212378f, 4.0821433f, 8.796879f, 4.0821433f)
|
||||
close()
|
||||
moveTo(16.734379f, 4.0821433f)
|
||||
curveTo(16.31888f, 4.0821433f, 15.984036f, 4.4164684f, 15.984036f, 4.8319684f)
|
||||
verticalLineTo(8.8322408f)
|
||||
curveTo(15.984036f, 9.247741f, 16.31888f, 9.582066f, 16.734379f, 9.582066f)
|
||||
curveTo(17.149878f, 9.582066f, 17.484203f, 9.247741f, 17.484203f, 8.8322408f)
|
||||
verticalLineTo(4.8319684f)
|
||||
curveTo(17.484203f, 4.4164684f, 17.149878f, 4.0821433f, 16.734379f, 4.0821433f)
|
||||
close()
|
||||
moveTo(4.828129f, 8.0508932f)
|
||||
curveTo(4.41263f, 8.0508932f, 4.0777866f, 8.3852183f, 4.0777866f, 8.8007184f)
|
||||
verticalLineTo(12.800991f)
|
||||
curveTo(4.0777866f, 13.216491f, 4.41263f, 13.550816f, 4.828129f, 13.550816f)
|
||||
curveTo(5.243628f, 13.550816f, 5.5779529f, 13.216491f, 5.5779529f, 12.800991f)
|
||||
verticalLineTo(8.8007184f)
|
||||
curveTo(5.5779529f, 8.3852183f, 5.243628f, 8.0508932f, 4.828129f, 8.0508932f)
|
||||
close()
|
||||
moveTo(12.765629f, 8.0508932f)
|
||||
curveTo(12.35013f, 8.0508932f, 12.015286f, 8.3852183f, 12.015286f, 8.8007184f)
|
||||
verticalLineTo(12.800991f)
|
||||
curveTo(12.015286f, 13.216491f, 12.35013f, 13.550816f, 12.765629f, 13.550816f)
|
||||
curveTo(13.181128f, 13.550816f, 13.515453f, 13.216491f, 13.515453f, 12.800991f)
|
||||
verticalLineTo(8.8007184f)
|
||||
curveTo(13.515453f, 8.3852183f, 13.181128f, 8.0508932f, 12.765629f, 8.0508932f)
|
||||
close()
|
||||
moveTo(20.703129f, 8.0508932f)
|
||||
curveTo(20.28763f, 8.0508932f, 19.952786f, 8.3852183f, 19.952786f, 8.8007184f)
|
||||
verticalLineTo(12.800991f)
|
||||
curveTo(19.952786f, 13.216491f, 20.28763f, 13.550816f, 20.703129f, 13.550816f)
|
||||
curveTo(21.118628f, 13.550816f, 21.452953f, 13.216491f, 21.452953f, 12.800991f)
|
||||
verticalLineTo(8.8007184f)
|
||||
curveTo(21.452953f, 8.3852183f, 21.118628f, 8.0508932f, 20.703129f, 8.0508932f)
|
||||
close()
|
||||
moveTo(8.796879f, 12.019643f)
|
||||
curveTo(8.3813799f, 12.019643f, 8.0465365f, 12.353968f, 8.0465365f, 12.769468f)
|
||||
verticalLineTo(16.769741f)
|
||||
curveTo(8.0465365f, 17.185241f, 8.3813799f, 17.519566f, 8.796879f, 17.519566f)
|
||||
curveTo(9.212378f, 17.519566f, 9.5467028f, 17.185241f, 9.5467028f, 16.769741f)
|
||||
verticalLineTo(12.769468f)
|
||||
curveTo(9.5467028f, 12.353968f, 9.212378f, 12.019643f, 8.796879f, 12.019643f)
|
||||
close()
|
||||
moveTo(16.734379f, 12.019643f)
|
||||
curveTo(16.31888f, 12.019643f, 15.984036f, 12.353968f, 15.984036f, 12.769468f)
|
||||
verticalLineTo(16.769741f)
|
||||
curveTo(15.984036f, 17.185241f, 16.31888f, 17.519566f, 16.734379f, 17.519566f)
|
||||
curveTo(17.149878f, 17.519566f, 17.484203f, 17.185241f, 17.484203f, 16.769741f)
|
||||
verticalLineTo(12.769468f)
|
||||
curveTo(17.484203f, 12.353968f, 17.149878f, 12.019643f, 16.734379f, 12.019643f)
|
||||
close()
|
||||
moveTo(4.828129f, 15.988393f)
|
||||
curveTo(4.41263f, 15.988393f, 4.0777866f, 16.322718f, 4.0777866f, 16.738218f)
|
||||
verticalLineTo(20.738491f)
|
||||
curveTo(4.0777866f, 21.153991f, 4.41263f, 21.488316f, 4.828129f, 21.488316f)
|
||||
curveTo(5.243628f, 21.488316f, 5.5779529f, 21.153991f, 5.5779529f, 20.738491f)
|
||||
verticalLineTo(16.738218f)
|
||||
curveTo(5.5779529f, 16.322718f, 5.243628f, 15.988393f, 4.828129f, 15.988393f)
|
||||
close()
|
||||
moveTo(12.765629f, 15.988393f)
|
||||
curveTo(12.35013f, 15.988393f, 12.015286f, 16.322718f, 12.015286f, 16.738218f)
|
||||
verticalLineTo(20.738491f)
|
||||
curveTo(12.015286f, 21.153991f, 12.35013f, 21.488316f, 12.765629f, 21.488316f)
|
||||
curveTo(13.181128f, 21.488316f, 13.515453f, 21.153991f, 13.515453f, 20.738491f)
|
||||
verticalLineTo(16.738218f)
|
||||
curveTo(13.515453f, 16.322718f, 13.181128f, 15.988393f, 12.765629f, 15.988393f)
|
||||
close()
|
||||
moveTo(20.703129f, 15.988393f)
|
||||
curveTo(20.28763f, 15.988393f, 19.952786f, 16.322718f, 19.952786f, 16.738218f)
|
||||
verticalLineTo(20.738491f)
|
||||
curveTo(19.952786f, 21.153991f, 20.28763f, 21.488316f, 20.703129f, 21.488316f)
|
||||
curveTo(21.118628f, 21.488316f, 21.452953f, 21.153991f, 21.452953f, 20.738491f)
|
||||
verticalLineTo(16.738218f)
|
||||
curveTo(21.452953f, 16.322718f, 21.118628f, 15.988393f, 20.703129f, 15.988393f)
|
||||
close()
|
||||
|
||||
}
|
||||
|
||||
val WeatherSleetRainAnimatable = weatherIcon("WeatherSleetRainAnimatable") {
|
||||
|
||||
moveTo(4.8281293f, 0.11317139f)
|
||||
curveTo(4.4126296f, 0.11317139f, 4.0777866f, 0.44749611f, 4.0777866f, 0.86299642f)
|
||||
verticalLineTo(4.8632689f)
|
||||
curveTo(4.0777866f, 5.278769f, 4.4126296f, 5.6130941f, 4.8281293f, 5.6130941f)
|
||||
curveTo(5.2436283f, 5.6130941f, 5.5779543f, 5.278769f, 5.5779543f, 4.8632689f)
|
||||
verticalLineTo(0.86299642f)
|
||||
curveTo(5.5779543f, 0.44749611f, 5.2436283f, 0.11317139f, 4.8281293f, 0.11317139f)
|
||||
close()
|
||||
moveTo(12.765629f, 0.11317139f)
|
||||
curveTo(12.35013f, 0.11317139f, 12.015287f, 0.44749611f, 12.015287f, 0.86299642f)
|
||||
verticalLineTo(4.8632689f)
|
||||
curveTo(12.015287f, 5.278769f, 12.35013f, 5.6130941f, 12.765629f, 5.6130941f)
|
||||
curveTo(13.181128f, 5.6130941f, 13.515454f, 5.278769f, 13.515454f, 4.8632689f)
|
||||
verticalLineTo(0.86299642f)
|
||||
curveTo(13.515454f, 0.44749611f, 13.181128f, 0.11317139f, 12.765629f, 0.11317139f)
|
||||
close()
|
||||
moveTo(20.703129f, 0.11317139f)
|
||||
curveTo(20.287629f, 0.11317139f, 19.952787f, 0.44749611f, 19.952787f, 0.86299642f)
|
||||
verticalLineTo(4.8632689f)
|
||||
curveTo(19.952787f, 5.278769f, 20.287629f, 5.6130941f, 20.703129f, 5.6130941f)
|
||||
curveTo(21.118628f, 5.6130941f, 21.452953f, 5.278769f, 21.452953f, 4.8632689f)
|
||||
verticalLineTo(0.86299642f)
|
||||
curveTo(21.452953f, 0.44749611f, 21.118628f, 0.11317139f, 20.703129f, 0.11317139f)
|
||||
close()
|
||||
moveTo(4.8281293f, 8.0506712f)
|
||||
curveTo(4.4126296f, 8.0506712f, 4.0777866f, 8.3849963f, 4.0777866f, 8.8004964f)
|
||||
verticalLineTo(12.800769f)
|
||||
curveTo(4.0777866f, 13.216269f, 4.4126296f, 13.550594f, 4.8281293f, 13.550594f)
|
||||
curveTo(5.2436283f, 13.550594f, 5.5779543f, 13.216269f, 5.5779543f, 12.800769f)
|
||||
verticalLineTo(8.8004964f)
|
||||
curveTo(5.5779543f, 8.3849963f, 5.2436283f, 8.0506712f, 4.8281293f, 8.0506712f)
|
||||
close()
|
||||
moveTo(12.765629f, 8.0506712f)
|
||||
curveTo(12.35013f, 8.0506712f, 12.015287f, 8.3849963f, 12.015287f, 8.8004964f)
|
||||
verticalLineTo(12.800769f)
|
||||
curveTo(12.015287f, 13.216269f, 12.35013f, 13.550594f, 12.765629f, 13.550594f)
|
||||
curveTo(13.181128f, 13.550594f, 13.515454f, 13.216269f, 13.515454f, 12.800769f)
|
||||
verticalLineTo(8.8004964f)
|
||||
curveTo(13.515454f, 8.3849963f, 13.181128f, 8.0506712f, 12.765629f, 8.0506712f)
|
||||
close()
|
||||
moveTo(20.703129f, 8.0506712f)
|
||||
curveTo(20.287629f, 8.0506712f, 19.952787f, 8.3849963f, 19.952787f, 8.8004964f)
|
||||
verticalLineTo(12.800769f)
|
||||
curveTo(19.952787f, 13.216269f, 20.287629f, 13.550594f, 20.703129f, 13.550594f)
|
||||
curveTo(21.118628f, 13.550594f, 21.452953f, 13.216269f, 21.452953f, 12.800769f)
|
||||
verticalLineTo(8.8004964f)
|
||||
curveTo(21.452953f, 8.3849963f, 21.118628f, 8.0506712f, 20.703129f, 8.0506712f)
|
||||
close()
|
||||
moveTo(4.8281293f, 15.988171f)
|
||||
curveTo(4.4126296f, 15.988171f, 4.0777866f, 16.322496f, 4.0777866f, 16.737996f)
|
||||
verticalLineTo(20.738269f)
|
||||
curveTo(4.0777866f, 21.153769f, 4.4126296f, 21.488094f, 4.8281293f, 21.488094f)
|
||||
curveTo(5.2436283f, 21.488094f, 5.5779543f, 21.153769f, 5.5779543f, 20.738269f)
|
||||
verticalLineTo(16.737996f)
|
||||
curveTo(5.5779543f, 16.322496f, 5.2436283f, 15.988171f, 4.8281293f, 15.988171f)
|
||||
close()
|
||||
moveTo(12.765629f, 15.988171f)
|
||||
curveTo(12.35013f, 15.988171f, 12.015287f, 16.322496f, 12.015287f, 16.737996f)
|
||||
verticalLineTo(20.738269f)
|
||||
curveTo(12.015287f, 21.153769f, 12.35013f, 21.488094f, 12.765629f, 21.488094f)
|
||||
curveTo(13.181128f, 21.488094f, 13.515454f, 21.153769f, 13.515454f, 20.738269f)
|
||||
verticalLineTo(16.737996f)
|
||||
curveTo(13.515454f, 16.322496f, 13.181128f, 15.988171f, 12.765629f, 15.988171f)
|
||||
close()
|
||||
moveTo(20.703129f, 15.988171f)
|
||||
curveTo(20.287629f, 15.988171f, 19.952787f, 16.322496f, 19.952787f, 16.737996f)
|
||||
verticalLineTo(20.738269f)
|
||||
curveTo(19.952787f, 21.153769f, 20.287629f, 21.488094f, 20.703129f, 21.488094f)
|
||||
curveTo(21.118628f, 21.488094f, 21.452953f, 21.153769f, 21.452953f, 20.738269f)
|
||||
verticalLineTo(16.737996f)
|
||||
curveTo(21.452953f, 16.322496f, 21.118628f, 15.988171f, 20.703129f, 15.988171f)
|
||||
close()
|
||||
}
|
||||
|
||||
val WeatherSleetSnowAnimatable = weatherIcon("WeatherSleetSnowAnimatable") {
|
||||
|
||||
moveTo(8.796879f, 5.0270833f)
|
||||
curveTo(7.8632606f, 4.9745641f, 7.2031834f, 6.1917513f, 7.7668228f, 6.9446931f)
|
||||
curveTo(8.2182954f, 7.6432508f, 9.3919824f, 7.6787827f, 9.8262364f, 6.9412491f)
|
||||
curveTo(10.250965f, 6.3103634f, 9.9588313f, 5.3184227f, 9.2064902f, 5.0975184f)
|
||||
curveTo(9.0753076f, 5.0509595f, 8.9361544f, 5.0263693f, 8.796879f, 5.0270833f)
|
||||
close()
|
||||
moveTo(16.734379f, 5.0270833f)
|
||||
curveTo(15.800761f, 4.974564f, 15.140683f, 6.1917512f, 15.704322f, 6.9446931f)
|
||||
curveTo(16.155795f, 7.643251f, 17.329482f, 7.6787825f, 17.763736f, 6.9412491f)
|
||||
curveTo(18.188465f, 6.3103636f, 17.896331f, 5.3184225f, 17.14399f, 5.0975184f)
|
||||
curveTo(17.012808f, 5.0509596f, 16.873654f, 5.0263694f, 16.734379f, 5.0270833f)
|
||||
close()
|
||||
moveTo(8.796879f, 12.964583f)
|
||||
curveTo(7.8632606f, 12.912064f, 7.2031834f, 14.129251f, 7.7668228f, 14.882193f)
|
||||
curveTo(8.2182957f, 15.580751f, 9.3919822f, 15.616282f, 9.8262364f, 14.878749f)
|
||||
curveTo(10.250965f, 14.247863f, 9.9588308f, 13.255923f, 9.2064902f, 13.035018f)
|
||||
curveTo(9.0753077f, 12.988459f, 8.9361544f, 12.963869f, 8.796879f, 12.964583f)
|
||||
close()
|
||||
moveTo(16.734379f, 12.964583f)
|
||||
curveTo(15.800761f, 12.912064f, 15.140683f, 14.129251f, 15.704322f, 14.882193f)
|
||||
curveTo(16.155795f, 15.580751f, 17.329482f, 15.616282f, 17.763736f, 14.878749f)
|
||||
curveTo(18.188465f, 14.247863f, 17.896331f, 13.255923f, 17.14399f, 13.035018f)
|
||||
curveTo(17.012808f, 12.988459f, 16.873654f, 12.963869f, 16.734379f, 12.964583f)
|
||||
close()
|
||||
}
|
||||
|
||||
val WeatherFog = weatherIcon("WeatherFog") {
|
||||
moveTo(9.7558594f, 9.9609375f)
|
||||
curveTo(9.2018594f, 9.9609375f, 8.7558594f, 10.406937f, 8.7558594f, 10.960938f)
|
||||
curveTo(8.7558594f, 11.514938f, 9.2018594f, 11.960938f, 9.7558594f, 11.960938f)
|
||||
lineTo(19.662109f, 11.960938f)
|
||||
curveTo(20.216109f, 11.960937f, 20.662109f, 11.514938f, 20.662109f, 10.960938f)
|
||||
curveTo(20.662109f, 10.406937f, 20.216109f, 9.9609375f, 19.662109f, 9.9609375f)
|
||||
lineTo(9.7558594f, 9.9609375f)
|
||||
close()
|
||||
moveTo(2.390625f, 12.818359f)
|
||||
curveTo(1.836625f, 12.818359f, 1.390625f, 13.264359f, 1.390625f, 13.818359f)
|
||||
curveTo(1.390625f, 14.372359f, 1.836625f, 14.818359f, 2.390625f, 14.818359f)
|
||||
lineTo(11.5625f, 14.818359f)
|
||||
curveTo(12.1165f, 14.818359f, 12.5625f, 14.372359f, 12.5625f, 13.818359f)
|
||||
curveTo(12.5625f, 13.264359f, 12.1165f, 12.818359f, 11.5625f, 12.818359f)
|
||||
lineTo(2.390625f, 12.818359f)
|
||||
close()
|
||||
moveTo(14.847656f, 12.818359f)
|
||||
curveTo(14.293656f, 12.818359f, 13.847656f, 13.264359f, 13.847656f, 13.818359f)
|
||||
curveTo(13.847656f, 14.372359f, 14.293656f, 14.818359f, 14.847656f, 14.818359f)
|
||||
lineTo(21.183594f, 14.818359f)
|
||||
curveTo(21.737594f, 14.818359f, 22.183594f, 14.372359f, 22.183594f, 13.818359f)
|
||||
curveTo(22.183594f, 13.264359f, 21.737594f, 12.818359f, 21.183594f, 12.818359f)
|
||||
lineTo(14.847656f, 12.818359f)
|
||||
close()
|
||||
}
|
||||
|
||||
val Rain = weatherIcon("Rain") {
|
||||
|
||||
moveTo(13.95f, 21.9f)
|
||||
quadToRelative(-0.375f, 0.2f, -0.762f, 0.062f)
|
||||
quadToRelative(-0.388f, -0.137f, -0.588f, -0.512f)
|
||||
lineToRelative(-1.5f, -3f)
|
||||
quadToRelative(-0.2f, -0.375f, -0.062f, -0.762f)
|
||||
quadToRelative(0.137f, -0.388f, 0.512f, -0.588f)
|
||||
quadToRelative(0.375f, -0.2f, 0.762f, -0.062f)
|
||||
quadToRelative(0.388f, 0.137f, 0.588f, 0.512f)
|
||||
lineToRelative(1.5f, 3f)
|
||||
quadToRelative(0.2f, 0.375f, 0.063f, 0.762f)
|
||||
quadToRelative(-0.138f, 0.388f, -0.513f, 0.588f)
|
||||
close()
|
||||
moveToRelative(6f, 0f)
|
||||
quadToRelative(-0.375f, 0.2f, -0.762f, 0.062f)
|
||||
quadToRelative(-0.388f, -0.137f, -0.588f, -0.512f)
|
||||
lineToRelative(-1.5f, -3f)
|
||||
quadToRelative(-0.2f, -0.375f, -0.062f, -0.762f)
|
||||
quadToRelative(0.137f, -0.388f, 0.512f, -0.588f)
|
||||
quadToRelative(0.375f, -0.2f, 0.762f, -0.062f)
|
||||
quadToRelative(0.388f, 0.137f, 0.588f, 0.512f)
|
||||
lineToRelative(1.5f, 3f)
|
||||
quadToRelative(0.2f, 0.375f, 0.063f, 0.762f)
|
||||
quadToRelative(-0.138f, 0.388f, -0.513f, 0.588f)
|
||||
close()
|
||||
moveToRelative(-12f, 0f)
|
||||
quadToRelative(-0.375f, 0.2f, -0.762f, 0.062f)
|
||||
quadToRelative(-0.388f, -0.137f, -0.588f, -0.512f)
|
||||
lineToRelative(-1.5f, -3f)
|
||||
quadToRelative(-0.2f, -0.375f, -0.062f, -0.762f)
|
||||
quadToRelative(0.137f, -0.388f, 0.512f, -0.588f)
|
||||
quadToRelative(0.375f, -0.2f, 0.762f, -0.062f)
|
||||
quadToRelative(0.388f, 0.137f, 0.588f, 0.512f)
|
||||
lineToRelative(1.5f, 3f)
|
||||
quadToRelative(0.2f, 0.375f, 0.063f, 0.762f)
|
||||
quadToRelative(-0.138f, 0.388f, -0.513f, 0.588f)
|
||||
close()
|
||||
moveTo(7.5f, 16f)
|
||||
quadToRelative(-2.275f, 0f, -3.887f, -1.613f)
|
||||
quadTo(2f, 12.775f, 2f, 10.5f)
|
||||
quadToRelative(0f, -2.075f, 1.375f, -3.625f)
|
||||
quadToRelative(1.375f, -1.55f, 3.4f, -1.825f)
|
||||
quadToRelative(0.8f, -1.425f, 2.188f, -2.238f)
|
||||
quadTo(10.35f, 2f, 12f, 2f)
|
||||
quadToRelative(2.25f, 0f, 3.912f, 1.438f)
|
||||
quadToRelative(1.663f, 1.437f, 2.013f, 3.587f)
|
||||
quadToRelative(1.725f, 0.15f, 2.9f, 1.425f)
|
||||
quadTo(22f, 9.725f, 22f, 11.5f)
|
||||
quadToRelative(0f, 1.875f, -1.312f, 3.188f)
|
||||
quadTo(19.375f, 16f, 17.5f, 16f)
|
||||
close()
|
||||
moveToRelative(0f, -2f)
|
||||
horizontalLineToRelative(10f)
|
||||
quadToRelative(1.05f, 0f, 1.775f, -0.725f)
|
||||
quadTo(20f, 12.55f, 20f, 11.5f)
|
||||
quadToRelative(0f, -1.05f, -0.725f, -1.775f)
|
||||
quadTo(18.55f, 9f, 17.5f, 9f)
|
||||
horizontalLineTo(16f)
|
||||
verticalLineTo(8f)
|
||||
quadToRelative(0f, -1.65f, -1.175f, -2.825f)
|
||||
quadTo(13.65f, 4f, 12f, 4f)
|
||||
quadToRelative(-1.2f, 0f, -2.188f, 0.65f)
|
||||
quadToRelative(-0.987f, 0.65f, -1.487f, 1.75f)
|
||||
lineToRelative(-0.25f, 0.6f)
|
||||
horizontalLineTo(7.45f)
|
||||
quadToRelative(-1.425f, 0.05f, -2.437f, 1.062f)
|
||||
quadTo(4f, 9.075f, 4f, 10.5f)
|
||||
quadToRelative(0f, 1.45f, 1.025f, 2.475f)
|
||||
quadTo(6.05f, 14f, 7.5f, 14f)
|
||||
close()
|
||||
moveTo(12f, 9f)
|
||||
close()
|
||||
|
||||
}
|
||||
|
||||
val HumidityPercentage = weatherIcon("HumidityPercentage") {
|
||||
|
||||
moveTo(14.5f, 18f)
|
||||
quadToRelative(0.625f, 0f, 1.062f, -0.438f)
|
||||
quadTo(16f, 17.125f, 16f, 16.5f)
|
||||
reflectiveQuadToRelative(-0.438f, -1.062f)
|
||||
quadTo(15.125f, 15f, 14.5f, 15f)
|
||||
reflectiveQuadToRelative(-1.062f, 0.438f)
|
||||
quadTo(13f, 15.875f, 13f, 16.5f)
|
||||
reflectiveQuadToRelative(0.438f, 1.062f)
|
||||
quadTo(13.875f, 18f, 14.5f, 18f)
|
||||
close()
|
||||
moveToRelative(-5.75f, -0.75f)
|
||||
quadToRelative(0.3f, 0.3f, 0.7f, 0.3f)
|
||||
quadToRelative(0.4f, 0f, 0.7f, -0.3f)
|
||||
lineToRelative(5.1f, -5.1f)
|
||||
quadToRelative(0.3f, -0.3f, 0.3f, -0.7f)
|
||||
quadToRelative(0f, -0.4f, -0.3f, -0.7f)
|
||||
quadToRelative(-0.3f, -0.3f, -0.712f, -0.3f)
|
||||
quadToRelative(-0.413f, 0f, -0.713f, 0.3f)
|
||||
lineTo(8.75f, 15.825f)
|
||||
quadToRelative(-0.3f, 0.3f, -0.3f, 0.713f)
|
||||
quadToRelative(0f, 0.412f, 0.3f, 0.712f)
|
||||
close()
|
||||
moveTo(9.5f, 13f)
|
||||
quadToRelative(0.625f, 0f, 1.062f, -0.438f)
|
||||
quadTo(11f, 12.125f, 11f, 11.5f)
|
||||
reflectiveQuadToRelative(-0.438f, -1.062f)
|
||||
quadTo(10.125f, 10f, 9.5f, 10f)
|
||||
reflectiveQuadToRelative(-1.062f, 0.438f)
|
||||
quadTo(8f, 10.875f, 8f, 11.5f)
|
||||
reflectiveQuadToRelative(0.438f, 1.062f)
|
||||
quadTo(8.875f, 13f, 9.5f, 13f)
|
||||
close()
|
||||
moveToRelative(2.5f, 9f)
|
||||
quadToRelative(-3.175f, 0f, -5.587f, -2.212f)
|
||||
quadTo(4f, 17.575f, 4f, 13.8f)
|
||||
quadToRelative(0f, -2.375f, 1.8f, -5.15f)
|
||||
quadToRelative(1.8f, -2.775f, 5.45f, -6f)
|
||||
quadToRelative(0.15f, -0.125f, 0.35f, -0.2f)
|
||||
quadToRelative(0.2f, -0.075f, 0.4f, -0.075f)
|
||||
reflectiveQuadToRelative(0.4f, 0.075f)
|
||||
quadToRelative(0.2f, 0.075f, 0.35f, 0.2f)
|
||||
quadToRelative(3.65f, 3.225f, 5.45f, 6f)
|
||||
quadTo(20f, 11.425f, 20f, 13.8f)
|
||||
quadToRelative(0f, 3.775f, -2.413f, 5.988f)
|
||||
quadTo(15.175f, 22f, 12f, 22f)
|
||||
close()
|
||||
moveToRelative(0f, -2f)
|
||||
quadToRelative(2.525f, 0f, 4.262f, -1.725f)
|
||||
quadTo(18f, 16.55f, 18f, 13.8f)
|
||||
quadToRelative(0f, -1.775f, -1.475f, -4.063f)
|
||||
quadTo(15.05f, 7.45f, 12f, 4.65f)
|
||||
quadToRelative(-3.05f, 2.8f, -4.525f, 5.087f)
|
||||
quadTo(6f, 12.025f, 6f, 13.8f)
|
||||
quadToRelative(0f, 2.75f, 1.737f, 4.475f)
|
||||
quadTo(9.475f, 20f, 12f, 20f)
|
||||
close()
|
||||
moveToRelative(0f, -6.2f)
|
||||
close()
|
||||
}
|
||||
@@ -3,28 +3,16 @@ package de.mm20.launcher2.ui.component.weather
|
||||
import androidx.compose.foundation.layout.Box
|
||||
import androidx.compose.foundation.layout.offset
|
||||
import androidx.compose.foundation.layout.size
|
||||
import androidx.compose.material.icons.Icons
|
||||
import androidx.compose.material.icons.rounded.AcUnit
|
||||
import androidx.compose.material.icons.rounded.Air
|
||||
import androidx.compose.material.icons.rounded.Bolt
|
||||
import androidx.compose.material.icons.rounded.DarkMode
|
||||
import androidx.compose.material.icons.rounded.LightMode
|
||||
import androidx.compose.material.icons.rounded.Thermostat
|
||||
import androidx.compose.material3.Icon
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.ui.Alignment
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.draw.scale
|
||||
import androidx.compose.ui.graphics.Color
|
||||
import androidx.compose.ui.res.painterResource
|
||||
import androidx.compose.ui.unit.DpOffset
|
||||
import androidx.compose.ui.unit.dp
|
||||
import de.mm20.launcher2.icons.WeatherCloud
|
||||
import de.mm20.launcher2.icons.WeatherFog
|
||||
import de.mm20.launcher2.icons.WeatherHail
|
||||
import de.mm20.launcher2.icons.WeatherLightRain
|
||||
import de.mm20.launcher2.icons.WeatherRain
|
||||
import de.mm20.launcher2.icons.WeatherSleetRain
|
||||
import de.mm20.launcher2.icons.WeatherSleetSnow
|
||||
import de.mm20.launcher2.ui.R
|
||||
|
||||
@Composable
|
||||
fun WeatherIcon(
|
||||
@@ -82,7 +70,7 @@ private fun SunMoon(icon: WeatherIcon, night: Boolean, colors: WeatherIconColors
|
||||
}
|
||||
|
||||
Icon(
|
||||
if (night) Icons.Rounded.DarkMode else Icons.Rounded.LightMode,
|
||||
painterResource(if (night) R.drawable.dark_mode_24px_filled else R.drawable.light_mode_24px_filled),
|
||||
null,
|
||||
modifier = Modifier
|
||||
.size(24.dp)
|
||||
@@ -176,7 +164,7 @@ private fun Cloud1(icon: WeatherIcon, colors: WeatherIconColors) {
|
||||
}
|
||||
|
||||
Icon(
|
||||
Icons.Rounded.WeatherCloud,
|
||||
WeatherCloud,
|
||||
null,
|
||||
modifier = Modifier
|
||||
.size(20.dp)
|
||||
@@ -263,7 +251,7 @@ private fun Cloud2(icon: WeatherIcon, colors: WeatherIconColors) {
|
||||
}
|
||||
|
||||
Icon(
|
||||
Icons.Rounded.WeatherCloud,
|
||||
WeatherCloud,
|
||||
null,
|
||||
modifier = Modifier
|
||||
.size(20.dp)
|
||||
@@ -325,7 +313,7 @@ private fun Cloud3(icon: WeatherIcon, colors: WeatherIconColors) {
|
||||
}
|
||||
|
||||
Icon(
|
||||
Icons.Rounded.WeatherCloud,
|
||||
WeatherCloud,
|
||||
null,
|
||||
modifier = Modifier
|
||||
.size(32.dp)
|
||||
@@ -341,7 +329,7 @@ private fun Precipitation(icon: WeatherIcon, colors: WeatherIconColors) {
|
||||
modifier = Modifier
|
||||
.offset(y = 2.dp)
|
||||
.size(32.dp),
|
||||
imageVector = Icons.Rounded.WeatherSleetSnow,
|
||||
imageVector = WeatherSleetSnow,
|
||||
contentDescription = null,
|
||||
tint = colors.snow
|
||||
)
|
||||
@@ -349,7 +337,7 @@ private fun Precipitation(icon: WeatherIcon, colors: WeatherIconColors) {
|
||||
modifier = Modifier
|
||||
.offset(y = 2.dp)
|
||||
.size(32.dp),
|
||||
imageVector = Icons.Rounded.WeatherSleetRain,
|
||||
imageVector = WeatherSleetRain,
|
||||
contentDescription = null,
|
||||
tint = colors.rain
|
||||
)
|
||||
@@ -368,13 +356,13 @@ private fun Precipitation(icon: WeatherIcon, colors: WeatherIconColors) {
|
||||
else -> return
|
||||
}
|
||||
val vector = when (icon) {
|
||||
WeatherIcon.Drizzle -> Icons.Rounded.WeatherLightRain
|
||||
WeatherIcon.Drizzle -> WeatherLightRain
|
||||
WeatherIcon.Showers,
|
||||
WeatherIcon.ThunderstormWithRain,
|
||||
WeatherIcon.HeavyThunderstormWithRain -> Icons.Rounded.WeatherRain
|
||||
WeatherIcon.HeavyThunderstormWithRain -> WeatherRain
|
||||
|
||||
WeatherIcon.Hail, WeatherIcon.Snow -> Icons.Rounded.WeatherHail
|
||||
else -> Icons.Rounded.WeatherLightRain
|
||||
WeatherIcon.Hail, WeatherIcon.Snow -> WeatherHail
|
||||
else -> WeatherLightRain
|
||||
}
|
||||
val color = when (icon) {
|
||||
WeatherIcon.Drizzle,
|
||||
@@ -402,7 +390,7 @@ private fun HotCold(icon: WeatherIcon, colors: WeatherIconColors) {
|
||||
Icon(
|
||||
modifier = Modifier
|
||||
.size(32.dp),
|
||||
imageVector = Icons.Rounded.Thermostat,
|
||||
painter = painterResource(R.drawable.heat_24px),
|
||||
contentDescription = null,
|
||||
tint = colors.hot
|
||||
)
|
||||
@@ -411,7 +399,7 @@ private fun HotCold(icon: WeatherIcon, colors: WeatherIconColors) {
|
||||
Icon(
|
||||
modifier = Modifier
|
||||
.size(32.dp),
|
||||
imageVector = Icons.Rounded.AcUnit,
|
||||
painter = painterResource(R.drawable.severe_cold_24px),
|
||||
contentDescription = null,
|
||||
tint = colors.cold
|
||||
)
|
||||
@@ -425,7 +413,7 @@ private fun Wind(icon: WeatherIcon, colors: WeatherIconColors) {
|
||||
modifier = Modifier
|
||||
.offset(x = 4.dp, y = 0.dp)
|
||||
.size(24.dp),
|
||||
imageVector = Icons.Rounded.Air,
|
||||
painter = painterResource(R.drawable.air_24px),
|
||||
contentDescription = null,
|
||||
tint = colors.windDark
|
||||
)
|
||||
@@ -434,7 +422,7 @@ private fun Wind(icon: WeatherIcon, colors: WeatherIconColors) {
|
||||
Icon(
|
||||
modifier = Modifier
|
||||
.size(if (icon == WeatherIcon.Wind) 32.dp else 24.dp),
|
||||
imageVector = Icons.Rounded.Air,
|
||||
painter = painterResource(R.drawable.air_24px),
|
||||
contentDescription = null,
|
||||
tint = colors.wind
|
||||
)
|
||||
@@ -452,7 +440,7 @@ private fun Fog(icon: WeatherIcon, colors: WeatherIconColors) {
|
||||
modifier = Modifier
|
||||
.size(24.dp)
|
||||
.offset(x = 3.dp, y = 4.dp),
|
||||
imageVector = Icons.Rounded.WeatherFog,
|
||||
imageVector = WeatherFog,
|
||||
contentDescription = null,
|
||||
tint = colors.fog
|
||||
)
|
||||
@@ -476,7 +464,7 @@ private fun LightningBolts(icon: WeatherIcon, colors: WeatherIconColors) {
|
||||
modifier = Modifier
|
||||
.size(12.dp)
|
||||
.offset(x = if (isHeavy) 4.dp else 1.dp, y = 6.dp),
|
||||
imageVector = Icons.Rounded.Bolt,
|
||||
painter = painterResource(R.drawable.bolt_24px_filled),
|
||||
contentDescription = null,
|
||||
tint = colors.lightningBolt
|
||||
)
|
||||
@@ -486,7 +474,7 @@ private fun LightningBolts(icon: WeatherIcon, colors: WeatherIconColors) {
|
||||
modifier = Modifier
|
||||
.size(10.dp)
|
||||
.offset(x = -3.dp, y = 6.dp),
|
||||
imageVector = Icons.Rounded.Bolt,
|
||||
painter = painterResource(R.drawable.bolt_24px_filled),
|
||||
contentDescription = null,
|
||||
tint = colors.lightningBolt
|
||||
)
|
||||
|
||||
@@ -12,8 +12,6 @@ import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.foundation.layout.size
|
||||
import androidx.compose.foundation.layout.systemBarsPadding
|
||||
import androidx.compose.foundation.shape.CircleShape
|
||||
import androidx.compose.material.icons.Icons
|
||||
import androidx.compose.material.icons.rounded.Notifications
|
||||
import androidx.compose.material3.Icon
|
||||
import androidx.compose.material3.MaterialTheme
|
||||
import androidx.compose.runtime.Composable
|
||||
@@ -26,12 +24,14 @@ import androidx.compose.ui.draw.drawWithContent
|
||||
import androidx.compose.ui.draw.scale
|
||||
import androidx.compose.ui.draw.shadow
|
||||
import androidx.compose.ui.input.pointer.pointerInput
|
||||
import androidx.compose.ui.res.painterResource
|
||||
import androidx.compose.ui.unit.dp
|
||||
import androidx.compose.ui.zIndex
|
||||
import de.mm20.launcher2.globalactions.GlobalActionsService
|
||||
import de.mm20.launcher2.permissions.PermissionGroup
|
||||
import de.mm20.launcher2.permissions.PermissionsManager
|
||||
import de.mm20.launcher2.preferences.GestureAction
|
||||
import de.mm20.launcher2.ui.R
|
||||
import de.mm20.launcher2.ui.launcher.sheets.LocalBottomSheetManager
|
||||
import org.koin.core.component.KoinComponent
|
||||
import org.koin.core.component.inject
|
||||
@@ -95,7 +95,7 @@ internal object NotificationsComponent : ScaffoldComponent(), KoinComponent {
|
||||
contentAlignment = Alignment.Center
|
||||
) {
|
||||
Icon(
|
||||
Icons.Rounded.Notifications, null,
|
||||
painterResource(R.drawable.notifications_24px), null,
|
||||
modifier = Modifier.padding(16.dp),
|
||||
tint = MaterialTheme.colorScheme.onSecondaryContainer,
|
||||
)
|
||||
|
||||
@@ -12,8 +12,6 @@ import androidx.compose.foundation.layout.offset
|
||||
import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.foundation.layout.size
|
||||
import androidx.compose.foundation.shape.CircleShape
|
||||
import androidx.compose.material.icons.Icons
|
||||
import androidx.compose.material.icons.rounded.PowerSettingsNew
|
||||
import androidx.compose.material3.Icon
|
||||
import androidx.compose.material3.MaterialTheme
|
||||
import androidx.compose.runtime.Composable
|
||||
@@ -30,6 +28,7 @@ import androidx.compose.ui.draw.shadow
|
||||
import androidx.compose.ui.input.pointer.pointerInput
|
||||
import androidx.compose.ui.platform.LocalContext
|
||||
import androidx.compose.ui.platform.LocalView
|
||||
import androidx.compose.ui.res.painterResource
|
||||
import androidx.compose.ui.unit.IntOffset
|
||||
import androidx.compose.ui.unit.dp
|
||||
import androidx.compose.ui.unit.times
|
||||
@@ -38,6 +37,7 @@ import de.mm20.launcher2.globalactions.GlobalActionsService
|
||||
import de.mm20.launcher2.permissions.PermissionGroup
|
||||
import de.mm20.launcher2.permissions.PermissionsManager
|
||||
import de.mm20.launcher2.preferences.GestureAction
|
||||
import de.mm20.launcher2.ui.R
|
||||
import de.mm20.launcher2.ui.launcher.sheets.LocalBottomSheetManager
|
||||
import org.koin.core.component.KoinComponent
|
||||
import org.koin.core.component.inject
|
||||
@@ -157,7 +157,7 @@ internal object PowerMenuComponent : ScaffoldComponent(), KoinComponent {
|
||||
contentAlignment = Alignment.Center
|
||||
) {
|
||||
Icon(
|
||||
Icons.Rounded.PowerSettingsNew, null,
|
||||
painterResource(R.drawable.power_settings_new_24px), null,
|
||||
modifier = Modifier.padding(16.dp),
|
||||
tint = MaterialTheme.colorScheme.onSecondaryContainer,
|
||||
)
|
||||
|
||||
@@ -12,8 +12,6 @@ import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.foundation.layout.size
|
||||
import androidx.compose.foundation.layout.systemBarsPadding
|
||||
import androidx.compose.foundation.shape.CircleShape
|
||||
import androidx.compose.material.icons.Icons
|
||||
import androidx.compose.material.icons.rounded.Settings
|
||||
import androidx.compose.material3.Icon
|
||||
import androidx.compose.material3.MaterialTheme
|
||||
import androidx.compose.runtime.Composable
|
||||
@@ -26,12 +24,14 @@ import androidx.compose.ui.draw.drawWithContent
|
||||
import androidx.compose.ui.draw.scale
|
||||
import androidx.compose.ui.draw.shadow
|
||||
import androidx.compose.ui.input.pointer.pointerInput
|
||||
import androidx.compose.ui.res.painterResource
|
||||
import androidx.compose.ui.unit.dp
|
||||
import androidx.compose.ui.zIndex
|
||||
import de.mm20.launcher2.globalactions.GlobalActionsService
|
||||
import de.mm20.launcher2.permissions.PermissionGroup
|
||||
import de.mm20.launcher2.permissions.PermissionsManager
|
||||
import de.mm20.launcher2.preferences.GestureAction
|
||||
import de.mm20.launcher2.ui.R
|
||||
import de.mm20.launcher2.ui.launcher.sheets.LocalBottomSheetManager
|
||||
import org.koin.core.component.KoinComponent
|
||||
import org.koin.core.component.inject
|
||||
@@ -92,7 +92,7 @@ internal object QuickSettingsComponent : ScaffoldComponent(), KoinComponent {
|
||||
contentAlignment = Alignment.Center
|
||||
) {
|
||||
Icon(
|
||||
Icons.Rounded.Settings, null,
|
||||
painterResource(R.drawable.settings_24px), null,
|
||||
modifier = Modifier.padding(16.dp),
|
||||
tint = MaterialTheme.colorScheme.onSecondaryContainer,
|
||||
)
|
||||
|
||||
@@ -6,8 +6,6 @@ import androidx.compose.foundation.layout.Column
|
||||
import androidx.compose.foundation.layout.PaddingValues
|
||||
import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.foundation.layout.size
|
||||
import androidx.compose.material.icons.Icons
|
||||
import androidx.compose.material.icons.rounded.Settings
|
||||
import androidx.compose.material3.Button
|
||||
import androidx.compose.material3.ButtonDefaults
|
||||
import androidx.compose.material3.MaterialTheme
|
||||
@@ -19,6 +17,7 @@ import androidx.compose.runtime.mutableStateOf
|
||||
import androidx.compose.ui.Alignment
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.platform.LocalContext
|
||||
import androidx.compose.ui.res.painterResource
|
||||
import androidx.compose.ui.res.stringResource
|
||||
import androidx.compose.ui.text.style.TextAlign
|
||||
import androidx.compose.ui.unit.dp
|
||||
@@ -71,7 +70,7 @@ internal object SecretComponent : ScaffoldComponent() {
|
||||
context.startActivity(Intent(context, SettingsActivity::class.java))
|
||||
}, modifier = Modifier.padding(top = 24.dp)) {
|
||||
Icon(
|
||||
Icons.Rounded.Settings,
|
||||
painterResource(R.drawable.settings_20px),
|
||||
contentDescription = null,
|
||||
modifier = Modifier.padding(ButtonDefaults.IconSpacing).size(ButtonDefaults.IconSize)
|
||||
)
|
||||
|
||||
@@ -24,20 +24,6 @@ import androidx.compose.foundation.layout.size
|
||||
import androidx.compose.foundation.rememberScrollState
|
||||
import androidx.compose.foundation.shape.CircleShape
|
||||
import androidx.compose.foundation.verticalScroll
|
||||
import androidx.compose.material.icons.Icons
|
||||
import androidx.compose.material.icons.automirrored.rounded.ArrowBack
|
||||
import androidx.compose.material.icons.automirrored.rounded.NavigateNext
|
||||
import androidx.compose.material.icons.automirrored.rounded.OpenInNew
|
||||
import androidx.compose.material.icons.rounded.Android
|
||||
import androidx.compose.material.icons.rounded.Clear
|
||||
import androidx.compose.material.icons.rounded.Delete
|
||||
import androidx.compose.material.icons.rounded.Info
|
||||
import androidx.compose.material.icons.rounded.Link
|
||||
import androidx.compose.material.icons.rounded.Notifications
|
||||
import androidx.compose.material.icons.rounded.Share
|
||||
import androidx.compose.material.icons.rounded.Star
|
||||
import androidx.compose.material.icons.rounded.StarOutline
|
||||
import androidx.compose.material.icons.rounded.Tune
|
||||
import androidx.compose.material3.HorizontalDivider
|
||||
import androidx.compose.material3.Icon
|
||||
import androidx.compose.material3.IconButton
|
||||
@@ -56,6 +42,7 @@ import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.draw.clip
|
||||
import androidx.compose.ui.graphics.Color
|
||||
import androidx.compose.ui.platform.LocalContext
|
||||
import androidx.compose.ui.res.painterResource
|
||||
import androidx.compose.ui.res.pluralStringResource
|
||||
import androidx.compose.ui.res.stringResource
|
||||
import androidx.compose.ui.text.style.TextOverflow
|
||||
@@ -261,7 +248,7 @@ fun AppItem(
|
||||
viewModel.clearNotification(not)
|
||||
}
|
||||
) {
|
||||
Icon(Icons.Rounded.Clear, null)
|
||||
Icon(painterResource(R.drawable.close_24px), null)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -277,7 +264,7 @@ fun AppItem(
|
||||
verticalAlignment = Alignment.CenterVertically
|
||||
) {
|
||||
Icon(
|
||||
Icons.Rounded.Notifications,
|
||||
painterResource(R.drawable.notifications_24px),
|
||||
null,
|
||||
modifier = Modifier.padding(horizontal = 16.dp)
|
||||
)
|
||||
@@ -291,7 +278,7 @@ fun AppItem(
|
||||
modifier = Modifier.weight(1f),
|
||||
)
|
||||
Icon(
|
||||
Icons.AutoMirrored.Rounded.NavigateNext,
|
||||
painterResource(R.drawable.chevron_forward_24px),
|
||||
null,
|
||||
modifier = Modifier.padding(horizontal = 12.dp)
|
||||
)
|
||||
@@ -369,7 +356,10 @@ fun AppItem(
|
||||
}
|
||||
) {
|
||||
Icon(
|
||||
if (isPinned) Icons.Rounded.Star else Icons.Rounded.StarOutline,
|
||||
painterResource(
|
||||
if (isPinned) R.drawable.star_24px_filled
|
||||
else R.drawable.star_24px
|
||||
),
|
||||
stringResource(if (isPinned) R.string.menu_favorites_unpin else R.string.menu_favorites_pin),
|
||||
)
|
||||
}
|
||||
@@ -386,7 +376,7 @@ fun AppItem(
|
||||
val favAction = if (isPinned) {
|
||||
DefaultToolbarAction(
|
||||
label = stringResource(R.string.menu_favorites_unpin),
|
||||
icon = Icons.Rounded.Star,
|
||||
icon = R.drawable.star_24px_filled,
|
||||
action = {
|
||||
viewModel.unpin()
|
||||
}
|
||||
@@ -394,7 +384,7 @@ fun AppItem(
|
||||
} else {
|
||||
DefaultToolbarAction(
|
||||
label = stringResource(R.string.menu_favorites_pin),
|
||||
icon = Icons.Rounded.StarOutline,
|
||||
icon = R.drawable.star_24px,
|
||||
action = {
|
||||
viewModel.pin()
|
||||
})
|
||||
@@ -406,7 +396,7 @@ fun AppItem(
|
||||
toolbarActions.add(
|
||||
DefaultToolbarAction(
|
||||
label = stringResource(R.string.menu_app_info),
|
||||
icon = Icons.Rounded.Info
|
||||
icon = R.drawable.info_24px,
|
||||
) {
|
||||
app.openAppDetails(context)
|
||||
})
|
||||
@@ -415,7 +405,7 @@ fun AppItem(
|
||||
toolbarActions.add(
|
||||
DefaultToolbarAction(
|
||||
label = stringResource(R.string.menu_launch),
|
||||
icon = Icons.AutoMirrored.Rounded.OpenInNew,
|
||||
icon = R.drawable.open_in_new_24px,
|
||||
action = {
|
||||
viewModel.launch(context)
|
||||
}
|
||||
@@ -427,7 +417,7 @@ fun AppItem(
|
||||
toolbarActions.add(
|
||||
DefaultToolbarAction(
|
||||
label = stringResource(R.string.menu_customize),
|
||||
icon = Icons.Rounded.Tune,
|
||||
icon = R.drawable.tune_24px,
|
||||
action = { sheetManager.showCustomizeSearchableModal(app) }
|
||||
))
|
||||
}
|
||||
@@ -437,7 +427,7 @@ fun AppItem(
|
||||
val shareAction = if (storeDetails == null) {
|
||||
DefaultToolbarAction(
|
||||
label = stringResource(R.string.menu_share),
|
||||
icon = Icons.Rounded.Share
|
||||
icon = R.drawable.share_24px,
|
||||
) {
|
||||
scope.launch {
|
||||
app.shareApkFile(context)
|
||||
@@ -446,14 +436,14 @@ fun AppItem(
|
||||
} else {
|
||||
SubmenuToolbarAction(
|
||||
label = stringResource(R.string.menu_share),
|
||||
icon = Icons.Rounded.Share,
|
||||
icon = R.drawable.share_24px,
|
||||
children = listOf(
|
||||
DefaultToolbarAction(
|
||||
label = stringResource(
|
||||
R.string.menu_share_store_link,
|
||||
storeDetails.label
|
||||
),
|
||||
icon = Icons.Rounded.Link,
|
||||
icon = R.drawable.link_24px,
|
||||
action = {
|
||||
val shareIntent = Intent(Intent.ACTION_SEND)
|
||||
shareIntent.putExtra(
|
||||
@@ -471,7 +461,7 @@ fun AppItem(
|
||||
),
|
||||
DefaultToolbarAction(
|
||||
label = stringResource(R.string.menu_share_apk_file),
|
||||
icon = Icons.Rounded.Android
|
||||
icon = R.drawable.apk_document_24px,
|
||||
) {
|
||||
scope.launch {
|
||||
app.shareApkFile(context)
|
||||
@@ -487,7 +477,7 @@ fun AppItem(
|
||||
toolbarActions.add(
|
||||
DefaultToolbarAction(
|
||||
label = stringResource(R.string.menu_uninstall),
|
||||
icon = Icons.Rounded.Delete,
|
||||
icon = R.drawable.delete_24px,
|
||||
) {
|
||||
app.uninstall(context)
|
||||
onBack()
|
||||
@@ -499,7 +489,7 @@ fun AppItem(
|
||||
leftActions = listOf(
|
||||
DefaultToolbarAction(
|
||||
label = stringResource(id = R.string.menu_back),
|
||||
icon = Icons.AutoMirrored.Rounded.ArrowBack
|
||||
icon = R.drawable.arrow_back_24px,
|
||||
) {
|
||||
onBack()
|
||||
}
|
||||
|
||||
@@ -9,12 +9,6 @@ import androidx.compose.foundation.layout.fillMaxWidth
|
||||
import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.foundation.layout.size
|
||||
import androidx.compose.foundation.lazy.LazyListScope
|
||||
import androidx.compose.material.icons.Icons
|
||||
import androidx.compose.material.icons.rounded.Lock
|
||||
import androidx.compose.material.icons.rounded.LockOpen
|
||||
import androidx.compose.material.icons.rounded.Person
|
||||
import androidx.compose.material.icons.rounded.Work
|
||||
import androidx.compose.material.icons.rounded.WorkOff
|
||||
import androidx.compose.material3.Button
|
||||
import androidx.compose.material3.ButtonDefaults
|
||||
import androidx.compose.material3.FilledTonalButton
|
||||
@@ -28,9 +22,9 @@ import androidx.compose.runtime.Composable
|
||||
import androidx.compose.ui.Alignment
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.graphics.Color
|
||||
import androidx.compose.ui.res.painterResource
|
||||
import androidx.compose.ui.res.stringResource
|
||||
import androidx.compose.ui.unit.dp
|
||||
import de.mm20.launcher2.icons.PrivateSpace
|
||||
import de.mm20.launcher2.profiles.Profile
|
||||
import de.mm20.launcher2.search.Application
|
||||
import de.mm20.launcher2.ui.R
|
||||
@@ -68,8 +62,9 @@ fun LazyListScope.AppResults(
|
||||
divider = {}
|
||||
) {
|
||||
for ((i, profile) in profiles.withIndex()) {
|
||||
val selected = selectedProfileIndex == profiles.indexOf(profile)
|
||||
LeadingIconTab(
|
||||
selected = selectedProfileIndex == profiles.indexOf(profile),
|
||||
selected = selected,
|
||||
text = {
|
||||
Text(
|
||||
when (profile.type) {
|
||||
@@ -82,17 +77,17 @@ fun LazyListScope.AppResults(
|
||||
icon = {
|
||||
when (profile.type) {
|
||||
Profile.Type.Personal -> Icon(
|
||||
Icons.Rounded.Person,
|
||||
painterResource(if (selected) R.drawable.person_24px_filled else R.drawable.person_24px),
|
||||
contentDescription = null
|
||||
)
|
||||
|
||||
Profile.Type.Work -> Icon(
|
||||
Icons.Rounded.Work,
|
||||
painterResource(if (selected) R.drawable.enterprise_24px_filled else R.drawable.enterprise_24px),
|
||||
contentDescription = null
|
||||
)
|
||||
|
||||
Profile.Type.Private -> Icon(
|
||||
Icons.Rounded.PrivateSpace,
|
||||
painterResource(if (selected) R.drawable.encrypted_24px_filled else R.drawable.encrypted_24px),
|
||||
contentDescription = null
|
||||
)
|
||||
}
|
||||
@@ -129,7 +124,7 @@ fun LazyListScope.AppResults(
|
||||
horizontalAlignment = Alignment.CenterHorizontally,
|
||||
) {
|
||||
Icon(
|
||||
if (profileType == Profile.Type.Work) Icons.Rounded.WorkOff else Icons.Rounded.Lock,
|
||||
painterResource(if (profileType == Profile.Type.Work) R.drawable.enterprise_off_48px else R.drawable.lock_48px),
|
||||
contentDescription = null,
|
||||
modifier = Modifier.size(48.dp),
|
||||
tint = MaterialTheme.colorScheme.secondary,
|
||||
@@ -155,7 +150,7 @@ fun LazyListScope.AppResults(
|
||||
contentPadding = ButtonDefaults.TextButtonWithIconContentPadding,
|
||||
) {
|
||||
Icon(
|
||||
if (profileType == Profile.Type.Work) Icons.Rounded.Work else Icons.Rounded.LockOpen,
|
||||
painterResource(if (profileType == Profile.Type.Work) R.drawable.enterprise_20px else R.drawable.lock_open_20px),
|
||||
contentDescription = null,
|
||||
modifier = Modifier
|
||||
.padding(end = ButtonDefaults.IconSpacing)
|
||||
@@ -184,7 +179,7 @@ fun LazyListScope.AppResults(
|
||||
contentPadding = ButtonDefaults.TextButtonWithIconContentPadding,
|
||||
) {
|
||||
Icon(
|
||||
if (profileType == Profile.Type.Work) Icons.Rounded.WorkOff else Icons.Rounded.Lock,
|
||||
painterResource(if (profileType == Profile.Type.Work) R.drawable.enterprise_off_20px else R.drawable.lock_20px),
|
||||
contentDescription = null,
|
||||
modifier = Modifier
|
||||
.padding(end = ButtonDefaults.IconSpacing)
|
||||
|
||||
@@ -18,19 +18,6 @@ import androidx.compose.foundation.layout.Row
|
||||
import androidx.compose.foundation.layout.fillMaxWidth
|
||||
import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.foundation.layout.size
|
||||
import androidx.compose.material.icons.Icons
|
||||
import androidx.compose.material.icons.automirrored.rounded.ArrowBack
|
||||
import androidx.compose.material.icons.rounded.CheckCircle
|
||||
import androidx.compose.material.icons.rounded.Circle
|
||||
import androidx.compose.material.icons.rounded.Notes
|
||||
import androidx.compose.material.icons.rounded.OpenInNew
|
||||
import androidx.compose.material.icons.rounded.People
|
||||
import androidx.compose.material.icons.rounded.Place
|
||||
import androidx.compose.material.icons.rounded.RadioButtonUnchecked
|
||||
import androidx.compose.material.icons.rounded.Schedule
|
||||
import androidx.compose.material.icons.rounded.Star
|
||||
import androidx.compose.material.icons.rounded.StarOutline
|
||||
import androidx.compose.material.icons.rounded.Tune
|
||||
import androidx.compose.material3.Icon
|
||||
import androidx.compose.material3.MaterialTheme
|
||||
import androidx.compose.material3.Text
|
||||
@@ -43,6 +30,7 @@ import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.graphics.Color
|
||||
import androidx.compose.ui.graphics.toArgb
|
||||
import androidx.compose.ui.platform.LocalContext
|
||||
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
|
||||
@@ -97,11 +85,11 @@ fun CalendarItem(
|
||||
verticalAlignment = Alignment.CenterVertically,
|
||||
) {
|
||||
Icon(
|
||||
when (calendar.isCompleted) {
|
||||
true -> Icons.Rounded.CheckCircle
|
||||
false -> Icons.Rounded.RadioButtonUnchecked
|
||||
null -> Icons.Rounded.Circle
|
||||
},
|
||||
painterResource(when (calendar.isCompleted) {
|
||||
true -> R.drawable.check_circle_24px_filled
|
||||
false -> R.drawable.radio_button_unchecked_24px
|
||||
null -> R.drawable.circle_24px_filled
|
||||
}),
|
||||
null,
|
||||
modifier = Modifier
|
||||
.padding(horizontal = 14.dp, vertical = 20.dp)
|
||||
@@ -152,7 +140,7 @@ fun CalendarItem(
|
||||
) {
|
||||
Icon(
|
||||
modifier = Modifier.padding(vertical = 8.dp, horizontal = 16.dp),
|
||||
imageVector = Icons.Rounded.Schedule,
|
||||
painter = painterResource(R.drawable.schedule_24px),
|
||||
contentDescription = null
|
||||
)
|
||||
Text(
|
||||
@@ -174,7 +162,7 @@ fun CalendarItem(
|
||||
) {
|
||||
Icon(
|
||||
modifier = Modifier.padding(vertical = 8.dp, horizontal = 16.dp),
|
||||
imageVector = Icons.Rounded.Notes,
|
||||
painter = painterResource(R.drawable.notes_24px),
|
||||
contentDescription = null
|
||||
)
|
||||
Text(
|
||||
@@ -194,7 +182,7 @@ fun CalendarItem(
|
||||
) {
|
||||
Icon(
|
||||
modifier = Modifier.padding(vertical = 8.dp, horizontal = 16.dp),
|
||||
imageVector = Icons.Rounded.People,
|
||||
painter = painterResource(R.drawable.group_24px),
|
||||
contentDescription = null
|
||||
)
|
||||
Text(
|
||||
@@ -217,7 +205,7 @@ fun CalendarItem(
|
||||
) {
|
||||
Icon(
|
||||
modifier = Modifier.padding(vertical = 8.dp, horizontal = 16.dp),
|
||||
imageVector = Icons.Rounded.Place,
|
||||
painter = painterResource(R.drawable.location_on_24px),
|
||||
contentDescription = null
|
||||
)
|
||||
Text(
|
||||
@@ -233,7 +221,7 @@ fun CalendarItem(
|
||||
val favAction = if (isPinned) {
|
||||
DefaultToolbarAction(
|
||||
label = stringResource(R.string.menu_favorites_unpin),
|
||||
icon = Icons.Rounded.Star,
|
||||
icon = R.drawable.star_24px_filled,
|
||||
action = {
|
||||
viewModel.unpin()
|
||||
}
|
||||
@@ -241,7 +229,7 @@ fun CalendarItem(
|
||||
} else {
|
||||
DefaultToolbarAction(
|
||||
label = stringResource(R.string.menu_favorites_pin),
|
||||
icon = Icons.Rounded.StarOutline,
|
||||
icon = R.drawable.star_24px,
|
||||
action = {
|
||||
viewModel.pin()
|
||||
})
|
||||
@@ -252,7 +240,7 @@ fun CalendarItem(
|
||||
toolbarActions.add(
|
||||
DefaultToolbarAction(
|
||||
label = stringResource(R.string.menu_calendar_open_externally),
|
||||
icon = Icons.Rounded.OpenInNew,
|
||||
icon = R.drawable.open_in_new_24px,
|
||||
action = {
|
||||
viewModel.launch(context)
|
||||
onBack()
|
||||
@@ -263,7 +251,7 @@ fun CalendarItem(
|
||||
val sheetManager = LocalBottomSheetManager.current
|
||||
toolbarActions.add(DefaultToolbarAction(
|
||||
label = stringResource(R.string.menu_customize),
|
||||
icon = Icons.Rounded.Tune,
|
||||
icon = R.drawable.tune_24px,
|
||||
action = { sheetManager.showCustomizeSearchableModal(calendar) }
|
||||
))
|
||||
|
||||
@@ -271,7 +259,7 @@ fun CalendarItem(
|
||||
leftActions = listOf(
|
||||
DefaultToolbarAction(
|
||||
label = stringResource(id = R.string.menu_back),
|
||||
icon = Icons.AutoMirrored.Rounded.ArrowBack
|
||||
icon = R.drawable.arrow_back_24px,
|
||||
) {
|
||||
onBack()
|
||||
}
|
||||
@@ -286,11 +274,11 @@ fun CalendarItem(
|
||||
.padding(16.dp)
|
||||
) {
|
||||
Icon(
|
||||
when (calendar.isCompleted) {
|
||||
true -> Icons.Rounded.CheckCircle
|
||||
false -> Icons.Rounded.RadioButtonUnchecked
|
||||
null -> Icons.Rounded.Circle
|
||||
},
|
||||
painterResource(when (calendar.isCompleted) {
|
||||
true -> R.drawable.check_circle_24px_filled
|
||||
false -> R.drawable.radio_button_unchecked_24px
|
||||
null -> R.drawable.circle_24px_filled
|
||||
}),
|
||||
null,
|
||||
modifier = Modifier
|
||||
.padding(end = 16.dp)
|
||||
|
||||
@@ -4,6 +4,7 @@ import android.content.Context
|
||||
import android.content.Intent
|
||||
import android.graphics.drawable.Drawable
|
||||
import android.net.Uri
|
||||
import androidx.annotation.DrawableRes
|
||||
import androidx.compose.animation.AnimatedContent
|
||||
import androidx.compose.animation.AnimatedVisibility
|
||||
import androidx.compose.animation.SharedTransitionLayout
|
||||
@@ -21,19 +22,6 @@ import androidx.compose.foundation.layout.height
|
||||
import androidx.compose.foundation.layout.offset
|
||||
import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.foundation.layout.size
|
||||
import androidx.compose.material.icons.Icons
|
||||
import androidx.compose.material.icons.automirrored.rounded.ArrowBack
|
||||
import androidx.compose.material.icons.automirrored.rounded.Message
|
||||
import androidx.compose.material.icons.automirrored.rounded.NavigateNext
|
||||
import androidx.compose.material.icons.automirrored.rounded.OpenInNew
|
||||
import androidx.compose.material.icons.rounded.Directions
|
||||
import androidx.compose.material.icons.rounded.Email
|
||||
import androidx.compose.material.icons.rounded.OpenInNew
|
||||
import androidx.compose.material.icons.rounded.Phone
|
||||
import androidx.compose.material.icons.rounded.Place
|
||||
import androidx.compose.material.icons.rounded.Star
|
||||
import androidx.compose.material.icons.rounded.StarOutline
|
||||
import androidx.compose.material.icons.rounded.Tune
|
||||
import androidx.compose.material3.Icon
|
||||
import androidx.compose.material3.IconButton
|
||||
import androidx.compose.material3.MaterialTheme
|
||||
@@ -55,6 +43,7 @@ import androidx.compose.ui.hapticfeedback.HapticFeedbackType
|
||||
import androidx.compose.ui.platform.LocalClipboardManager
|
||||
import androidx.compose.ui.platform.LocalContext
|
||||
import androidx.compose.ui.platform.LocalHapticFeedback
|
||||
import androidx.compose.ui.res.painterResource
|
||||
import androidx.compose.ui.res.pluralStringResource
|
||||
import androidx.compose.ui.res.stringResource
|
||||
import androidx.compose.ui.text.AnnotatedString
|
||||
@@ -148,7 +137,7 @@ fun ContactItem(
|
||||
var expandedSection by remember { mutableStateOf(-1) }
|
||||
if (contact.phoneNumbers.isNotEmpty()) {
|
||||
ContactInfo(
|
||||
icon = Icons.Rounded.Phone,
|
||||
icon = R.drawable.call_24px,
|
||||
label = pluralStringResource(
|
||||
R.plurals.contact_phone_numbers,
|
||||
contact.phoneNumbers.size,
|
||||
@@ -171,7 +160,7 @@ fun ContactItem(
|
||||
)
|
||||
}) {
|
||||
Icon(
|
||||
Icons.AutoMirrored.Rounded.Message,
|
||||
painterResource(R.drawable.sms_24px),
|
||||
null,
|
||||
tint = MaterialTheme.colorScheme.onSurfaceVariant,
|
||||
)
|
||||
@@ -196,7 +185,7 @@ fun ContactItem(
|
||||
}
|
||||
if (contact.emailAddresses.isNotEmpty()) {
|
||||
ContactInfo(
|
||||
icon = Icons.Rounded.Email,
|
||||
icon = R.drawable.mail_24px,
|
||||
label = pluralStringResource(
|
||||
R.plurals.contact_email_addresses,
|
||||
contact.emailAddresses.size,
|
||||
@@ -225,7 +214,7 @@ fun ContactItem(
|
||||
}
|
||||
if (contact.postalAddresses.isNotEmpty()) {
|
||||
ContactInfo(
|
||||
icon = Icons.Rounded.Place,
|
||||
icon = R.drawable.location_on_24px,
|
||||
label = pluralStringResource(
|
||||
R.plurals.contact_postal_addresses,
|
||||
contact.postalAddresses.size,
|
||||
@@ -246,7 +235,7 @@ fun ContactItem(
|
||||
)
|
||||
}) {
|
||||
Icon(
|
||||
Icons.Rounded.Directions,
|
||||
painterResource(R.drawable.directions_24px),
|
||||
null,
|
||||
tint = MaterialTheme.colorScheme.onSurfaceVariant,
|
||||
)
|
||||
@@ -301,7 +290,7 @@ fun ContactItem(
|
||||
if (itemsWithPermission.isEmpty()) continue
|
||||
|
||||
ContactInfo(
|
||||
icon = Icons.AutoMirrored.Rounded.OpenInNew,
|
||||
icon = R.drawable.open_in_new_24px,
|
||||
customIcon = appIcon,
|
||||
label = label,
|
||||
items = itemsWithPermission,
|
||||
@@ -336,7 +325,7 @@ fun ContactItem(
|
||||
val favAction = if (isPinned) {
|
||||
DefaultToolbarAction(
|
||||
label = stringResource(R.string.menu_favorites_unpin),
|
||||
icon = Icons.Rounded.Star,
|
||||
icon = R.drawable.star_24px_filled,
|
||||
action = {
|
||||
viewModel.unpin()
|
||||
}
|
||||
@@ -344,7 +333,7 @@ fun ContactItem(
|
||||
} else {
|
||||
DefaultToolbarAction(
|
||||
label = stringResource(R.string.menu_favorites_pin),
|
||||
icon = Icons.Rounded.StarOutline,
|
||||
icon = R.drawable.star_24px,
|
||||
action = {
|
||||
viewModel.pin()
|
||||
})
|
||||
@@ -355,7 +344,7 @@ fun ContactItem(
|
||||
toolbarActions.add(
|
||||
DefaultToolbarAction(
|
||||
label = stringResource(R.string.menu_contacts_open_externally),
|
||||
icon = Icons.Rounded.OpenInNew,
|
||||
icon = R.drawable.open_in_new_24px,
|
||||
action = {
|
||||
viewModel.launch(context)
|
||||
}
|
||||
@@ -365,7 +354,7 @@ fun ContactItem(
|
||||
val sheetManager = LocalBottomSheetManager.current
|
||||
toolbarActions.add(DefaultToolbarAction(
|
||||
label = stringResource(R.string.menu_customize),
|
||||
icon = Icons.Rounded.Tune,
|
||||
icon = R.drawable.tune_24px,
|
||||
action = { sheetManager.showCustomizeSearchableModal(contact) }
|
||||
))
|
||||
|
||||
@@ -374,7 +363,7 @@ fun ContactItem(
|
||||
leftActions = listOf(
|
||||
DefaultToolbarAction(
|
||||
label = stringResource(id = R.string.menu_back),
|
||||
icon = Icons.AutoMirrored.Rounded.ArrowBack
|
||||
icon = R.drawable.arrow_back_24px,
|
||||
) {
|
||||
onBack()
|
||||
}
|
||||
@@ -441,9 +430,9 @@ private fun <T> ContactInfo(
|
||||
items: List<T>,
|
||||
itemLabel: (T) -> String,
|
||||
itemSubLabel: (T) -> String? = { null },
|
||||
itemIcon: (T) -> ImageVector? = { null },
|
||||
itemIcon: (T) -> Int? = { null },
|
||||
secondaryAction: (@Composable (T) -> Unit)? = null,
|
||||
icon: ImageVector,
|
||||
@DrawableRes icon: Int,
|
||||
customIcon: Drawable? = null,
|
||||
copyText: ((T) -> String)? = null,
|
||||
expanded: Boolean,
|
||||
@@ -516,7 +505,7 @@ private fun <T> ContactInfo(
|
||||
)
|
||||
} else {
|
||||
Icon(
|
||||
itemIcon(item) ?: icon,
|
||||
painterResource(itemIcon(item) ?: icon),
|
||||
null,
|
||||
tint = MaterialTheme.colorScheme.onSurfaceVariant,
|
||||
modifier = Modifier.padding(horizontal = 4.dp),
|
||||
@@ -570,7 +559,7 @@ private fun <T> ContactInfo(
|
||||
)
|
||||
} else {
|
||||
Icon(
|
||||
icon,
|
||||
painterResource(icon),
|
||||
null,
|
||||
tint = MaterialTheme.colorScheme.onSurfaceVariant,
|
||||
modifier = Modifier.padding(horizontal = 4.dp)
|
||||
@@ -584,7 +573,7 @@ private fun <T> ContactInfo(
|
||||
.padding(horizontal = 16.dp),
|
||||
)
|
||||
Icon(
|
||||
Icons.AutoMirrored.Rounded.NavigateNext,
|
||||
painterResource(R.drawable.chevron_forward_24px),
|
||||
null,
|
||||
tint = MaterialTheme.colorScheme.onSurfaceVariant,
|
||||
)
|
||||
|
||||
@@ -6,9 +6,6 @@ import androidx.compose.foundation.layout.Column
|
||||
import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.foundation.lazy.LazyListScope
|
||||
import androidx.compose.foundation.rememberScrollState
|
||||
import androidx.compose.material.icons.Icons
|
||||
import androidx.compose.material.icons.rounded.Star
|
||||
import androidx.compose.material.icons.rounded.Tag
|
||||
import androidx.compose.material3.LocalContentColor
|
||||
import androidx.compose.material3.MaterialTheme
|
||||
import androidx.compose.runtime.CompositionLocalProvider
|
||||
@@ -62,7 +59,7 @@ fun LazyListScope.SearchFavorites(
|
||||
text = stringResource(
|
||||
if (selectedTag == null) R.string.favorites_empty else R.string.favorites_empty_tag
|
||||
),
|
||||
icon = if (selectedTag == null) Icons.Rounded.Star else Icons.Rounded.Tag,
|
||||
icon = if (selectedTag == null) R.drawable.star_24px else R.drawable.tag_24px,
|
||||
)
|
||||
}
|
||||
if (pinnedTags.isNotEmpty() || editButton) {
|
||||
|
||||
@@ -12,21 +12,8 @@ import androidx.compose.foundation.layout.Row
|
||||
import androidx.compose.foundation.layout.fillMaxWidth
|
||||
import androidx.compose.foundation.layout.offset
|
||||
import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.material.icons.Icons
|
||||
import androidx.compose.material.icons.rounded.ArrowBack
|
||||
import androidx.compose.material.icons.rounded.Delete
|
||||
import androidx.compose.material.icons.rounded.Edit
|
||||
import androidx.compose.material.icons.rounded.OpenInNew
|
||||
import androidx.compose.material.icons.rounded.Share
|
||||
import androidx.compose.material.icons.rounded.Star
|
||||
import androidx.compose.material.icons.rounded.StarOutline
|
||||
import androidx.compose.material.icons.rounded.Tune
|
||||
import androidx.compose.material.icons.rounded.Visibility
|
||||
import androidx.compose.material.icons.rounded.VisibilityOff
|
||||
import androidx.compose.material3.AlertDialog
|
||||
import androidx.compose.material3.MaterialTheme
|
||||
import androidx.compose.material3.SnackbarDuration
|
||||
import androidx.compose.material3.SnackbarResult
|
||||
import androidx.compose.material3.Text
|
||||
import androidx.compose.material3.TextButton
|
||||
import androidx.compose.runtime.Composable
|
||||
@@ -38,17 +25,13 @@ import androidx.compose.runtime.remember
|
||||
import androidx.compose.runtime.setValue
|
||||
import androidx.compose.ui.Alignment
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.geometry.Rect
|
||||
import androidx.compose.ui.graphics.TransformOrigin
|
||||
import androidx.compose.ui.platform.LocalContext
|
||||
import androidx.compose.ui.res.stringResource
|
||||
import androidx.compose.ui.text.style.TextOverflow
|
||||
import androidx.compose.ui.unit.IntRect
|
||||
import androidx.compose.ui.unit.dp
|
||||
import androidx.compose.ui.unit.roundToIntRect
|
||||
import androidx.lifecycle.compose.LocalLifecycleOwner
|
||||
import androidx.lifecycle.compose.collectAsStateWithLifecycle
|
||||
import androidx.lifecycle.lifecycleScope
|
||||
import de.mm20.launcher2.search.File
|
||||
import de.mm20.launcher2.search.FileMetaType
|
||||
import de.mm20.launcher2.ui.R
|
||||
@@ -62,9 +45,7 @@ import de.mm20.launcher2.ui.launcher.search.listItemViewModel
|
||||
import de.mm20.launcher2.ui.launcher.sheets.LocalBottomSheetManager
|
||||
import de.mm20.launcher2.ui.locals.LocalFavoritesEnabled
|
||||
import de.mm20.launcher2.ui.locals.LocalGridSettings
|
||||
import de.mm20.launcher2.ui.locals.LocalSnackbarHostState
|
||||
import de.mm20.launcher2.ui.modifier.scale
|
||||
import kotlinx.coroutines.launch
|
||||
import java.text.DecimalFormat
|
||||
|
||||
@Composable
|
||||
@@ -174,7 +155,7 @@ fun FileItem(
|
||||
val favAction = if (isPinned) {
|
||||
DefaultToolbarAction(
|
||||
label = stringResource(R.string.menu_favorites_unpin),
|
||||
icon = Icons.Rounded.Star,
|
||||
icon = R.drawable.star_24px_filled,
|
||||
action = {
|
||||
viewModel.unpin()
|
||||
}
|
||||
@@ -182,7 +163,7 @@ fun FileItem(
|
||||
} else {
|
||||
DefaultToolbarAction(
|
||||
label = stringResource(R.string.menu_favorites_pin),
|
||||
icon = Icons.Rounded.StarOutline,
|
||||
icon = R.drawable.star_24px,
|
||||
action = {
|
||||
viewModel.pin()
|
||||
})
|
||||
@@ -193,7 +174,7 @@ fun FileItem(
|
||||
toolbarActions.add(
|
||||
DefaultToolbarAction(
|
||||
label = stringResource(R.string.menu_open_file),
|
||||
icon = Icons.Rounded.OpenInNew,
|
||||
icon = R.drawable.open_in_new_24px,
|
||||
action = {
|
||||
viewModel.launch(context)
|
||||
}
|
||||
@@ -201,24 +182,26 @@ fun FileItem(
|
||||
)
|
||||
|
||||
if (file.canShare) {
|
||||
toolbarActions.add(DefaultToolbarAction(
|
||||
label = stringResource(R.string.menu_share),
|
||||
icon = Icons.Rounded.Share,
|
||||
action = {
|
||||
file.share(context)
|
||||
}
|
||||
))
|
||||
toolbarActions.add(
|
||||
DefaultToolbarAction(
|
||||
label = stringResource(R.string.menu_share),
|
||||
icon = R.drawable.share_24px,
|
||||
action = {
|
||||
file.share(context)
|
||||
}
|
||||
))
|
||||
}
|
||||
|
||||
if (file.isDeletable) {
|
||||
var showConfirmDialog by remember { mutableStateOf(false) }
|
||||
toolbarActions.add(DefaultToolbarAction(
|
||||
label = stringResource(R.string.menu_delete),
|
||||
icon = Icons.Rounded.Delete,
|
||||
action = {
|
||||
showConfirmDialog = true
|
||||
}
|
||||
))
|
||||
toolbarActions.add(
|
||||
DefaultToolbarAction(
|
||||
label = stringResource(R.string.menu_delete),
|
||||
icon = R.drawable.delete_24px,
|
||||
action = {
|
||||
showConfirmDialog = true
|
||||
}
|
||||
))
|
||||
if (showConfirmDialog) {
|
||||
AlertDialog(
|
||||
onDismissRequest = { showConfirmDialog = false },
|
||||
@@ -251,17 +234,18 @@ fun FileItem(
|
||||
}
|
||||
|
||||
val sheetManager = LocalBottomSheetManager.current
|
||||
toolbarActions.add(DefaultToolbarAction(
|
||||
label = stringResource(R.string.menu_customize),
|
||||
icon = Icons.Rounded.Tune,
|
||||
action = { sheetManager.showCustomizeSearchableModal(file) }
|
||||
))
|
||||
toolbarActions.add(
|
||||
DefaultToolbarAction(
|
||||
label = stringResource(R.string.menu_customize),
|
||||
icon = R.drawable.tune_24px,
|
||||
action = { sheetManager.showCustomizeSearchableModal(file) }
|
||||
))
|
||||
|
||||
Toolbar(
|
||||
leftActions = listOf(
|
||||
DefaultToolbarAction(
|
||||
label = stringResource(id = R.string.menu_back),
|
||||
icon = Icons.Rounded.ArrowBack
|
||||
icon = R.drawable.arrow_back_24px,
|
||||
) {
|
||||
onBack()
|
||||
}
|
||||
|
||||
@@ -21,6 +21,7 @@ import androidx.compose.runtime.Composable
|
||||
import androidx.compose.ui.Alignment
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.platform.LocalContext
|
||||
import androidx.compose.ui.res.painterResource
|
||||
import androidx.compose.ui.unit.dp
|
||||
import de.mm20.launcher2.preferences.KeyboardFilterBarItem
|
||||
import de.mm20.launcher2.search.SearchFilters
|
||||
@@ -67,7 +68,7 @@ fun KeyboardFilterBar(
|
||||
},
|
||||
leadingIcon = {
|
||||
Icon(
|
||||
imageVector = item.icon,
|
||||
painter = painterResource(item.iconMedium),
|
||||
contentDescription = null,
|
||||
modifier = Modifier.size(FilterChipDefaults.IconSize)
|
||||
)
|
||||
|
||||
@@ -1,35 +1,38 @@
|
||||
package de.mm20.launcher2.ui.launcher.search.filters
|
||||
|
||||
import android.content.Context
|
||||
import androidx.compose.material.icons.Icons
|
||||
import androidx.compose.material.icons.rounded.AppShortcut
|
||||
import androidx.compose.material.icons.rounded.Apps
|
||||
import androidx.compose.material.icons.rounded.Description
|
||||
import androidx.compose.material.icons.rounded.Handyman
|
||||
import androidx.compose.material.icons.rounded.Language
|
||||
import androidx.compose.material.icons.rounded.Person
|
||||
import androidx.compose.material.icons.rounded.Place
|
||||
import androidx.compose.material.icons.rounded.Public
|
||||
import androidx.compose.material.icons.rounded.Today
|
||||
import androidx.compose.material.icons.rounded.VisibilityOff
|
||||
import de.mm20.launcher2.preferences.KeyboardFilterBarItem
|
||||
import de.mm20.launcher2.search.SearchFilters
|
||||
import de.mm20.launcher2.ui.R
|
||||
import de.mm20.launcher2.icons.Wikipedia
|
||||
|
||||
val KeyboardFilterBarItem.icon
|
||||
val KeyboardFilterBarItem.iconMedium
|
||||
get() = when (this) {
|
||||
KeyboardFilterBarItem.Apps -> Icons.Rounded.Apps
|
||||
KeyboardFilterBarItem.Events -> Icons.Rounded.Today
|
||||
KeyboardFilterBarItem.Contacts -> Icons.Rounded.Person
|
||||
KeyboardFilterBarItem.Places -> Icons.Rounded.Place
|
||||
KeyboardFilterBarItem.Files -> Icons.Rounded.Description
|
||||
KeyboardFilterBarItem.Tools -> Icons.Rounded.Handyman
|
||||
KeyboardFilterBarItem.Articles -> Icons.Rounded.Wikipedia
|
||||
KeyboardFilterBarItem.Websites -> Icons.Rounded.Public
|
||||
KeyboardFilterBarItem.Shortcuts -> Icons.Rounded.AppShortcut
|
||||
KeyboardFilterBarItem.HiddenResults -> Icons.Rounded.VisibilityOff
|
||||
KeyboardFilterBarItem.OnlineResults -> Icons.Rounded.Language
|
||||
KeyboardFilterBarItem.Apps -> R.drawable.apps_24px
|
||||
KeyboardFilterBarItem.Events -> R.drawable.today_24px
|
||||
KeyboardFilterBarItem.Contacts -> R.drawable.person_24px
|
||||
KeyboardFilterBarItem.Places -> R.drawable.location_on_24px
|
||||
KeyboardFilterBarItem.Files -> R.drawable.description_24px
|
||||
KeyboardFilterBarItem.Tools -> R.drawable.handyman_24px
|
||||
KeyboardFilterBarItem.Articles -> R.drawable.wikipedia
|
||||
KeyboardFilterBarItem.Websites -> R.drawable.public_24px
|
||||
KeyboardFilterBarItem.Shortcuts -> R.drawable.mobile_arrow_up_right_24px
|
||||
KeyboardFilterBarItem.HiddenResults -> R.drawable.visibility_off_24px
|
||||
KeyboardFilterBarItem.OnlineResults -> R.drawable.language_24px
|
||||
}
|
||||
|
||||
val KeyboardFilterBarItem.iconSmall
|
||||
get() = when (this) {
|
||||
KeyboardFilterBarItem.Apps -> R.drawable.apps_20px
|
||||
KeyboardFilterBarItem.Events -> R.drawable.today_20px
|
||||
KeyboardFilterBarItem.Contacts -> R.drawable.person_20px
|
||||
KeyboardFilterBarItem.Places -> R.drawable.location_on_20px
|
||||
KeyboardFilterBarItem.Files -> R.drawable.description_20px
|
||||
KeyboardFilterBarItem.Tools -> R.drawable.handyman_20px
|
||||
KeyboardFilterBarItem.Articles -> R.drawable.wikipedia
|
||||
KeyboardFilterBarItem.Websites -> R.drawable.public_20px
|
||||
KeyboardFilterBarItem.Shortcuts -> R.drawable.mobile_arrow_up_right_20px
|
||||
KeyboardFilterBarItem.HiddenResults -> R.drawable.visibility_off_20px
|
||||
KeyboardFilterBarItem.OnlineResults -> R.drawable.language_20px
|
||||
}
|
||||
|
||||
fun KeyboardFilterBarItem.getLabel(context: Context): String {
|
||||
|
||||
@@ -6,17 +6,6 @@ import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.foundation.layout.size
|
||||
import androidx.compose.foundation.rememberScrollState
|
||||
import androidx.compose.foundation.verticalScroll
|
||||
import androidx.compose.material.icons.Icons
|
||||
import androidx.compose.material.icons.rounded.AppShortcut
|
||||
import androidx.compose.material.icons.rounded.Apps
|
||||
import androidx.compose.material.icons.rounded.Description
|
||||
import androidx.compose.material.icons.rounded.Handyman
|
||||
import androidx.compose.material.icons.rounded.Language
|
||||
import androidx.compose.material.icons.rounded.Person
|
||||
import androidx.compose.material.icons.rounded.Place
|
||||
import androidx.compose.material.icons.rounded.Public
|
||||
import androidx.compose.material.icons.rounded.Today
|
||||
import androidx.compose.material.icons.rounded.VisibilityOff
|
||||
import androidx.compose.material3.FilterChip
|
||||
import androidx.compose.material3.FilterChipDefaults
|
||||
import androidx.compose.material3.HorizontalDivider
|
||||
@@ -24,11 +13,11 @@ import androidx.compose.material3.Icon
|
||||
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.unit.dp
|
||||
import de.mm20.launcher2.search.SearchFilters
|
||||
import de.mm20.launcher2.ui.R
|
||||
import de.mm20.launcher2.icons.Wikipedia
|
||||
|
||||
@Composable
|
||||
fun SearchFilters(
|
||||
@@ -50,7 +39,7 @@ fun SearchFilters(
|
||||
},
|
||||
leadingIcon = {
|
||||
Icon(
|
||||
imageVector = Icons.Rounded.Language,
|
||||
painter = painterResource(R.drawable.language_20px),
|
||||
contentDescription = null,
|
||||
modifier = Modifier.size(FilterChipDefaults.IconSize)
|
||||
)
|
||||
@@ -71,7 +60,7 @@ fun SearchFilters(
|
||||
},
|
||||
leadingIcon = {
|
||||
Icon(
|
||||
imageVector = Icons.Rounded.Apps,
|
||||
painter = painterResource(R.drawable.apps_20px),
|
||||
contentDescription = null,
|
||||
modifier = Modifier.size(FilterChipDefaults.IconSize)
|
||||
)
|
||||
@@ -90,7 +79,7 @@ fun SearchFilters(
|
||||
},
|
||||
leadingIcon = {
|
||||
Icon(
|
||||
imageVector = Icons.Rounded.Description,
|
||||
painter = painterResource(R.drawable.description_20px),
|
||||
contentDescription = null,
|
||||
modifier = Modifier.size(FilterChipDefaults.IconSize)
|
||||
)
|
||||
@@ -109,7 +98,7 @@ fun SearchFilters(
|
||||
},
|
||||
leadingIcon = {
|
||||
Icon(
|
||||
imageVector = Icons.Rounded.Person,
|
||||
painter = painterResource(R.drawable.person_20px),
|
||||
contentDescription = null,
|
||||
modifier = Modifier.size(FilterChipDefaults.IconSize)
|
||||
)
|
||||
@@ -128,7 +117,7 @@ fun SearchFilters(
|
||||
},
|
||||
leadingIcon = {
|
||||
Icon(
|
||||
imageVector = Icons.Rounded.Today,
|
||||
painter = painterResource(R.drawable.today_20px),
|
||||
contentDescription = null,
|
||||
modifier = Modifier.size(FilterChipDefaults.IconSize)
|
||||
)
|
||||
@@ -147,7 +136,7 @@ fun SearchFilters(
|
||||
},
|
||||
leadingIcon = {
|
||||
Icon(
|
||||
imageVector = Icons.Rounded.AppShortcut,
|
||||
painter = painterResource(R.drawable.mobile_arrow_up_right_20px),
|
||||
contentDescription = null,
|
||||
modifier = Modifier.size(FilterChipDefaults.IconSize)
|
||||
)
|
||||
@@ -166,7 +155,7 @@ fun SearchFilters(
|
||||
},
|
||||
leadingIcon = {
|
||||
Icon(
|
||||
imageVector = Icons.Rounded.Wikipedia,
|
||||
painter = painterResource(R.drawable.wikipedia),
|
||||
contentDescription = null,
|
||||
modifier = Modifier.size(FilterChipDefaults.IconSize)
|
||||
)
|
||||
@@ -185,7 +174,7 @@ fun SearchFilters(
|
||||
},
|
||||
leadingIcon = {
|
||||
Icon(
|
||||
imageVector = Icons.Rounded.Public,
|
||||
painter = painterResource(R.drawable.public_20px),
|
||||
contentDescription = null,
|
||||
modifier = Modifier.size(FilterChipDefaults.IconSize)
|
||||
)
|
||||
@@ -204,7 +193,7 @@ fun SearchFilters(
|
||||
},
|
||||
leadingIcon = {
|
||||
Icon(
|
||||
imageVector = Icons.Rounded.Place,
|
||||
painter = painterResource(R.drawable.location_on_20px),
|
||||
contentDescription = null,
|
||||
modifier = Modifier.size(FilterChipDefaults.IconSize)
|
||||
)
|
||||
@@ -222,7 +211,7 @@ fun SearchFilters(
|
||||
},
|
||||
leadingIcon = {
|
||||
Icon(
|
||||
imageVector = Icons.Rounded.Handyman,
|
||||
painter = painterResource(R.drawable.handyman_20px),
|
||||
contentDescription = null,
|
||||
modifier = Modifier.size(FilterChipDefaults.IconSize)
|
||||
)
|
||||
@@ -238,7 +227,7 @@ fun SearchFilters(
|
||||
},
|
||||
leadingIcon = {
|
||||
Icon(
|
||||
imageVector = Icons.Rounded.VisibilityOff,
|
||||
painter = painterResource(R.drawable.visibility_off_20px),
|
||||
contentDescription = null,
|
||||
modifier = Modifier.size(FilterChipDefaults.IconSize)
|
||||
)
|
||||
|
||||
@@ -44,30 +44,6 @@ import androidx.compose.foundation.lazy.itemsIndexed
|
||||
import androidx.compose.foundation.lazy.rememberLazyListState
|
||||
import androidx.compose.foundation.rememberScrollState
|
||||
import androidx.compose.foundation.shape.CircleShape
|
||||
import androidx.compose.material.icons.Icons
|
||||
import androidx.compose.material.icons.automirrored.rounded.ArrowBack
|
||||
import androidx.compose.material.icons.automirrored.rounded.NavigateNext
|
||||
import androidx.compose.material.icons.automirrored.rounded.OpenInNew
|
||||
import androidx.compose.material.icons.outlined.CreditCardOff
|
||||
import androidx.compose.material.icons.outlined.CreditScore
|
||||
import androidx.compose.material.icons.outlined.Toll
|
||||
import androidx.compose.material.icons.rounded.AirplanemodeActive
|
||||
import androidx.compose.material.icons.rounded.BugReport
|
||||
import androidx.compose.material.icons.rounded.Commute
|
||||
import androidx.compose.material.icons.rounded.Directions
|
||||
import androidx.compose.material.icons.rounded.DirectionsBoat
|
||||
import androidx.compose.material.icons.rounded.DirectionsBus
|
||||
import androidx.compose.material.icons.rounded.DirectionsRailway
|
||||
import androidx.compose.material.icons.rounded.DirectionsTransit
|
||||
import androidx.compose.material.icons.rounded.Language
|
||||
import androidx.compose.material.icons.rounded.Navigation
|
||||
import androidx.compose.material.icons.rounded.Phone
|
||||
import androidx.compose.material.icons.rounded.Star
|
||||
import androidx.compose.material.icons.rounded.StarOutline
|
||||
import androidx.compose.material.icons.rounded.Subway
|
||||
import androidx.compose.material.icons.rounded.Train
|
||||
import androidx.compose.material.icons.rounded.Tram
|
||||
import androidx.compose.material.icons.rounded.Tune
|
||||
import androidx.compose.material3.AssistChip
|
||||
import androidx.compose.material3.AssistChipDefaults
|
||||
import androidx.compose.material3.FilterChipDefaults
|
||||
@@ -95,6 +71,7 @@ import androidx.compose.ui.graphics.TransformOrigin
|
||||
import androidx.compose.ui.graphics.graphicsLayer
|
||||
import androidx.compose.ui.graphics.toArgb
|
||||
import androidx.compose.ui.platform.LocalContext
|
||||
import androidx.compose.ui.res.painterResource
|
||||
import androidx.compose.ui.res.stringResource
|
||||
import androidx.compose.ui.text.TextStyle
|
||||
import androidx.compose.ui.text.style.TextAlign
|
||||
@@ -112,9 +89,6 @@ import androidx.core.net.toUri
|
||||
import androidx.lifecycle.compose.collectAsStateWithLifecycle
|
||||
import blend.Blend.harmonize
|
||||
import coil.compose.AsyncImage
|
||||
import de.mm20.launcher2.i18n.R
|
||||
import de.mm20.launcher2.icons.CableCar
|
||||
import de.mm20.launcher2.icons.TollOff
|
||||
import de.mm20.launcher2.ktx.tryStartActivity
|
||||
import de.mm20.launcher2.search.Location
|
||||
import de.mm20.launcher2.search.isOpen
|
||||
@@ -126,6 +100,7 @@ import de.mm20.launcher2.search.location.OpeningHours
|
||||
import de.mm20.launcher2.search.location.OpeningSchedule
|
||||
import de.mm20.launcher2.search.location.PaymentMethod
|
||||
import de.mm20.launcher2.search.location.isNotEmpty
|
||||
import de.mm20.launcher2.ui.R
|
||||
import de.mm20.launcher2.ui.base.LocalTime
|
||||
import de.mm20.launcher2.ui.component.DefaultToolbarAction
|
||||
import de.mm20.launcher2.ui.component.MarqueeText
|
||||
@@ -368,10 +343,12 @@ fun LocationItem(
|
||||
)
|
||||
for ((method, available) in acceptedPaymentMethods) {
|
||||
Icon(
|
||||
when (method) {
|
||||
PaymentMethod.Cash -> if (available) Icons.Outlined.Toll else Icons.Outlined.TollOff
|
||||
PaymentMethod.Card -> if (available) Icons.Outlined.CreditScore else Icons.Outlined.CreditCardOff
|
||||
},
|
||||
painterResource(
|
||||
when (method) {
|
||||
PaymentMethod.Cash -> if (available) R.drawable.toll_20px else R.drawable.toll_off_20px
|
||||
PaymentMethod.Card -> if (available) R.drawable.credit_card_20px else R.drawable.credit_card_off_20px
|
||||
}
|
||||
),
|
||||
contentDescription = null,
|
||||
tint = MaterialTheme.colorScheme.secondary,
|
||||
modifier = Modifier
|
||||
@@ -493,7 +470,7 @@ fun LocationItem(
|
||||
label = { Text(stringResource(R.string.menu_navigation)) },
|
||||
leadingIcon = {
|
||||
Icon(
|
||||
Icons.Rounded.Directions, null,
|
||||
painterResource(R.drawable.directions_20px), null,
|
||||
modifier = Modifier.size(AssistChipDefaults.IconSize)
|
||||
)
|
||||
}
|
||||
@@ -513,7 +490,7 @@ fun LocationItem(
|
||||
label = { Text(stringResource(R.string.menu_dial)) },
|
||||
leadingIcon = {
|
||||
Icon(
|
||||
Icons.Rounded.Phone, null,
|
||||
painterResource(R.drawable.call_20px), null,
|
||||
modifier = Modifier.size(AssistChipDefaults.IconSize)
|
||||
)
|
||||
}
|
||||
@@ -533,7 +510,7 @@ fun LocationItem(
|
||||
label = { Text(stringResource(R.string.menu_website)) },
|
||||
leadingIcon = {
|
||||
Icon(
|
||||
Icons.Rounded.Language, null,
|
||||
painterResource(R.drawable.language_20px), null,
|
||||
modifier = Modifier.size(AssistChipDefaults.IconSize)
|
||||
)
|
||||
}
|
||||
@@ -549,7 +526,7 @@ fun LocationItem(
|
||||
val favAction = if (isPinned) {
|
||||
DefaultToolbarAction(
|
||||
label = stringResource(R.string.menu_favorites_unpin),
|
||||
icon = Icons.Rounded.Star,
|
||||
icon = R.drawable.star_24px_filled,
|
||||
action = {
|
||||
viewModel.unpin()
|
||||
}
|
||||
@@ -557,7 +534,7 @@ fun LocationItem(
|
||||
} else {
|
||||
DefaultToolbarAction(
|
||||
label = stringResource(R.string.menu_favorites_pin),
|
||||
icon = Icons.Rounded.StarOutline,
|
||||
icon = R.drawable.star_24px,
|
||||
action = {
|
||||
viewModel.pin()
|
||||
})
|
||||
@@ -567,7 +544,7 @@ fun LocationItem(
|
||||
|
||||
toolbarActions += DefaultToolbarAction(
|
||||
label = stringResource(id = R.string.menu_map),
|
||||
icon = Icons.AutoMirrored.Rounded.OpenInNew,
|
||||
icon = R.drawable.open_in_new_24px,
|
||||
) {
|
||||
viewModel.launch(context)
|
||||
}
|
||||
@@ -577,14 +554,14 @@ fun LocationItem(
|
||||
toolbarActions.add(
|
||||
DefaultToolbarAction(
|
||||
label = stringResource(R.string.menu_customize),
|
||||
icon = Icons.Rounded.Tune,
|
||||
icon = R.drawable.tune_24px,
|
||||
action = { sheetManager.showCustomizeSearchableModal(location) }
|
||||
))
|
||||
|
||||
if (location.fixMeUrl != null) {
|
||||
toolbarActions += DefaultToolbarAction(
|
||||
label = stringResource(id = R.string.menu_bugreport),
|
||||
icon = Icons.Rounded.BugReport,
|
||||
icon = R.drawable.bug_report_24px,
|
||||
) {
|
||||
context.tryStartActivity(
|
||||
Intent(
|
||||
@@ -599,7 +576,7 @@ fun LocationItem(
|
||||
leftActions = listOf(
|
||||
DefaultToolbarAction(
|
||||
label = stringResource(id = R.string.menu_back),
|
||||
icon = Icons.AutoMirrored.Rounded.ArrowBack
|
||||
icon = R.drawable.arrow_back_24px,
|
||||
) {
|
||||
onBack()
|
||||
}),
|
||||
@@ -667,7 +644,7 @@ private fun Departures(
|
||||
style = MaterialTheme.typography.labelSmall,
|
||||
modifier = Modifier.padding(end = 12.dp)
|
||||
)
|
||||
Icon(Icons.AutoMirrored.Rounded.NavigateNext, null)
|
||||
Icon(painterResource(R.drawable.chevron_forward_24px), null)
|
||||
}
|
||||
} else {
|
||||
val (lines, groupedDepartures) = remember(departures) {
|
||||
@@ -894,7 +871,7 @@ private fun OpeningSchedule(
|
||||
modifier = Modifier.weight(1f)
|
||||
)
|
||||
|
||||
Icon(Icons.AutoMirrored.Rounded.NavigateNext, null)
|
||||
Icon(painterResource(R.drawable.chevron_forward_24px), null)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -967,7 +944,7 @@ private fun Compass(
|
||||
) {
|
||||
if (targetHeading != null) {
|
||||
Icon(
|
||||
Icons.Rounded.Navigation,
|
||||
painterResource(R.drawable.assistant_navigation_24px),
|
||||
null,
|
||||
modifier = Modifier
|
||||
.size(20f / 48f * size)
|
||||
@@ -1078,18 +1055,21 @@ fun LineTypeIcon(
|
||||
tint: Color,
|
||||
modifier: Modifier = Modifier
|
||||
) = Icon(
|
||||
imageVector = when (lineType) {
|
||||
LineType.Bus -> Icons.Rounded.DirectionsBus
|
||||
LineType.Tram -> Icons.Rounded.Tram
|
||||
LineType.Subway -> Icons.Rounded.Subway
|
||||
LineType.Monorail -> Icons.Rounded.DirectionsTransit
|
||||
LineType.CommuterTrain -> Icons.Rounded.DirectionsRailway
|
||||
LineType.Train, LineType.RegionalTrain, LineType.HighSpeedTrain -> Icons.Rounded.Train
|
||||
LineType.Boat -> Icons.Rounded.DirectionsBoat
|
||||
LineType.CableCar -> Icons.Rounded.CableCar
|
||||
LineType.Airplane -> Icons.Rounded.AirplanemodeActive
|
||||
null -> Icons.Rounded.Commute
|
||||
},
|
||||
painter = painterResource(
|
||||
when (lineType) {
|
||||
LineType.Bus -> R.drawable.directions_bus_20px
|
||||
LineType.Tram -> R.drawable.tram_20px
|
||||
LineType.Subway -> R.drawable.subway_20px
|
||||
LineType.Monorail -> R.drawable.monorail_20px
|
||||
LineType.CommuterTrain -> R.drawable.directions_railway_20px
|
||||
LineType.Train, LineType.RegionalTrain, LineType.HighSpeedTrain -> R.drawable.train_20px
|
||||
LineType.Boat -> R.drawable.directions_boat_20px
|
||||
LineType.CableCar -> R.drawable.cable_car_20px
|
||||
LineType.AerialTramway -> R.drawable.gondola_lift_20px
|
||||
LineType.Airplane -> R.drawable.flight_20px
|
||||
null -> R.drawable.commute_20px
|
||||
}
|
||||
),
|
||||
contentDescription = lineType?.name, // TODO localize (maybe) with ?.let{ stringResource("departure_line_type_$it") }
|
||||
modifier = modifier,
|
||||
tint = tint
|
||||
@@ -1131,7 +1111,7 @@ fun LineFilterChip(
|
||||
tint = color.atTone(if (dark) 20 else 100),
|
||||
modifier = Modifier
|
||||
.fillMaxSize()
|
||||
.padding(4.dp)
|
||||
.padding(2.dp)
|
||||
)
|
||||
}
|
||||
},
|
||||
|
||||
@@ -29,9 +29,6 @@ import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.foundation.layout.size
|
||||
import androidx.compose.foundation.layout.width
|
||||
import androidx.compose.foundation.shape.CircleShape
|
||||
import androidx.compose.material.icons.Icons
|
||||
import androidx.compose.material.icons.rounded.Navigation
|
||||
import androidx.compose.material.icons.rounded.Place
|
||||
import androidx.compose.material3.Icon
|
||||
import androidx.compose.material3.MaterialTheme
|
||||
import androidx.compose.material3.Text
|
||||
@@ -53,6 +50,7 @@ import androidx.compose.ui.graphics.FilterQuality
|
||||
import androidx.compose.ui.layout.onSizeChanged
|
||||
import androidx.compose.ui.platform.LocalContext
|
||||
import androidx.compose.ui.platform.LocalLayoutDirection
|
||||
import androidx.compose.ui.res.painterResource
|
||||
import androidx.compose.ui.tooling.preview.Preview
|
||||
import androidx.compose.ui.unit.IntOffset
|
||||
import androidx.compose.ui.unit.IntSize
|
||||
@@ -76,6 +74,7 @@ import de.mm20.launcher2.search.location.LineType
|
||||
import de.mm20.launcher2.search.location.LocationIcon
|
||||
import de.mm20.launcher2.search.location.OpeningSchedule
|
||||
import de.mm20.launcher2.search.location.PaymentMethod
|
||||
import de.mm20.launcher2.ui.R
|
||||
import de.mm20.launcher2.ui.ktx.DegreesConverter
|
||||
import de.mm20.launcher2.ui.ktx.contrast
|
||||
import de.mm20.launcher2.ui.ktx.hue
|
||||
@@ -219,7 +218,7 @@ fun MapTiles(
|
||||
)
|
||||
|
||||
Icon(
|
||||
imageVector = Icons.Rounded.Place,
|
||||
painterResource(R.drawable.location_on_24px_filled),
|
||||
contentDescription = null,
|
||||
tint = MaterialTheme.colorScheme.tertiary,
|
||||
modifier = Modifier
|
||||
@@ -238,47 +237,46 @@ fun MapTiles(
|
||||
zoom
|
||||
).let {
|
||||
Offset(
|
||||
(it.x - start.x) * tileSize.value - 8f,
|
||||
(it.y - start.y) * tileSize.value - 8f
|
||||
(it.x - start.x) * tileSize.value - 10f,
|
||||
(it.y - start.y) * tileSize.value - 10f
|
||||
)
|
||||
},
|
||||
animationSpec = tween()
|
||||
)
|
||||
|
||||
if (userLocation.heading != null) {
|
||||
val headingAnim by animateValueAsState(
|
||||
targetValue = userLocation.heading,
|
||||
typeConverter = Float.DegreesConverter
|
||||
)
|
||||
|
||||
Icon(
|
||||
imageVector = Icons.Rounded.Navigation,
|
||||
contentDescription = null,
|
||||
tint = MaterialTheme.colorScheme.tertiary,
|
||||
modifier = Modifier
|
||||
.align(Alignment.TopStart)
|
||||
.size(16.dp)
|
||||
.absoluteOffset(
|
||||
userIndicatorOffset.x.dp,
|
||||
userIndicatorOffset.y.dp
|
||||
)
|
||||
.rotate(headingAnim)
|
||||
.absoluteOffset(y = -8.dp)
|
||||
)
|
||||
}
|
||||
|
||||
Box(
|
||||
modifier = Modifier
|
||||
.align(Alignment.TopStart)
|
||||
.size(16.dp)
|
||||
.size(20.dp)
|
||||
.absoluteOffset(
|
||||
userIndicatorOffset.x.dp,
|
||||
userIndicatorOffset.y.dp
|
||||
)
|
||||
.background(MaterialTheme.colorScheme.tertiary, CircleShape)
|
||||
.border(2.dp, MaterialTheme.colorScheme.onTertiary, CircleShape)
|
||||
.background(MaterialTheme.colorScheme.onTertiary, CircleShape)
|
||||
.shadow(1.dp, CircleShape)
|
||||
)
|
||||
) {
|
||||
if (userLocation.heading != null) {
|
||||
val headingAnim by animateValueAsState(
|
||||
targetValue = userLocation.heading,
|
||||
typeConverter = Float.DegreesConverter
|
||||
)
|
||||
Icon(
|
||||
painterResource(R.drawable.assistant_navigation_20px),
|
||||
null,
|
||||
tint = MaterialTheme.colorScheme.tertiary,
|
||||
modifier = Modifier
|
||||
.size(20.dp)
|
||||
.rotate(headingAnim)
|
||||
)
|
||||
} else {
|
||||
Box(
|
||||
modifier = Modifier
|
||||
.padding(2.dp)
|
||||
.size(16.dp)
|
||||
.background(MaterialTheme.colorScheme.tertiary, CircleShape)
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
if (osmAttribution != null) {
|
||||
Text(
|
||||
|
||||
@@ -22,13 +22,6 @@ import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.foundation.layout.requiredSize
|
||||
import androidx.compose.foundation.layout.width
|
||||
import androidx.compose.foundation.shape.CircleShape
|
||||
import androidx.compose.material.icons.Icons
|
||||
import androidx.compose.material.icons.automirrored.rounded.ArrowBack
|
||||
import androidx.compose.material.icons.rounded.Delete
|
||||
import androidx.compose.material.icons.rounded.Info
|
||||
import androidx.compose.material.icons.rounded.Star
|
||||
import androidx.compose.material.icons.rounded.StarOutline
|
||||
import androidx.compose.material.icons.rounded.Tune
|
||||
import androidx.compose.material3.AlertDialog
|
||||
import androidx.compose.material3.Icon
|
||||
import androidx.compose.material3.InputChip
|
||||
@@ -47,6 +40,7 @@ import androidx.compose.ui.Alignment
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.draw.clip
|
||||
import androidx.compose.ui.platform.LocalContext
|
||||
import androidx.compose.ui.res.painterResource
|
||||
import androidx.compose.ui.res.stringResource
|
||||
import androidx.compose.ui.semantics.Role
|
||||
import androidx.compose.ui.semantics.role
|
||||
@@ -54,7 +48,6 @@ import androidx.compose.ui.semantics.semantics
|
||||
import androidx.compose.ui.text.style.TextOverflow
|
||||
import androidx.compose.ui.unit.IntRect
|
||||
import androidx.compose.ui.unit.dp
|
||||
import androidx.compose.ui.unit.roundToIntRect
|
||||
import androidx.lifecycle.compose.collectAsStateWithLifecycle
|
||||
import de.mm20.launcher2.ktx.tryStartActivity
|
||||
import de.mm20.launcher2.search.AppShortcut
|
||||
@@ -167,7 +160,7 @@ fun AppShortcutItem(
|
||||
trailingIcon = if (LocalFavoritesEnabled.current) {
|
||||
{
|
||||
Icon(
|
||||
if (isPinned) Icons.Rounded.Star else Icons.Rounded.StarOutline,
|
||||
painterResource(if (isPinned) R.drawable.star_20px_filled else R.drawable.star_20px),
|
||||
stringResource(if (isPinned) R.string.menu_favorites_unpin else R.string.menu_favorites_pin),
|
||||
modifier = Modifier
|
||||
.clip(CircleShape)
|
||||
@@ -219,7 +212,7 @@ fun AppShortcutItem(
|
||||
val favAction = if (isPinned) {
|
||||
DefaultToolbarAction(
|
||||
label = stringResource(R.string.menu_favorites_unpin),
|
||||
icon = Icons.Rounded.Star,
|
||||
icon = R.drawable.star_24px_filled,
|
||||
action = {
|
||||
viewModel.unpin()
|
||||
}
|
||||
@@ -227,7 +220,7 @@ fun AppShortcutItem(
|
||||
} else {
|
||||
DefaultToolbarAction(
|
||||
label = stringResource(R.string.menu_favorites_pin),
|
||||
icon = Icons.Rounded.StarOutline,
|
||||
icon = R.drawable.star_24px,
|
||||
action = {
|
||||
viewModel.pin()
|
||||
})
|
||||
@@ -240,7 +233,7 @@ fun AppShortcutItem(
|
||||
toolbarActions.add(
|
||||
DefaultToolbarAction(
|
||||
label = stringResource(R.string.menu_app_info),
|
||||
icon = Icons.Rounded.Info
|
||||
icon = R.drawable.info_24px,
|
||||
) {
|
||||
context.tryStartActivity(
|
||||
Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS).apply {
|
||||
@@ -253,25 +246,27 @@ fun AppShortcutItem(
|
||||
|
||||
|
||||
val sheetManager = LocalBottomSheetManager.current
|
||||
toolbarActions.add(DefaultToolbarAction(
|
||||
label = stringResource(R.string.menu_customize),
|
||||
icon = Icons.Rounded.Tune,
|
||||
action = { sheetManager.showCustomizeSearchableModal(shortcut) }
|
||||
))
|
||||
toolbarActions.add(
|
||||
DefaultToolbarAction(
|
||||
label = stringResource(R.string.menu_customize),
|
||||
icon = R.drawable.tune_24px,
|
||||
action = { sheetManager.showCustomizeSearchableModal(shortcut) }
|
||||
))
|
||||
|
||||
if (shortcut.canDelete) {
|
||||
toolbarActions.add(DefaultToolbarAction(
|
||||
label = stringResource(R.string.menu_delete),
|
||||
icon = Icons.Rounded.Delete,
|
||||
action = { requestDelete = true }
|
||||
))
|
||||
toolbarActions.add(
|
||||
DefaultToolbarAction(
|
||||
label = stringResource(R.string.menu_delete),
|
||||
icon = R.drawable.delete_24px,
|
||||
action = { requestDelete = true }
|
||||
))
|
||||
}
|
||||
|
||||
Toolbar(
|
||||
leftActions = listOf(
|
||||
DefaultToolbarAction(
|
||||
label = stringResource(id = R.string.menu_back),
|
||||
icon = Icons.AutoMirrored.Rounded.ArrowBack
|
||||
icon = R.drawable.arrow_back_24px,
|
||||
) {
|
||||
onBack()
|
||||
}
|
||||
@@ -330,140 +325,6 @@ fun AppShortcutItem(
|
||||
}
|
||||
}
|
||||
|
||||
/*Column(
|
||||
modifier = modifier
|
||||
) {
|
||||
AnimatedVisibility(showDetails && shortcut.isUnavailable) {
|
||||
MissingPermissionBanner(
|
||||
modifier = Modifier.padding(start = 16.dp, end = 16.dp, top = 16.dp),
|
||||
text = stringResource(R.string.shortcut_unavailable_description, stringResource(R.string.app_name)),
|
||||
onClick = {
|
||||
viewModel.requestShortcutPermission(context as AppCompatActivity)
|
||||
}
|
||||
)
|
||||
}
|
||||
Row {
|
||||
Column(
|
||||
modifier = Modifier
|
||||
.weight(1f)
|
||||
.padding(16.dp)
|
||||
) {
|
||||
val titleStyle by animateTextStyleAsState(if (showDetails) MaterialTheme.typography.titleMedium else MaterialTheme.typography.titleSmall)
|
||||
Text(
|
||||
text = shortcut.labelOverride ?: shortcut.label,
|
||||
style = titleStyle,
|
||||
maxLines = 1,
|
||||
overflow = TextOverflow.Ellipsis
|
||||
)
|
||||
|
||||
AnimatedVisibility(showDetails) {
|
||||
val tags by viewModel.tags.collectAsState(emptyList())
|
||||
if (tags.isNotEmpty()) {
|
||||
Text(
|
||||
modifier = Modifier.padding(top = 1.dp, bottom = 2.dp),
|
||||
text = tags.joinToString(separator = " #", prefix = "#"),
|
||||
color = MaterialTheme.colorScheme.secondary,
|
||||
style = MaterialTheme.typography.labelSmall
|
||||
)
|
||||
}
|
||||
}
|
||||
val textSpace by transition.animateDp(label = "textSpace") {
|
||||
if (it) 4.dp else 2.dp
|
||||
}
|
||||
shortcut.appName?.let {
|
||||
Text(
|
||||
text = stringResource(R.string.shortcut_summary, it),
|
||||
style = MaterialTheme.typography.bodySmall,
|
||||
modifier = Modifier.padding(top = textSpace),
|
||||
maxLines = 1,
|
||||
overflow = TextOverflow.Ellipsis
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
val padding by transition.animateDp(label = "iconPadding") {
|
||||
if (it) 16.dp else 8.dp
|
||||
}
|
||||
ShapedLauncherIcon(
|
||||
size = 48.dp,
|
||||
modifier = Modifier
|
||||
.padding(padding),
|
||||
badge = { badge },
|
||||
icon = { icon },
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
AnimatedVisibility(showDetails) {
|
||||
val toolbarActions = mutableListOf<ToolbarAction>()
|
||||
|
||||
if (LocalFavoritesEnabled.current) {
|
||||
val isPinned by viewModel.isPinned.collectAsState(false)
|
||||
val favAction = if (isPinned) {
|
||||
DefaultToolbarAction(
|
||||
label = stringResource(R.string.menu_favorites_unpin),
|
||||
icon = Icons.Rounded.Star,
|
||||
action = {
|
||||
viewModel.unpin()
|
||||
}
|
||||
)
|
||||
} else {
|
||||
DefaultToolbarAction(
|
||||
label = stringResource(R.string.menu_favorites_pin),
|
||||
icon = Icons.Rounded.StarOutline,
|
||||
action = {
|
||||
viewModel.pin()
|
||||
})
|
||||
}
|
||||
toolbarActions.add(favAction)
|
||||
}
|
||||
|
||||
val packageName = shortcut.packageName
|
||||
if (packageName != null) {
|
||||
toolbarActions.add(
|
||||
DefaultToolbarAction(
|
||||
label = stringResource(R.string.menu_app_info),
|
||||
icon = Icons.Rounded.Info
|
||||
) {
|
||||
context.tryStartActivity(
|
||||
Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS).apply {
|
||||
data = Uri.parse("package:$packageName")
|
||||
addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
|
||||
}
|
||||
)
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
val sheetManager = LocalBottomSheetManager.current
|
||||
toolbarActions.add(DefaultToolbarAction(
|
||||
label = stringResource(R.string.menu_customize),
|
||||
icon = Icons.Rounded.Tune,
|
||||
action = { sheetManager.showCustomizeSearchableModal(shortcut) }
|
||||
))
|
||||
|
||||
if (shortcut.canDelete) {
|
||||
toolbarActions.add(DefaultToolbarAction(
|
||||
label = stringResource(R.string.menu_delete),
|
||||
icon = Icons.Rounded.Delete,
|
||||
action = { requestDelete = true }
|
||||
))
|
||||
}
|
||||
|
||||
Toolbar(
|
||||
leftActions = listOf(
|
||||
DefaultToolbarAction(
|
||||
label = stringResource(id = R.string.menu_back),
|
||||
icon = Icons.Rounded.ArrowBack
|
||||
) {
|
||||
onBack()
|
||||
}
|
||||
),
|
||||
rightActions = toolbarActions
|
||||
)
|
||||
}
|
||||
}*/
|
||||
|
||||
if (requestDelete) {
|
||||
AlertDialog(
|
||||
onDismissRequest = { requestDelete = false },
|
||||
|
||||
@@ -2,14 +2,26 @@ package de.mm20.launcher2.ui.launcher.search.unitconverter
|
||||
|
||||
import android.icu.text.DateFormat
|
||||
import androidx.compose.foundation.clickable
|
||||
import androidx.compose.foundation.layout.*
|
||||
import androidx.compose.material.icons.Icons
|
||||
import androidx.compose.material.icons.rounded.*
|
||||
import androidx.compose.material3.*
|
||||
import androidx.compose.runtime.*
|
||||
import androidx.compose.foundation.layout.Arrangement
|
||||
import androidx.compose.foundation.layout.Box
|
||||
import androidx.compose.foundation.layout.Column
|
||||
import androidx.compose.foundation.layout.Row
|
||||
import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.foundation.layout.size
|
||||
import androidx.compose.material3.AlertDialog
|
||||
import androidx.compose.material3.Icon
|
||||
import androidx.compose.material3.MaterialTheme
|
||||
import androidx.compose.material3.Surface
|
||||
import androidx.compose.material3.Text
|
||||
import androidx.compose.material3.TextButton
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.runtime.getValue
|
||||
import androidx.compose.runtime.mutableStateOf
|
||||
import androidx.compose.runtime.remember
|
||||
import androidx.compose.runtime.setValue
|
||||
import androidx.compose.ui.Alignment
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.graphics.vector.ImageVector
|
||||
import androidx.compose.ui.res.painterResource
|
||||
import androidx.compose.ui.res.stringResource
|
||||
import androidx.compose.ui.text.font.FontWeight
|
||||
import androidx.compose.ui.text.style.TextOverflow
|
||||
@@ -17,8 +29,7 @@ import androidx.compose.ui.unit.dp
|
||||
import de.mm20.launcher2.search.data.CurrencyUnitConverter
|
||||
import de.mm20.launcher2.search.data.UnitConverter
|
||||
import de.mm20.launcher2.ui.R
|
||||
import de.mm20.launcher2.unitconverter.Dimension
|
||||
import java.util.*
|
||||
import java.util.Date
|
||||
|
||||
@Composable
|
||||
fun UnitConverterItem(
|
||||
@@ -51,7 +62,7 @@ fun UnitConverterItem(
|
||||
contentAlignment = Alignment.Center
|
||||
) {
|
||||
Icon(
|
||||
imageVector = getDimensionIcon(unitConverter.dimension),
|
||||
painter = painterResource(getDimensionIcon(unitConverter.dimension)),
|
||||
contentDescription = null,
|
||||
tint = MaterialTheme.colorScheme.primary,
|
||||
modifier = Modifier.size(24.dp)
|
||||
@@ -113,16 +124,23 @@ fun UnitConverterItem(
|
||||
}
|
||||
)
|
||||
if (showDisclaimer) {
|
||||
AlertDialog(
|
||||
onDismissRequest = { showDisclaimer = false },
|
||||
confirmButton = {
|
||||
TextButton(onClick = { showDisclaimer = false }) {
|
||||
Text(text = stringResource(id = R.string.close))
|
||||
}
|
||||
},
|
||||
title = { Text(stringResource(id = R.string.disclaimer)) },
|
||||
text = { Text(stringResource(id = R.string.disclaimer_currency_converter, df.format(Date(it.updateTimestamp)))) }
|
||||
)
|
||||
AlertDialog(
|
||||
onDismissRequest = { showDisclaimer = false },
|
||||
confirmButton = {
|
||||
TextButton(onClick = { showDisclaimer = false }) {
|
||||
Text(text = stringResource(id = R.string.close))
|
||||
}
|
||||
},
|
||||
title = { Text(stringResource(id = R.string.disclaimer)) },
|
||||
text = {
|
||||
Text(
|
||||
stringResource(
|
||||
id = R.string.disclaimer_currency_converter,
|
||||
df.format(Date(it.updateTimestamp))
|
||||
)
|
||||
)
|
||||
}
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -11,16 +11,6 @@ import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.foundation.layout.size
|
||||
import androidx.compose.foundation.layout.widthIn
|
||||
import androidx.compose.foundation.lazy.LazyListScope
|
||||
import androidx.compose.material.icons.Icons
|
||||
import androidx.compose.material.icons.rounded.Bolt
|
||||
import androidx.compose.material.icons.rounded.FitnessCenter
|
||||
import androidx.compose.material.icons.rounded.Schedule
|
||||
import androidx.compose.material.icons.rounded.Speed
|
||||
import androidx.compose.material.icons.rounded.SquareFoot
|
||||
import androidx.compose.material.icons.rounded.Storage
|
||||
import androidx.compose.material.icons.rounded.Straighten
|
||||
import androidx.compose.material.icons.rounded.Thermostat
|
||||
import androidx.compose.material.icons.rounded.Toll
|
||||
import androidx.compose.material3.AlertDialog
|
||||
import androidx.compose.material3.Icon
|
||||
import androidx.compose.material3.MaterialTheme
|
||||
@@ -34,12 +24,12 @@ import androidx.compose.ui.Alignment
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.graphics.vector.ImageVector
|
||||
import androidx.compose.ui.platform.LocalClipboardManager
|
||||
import androidx.compose.ui.res.painterResource
|
||||
import androidx.compose.ui.res.stringResource
|
||||
import androidx.compose.ui.text.buildAnnotatedString
|
||||
import androidx.compose.ui.text.style.TextAlign
|
||||
import androidx.compose.ui.text.style.TextOverflow
|
||||
import androidx.compose.ui.unit.dp
|
||||
import de.mm20.launcher2.icons.Cube
|
||||
import de.mm20.launcher2.search.data.CurrencyUnitConverter
|
||||
import de.mm20.launcher2.search.data.UnitConverter
|
||||
import de.mm20.launcher2.ui.R
|
||||
@@ -121,7 +111,7 @@ fun LazyListScope.UnitConverterResults(
|
||||
}
|
||||
}
|
||||
Icon(
|
||||
imageVector = getDimensionIcon(converter.dimension),
|
||||
painter = painterResource(getDimensionIcon(converter.dimension)),
|
||||
contentDescription = null,
|
||||
tint = MaterialTheme.colorScheme.secondary,
|
||||
modifier = Modifier
|
||||
@@ -216,20 +206,20 @@ fun LazyListScope.UnitConverterResults(
|
||||
}
|
||||
}
|
||||
|
||||
fun getDimensionIcon(dimension: Dimension): ImageVector {
|
||||
fun getDimensionIcon(dimension: Dimension): Int {
|
||||
return when (dimension) {
|
||||
Dimension.Mass -> Icons.Rounded.FitnessCenter
|
||||
Dimension.Length -> Icons.Rounded.Straighten
|
||||
Dimension.Velocity -> Icons.Rounded.Speed
|
||||
Dimension.Volume -> Icons.Rounded.Cube
|
||||
Dimension.Area -> Icons.Rounded.SquareFoot
|
||||
Dimension.Currency -> Icons.Rounded.Toll
|
||||
Dimension.Data -> Icons.Rounded.Storage
|
||||
Dimension.Mass -> R.drawable.weight_24px
|
||||
Dimension.Length -> R.drawable.straighten_24px
|
||||
Dimension.Velocity -> R.drawable.speed_24px
|
||||
Dimension.Volume -> R.drawable.deployed_code_24px
|
||||
Dimension.Area -> R.drawable.square_foot_24px
|
||||
Dimension.Currency -> R.drawable.payments_24px
|
||||
Dimension.Data -> R.drawable.hard_disk_24px
|
||||
Dimension.Bitrate -> TODO()
|
||||
Dimension.Pressure -> TODO()
|
||||
Dimension.Energy -> Icons.Rounded.Bolt
|
||||
Dimension.Energy -> R.drawable.bolt_24px
|
||||
Dimension.Frequency -> TODO()
|
||||
Dimension.Temperature -> Icons.Rounded.Thermostat
|
||||
Dimension.Time -> Icons.Rounded.Schedule
|
||||
Dimension.Temperature -> R.drawable.device_thermostat_24px
|
||||
Dimension.Time -> R.drawable.schedule_24px
|
||||
}
|
||||
}
|
||||
@@ -14,12 +14,6 @@ import androidx.compose.foundation.layout.aspectRatio
|
||||
import androidx.compose.foundation.layout.fillMaxWidth
|
||||
import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.foundation.layout.size
|
||||
import androidx.compose.material.icons.Icons
|
||||
import androidx.compose.material.icons.automirrored.rounded.ArrowBack
|
||||
import androidx.compose.material.icons.rounded.Share
|
||||
import androidx.compose.material.icons.rounded.Star
|
||||
import androidx.compose.material.icons.rounded.StarOutline
|
||||
import androidx.compose.material.icons.rounded.Tune
|
||||
import androidx.compose.material3.MaterialTheme
|
||||
import androidx.compose.material3.Text
|
||||
import androidx.compose.runtime.Composable
|
||||
@@ -35,7 +29,6 @@ import androidx.compose.ui.res.stringResource
|
||||
import androidx.compose.ui.text.style.TextOverflow
|
||||
import androidx.compose.ui.unit.IntRect
|
||||
import androidx.compose.ui.unit.dp
|
||||
import androidx.compose.ui.unit.roundToIntRect
|
||||
import coil.compose.AsyncImage
|
||||
import coil.request.ImageRequest
|
||||
import de.mm20.launcher2.search.Website
|
||||
@@ -226,7 +219,7 @@ fun WebsiteItem(
|
||||
val favAction = if (isPinned) {
|
||||
DefaultToolbarAction(
|
||||
label = stringResource(R.string.menu_favorites_unpin),
|
||||
icon = Icons.Rounded.Star,
|
||||
icon = R.drawable.star_24px_filled,
|
||||
action = {
|
||||
viewModel.unpin()
|
||||
onBack?.invoke()
|
||||
@@ -235,7 +228,7 @@ fun WebsiteItem(
|
||||
} else {
|
||||
DefaultToolbarAction(
|
||||
label = stringResource(R.string.menu_favorites_pin),
|
||||
icon = Icons.Rounded.StarOutline,
|
||||
icon = R.drawable.star_24px,
|
||||
action = {
|
||||
viewModel.pin()
|
||||
onBack?.invoke()
|
||||
@@ -247,7 +240,7 @@ fun WebsiteItem(
|
||||
toolbarActions.add(
|
||||
DefaultToolbarAction(
|
||||
label = stringResource(R.string.menu_share),
|
||||
icon = Icons.Rounded.Share,
|
||||
icon = R.drawable.share_24px,
|
||||
action = {
|
||||
website.share(context)
|
||||
}
|
||||
@@ -255,9 +248,10 @@ fun WebsiteItem(
|
||||
)
|
||||
|
||||
val sheetManager = LocalBottomSheetManager.current
|
||||
toolbarActions.add(DefaultToolbarAction(
|
||||
toolbarActions.add(
|
||||
DefaultToolbarAction(
|
||||
label = stringResource(R.string.menu_customize),
|
||||
icon = Icons.Rounded.Tune,
|
||||
icon = R.drawable.tune_24px,
|
||||
action = { sheetManager.showCustomizeSearchableModal(website) }
|
||||
))
|
||||
|
||||
@@ -265,7 +259,7 @@ fun WebsiteItem(
|
||||
leftActions = if (onBack != null) listOf(
|
||||
DefaultToolbarAction(
|
||||
stringResource(id = R.string.menu_back),
|
||||
icon = Icons.AutoMirrored.Rounded.ArrowBack,
|
||||
icon = R.drawable.arrow_back_24px,
|
||||
action = onBack
|
||||
)
|
||||
) else emptyList(),
|
||||
|
||||
@@ -14,13 +14,6 @@ import androidx.compose.foundation.layout.aspectRatio
|
||||
import androidx.compose.foundation.layout.fillMaxWidth
|
||||
import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.foundation.layout.size
|
||||
import androidx.compose.material.icons.Icons
|
||||
import androidx.compose.material.icons.automirrored.rounded.ArrowBack
|
||||
import androidx.compose.material.icons.rounded.Edit
|
||||
import androidx.compose.material.icons.rounded.Share
|
||||
import androidx.compose.material.icons.rounded.Star
|
||||
import androidx.compose.material.icons.rounded.StarOutline
|
||||
import androidx.compose.material.icons.rounded.Tune
|
||||
import androidx.compose.material3.MaterialTheme
|
||||
import androidx.compose.material3.Text
|
||||
import androidx.compose.runtime.Composable
|
||||
@@ -30,7 +23,6 @@ import androidx.compose.runtime.getValue
|
||||
import androidx.compose.ui.Alignment
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.draw.clip
|
||||
import androidx.compose.ui.geometry.Rect
|
||||
import androidx.compose.ui.layout.ContentScale
|
||||
import androidx.compose.ui.platform.LocalContext
|
||||
import androidx.compose.ui.res.stringResource
|
||||
@@ -38,7 +30,6 @@ import androidx.compose.ui.text.AnnotatedString
|
||||
import androidx.compose.ui.text.fromHtml
|
||||
import androidx.compose.ui.unit.IntRect
|
||||
import androidx.compose.ui.unit.dp
|
||||
import androidx.compose.ui.unit.roundToIntRect
|
||||
import coil.compose.AsyncImage
|
||||
import coil.request.ImageRequest
|
||||
import de.mm20.launcher2.search.Article
|
||||
@@ -213,7 +204,7 @@ fun ArticleItem(
|
||||
val favAction = if (isPinned) {
|
||||
DefaultToolbarAction(
|
||||
label = stringResource(R.string.menu_favorites_unpin),
|
||||
icon = Icons.Rounded.Star,
|
||||
icon = R.drawable.star_24px_filled,
|
||||
action = {
|
||||
viewModel.unpin()
|
||||
onBack?.invoke()
|
||||
@@ -222,7 +213,7 @@ fun ArticleItem(
|
||||
} else {
|
||||
DefaultToolbarAction(
|
||||
label = stringResource(R.string.menu_favorites_pin),
|
||||
icon = Icons.Rounded.StarOutline,
|
||||
icon = R.drawable.star_24px,
|
||||
action = {
|
||||
viewModel.pin()
|
||||
onBack?.invoke()
|
||||
@@ -234,7 +225,7 @@ fun ArticleItem(
|
||||
toolbarActions.add(
|
||||
DefaultToolbarAction(
|
||||
label = stringResource(R.string.menu_share),
|
||||
icon = Icons.Rounded.Share,
|
||||
icon = R.drawable.share_24px,
|
||||
action = {
|
||||
article.share(context)
|
||||
}
|
||||
@@ -242,9 +233,10 @@ fun ArticleItem(
|
||||
)
|
||||
|
||||
val sheetManager = LocalBottomSheetManager.current
|
||||
toolbarActions.add(DefaultToolbarAction(
|
||||
toolbarActions.add(
|
||||
DefaultToolbarAction(
|
||||
label = stringResource(R.string.menu_customize),
|
||||
icon = Icons.Rounded.Tune,
|
||||
icon = R.drawable.tune_24px,
|
||||
action = { sheetManager.showCustomizeSearchableModal(article) }
|
||||
))
|
||||
|
||||
@@ -252,7 +244,7 @@ fun ArticleItem(
|
||||
leftActions = if (onBack != null) listOf(
|
||||
DefaultToolbarAction(
|
||||
stringResource(id = R.string.menu_back),
|
||||
icon = Icons.AutoMirrored.Rounded.ArrowBack,
|
||||
icon = R.drawable.arrow_back_24px,
|
||||
action = onBack
|
||||
)
|
||||
) else emptyList(),
|
||||
|
||||
@@ -2,21 +2,12 @@ package de.mm20.launcher2.ui.launcher.searchbar
|
||||
|
||||
import androidx.compose.animation.AnimatedVisibility
|
||||
import androidx.compose.animation.core.tween
|
||||
import androidx.compose.animation.fadeIn
|
||||
import androidx.compose.animation.fadeOut
|
||||
import androidx.compose.animation.scaleIn
|
||||
import androidx.compose.animation.scaleOut
|
||||
import androidx.compose.foundation.layout.Box
|
||||
import androidx.compose.foundation.layout.WindowInsets
|
||||
import androidx.compose.foundation.layout.imeAnimationTarget
|
||||
import androidx.compose.foundation.layout.offset
|
||||
import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.foundation.layout.safeDrawing
|
||||
import androidx.compose.foundation.layout.windowInsetsPadding
|
||||
import androidx.compose.foundation.text.KeyboardActionScope
|
||||
import androidx.compose.material.icons.Icons
|
||||
import androidx.compose.material.icons.rounded.FilterAlt
|
||||
import androidx.compose.material.icons.rounded.VisibilityOff
|
||||
import androidx.compose.material3.Badge
|
||||
import androidx.compose.material3.Icon
|
||||
import androidx.compose.material3.IconToggleButton
|
||||
@@ -29,8 +20,8 @@ import androidx.compose.runtime.remember
|
||||
import androidx.compose.ui.Alignment
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.focus.FocusRequester
|
||||
import androidx.compose.ui.platform.LocalDensity
|
||||
import androidx.compose.ui.platform.LocalFocusManager
|
||||
import androidx.compose.ui.res.painterResource
|
||||
import androidx.compose.ui.res.stringResource
|
||||
import androidx.compose.ui.unit.IntOffset
|
||||
import androidx.compose.ui.unit.dp
|
||||
@@ -41,7 +32,6 @@ import de.mm20.launcher2.ui.R
|
||||
import de.mm20.launcher2.ui.component.SearchBar
|
||||
import de.mm20.launcher2.ui.component.SearchBarLevel
|
||||
import de.mm20.launcher2.ui.launcher.search.SearchVM
|
||||
import de.mm20.launcher2.ui.launcher.search.filters.KeyboardFilterBar
|
||||
import de.mm20.launcher2.ui.launcher.sheets.LocalBottomSheetManager
|
||||
|
||||
@Composable
|
||||
@@ -96,7 +86,13 @@ fun LauncherSearchBar(
|
||||
checked = sheetManager.hiddenItemsSheetShown.value,
|
||||
onCheckedChange = { if (it) sheetManager.showHiddenItemsSheet() },
|
||||
) {
|
||||
Icon(imageVector = Icons.Rounded.VisibilityOff, contentDescription = null)
|
||||
Icon(
|
||||
painter = painterResource(
|
||||
if (sheetManager.hiddenItemsSheetShown.value) R.drawable.visibility_off_24px_filled
|
||||
else R.drawable.visibility_off_24px
|
||||
),
|
||||
contentDescription = null
|
||||
)
|
||||
}
|
||||
}
|
||||
AnimatedVisibility(
|
||||
@@ -111,9 +107,15 @@ fun LauncherSearchBar(
|
||||
},
|
||||
) {
|
||||
Box {
|
||||
Icon(imageVector = Icons.Rounded.FilterAlt, contentDescription = stringResource(
|
||||
if (searchVM.showFilters.value) R.string.menu_hide_filters else R.string.menu_show_filters
|
||||
))
|
||||
Icon(
|
||||
painter = painterResource(
|
||||
if (searchVM.showFilters.value)R.drawable.filter_alt_24px_filled
|
||||
else R.drawable.filter_alt_24px
|
||||
),
|
||||
contentDescription = stringResource(
|
||||
if (searchVM.showFilters.value) R.string.menu_hide_filters else R.string.menu_show_filters
|
||||
)
|
||||
)
|
||||
androidx.compose.animation.AnimatedVisibility(
|
||||
!searchVM.filters.value.allCategoriesEnabled,
|
||||
enter = scaleIn(tween(100)),
|
||||
|
||||
@@ -8,8 +8,6 @@ import androidx.compose.foundation.layout.height
|
||||
import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.foundation.lazy.LazyRow
|
||||
import androidx.compose.foundation.lazy.items
|
||||
import androidx.compose.material.icons.Icons
|
||||
import androidx.compose.material.icons.rounded.Edit
|
||||
import androidx.compose.material3.AssistChip
|
||||
import androidx.compose.material3.AssistChipDefaults
|
||||
import androidx.compose.material3.FloatingActionButtonDefaults
|
||||
@@ -21,8 +19,10 @@ import androidx.compose.runtime.Composable
|
||||
import androidx.compose.ui.Alignment
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.platform.LocalContext
|
||||
import androidx.compose.ui.res.painterResource
|
||||
import androidx.compose.ui.unit.dp
|
||||
import de.mm20.launcher2.searchactions.actions.SearchAction
|
||||
import de.mm20.launcher2.ui.R
|
||||
import de.mm20.launcher2.ui.component.SearchActionIcon
|
||||
import de.mm20.launcher2.ui.modifier.consumeAllScrolling
|
||||
import de.mm20.launcher2.ui.settings.SettingsActivity
|
||||
@@ -83,7 +83,7 @@ fun ColumnScope.SearchBarActions(
|
||||
}
|
||||
) {
|
||||
|
||||
Icon(imageVector = Icons.Rounded.Edit, contentDescription = null)
|
||||
Icon(painterResource(R.drawable.edit_24px), contentDescription = null)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -8,11 +8,6 @@ import androidx.compose.animation.graphics.res.animatedVectorResource
|
||||
import androidx.compose.animation.graphics.res.rememberAnimatedVectorPainter
|
||||
import androidx.compose.animation.graphics.vector.AnimatedImageVector
|
||||
import androidx.compose.foundation.layout.RowScope
|
||||
import androidx.compose.material.icons.Icons
|
||||
import androidx.compose.material.icons.rounded.Edit
|
||||
import androidx.compose.material.icons.rounded.HelpOutline
|
||||
import androidx.compose.material.icons.rounded.Settings
|
||||
import androidx.compose.material.icons.rounded.Wallpaper
|
||||
import androidx.compose.material3.DropdownMenu
|
||||
import androidx.compose.material3.DropdownMenuItem
|
||||
import androidx.compose.material3.Icon
|
||||
@@ -21,13 +16,13 @@ import androidx.compose.material3.LocalContentColor
|
||||
import androidx.compose.material3.MaterialTheme
|
||||
import androidx.compose.material3.Text
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.runtime.collectAsState
|
||||
import androidx.compose.runtime.getValue
|
||||
import androidx.compose.runtime.mutableStateOf
|
||||
import androidx.compose.runtime.remember
|
||||
import androidx.compose.runtime.setValue
|
||||
import androidx.compose.ui.graphics.toArgb
|
||||
import androidx.compose.ui.platform.LocalContext
|
||||
import androidx.compose.ui.res.painterResource
|
||||
import androidx.compose.ui.res.stringResource
|
||||
import androidx.lifecycle.viewmodel.compose.viewModel
|
||||
import de.mm20.launcher2.ui.R
|
||||
@@ -74,7 +69,7 @@ fun RowScope.SearchBarMenu(
|
||||
Text(stringResource(R.string.wallpaper))
|
||||
},
|
||||
leadingIcon = {
|
||||
Icon(imageVector = Icons.Rounded.Wallpaper, contentDescription = null)
|
||||
Icon(painterResource(R.drawable.wallpaper_24px), contentDescription = null)
|
||||
}
|
||||
)
|
||||
DropdownMenuItem(
|
||||
@@ -86,7 +81,7 @@ fun RowScope.SearchBarMenu(
|
||||
Text(stringResource(R.string.settings))
|
||||
},
|
||||
leadingIcon = {
|
||||
Icon(imageVector = Icons.Rounded.Settings, contentDescription = null)
|
||||
Icon(painterResource(R.drawable.settings_24px), contentDescription = null)
|
||||
}
|
||||
)
|
||||
val colorScheme = MaterialTheme.colorScheme
|
||||
@@ -107,7 +102,7 @@ fun RowScope.SearchBarMenu(
|
||||
Text(stringResource(R.string.help))
|
||||
},
|
||||
leadingIcon = {
|
||||
Icon(imageVector = Icons.Rounded.HelpOutline, contentDescription = null)
|
||||
Icon(painterResource(R.drawable.help_24px), contentDescription = null)
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
@@ -27,13 +27,6 @@ import androidx.compose.foundation.layout.requiredSize
|
||||
import androidx.compose.foundation.layout.width
|
||||
import androidx.compose.foundation.rememberScrollState
|
||||
import androidx.compose.foundation.verticalScroll
|
||||
import androidx.compose.material.icons.Icons
|
||||
import androidx.compose.material.icons.rounded.Build
|
||||
import androidx.compose.material.icons.rounded.Error
|
||||
import androidx.compose.material.icons.rounded.HelpOutline
|
||||
import androidx.compose.material.icons.rounded.Link
|
||||
import androidx.compose.material.icons.rounded.LinkOff
|
||||
import androidx.compose.material.icons.rounded.OpenInNew
|
||||
import androidx.compose.material3.ButtonDefaults
|
||||
import androidx.compose.material3.CheckboxDefaults
|
||||
import androidx.compose.material3.HorizontalDivider
|
||||
@@ -58,6 +51,7 @@ import androidx.compose.ui.graphics.toArgb
|
||||
import androidx.compose.ui.input.pointer.PointerEventPass
|
||||
import androidx.compose.ui.input.pointer.pointerInput
|
||||
import androidx.compose.ui.platform.LocalContext
|
||||
import androidx.compose.ui.res.painterResource
|
||||
import androidx.compose.ui.res.stringResource
|
||||
import androidx.compose.ui.unit.Dp
|
||||
import androidx.compose.ui.unit.dp
|
||||
@@ -174,7 +168,7 @@ fun ColumnScope.ConfigureWeatherWidget(
|
||||
modifier = Modifier
|
||||
.padding(start = ButtonDefaults.IconSpacing)
|
||||
.requiredSize(ButtonDefaults.IconSize),
|
||||
imageVector = Icons.Rounded.OpenInNew, contentDescription = null
|
||||
painter = painterResource(R.drawable.open_in_new_20px), contentDescription = null
|
||||
)
|
||||
}
|
||||
}
|
||||
@@ -225,7 +219,7 @@ fun ColumnScope.ConfigureFavoritesWidget(
|
||||
modifier = Modifier
|
||||
.padding(start = ButtonDefaults.IconSpacing)
|
||||
.requiredSize(ButtonDefaults.IconSize),
|
||||
imageVector = Icons.Rounded.OpenInNew, contentDescription = null
|
||||
painter = painterResource(R.drawable.open_in_new_20px), contentDescription = null
|
||||
)
|
||||
}
|
||||
}
|
||||
@@ -278,7 +272,7 @@ fun ColumnScope.ConfigureMusicWidget(
|
||||
modifier = Modifier
|
||||
.padding(start = ButtonDefaults.IconSpacing)
|
||||
.requiredSize(ButtonDefaults.IconSize),
|
||||
imageVector = Icons.Rounded.OpenInNew, contentDescription = null
|
||||
painter = painterResource(R.drawable.open_in_new_20px), contentDescription = null
|
||||
)
|
||||
}
|
||||
}
|
||||
@@ -305,7 +299,7 @@ fun ColumnScope.ConfigureAppWidget(
|
||||
contentAlignment = Alignment.Center
|
||||
) {
|
||||
LargeMessage(
|
||||
icon = Icons.Rounded.Error,
|
||||
icon = R.drawable.error_48px,
|
||||
text = stringResource(id = R.string.app_widget_loading_failed)
|
||||
)
|
||||
}
|
||||
@@ -316,7 +310,7 @@ fun ColumnScope.ConfigureAppWidget(
|
||||
contentPadding = ButtonDefaults.ButtonWithIconContentPadding,
|
||||
onClick = { replaceWidget = true }) {
|
||||
Icon(
|
||||
Icons.Rounded.Build,
|
||||
painterResource(R.drawable.build_20px),
|
||||
null,
|
||||
modifier = Modifier
|
||||
.padding(end = ButtonDefaults.IconSpacing)
|
||||
@@ -506,7 +500,7 @@ fun ColumnScope.ConfigureAppWidget(
|
||||
modifier = Modifier
|
||||
.padding(start = ButtonDefaults.IconSpacing)
|
||||
.requiredSize(ButtonDefaults.IconSize),
|
||||
imageVector = Icons.Rounded.OpenInNew, contentDescription = null
|
||||
painter = painterResource(R.drawable.open_in_new_20px), contentDescription = null
|
||||
)
|
||||
}
|
||||
}
|
||||
@@ -659,7 +653,7 @@ fun ColumnScope.ConfigureCalendarWidget(
|
||||
modifier = Modifier
|
||||
.padding(end = ButtonDefaults.IconSpacing)
|
||||
.requiredSize(ButtonDefaults.IconSize),
|
||||
imageVector = Icons.Rounded.HelpOutline, contentDescription = null
|
||||
painter = painterResource(R.drawable.help_20px), contentDescription = null
|
||||
)
|
||||
Text(stringResource(R.string.widget_config_calendar_missing_calendars_hint))
|
||||
}
|
||||
@@ -706,7 +700,7 @@ fun ConfigureNotesWidget(
|
||||
OutlinedCard {
|
||||
if (widget.config.linkedFile != null) {
|
||||
Preference(
|
||||
icon = { Icon(Icons.Rounded.LinkOff, null) },
|
||||
icon = { Icon(painterResource(R.drawable.link_off_24px), null) },
|
||||
title = { Text(stringResource(R.string.note_widget_action_unlink_file)) },
|
||||
summary = {
|
||||
Text(
|
||||
@@ -732,7 +726,7 @@ fun ConfigureNotesWidget(
|
||||
Preference(
|
||||
title = stringResource(R.string.note_widget_link_file),
|
||||
summary = stringResource(R.string.note_widget_link_file_summary),
|
||||
icon = Icons.Rounded.Link,
|
||||
icon = R.drawable.link_24px,
|
||||
onClick = {
|
||||
linkFileLauncher.launch(
|
||||
context.getString(
|
||||
|
||||
@@ -5,20 +5,12 @@ import androidx.compose.foundation.layout.Box
|
||||
import androidx.compose.foundation.layout.Column
|
||||
import androidx.compose.foundation.layout.fillMaxWidth
|
||||
import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.material.icons.Icons
|
||||
import androidx.compose.material.icons.automirrored.rounded.Label
|
||||
import androidx.compose.material.icons.outlined.Visibility
|
||||
import androidx.compose.material.icons.rounded.Edit
|
||||
import androidx.compose.material.icons.rounded.Tag
|
||||
import androidx.compose.material.icons.rounded.Visibility
|
||||
import androidx.compose.material.icons.rounded.VisibilityOff
|
||||
import androidx.compose.material3.DropdownMenuItem
|
||||
import androidx.compose.material3.ExposedDropdownMenuBox
|
||||
import androidx.compose.material3.ExposedDropdownMenuDefaults
|
||||
import androidx.compose.material3.Icon
|
||||
import androidx.compose.material3.MaterialTheme
|
||||
import androidx.compose.material3.MenuAnchorType
|
||||
import androidx.compose.material3.ModalBottomSheet
|
||||
import androidx.compose.material3.OutlinedTextField
|
||||
import androidx.compose.material3.Text
|
||||
import androidx.compose.material3.rememberModalBottomSheetState
|
||||
@@ -33,6 +25,7 @@ import androidx.compose.runtime.rememberCoroutineScope
|
||||
import androidx.compose.runtime.setValue
|
||||
import androidx.compose.ui.Alignment
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.res.painterResource
|
||||
import androidx.compose.ui.res.stringResource
|
||||
import androidx.compose.ui.text.style.TextAlign
|
||||
import androidx.compose.ui.unit.Dp
|
||||
@@ -78,7 +71,7 @@ fun CustomizeSearchableSheet(
|
||||
icon = { icon },
|
||||
badge = {
|
||||
Badge(
|
||||
icon = BadgeIcon(Icons.Rounded.Edit)
|
||||
icon = BadgeIcon(R.drawable.edit_20px)
|
||||
)
|
||||
},
|
||||
modifier = Modifier.clickable {
|
||||
@@ -105,7 +98,7 @@ fun CustomizeSearchableSheet(
|
||||
Text(searchable.label)
|
||||
},
|
||||
leadingIcon = {
|
||||
Icon(Icons.AutoMirrored.Rounded.Label, null)
|
||||
Icon(painterResource(R.drawable.label_24px), null)
|
||||
}
|
||||
)
|
||||
|
||||
@@ -129,7 +122,7 @@ fun CustomizeSearchableSheet(
|
||||
viewModel.autocompleteTags(it).minus(tags.toSet())
|
||||
},
|
||||
leadingIcon = {
|
||||
Icon(Icons.Rounded.Tag, null)
|
||||
Icon(painterResource(R.drawable.tag_24px), null)
|
||||
}
|
||||
)
|
||||
|
||||
@@ -169,11 +162,13 @@ fun CustomizeSearchableSheet(
|
||||
trailingIcon = { ExposedDropdownMenuDefaults.TrailingIcon(expanded = showDropdown) },
|
||||
leadingIcon = {
|
||||
Icon(
|
||||
when (visibility) {
|
||||
VisibilityLevel.Default -> Icons.Rounded.Visibility
|
||||
VisibilityLevel.SearchOnly -> Icons.Outlined.Visibility
|
||||
VisibilityLevel.Hidden -> Icons.Rounded.VisibilityOff
|
||||
},
|
||||
painterResource(
|
||||
when (visibility) {
|
||||
VisibilityLevel.Default -> R.drawable.visibility_24px_filled
|
||||
VisibilityLevel.SearchOnly -> R.drawable.visibility_24px
|
||||
VisibilityLevel.Hidden -> R.drawable.visibility_off_24px
|
||||
}
|
||||
),
|
||||
null
|
||||
)
|
||||
},
|
||||
@@ -195,7 +190,7 @@ fun CustomizeSearchableSheet(
|
||||
Text(stringResource(R.string.item_visibility_app_default))
|
||||
},
|
||||
leadingIcon = {
|
||||
Icon(Icons.Rounded.Visibility, null)
|
||||
Icon(painterResource(R.drawable.visibility_24px_filled), null)
|
||||
}
|
||||
)
|
||||
} else if (searchable is CalendarEvent) {
|
||||
@@ -208,7 +203,7 @@ fun CustomizeSearchableSheet(
|
||||
Text(stringResource(R.string.item_visibility_calendar_default))
|
||||
},
|
||||
leadingIcon = {
|
||||
Icon(Icons.Rounded.Visibility, null)
|
||||
Icon(painterResource(R.drawable.visibility_24px_filled), null)
|
||||
}
|
||||
)
|
||||
} else {
|
||||
@@ -221,7 +216,7 @@ fun CustomizeSearchableSheet(
|
||||
Text(stringResource(R.string.item_visibility_search_only))
|
||||
},
|
||||
leadingIcon = {
|
||||
Icon(Icons.Rounded.Visibility, null)
|
||||
Icon(painterResource(R.drawable.visibility_24px_filled), null)
|
||||
}
|
||||
)
|
||||
}
|
||||
@@ -236,7 +231,7 @@ fun CustomizeSearchableSheet(
|
||||
},
|
||||
leadingIcon = {
|
||||
Icon(
|
||||
Icons.Outlined.Visibility,
|
||||
painterResource(R.drawable.visibility_24px),
|
||||
null
|
||||
)
|
||||
}
|
||||
@@ -251,7 +246,7 @@ fun CustomizeSearchableSheet(
|
||||
Text(stringResource(R.string.item_visibility_hidden))
|
||||
},
|
||||
leadingIcon = {
|
||||
Icon(Icons.Rounded.VisibilityOff, null)
|
||||
Icon(painterResource(R.drawable.visibility_off_24px), null)
|
||||
}
|
||||
)
|
||||
}
|
||||
@@ -267,7 +262,7 @@ fun CustomizeSearchableSheet(
|
||||
}
|
||||
if (pickIcon) {
|
||||
val bottomSheetState = rememberModalBottomSheetState()
|
||||
BottomSheetDialog (
|
||||
BottomSheetDialog(
|
||||
onDismissRequest = { viewModel.closeIconPicker() },
|
||||
bottomSheetState = bottomSheetState
|
||||
) {
|
||||
|
||||
@@ -25,11 +25,6 @@ import androidx.compose.foundation.lazy.grid.GridItemSpan
|
||||
import androidx.compose.foundation.lazy.grid.rememberLazyGridState
|
||||
import androidx.compose.foundation.lazy.items
|
||||
import androidx.compose.foundation.lazy.rememberLazyListState
|
||||
import androidx.compose.material.icons.Icons
|
||||
import androidx.compose.material.icons.rounded.Add
|
||||
import androidx.compose.material.icons.rounded.Delete
|
||||
import androidx.compose.material.icons.rounded.Settings
|
||||
import androidx.compose.material.icons.rounded.Tag
|
||||
import androidx.compose.material3.CircularProgressIndicator
|
||||
import androidx.compose.material3.DropdownMenu
|
||||
import androidx.compose.material3.DropdownMenuItem
|
||||
@@ -63,6 +58,7 @@ import androidx.compose.ui.input.pointer.pointerInput
|
||||
import androidx.compose.ui.platform.LocalContext
|
||||
import androidx.compose.ui.platform.LocalLayoutDirection
|
||||
import androidx.compose.ui.platform.LocalLifecycleOwner
|
||||
import androidx.compose.ui.res.painterResource
|
||||
import androidx.compose.ui.res.stringResource
|
||||
import androidx.compose.ui.text.style.TextAlign
|
||||
import androidx.compose.ui.text.style.TextOverflow
|
||||
@@ -253,7 +249,7 @@ fun ReorderFavoritesGrid(viewModel: EditFavoritesSheetVM, paddingValues: Padding
|
||||
DropdownMenuItem(
|
||||
leadingIcon = {
|
||||
Icon(
|
||||
imageVector = Icons.Rounded.Delete,
|
||||
painterResource(R.drawable.delete_24px),
|
||||
contentDescription = null
|
||||
)
|
||||
},
|
||||
@@ -297,7 +293,10 @@ fun ReorderFavoritesGrid(viewModel: EditFavoritesSheetVM, paddingValues: Padding
|
||||
checked = showSettings,
|
||||
onCheckedChange = { showSettings = it }) {
|
||||
Icon(
|
||||
imageVector = Icons.Rounded.Settings,
|
||||
painterResource(
|
||||
if (showSettings) R.drawable.settings_24px_filled
|
||||
else R.drawable.settings_24px
|
||||
),
|
||||
contentDescription = null
|
||||
)
|
||||
}
|
||||
@@ -308,7 +307,7 @@ fun ReorderFavoritesGrid(viewModel: EditFavoritesSheetVM, paddingValues: Padding
|
||||
viewModel.pickShortcut(it.section)
|
||||
}) {
|
||||
Icon(
|
||||
imageVector = Icons.Rounded.Add,
|
||||
painterResource(R.drawable.add_24px),
|
||||
contentDescription = null
|
||||
)
|
||||
}
|
||||
@@ -471,7 +470,7 @@ fun ReorderFavoritesGrid(viewModel: EditFavoritesSheetVM, paddingValues: Padding
|
||||
showAddMenu = true
|
||||
}) {
|
||||
Icon(
|
||||
imageVector = Icons.Rounded.Add,
|
||||
painterResource(R.drawable.add_24px),
|
||||
contentDescription = null
|
||||
)
|
||||
}
|
||||
@@ -481,7 +480,7 @@ fun ReorderFavoritesGrid(viewModel: EditFavoritesSheetVM, paddingValues: Padding
|
||||
for (tag in availableTags) {
|
||||
DropdownMenuItem(
|
||||
leadingIcon = {
|
||||
Icon(Icons.Rounded.Tag, null)
|
||||
Icon(painterResource(R.drawable.tag_24px), null)
|
||||
},
|
||||
text = { Text(tag.tag) },
|
||||
onClick = {
|
||||
@@ -494,7 +493,7 @@ fun ReorderFavoritesGrid(viewModel: EditFavoritesSheetVM, paddingValues: Padding
|
||||
}
|
||||
DropdownMenuItem(
|
||||
leadingIcon = {
|
||||
Icon(Icons.Rounded.Add, null)
|
||||
Icon(painterResource(R.drawable.add_24px), null)
|
||||
},
|
||||
text = {
|
||||
Text(
|
||||
|
||||
@@ -23,12 +23,6 @@ import androidx.compose.foundation.rememberScrollState
|
||||
import androidx.compose.foundation.shape.CircleShape
|
||||
import androidx.compose.foundation.text.KeyboardActions
|
||||
import androidx.compose.foundation.verticalScroll
|
||||
import androidx.compose.material.icons.Icons
|
||||
import androidx.compose.material.icons.rounded.Apps
|
||||
import androidx.compose.material.icons.rounded.Check
|
||||
import androidx.compose.material.icons.rounded.EmojiEmotions
|
||||
import androidx.compose.material.icons.rounded.Tag
|
||||
import androidx.compose.material.icons.rounded.Warning
|
||||
import androidx.compose.material3.Button
|
||||
import androidx.compose.material3.Icon
|
||||
import androidx.compose.material3.MaterialTheme
|
||||
@@ -55,6 +49,7 @@ import androidx.compose.ui.graphics.Color
|
||||
import androidx.compose.ui.graphics.PathEffect
|
||||
import androidx.compose.ui.graphics.drawscope.Stroke
|
||||
import androidx.compose.ui.platform.LocalDensity
|
||||
import androidx.compose.ui.res.painterResource
|
||||
import androidx.compose.ui.res.pluralStringResource
|
||||
import androidx.compose.ui.res.stringResource
|
||||
import androidx.compose.ui.text.style.TextOverflow
|
||||
@@ -143,12 +138,12 @@ fun CreateNewTagPage(viewModel: EditTagSheetVM, paddingValues: PaddingValues) {
|
||||
fun PickItems(viewModel: EditTagSheetVM, paddingValues: PaddingValues) {
|
||||
val columns = LocalGridSettings.current.columnCount - 1
|
||||
|
||||
Scaffold (
|
||||
Scaffold(
|
||||
contentWindowInsets = WindowInsets(0.dp),
|
||||
modifier = Modifier.padding(paddingValues),
|
||||
containerColor = Color.Transparent,
|
||||
bottomBar = {
|
||||
Surface (
|
||||
Surface(
|
||||
modifier = Modifier.fillMaxWidth(),
|
||||
color = MaterialTheme.colorScheme.surface.copy(alpha = 0.95f),
|
||||
shape = MaterialTheme.shapes.medium
|
||||
@@ -248,7 +243,11 @@ fun ListItem(
|
||||
onTagChanged(false)
|
||||
}
|
||||
) {
|
||||
Icon(Icons.Rounded.Check, null, modifier = Modifier.padding(4.dp))
|
||||
Icon(
|
||||
painterResource(R.drawable.check_20px),
|
||||
null,
|
||||
modifier = Modifier.padding(4.dp)
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -312,7 +311,8 @@ fun CustomizeTag(viewModel: EditTagSheetVM, paddingValues: PaddingValues) {
|
||||
contentAlignment = Alignment.Center,
|
||||
) {
|
||||
if (tagIcon != null) {
|
||||
var icon = remember(viewModel.tagIcon) { viewModel.tagIcon }.collectAsState(null)
|
||||
var icon =
|
||||
remember(viewModel.tagIcon) { viewModel.tagIcon }.collectAsState(null)
|
||||
ShapedLauncherIcon(
|
||||
size = 56.dp,
|
||||
icon = { icon.value },
|
||||
@@ -320,7 +320,7 @@ fun CustomizeTag(viewModel: EditTagSheetVM, paddingValues: PaddingValues) {
|
||||
)
|
||||
} else {
|
||||
Icon(
|
||||
Icons.Rounded.Tag,
|
||||
painterResource(R.drawable.tag_24px),
|
||||
null,
|
||||
tint = MaterialTheme.colorScheme.onSurfaceVariant,
|
||||
)
|
||||
@@ -397,7 +397,7 @@ fun CustomizeTag(viewModel: EditTagSheetVM, paddingValues: PaddingValues) {
|
||||
AnimatedVisibility(viewModel.tagNameExists || viewModel.taggedItems.isEmpty() || viewModel.tagName.isEmpty()) {
|
||||
SmallMessage(
|
||||
modifier = Modifier.fillMaxWidth(),
|
||||
icon = Icons.Rounded.Warning,
|
||||
icon = R.drawable.warning_24px,
|
||||
text = stringResource(
|
||||
if (viewModel.taggedItems.isEmpty()) R.string.tag_no_items_message
|
||||
else if (viewModel.tagNameExists) R.string.tag_exists_message
|
||||
@@ -413,7 +413,7 @@ fun PickIcon(
|
||||
viewModel: EditTagSheetVM,
|
||||
paddingValues: PaddingValues
|
||||
) {
|
||||
val icon by remember (viewModel.tagCustomIcon) { viewModel.tagCustomIcon }.collectAsState()
|
||||
val icon by remember(viewModel.tagCustomIcon) { viewModel.tagCustomIcon }.collectAsState()
|
||||
val tag = Tag(viewModel.tagName)
|
||||
var selectedTabIndex = remember {
|
||||
mutableIntStateOf(
|
||||
@@ -433,14 +433,14 @@ fun PickIcon(
|
||||
) {
|
||||
SegmentedButton(
|
||||
selected = selectedTabIndex.intValue == 0,
|
||||
icon = { Icon(Icons.Rounded.Apps, null) },
|
||||
icon = { Icon(painterResource(R.drawable.apps_24px), null) },
|
||||
label = { Text("Icon") },
|
||||
onClick = { selectedTabIndex.intValue = 0 },
|
||||
shape = SegmentedButtonDefaults.itemShape(0, 2)
|
||||
)
|
||||
SegmentedButton(
|
||||
selected = selectedTabIndex.intValue == 1,
|
||||
icon = { Icon(Icons.Rounded.EmojiEmotions, null) },
|
||||
icon = { Icon(painterResource(R.drawable.mood_24px), null) },
|
||||
label = { Text("Emoji") },
|
||||
onClick = { selectedTabIndex.intValue = 1 },
|
||||
shape = SegmentedButtonDefaults.itemShape(1, 2)
|
||||
|
||||
@@ -27,17 +27,6 @@ import androidx.compose.foundation.layout.size
|
||||
import androidx.compose.foundation.lazy.LazyColumn
|
||||
import androidx.compose.foundation.lazy.items
|
||||
import androidx.compose.foundation.shape.CircleShape
|
||||
import androidx.compose.material.icons.Icons
|
||||
import androidx.compose.material.icons.rounded.Clear
|
||||
import androidx.compose.material.icons.rounded.ExpandMore
|
||||
import androidx.compose.material.icons.rounded.LightMode
|
||||
import androidx.compose.material.icons.rounded.MusicNote
|
||||
import androidx.compose.material.icons.rounded.Search
|
||||
import androidx.compose.material.icons.rounded.Star
|
||||
import androidx.compose.material.icons.rounded.StickyNote2
|
||||
import androidx.compose.material.icons.rounded.Today
|
||||
import androidx.compose.material.icons.rounded.Widgets
|
||||
import androidx.compose.material.icons.rounded.Work
|
||||
import androidx.compose.material3.Icon
|
||||
import androidx.compose.material3.IconButton
|
||||
import androidx.compose.material3.MaterialTheme
|
||||
@@ -57,6 +46,7 @@ import androidx.compose.ui.graphics.Brush
|
||||
import androidx.compose.ui.graphics.Color
|
||||
import androidx.compose.ui.platform.LocalContext
|
||||
import androidx.compose.ui.platform.LocalDensity
|
||||
import androidx.compose.ui.res.painterResource
|
||||
import androidx.compose.ui.res.stringResource
|
||||
import androidx.compose.ui.text.style.TextOverflow
|
||||
import androidx.compose.ui.unit.Density
|
||||
@@ -308,12 +298,12 @@ fun WidgetPickerSheet(
|
||||
Text(stringResource(R.string.search_bar_placeholder))
|
||||
},
|
||||
leadingIcon = {
|
||||
Icon(Icons.Rounded.Search, null)
|
||||
Icon(painterResource(R.drawable.search_24px), null)
|
||||
},
|
||||
trailingIcon = {
|
||||
if (query.isNotEmpty()) {
|
||||
IconButton(onClick = { viewModel.search("") }) {
|
||||
Icon(Icons.Rounded.Clear, null)
|
||||
Icon(painterResource(R.drawable.close_24px), null)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -344,14 +334,16 @@ fun WidgetPickerSheet(
|
||||
verticalAlignment = Alignment.CenterVertically
|
||||
) {
|
||||
Icon(
|
||||
imageVector = when (it.type) {
|
||||
WeatherWidget.Type -> Icons.Rounded.LightMode
|
||||
CalendarWidget.Type -> Icons.Rounded.Today
|
||||
MusicWidget.Type -> Icons.Rounded.MusicNote
|
||||
FavoritesWidget.Type -> Icons.Rounded.Star
|
||||
NotesWidget.Type -> Icons.Rounded.StickyNote2
|
||||
else -> Icons.Rounded.Widgets
|
||||
},
|
||||
painter =
|
||||
painterResource(
|
||||
when (it.type) {
|
||||
WeatherWidget.Type -> R.drawable.light_mode_24px
|
||||
CalendarWidget.Type -> R.drawable.today_24px
|
||||
MusicWidget.Type -> R.drawable.music_note_24px
|
||||
FavoritesWidget.Type -> R.drawable.star_24px
|
||||
NotesWidget.Type -> R.drawable.sticky_note_2_24px
|
||||
else -> R.drawable.widgets_24px
|
||||
}),
|
||||
contentDescription = null,
|
||||
modifier = Modifier.padding(end = 16.dp)
|
||||
)
|
||||
@@ -402,7 +394,7 @@ fun WidgetPickerSheet(
|
||||
if (!expandAllGroups) {
|
||||
Icon(
|
||||
modifier = Modifier.rotate(rotate),
|
||||
imageVector = Icons.Rounded.ExpandMore,
|
||||
painter = painterResource(R.drawable.keyboard_arrow_down_24px),
|
||||
contentDescription = null
|
||||
)
|
||||
}
|
||||
@@ -465,7 +457,7 @@ fun WidgetPickerSheet(
|
||||
.clip(CircleShape)
|
||||
.background(MaterialTheme.colorScheme.tertiaryContainer)
|
||||
.padding(4.dp),
|
||||
imageVector = Icons.Rounded.Work,
|
||||
painter = painterResource(R.drawable.enterprise_24px),
|
||||
contentDescription = null,
|
||||
tint = MaterialTheme.colorScheme.onTertiaryContainer
|
||||
)
|
||||
|
||||
@@ -32,6 +32,7 @@ import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.layout.onPlaced
|
||||
import androidx.compose.ui.layout.positionInParent
|
||||
import androidx.compose.ui.platform.LocalContext
|
||||
import androidx.compose.ui.res.painterResource
|
||||
import androidx.compose.ui.res.stringResource
|
||||
import androidx.compose.ui.semantics.Role
|
||||
import androidx.compose.ui.semantics.contentDescription
|
||||
@@ -158,8 +159,6 @@ fun WidgetColumn(
|
||||
if (editMode) R.string.widget_add_widget
|
||||
else R.string.menu_edit_widgets
|
||||
)
|
||||
val icon =
|
||||
AnimatedImageVector.animatedVectorResource(R.drawable.anim_ic_edit_add)
|
||||
|
||||
Button(
|
||||
modifier = Modifier.align(Alignment.CenterHorizontally).padding(vertical = 8.dp),
|
||||
@@ -175,9 +174,8 @@ fun WidgetColumn(
|
||||
Icon(
|
||||
modifier = Modifier.padding(end = ButtonDefaults.IconSpacing)
|
||||
.size(ButtonDefaults.IconSize),
|
||||
painter = rememberAnimatedVectorPainter(
|
||||
animatedImageVector = icon,
|
||||
atEnd = !editMode
|
||||
painter = painterResource(
|
||||
if (editMode) R.drawable.add_20px else R.drawable.edit_20px
|
||||
), contentDescription = null
|
||||
)
|
||||
Text(title)
|
||||
|
||||
@@ -11,10 +11,6 @@ import androidx.compose.foundation.gestures.rememberDraggableState
|
||||
import androidx.compose.foundation.layout.Column
|
||||
import androidx.compose.foundation.layout.Row
|
||||
import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.material.icons.Icons
|
||||
import androidx.compose.material.icons.rounded.Delete
|
||||
import androidx.compose.material.icons.rounded.DragIndicator
|
||||
import androidx.compose.material.icons.rounded.Tune
|
||||
import androidx.compose.material3.Icon
|
||||
import androidx.compose.material3.IconButton
|
||||
import androidx.compose.material3.MaterialTheme
|
||||
@@ -28,6 +24,7 @@ import androidx.compose.runtime.setValue
|
||||
import androidx.compose.ui.Alignment
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.platform.LocalContext
|
||||
import androidx.compose.ui.res.painterResource
|
||||
import androidx.compose.ui.res.stringResource
|
||||
import androidx.compose.ui.text.style.TextOverflow
|
||||
import androidx.compose.ui.unit.dp
|
||||
@@ -89,7 +86,7 @@ fun WidgetItem(
|
||||
verticalAlignment = Alignment.CenterVertically
|
||||
) {
|
||||
Icon(
|
||||
imageVector = Icons.Rounded.DragIndicator,
|
||||
painterResource(R.drawable.drag_indicator_24px),
|
||||
contentDescription = null,
|
||||
modifier = Modifier.draggable(
|
||||
state = draggableState,
|
||||
@@ -129,13 +126,13 @@ fun WidgetItem(
|
||||
configure = true
|
||||
}) {
|
||||
Icon(
|
||||
imageVector = Icons.Rounded.Tune,
|
||||
painterResource(R.drawable.tune_24px),
|
||||
contentDescription = stringResource(R.string.settings)
|
||||
)
|
||||
}
|
||||
IconButton(onClick = { onWidgetRemove() }) {
|
||||
Icon(
|
||||
imageVector = Icons.Rounded.Delete,
|
||||
painterResource(R.drawable.delete_24px),
|
||||
contentDescription = stringResource(R.string.widget_action_remove)
|
||||
)
|
||||
}
|
||||
|
||||
@@ -4,7 +4,6 @@ import android.content.Context
|
||||
import android.text.format.DateUtils
|
||||
import androidx.appcompat.app.AppCompatActivity
|
||||
import androidx.compose.animation.AnimatedContent
|
||||
import androidx.compose.animation.animateContentSize
|
||||
import androidx.compose.animation.fadeIn
|
||||
import androidx.compose.animation.fadeOut
|
||||
import androidx.compose.animation.slideIn
|
||||
@@ -17,13 +16,6 @@ import androidx.compose.foundation.layout.Column
|
||||
import androidx.compose.foundation.layout.Row
|
||||
import androidx.compose.foundation.layout.fillMaxWidth
|
||||
import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.material.icons.Icons
|
||||
import androidx.compose.material.icons.automirrored.rounded.OpenInNew
|
||||
import androidx.compose.material.icons.rounded.Add
|
||||
import androidx.compose.material.icons.rounded.ArrowDropDown
|
||||
import androidx.compose.material.icons.rounded.ChevronLeft
|
||||
import androidx.compose.material.icons.rounded.ChevronRight
|
||||
import androidx.compose.material.icons.rounded.OpenInNew
|
||||
import androidx.compose.material3.DropdownMenu
|
||||
import androidx.compose.material3.DropdownMenuItem
|
||||
import androidx.compose.material3.Icon
|
||||
@@ -42,6 +34,7 @@ import androidx.compose.ui.Alignment
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.draw.clip
|
||||
import androidx.compose.ui.platform.LocalContext
|
||||
import androidx.compose.ui.res.painterResource
|
||||
import androidx.compose.ui.res.pluralStringResource
|
||||
import androidx.compose.ui.res.stringResource
|
||||
import androidx.compose.ui.text.style.TextOverflow
|
||||
@@ -87,7 +80,7 @@ fun CalendarWidget(
|
||||
modifier = Modifier.padding(start = 8.dp, end = 8.dp, top = 8.dp, bottom = 4.dp)
|
||||
) {
|
||||
IconButton(onClick = { viewModel.previousDay() }) {
|
||||
Icon(imageVector = Icons.Rounded.ChevronLeft, contentDescription = stringResource(R.string.calendar_widget_previous_day))
|
||||
Icon(painter = painterResource(R.drawable.chevron_backward_24px), contentDescription = stringResource(R.string.calendar_widget_previous_day))
|
||||
}
|
||||
Box(
|
||||
modifier = Modifier.weight(1f),
|
||||
@@ -103,7 +96,7 @@ fun CalendarWidget(
|
||||
overflow = TextOverflow.Ellipsis
|
||||
)
|
||||
Icon(
|
||||
imageVector = Icons.Rounded.ArrowDropDown,
|
||||
painterResource(R.drawable.arrow_drop_down_24px),
|
||||
contentDescription = null,
|
||||
tint = MaterialTheme.colorScheme.onSurface,
|
||||
)
|
||||
@@ -121,13 +114,13 @@ fun CalendarWidget(
|
||||
}
|
||||
}
|
||||
IconButton(onClick = { viewModel.nextDay() }) {
|
||||
Icon(imageVector = Icons.Rounded.ChevronRight, contentDescription = stringResource(R.string.calendar_widget_next_day))
|
||||
Icon(painter = painterResource(R.drawable.chevron_forward_24px), contentDescription = stringResource(R.string.calendar_widget_next_day))
|
||||
}
|
||||
IconButton(onClick = { viewModel.createEvent(context) }) {
|
||||
Icon(imageVector = Icons.Rounded.Add, contentDescription = stringResource(R.string.calendar_widget_create_event))
|
||||
Icon(painter = painterResource(R.drawable.add_24px), contentDescription = stringResource(R.string.calendar_widget_create_event))
|
||||
}
|
||||
IconButton(onClick = { viewModel.openCalendarApp(context) }) {
|
||||
Icon(imageVector = Icons.AutoMirrored.Rounded.OpenInNew, contentDescription = stringResource(R.string.calendar_widget_open_calendar))
|
||||
Icon(painter = painterResource(R.drawable.open_in_new_24px), contentDescription = stringResource(R.string.calendar_widget_open_calendar))
|
||||
}
|
||||
}
|
||||
val events by viewModel.calendarEvents
|
||||
|
||||
@@ -16,26 +16,6 @@ import androidx.compose.foundation.layout.size
|
||||
import androidx.compose.foundation.layout.width
|
||||
import androidx.compose.foundation.rememberScrollState
|
||||
import androidx.compose.foundation.verticalScroll
|
||||
import androidx.compose.material.icons.Icons
|
||||
import androidx.compose.material.icons.filled.Check
|
||||
import androidx.compose.material.icons.rounded.AccessTime
|
||||
import androidx.compose.material.icons.rounded.Alarm
|
||||
import androidx.compose.material.icons.rounded.AlignVerticalBottom
|
||||
import androidx.compose.material.icons.rounded.AlignVerticalCenter
|
||||
import androidx.compose.material.icons.rounded.AlignVerticalTop
|
||||
import androidx.compose.material.icons.rounded.AutoAwesome
|
||||
import androidx.compose.material.icons.rounded.BatteryFull
|
||||
import androidx.compose.material.icons.rounded.ColorLens
|
||||
import androidx.compose.material.icons.rounded.DarkMode
|
||||
import androidx.compose.material.icons.rounded.FormatColorText
|
||||
import androidx.compose.material.icons.rounded.Height
|
||||
import androidx.compose.material.icons.rounded.HorizontalSplit
|
||||
import androidx.compose.material.icons.rounded.LightMode
|
||||
import androidx.compose.material.icons.rounded.MusicNote
|
||||
import androidx.compose.material.icons.rounded.Timer
|
||||
import androidx.compose.material.icons.rounded.Today
|
||||
import androidx.compose.material.icons.rounded.Tune
|
||||
import androidx.compose.material.icons.rounded.VerticalSplit
|
||||
import androidx.compose.material3.DropdownMenu
|
||||
import androidx.compose.material3.DropdownMenuItem
|
||||
import androidx.compose.material3.HorizontalDivider
|
||||
@@ -61,6 +41,7 @@ import androidx.compose.ui.Alignment
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.graphics.Color
|
||||
import androidx.compose.ui.platform.LocalContext
|
||||
import androidx.compose.ui.res.painterResource
|
||||
import androidx.compose.ui.res.stringResource
|
||||
import androidx.compose.ui.text.style.TextOverflow
|
||||
import androidx.compose.ui.unit.dp
|
||||
@@ -152,7 +133,7 @@ fun ClockWidget(
|
||||
configure = true
|
||||
}) {
|
||||
Icon(
|
||||
imageVector = Icons.Rounded.Tune,
|
||||
painterResource(R.drawable.tune_24px),
|
||||
contentDescription = stringResource(R.string.settings)
|
||||
)
|
||||
}
|
||||
@@ -397,13 +378,13 @@ fun ConfigureClockWidgetSheet(
|
||||
active = compact == false,
|
||||
activeContent = {
|
||||
Icon(
|
||||
imageVector = Icons.Filled.Check,
|
||||
painterResource(R.drawable.check_20px),
|
||||
contentDescription = null,
|
||||
)
|
||||
}
|
||||
) {
|
||||
Icon(
|
||||
imageVector = Icons.Rounded.HorizontalSplit,
|
||||
painterResource(R.drawable.splitscreen_top_20px),
|
||||
contentDescription = null,
|
||||
)
|
||||
}
|
||||
@@ -422,13 +403,13 @@ fun ConfigureClockWidgetSheet(
|
||||
active = compact == true,
|
||||
activeContent = {
|
||||
Icon(
|
||||
imageVector = Icons.Filled.Check,
|
||||
painterResource(R.drawable.check_20px),
|
||||
contentDescription = null,
|
||||
)
|
||||
}
|
||||
) {
|
||||
Icon(
|
||||
imageVector = Icons.Rounded.VerticalSplit,
|
||||
painterResource(R.drawable.splitscreen_right_20px),
|
||||
contentDescription = null,
|
||||
)
|
||||
}
|
||||
@@ -463,7 +444,7 @@ fun ConfigureClockWidgetSheet(
|
||||
shape = SegmentedButtonDefaults.itemShape(index = 0, count = 3),
|
||||
) {
|
||||
Icon(
|
||||
imageVector = Icons.Rounded.AutoAwesome,
|
||||
painterResource(R.drawable.auto_awesome_20dp),
|
||||
contentDescription = null,
|
||||
modifier = Modifier.size(SegmentedButtonDefaults.IconSize)
|
||||
)
|
||||
@@ -476,7 +457,7 @@ fun ConfigureClockWidgetSheet(
|
||||
shape = SegmentedButtonDefaults.itemShape(index = 1, count = 3),
|
||||
) {
|
||||
Icon(
|
||||
imageVector = Icons.Rounded.LightMode,
|
||||
painterResource(R.drawable.light_mode_20px),
|
||||
contentDescription = null,
|
||||
modifier = Modifier.size(SegmentedButtonDefaults.IconSize)
|
||||
)
|
||||
@@ -489,7 +470,7 @@ fun ConfigureClockWidgetSheet(
|
||||
shape = SegmentedButtonDefaults.itemShape(index = 2, count = 3),
|
||||
) {
|
||||
Icon(
|
||||
imageVector = Icons.Rounded.DarkMode,
|
||||
painterResource(R.drawable.dark_mode_20px),
|
||||
contentDescription = null,
|
||||
modifier = Modifier.size(SegmentedButtonDefaults.IconSize)
|
||||
)
|
||||
@@ -503,7 +484,7 @@ fun ConfigureClockWidgetSheet(
|
||||
) {
|
||||
SwitchPreference(
|
||||
title = stringResource(R.string.widget_use_theme_colors),
|
||||
icon = Icons.Rounded.ColorLens,
|
||||
icon = R.drawable.palette_24px,
|
||||
value = useAccentColor,
|
||||
onValueChanged = {
|
||||
viewModel.setUseThemeColor(it)
|
||||
@@ -512,7 +493,7 @@ fun ConfigureClockWidgetSheet(
|
||||
AnimatedVisibility(compact == false && style !is ClockWidgetStyle.Custom) {
|
||||
SwitchPreference(
|
||||
title = stringResource(R.string.preference_clock_widget_show_seconds),
|
||||
icon = Icons.Rounded.Timer,
|
||||
icon = R.drawable.timer_24px,
|
||||
value = showSeconds,
|
||||
onValueChanged = {
|
||||
viewModel.setShowSeconds(it)
|
||||
@@ -526,7 +507,7 @@ fun ConfigureClockWidgetSheet(
|
||||
) {
|
||||
SwitchPreference(
|
||||
title = stringResource(R.string.preference_clock_widget_monospaced),
|
||||
icon = Icons.Rounded.FormatColorText,
|
||||
icon = R.drawable._123_24px,
|
||||
value = monospaced,
|
||||
onValueChanged = {
|
||||
viewModel.setMonospaced(it)
|
||||
@@ -546,7 +527,7 @@ fun ConfigureClockWidgetSheet(
|
||||
TimeFormat.TwentyFourHour -> stringResource(R.string.preference_clock_widget_time_format_24h)
|
||||
TimeFormat.System -> stringResource(R.string.preference_clock_widget_time_format_system)
|
||||
},
|
||||
icon = Icons.Rounded.AccessTime,
|
||||
icon = R.drawable.schedule_24px,
|
||||
onClick = {
|
||||
showDropdown = true
|
||||
}
|
||||
@@ -593,7 +574,7 @@ fun ConfigureClockWidgetSheet(
|
||||
) {
|
||||
SwitchPreference(
|
||||
title = stringResource(R.string.preference_clock_widget_fill_height),
|
||||
icon = Icons.Rounded.Height,
|
||||
icon = R.drawable.fit_page_height_24px,
|
||||
value = fillHeight == true || widgetsOnHome == false,
|
||||
onValueChanged = {
|
||||
viewModel.setFillHeight(it)
|
||||
@@ -609,9 +590,9 @@ fun ConfigureClockWidgetSheet(
|
||||
else -> stringResource(R.string.preference_clock_widget_alignment_bottom)
|
||||
},
|
||||
icon = when (alignment) {
|
||||
ClockWidgetAlignment.Top -> Icons.Rounded.AlignVerticalTop
|
||||
ClockWidgetAlignment.Center -> Icons.Rounded.AlignVerticalCenter
|
||||
else -> Icons.Rounded.AlignVerticalBottom
|
||||
ClockWidgetAlignment.Top -> R.drawable.align_vertical_top_24px
|
||||
ClockWidgetAlignment.Center -> R.drawable.align_vertical_center_24px
|
||||
else -> R.drawable.align_vertical_bottom_24px
|
||||
},
|
||||
onClick = {
|
||||
showDropdown = true
|
||||
@@ -624,7 +605,7 @@ fun ConfigureClockWidgetSheet(
|
||||
DropdownMenuItem(
|
||||
leadingIcon = {
|
||||
Icon(
|
||||
Icons.Rounded.AlignVerticalTop,
|
||||
painterResource(R.drawable.align_vertical_top_24px),
|
||||
null
|
||||
)
|
||||
},
|
||||
@@ -637,7 +618,7 @@ fun ConfigureClockWidgetSheet(
|
||||
DropdownMenuItem(
|
||||
leadingIcon = {
|
||||
Icon(
|
||||
Icons.Rounded.AlignVerticalCenter,
|
||||
painterResource(R.drawable.align_vertical_center_24px),
|
||||
null
|
||||
)
|
||||
},
|
||||
@@ -649,7 +630,7 @@ fun ConfigureClockWidgetSheet(
|
||||
DropdownMenuItem(
|
||||
leadingIcon = {
|
||||
Icon(
|
||||
Icons.Rounded.AlignVerticalBottom,
|
||||
painterResource(R.drawable.align_vertical_bottom_24px),
|
||||
null
|
||||
)
|
||||
},
|
||||
@@ -676,7 +657,7 @@ fun ConfigureClockWidgetSheet(
|
||||
SwitchPreference(
|
||||
title = stringResource(R.string.preference_clockwidget_date_part),
|
||||
summary = stringResource(R.string.preference_clockwidget_date_part_summary),
|
||||
icon = Icons.Rounded.Today,
|
||||
icon = R.drawable.today_24px,
|
||||
value = parts?.date == true,
|
||||
onValueChanged = {
|
||||
viewModel.setDatePart(it)
|
||||
@@ -685,7 +666,7 @@ fun ConfigureClockWidgetSheet(
|
||||
SwitchPreference(
|
||||
title = stringResource(R.string.preference_clockwidget_music_part),
|
||||
summary = stringResource(R.string.preference_clockwidget_music_part_summary),
|
||||
icon = Icons.Rounded.MusicNote,
|
||||
icon = R.drawable.music_note_24px,
|
||||
value = parts?.music == true,
|
||||
onValueChanged = {
|
||||
viewModel.setMusicPart(it)
|
||||
@@ -694,7 +675,7 @@ fun ConfigureClockWidgetSheet(
|
||||
SwitchPreference(
|
||||
title = stringResource(R.string.preference_clockwidget_alarm_part),
|
||||
summary = stringResource(R.string.preference_clockwidget_alarm_part_summary),
|
||||
icon = Icons.Rounded.Alarm,
|
||||
icon = R.drawable.alarm_24px,
|
||||
value = parts?.alarm == true,
|
||||
onValueChanged = {
|
||||
viewModel.setAlarmPart(it)
|
||||
@@ -703,7 +684,7 @@ fun ConfigureClockWidgetSheet(
|
||||
SwitchPreference(
|
||||
title = stringResource(R.string.preference_clockwidget_battery_part),
|
||||
summary = stringResource(R.string.preference_clockwidget_battery_part_summary),
|
||||
icon = Icons.Rounded.BatteryFull,
|
||||
icon = R.drawable.battery_full_24px,
|
||||
value = parts?.battery == true,
|
||||
onValueChanged = {
|
||||
viewModel.setBatteryPart(it)
|
||||
|
||||
@@ -26,19 +26,6 @@ import androidx.compose.foundation.layout.width
|
||||
import androidx.compose.foundation.layout.widthIn
|
||||
import androidx.compose.foundation.pager.HorizontalPager
|
||||
import androidx.compose.foundation.pager.rememberPagerState
|
||||
import androidx.compose.material.icons.Icons
|
||||
import androidx.compose.material.icons.rounded.ArrowDropDown
|
||||
import androidx.compose.material.icons.rounded.CheckCircle
|
||||
import androidx.compose.material.icons.rounded.ChevronLeft
|
||||
import androidx.compose.material.icons.rounded.ChevronRight
|
||||
import androidx.compose.material.icons.rounded.Done
|
||||
import androidx.compose.material.icons.rounded.PhotoSizeSelectSmall
|
||||
import androidx.compose.material.icons.rounded.RadioButtonUnchecked
|
||||
import androidx.compose.material.icons.rounded.RestartAlt
|
||||
import androidx.compose.material.icons.rounded.Settings
|
||||
import androidx.compose.material.icons.rounded.SwapHoriz
|
||||
import androidx.compose.material.icons.rounded.Tune
|
||||
import androidx.compose.material.icons.rounded.Widgets
|
||||
import androidx.compose.material3.ButtonDefaults
|
||||
import androidx.compose.material3.DropdownMenu
|
||||
import androidx.compose.material3.DropdownMenuItem
|
||||
@@ -65,6 +52,7 @@ import androidx.compose.ui.graphics.Color
|
||||
import androidx.compose.ui.input.pointer.PointerEventPass
|
||||
import androidx.compose.ui.input.pointer.pointerInput
|
||||
import androidx.compose.ui.platform.LocalContext
|
||||
import androidx.compose.ui.res.painterResource
|
||||
import androidx.compose.ui.res.stringResource
|
||||
import androidx.compose.ui.text.style.TextAlign
|
||||
import androidx.compose.ui.unit.Dp
|
||||
@@ -162,7 +150,7 @@ fun WatchFaceSelector(
|
||||
modifier = Modifier
|
||||
.padding(4.dp)
|
||||
) {
|
||||
Icon(Icons.Rounded.Tune, null)
|
||||
Icon(painterResource(R.drawable.tune_24px), null)
|
||||
DropdownMenu(
|
||||
expanded = showStyleSettings,
|
||||
onDismissRequest = { showStyleSettings = false }) {
|
||||
@@ -171,8 +159,10 @@ fun WatchFaceSelector(
|
||||
text = { Text(stringResource(R.string.clock_variant_outlined)) },
|
||||
leadingIcon = {
|
||||
Icon(
|
||||
if (selected.outlined) Icons.Rounded.CheckCircle
|
||||
else Icons.Rounded.RadioButtonUnchecked,
|
||||
painterResource(
|
||||
if (selected.outlined) R.drawable.check_circle_24px_filled
|
||||
else R.drawable.circle_24px,
|
||||
),
|
||||
null
|
||||
)
|
||||
},
|
||||
@@ -186,8 +176,10 @@ fun WatchFaceSelector(
|
||||
text = { Text(stringResource(R.string.clock_variant_analog_ticks)) },
|
||||
leadingIcon = {
|
||||
Icon(
|
||||
if (selected.showTicks) Icons.Rounded.CheckCircle
|
||||
else Icons.Rounded.RadioButtonUnchecked,
|
||||
painterResource(
|
||||
if (selected.showTicks) R.drawable.check_circle_24px_filled
|
||||
else R.drawable.circle_24px,
|
||||
),
|
||||
null
|
||||
)
|
||||
},
|
||||
@@ -200,7 +192,7 @@ fun WatchFaceSelector(
|
||||
DropdownMenuItem(
|
||||
text = { Text(stringResource(R.string.widget_pick_widget)) },
|
||||
leadingIcon = {
|
||||
Icon(Icons.Rounded.SwapHoriz, null)
|
||||
Icon(painterResource(R.drawable.swap_horiz_24px), null)
|
||||
},
|
||||
onClick = {
|
||||
showWidgetPicker = true
|
||||
@@ -209,7 +201,7 @@ fun WatchFaceSelector(
|
||||
)
|
||||
DropdownMenuItem(
|
||||
leadingIcon = {
|
||||
Icon(Icons.Rounded.PhotoSizeSelectSmall, null)
|
||||
Icon(painterResource(R.drawable.resize_24px), null)
|
||||
},
|
||||
text = { Text(stringResource(R.string.widget_config_appwidget_resize)) },
|
||||
onClick = { resizeCustomWidget = true }
|
||||
@@ -224,7 +216,7 @@ fun WatchFaceSelector(
|
||||
DropdownMenuItem(
|
||||
text = { Text(stringResource(R.string.widget_config_appwidget_configure)) },
|
||||
leadingIcon = {
|
||||
Icon(Icons.Rounded.Settings, null)
|
||||
Icon(painterResource(R.drawable.settings_24px), null)
|
||||
},
|
||||
onClick = {
|
||||
appWidgetHost.startAppWidgetConfigureActivityForResult(
|
||||
@@ -248,7 +240,7 @@ fun WatchFaceSelector(
|
||||
if (BuildConfig.DEBUG) {
|
||||
DropdownMenuItem(
|
||||
leadingIcon = {
|
||||
Icon(Icons.Rounded.RestartAlt, null)
|
||||
Icon(painterResource(R.drawable.restart_alt_24px), null)
|
||||
},
|
||||
text = { Text("Reset") },
|
||||
onClick = {
|
||||
@@ -307,7 +299,7 @@ fun WatchFaceSelector(
|
||||
modifier = Modifier
|
||||
.padding(end = ButtonDefaults.IconSpacing)
|
||||
.size(ButtonDefaults.IconSize),
|
||||
imageVector = Icons.Rounded.Widgets,
|
||||
painter = painterResource(R.drawable.widgets_20px),
|
||||
contentDescription = null,
|
||||
)
|
||||
Text(stringResource(R.string.widget_pick_widget))
|
||||
@@ -352,7 +344,7 @@ fun WatchFaceSelector(
|
||||
)
|
||||
}
|
||||
}) {
|
||||
Icon(Icons.Rounded.ChevronLeft, null)
|
||||
Icon(painterResource(R.drawable.chevron_backward_24px), null)
|
||||
}
|
||||
var showStyleDropdown by remember { mutableStateOf(false) }
|
||||
TextButton(
|
||||
@@ -378,7 +370,7 @@ fun WatchFaceSelector(
|
||||
textAlign = TextAlign.Center,
|
||||
)
|
||||
Icon(
|
||||
Icons.Rounded.ArrowDropDown,
|
||||
painterResource(R.drawable.arrow_drop_down_20px),
|
||||
null,
|
||||
modifier = Modifier
|
||||
.padding(ButtonDefaults.IconSpacing)
|
||||
@@ -417,7 +409,7 @@ fun WatchFaceSelector(
|
||||
)
|
||||
}
|
||||
}) {
|
||||
Icon(Icons.Rounded.ChevronRight, null)
|
||||
Icon(painterResource(R.drawable.chevron_forward_24px), null)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -599,7 +591,7 @@ private fun ResizeCustomWidget(
|
||||
.offset(y = 64.dp),
|
||||
onClick = onExit
|
||||
) {
|
||||
Icon(Icons.Rounded.Done, null)
|
||||
Icon(painterResource(R.drawable.check_24px), null)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -9,8 +9,6 @@ import android.provider.AlarmClock
|
||||
import android.text.format.DateUtils
|
||||
import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.foundation.layout.size
|
||||
import androidx.compose.material.icons.Icons
|
||||
import androidx.compose.material.icons.rounded.Alarm
|
||||
import androidx.compose.material3.*
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.runtime.collectAsState
|
||||
@@ -18,9 +16,11 @@ import androidx.compose.runtime.getValue
|
||||
import androidx.compose.runtime.mutableStateOf
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.platform.LocalContext
|
||||
import androidx.compose.ui.res.painterResource
|
||||
import androidx.compose.ui.unit.dp
|
||||
import androidx.core.content.getSystemService
|
||||
import de.mm20.launcher2.ktx.tryStartActivity
|
||||
import de.mm20.launcher2.ui.R
|
||||
import kotlinx.coroutines.channels.awaitClose
|
||||
import kotlinx.coroutines.channels.trySendBlocking
|
||||
import kotlinx.coroutines.flow.*
|
||||
@@ -89,7 +89,7 @@ class AlarmPartProvider : PartProvider {
|
||||
)
|
||||
) {
|
||||
Icon(
|
||||
imageVector = Icons.Rounded.Alarm,
|
||||
painterResource(R.drawable.alarm_24px),
|
||||
contentDescription = null
|
||||
)
|
||||
Text(
|
||||
@@ -113,7 +113,7 @@ class AlarmPartProvider : PartProvider {
|
||||
) {
|
||||
Icon(
|
||||
modifier = Modifier.padding(end = 8.dp).size(32.dp),
|
||||
imageVector = Icons.Rounded.Alarm,
|
||||
painter = painterResource(R.drawable.alarm_24px),
|
||||
contentDescription = null
|
||||
)
|
||||
Text(
|
||||
|
||||
@@ -10,9 +10,6 @@ import androidx.compose.foundation.layout.Column
|
||||
import androidx.compose.foundation.layout.Row
|
||||
import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.foundation.layout.size
|
||||
import androidx.compose.material.icons.Icons
|
||||
import androidx.compose.material.icons.rounded.BatteryChargingFull
|
||||
import androidx.compose.material.icons.rounded.BatteryFull
|
||||
import androidx.compose.material3.Icon
|
||||
import androidx.compose.material3.MaterialTheme
|
||||
import androidx.compose.material3.Text
|
||||
@@ -21,25 +18,11 @@ import androidx.compose.runtime.collectAsState
|
||||
import androidx.compose.runtime.getValue
|
||||
import androidx.compose.ui.Alignment
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.graphics.vector.ImageVector
|
||||
import androidx.compose.ui.res.painterResource
|
||||
import androidx.compose.ui.res.pluralStringResource
|
||||
import androidx.compose.ui.res.stringResource
|
||||
import androidx.compose.ui.unit.dp
|
||||
import androidx.core.content.getSystemService
|
||||
import de.mm20.launcher2.icons.Battery0Bar
|
||||
import de.mm20.launcher2.icons.Battery1Bar
|
||||
import de.mm20.launcher2.icons.Battery2Bar
|
||||
import de.mm20.launcher2.icons.Battery3Bar
|
||||
import de.mm20.launcher2.icons.Battery4Bar
|
||||
import de.mm20.launcher2.icons.Battery5Bar
|
||||
import de.mm20.launcher2.icons.Battery6Bar
|
||||
import de.mm20.launcher2.icons.BatteryCharging0Bar
|
||||
import de.mm20.launcher2.icons.BatteryCharging1Bar
|
||||
import de.mm20.launcher2.icons.BatteryCharging2Bar
|
||||
import de.mm20.launcher2.icons.BatteryCharging3Bar
|
||||
import de.mm20.launcher2.icons.BatteryCharging4Bar
|
||||
import de.mm20.launcher2.icons.BatteryCharging5Bar
|
||||
import de.mm20.launcher2.icons.BatteryCharging6Bar
|
||||
import de.mm20.launcher2.ui.R
|
||||
import kotlinx.coroutines.channels.awaitClose
|
||||
import kotlinx.coroutines.channels.trySendBlocking
|
||||
@@ -77,7 +60,7 @@ class BatteryPartProvider : PartProvider {
|
||||
verticalAlignment = Alignment.CenterVertically
|
||||
) {
|
||||
Icon(
|
||||
imageVector = getBatteryIcon(it),
|
||||
painter = painterResource(getBatteryIcon(it)),
|
||||
contentDescription = null
|
||||
)
|
||||
Text(
|
||||
@@ -104,7 +87,7 @@ class BatteryPartProvider : PartProvider {
|
||||
) {
|
||||
Icon(
|
||||
modifier = Modifier.padding(end = 12.dp).size(36.dp),
|
||||
imageVector = getBatteryIcon(it),
|
||||
painter = painterResource(getBatteryIcon(it)),
|
||||
contentDescription = null
|
||||
)
|
||||
Column {
|
||||
@@ -127,28 +110,25 @@ class BatteryPartProvider : PartProvider {
|
||||
}
|
||||
}
|
||||
|
||||
private fun getBatteryIcon(batteryInfo: BatteryInfo): ImageVector {
|
||||
private fun getBatteryIcon(batteryInfo: BatteryInfo): Int {
|
||||
return if (batteryInfo.charging) {
|
||||
when (batteryInfo.level) {
|
||||
in 0..12 -> Icons.Rounded.BatteryCharging0Bar
|
||||
in 13..25 -> Icons.Rounded.BatteryCharging1Bar
|
||||
in 26..37 -> Icons.Rounded.BatteryCharging2Bar
|
||||
in 38..50 -> Icons.Rounded.BatteryCharging3Bar
|
||||
in 51..63 -> Icons.Rounded.BatteryCharging4Bar
|
||||
in 64..75 -> Icons.Rounded.BatteryCharging5Bar
|
||||
in 76..88 -> Icons.Rounded.BatteryCharging6Bar
|
||||
else -> Icons.Rounded.BatteryChargingFull
|
||||
in 0..25 -> R.drawable.battery_charging_20_24px
|
||||
in 26..55 -> R.drawable.battery_charging_30_24px
|
||||
in 56..85 -> R.drawable.battery_charging_80_24px
|
||||
in 86..95 -> R.drawable.battery_charging_90_24px
|
||||
else -> R.drawable.battery_charging_full_24px
|
||||
}
|
||||
} else {
|
||||
when (batteryInfo.level) {
|
||||
in 0..12 -> Icons.Rounded.Battery0Bar
|
||||
in 13..25 -> Icons.Rounded.Battery1Bar
|
||||
in 26..37 -> Icons.Rounded.Battery2Bar
|
||||
in 38..50 -> Icons.Rounded.Battery3Bar
|
||||
in 51..63 -> Icons.Rounded.Battery4Bar
|
||||
in 64..75 -> Icons.Rounded.Battery5Bar
|
||||
in 76..88 -> Icons.Rounded.Battery6Bar
|
||||
else -> Icons.Rounded.BatteryFull
|
||||
in 0..12 -> R.drawable.battery_0_bar_24px
|
||||
in 13..25 -> R.drawable.battery_1_bar_24px
|
||||
in 26..37 -> R.drawable.battery_2_bar_24px
|
||||
in 38..50 -> R.drawable.battery_3_bar_24px
|
||||
in 51..63 -> R.drawable.battery_4_bar_24px
|
||||
in 64..75 -> R.drawable.battery_5_bar_24px
|
||||
in 76..88 -> R.drawable.battery_6_bar_24px
|
||||
else -> R.drawable.battery_full_24px
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,16 +2,18 @@ package de.mm20.launcher2.ui.launcher.widgets.clock.parts
|
||||
|
||||
import android.app.PendingIntent
|
||||
import android.content.Context
|
||||
import androidx.compose.animation.AnimatedContent
|
||||
import androidx.compose.animation.core.animateFloatAsState
|
||||
import androidx.compose.animation.fadeIn
|
||||
import androidx.compose.animation.fadeOut
|
||||
import androidx.compose.animation.graphics.res.animatedVectorResource
|
||||
import androidx.compose.animation.graphics.res.rememberAnimatedVectorPainter
|
||||
import androidx.compose.animation.graphics.vector.AnimatedImageVector
|
||||
import androidx.compose.animation.togetherWith
|
||||
import androidx.compose.foundation.combinedClickable
|
||||
import androidx.compose.foundation.layout.Column
|
||||
import androidx.compose.foundation.layout.Row
|
||||
import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.material.icons.Icons
|
||||
import androidx.compose.material.icons.rounded.SkipNext
|
||||
import androidx.compose.material.icons.rounded.SkipPrevious
|
||||
import androidx.compose.material3.Icon
|
||||
import androidx.compose.material3.IconButton
|
||||
import androidx.compose.material3.MaterialTheme
|
||||
@@ -21,7 +23,9 @@ import androidx.compose.runtime.collectAsState
|
||||
import androidx.compose.runtime.getValue
|
||||
import androidx.compose.ui.Alignment
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.draw.rotate
|
||||
import androidx.compose.ui.platform.LocalContext
|
||||
import androidx.compose.ui.res.painterResource
|
||||
import androidx.compose.ui.res.stringResource
|
||||
import androidx.compose.ui.text.style.TextAlign
|
||||
import androidx.compose.ui.text.style.TextOverflow
|
||||
@@ -58,8 +62,6 @@ class MusicPartProvider : PartProvider, KoinComponent {
|
||||
val state by musicService.playbackState.collectAsState(PlaybackState.Stopped)
|
||||
val supportedActions by musicService.supportedActions.collectAsState(SupportedActions())
|
||||
|
||||
val playIcon = AnimatedImageVector.animatedVectorResource(R.drawable.anim_ic_play_pause)
|
||||
|
||||
if (compactLayout) {
|
||||
Row(
|
||||
verticalAlignment = Alignment.CenterVertically
|
||||
@@ -101,20 +103,35 @@ class MusicPartProvider : PartProvider, KoinComponent {
|
||||
}
|
||||
}
|
||||
IconButton(onClick = { musicService.togglePause() }) {
|
||||
Icon(
|
||||
painter = rememberAnimatedVectorPainter(
|
||||
animatedImageVector = playIcon,
|
||||
atEnd = state == PlaybackState.Playing
|
||||
), contentDescription = stringResource(
|
||||
if (state == PlaybackState.Playing) R.string.music_widget_pause
|
||||
else R.string.music_widget_play
|
||||
AnimatedContent(
|
||||
state == PlaybackState.Playing,
|
||||
transitionSpec = {
|
||||
fadeIn().togetherWith(fadeOut())
|
||||
},
|
||||
modifier = Modifier.rotate(
|
||||
animateFloatAsState(
|
||||
if (state == PlaybackState.Playing) 90f else 0f
|
||||
).value
|
||||
)
|
||||
)
|
||||
) {
|
||||
if (it) {
|
||||
Icon(
|
||||
painterResource(R.drawable.pause_24px),
|
||||
stringResource(R.string.music_widget_pause),
|
||||
modifier = Modifier.rotate(-90f)
|
||||
)
|
||||
} else {
|
||||
Icon(
|
||||
painterResource(R.drawable.play_arrow_24px),
|
||||
stringResource(R.string.music_widget_play),
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
if (supportedActions.skipToNext) {
|
||||
IconButton(onClick = { musicService.next() }) {
|
||||
Icon(
|
||||
imageVector = Icons.Rounded.SkipNext,
|
||||
painterResource(R.drawable.skip_next_24px),
|
||||
contentDescription = stringResource(R.string.music_widget_next_track)
|
||||
)
|
||||
}
|
||||
@@ -164,26 +181,41 @@ class MusicPartProvider : PartProvider, KoinComponent {
|
||||
if (supportedActions.skipToPrevious) {
|
||||
IconButton(onClick = { musicService.previous() }) {
|
||||
Icon(
|
||||
imageVector = Icons.Rounded.SkipPrevious,
|
||||
painterResource(R.drawable.skip_previous_24px),
|
||||
contentDescription = stringResource(R.string.music_widget_previous_track)
|
||||
)
|
||||
}
|
||||
}
|
||||
IconButton(onClick = { musicService.togglePause() }) {
|
||||
Icon(
|
||||
painter = rememberAnimatedVectorPainter(
|
||||
animatedImageVector = playIcon,
|
||||
atEnd = state == PlaybackState.Playing
|
||||
), contentDescription = stringResource(
|
||||
if (state == PlaybackState.Playing) R.string.music_widget_pause
|
||||
else R.string.music_widget_play
|
||||
AnimatedContent(
|
||||
state == PlaybackState.Playing,
|
||||
transitionSpec = {
|
||||
fadeIn().togetherWith(fadeOut())
|
||||
},
|
||||
modifier = Modifier.rotate(
|
||||
animateFloatAsState(
|
||||
if (state == PlaybackState.Playing) 90f else 0f
|
||||
).value
|
||||
)
|
||||
)
|
||||
) {
|
||||
if (it) {
|
||||
Icon(
|
||||
painterResource(R.drawable.pause_24px),
|
||||
stringResource(R.string.music_widget_pause),
|
||||
modifier = Modifier.rotate(-90f)
|
||||
)
|
||||
} else {
|
||||
Icon(
|
||||
painterResource(R.drawable.play_arrow_24px),
|
||||
stringResource(R.string.music_widget_play),
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
if (supportedActions.skipToPrevious) {
|
||||
IconButton(onClick = { musicService.next() }) {
|
||||
Icon(
|
||||
imageVector = Icons.Rounded.SkipNext,
|
||||
painterResource(R.drawable.skip_next_24px),
|
||||
contentDescription = stringResource(R.string.music_widget_next_track)
|
||||
)
|
||||
}
|
||||
|
||||
@@ -6,10 +6,7 @@ import androidx.compose.foundation.layout.Box
|
||||
import androidx.compose.foundation.layout.fillMaxWidth
|
||||
import androidx.compose.foundation.layout.height
|
||||
import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.foundation.layout.requiredWidth
|
||||
import androidx.compose.foundation.layout.width
|
||||
import androidx.compose.material.icons.Icons
|
||||
import androidx.compose.material.icons.rounded.Warning
|
||||
import androidx.compose.material3.Button
|
||||
import androidx.compose.material3.OutlinedButton
|
||||
import androidx.compose.material3.Text
|
||||
@@ -61,7 +58,7 @@ fun AppWidget(
|
||||
Banner(
|
||||
modifier = Modifier.padding(16.dp),
|
||||
text = stringResource(R.string.app_widget_loading_failed),
|
||||
icon = Icons.Rounded.Warning,
|
||||
icon = R.drawable.warning_24px,
|
||||
secondaryAction = {
|
||||
OutlinedButton(onClick = onWidgetRemove) {
|
||||
Text(stringResource(R.string.widget_action_remove))
|
||||
|
||||
@@ -1,16 +1,8 @@
|
||||
package de.mm20.launcher2.ui.launcher.widgets.favorites
|
||||
|
||||
import androidx.compose.animation.AnimatedContent
|
||||
import androidx.compose.animation.Crossfade
|
||||
import androidx.compose.animation.fadeIn
|
||||
import androidx.compose.animation.fadeOut
|
||||
import androidx.compose.animation.togetherWith
|
||||
import androidx.compose.foundation.layout.Column
|
||||
import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.foundation.rememberScrollState
|
||||
import androidx.compose.material.icons.Icons
|
||||
import androidx.compose.material.icons.rounded.Star
|
||||
import androidx.compose.material.icons.rounded.Tag
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.runtime.LaunchedEffect
|
||||
import androidx.compose.runtime.collectAsState
|
||||
@@ -52,7 +44,7 @@ fun FavoritesWidget(widget: FavoritesWidget) {
|
||||
text = stringResource(
|
||||
if (selectedTag == null) R.string.favorites_empty else R.string.favorites_empty_tag
|
||||
),
|
||||
icon = if (selectedTag == null) Icons.Rounded.Star else Icons.Rounded.Tag,
|
||||
icon = if (selectedTag == null) R.drawable.star_24px else R.drawable.tag_24px,
|
||||
)
|
||||
}
|
||||
if (pinnedTags.isNotEmpty() || favoritesEditButton) {
|
||||
|
||||
@@ -6,6 +6,7 @@ import android.media.session.PlaybackState.CustomAction
|
||||
import androidx.appcompat.app.AppCompatActivity
|
||||
import androidx.compose.animation.AnimatedContent
|
||||
import androidx.compose.animation.AnimatedVisibility
|
||||
import androidx.compose.animation.core.animateFloatAsState
|
||||
import androidx.compose.animation.core.tween
|
||||
import androidx.compose.animation.fadeIn
|
||||
import androidx.compose.animation.fadeOut
|
||||
@@ -35,12 +36,6 @@ import androidx.compose.foundation.layout.requiredHeightIn
|
||||
import androidx.compose.foundation.layout.size
|
||||
import androidx.compose.foundation.layout.wrapContentHeight
|
||||
import androidx.compose.foundation.shape.RoundedCornerShape
|
||||
import androidx.compose.material.icons.Icons
|
||||
import androidx.compose.material.icons.rounded.Audiotrack
|
||||
import androidx.compose.material.icons.rounded.MoreVert
|
||||
import androidx.compose.material.icons.rounded.MusicNote
|
||||
import androidx.compose.material.icons.rounded.SkipNext
|
||||
import androidx.compose.material.icons.rounded.SkipPrevious
|
||||
import androidx.compose.material3.DropdownMenu
|
||||
import androidx.compose.material3.DropdownMenuItem
|
||||
import androidx.compose.material3.FilledTonalIconButton
|
||||
@@ -60,12 +55,14 @@ import androidx.compose.runtime.setValue
|
||||
import androidx.compose.ui.Alignment
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.draw.clip
|
||||
import androidx.compose.ui.draw.rotate
|
||||
import androidx.compose.ui.graphics.StrokeCap
|
||||
import androidx.compose.ui.graphics.asImageBitmap
|
||||
import androidx.compose.ui.layout.ContentScale
|
||||
import androidx.compose.ui.layout.boundsInWindow
|
||||
import androidx.compose.ui.layout.onGloballyPositioned
|
||||
import androidx.compose.ui.platform.LocalContext
|
||||
import androidx.compose.ui.res.painterResource
|
||||
import androidx.compose.ui.res.stringResource
|
||||
import androidx.compose.ui.semantics.contentDescription
|
||||
import androidx.compose.ui.semantics.semantics
|
||||
@@ -309,7 +306,7 @@ fun MusicWidget(widget: MusicWidget) {
|
||||
}
|
||||
} else {
|
||||
Icon(
|
||||
imageVector = Icons.Rounded.MusicNote,
|
||||
painterResource(R.drawable.music_note_48px),
|
||||
contentDescription = null,
|
||||
tint = MaterialTheme.colorScheme.onSecondaryContainer,
|
||||
modifier = Modifier.size(48.dp)
|
||||
@@ -336,7 +333,7 @@ fun MusicWidget(widget: MusicWidget) {
|
||||
viewModel.skipPrevious()
|
||||
}) {
|
||||
Icon(
|
||||
imageVector = Icons.Rounded.SkipPrevious,
|
||||
painter = painterResource(R.drawable.skip_previous_24px),
|
||||
stringResource(R.string.music_widget_previous_track)
|
||||
)
|
||||
}
|
||||
@@ -356,16 +353,30 @@ fun MusicWidget(widget: MusicWidget) {
|
||||
),
|
||||
onClick = { viewModel.togglePause() },
|
||||
) {
|
||||
Icon(
|
||||
painter = rememberAnimatedVectorPainter(
|
||||
playPauseIcon,
|
||||
atEnd = playbackState == PlaybackState.Playing
|
||||
),
|
||||
contentDescription = stringResource(
|
||||
if (playbackState == PlaybackState.Playing) R.string.music_widget_pause
|
||||
else R.string.music_widget_play
|
||||
AnimatedContent(
|
||||
playbackState == PlaybackState.Playing,
|
||||
transitionSpec = {
|
||||
fadeIn().togetherWith(fadeOut())
|
||||
},
|
||||
modifier = Modifier.rotate(
|
||||
animateFloatAsState(
|
||||
if (playbackState == PlaybackState.Playing) 90f else 0f
|
||||
).value
|
||||
)
|
||||
)
|
||||
) {
|
||||
if (it) {
|
||||
Icon(
|
||||
painterResource(R.drawable.pause_24px),
|
||||
stringResource(R.string.music_widget_pause),
|
||||
modifier = Modifier.rotate(-90f)
|
||||
)
|
||||
} else {
|
||||
Icon(
|
||||
painterResource(R.drawable.play_arrow_24px),
|
||||
stringResource(R.string.music_widget_play),
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if (supportedActions.skipToNext) {
|
||||
@@ -376,7 +387,7 @@ fun MusicWidget(widget: MusicWidget) {
|
||||
viewModel.skipNext()
|
||||
}) {
|
||||
Icon(
|
||||
imageVector = Icons.Rounded.SkipNext,
|
||||
painter = painterResource(R.drawable.skip_next_24px),
|
||||
stringResource(R.string.music_widget_next_track)
|
||||
)
|
||||
}
|
||||
@@ -423,7 +434,10 @@ fun CustomActions(
|
||||
tooltipText = stringResource(R.string.action_more_actions)
|
||||
) {
|
||||
IconButton(onClick = { showOverflowMenu = true }) {
|
||||
Icon(imageVector = Icons.Rounded.MoreVert, contentDescription = null)
|
||||
Icon(
|
||||
painterResource(R.drawable.more_vert_24px),
|
||||
contentDescription = null
|
||||
)
|
||||
}
|
||||
}
|
||||
DropdownMenu(
|
||||
@@ -452,7 +466,7 @@ fun CustomActions(
|
||||
}
|
||||
} else if (slots == actions.customActions.size) {
|
||||
val action = actions.customActions.last()
|
||||
Tooltip (
|
||||
Tooltip(
|
||||
tooltipText = action.name.toString()
|
||||
) {
|
||||
IconButton(
|
||||
@@ -516,7 +530,7 @@ fun NoData() {
|
||||
verticalAlignment = Alignment.CenterVertically
|
||||
) {
|
||||
Icon(
|
||||
imageVector = Icons.Rounded.Audiotrack,
|
||||
painter = painterResource(R.drawable.music_note_24px),
|
||||
contentDescription = "",
|
||||
modifier = Modifier
|
||||
.padding(24.dp)
|
||||
|
||||
@@ -21,20 +21,6 @@ import androidx.compose.foundation.layout.size
|
||||
import androidx.compose.foundation.layout.wrapContentHeight
|
||||
import androidx.compose.foundation.rememberScrollState
|
||||
import androidx.compose.foundation.verticalScroll
|
||||
import androidx.compose.material.icons.Icons
|
||||
import androidx.compose.material.icons.rounded.Add
|
||||
import androidx.compose.material.icons.rounded.CheckCircle
|
||||
import androidx.compose.material.icons.rounded.CheckCircleOutline
|
||||
import androidx.compose.material.icons.rounded.Delete
|
||||
import androidx.compose.material.icons.rounded.ErrorOutline
|
||||
import androidx.compose.material.icons.rounded.ExpandLess
|
||||
import androidx.compose.material.icons.rounded.ExpandMore
|
||||
import androidx.compose.material.icons.rounded.Link
|
||||
import androidx.compose.material.icons.rounded.LinkOff
|
||||
import androidx.compose.material.icons.rounded.MoreVert
|
||||
import androidx.compose.material.icons.rounded.RadioButtonUnchecked
|
||||
import androidx.compose.material.icons.rounded.SaveAlt
|
||||
import androidx.compose.material.icons.rounded.Share
|
||||
import androidx.compose.material3.Button
|
||||
import androidx.compose.material3.ButtonDefaults
|
||||
import androidx.compose.material3.DropdownMenu
|
||||
@@ -60,6 +46,7 @@ import androidx.compose.ui.Alignment
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.platform.LocalContext
|
||||
import androidx.compose.ui.platform.LocalLifecycleOwner
|
||||
import androidx.compose.ui.res.painterResource
|
||||
import androidx.compose.ui.res.stringResource
|
||||
import androidx.compose.ui.unit.dp
|
||||
import androidx.lifecycle.Lifecycle
|
||||
@@ -128,7 +115,7 @@ fun NotesWidget(
|
||||
Banner(
|
||||
modifier = Modifier.padding(16.dp),
|
||||
text = stringResource(R.string.note_widget_conflict),
|
||||
icon = Icons.Rounded.ErrorOutline,
|
||||
icon = R.drawable.error_24px,
|
||||
primaryAction = {
|
||||
Button(onClick = { showConflictResolveSheet = true }) {
|
||||
Text(stringResource(R.string.note_widget_conflict_action_resolve))
|
||||
@@ -193,8 +180,10 @@ fun NotesWidget(
|
||||
},
|
||||
) {
|
||||
Icon(
|
||||
if (widget.config.linkedFile == null) Icons.Rounded.Link
|
||||
else Icons.Rounded.LinkOff,
|
||||
painterResource(
|
||||
if (widget.config.linkedFile == null) R.drawable.link_24px
|
||||
else R.drawable.link_off_24px,
|
||||
),
|
||||
stringResource(
|
||||
if (widget.config.linkedFile == null) R.string.note_widget_link_file
|
||||
else R.string.note_widget_action_unlink_file
|
||||
@@ -211,7 +200,7 @@ fun NotesWidget(
|
||||
viewModel.dismissNote()
|
||||
},
|
||||
) {
|
||||
Icon(Icons.Rounded.Delete, null)
|
||||
Icon(painterResource(R.drawable.delete_24px), null)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -238,7 +227,7 @@ fun NotesWidget(
|
||||
modifier = Modifier
|
||||
.padding(end = ButtonDefaults.IconSpacing)
|
||||
.size(ButtonDefaults.IconSize),
|
||||
imageVector = Icons.Rounded.ErrorOutline,
|
||||
painter = painterResource(R.drawable.error_20px),
|
||||
contentDescription = null,
|
||||
)
|
||||
Text(stringResource(R.string.note_widget_file_write_error))
|
||||
@@ -254,7 +243,7 @@ fun NotesWidget(
|
||||
modifier = Modifier
|
||||
.padding(end = ButtonDefaults.IconSpacing)
|
||||
.size(ButtonDefaults.IconSize),
|
||||
imageVector = Icons.Rounded.ErrorOutline,
|
||||
painter = painterResource(R.drawable.error_20px),
|
||||
contentDescription = null,
|
||||
)
|
||||
Text(stringResource(R.string.note_widget_file_read_error))
|
||||
@@ -266,14 +255,14 @@ fun NotesWidget(
|
||||
tooltipText = stringResource(R.string.action_more_actions)
|
||||
) {
|
||||
IconButton(onClick = { showMenu = true }) {
|
||||
Icon(Icons.Rounded.MoreVert, stringResource(R.string.action_more_actions))
|
||||
Icon(painterResource(R.drawable.more_vert_24px), stringResource(R.string.action_more_actions))
|
||||
}
|
||||
}
|
||||
DropdownMenu(expanded = showMenu, onDismissRequest = { showMenu = false }) {
|
||||
DropdownMenuItem(
|
||||
text = { Text(stringResource(R.string.notes_widget_action_new)) },
|
||||
leadingIcon = {
|
||||
Icon(Icons.Rounded.Add, null)
|
||||
Icon(painterResource(R.drawable.add_24px), null)
|
||||
},
|
||||
onClick = {
|
||||
val newWidget = NotesWidget(
|
||||
@@ -286,7 +275,7 @@ fun NotesWidget(
|
||||
DropdownMenuItem(
|
||||
text = { Text(stringResource(R.string.menu_share)) },
|
||||
leadingIcon = {
|
||||
Icon(Icons.Rounded.Share, null)
|
||||
Icon(painterResource(R.drawable.share_24px), null)
|
||||
},
|
||||
onClick = {
|
||||
Intent(Intent.ACTION_SEND).apply {
|
||||
@@ -300,7 +289,7 @@ fun NotesWidget(
|
||||
DropdownMenuItem(
|
||||
text = { Text(stringResource(R.string.notes_widget_action_save)) },
|
||||
leadingIcon = {
|
||||
Icon(Icons.Rounded.SaveAlt, null)
|
||||
Icon(painterResource(R.drawable.file_save_24px), null)
|
||||
},
|
||||
onClick = {
|
||||
val fileName = getDefaultNoteFileName(context)
|
||||
@@ -312,7 +301,7 @@ fun NotesWidget(
|
||||
DropdownMenuItem(
|
||||
text = { Text(stringResource(R.string.note_widget_link_file)) },
|
||||
leadingIcon = {
|
||||
Icon(Icons.Rounded.Link, null)
|
||||
Icon(painterResource(R.drawable.link_24px), null)
|
||||
},
|
||||
onClick = {
|
||||
linkFileLauncher.launch(getDefaultNoteFileName(context))
|
||||
@@ -323,7 +312,7 @@ fun NotesWidget(
|
||||
DropdownMenuItem(
|
||||
text = { Text(stringResource(R.string.note_widget_action_unlink_file)) },
|
||||
leadingIcon = {
|
||||
Icon(Icons.Rounded.LinkOff, null)
|
||||
Icon(painterResource(R.drawable.link_off_24px), null)
|
||||
},
|
||||
onClick = {
|
||||
viewModel.unlinkFile(context)
|
||||
@@ -334,7 +323,7 @@ fun NotesWidget(
|
||||
DropdownMenuItem(
|
||||
text = { Text(stringResource(R.string.notes_widget_action_dismiss)) },
|
||||
leadingIcon = {
|
||||
Icon(Icons.Rounded.Delete, null)
|
||||
Icon(painterResource(R.drawable.delete_24px), null)
|
||||
},
|
||||
onClick = {
|
||||
val wasLast = isLastWidget != false
|
||||
@@ -446,7 +435,7 @@ fun NoteWidgetConflictResolveSheet(
|
||||
),
|
||||
) {
|
||||
Icon(
|
||||
Icons.Rounded.LinkOff,
|
||||
painterResource(R.drawable.link_off_24px),
|
||||
null,
|
||||
modifier = Modifier
|
||||
.padding(end = ButtonDefaults.IconSpacing)
|
||||
@@ -460,7 +449,7 @@ fun NoteWidgetConflictResolveSheet(
|
||||
modifier = Modifier.fillMaxWidth()
|
||||
) {
|
||||
Icon(
|
||||
Icons.Rounded.CheckCircleOutline,
|
||||
painterResource(R.drawable.check_circle_20px),
|
||||
null,
|
||||
modifier = Modifier
|
||||
.padding(end = ButtonDefaults.IconSpacing)
|
||||
@@ -515,10 +504,7 @@ fun SelectableNoteContent(
|
||||
onClick = onSelect
|
||||
) {
|
||||
Icon(
|
||||
if (selected)
|
||||
Icons.Rounded.CheckCircle
|
||||
else
|
||||
Icons.Rounded.RadioButtonUnchecked,
|
||||
painterResource(if (selected) R.drawable.check_circle_24px_filled else R.drawable.circle_24px),
|
||||
tint = if (selected) MaterialTheme.colorScheme.primary else MaterialTheme.colorScheme.onSurfaceVariant,
|
||||
contentDescription = null
|
||||
)
|
||||
@@ -528,10 +514,7 @@ fun SelectableNoteContent(
|
||||
onClick = { expanded = !expanded }
|
||||
) {
|
||||
Icon(
|
||||
if (expanded)
|
||||
Icons.Rounded.ExpandLess
|
||||
else
|
||||
Icons.Rounded.ExpandMore,
|
||||
painterResource(if (expanded) R.drawable.keyboard_arrow_up_24px else R.drawable.keyboard_arrow_down_24px),
|
||||
contentDescription = null
|
||||
)
|
||||
}
|
||||
@@ -572,7 +555,7 @@ fun NoteReadWriteErrorSheet(
|
||||
.padding(horizontal = 24.dp, vertical = 12.dp),
|
||||
verticalAlignment = Alignment.CenterVertically,
|
||||
) {
|
||||
Icon(Icons.Rounded.Link, null)
|
||||
Icon(painterResource(R.drawable.link_24px), null)
|
||||
Text(
|
||||
stringResource(R.string.note_widget_action_relink_file),
|
||||
modifier = Modifier.padding(start = 16.dp),
|
||||
@@ -589,7 +572,7 @@ fun NoteReadWriteErrorSheet(
|
||||
.padding(horizontal = 24.dp, vertical = 12.dp),
|
||||
verticalAlignment = Alignment.CenterVertically,
|
||||
) {
|
||||
Icon(Icons.Rounded.LinkOff, null)
|
||||
Icon(painterResource(R.drawable.link_off_24px), null)
|
||||
Text(
|
||||
stringResource(R.string.note_widget_action_unlink_file),
|
||||
modifier = Modifier.padding(start = 16.dp),
|
||||
|
||||
@@ -33,14 +33,6 @@ import androidx.compose.foundation.lazy.itemsIndexed
|
||||
import androidx.compose.foundation.lazy.rememberLazyListState
|
||||
import androidx.compose.foundation.shape.CircleShape
|
||||
import androidx.compose.foundation.shape.CornerSize
|
||||
import androidx.compose.material.icons.Icons
|
||||
import androidx.compose.material.icons.automirrored.rounded.OpenInNew
|
||||
import androidx.compose.material.icons.rounded.Air
|
||||
import androidx.compose.material.icons.rounded.ErrorOutline
|
||||
import androidx.compose.material.icons.rounded.LightMode
|
||||
import androidx.compose.material.icons.rounded.LocationCity
|
||||
import androidx.compose.material.icons.rounded.MyLocation
|
||||
import androidx.compose.material.icons.rounded.North
|
||||
import androidx.compose.material3.Button
|
||||
import androidx.compose.material3.ButtonDefaults
|
||||
import androidx.compose.material3.Icon
|
||||
@@ -64,6 +56,7 @@ import androidx.compose.ui.geometry.Rect
|
||||
import androidx.compose.ui.layout.onPlaced
|
||||
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.semantics.contentDescription
|
||||
import androidx.compose.ui.semantics.semantics
|
||||
@@ -76,8 +69,6 @@ import androidx.lifecycle.compose.LocalLifecycleOwner
|
||||
import androidx.lifecycle.compose.collectAsStateWithLifecycle
|
||||
import androidx.lifecycle.repeatOnLifecycle
|
||||
import androidx.lifecycle.viewmodel.compose.viewModel
|
||||
import de.mm20.launcher2.icons.HumidityPercentage
|
||||
import de.mm20.launcher2.icons.Rain
|
||||
import de.mm20.launcher2.ktx.tryStartActivity
|
||||
import de.mm20.launcher2.ui.R
|
||||
import de.mm20.launcher2.ui.common.WeatherLocationSearchDialog
|
||||
@@ -129,7 +120,7 @@ fun WeatherWidget(widget: WeatherWidget) {
|
||||
.fillMaxWidth()
|
||||
.padding(16.dp),
|
||||
text = stringResource(R.string.weather_widget_no_provider),
|
||||
icon = Icons.Rounded.ErrorOutline,
|
||||
icon = R.drawable.error_24px,
|
||||
primaryAction = {
|
||||
Button(
|
||||
onClick = {
|
||||
@@ -138,7 +129,7 @@ fun WeatherWidget(widget: WeatherWidget) {
|
||||
contentPadding = ButtonDefaults.ButtonWithIconContentPadding,
|
||||
) {
|
||||
Icon(
|
||||
Icons.AutoMirrored.Rounded.OpenInNew,
|
||||
painterResource(R.drawable.open_in_new_24px),
|
||||
null,
|
||||
modifier = Modifier
|
||||
.padding(end = ButtonDefaults.IconSpacing)
|
||||
@@ -271,20 +262,12 @@ fun CurrentWeather(forecast: Forecast, imperialUnits: Boolean) {
|
||||
verticalAlignment = Alignment.Top,
|
||||
horizontalArrangement = Arrangement.SpaceBetween,
|
||||
) {
|
||||
val latLonRegexp =
|
||||
remember { Regex("^\\d{1,2}°\\d{1,2}'[NS] \\d{1,3}°\\d{1,2}'[EW]\$") }
|
||||
val isLatLon = latLonRegexp.matches(forecast.location)
|
||||
Row(
|
||||
modifier = Modifier
|
||||
.weight(1f)
|
||||
.padding(top = 16.dp, start = 16.dp, end = 16.dp),
|
||||
verticalAlignment = Alignment.CenterVertically,
|
||||
) {
|
||||
Icon(
|
||||
imageVector = if (isLatLon) Icons.Rounded.MyLocation else Icons.Rounded.LocationCity,
|
||||
contentDescription = null
|
||||
)
|
||||
Spacer(modifier = Modifier.padding(4.dp))
|
||||
Text(
|
||||
text = forecast.location,
|
||||
style = MaterialTheme.typography.titleMedium
|
||||
@@ -363,7 +346,7 @@ fun CurrentWeather(forecast: Forecast, imperialUnits: Boolean) {
|
||||
verticalAlignment = Alignment.CenterVertically
|
||||
) {
|
||||
Icon(
|
||||
imageVector = Icons.Rounded.HumidityPercentage,
|
||||
painter = painterResource(R.drawable.humidity_percentage_20px),
|
||||
modifier = Modifier.size(20.dp),
|
||||
tint = MaterialTheme.colorScheme.secondary,
|
||||
contentDescription = null
|
||||
@@ -388,7 +371,7 @@ fun CurrentWeather(forecast: Forecast, imperialUnits: Boolean) {
|
||||
// windDirection is "fromDirection"; Wind (arrow) blows into opposite direction
|
||||
val angle by animateFloatAsState(forecast.windDirection!!.toFloat() + 180f)
|
||||
Icon(
|
||||
imageVector = Icons.Rounded.North,
|
||||
painter = painterResource(R.drawable.north_20px),
|
||||
modifier = Modifier
|
||||
.rotate(angle)
|
||||
.size(20.dp),
|
||||
@@ -397,7 +380,7 @@ fun CurrentWeather(forecast: Forecast, imperialUnits: Boolean) {
|
||||
)
|
||||
} else {
|
||||
Icon(
|
||||
imageVector = Icons.Rounded.Air,
|
||||
painter = painterResource(R.drawable.air_20px),
|
||||
contentDescription = null,
|
||||
modifier = Modifier.size(20.dp),
|
||||
tint = MaterialTheme.colorScheme.secondary,
|
||||
@@ -423,7 +406,7 @@ fun CurrentWeather(forecast: Forecast, imperialUnits: Boolean) {
|
||||
verticalAlignment = Alignment.CenterVertically
|
||||
) {
|
||||
Icon(
|
||||
imageVector = Icons.Rounded.Rain,
|
||||
painter = painterResource(R.drawable.rainy_20px),
|
||||
modifier = Modifier.size(20.dp),
|
||||
contentDescription = null,
|
||||
tint = MaterialTheme.colorScheme.secondary,
|
||||
@@ -693,7 +676,7 @@ fun NoData() {
|
||||
verticalAlignment = Alignment.CenterVertically
|
||||
) {
|
||||
Icon(
|
||||
imageVector = Icons.Rounded.LightMode,
|
||||
painter = painterResource(R.drawable.light_mode_24px),
|
||||
contentDescription = "",
|
||||
modifier = Modifier
|
||||
.padding(24.dp)
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
package de.mm20.launcher2.ui.settings
|
||||
|
||||
import android.content.Intent
|
||||
import android.net.Uri
|
||||
import android.os.Bundle
|
||||
import androidx.activity.SystemBarStyle
|
||||
import androidx.activity.compose.setContent
|
||||
@@ -48,7 +47,6 @@ import de.mm20.launcher2.ui.settings.breezyweather.BreezyWeatherSettingsScreen
|
||||
import de.mm20.launcher2.ui.settings.buildinfo.BuildInfoSettingsScreen
|
||||
import de.mm20.launcher2.ui.settings.calendarsearch.CalendarProviderSettingsScreen
|
||||
import de.mm20.launcher2.ui.settings.calendarsearch.CalendarSearchSettingsScreen
|
||||
import de.mm20.launcher2.ui.settings.cards.CardsSettingsScreen
|
||||
import de.mm20.launcher2.ui.settings.colorscheme.ColorSchemeSettingsScreen
|
||||
import de.mm20.launcher2.ui.settings.colorscheme.ColorSchemesSettingsScreen
|
||||
import de.mm20.launcher2.ui.settings.contacts.ContactsSettingsScreen
|
||||
@@ -212,9 +210,6 @@ class SettingsActivity : BaseActivity() {
|
||||
?: return@composable
|
||||
TypographySettingsScreen(UUID.fromString(route.id))
|
||||
}
|
||||
composable("settings/appearance/cards") {
|
||||
CardsSettingsScreen()
|
||||
}
|
||||
composable("settings/search") {
|
||||
SearchSettingsScreen()
|
||||
}
|
||||
|
||||
@@ -2,10 +2,12 @@ package de.mm20.launcher2.ui.settings.about
|
||||
|
||||
import android.content.Intent
|
||||
import android.net.Uri
|
||||
import android.widget.Toast
|
||||
import androidx.compose.material.icons.Icons
|
||||
import androidx.compose.material.icons.rounded.Info
|
||||
import androidx.compose.runtime.*
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.runtime.LaunchedEffect
|
||||
import androidx.compose.runtime.getValue
|
||||
import androidx.compose.runtime.mutableStateOf
|
||||
import androidx.compose.runtime.remember
|
||||
import androidx.compose.runtime.setValue
|
||||
import androidx.compose.ui.platform.LocalContext
|
||||
import androidx.compose.ui.res.stringResource
|
||||
import androidx.lifecycle.viewmodel.compose.viewModel
|
||||
@@ -14,9 +16,6 @@ import de.mm20.launcher2.ui.R
|
||||
import de.mm20.launcher2.ui.component.preferences.Preference
|
||||
import de.mm20.launcher2.ui.component.preferences.PreferenceCategory
|
||||
import de.mm20.launcher2.ui.component.preferences.PreferenceScreen
|
||||
import de.mm20.launcher2.icons.Fdroid
|
||||
import de.mm20.launcher2.icons.GitHub
|
||||
import de.mm20.launcher2.icons.Telegram
|
||||
import de.mm20.launcher2.ui.locals.LocalNavController
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.withContext
|
||||
@@ -62,7 +61,7 @@ fun AboutSettingsScreen() {
|
||||
item {
|
||||
PreferenceCategory(title = stringResource(id = R.string.preference_category_license)) {
|
||||
Preference(
|
||||
icon = Icons.Rounded.Info,
|
||||
icon = R.drawable.info_24px,
|
||||
title = stringResource(id = R.string.preference_about_license),
|
||||
summary = stringResource(id = R.string.preference_about_license_summary),
|
||||
onClick = {
|
||||
@@ -74,7 +73,7 @@ fun AboutSettingsScreen() {
|
||||
item {
|
||||
PreferenceCategory(title = stringResource(id = R.string.preference_category_links)) {
|
||||
Preference(
|
||||
icon = Icons.Rounded.GitHub,
|
||||
icon = R.drawable.github,
|
||||
title = "GitHub",
|
||||
summary = "github.com/MM2-0/Kvaesitso",
|
||||
onClick = {
|
||||
@@ -84,7 +83,7 @@ fun AboutSettingsScreen() {
|
||||
}
|
||||
)
|
||||
Preference(
|
||||
icon = Icons.Rounded.Telegram,
|
||||
icon = R.drawable.telegram,
|
||||
title = stringResource(id = R.string.preference_about_telegram),
|
||||
summary = "t.me/Kvaesitso",
|
||||
onClick = {
|
||||
@@ -94,7 +93,7 @@ fun AboutSettingsScreen() {
|
||||
}
|
||||
)
|
||||
Preference(
|
||||
icon = Icons.Rounded.Fdroid,
|
||||
icon = R.drawable.fdroid,
|
||||
title = stringResource(id = R.string.preference_about_fdroid),
|
||||
summary = "fdroid.mm20.de",
|
||||
onClick = {
|
||||
|
||||
@@ -2,35 +2,22 @@ package de.mm20.launcher2.ui.settings.appearance
|
||||
|
||||
import androidx.activity.compose.rememberLauncherForActivityResult
|
||||
import androidx.activity.result.contract.ActivityResultContracts
|
||||
import androidx.compose.material.icons.Icons
|
||||
import androidx.compose.material.icons.rounded.ArrowCircleDown
|
||||
import androidx.compose.material.icons.rounded.ArrowCircleUp
|
||||
import androidx.compose.material.icons.rounded.CropSquare
|
||||
import androidx.compose.material.icons.rounded.Opacity
|
||||
import androidx.compose.material.icons.rounded.Palette
|
||||
import androidx.compose.material.icons.rounded.TextFields
|
||||
import androidx.compose.material3.Text
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.runtime.collectAsState
|
||||
import androidx.compose.runtime.getValue
|
||||
import androidx.compose.runtime.remember
|
||||
import androidx.compose.ui.platform.LocalContext
|
||||
import androidx.compose.ui.res.stringResource
|
||||
import androidx.lifecycle.compose.collectAsStateWithLifecycle
|
||||
import androidx.lifecycle.viewmodel.compose.viewModel
|
||||
import de.mm20.launcher2.ktx.isAtLeastApiLevel
|
||||
import de.mm20.launcher2.preferences.ColorScheme
|
||||
import de.mm20.launcher2.preferences.Font
|
||||
import de.mm20.launcher2.ui.R
|
||||
import de.mm20.launcher2.ui.component.preferences.ListPreference
|
||||
import de.mm20.launcher2.ui.component.preferences.Preference
|
||||
import de.mm20.launcher2.ui.component.preferences.PreferenceCategory
|
||||
import de.mm20.launcher2.ui.component.preferences.PreferenceScreen
|
||||
import de.mm20.launcher2.ui.component.preferences.value
|
||||
import de.mm20.launcher2.ui.locals.LocalNavController
|
||||
import de.mm20.launcher2.ui.settings.transparencies.TransparencySchemesSettingsRoute
|
||||
import de.mm20.launcher2.ui.settings.typography.TypographiesSettingsRoute
|
||||
import de.mm20.launcher2.ui.theme.getTypography
|
||||
|
||||
@Composable
|
||||
fun AppearanceSettingsScreen() {
|
||||
@@ -76,7 +63,7 @@ fun AppearanceSettingsScreen() {
|
||||
onClick = {
|
||||
navController?.navigate("settings/appearance/colors")
|
||||
},
|
||||
icon = Icons.Rounded.Palette,
|
||||
icon = R.drawable.palette_24px,
|
||||
)
|
||||
Preference(
|
||||
title = stringResource(id = R.string.preference_screen_typography),
|
||||
@@ -84,7 +71,7 @@ fun AppearanceSettingsScreen() {
|
||||
onClick = {
|
||||
navController?.navigate(TypographiesSettingsRoute)
|
||||
},
|
||||
icon = Icons.Rounded.TextFields,
|
||||
icon = R.drawable.text_fields_24px,
|
||||
)
|
||||
Preference(
|
||||
title = stringResource(id = R.string.preference_screen_shapes),
|
||||
@@ -92,7 +79,7 @@ fun AppearanceSettingsScreen() {
|
||||
onClick = {
|
||||
navController?.navigate("settings/appearance/shapes")
|
||||
},
|
||||
icon = Icons.Rounded.CropSquare,
|
||||
icon = R.drawable.crop_square_24px,
|
||||
)
|
||||
Preference(
|
||||
title = stringResource(id = R.string.preference_screen_transparencies),
|
||||
@@ -100,7 +87,7 @@ fun AppearanceSettingsScreen() {
|
||||
onClick = {
|
||||
navController?.navigate(TransparencySchemesSettingsRoute)
|
||||
},
|
||||
icon = Icons.Rounded.Opacity,
|
||||
icon = R.drawable.opacity_24px,
|
||||
)
|
||||
}
|
||||
}
|
||||
@@ -109,14 +96,14 @@ fun AppearanceSettingsScreen() {
|
||||
PreferenceCategory {
|
||||
Preference(
|
||||
title = stringResource(R.string.theme_import_title),
|
||||
icon = Icons.Rounded.ArrowCircleDown,
|
||||
icon = R.drawable.arrow_circle_down_24px,
|
||||
onClick = {
|
||||
importLauncher.launch(arrayOf("*/*"))
|
||||
}
|
||||
)
|
||||
Preference(
|
||||
title = stringResource(R.string.theme_export_title),
|
||||
icon = Icons.Rounded.ArrowCircleUp,
|
||||
icon = R.drawable.arrow_circle_up_24px,
|
||||
onClick = {
|
||||
navController?.navigate("settings/appearance/export")
|
||||
}
|
||||
|
||||
@@ -9,14 +9,6 @@ import androidx.compose.foundation.layout.Row
|
||||
import androidx.compose.foundation.layout.fillMaxWidth
|
||||
import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.foundation.layout.size
|
||||
import androidx.compose.material.icons.Icons
|
||||
import androidx.compose.material.icons.rounded.CropSquare
|
||||
import androidx.compose.material.icons.rounded.KeyboardArrowDown
|
||||
import androidx.compose.material.icons.rounded.Opacity
|
||||
import androidx.compose.material.icons.rounded.Palette
|
||||
import androidx.compose.material.icons.rounded.Save
|
||||
import androidx.compose.material.icons.rounded.Share
|
||||
import androidx.compose.material.icons.rounded.TextFields
|
||||
import androidx.compose.material3.ButtonDefaults
|
||||
import androidx.compose.material3.DropdownMenu
|
||||
import androidx.compose.material3.DropdownMenuItem
|
||||
@@ -35,6 +27,7 @@ import androidx.compose.runtime.setValue
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.graphics.graphicsLayer
|
||||
import androidx.compose.ui.platform.LocalContext
|
||||
import androidx.compose.ui.res.painterResource
|
||||
import androidx.compose.ui.res.stringResource
|
||||
import androidx.compose.ui.unit.dp
|
||||
import androidx.lifecycle.viewmodel.compose.viewModel
|
||||
@@ -61,9 +54,10 @@ fun ExportThemeSettingsScreen() {
|
||||
}
|
||||
}
|
||||
|
||||
val fileChooserLauncher = rememberLauncherForActivityResult(ActivityResultContracts.CreateDocument("application/vnd.de.mm20.launcher2.theme")) {
|
||||
if (it != null) viewModel.exportTheme(context, it)
|
||||
}
|
||||
val fileChooserLauncher =
|
||||
rememberLauncherForActivityResult(ActivityResultContracts.CreateDocument("application/vnd.de.mm20.launcher2.theme")) {
|
||||
if (it != null) viewModel.exportTheme(context, it)
|
||||
}
|
||||
|
||||
LaunchedEffect(Unit) {
|
||||
viewModel.init()
|
||||
@@ -95,7 +89,7 @@ fun ExportThemeSettingsScreen() {
|
||||
PreferenceCategory {
|
||||
ListPreference(
|
||||
stringResource(R.string.preference_screen_colors),
|
||||
icon = Icons.Rounded.Palette,
|
||||
icon = R.drawable.palette_24px,
|
||||
value = viewModel.colorScheme,
|
||||
items = listOf(stringResource(R.string.no_selection) to null) + colorSchemes.map {
|
||||
it.name to it
|
||||
@@ -106,7 +100,7 @@ fun ExportThemeSettingsScreen() {
|
||||
)
|
||||
ListPreference(
|
||||
stringResource(R.string.preference_screen_typography),
|
||||
icon = Icons.Rounded.TextFields,
|
||||
icon = R.drawable.text_fields_24px,
|
||||
value = viewModel.typographyScheme,
|
||||
items = listOf(stringResource(R.string.no_selection) to null) + typographyThemes.map {
|
||||
it.name to it
|
||||
@@ -117,7 +111,7 @@ fun ExportThemeSettingsScreen() {
|
||||
)
|
||||
ListPreference(
|
||||
stringResource(R.string.preference_screen_shapes),
|
||||
icon = Icons.Rounded.CropSquare,
|
||||
icon = R.drawable.crop_square_24px,
|
||||
value = viewModel.shapeScheme,
|
||||
items = listOf(stringResource(R.string.no_selection) to null) + shapeThemes.map {
|
||||
it.name to it
|
||||
@@ -128,7 +122,7 @@ fun ExportThemeSettingsScreen() {
|
||||
)
|
||||
ListPreference(
|
||||
stringResource(R.string.preference_screen_transparencies),
|
||||
icon = Icons.Rounded.Opacity,
|
||||
icon = R.drawable.opacity_24px,
|
||||
value = viewModel.transparencyScheme,
|
||||
items = listOf(stringResource(R.string.no_selection) to null) + transparencySchemes.map {
|
||||
it.name to it
|
||||
@@ -160,7 +154,7 @@ fun ExportThemeSettingsScreen() {
|
||||
}
|
||||
) {
|
||||
Icon(
|
||||
Icons.Rounded.Share,
|
||||
painterResource(R.drawable.share_20px),
|
||||
null,
|
||||
modifier = Modifier
|
||||
.padding(end = ButtonDefaults.IconSpacing)
|
||||
@@ -179,7 +173,7 @@ fun ExportThemeSettingsScreen() {
|
||||
label = "Trailing Icon Rotation"
|
||||
)
|
||||
Icon(
|
||||
Icons.Rounded.KeyboardArrowDown,
|
||||
painterResource(R.drawable.keyboard_arrow_down_24px),
|
||||
modifier =
|
||||
Modifier
|
||||
.size(SplitButtonDefaults.TrailingIconSize)
|
||||
@@ -189,14 +183,21 @@ fun ExportThemeSettingsScreen() {
|
||||
contentDescription = null
|
||||
)
|
||||
|
||||
DropdownMenu(expanded = showDropdown, onDismissRequest = { showDropdown = false }) {
|
||||
DropdownMenu(
|
||||
expanded = showDropdown,
|
||||
onDismissRequest = { showDropdown = false }) {
|
||||
DropdownMenuItem(
|
||||
text = { Text(stringResource(R.string.save_as_file)) },
|
||||
onClick = {
|
||||
fileChooserLauncher.launch("${viewModel.themeName}.kvtheme")
|
||||
showDropdown = false
|
||||
},
|
||||
leadingIcon = { Icon(Icons.Rounded.Save, contentDescription = null) }
|
||||
leadingIcon = {
|
||||
Icon(
|
||||
painterResource(R.drawable.save_24px),
|
||||
contentDescription = null
|
||||
)
|
||||
}
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -11,18 +11,6 @@ import androidx.compose.foundation.layout.Spacer
|
||||
import androidx.compose.foundation.layout.fillMaxWidth
|
||||
import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.foundation.layout.size
|
||||
import androidx.compose.material.icons.Icons
|
||||
import androidx.compose.material.icons.rounded.ChangeCircle
|
||||
import androidx.compose.material.icons.rounded.CropSquare
|
||||
import androidx.compose.material.icons.rounded.DarkMode
|
||||
import androidx.compose.material.icons.rounded.Edit
|
||||
import androidx.compose.material.icons.rounded.ErrorOutline
|
||||
import androidx.compose.material.icons.rounded.LightMode
|
||||
import androidx.compose.material.icons.rounded.MoreVert
|
||||
import androidx.compose.material.icons.rounded.Opacity
|
||||
import androidx.compose.material.icons.rounded.Palette
|
||||
import androidx.compose.material.icons.rounded.Star
|
||||
import androidx.compose.material.icons.rounded.TextFields
|
||||
import androidx.compose.material3.Button
|
||||
import androidx.compose.material3.FilledTonalIconButton
|
||||
import androidx.compose.material3.FilterChip
|
||||
@@ -49,8 +37,8 @@ import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.draw.clip
|
||||
import androidx.compose.ui.draw.innerShadow
|
||||
import androidx.compose.ui.graphics.Color
|
||||
import androidx.compose.ui.graphics.Shadow
|
||||
import androidx.compose.ui.platform.LocalContext
|
||||
import androidx.compose.ui.res.painterResource
|
||||
import androidx.compose.ui.res.stringResource
|
||||
import androidx.compose.ui.tooling.preview.Preview
|
||||
import androidx.compose.ui.unit.dp
|
||||
@@ -103,7 +91,7 @@ fun ImportThemeSettingsScreen(
|
||||
PreferenceCategory {
|
||||
Banner(
|
||||
text = stringResource(R.string.import_theme_error),
|
||||
icon = Icons.Rounded.ErrorOutline,
|
||||
icon = R.drawable.error_24px,
|
||||
modifier = Modifier
|
||||
.background(MaterialTheme.colorScheme.surface)
|
||||
.padding(16.dp),
|
||||
@@ -126,9 +114,12 @@ fun ImportThemeSettingsScreen(
|
||||
if (darkModePreview) darkColorSchemeOf(it) else lightColorSchemeOf(it)
|
||||
} ?: MaterialTheme.colorScheme,
|
||||
shapes = themeBundle.shapes?.let { shapesOf(it) } ?: MaterialTheme.shapes,
|
||||
typography = themeBundle.typography?.let { typographyOf(it) } ?: MaterialTheme.typography,
|
||||
typography = themeBundle.typography?.let { typographyOf(it) }
|
||||
?: MaterialTheme.typography,
|
||||
) {
|
||||
val transparencies = themeBundle.transparencies?.let { transparencySchemeOf(it) } ?: MaterialTheme.transparency
|
||||
val transparencies =
|
||||
themeBundle.transparencies?.let { transparencySchemeOf(it) }
|
||||
?: MaterialTheme.transparency
|
||||
CompositionLocalProvider(
|
||||
LocalTransparencyScheme provides transparencies
|
||||
) {
|
||||
@@ -143,13 +134,13 @@ fun ImportThemeSettingsScreen(
|
||||
PreferenceCategory(stringResource(R.string.import_theme_contents)) {
|
||||
if (themeBundle.colors != null) {
|
||||
Preference(
|
||||
icon = Icons.Rounded.Palette,
|
||||
icon = R.drawable.palette_24px,
|
||||
title = stringResource(R.string.preference_screen_colors),
|
||||
summary = themeBundle.colors?.name,
|
||||
controls = if (viewModel.colorsExists) {
|
||||
{
|
||||
Icon(
|
||||
Icons.Rounded.ChangeCircle,
|
||||
painterResource(R.drawable.change_circle_24px),
|
||||
stringResource(R.string.import_theme_exists)
|
||||
)
|
||||
}
|
||||
@@ -158,13 +149,13 @@ fun ImportThemeSettingsScreen(
|
||||
}
|
||||
if (themeBundle.typography != null) {
|
||||
Preference(
|
||||
icon = Icons.Rounded.TextFields,
|
||||
icon = R.drawable.text_fields_24px,
|
||||
title = stringResource(R.string.preference_screen_typography),
|
||||
summary = themeBundle.typography?.name,
|
||||
controls = if (viewModel.typographyExists) {
|
||||
{
|
||||
Icon(
|
||||
Icons.Rounded.ChangeCircle,
|
||||
painterResource(R.drawable.change_circle_24px),
|
||||
stringResource(R.string.import_theme_exists)
|
||||
)
|
||||
}
|
||||
@@ -173,13 +164,13 @@ fun ImportThemeSettingsScreen(
|
||||
}
|
||||
if (themeBundle.shapes != null) {
|
||||
Preference(
|
||||
icon = Icons.Rounded.CropSquare,
|
||||
icon = R.drawable.crop_square_24px,
|
||||
title = stringResource(R.string.preference_screen_shapes),
|
||||
summary = themeBundle.shapes?.name,
|
||||
controls = if (viewModel.shapesExists) {
|
||||
{
|
||||
Icon(
|
||||
Icons.Rounded.ChangeCircle,
|
||||
painterResource(R.drawable.change_circle_24px),
|
||||
stringResource(R.string.import_theme_exists)
|
||||
)
|
||||
}
|
||||
@@ -187,20 +178,20 @@ fun ImportThemeSettingsScreen(
|
||||
)
|
||||
}
|
||||
if (themeBundle.transparencies != null) {
|
||||
Preference(
|
||||
icon = Icons.Rounded.Opacity,
|
||||
title = stringResource(R.string.preference_screen_transparencies),
|
||||
summary = themeBundle.transparencies?.name,
|
||||
controls = if (viewModel.transparenciesExists) {
|
||||
{
|
||||
Icon(
|
||||
Icons.Rounded.ChangeCircle,
|
||||
stringResource(R.string.import_theme_exists)
|
||||
)
|
||||
}
|
||||
} else null,
|
||||
)
|
||||
}
|
||||
Preference(
|
||||
icon = R.drawable.opacity_24px,
|
||||
title = stringResource(R.string.preference_screen_transparencies),
|
||||
summary = themeBundle.transparencies?.name,
|
||||
controls = if (viewModel.transparenciesExists) {
|
||||
{
|
||||
Icon(
|
||||
painterResource(R.drawable.change_circle_24px),
|
||||
stringResource(R.string.import_theme_exists)
|
||||
)
|
||||
}
|
||||
} else null,
|
||||
)
|
||||
}
|
||||
if (viewModel.colorsExists || viewModel.shapesExists) {
|
||||
Banner(
|
||||
modifier = Modifier
|
||||
@@ -209,7 +200,7 @@ fun ImportThemeSettingsScreen(
|
||||
MaterialTheme.shapes.extraSmall
|
||||
)
|
||||
.padding(16.dp),
|
||||
icon = Icons.Rounded.ChangeCircle,
|
||||
icon = R.drawable.change_circle_24px,
|
||||
text = stringResource(R.string.import_theme_exists)
|
||||
)
|
||||
}
|
||||
@@ -284,7 +275,7 @@ private fun ThemePreview(
|
||||
readOnly = true,
|
||||
menu = {
|
||||
IconButton(onClick = {}) {
|
||||
Icon(Icons.Rounded.MoreVert, null)
|
||||
Icon(painterResource(R.drawable.more_vert_24px), null)
|
||||
}
|
||||
}
|
||||
)
|
||||
@@ -341,7 +332,7 @@ private fun ThemePreview(
|
||||
label = { Text(previewTexts.Short1) },
|
||||
leadingIcon = {
|
||||
Icon(
|
||||
Icons.Rounded.Star, null,
|
||||
painterResource(R.drawable.star_20px), null,
|
||||
modifier = Modifier.size(FilterChipDefaults.IconSize)
|
||||
)
|
||||
},
|
||||
@@ -352,7 +343,7 @@ private fun ThemePreview(
|
||||
label = { Text(previewTexts.Short2) },
|
||||
leadingIcon = {
|
||||
Icon(
|
||||
Icons.Rounded.Star, null,
|
||||
painterResource(R.drawable.star_20px), null,
|
||||
modifier = Modifier.size(FilterChipDefaults.IconSize)
|
||||
)
|
||||
},
|
||||
@@ -360,7 +351,7 @@ private fun ThemePreview(
|
||||
)
|
||||
Spacer(modifier = Modifier.weight(1f))
|
||||
FilledTonalIconButton(onClick = {}) {
|
||||
Icon(Icons.Rounded.Edit, null)
|
||||
Icon(painterResource(R.drawable.edit_24px), null)
|
||||
}
|
||||
}
|
||||
HorizontalDivider(
|
||||
@@ -386,14 +377,14 @@ private fun ThemePreview(
|
||||
selected = !darkMode,
|
||||
onClick = { onDarkModeChanged(false) }
|
||||
) {
|
||||
Icon(Icons.Rounded.LightMode, null)
|
||||
Icon(painterResource(R.drawable.light_mode_24px), null)
|
||||
}
|
||||
SegmentedButton(
|
||||
shape = SegmentedButtonDefaults.itemShape(index = 1, count = 2),
|
||||
selected = darkMode,
|
||||
onClick = { onDarkModeChanged(true) }
|
||||
) {
|
||||
Icon(Icons.Rounded.DarkMode, null)
|
||||
Icon(painterResource(R.drawable.dark_mode_24px), null)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -6,8 +6,6 @@ import androidx.compose.foundation.layout.Box
|
||||
import androidx.compose.foundation.layout.aspectRatio
|
||||
import androidx.compose.foundation.layout.fillMaxWidth
|
||||
import androidx.compose.foundation.layout.size
|
||||
import androidx.compose.material.icons.Icons
|
||||
import androidx.compose.material.icons.rounded.CheckCircleOutline
|
||||
import androidx.compose.material3.CircularProgressIndicator
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.runtime.LaunchedEffect
|
||||
@@ -65,7 +63,7 @@ fun CreateBackupSheet(
|
||||
else {
|
||||
LargeMessage(
|
||||
modifier = Modifier.aspectRatio(1f),
|
||||
icon = Icons.Rounded.CheckCircleOutline,
|
||||
icon = R.drawable.check_circle_48px,
|
||||
text = stringResource(
|
||||
id = R.string.backup_complete
|
||||
)
|
||||
|
||||
@@ -4,9 +4,6 @@ import androidx.activity.compose.LocalActivity
|
||||
import androidx.appcompat.app.AppCompatActivity
|
||||
import androidx.compose.foundation.background
|
||||
import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.material.icons.Icons
|
||||
import androidx.compose.material.icons.automirrored.rounded.OpenInNew
|
||||
import androidx.compose.material.icons.rounded.Info
|
||||
import androidx.compose.material3.Button
|
||||
import androidx.compose.material3.MaterialTheme
|
||||
import androidx.compose.material3.Text
|
||||
@@ -42,7 +39,7 @@ fun BreezyWeatherSettingsScreen() {
|
||||
R.string.preference_breezyweather_integration_description,
|
||||
stringResource(R.string.app_name),
|
||||
),
|
||||
icon = Icons.Rounded.Info,
|
||||
icon = R.drawable.info_24px,
|
||||
modifier = Modifier.background(MaterialTheme.colorScheme.surface).padding(16.dp),
|
||||
primaryAction = {
|
||||
Button(onClick = {
|
||||
@@ -63,7 +60,7 @@ fun BreezyWeatherSettingsScreen() {
|
||||
R.string.preference_breezyweather_integration_instructions,
|
||||
stringResource(R.string.app_name),
|
||||
),
|
||||
icon = Icons.Rounded.Info,
|
||||
icon = R.drawable.info_24px,
|
||||
modifier = Modifier.background(MaterialTheme.colorScheme.surface).padding(16.dp),
|
||||
)
|
||||
Preference(
|
||||
@@ -79,7 +76,7 @@ fun BreezyWeatherSettingsScreen() {
|
||||
)
|
||||
Preference(
|
||||
title = stringResource(R.string.preference_launch_breezyweather_app),
|
||||
icon = Icons.AutoMirrored.Rounded.OpenInNew,
|
||||
icon = R.drawable.open_in_new_24px,
|
||||
onClick = {
|
||||
viewModel.launchBreezyApp(activity)
|
||||
}
|
||||
|
||||
@@ -2,17 +2,11 @@ package de.mm20.launcher2.ui.settings.calendarsearch
|
||||
|
||||
import android.app.PendingIntent
|
||||
import androidx.appcompat.app.AppCompatActivity
|
||||
import androidx.compose.animation.AnimatedVisibility
|
||||
import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.material.icons.Icons
|
||||
import androidx.compose.material.icons.rounded.ErrorOutline
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.runtime.collectAsState
|
||||
import androidx.compose.runtime.getValue
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.platform.LocalContext
|
||||
import androidx.compose.ui.res.stringResource
|
||||
import androidx.compose.ui.unit.dp
|
||||
import androidx.lifecycle.Lifecycle
|
||||
import androidx.lifecycle.compose.collectAsStateWithLifecycle
|
||||
import androidx.lifecycle.viewmodel.compose.viewModel
|
||||
@@ -20,7 +14,6 @@ import de.mm20.launcher2.crashreporter.CrashReporter
|
||||
import de.mm20.launcher2.ktx.sendWithBackgroundPermission
|
||||
import de.mm20.launcher2.plugin.PluginState
|
||||
import de.mm20.launcher2.ui.R
|
||||
import de.mm20.launcher2.ui.component.MissingPermissionBanner
|
||||
import de.mm20.launcher2.ui.component.preferences.GuardedPreference
|
||||
import de.mm20.launcher2.ui.component.preferences.PreferenceCategory
|
||||
import de.mm20.launcher2.ui.component.preferences.PreferenceScreen
|
||||
@@ -102,7 +95,7 @@ fun CalendarSearchSettingsScreen() {
|
||||
},
|
||||
description = (state as? PluginState.SetupRequired)?.message
|
||||
?: stringResource(id = R.string.plugin_state_setup_required),
|
||||
icon = Icons.Rounded.ErrorOutline,
|
||||
icon = R.drawable.error_24px,
|
||||
unlockLabel = stringResource(id = R.string.plugin_action_setup),
|
||||
) {
|
||||
PreferenceWithSwitch(
|
||||
|
||||
@@ -1,64 +0,0 @@
|
||||
package de.mm20.launcher2.ui.settings.cards
|
||||
|
||||
import androidx.compose.foundation.background
|
||||
import androidx.compose.foundation.layout.Box
|
||||
import androidx.compose.foundation.layout.fillMaxWidth
|
||||
import androidx.compose.foundation.layout.height
|
||||
import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.material.icons.Icons
|
||||
import androidx.compose.material.icons.rounded.*
|
||||
import androidx.compose.material3.MaterialTheme
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.runtime.collectAsState
|
||||
import androidx.compose.runtime.getValue
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.res.stringResource
|
||||
import androidx.compose.ui.unit.dp
|
||||
import androidx.lifecycle.viewmodel.compose.viewModel
|
||||
import de.mm20.launcher2.preferences.SurfaceShape
|
||||
import de.mm20.launcher2.preferences.ui.CardStyle
|
||||
import de.mm20.launcher2.ui.R
|
||||
import de.mm20.launcher2.ui.component.LauncherCard
|
||||
import de.mm20.launcher2.ui.component.preferences.ListPreference
|
||||
import de.mm20.launcher2.ui.component.preferences.PreferenceCategory
|
||||
import de.mm20.launcher2.ui.component.preferences.PreferenceScreen
|
||||
import de.mm20.launcher2.ui.component.preferences.SliderPreference
|
||||
|
||||
@Composable
|
||||
fun CardsSettingsScreen() {
|
||||
val viewModel: CardsSettingsScreenVM = viewModel()
|
||||
|
||||
val cardStyle by viewModel.cardStyle.collectAsState(CardStyle())
|
||||
|
||||
PreferenceScreen(title = stringResource(R.string.preference_cards)) {
|
||||
item {
|
||||
Box(
|
||||
modifier = Modifier
|
||||
.fillMaxWidth()
|
||||
.background(MaterialTheme.colorScheme.secondary)
|
||||
) {
|
||||
LauncherCard(
|
||||
modifier = Modifier
|
||||
.height(200.dp)
|
||||
.fillMaxWidth()
|
||||
.padding(16.dp)
|
||||
)
|
||||
}
|
||||
}
|
||||
item {
|
||||
PreferenceCategory {
|
||||
SliderPreference(
|
||||
title = stringResource(R.string.preference_cards_stroke_width),
|
||||
icon = Icons.Rounded.LineWeight,
|
||||
value = cardStyle.borderWidth,
|
||||
min = 0,
|
||||
max = 8,
|
||||
step = 1,
|
||||
onValueChanged = {
|
||||
viewModel.setBorderWidth(it)
|
||||
}
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,21 +0,0 @@
|
||||
package de.mm20.launcher2.ui.settings.cards
|
||||
|
||||
import androidx.lifecycle.ViewModel
|
||||
import de.mm20.launcher2.preferences.ui.UiSettings
|
||||
import org.koin.core.component.KoinComponent
|
||||
import org.koin.core.component.inject
|
||||
|
||||
class CardsSettingsScreenVM : ViewModel(), KoinComponent {
|
||||
private val uiSettings: UiSettings by inject()
|
||||
|
||||
val cardStyle = uiSettings.cardStyle
|
||||
|
||||
fun setOpacity(opacity: Float) {
|
||||
uiSettings.setCardOpacity(opacity)
|
||||
}
|
||||
|
||||
fun setBorderWidth(borderWidth: Int) {
|
||||
uiSettings.setCardBorderWidth(borderWidth)
|
||||
}
|
||||
|
||||
}
|
||||
@@ -9,9 +9,6 @@ import androidx.compose.foundation.layout.RowScope
|
||||
import androidx.compose.foundation.layout.fillMaxWidth
|
||||
import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.foundation.rememberScrollState
|
||||
import androidx.compose.material.icons.Icons
|
||||
import androidx.compose.material.icons.rounded.DarkMode
|
||||
import androidx.compose.material.icons.rounded.LightMode
|
||||
import androidx.compose.material3.ColorScheme
|
||||
import androidx.compose.material3.Icon
|
||||
import androidx.compose.material3.MaterialTheme
|
||||
@@ -23,7 +20,9 @@ import androidx.compose.runtime.Composable
|
||||
import androidx.compose.ui.Alignment
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.draw.clip
|
||||
import androidx.compose.ui.res.painterResource
|
||||
import androidx.compose.ui.unit.dp
|
||||
import de.mm20.launcher2.ui.R
|
||||
|
||||
@Composable
|
||||
fun ColorSchemePreferenceCategory(
|
||||
@@ -56,14 +55,14 @@ fun ColorSchemePreferenceCategory(
|
||||
selected = !darkMode,
|
||||
onClick = { onDarkModeChanged(false) }
|
||||
) {
|
||||
Icon(Icons.Rounded.LightMode, null)
|
||||
Icon(painterResource(R.drawable.light_mode_24px), null)
|
||||
}
|
||||
SegmentedButton(
|
||||
shape = SegmentedButtonDefaults.itemShape(index = 1, count = 2),
|
||||
selected = darkMode,
|
||||
onClick = { onDarkModeChanged(true) }
|
||||
) {
|
||||
Icon(Icons.Rounded.DarkMode, null)
|
||||
Icon(painterResource(R.drawable.dark_mode_24px), null)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -10,14 +10,6 @@ import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.foundation.layout.size
|
||||
import androidx.compose.foundation.layout.width
|
||||
import androidx.compose.foundation.layout.wrapContentWidth
|
||||
import androidx.compose.material.icons.Icons
|
||||
import androidx.compose.material.icons.rounded.Edit
|
||||
import androidx.compose.material.icons.rounded.Lock
|
||||
import androidx.compose.material.icons.rounded.OpenInNew
|
||||
import androidx.compose.material.icons.rounded.PlayArrow
|
||||
import androidx.compose.material.icons.rounded.Search
|
||||
import androidx.compose.material.icons.rounded.StarBorder
|
||||
import androidx.compose.material.icons.rounded.Tag
|
||||
import androidx.compose.material3.AlertDialog
|
||||
import androidx.compose.material3.Button
|
||||
import androidx.compose.material3.ButtonDefaults
|
||||
@@ -49,6 +41,7 @@ import androidx.compose.runtime.setValue
|
||||
import androidx.compose.ui.Alignment
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.platform.LocalContext
|
||||
import androidx.compose.ui.res.painterResource
|
||||
import androidx.compose.ui.res.stringResource
|
||||
import androidx.compose.ui.unit.dp
|
||||
import androidx.core.content.ContextCompat
|
||||
@@ -377,7 +370,7 @@ fun ColorSchemeSettingsScreen(themeId: UUID) {
|
||||
.align(Alignment.CenterVertically),
|
||||
onClick = { }
|
||||
) {
|
||||
Icon(Icons.Rounded.Edit, null)
|
||||
Icon(painterResource(R.drawable.edit_24px), null)
|
||||
}
|
||||
ShapedLauncherIcon(
|
||||
size = 48.dp,
|
||||
@@ -512,7 +505,7 @@ fun ColorSchemeSettingsScreen(themeId: UUID) {
|
||||
label = { Text("Tag") },
|
||||
leadingIcon = {
|
||||
Icon(
|
||||
Icons.Rounded.Tag,
|
||||
painterResource(R.drawable.tag_20px),
|
||||
contentDescription = null,
|
||||
modifier = Modifier.size(FilterChipDefaults.IconSize)
|
||||
)
|
||||
@@ -526,7 +519,7 @@ fun ColorSchemeSettingsScreen(themeId: UUID) {
|
||||
.align(Alignment.CenterVertically),
|
||||
onClick = { },
|
||||
) {
|
||||
Icon(Icons.Rounded.PlayArrow, null)
|
||||
Icon(painterResource(R.drawable.play_arrow_24px), null)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -788,7 +781,7 @@ fun ColorSchemeSettingsScreen(themeId: UUID) {
|
||||
modifier = Modifier.fillMaxSize(),
|
||||
contentAlignment = Alignment.Center,
|
||||
) {
|
||||
Icon(Icons.Rounded.Search, null, tint = MaterialTheme.colorScheme.onSurface)
|
||||
Icon(painterResource(R.drawable.search_24px), null, tint = MaterialTheme.colorScheme.onSurface)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -946,7 +939,7 @@ fun ColorSchemeSettingsScreen(themeId: UUID) {
|
||||
.align(Alignment.CenterVertically)
|
||||
.width(240.dp),
|
||||
text = "Banner",
|
||||
icon = Icons.Rounded.Lock
|
||||
icon = R.drawable.lock_24px,
|
||||
)
|
||||
Switch(
|
||||
modifier = Modifier
|
||||
@@ -1078,12 +1071,12 @@ fun ColorSchemeSettingsScreen(themeId: UUID) {
|
||||
}
|
||||
|
||||
IconButton(
|
||||
onClick = { /*TODO*/ },
|
||||
onClick = { },
|
||||
modifier = Modifier
|
||||
.padding(end = 16.dp)
|
||||
.align(Alignment.CenterVertically),
|
||||
) {
|
||||
Icon(Icons.Rounded.StarBorder, null)
|
||||
Icon(painterResource(R.drawable.star_24px), null)
|
||||
}
|
||||
|
||||
Surface(
|
||||
@@ -1100,7 +1093,7 @@ fun ColorSchemeSettingsScreen(themeId: UUID) {
|
||||
) {
|
||||
DropdownMenuItem(
|
||||
leadingIcon = {
|
||||
Icon(Icons.Rounded.OpenInNew, null)
|
||||
Icon(painterResource(R.drawable.open_in_new_24px), null)
|
||||
},
|
||||
text = { Text("Menu") },
|
||||
onClick = { })
|
||||
@@ -1170,7 +1163,7 @@ fun ColorSchemeSettingsScreen(themeId: UUID) {
|
||||
label = { Text("Tag") },
|
||||
leadingIcon = {
|
||||
Icon(
|
||||
Icons.Rounded.Tag,
|
||||
painterResource(R.drawable.tag_20px),
|
||||
contentDescription = null,
|
||||
modifier = Modifier.size(FilterChipDefaults.IconSize)
|
||||
)
|
||||
|
||||
@@ -10,14 +10,6 @@ import androidx.compose.foundation.layout.height
|
||||
import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.foundation.layout.size
|
||||
import androidx.compose.foundation.layout.width
|
||||
import androidx.compose.material.icons.Icons
|
||||
import androidx.compose.material.icons.rounded.Add
|
||||
import androidx.compose.material.icons.rounded.ContentCopy
|
||||
import androidx.compose.material.icons.rounded.Delete
|
||||
import androidx.compose.material.icons.rounded.Edit
|
||||
import androidx.compose.material.icons.rounded.MoreVert
|
||||
import androidx.compose.material.icons.rounded.RadioButtonChecked
|
||||
import androidx.compose.material.icons.rounded.RadioButtonUnchecked
|
||||
import androidx.compose.material3.AlertDialog
|
||||
import androidx.compose.material3.DropdownMenu
|
||||
import androidx.compose.material3.DropdownMenuItem
|
||||
@@ -35,6 +27,7 @@ import androidx.compose.ui.Alignment
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.draw.clip
|
||||
import androidx.compose.ui.platform.LocalContext
|
||||
import androidx.compose.ui.res.painterResource
|
||||
import androidx.compose.ui.res.stringResource
|
||||
import androidx.compose.ui.unit.dp
|
||||
import androidx.lifecycle.compose.collectAsStateWithLifecycle
|
||||
@@ -66,7 +59,7 @@ fun ColorSchemesSettingsScreen() {
|
||||
title = stringResource(R.string.preference_screen_colors),
|
||||
topBarActions = {
|
||||
IconButton(onClick = { viewModel.createNew(context) }) {
|
||||
Icon(Icons.Rounded.Add, null)
|
||||
Icon(painterResource(R.drawable.add_24px), null)
|
||||
}
|
||||
},
|
||||
) {
|
||||
@@ -75,7 +68,7 @@ fun ColorSchemesSettingsScreen() {
|
||||
for (theme in builtin) {
|
||||
var showMenu by remember { mutableStateOf(false) }
|
||||
Preference(
|
||||
icon = if (theme.id == selectedTheme) Icons.Rounded.RadioButtonChecked else Icons.Rounded.RadioButtonUnchecked,
|
||||
icon = if (theme.id == selectedTheme) R.drawable.radio_button_checked_24px else R.drawable.radio_button_unchecked_24px,
|
||||
title = theme.name,
|
||||
controls = {
|
||||
Row(
|
||||
@@ -85,7 +78,7 @@ fun ColorSchemesSettingsScreen() {
|
||||
IconButton(
|
||||
modifier = Modifier.padding(start = 12.dp),
|
||||
onClick = { showMenu = true }) {
|
||||
Icon(Icons.Rounded.MoreVert, null)
|
||||
Icon(painterResource(R.drawable.more_vert_24px), null)
|
||||
}
|
||||
DropdownMenu(
|
||||
expanded = showMenu,
|
||||
@@ -93,7 +86,7 @@ fun ColorSchemesSettingsScreen() {
|
||||
) {
|
||||
DropdownMenuItem(
|
||||
leadingIcon = {
|
||||
Icon(Icons.Rounded.ContentCopy, null)
|
||||
Icon(painterResource(R.drawable.content_copy_24px), null)
|
||||
},
|
||||
text = { Text(stringResource(R.string.duplicate)) },
|
||||
onClick = {
|
||||
@@ -118,7 +111,7 @@ fun ColorSchemesSettingsScreen() {
|
||||
for (theme in user) {
|
||||
var showMenu by remember { mutableStateOf(false) }
|
||||
Preference(
|
||||
icon = if (theme.id == selectedTheme) Icons.Rounded.RadioButtonChecked else Icons.Rounded.RadioButtonUnchecked,
|
||||
icon = if (theme.id == selectedTheme) R.drawable.radio_button_checked_24px else R.drawable.radio_button_unchecked_24px,
|
||||
title = theme.name,
|
||||
controls = {
|
||||
Row(
|
||||
@@ -128,7 +121,7 @@ fun ColorSchemesSettingsScreen() {
|
||||
IconButton(
|
||||
modifier = Modifier.padding(start = 12.dp),
|
||||
onClick = { showMenu = true }) {
|
||||
Icon(Icons.Rounded.MoreVert, null)
|
||||
Icon(painterResource(R.drawable.more_vert_24px), null)
|
||||
}
|
||||
DropdownMenu(
|
||||
expanded = showMenu,
|
||||
@@ -136,7 +129,7 @@ fun ColorSchemesSettingsScreen() {
|
||||
) {
|
||||
DropdownMenuItem(
|
||||
leadingIcon = {
|
||||
Icon(Icons.Rounded.Edit, null)
|
||||
Icon(painterResource(R.drawable.edit_24px), null)
|
||||
},
|
||||
text = { Text(stringResource(R.string.edit)) },
|
||||
onClick = {
|
||||
@@ -146,7 +139,7 @@ fun ColorSchemesSettingsScreen() {
|
||||
)
|
||||
DropdownMenuItem(
|
||||
leadingIcon = {
|
||||
Icon(Icons.Rounded.ContentCopy, null)
|
||||
Icon(painterResource(R.drawable.content_copy_24px), null)
|
||||
},
|
||||
text = { Text(stringResource(R.string.duplicate)) },
|
||||
onClick = {
|
||||
@@ -156,7 +149,7 @@ fun ColorSchemesSettingsScreen() {
|
||||
)
|
||||
DropdownMenuItem(
|
||||
leadingIcon = {
|
||||
Icon(Icons.Rounded.Delete, null)
|
||||
Icon(painterResource(R.drawable.delete_24px), null)
|
||||
},
|
||||
text = { Text(stringResource(R.string.menu_delete)) },
|
||||
onClick = {
|
||||
|
||||
@@ -6,8 +6,6 @@ import androidx.compose.foundation.clickable
|
||||
import androidx.compose.foundation.layout.Box
|
||||
import androidx.compose.foundation.layout.size
|
||||
import androidx.compose.foundation.shape.CircleShape
|
||||
import androidx.compose.material.icons.Icons
|
||||
import androidx.compose.material.icons.rounded.CheckCircle
|
||||
import androidx.compose.material3.Icon
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.ui.Alignment
|
||||
@@ -15,7 +13,9 @@ import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.draw.clip
|
||||
import androidx.compose.ui.graphics.Color
|
||||
import androidx.compose.ui.graphics.toArgb
|
||||
import androidx.compose.ui.res.painterResource
|
||||
import androidx.compose.ui.unit.dp
|
||||
import de.mm20.launcher2.ui.R
|
||||
import de.mm20.launcher2.ui.locals.LocalDarkTheme
|
||||
import hct.Hct
|
||||
|
||||
@@ -57,7 +57,7 @@ fun ColorSwatch(
|
||||
) {
|
||||
if (selected) {
|
||||
Icon(
|
||||
Icons.Rounded.CheckCircle,
|
||||
painterResource(R.drawable.check_circle_24px),
|
||||
null,
|
||||
modifier = Modifier.size(32.dp),
|
||||
tint = iconColor,
|
||||
|
||||
@@ -12,9 +12,6 @@ import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.foundation.layout.size
|
||||
import androidx.compose.foundation.rememberScrollState
|
||||
import androidx.compose.foundation.verticalScroll
|
||||
import androidx.compose.material.icons.Icons
|
||||
import androidx.compose.material.icons.rounded.AutoFixHigh
|
||||
import androidx.compose.material.icons.rounded.SettingsSuggest
|
||||
import androidx.compose.material3.ButtonDefaults
|
||||
import androidx.compose.material3.HorizontalDivider
|
||||
import androidx.compose.material3.Icon
|
||||
@@ -31,6 +28,7 @@ import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.draw.clip
|
||||
import androidx.compose.ui.graphics.Color
|
||||
import androidx.compose.ui.graphics.toArgb
|
||||
import androidx.compose.ui.res.painterResource
|
||||
import androidx.compose.ui.res.stringResource
|
||||
import androidx.compose.ui.text.style.TextAlign
|
||||
import androidx.compose.ui.text.style.TextOverflow
|
||||
@@ -88,7 +86,7 @@ fun CorePaletteColorPreference(
|
||||
.padding(it)
|
||||
) {
|
||||
SwitchPreference(
|
||||
icon = Icons.Rounded.SettingsSuggest,
|
||||
icon = R.drawable.rule_settings_24px,
|
||||
title = stringResource(R.string.theme_color_scheme_system_default),
|
||||
value = currentValue == null,
|
||||
onValueChanged = {
|
||||
@@ -141,7 +139,7 @@ fun CorePaletteColorPreference(
|
||||
}
|
||||
) {
|
||||
Icon(
|
||||
Icons.Rounded.AutoFixHigh, null,
|
||||
painterResource(R.drawable.wand_stars_20px), null,
|
||||
modifier = Modifier
|
||||
.padding(ButtonDefaults.IconSpacing)
|
||||
.size(ButtonDefaults.IconSize)
|
||||
|
||||
@@ -16,10 +16,6 @@ import androidx.compose.foundation.layout.width
|
||||
import androidx.compose.foundation.rememberScrollState
|
||||
import androidx.compose.foundation.shape.CircleShape
|
||||
import androidx.compose.foundation.verticalScroll
|
||||
import androidx.compose.material.icons.Icons
|
||||
import androidx.compose.material.icons.rounded.Colorize
|
||||
import androidx.compose.material.icons.rounded.Palette
|
||||
import androidx.compose.material.icons.rounded.RestartAlt
|
||||
import androidx.compose.material3.ButtonDefaults
|
||||
import androidx.compose.material3.HorizontalDivider
|
||||
import androidx.compose.material3.Icon
|
||||
@@ -44,6 +40,7 @@ import androidx.compose.ui.graphics.Brush
|
||||
import androidx.compose.ui.graphics.Color
|
||||
import androidx.compose.ui.graphics.drawscope.Fill
|
||||
import androidx.compose.ui.graphics.toArgb
|
||||
import androidx.compose.ui.res.painterResource
|
||||
import androidx.compose.ui.res.stringResource
|
||||
import androidx.compose.ui.text.font.FontFamily
|
||||
import androidx.compose.ui.text.style.TextAlign
|
||||
@@ -127,7 +124,7 @@ fun ThemeColorPreference(
|
||||
active = actualValue is ColorRef,
|
||||
) {
|
||||
Icon(
|
||||
Icons.Rounded.Palette,
|
||||
painterResource(R.drawable.palette_20px),
|
||||
null,
|
||||
modifier = Modifier
|
||||
.size(SegmentedButtonDefaults.IconSize)
|
||||
@@ -148,7 +145,7 @@ fun ThemeColorPreference(
|
||||
active = actualValue is StaticColor,
|
||||
) {
|
||||
Icon(
|
||||
Icons.Rounded.Colorize,
|
||||
painterResource(R.drawable.colorize_20px),
|
||||
null,
|
||||
modifier = Modifier
|
||||
.size(SegmentedButtonDefaults.IconSize)
|
||||
@@ -424,7 +421,8 @@ fun ThemeColorPreference(
|
||||
onClick = { currentValue = null }
|
||||
) {
|
||||
Icon(
|
||||
Icons.Rounded.RestartAlt, null,
|
||||
painterResource(R.drawable.restart_alt_20px),
|
||||
null,
|
||||
modifier = Modifier
|
||||
.padding(ButtonDefaults.IconSpacing)
|
||||
.size(ButtonDefaults.IconSize)
|
||||
|
||||
@@ -2,21 +2,11 @@ package de.mm20.launcher2.ui.settings.contacts
|
||||
|
||||
import android.app.PendingIntent
|
||||
import androidx.appcompat.app.AppCompatActivity
|
||||
import androidx.compose.animation.AnimatedVisibility
|
||||
import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.material.icons.Icons
|
||||
import androidx.compose.material.icons.rounded.Call
|
||||
import androidx.compose.material.icons.rounded.ErrorOutline
|
||||
import androidx.compose.material.icons.rounded.Person
|
||||
import androidx.compose.material3.Text
|
||||
import androidx.compose.material3.TextButton
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.runtime.collectAsState
|
||||
import androidx.compose.runtime.getValue
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.platform.LocalContext
|
||||
import androidx.compose.ui.res.stringResource
|
||||
import androidx.compose.ui.unit.dp
|
||||
import androidx.lifecycle.Lifecycle
|
||||
import androidx.lifecycle.compose.collectAsStateWithLifecycle
|
||||
import androidx.lifecycle.viewmodel.compose.viewModel
|
||||
@@ -24,8 +14,6 @@ import de.mm20.launcher2.crashreporter.CrashReporter
|
||||
import de.mm20.launcher2.ktx.sendWithBackgroundPermission
|
||||
import de.mm20.launcher2.plugin.PluginState
|
||||
import de.mm20.launcher2.ui.R
|
||||
import de.mm20.launcher2.ui.component.Banner
|
||||
import de.mm20.launcher2.ui.component.MissingPermissionBanner
|
||||
import de.mm20.launcher2.ui.component.preferences.GuardedPreference
|
||||
import de.mm20.launcher2.ui.component.preferences.PreferenceCategory
|
||||
import de.mm20.launcher2.ui.component.preferences.PreferenceScreen
|
||||
@@ -60,7 +48,7 @@ fun ContactsSettingsScreen() {
|
||||
SwitchPreference(
|
||||
title = stringResource(R.string.preference_search_contacts),
|
||||
summary = stringResource(R.string.preference_search_contacts_summary),
|
||||
icon = Icons.Rounded.Person,
|
||||
icon = R.drawable.person_24px,
|
||||
value = enabledProviders.contains("local"),
|
||||
onValueChanged = {
|
||||
viewModel.setProviderEnabled("local", it)
|
||||
@@ -82,7 +70,7 @@ fun ContactsSettingsScreen() {
|
||||
},
|
||||
description = (state as? PluginState.SetupRequired)?.message
|
||||
?: stringResource(id = R.string.plugin_state_setup_required),
|
||||
icon = Icons.Rounded.ErrorOutline,
|
||||
icon = R.drawable.error_24px,
|
||||
unlockLabel = stringResource(id = R.string.plugin_action_setup),
|
||||
) {
|
||||
SwitchPreference(
|
||||
@@ -112,7 +100,7 @@ fun ContactsSettingsScreen() {
|
||||
SwitchPreference(
|
||||
title = stringResource(R.string.preference_contacts_call_on_tap),
|
||||
summary = stringResource(R.string.preference_contacts_call_on_tap_summary),
|
||||
icon = Icons.Rounded.Call,
|
||||
icon = R.drawable.call_24px,
|
||||
value = callOnTap == true && hasCallPermission == true,
|
||||
onValueChanged = {
|
||||
viewModel.setCallOnTap(it)
|
||||
|
||||
@@ -7,9 +7,6 @@ import androidx.compose.foundation.layout.Column
|
||||
import androidx.compose.foundation.layout.fillMaxWidth
|
||||
import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.foundation.rememberScrollState
|
||||
import androidx.compose.material.icons.Icons
|
||||
import androidx.compose.material.icons.rounded.BugReport
|
||||
import androidx.compose.material.icons.rounded.Share
|
||||
import androidx.compose.material3.Icon
|
||||
import androidx.compose.material3.IconButton
|
||||
import androidx.compose.material3.MaterialTheme
|
||||
@@ -21,9 +18,11 @@ import androidx.compose.runtime.remember
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.draw.clip
|
||||
import androidx.compose.ui.platform.LocalContext
|
||||
import androidx.compose.ui.res.painterResource
|
||||
import androidx.compose.ui.unit.dp
|
||||
import androidx.lifecycle.viewmodel.compose.viewModel
|
||||
import de.mm20.launcher2.crashreporter.CrashReportType
|
||||
import de.mm20.launcher2.ui.R
|
||||
import de.mm20.launcher2.ui.component.preferences.PreferenceScreen
|
||||
|
||||
@Composable
|
||||
@@ -39,11 +38,11 @@ fun CrashReportScreen(fileName: String) {
|
||||
},
|
||||
topBarActions = {
|
||||
IconButton(onClick = { crashReport?.let { viewModel.shareCrashReport(context, it) } }) {
|
||||
Icon(imageVector = Icons.Rounded.Share, contentDescription = null)
|
||||
Icon(painterResource(R.drawable.share_24px), contentDescription = null)
|
||||
}
|
||||
if (crashReport?.type == CrashReportType.Crash) {
|
||||
IconButton(onClick = { crashReport?.let { viewModel.createIssue(context, it) } }) {
|
||||
Icon(imageVector = Icons.Rounded.BugReport, contentDescription = null)
|
||||
Icon(painterResource(R.drawable.bug_report_24px), contentDescription = null)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,11 +4,6 @@ import android.text.format.DateUtils
|
||||
import androidx.compose.foundation.clickable
|
||||
import androidx.compose.foundation.layout.*
|
||||
import androidx.compose.foundation.lazy.items
|
||||
import androidx.compose.material.icons.Icons
|
||||
import androidx.compose.material.icons.rounded.Error
|
||||
import androidx.compose.material.icons.rounded.ErrorOutline
|
||||
import androidx.compose.material.icons.rounded.Warning
|
||||
import androidx.compose.material.icons.rounded.WarningAmber
|
||||
import androidx.compose.material3.*
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.runtime.CompositionLocalProvider
|
||||
@@ -17,6 +12,7 @@ import androidx.compose.ui.Alignment
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.draw.alpha
|
||||
import androidx.compose.ui.platform.LocalContext
|
||||
import androidx.compose.ui.res.painterResource
|
||||
import androidx.compose.ui.res.stringResource
|
||||
import androidx.compose.ui.text.style.TextOverflow
|
||||
import androidx.compose.ui.unit.dp
|
||||
@@ -49,7 +45,7 @@ fun CrashReporterScreen() {
|
||||
viewModel.setShowExceptions(value)
|
||||
}) {
|
||||
Icon(
|
||||
imageVector = if (showExceptions) Icons.Rounded.Warning else Icons.Rounded.WarningAmber,
|
||||
painterResource(if (showExceptions) R.drawable.warning_24px_filled else R.drawable.warning_24px),
|
||||
contentDescription = null,
|
||||
modifier = Modifier.alpha(if (showExceptions) 1f else 0.5f)
|
||||
)
|
||||
@@ -58,7 +54,7 @@ fun CrashReporterScreen() {
|
||||
viewModel.setShowCrashes(value)
|
||||
}) {
|
||||
Icon(
|
||||
imageVector = if (showCrashes) Icons.Rounded.Error else Icons.Rounded.ErrorOutline,
|
||||
painterResource(if (showCrashes) R.drawable.error_24px_filled else R.drawable.error_24px),
|
||||
contentDescription = null,
|
||||
modifier = Modifier.alpha(if (showCrashes) 1f else 0.5f)
|
||||
)
|
||||
@@ -95,7 +91,9 @@ fun CrashReporterScreen() {
|
||||
) {
|
||||
Icon(
|
||||
modifier = Modifier.padding(end = 8.dp),
|
||||
imageVector = if (it.type == CrashReportType.Exception) Icons.Rounded.Warning else Icons.Rounded.Error,
|
||||
painter = painterResource(
|
||||
if (it.type == CrashReportType.Exception) R.drawable.warning_24px else R.drawable.error_24px
|
||||
),
|
||||
contentDescription = null
|
||||
)
|
||||
Text(
|
||||
|
||||
@@ -1,11 +1,5 @@
|
||||
package de.mm20.launcher2.ui.settings.favorites
|
||||
|
||||
import androidx.compose.material.icons.Icons
|
||||
import androidx.compose.material.icons.rounded.Edit
|
||||
import androidx.compose.material.icons.rounded.Insights
|
||||
import androidx.compose.material.icons.rounded.Sort
|
||||
import androidx.compose.material.icons.rounded.SwapVert
|
||||
import androidx.compose.material.icons.rounded.TableRows
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.runtime.collectAsState
|
||||
import androidx.compose.runtime.getValue
|
||||
@@ -36,7 +30,7 @@ fun FavoritesSettingsScreen() {
|
||||
Preference(
|
||||
title = stringResource(R.string.menu_item_edit_favs),
|
||||
summary = stringResource(R.string.preference_edit_favorites_summary),
|
||||
icon = Icons.Rounded.Sort,
|
||||
icon = R.drawable.sort_24px,
|
||||
onClick = {
|
||||
showEditSheet = true
|
||||
}
|
||||
@@ -53,7 +47,7 @@ fun FavoritesSettingsScreen() {
|
||||
onValueChanged = {
|
||||
viewModel.setFrequentlyUsed(it)
|
||||
},
|
||||
icon = Icons.Rounded.Insights
|
||||
icon = R.drawable.show_chart_24px,
|
||||
)
|
||||
val frequentlyUsedRows by viewModel.frequentlyUsedRows.collectAsState()
|
||||
SliderPreference(
|
||||
@@ -65,12 +59,12 @@ fun FavoritesSettingsScreen() {
|
||||
onValueChanged = {
|
||||
viewModel.setFrequentlyUsedRows(it)
|
||||
},
|
||||
icon = Icons.Rounded.TableRows
|
||||
icon = R.drawable.table_rows_24px,
|
||||
)
|
||||
val searchResultWeightFactor by viewModel.searchResultWeightFactor.collectAsState()
|
||||
ListPreference(
|
||||
title = stringResource(R.string.preference_search_result_ordering_weight_factor),
|
||||
icon = Icons.Rounded.SwapVert,
|
||||
icon = R.drawable.swap_vert_24px,
|
||||
value = searchResultWeightFactor,
|
||||
items = listOf(
|
||||
stringResource(R.string.preference_search_result_ordering_weight_factor_low) to WeightFactor.Low,
|
||||
@@ -92,7 +86,7 @@ fun FavoritesSettingsScreen() {
|
||||
onValueChanged = {
|
||||
viewModel.setEditButton(it)
|
||||
},
|
||||
icon = Icons.Rounded.Edit
|
||||
icon = R.drawable.edit_24px,
|
||||
)
|
||||
SwitchPreference(
|
||||
title = stringResource(R.string.preference_compact_tags),
|
||||
|
||||
@@ -3,13 +3,7 @@ package de.mm20.launcher2.ui.settings.filesearch
|
||||
import android.app.PendingIntent
|
||||
import androidx.appcompat.app.AppCompatActivity
|
||||
import androidx.compose.foundation.layout.fillMaxWidth
|
||||
import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.material.icons.Icons
|
||||
import androidx.compose.material.icons.rounded.AccountBox
|
||||
import androidx.compose.material.icons.rounded.ErrorOutline
|
||||
import androidx.compose.material3.LinearProgressIndicator
|
||||
import androidx.compose.material3.Text
|
||||
import androidx.compose.material3.TextButton
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.runtime.LaunchedEffect
|
||||
import androidx.compose.runtime.collectAsState
|
||||
@@ -18,7 +12,6 @@ import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.platform.LocalContext
|
||||
import androidx.compose.ui.platform.LocalLifecycleOwner
|
||||
import androidx.compose.ui.res.stringResource
|
||||
import androidx.compose.ui.unit.dp
|
||||
import androidx.lifecycle.Lifecycle
|
||||
import androidx.lifecycle.compose.collectAsStateWithLifecycle
|
||||
import androidx.lifecycle.repeatOnLifecycle
|
||||
@@ -29,7 +22,6 @@ import de.mm20.launcher2.ktx.isAtLeastApiLevel
|
||||
import de.mm20.launcher2.ktx.sendWithBackgroundPermission
|
||||
import de.mm20.launcher2.plugin.PluginState
|
||||
import de.mm20.launcher2.ui.R
|
||||
import de.mm20.launcher2.ui.component.Banner
|
||||
import de.mm20.launcher2.ui.component.preferences.GuardedPreference
|
||||
import de.mm20.launcher2.ui.component.preferences.PreferenceCategory
|
||||
import de.mm20.launcher2.ui.component.preferences.PreferenceScreen
|
||||
@@ -93,7 +85,7 @@ fun FileSearchSettingsScreen() {
|
||||
onUnlock = {
|
||||
viewModel.login(context as AppCompatActivity, AccountType.Nextcloud)
|
||||
},
|
||||
icon = Icons.Rounded.AccountBox,
|
||||
icon = R.drawable.account_box_24px,
|
||||
description = stringResource(R.string.no_account_nextcloud),
|
||||
unlockLabel = stringResource(R.string.connect_account),
|
||||
) {
|
||||
@@ -117,7 +109,7 @@ fun FileSearchSettingsScreen() {
|
||||
onUnlock = {
|
||||
viewModel.login(context as AppCompatActivity, AccountType.Owncloud)
|
||||
},
|
||||
icon = Icons.Rounded.AccountBox,
|
||||
icon = R.drawable.account_box_24px,
|
||||
description = stringResource(R.string.no_account_owncloud),
|
||||
unlockLabel = stringResource(R.string.connect_account),
|
||||
) {
|
||||
@@ -149,7 +141,7 @@ fun FileSearchSettingsScreen() {
|
||||
},
|
||||
description = (state as? PluginState.SetupRequired)?.message
|
||||
?: stringResource(id = R.string.plugin_state_setup_required),
|
||||
icon = Icons.Rounded.ErrorOutline,
|
||||
icon = R.drawable.error_24px,
|
||||
unlockLabel = stringResource(id = R.string.plugin_action_setup),
|
||||
) {
|
||||
SwitchPreference(
|
||||
|
||||
@@ -8,8 +8,6 @@ import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.foundation.layout.size
|
||||
import androidx.compose.material.icons.Icons
|
||||
import androidx.compose.material.icons.automirrored.rounded.ArrowBack
|
||||
import androidx.compose.material.icons.outlined.Info
|
||||
import androidx.compose.material.icons.rounded.ArrowBack
|
||||
import androidx.compose.material3.CenterAlignedTopAppBar
|
||||
import androidx.compose.material3.HorizontalDivider
|
||||
import androidx.compose.material3.Icon
|
||||
@@ -27,6 +25,7 @@ import androidx.compose.ui.Alignment
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.graphics.Color
|
||||
import androidx.compose.ui.platform.LocalContext
|
||||
import androidx.compose.ui.res.painterResource
|
||||
import androidx.compose.ui.res.stringResource
|
||||
import androidx.compose.ui.text.style.TextOverflow
|
||||
import androidx.compose.ui.unit.dp
|
||||
@@ -40,7 +39,7 @@ import de.mm20.launcher2.ui.component.dragndrop.LazyDragAndDropColumn
|
||||
import de.mm20.launcher2.ui.component.dragndrop.rememberLazyDragAndDropListState
|
||||
import de.mm20.launcher2.ui.component.preferences.SwitchPreference
|
||||
import de.mm20.launcher2.ui.launcher.search.filters.getLabel
|
||||
import de.mm20.launcher2.ui.launcher.search.filters.icon
|
||||
import de.mm20.launcher2.ui.launcher.search.filters.iconMedium
|
||||
import de.mm20.launcher2.ui.launcher.search.filters.isCategory
|
||||
import de.mm20.launcher2.ui.locals.LocalNavController
|
||||
|
||||
@@ -60,8 +59,10 @@ fun FilterBarSettingsScreen() {
|
||||
it.key is KeyboardFilterBarItem
|
||||
},
|
||||
onItemMove = { from, to ->
|
||||
val item = (from.key as? KeyboardFilterBarItem) ?: return@rememberLazyDragAndDropListState
|
||||
val toItem = (to.key as? KeyboardFilterBarItem) ?: return@rememberLazyDragAndDropListState
|
||||
val item =
|
||||
(from.key as? KeyboardFilterBarItem) ?: return@rememberLazyDragAndDropListState
|
||||
val toItem =
|
||||
(to.key as? KeyboardFilterBarItem) ?: return@rememberLazyDragAndDropListState
|
||||
viewModel.moveItem(item, toItem)
|
||||
}
|
||||
)
|
||||
@@ -91,7 +92,10 @@ fun FilterBarSettingsScreen() {
|
||||
activity?.onBackPressed()
|
||||
}
|
||||
}) {
|
||||
Icon(imageVector = Icons.AutoMirrored.Rounded.ArrowBack, contentDescription = "Back")
|
||||
Icon(
|
||||
imageVector = Icons.AutoMirrored.Rounded.ArrowBack,
|
||||
contentDescription = "Back"
|
||||
)
|
||||
}
|
||||
},
|
||||
)
|
||||
@@ -116,8 +120,11 @@ fun FilterBarSettingsScreen() {
|
||||
.padding(start = 28.dp, top = 16.dp, end = 16.dp, bottom = 16.dp),
|
||||
verticalAlignment = Alignment.CenterVertically,
|
||||
) {
|
||||
Icon(Icons.Outlined.Info, null,
|
||||
modifier = Modifier.padding(end = 24.dp).size(16.dp),
|
||||
Icon(
|
||||
painterResource(R.drawable.info_20px), null,
|
||||
modifier = Modifier
|
||||
.padding(end = 24.dp)
|
||||
.size(16.dp),
|
||||
tint = MaterialTheme.colorScheme.secondary
|
||||
)
|
||||
Text(
|
||||
@@ -130,7 +137,8 @@ fun FilterBarSettingsScreen() {
|
||||
}
|
||||
for (i in 0 until KeyboardFilterBarItem.entries.size) {
|
||||
val item = enabledItems!!.getOrNull(i) ?: disabledItems[i - enabledItems!!.size]
|
||||
val prevItem = enabledItems!!.getOrNull(i - 1) ?: disabledItems.getOrNull(i - enabledItems!!.size - 1)
|
||||
val prevItem = enabledItems!!.getOrNull(i - 1)
|
||||
?: disabledItems.getOrNull(i - enabledItems!!.size - 1)
|
||||
if (prevItem != null && prevItem.isCategory != item.isCategory) {
|
||||
item(key = "divider-$i") {
|
||||
HorizontalDivider()
|
||||
@@ -146,7 +154,7 @@ fun FilterBarSettingsScreen() {
|
||||
) {
|
||||
SwitchPreference(
|
||||
title = item.getLabel(context),
|
||||
icon = item.icon,
|
||||
icon = item.iconMedium,
|
||||
value = enabledItems!!.contains(item), onValueChanged = {
|
||||
if (it) {
|
||||
viewModel.addAction(item)
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
package de.mm20.launcher2.ui.settings.gestures
|
||||
|
||||
import androidx.annotation.DrawableRes
|
||||
import androidx.appcompat.app.AppCompatActivity
|
||||
import androidx.compose.animation.AnimatedVisibility
|
||||
import androidx.compose.foundation.background
|
||||
import androidx.compose.foundation.clickable
|
||||
import androidx.compose.foundation.layout.Box
|
||||
@@ -9,14 +9,6 @@ import androidx.compose.foundation.layout.Row
|
||||
import androidx.compose.foundation.layout.height
|
||||
import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.foundation.layout.width
|
||||
import androidx.compose.material.icons.Icons
|
||||
import androidx.compose.material.icons.rounded.Adjust
|
||||
import androidx.compose.material.icons.rounded.Circle
|
||||
import androidx.compose.material.icons.rounded.Home
|
||||
import androidx.compose.material.icons.rounded.SwipeDownAlt
|
||||
import androidx.compose.material.icons.rounded.SwipeLeftAlt
|
||||
import androidx.compose.material.icons.rounded.SwipeRightAlt
|
||||
import androidx.compose.material.icons.rounded.SwipeUpAlt
|
||||
import androidx.compose.material3.LocalContentColor
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.runtime.collectAsState
|
||||
@@ -27,7 +19,6 @@ import androidx.compose.runtime.setValue
|
||||
import androidx.compose.ui.Alignment
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.draw.alpha
|
||||
import androidx.compose.ui.graphics.vector.ImageVector
|
||||
import androidx.compose.ui.platform.LocalContext
|
||||
import androidx.compose.ui.res.stringResource
|
||||
import androidx.compose.ui.unit.dp
|
||||
@@ -39,7 +30,6 @@ import de.mm20.launcher2.preferences.GestureAction
|
||||
import de.mm20.launcher2.search.SavableSearchable
|
||||
import de.mm20.launcher2.ui.R
|
||||
import de.mm20.launcher2.ui.common.SearchablePicker
|
||||
import de.mm20.launcher2.ui.component.MissingPermissionBanner
|
||||
import de.mm20.launcher2.ui.component.ShapedLauncherIcon
|
||||
import de.mm20.launcher2.ui.component.preferences.GuardedPreference
|
||||
import de.mm20.launcher2.ui.component.preferences.ListPreference
|
||||
@@ -86,7 +76,7 @@ fun GestureSettingsScreen() {
|
||||
) {
|
||||
GesturePreference(
|
||||
title = stringResource(R.string.preference_gesture_swipe_down),
|
||||
icon = Icons.Rounded.SwipeDownAlt,
|
||||
icon = R.drawable.swipe_down_alt_24px,
|
||||
value = swipeDown,
|
||||
onValueChanged = { viewModel.setSwipeDown(it) },
|
||||
options = options,
|
||||
@@ -108,7 +98,7 @@ fun GestureSettingsScreen() {
|
||||
) {
|
||||
GesturePreference(
|
||||
title = stringResource(R.string.preference_gesture_swipe_left),
|
||||
icon = Icons.Rounded.SwipeLeftAlt,
|
||||
icon = R.drawable.swipe_left_alt_24px,
|
||||
value = swipeLeft,
|
||||
onValueChanged = { viewModel.setSwipeLeft(it) },
|
||||
options = options,
|
||||
@@ -130,7 +120,7 @@ fun GestureSettingsScreen() {
|
||||
) {
|
||||
GesturePreference(
|
||||
title = stringResource(R.string.preference_gesture_swipe_right),
|
||||
icon = Icons.Rounded.SwipeRightAlt,
|
||||
icon = R.drawable.swipe_right_alt_24px,
|
||||
value = swipeRight,
|
||||
onValueChanged = { viewModel.setSwipeRight(it) },
|
||||
options = options,
|
||||
@@ -152,7 +142,7 @@ fun GestureSettingsScreen() {
|
||||
) {
|
||||
GesturePreference(
|
||||
title = stringResource(R.string.preference_gesture_swipe_up),
|
||||
icon = Icons.Rounded.SwipeUpAlt,
|
||||
icon = R.drawable.swipe_up_alt_24px,
|
||||
value = swipeUp,
|
||||
onValueChanged = { viewModel.setSwipeUp(it) },
|
||||
options = options,
|
||||
@@ -174,7 +164,7 @@ fun GestureSettingsScreen() {
|
||||
) {
|
||||
GesturePreference(
|
||||
title = stringResource(R.string.preference_gesture_double_tap),
|
||||
icon = Icons.Rounded.Adjust,
|
||||
icon = R.drawable.adjust_24px,
|
||||
value = doubleTap,
|
||||
onValueChanged = { viewModel.setDoubleTap(it) },
|
||||
options = options,
|
||||
@@ -196,7 +186,7 @@ fun GestureSettingsScreen() {
|
||||
) {
|
||||
GesturePreference(
|
||||
title = stringResource(R.string.preference_gesture_long_press),
|
||||
icon = Icons.Rounded.Circle,
|
||||
icon = R.drawable.circle_24px,
|
||||
value = longPress,
|
||||
onValueChanged = { viewModel.setLongPress(it) },
|
||||
options = options,
|
||||
@@ -217,7 +207,7 @@ fun GestureSettingsScreen() {
|
||||
) {
|
||||
GesturePreference(
|
||||
title = stringResource(R.string.preference_gesture_home_button),
|
||||
icon = Icons.Rounded.Home,
|
||||
icon = R.drawable.home_24px,
|
||||
value = homeButton,
|
||||
onValueChanged = { viewModel.setHomeButton(it) },
|
||||
options = options,
|
||||
@@ -246,7 +236,7 @@ fun requiresAccessibilityService(action: GestureAction?): Boolean {
|
||||
@Composable
|
||||
fun GesturePreference(
|
||||
title: String,
|
||||
icon: ImageVector,
|
||||
@DrawableRes icon: Int,
|
||||
value: GestureAction?,
|
||||
onValueChanged: (GestureAction) -> Unit,
|
||||
options: List<Pair<String, GestureAction>>,
|
||||
@@ -266,7 +256,8 @@ fun GesturePreference(
|
||||
icon = icon,
|
||||
items = options,
|
||||
value = value,
|
||||
summary = options.find { value?.javaClass == it.second.javaClass }?.first ?: stringResource(R.string.gesture_action_none),
|
||||
summary = options.find { value?.javaClass == it.second.javaClass }?.first
|
||||
?: stringResource(R.string.gesture_action_none),
|
||||
onValueChanged = { if (it != null) onValueChanged(it) }
|
||||
)
|
||||
}
|
||||
|
||||
@@ -8,13 +8,7 @@ import androidx.compose.foundation.layout.Row
|
||||
import androidx.compose.foundation.layout.fillMaxWidth
|
||||
import androidx.compose.foundation.layout.height
|
||||
import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.foundation.lazy.items
|
||||
import androidx.compose.foundation.lazy.itemsIndexed
|
||||
import androidx.compose.material.icons.Icons
|
||||
import androidx.compose.material.icons.outlined.Visibility
|
||||
import androidx.compose.material.icons.rounded.Check
|
||||
import androidx.compose.material.icons.rounded.Visibility
|
||||
import androidx.compose.material.icons.rounded.VisibilityOff
|
||||
import androidx.compose.material3.DropdownMenu
|
||||
import androidx.compose.material3.DropdownMenuItem
|
||||
import androidx.compose.material3.Icon
|
||||
@@ -31,6 +25,7 @@ import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.draw.alpha
|
||||
import androidx.compose.ui.draw.clip
|
||||
import androidx.compose.ui.platform.LocalDensity
|
||||
import androidx.compose.ui.res.painterResource
|
||||
import androidx.compose.ui.res.stringResource
|
||||
import androidx.compose.ui.unit.dp
|
||||
import androidx.lifecycle.viewmodel.compose.viewModel
|
||||
@@ -224,7 +219,7 @@ private fun VisibilityDropdown(
|
||||
DropdownMenuItem(
|
||||
leadingIcon = {
|
||||
Icon(
|
||||
imageVector = Icons.Rounded.Visibility,
|
||||
painterResource(R.drawable.visibility_24px_filled),
|
||||
contentDescription = null
|
||||
)
|
||||
},
|
||||
@@ -243,7 +238,7 @@ private fun VisibilityDropdown(
|
||||
trailingIcon = {
|
||||
if (value == VisibilityLevel.Default) {
|
||||
Icon(
|
||||
imageVector = Icons.Rounded.Check,
|
||||
painterResource(R.drawable.check_24px),
|
||||
tint = MaterialTheme.colorScheme.primary,
|
||||
contentDescription = null
|
||||
)
|
||||
@@ -254,7 +249,7 @@ private fun VisibilityDropdown(
|
||||
DropdownMenuItem(
|
||||
leadingIcon = {
|
||||
Icon(
|
||||
imageVector = Icons.Outlined.Visibility,
|
||||
painterResource(R.drawable.visibility_24px),
|
||||
contentDescription = null
|
||||
)
|
||||
},
|
||||
@@ -267,7 +262,7 @@ private fun VisibilityDropdown(
|
||||
trailingIcon = {
|
||||
if (value == VisibilityLevel.SearchOnly) {
|
||||
Icon(
|
||||
imageVector = Icons.Rounded.Check,
|
||||
painterResource(R.drawable.check_24px),
|
||||
tint = MaterialTheme.colorScheme.primary,
|
||||
contentDescription = null
|
||||
)
|
||||
@@ -278,7 +273,7 @@ private fun VisibilityDropdown(
|
||||
DropdownMenuItem(
|
||||
leadingIcon = {
|
||||
Icon(
|
||||
imageVector = Icons.Rounded.VisibilityOff,
|
||||
painterResource(R.drawable.visibility_off_24px),
|
||||
contentDescription = null
|
||||
)
|
||||
},
|
||||
@@ -291,7 +286,7 @@ private fun VisibilityDropdown(
|
||||
trailingIcon = {
|
||||
if (value == VisibilityLevel.Hidden) {
|
||||
Icon(
|
||||
imageVector = Icons.Rounded.Check,
|
||||
painterResource(R.drawable.check_24px),
|
||||
tint = MaterialTheme.colorScheme.primary,
|
||||
contentDescription = null
|
||||
)
|
||||
@@ -326,11 +321,12 @@ private fun HiddenItem(
|
||||
if (visibility != null) {
|
||||
Icon(
|
||||
modifier = Modifier.alpha(if (visibility == VisibilityLevel.Hidden) 0.3f else 1f),
|
||||
imageVector = when (visibility) {
|
||||
VisibilityLevel.Hidden -> Icons.Rounded.VisibilityOff
|
||||
VisibilityLevel.Default -> Icons.Rounded.Visibility
|
||||
VisibilityLevel.SearchOnly -> Icons.Outlined.Visibility
|
||||
},
|
||||
painter = painterResource(
|
||||
when (visibility) {
|
||||
VisibilityLevel.Hidden -> R.drawable.visibility_off_24px
|
||||
VisibilityLevel.Default -> R.drawable.visibility_24px_filled
|
||||
VisibilityLevel.SearchOnly -> R.drawable.visibility_24px
|
||||
}),
|
||||
tint = if (visibility == VisibilityLevel.Default) MaterialTheme.colorScheme.primary
|
||||
else MaterialTheme.colorScheme.onSurfaceVariant,
|
||||
contentDescription = null
|
||||
|
||||
@@ -17,12 +17,6 @@ import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.foundation.layout.size
|
||||
import androidx.compose.foundation.rememberScrollState
|
||||
import androidx.compose.foundation.verticalScroll
|
||||
import androidx.compose.material.icons.Icons
|
||||
import androidx.compose.material.icons.outlined.Circle
|
||||
import androidx.compose.material.icons.rounded.AutoAwesome
|
||||
import androidx.compose.material.icons.rounded.CheckCircle
|
||||
import androidx.compose.material.icons.rounded.DarkMode
|
||||
import androidx.compose.material.icons.rounded.LightMode
|
||||
import androidx.compose.material3.Icon
|
||||
import androidx.compose.material3.IconButton
|
||||
import androidx.compose.material3.MaterialTheme
|
||||
@@ -30,23 +24,21 @@ import androidx.compose.material3.SegmentedButton
|
||||
import androidx.compose.material3.SegmentedButtonDefaults
|
||||
import androidx.compose.material3.SingleChoiceSegmentedButtonRow
|
||||
import androidx.compose.material3.Text
|
||||
import androidx.compose.material3.rememberModalBottomSheetState
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.runtime.getValue
|
||||
import androidx.compose.runtime.mutableStateOf
|
||||
import androidx.compose.runtime.remember
|
||||
import androidx.compose.runtime.rememberCoroutineScope
|
||||
import androidx.compose.runtime.setValue
|
||||
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.platform.LocalContext
|
||||
import androidx.compose.ui.res.painterResource
|
||||
import androidx.compose.ui.res.stringResource
|
||||
import androidx.compose.ui.unit.dp
|
||||
import androidx.lifecycle.compose.collectAsStateWithLifecycle
|
||||
import androidx.lifecycle.viewmodel.compose.viewModel
|
||||
import de.mm20.launcher2.preferences.ClockWidgetColors
|
||||
import de.mm20.launcher2.preferences.SearchBarColors
|
||||
import de.mm20.launcher2.preferences.SearchBarStyle
|
||||
import de.mm20.launcher2.preferences.SystemBarColors
|
||||
@@ -310,7 +302,8 @@ fun SearchBarStylePreference(
|
||||
SearchBarStyle.entries
|
||||
}
|
||||
|
||||
val darkColors = LocalPreferDarkContentOverWallpaper.current && colors == SearchBarColors.Auto || colors == SearchBarColors.Dark
|
||||
val darkColors =
|
||||
LocalPreferDarkContentOverWallpaper.current && colors == SearchBarColors.Auto || colors == SearchBarColors.Dark
|
||||
|
||||
BottomSheetDialog(
|
||||
onDismissRequest = {
|
||||
@@ -334,7 +327,7 @@ fun SearchBarStylePreference(
|
||||
) {
|
||||
Text(
|
||||
text = stringResource(
|
||||
when(style) {
|
||||
when (style) {
|
||||
SearchBarStyle.Transparent -> R.string.preference_search_bar_style_transparent
|
||||
SearchBarStyle.Solid -> R.string.preference_search_bar_style_solid
|
||||
SearchBarStyle.Hidden -> R.string.preference_search_bar_style_hidden
|
||||
@@ -350,7 +343,10 @@ fun SearchBarStylePreference(
|
||||
}
|
||||
) {
|
||||
Icon(
|
||||
if (style == value) Icons.Rounded.CheckCircle else Icons.Outlined.Circle,
|
||||
painterResource(
|
||||
if (style == value) R.drawable.check_circle_24px_filled
|
||||
else R.drawable.circle_24px
|
||||
),
|
||||
contentDescription = null,
|
||||
tint = if (style == value) MaterialTheme.colorScheme.primary else MaterialTheme.colorScheme.onSurface,
|
||||
)
|
||||
@@ -365,7 +361,7 @@ fun SearchBarStylePreference(
|
||||
)
|
||||
.clip(MaterialTheme.shapes.medium)
|
||||
.background(
|
||||
when {
|
||||
when {
|
||||
style != SearchBarStyle.Transparent -> MaterialTheme.colorScheme.inverseSurface
|
||||
LocalDarkTheme.current != darkColors -> MaterialTheme.colorScheme.surfaceContainer
|
||||
else -> MaterialTheme.colorScheme.inverseSurface
|
||||
@@ -393,7 +389,9 @@ fun SearchBarStylePreference(
|
||||
}
|
||||
if (style == SearchBarStyle.Transparent) {
|
||||
SingleChoiceSegmentedButtonRow(
|
||||
modifier = Modifier.fillMaxWidth().padding(top = 16.dp),
|
||||
modifier = Modifier
|
||||
.fillMaxWidth()
|
||||
.padding(top = 16.dp),
|
||||
) {
|
||||
SegmentedButton(
|
||||
selected = colors == SearchBarColors.Auto,
|
||||
@@ -406,7 +404,7 @@ fun SearchBarStylePreference(
|
||||
),
|
||||
) {
|
||||
Icon(
|
||||
imageVector = Icons.Rounded.AutoAwesome,
|
||||
painterResource(R.drawable.auto_awesome_20dp),
|
||||
contentDescription = null,
|
||||
modifier = Modifier.size(SegmentedButtonDefaults.IconSize)
|
||||
)
|
||||
@@ -422,7 +420,7 @@ fun SearchBarStylePreference(
|
||||
),
|
||||
) {
|
||||
Icon(
|
||||
imageVector = Icons.Rounded.LightMode,
|
||||
painterResource(R.drawable.light_mode_20px),
|
||||
contentDescription = null,
|
||||
modifier = Modifier.size(SegmentedButtonDefaults.IconSize)
|
||||
)
|
||||
@@ -438,7 +436,7 @@ fun SearchBarStylePreference(
|
||||
),
|
||||
) {
|
||||
Icon(
|
||||
imageVector = Icons.Rounded.DarkMode,
|
||||
painterResource(R.drawable.dark_mode_20px),
|
||||
contentDescription = null,
|
||||
modifier = Modifier.size(SegmentedButtonDefaults.IconSize)
|
||||
)
|
||||
|
||||
@@ -15,8 +15,6 @@ import androidx.compose.foundation.lazy.LazyColumn
|
||||
import androidx.compose.foundation.lazy.grid.GridCells
|
||||
import androidx.compose.foundation.lazy.grid.LazyVerticalGrid
|
||||
import androidx.compose.foundation.lazy.grid.items
|
||||
import androidx.compose.material.icons.Icons
|
||||
import androidx.compose.material.icons.rounded.Palette
|
||||
import androidx.compose.material3.HorizontalDivider
|
||||
import androidx.compose.material3.Icon
|
||||
import androidx.compose.material3.MaterialTheme
|
||||
@@ -34,6 +32,7 @@ import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.draw.clip
|
||||
import androidx.compose.ui.platform.LocalContext
|
||||
import androidx.compose.ui.platform.LocalDensity
|
||||
import androidx.compose.ui.res.painterResource
|
||||
import androidx.compose.ui.res.stringResource
|
||||
import androidx.compose.ui.text.style.TextAlign
|
||||
import androidx.compose.ui.unit.dp
|
||||
@@ -347,7 +346,7 @@ private fun IconPackSelectorSheet(
|
||||
Icon(
|
||||
modifier = Modifier
|
||||
.size(20.dp),
|
||||
imageVector = Icons.Rounded.Palette,
|
||||
painter = painterResource(R.drawable.palette_20px),
|
||||
contentDescription = null,
|
||||
tint = MaterialTheme.colorScheme.primary
|
||||
)
|
||||
|
||||
@@ -1,17 +1,8 @@
|
||||
package de.mm20.launcher2.ui.settings.integrations
|
||||
|
||||
import androidx.compose.material.icons.Icons
|
||||
import androidx.compose.material.icons.filled.Check
|
||||
import androidx.compose.material.icons.rounded.LightMode
|
||||
import androidx.compose.material.icons.rounded.PlayCircleOutline
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.ui.res.stringResource
|
||||
import androidx.lifecycle.viewmodel.compose.viewModel
|
||||
import de.mm20.launcher2.icons.BreezyWeather
|
||||
import de.mm20.launcher2.icons.Google
|
||||
import de.mm20.launcher2.icons.Nextcloud
|
||||
import de.mm20.launcher2.icons.Owncloud
|
||||
import de.mm20.launcher2.icons.Wikipedia
|
||||
import de.mm20.launcher2.ui.R
|
||||
import de.mm20.launcher2.ui.component.preferences.Preference
|
||||
import de.mm20.launcher2.ui.component.preferences.PreferenceCategory
|
||||
@@ -28,14 +19,14 @@ fun IntegrationsSettingsScreen() {
|
||||
PreferenceCategory {
|
||||
Preference(
|
||||
title = stringResource(R.string.preference_weather_integration),
|
||||
icon = Icons.Rounded.LightMode,
|
||||
icon = R.drawable.light_mode_24px,
|
||||
onClick = {
|
||||
navController?.navigate("settings/integrations/weather")
|
||||
}
|
||||
)
|
||||
Preference(
|
||||
title = stringResource(R.string.preference_media_integration),
|
||||
icon = Icons.Rounded.PlayCircleOutline,
|
||||
icon = R.drawable.play_circle_24px,
|
||||
onClick = {
|
||||
navController?.navigate("settings/integrations/media")
|
||||
}
|
||||
@@ -46,35 +37,35 @@ fun IntegrationsSettingsScreen() {
|
||||
PreferenceCategory {
|
||||
Preference(
|
||||
title = stringResource(R.string.preference_nextcloud),
|
||||
icon = Icons.Rounded.Nextcloud,
|
||||
icon = R.drawable.nextcloud,
|
||||
onClick = {
|
||||
navController?.navigate("settings/integrations/nextcloud")
|
||||
}
|
||||
)
|
||||
Preference(
|
||||
title = stringResource(R.string.preference_owncloud),
|
||||
icon = Icons.Rounded.Owncloud,
|
||||
icon = R.drawable.owncloud,
|
||||
onClick = {
|
||||
navController?.navigate("settings/integrations/owncloud")
|
||||
}
|
||||
)
|
||||
Preference(
|
||||
title = stringResource(R.string.preference_search_wikipedia),
|
||||
icon = Icons.Rounded.Wikipedia,
|
||||
icon = R.drawable.wikipedia,
|
||||
onClick = {
|
||||
navController?.navigate("settings/search/wikipedia")
|
||||
}
|
||||
)
|
||||
Preference(
|
||||
title = stringResource(R.string.preference_tasks_integration),
|
||||
icon = Icons.Default.Check,
|
||||
icon = R.drawable.check_24px_sharp,
|
||||
onClick = {
|
||||
navController?.navigate("settings/integrations/tasks")
|
||||
}
|
||||
)
|
||||
Preference(
|
||||
title = stringResource(R.string.preference_breezyweather_integration),
|
||||
icon = Icons.Rounded.BreezyWeather,
|
||||
icon = R.drawable.breezy_weather,
|
||||
onClick = {
|
||||
navController?.navigate("settings/integrations/breezyweather")
|
||||
}
|
||||
|
||||
@@ -6,9 +6,6 @@ import androidx.browser.customtabs.CustomTabsIntent
|
||||
import androidx.compose.foundation.layout.Column
|
||||
import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.foundation.lazy.LazyColumn
|
||||
import androidx.compose.material.icons.Icons
|
||||
import androidx.compose.material.icons.rounded.ArrowBack
|
||||
import androidx.compose.material.icons.rounded.OpenInBrowser
|
||||
import androidx.compose.material3.*
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.runtime.collectAsState
|
||||
@@ -17,6 +14,7 @@ import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.graphics.toArgb
|
||||
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.unit.dp
|
||||
import androidx.lifecycle.viewmodel.compose.viewModel
|
||||
@@ -45,7 +43,7 @@ fun LicenseScreen(library: OpenSourceLibrary) {
|
||||
IconButton(onClick = {
|
||||
navController?.navigateUp()
|
||||
}) {
|
||||
Icon(imageVector = Icons.Rounded.ArrowBack, contentDescription = "Back")
|
||||
Icon(painterResource(R.drawable.arrow_back_24px), contentDescription = "Back")
|
||||
}
|
||||
},
|
||||
scrollBehavior = scrollBehavior,
|
||||
@@ -60,7 +58,7 @@ fun LicenseScreen(library: OpenSourceLibrary) {
|
||||
.launchUrl(context, Uri.parse(library.url))
|
||||
}) {
|
||||
Icon(
|
||||
imageVector = Icons.Rounded.OpenInBrowser,
|
||||
painterResource(R.drawable.open_in_browser_24px),
|
||||
contentDescription = stringResource(
|
||||
R.string.open_webpage
|
||||
)
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user