From f1c978d1679ce6b53c59fad681ada71935151c46 Mon Sep 17 00:00:00 2001 From: Pr0pHesyer <74277431+Pr0pHesyer@users.noreply.github.com> Date: Thu, 20 Jun 2024 16:49:41 +0800 Subject: [PATCH] Added light theme support, monochrome laucher icon --- .../com/rtbishop/look4sat/MainActivity.kt | 2 +- .../look4sat/presentation/MainTheme.kt | 114 --------- .../presentation/components/Common.kt | 2 +- .../presentation/entries/EntriesDialog.kt | 2 +- .../presentation/entries/EntriesScreen.kt | 2 +- .../look4sat/presentation/info/InfoScreen.kt | 2 +- .../look4sat/presentation/map/MapScreen.kt | 8 +- .../look4sat/presentation/map/MapViewModel.kt | 2 + .../presentation/passes/PassesDialog.kt | 2 +- .../presentation/passes/PassesScreen.kt | 5 +- .../look4sat/presentation/radar/RadarView.kt | 90 +------ .../presentation/radar/RadarViewModel.kt | 1 + .../presentation/settings/SettingsDialog.kt | 2 +- .../presentation/settings/SettingsScreen.kt | 31 ++- .../settings/SettingsViewModel.kt | 2 +- .../look4sat/presentation/theme/Color.kt | 225 ++++++++++++++++++ .../look4sat/presentation/theme/Theme.kt | 217 +++++++++++++++++ app/src/main/res/drawable/launcher_mc.xml | 20 ++ app/src/main/res/mipmap/ic_launcher.xml | 1 + app/src/main/res/mipmap/ic_launcher_round.xml | 1 + app/src/main/res/values-ru/strings.xml | 1 + app/src/main/res/values-si/strings.xml | 1 + app/src/main/res/values-zh-rCN/strings.xml | 1 + app/src/main/res/values/strings.xml | 1 + .../look4sat/data/repository/SettingsRepo.kt | 9 +- .../look4sat/domain/model/Settings.kt | 3 +- .../domain/repository/ISettingsRepo.kt | 1 + 27 files changed, 530 insertions(+), 218 deletions(-) delete mode 100644 app/src/main/java/com/rtbishop/look4sat/presentation/MainTheme.kt create mode 100644 app/src/main/java/com/rtbishop/look4sat/presentation/theme/Color.kt create mode 100644 app/src/main/java/com/rtbishop/look4sat/presentation/theme/Theme.kt create mode 100644 app/src/main/res/drawable/launcher_mc.xml diff --git a/app/src/main/java/com/rtbishop/look4sat/MainActivity.kt b/app/src/main/java/com/rtbishop/look4sat/MainActivity.kt index 040f5892..2cba4f5f 100644 --- a/app/src/main/java/com/rtbishop/look4sat/MainActivity.kt +++ b/app/src/main/java/com/rtbishop/look4sat/MainActivity.kt @@ -25,7 +25,7 @@ import androidx.activity.ComponentActivity import androidx.activity.compose.setContent import androidx.core.splashscreen.SplashScreen.Companion.installSplashScreen import com.rtbishop.look4sat.presentation.MainScreen -import com.rtbishop.look4sat.presentation.MainTheme +import com.rtbishop.look4sat.presentation.theme.MainTheme class MainActivity : ComponentActivity() { diff --git a/app/src/main/java/com/rtbishop/look4sat/presentation/MainTheme.kt b/app/src/main/java/com/rtbishop/look4sat/presentation/MainTheme.kt deleted file mode 100644 index 4f39cd7a..00000000 --- a/app/src/main/java/com/rtbishop/look4sat/presentation/MainTheme.kt +++ /dev/null @@ -1,114 +0,0 @@ -package com.rtbishop.look4sat.presentation - -import androidx.compose.foundation.ExperimentalFoundationApi -import androidx.compose.foundation.LocalOverscrollConfiguration -import androidx.compose.foundation.shape.RoundedCornerShape -import androidx.compose.material3.MaterialTheme -import androidx.compose.material3.Shapes -import androidx.compose.material3.Typography -import androidx.compose.material3.lightColorScheme -import androidx.compose.runtime.Composable -import androidx.compose.runtime.CompositionLocalProvider -import androidx.compose.ui.graphics.Color -import androidx.compose.ui.text.TextStyle -import androidx.compose.ui.text.font.FontFamily -import androidx.compose.ui.text.font.FontWeight -import androidx.compose.ui.unit.dp -import androidx.compose.ui.unit.sp - -@OptIn(ExperimentalFoundationApi::class) -@Composable -fun MainTheme( -// darkTheme: Boolean = isSystemInDarkTheme(), -// dynamicColor: Boolean = false, - content: @Composable () -> Unit -) { -// val colorScheme = when { -// dynamicColor && Build.VERSION.SDK_INT >= Build.VERSION_CODES.S -> { -// val context = LocalContext.current -// if (darkTheme) dynamicDarkColorScheme(context) else dynamicLightColorScheme(context) -// } -// darkTheme -> DarkColorScheme -// else -> LightColorScheme -// } - val colors = themeColors -// val view = LocalView.current -// if (!view.isInEditMode) { -// SideEffect { -// (view.context as Activity).window.statusBarColor = colorScheme.primary.toArgb() -// ViewCompat.getWindowInsetsController(view)?.isAppearanceLightStatusBars = darkTheme -// } -// } - MaterialTheme(colorScheme = colors, typography = typography, shapes = shapes) { - CompositionLocalProvider(LocalOverscrollConfiguration.provides(null), content = content) - } -} - -private val accentYellow = Color(0xFFFFE082) -private val textWhite = Color(0xCCFFFFFF) -private val textGrey = Color(0x66FFFFFF) -private val textBlack = Color(0xFF000000) -private val surfaceInverse = Color(0x40FFFFFF) -private val surfaceBtn = Color(0xFF303030) -private val surfaceCard = Color(0xFF1C1C1C) -private val surfaceBg = Color(0xFF121212) -private val transparent = Color(0x00000000) -private val themeColors = lightColorScheme( - primary = accentYellow, - onPrimary = textBlack, -// primaryContainer = primaryContainer, -// onPrimaryContainer = onPrimaryContainer, -// inversePrimary = inversePrimary, - secondary = accentYellow, - onSecondary = textBlack, - secondaryContainer = accentYellow, // navBar indicator - onSecondaryContainer = textBlack, // navBar active icon - tertiary = surfaceBtn, - onTertiary = textWhite, -// tertiaryContainer = tertiaryContainer, -// onTertiaryContainer = onTertiaryContainer, - background = surfaceBg, - onBackground = textWhite, - surface = surfaceCard, - onSurface = textWhite, - surfaceVariant = surfaceCard, - onSurfaceVariant = textGrey, // navBar inactive icon - surfaceTint = transparent, - inverseSurface = surfaceInverse, -// inverseOnSurface = inverseOnSurface, -// error = error, -// onError = onError, -// errorContainer = errorContainer, -// onErrorContainer = onErrorContainer, -// outline = outline, -// outlineVariant = outlineVariant, -// scrim = scrim, -) - -private val typography = Typography( - bodyLarge = TextStyle( - fontFamily = FontFamily.Default, - fontWeight = FontWeight.Normal, - fontSize = 16.sp, - lineHeight = 24.sp, - letterSpacing = 0.5.sp - ), titleLarge = TextStyle( - fontFamily = FontFamily.Default, - fontWeight = FontWeight.Normal, - fontSize = 22.sp, - lineHeight = 28.sp, - letterSpacing = 0.sp - ), labelSmall = TextStyle( - fontFamily = FontFamily.Default, - fontWeight = FontWeight.Medium, - fontSize = 11.sp, - lineHeight = 16.sp, - letterSpacing = 0.5.sp - ) -) - -private val shapes = Shapes( - extraSmall = RoundedCornerShape(4.dp), small = RoundedCornerShape(6.dp), // buttons corners - medium = RoundedCornerShape(8.dp), // cards corners - large = RoundedCornerShape(12.dp), extraLarge = RoundedCornerShape(16.dp) -) diff --git a/app/src/main/java/com/rtbishop/look4sat/presentation/components/Common.kt b/app/src/main/java/com/rtbishop/look4sat/presentation/components/Common.kt index ca823413..99cab85d 100644 --- a/app/src/main/java/com/rtbishop/look4sat/presentation/components/Common.kt +++ b/app/src/main/java/com/rtbishop/look4sat/presentation/components/Common.kt @@ -41,7 +41,7 @@ import com.rtbishop.look4sat.R import com.rtbishop.look4sat.domain.predict.NearEarthObject import com.rtbishop.look4sat.domain.predict.OrbitalData import com.rtbishop.look4sat.domain.predict.OrbitalPass -import com.rtbishop.look4sat.presentation.MainTheme +import com.rtbishop.look4sat.presentation.theme.MainTheme import java.text.SimpleDateFormat import java.util.Date import java.util.Locale diff --git a/app/src/main/java/com/rtbishop/look4sat/presentation/entries/EntriesDialog.kt b/app/src/main/java/com/rtbishop/look4sat/presentation/entries/EntriesDialog.kt index e9451df4..bcfe82a3 100644 --- a/app/src/main/java/com/rtbishop/look4sat/presentation/entries/EntriesDialog.kt +++ b/app/src/main/java/com/rtbishop/look4sat/presentation/entries/EntriesDialog.kt @@ -23,7 +23,7 @@ import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp -import com.rtbishop.look4sat.presentation.MainTheme +import com.rtbishop.look4sat.presentation.theme.MainTheme @Preview(showBackground = true) @Composable diff --git a/app/src/main/java/com/rtbishop/look4sat/presentation/entries/EntriesScreen.kt b/app/src/main/java/com/rtbishop/look4sat/presentation/entries/EntriesScreen.kt index f3bd53af..f019da8c 100644 --- a/app/src/main/java/com/rtbishop/look4sat/presentation/entries/EntriesScreen.kt +++ b/app/src/main/java/com/rtbishop/look4sat/presentation/entries/EntriesScreen.kt @@ -39,7 +39,7 @@ import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import com.rtbishop.look4sat.R import com.rtbishop.look4sat.domain.model.SatItem -import com.rtbishop.look4sat.presentation.MainTheme +import com.rtbishop.look4sat.presentation.theme.MainTheme import com.rtbishop.look4sat.presentation.components.CardIcon import com.rtbishop.look4sat.presentation.components.CardLoadingIndicator diff --git a/app/src/main/java/com/rtbishop/look4sat/presentation/info/InfoScreen.kt b/app/src/main/java/com/rtbishop/look4sat/presentation/info/InfoScreen.kt index 7c6752f6..c5376bb3 100644 --- a/app/src/main/java/com/rtbishop/look4sat/presentation/info/InfoScreen.kt +++ b/app/src/main/java/com/rtbishop/look4sat/presentation/info/InfoScreen.kt @@ -22,7 +22,7 @@ import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import com.rtbishop.look4sat.R -import com.rtbishop.look4sat.presentation.MainTheme +import com.rtbishop.look4sat.presentation.theme.MainTheme import com.rtbishop.look4sat.presentation.components.CardButton import com.rtbishop.look4sat.presentation.components.gotoUrl diff --git a/app/src/main/java/com/rtbishop/look4sat/presentation/map/MapScreen.kt b/app/src/main/java/com/rtbishop/look4sat/presentation/map/MapScreen.kt index 8dff82ea..5fd0c88f 100644 --- a/app/src/main/java/com/rtbishop/look4sat/presentation/map/MapScreen.kt +++ b/app/src/main/java/com/rtbishop/look4sat/presentation/map/MapScreen.kt @@ -9,6 +9,7 @@ import android.graphics.Paint import android.graphics.Rect import android.graphics.drawable.BitmapDrawable import android.graphics.drawable.Drawable +import androidx.compose.foundation.isSystemInDarkTheme import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.fillMaxSize @@ -237,13 +238,18 @@ private fun rememberMapViewLifecycleObserver(mapView: MapView) = remember(mapVie } } +@Composable private fun getColorFilter(): ColorMatrixColorFilter { + val viewModel = viewModel(MapViewModel::class.java, factory = MapViewModel.Factory) val grayScaleMatrix = ColorMatrix().apply { setSaturation(0f) } val negativeMatrix = ColorMatrix( floatArrayOf(-1f, 0f, 0f, 0f, 260f, 0f, -1f, 0f, 0f, 260f, 0f, 0f, -1f, 0f, 260f, 0f, 0f, 0f, 1f, 0f) ) negativeMatrix.preConcat(grayScaleMatrix) - return ColorMatrixColorFilter(negativeMatrix) + return when { + isSystemInDarkTheme() || viewModel.stateOfOldScheme -> ColorMatrixColorFilter(negativeMatrix) + else -> ColorMatrixColorFilter(grayScaleMatrix) + } } private fun getMinZoom(screenHeight: Int): Double { diff --git a/app/src/main/java/com/rtbishop/look4sat/presentation/map/MapViewModel.kt b/app/src/main/java/com/rtbishop/look4sat/presentation/map/MapViewModel.kt index 57b74929..5fa4ba6c 100644 --- a/app/src/main/java/com/rtbishop/look4sat/presentation/map/MapViewModel.kt +++ b/app/src/main/java/com/rtbishop/look4sat/presentation/map/MapViewModel.kt @@ -53,6 +53,8 @@ class MapViewModel(private val satelliteRepo: ISatelliteRepo, settingsRepo: ISet private var dataUpdateRate = 1000L private var selectedOrbitalObject: OrbitalObject? = null + val stateOfOldScheme = settingsRepo.otherSettings.value.stateOfOldScheme + val stationPosition = flow { val osmLat = clipLat(stationPos.latitude) val osmLon = clipLon(stationPos.longitude) diff --git a/app/src/main/java/com/rtbishop/look4sat/presentation/passes/PassesDialog.kt b/app/src/main/java/com/rtbishop/look4sat/presentation/passes/PassesDialog.kt index 25f4b35c..d18af581 100644 --- a/app/src/main/java/com/rtbishop/look4sat/presentation/passes/PassesDialog.kt +++ b/app/src/main/java/com/rtbishop/look4sat/presentation/passes/PassesDialog.kt @@ -56,7 +56,7 @@ import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import com.rtbishop.look4sat.R -import com.rtbishop.look4sat.presentation.MainTheme +import com.rtbishop.look4sat.presentation.theme.MainTheme import com.rtbishop.look4sat.presentation.components.CardButton private val allModes = listOf( diff --git a/app/src/main/java/com/rtbishop/look4sat/presentation/passes/PassesScreen.kt b/app/src/main/java/com/rtbishop/look4sat/presentation/passes/PassesScreen.kt index cd74f816..02e0ea2f 100644 --- a/app/src/main/java/com/rtbishop/look4sat/presentation/passes/PassesScreen.kt +++ b/app/src/main/java/com/rtbishop/look4sat/presentation/passes/PassesScreen.kt @@ -35,7 +35,7 @@ import com.rtbishop.look4sat.domain.predict.DeepSpaceObject import com.rtbishop.look4sat.domain.predict.NearEarthObject import com.rtbishop.look4sat.domain.predict.OrbitalData import com.rtbishop.look4sat.domain.predict.OrbitalPass -import com.rtbishop.look4sat.presentation.MainTheme +import com.rtbishop.look4sat.presentation.theme.MainTheme import com.rtbishop.look4sat.presentation.components.CardIcon import com.rtbishop.look4sat.presentation.components.NextPassRow import com.rtbishop.look4sat.presentation.components.PullRefreshIndicator @@ -214,7 +214,8 @@ private fun PassItem(pass: OrbitalPass, navToRadar: (Int, Long) -> Unit, modifie modifier = modifier .fillMaxWidth(0.75f) .padding(top = 2.dp), - trackColor = MaterialTheme.colorScheme.inverseSurface + color = MaterialTheme.colorScheme.primary, + trackColor = MaterialTheme.colorScheme.secondaryContainer ) Text( text = if (pass.isDeepSpace) defaultTime else sdfTime.format(Date(pass.losTime)), diff --git a/app/src/main/java/com/rtbishop/look4sat/presentation/radar/RadarView.kt b/app/src/main/java/com/rtbishop/look4sat/presentation/radar/RadarView.kt index 874f1683..5949483f 100644 --- a/app/src/main/java/com/rtbishop/look4sat/presentation/radar/RadarView.kt +++ b/app/src/main/java/com/rtbishop/look4sat/presentation/radar/RadarView.kt @@ -1,18 +1,14 @@ package com.rtbishop.look4sat.presentation.radar -import android.media.AudioAttributes -import android.media.SoundPool import androidx.compose.animation.core.animateFloat import androidx.compose.animation.core.infiniteRepeatable import androidx.compose.animation.core.rememberInfiniteTransition import androidx.compose.animation.core.tween import androidx.compose.foundation.Canvas import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.material3.MaterialTheme import androidx.compose.runtime.Composable -import androidx.compose.runtime.DisposableEffect -import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.mutableFloatStateOf -import androidx.compose.runtime.mutableIntStateOf import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.ui.Modifier @@ -29,107 +25,33 @@ import androidx.compose.ui.graphics.drawscope.Fill import androidx.compose.ui.graphics.drawscope.Stroke import androidx.compose.ui.graphics.drawscope.rotate import androidx.compose.ui.graphics.drawscope.translate -import androidx.compose.ui.platform.LocalContext -import androidx.compose.ui.platform.LocalView import androidx.compose.ui.text.TextMeasurer import androidx.compose.ui.text.TextStyle import androidx.compose.ui.text.drawText import androidx.compose.ui.text.rememberTextMeasurer import androidx.compose.ui.unit.sp -import androidx.core.view.HapticFeedbackConstantsCompat -import com.rtbishop.look4sat.R +import androidx.lifecycle.viewmodel.compose.viewModel import com.rtbishop.look4sat.domain.predict.OrbitalPos import com.rtbishop.look4sat.domain.predict.PI_2 import com.rtbishop.look4sat.domain.utility.toRadians -import kotlin.math.abs import kotlin.math.cos -import kotlin.math.min -import kotlin.math.pow import kotlin.math.sin -import kotlin.math.sqrt @Composable fun RadarViewCompose(item: OrbitalPos, items: List, azimElev: Pair) { - val context = LocalContext.current - val view = LocalView.current - val radarColor = Color(0xFFDCDCDC) - val primaryColor = Color(0xFFFFE082) - val secondaryColor = Color(0xFFDC0000) + val viewModel = viewModel(RadarViewModel::class.java, factory = RadarViewModel.Factory) + val radarColor: Color = if (viewModel.stateOfOldScheme) Color(0xFFDCDCDC) else MaterialTheme.colorScheme.tertiary + val primaryColor: Color = if (viewModel.stateOfOldScheme) Color(0xFFFFE082) else MaterialTheme.colorScheme.primary + val secondaryColor: Color = if (viewModel.stateOfOldScheme) Color(0xFFDC0000) else MaterialTheme.colorScheme.onSurface val strokeWidth = 4f val animTransition = rememberInfiniteTransition(label = "animScale") val animSpec = infiniteRepeatable(tween(1000)) val animScale = animTransition.animateFloat(16f, 64f, animSpec, label = "animScale") - val aimThreshold = 0.05f val measurer = rememberTextMeasurer() val sweepDegrees = remember { mutableFloatStateOf(0f) } val trackCreated = remember { mutableStateOf(false) } val trackPath = remember { mutableStateOf(Path()) } val trackEffect = remember { mutableStateOf(PathEffect.cornerPathEffect(0f)) } - val soundPool = remember { mutableStateOf(null) } - val beepSoundId = remember { mutableIntStateOf(0) } - val aimTargetDifference = remember { mutableFloatStateOf(0f) } - - LaunchedEffect(item.azimuth, item.elevation, azimElev.first, azimElev.second) { - val aimAzimuthRadians = azimElev.first.toDouble().toRadians() - val aimElevationRadians = abs(min(azimElev.second, 0f)).toDouble().toRadians() - // radius of 0.5 makes the aimTargetDifference range 0.0 to 1.0 - val radius = 0.5 - val aimX = sph2CartX(aimAzimuthRadians, aimElevationRadians, radius) - val aimY = sph2CartY(aimAzimuthRadians, aimElevationRadians, radius) - val satX = sph2CartX(item.azimuth, item.elevation, radius) - val satY = sph2CartY(item.azimuth, item.elevation, radius) - aimTargetDifference.floatValue = sqrt((satX - aimX).pow(2) + (satY - aimY).pow(2)) - - - val minPlaybackRate = 0.5f - val maxPlaybackRate = 2.0f - val playbackRate = - maxPlaybackRate - (aimTargetDifference.floatValue / (maxPlaybackRate - minPlaybackRate)) - - soundPool.value?.setRate(beepSoundId.intValue, playbackRate) - } - - LaunchedEffect(aimTargetDifference.floatValue < aimThreshold) { - if (aimTargetDifference.floatValue < aimThreshold) { - view.performHapticFeedback(HapticFeedbackConstantsCompat.VIRTUAL_KEY) - soundPool.value?.pause(beepSoundId.intValue) - } else { - soundPool.value?.resume(beepSoundId.intValue) - } - } - - LaunchedEffect(item.elevation > 0) { - if(item.elevation > 0) { - soundPool.value?.resume(beepSoundId.intValue) - } else { - soundPool.value?.pause(beepSoundId.intValue) - } - } - - DisposableEffect(Unit) { - val audioAttributes = AudioAttributes.Builder() - .setUsage(AudioAttributes.USAGE_ASSISTANCE_SONIFICATION) - .setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION) - .build() - - soundPool.value = SoundPool.Builder() - .setMaxStreams(1) - .setAudioAttributes(audioAttributes) - .build() - - beepSoundId.intValue = soundPool.value?.load(context, R.raw.beep, 1) ?: 0 - - soundPool.value?.setOnLoadCompleteListener { soundPool, _, status -> - if (status == 0) { - soundPool.play(beepSoundId.intValue, 0.5f, 0.5f, 0, -1, 1f) - } - } - - onDispose { - soundPool.value?.release() - } - } - Canvas(modifier = Modifier.fillMaxSize()) { val radius = (size.minDimension / 2f) * 0.95f if (!trackCreated.value) { diff --git a/app/src/main/java/com/rtbishop/look4sat/presentation/radar/RadarViewModel.kt b/app/src/main/java/com/rtbishop/look4sat/presentation/radar/RadarViewModel.kt index 15f44fa5..31f55fe9 100644 --- a/app/src/main/java/com/rtbishop/look4sat/presentation/radar/RadarViewModel.kt +++ b/app/src/main/java/com/rtbishop/look4sat/presentation/radar/RadarViewModel.kt @@ -56,6 +56,7 @@ class RadarViewModel( private val stationPos = settingsRepo.stationPosition.value private val magDeclination = getMagDeclination(stationPos) + val stateOfOldScheme = settingsRepo.otherSettings.value.stateOfOldScheme val transmitters = mutableStateOf>(emptyList()) val radarData = mutableStateOf(null) val orientation = mutableStateOf(sensorsRepo.orientation.value) diff --git a/app/src/main/java/com/rtbishop/look4sat/presentation/settings/SettingsDialog.kt b/app/src/main/java/com/rtbishop/look4sat/presentation/settings/SettingsDialog.kt index c1064f9e..87678a66 100644 --- a/app/src/main/java/com/rtbishop/look4sat/presentation/settings/SettingsDialog.kt +++ b/app/src/main/java/com/rtbishop/look4sat/presentation/settings/SettingsDialog.kt @@ -19,7 +19,7 @@ import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import androidx.compose.ui.window.Dialog import com.rtbishop.look4sat.R -import com.rtbishop.look4sat.presentation.MainTheme +import com.rtbishop.look4sat.presentation.theme.MainTheme import com.rtbishop.look4sat.presentation.components.CardButton @Preview(showBackground = true) diff --git a/app/src/main/java/com/rtbishop/look4sat/presentation/settings/SettingsScreen.kt b/app/src/main/java/com/rtbishop/look4sat/presentation/settings/SettingsScreen.kt index d8648b48..e12092a6 100644 --- a/app/src/main/java/com/rtbishop/look4sat/presentation/settings/SettingsScreen.kt +++ b/app/src/main/java/com/rtbishop/look4sat/presentation/settings/SettingsScreen.kt @@ -36,7 +36,7 @@ import androidx.lifecycle.viewmodel.compose.viewModel import com.rtbishop.look4sat.R import com.rtbishop.look4sat.domain.model.OtherSettings import com.rtbishop.look4sat.domain.predict.GeoPos -import com.rtbishop.look4sat.presentation.MainTheme +import com.rtbishop.look4sat.presentation.theme.MainTheme import com.rtbishop.look4sat.presentation.components.CardButton import com.rtbishop.look4sat.presentation.components.gotoUrl import com.rtbishop.look4sat.presentation.components.showToast @@ -110,6 +110,7 @@ fun SettingsScreen() { val toggleUpdate = { value: Boolean -> viewModel.toggleUpdate(value) } val toggleSweep = { value: Boolean -> viewModel.toggleSweep(value) } val toggleSensor = { value: Boolean -> viewModel.toggleSensor(value) } + val toggleOldScheme = { value: Boolean -> viewModel.toggleOldScheme(value)} // Screen setup val versionName = context.packageManager.getPackageInfo(context.packageName, 0).versionName ?: "4.0.0" @@ -117,7 +118,7 @@ fun SettingsScreen() { item { CardAbout(versionName) } item { LocationCard(positionSettings, setGpsPos, showPosDialog, showLocDialog, dismissPos) } item { DataCard(dataSettings, updateFromWeb, updateFromFile, clearAllData) } - item { OtherCard(otherSettings, toggleUtc, toggleUpdate, toggleSweep, toggleSensor) } + item { OtherCard(otherSettings, toggleUtc, toggleUpdate, toggleSweep, toggleSensor,toggleOldScheme) } } } @@ -368,8 +369,13 @@ private fun DataCard( @Preview(showBackground = true) @Composable private fun OtherCardPreview() = MainTheme { - val values = OtherSettings(stateOfAutoUpdate = true, stateOfSensors = true, stateOfSweep = true, stateOfUtc = false) - OtherCard(settings = values, {}, {}, {}, {}) + val values = OtherSettings( + stateOfAutoUpdate = true, + stateOfSensors = true, + stateOfSweep = true, + stateOfUtc = false, + stateOfOldScheme = false) + OtherCard(settings = values, {}, {}, {}, {},{}) } @Composable @@ -378,7 +384,8 @@ private fun OtherCard( toggleUtc: (Boolean) -> Unit, toggleUpdate: (Boolean) -> Unit, toggleSweep: (Boolean) -> Unit, - toggleSensor: (Boolean) -> Unit + toggleSensor: (Boolean) -> Unit, + toggleOldScheme: (Boolean) -> Unit ) { ElevatedCard(modifier = Modifier.fillMaxWidth()) { Column(modifier = Modifier.padding(horizontal = 8.dp, vertical = 2.dp)) { @@ -414,6 +421,14 @@ private fun OtherCard( Text(text = stringResource(id = R.string.other_switch_sensors)) Switch(checked = settings.stateOfSensors, onCheckedChange = { toggleSensor(it) }) } + Row( + horizontalArrangement = Arrangement.SpaceBetween, + verticalAlignment = Alignment.CenterVertically, + modifier = Modifier.fillMaxWidth() + ) { + Text(text = stringResource(id = R.string.other_switch_old_scheme)) + Switch(checked = settings.stateOfOldScheme, onCheckedChange = { toggleOldScheme(it) }) + } } } } @@ -433,12 +448,14 @@ private fun setUpdateTime(updateTime: Long): String { private fun UpdateIndicator(isUpdating: Boolean, modifier: Modifier = Modifier) = if (isUpdating) { LinearProgressIndicator( modifier = modifier.padding(start = 6.dp), - trackColor = MaterialTheme.colorScheme.inverseSurface + color = MaterialTheme.colorScheme.primary, + trackColor = MaterialTheme.colorScheme.secondaryContainer ) } else { LinearProgressIndicator( progress = { 0f }, modifier = modifier.padding(start = 6.dp), - trackColor = MaterialTheme.colorScheme.inverseSurface, + color = MaterialTheme.colorScheme.primary, + trackColor = MaterialTheme.colorScheme.secondaryContainer ) } diff --git a/app/src/main/java/com/rtbishop/look4sat/presentation/settings/SettingsViewModel.kt b/app/src/main/java/com/rtbishop/look4sat/presentation/settings/SettingsViewModel.kt index 7161ad97..0607e77e 100644 --- a/app/src/main/java/com/rtbishop/look4sat/presentation/settings/SettingsViewModel.kt +++ b/app/src/main/java/com/rtbishop/look4sat/presentation/settings/SettingsViewModel.kt @@ -129,7 +129,7 @@ class SettingsViewModel( fun toggleUpdate(value: Boolean) = settingsRepo.setStateOfAutoUpdate(value) fun toggleSweep(value: Boolean) = settingsRepo.setStateOfSweep(value) fun toggleSensor(value: Boolean) = settingsRepo.setStateOfSensors(value) - + fun toggleOldScheme(value: Boolean) = settingsRepo.setStateOfOldScheme(value) // fun getRotatorEnabled(): Boolean = settings.getRotatorEnabled() // fun setRotatorEnabled(value: Boolean) = settings.setRotatorEnabled(value) // fun getRotatorServer(): String = settings.getRotatorServer() diff --git a/app/src/main/java/com/rtbishop/look4sat/presentation/theme/Color.kt b/app/src/main/java/com/rtbishop/look4sat/presentation/theme/Color.kt new file mode 100644 index 00000000..0965f05a --- /dev/null +++ b/app/src/main/java/com/rtbishop/look4sat/presentation/theme/Color.kt @@ -0,0 +1,225 @@ +package com.rtbishop.look4sat.presentation.theme +import androidx.compose.ui.graphics.Color + +val primaryLight = Color(0xFF715C0C) +val onPrimaryLight = Color(0xFFFFFFFF) +val primaryContainerLight = Color(0xFFFEE086) +val onPrimaryContainerLight = Color(0xFF231B00) +val secondaryLight = Color(0xFF685E40) +val onSecondaryLight = Color(0xFFFFFFFF) +val secondaryContainerLight = Color(0xFFF1E1BB) +val onSecondaryContainerLight = Color(0xFF221B04) +val tertiaryLight = Color(0xFF46664B) +val onTertiaryLight = Color(0xFFFFFFFF) +val tertiaryContainerLight = Color(0xFFC7ECCA) +val onTertiaryContainerLight = Color(0xFF02210C) +val errorLight = Color(0xFFBA1A1A) +val onErrorLight = Color(0xFFFFFFFF) +val errorContainerLight = Color(0xFFFFDAD6) +val onErrorContainerLight = Color(0xFF410002) +val backgroundLight = Color(0xFFFFF8F0) +val onBackgroundLight = Color(0xFF1E1B13) +val surfaceLight = Color(0xFFFFF8F0) +val onSurfaceLight = Color(0xFF1E1B13) +val surfaceVariantLight = Color(0xFFEBE2CF) +val onSurfaceVariantLight = Color(0xFF4C4639) +val outlineLight = Color(0xFF7D7667) +val outlineVariantLight = Color(0xFFCEC6B4) +val scrimLight = Color(0xFF000000) +val inverseSurfaceLight = Color(0xFF343027) +val inverseOnSurfaceLight = Color(0xFFF8F0E2) +val inversePrimaryLight = Color(0xFFE1C46D) +val surfaceDimLight = Color(0xFFE1D9CC) +val surfaceBrightLight = Color(0xFFFFF8F0) +val surfaceContainerLowestLight = Color(0xFFFFFFFF) +val surfaceContainerLowLight = Color(0xFFFBF3E5) +val surfaceContainerLight = Color(0xFFF5EDDF) +val surfaceContainerHighLight = Color(0xFFEFE7DA) +val surfaceContainerHighestLight = Color(0xFFE9E2D4) + +val primaryLightMediumContrast = Color(0xFF524100) +val onPrimaryLightMediumContrast = Color(0xFFFFFFFF) +val primaryContainerLightMediumContrast = Color(0xFF897224) +val onPrimaryContainerLightMediumContrast = Color(0xFFFFFFFF) +val secondaryLightMediumContrast = Color(0xFF4B4226) +val onSecondaryLightMediumContrast = Color(0xFFFFFFFF) +val secondaryContainerLightMediumContrast = Color(0xFF7F7454) +val onSecondaryContainerLightMediumContrast = Color(0xFFFFFFFF) +val tertiaryLightMediumContrast = Color(0xFF2B4A31) +val onTertiaryLightMediumContrast = Color(0xFFFFFFFF) +val tertiaryContainerLightMediumContrast = Color(0xFF5C7C60) +val onTertiaryContainerLightMediumContrast = Color(0xFFFFFFFF) +val errorLightMediumContrast = Color(0xFF8C0009) +val onErrorLightMediumContrast = Color(0xFFFFFFFF) +val errorContainerLightMediumContrast = Color(0xFFDA342E) +val onErrorContainerLightMediumContrast = Color(0xFFFFFFFF) +val backgroundLightMediumContrast = Color(0xFFFFF8F0) +val onBackgroundLightMediumContrast = Color(0xFF1E1B13) +val surfaceLightMediumContrast = Color(0xFFFFF8F0) +val onSurfaceLightMediumContrast = Color(0xFF1E1B13) +val surfaceVariantLightMediumContrast = Color(0xFFEBE2CF) +val onSurfaceVariantLightMediumContrast = Color(0xFF484235) +val outlineLightMediumContrast = Color(0xFF655F50) +val outlineVariantLightMediumContrast = Color(0xFF817A6B) +val scrimLightMediumContrast = Color(0xFF000000) +val inverseSurfaceLightMediumContrast = Color(0xFF343027) +val inverseOnSurfaceLightMediumContrast = Color(0xFFF8F0E2) +val inversePrimaryLightMediumContrast = Color(0xFFE1C46D) +val surfaceDimLightMediumContrast = Color(0xFFE1D9CC) +val surfaceBrightLightMediumContrast = Color(0xFFFFF8F0) +val surfaceContainerLowestLightMediumContrast = Color(0xFFFFFFFF) +val surfaceContainerLowLightMediumContrast = Color(0xFFFBF3E5) +val surfaceContainerLightMediumContrast = Color(0xFFF5EDDF) +val surfaceContainerHighLightMediumContrast = Color(0xFFEFE7DA) +val surfaceContainerHighestLightMediumContrast = Color(0xFFE9E2D4) + +val primaryLightHighContrast = Color(0xFF2B2100) +val onPrimaryLightHighContrast = Color(0xFFFFFFFF) +val primaryContainerLightHighContrast = Color(0xFF524100) +val onPrimaryContainerLightHighContrast = Color(0xFFFFFFFF) +val secondaryLightHighContrast = Color(0xFF292209) +val onSecondaryLightHighContrast = Color(0xFFFFFFFF) +val secondaryContainerLightHighContrast = Color(0xFF4B4226) +val onSecondaryContainerLightHighContrast = Color(0xFFFFFFFF) +val tertiaryLightHighContrast = Color(0xFF082813) +val onTertiaryLightHighContrast = Color(0xFFFFFFFF) +val tertiaryContainerLightHighContrast = Color(0xFF2B4A31) +val onTertiaryContainerLightHighContrast = Color(0xFFFFFFFF) +val errorLightHighContrast = Color(0xFF4E0002) +val onErrorLightHighContrast = Color(0xFFFFFFFF) +val errorContainerLightHighContrast = Color(0xFF8C0009) +val onErrorContainerLightHighContrast = Color(0xFFFFFFFF) +val backgroundLightHighContrast = Color(0xFFFFF8F0) +val onBackgroundLightHighContrast = Color(0xFF1E1B13) +val surfaceLightHighContrast = Color(0xFFFFF8F0) +val onSurfaceLightHighContrast = Color(0xFF000000) +val surfaceVariantLightHighContrast = Color(0xFFEBE2CF) +val onSurfaceVariantLightHighContrast = Color(0xFF282418) +val outlineLightHighContrast = Color(0xFF484235) +val outlineVariantLightHighContrast = Color(0xFF484235) +val scrimLightHighContrast = Color(0xFF000000) +val inverseSurfaceLightHighContrast = Color(0xFF343027) +val inverseOnSurfaceLightHighContrast = Color(0xFFFFFFFF) +val inversePrimaryLightHighContrast = Color(0xFFFFEBB4) +val surfaceDimLightHighContrast = Color(0xFFE1D9CC) +val surfaceBrightLightHighContrast = Color(0xFFFFF8F0) +val surfaceContainerLowestLightHighContrast = Color(0xFFFFFFFF) +val surfaceContainerLowLightHighContrast = Color(0xFFFBF3E5) +val surfaceContainerLightHighContrast = Color(0xFFF5EDDF) +val surfaceContainerHighLightHighContrast = Color(0xFFEFE7DA) +val surfaceContainerHighestLightHighContrast = Color(0xFFE9E2D4) + +val primaryDark = Color(0xFFE1C46D) +val onPrimaryDark = Color(0xFF3C2F00) +val primaryContainerDark = Color(0xFF564500) +val onPrimaryContainerDark = Color(0xFFFEE086) +val secondaryDark = Color(0xFFD4C5A1) +val onSecondaryDark = Color(0xFF383016) +val secondaryContainerDark = Color(0xFF50462A) +val onSecondaryContainerDark = Color(0xFFF1E1BB) +val tertiaryDark = Color(0xFFACCFAF) +val onTertiaryDark = Color(0xFF183720) +val tertiaryContainerDark = Color(0xFF2E4E35) +val onTertiaryContainerDark = Color(0xFFC7ECCA) +val errorDark = Color(0xFFFFB4AB) +val onErrorDark = Color(0xFF690005) +val errorContainerDark = Color(0xFF93000A) +val onErrorContainerDark = Color(0xFFFFDAD6) +val backgroundDark = Color(0xFF16130B) +val onBackgroundDark = Color(0xFFE9E2D4) +val surfaceDark = Color(0xFF16130B) +val onSurfaceDark = Color(0xFFE9E2D4) +val surfaceVariantDark = Color(0xFF4C4639) +val onSurfaceVariantDark = Color(0xFFCEC6B4) +val outlineDark = Color(0xFF979080) +val outlineVariantDark = Color(0xFF4C4639) +val scrimDark = Color(0xFF000000) +val inverseSurfaceDark = Color(0xFFE9E2D4) +val inverseOnSurfaceDark = Color(0xFF343027) +val inversePrimaryDark = Color(0xFF715C0C) +val surfaceDimDark = Color(0xFF16130B) +val surfaceBrightDark = Color(0xFF3D392F) +val surfaceContainerLowestDark = Color(0xFF110E07) +val surfaceContainerLowDark = Color(0xFF1E1B13) +val surfaceContainerDark = Color(0xFF231F17) +val surfaceContainerHighDark = Color(0xFF2D2A21) +val surfaceContainerHighestDark = Color(0xFF38342B) + +val primaryDarkMediumContrast = Color(0xFFE5C971) +val onPrimaryDarkMediumContrast = Color(0xFF1D1500) +val primaryContainerDarkMediumContrast = Color(0xFFA88F3D) +val onPrimaryContainerDarkMediumContrast = Color(0xFF000000) +val secondaryDarkMediumContrast = Color(0xFFD8CAA5) +val onSecondaryDarkMediumContrast = Color(0xFF1C1601) +val secondaryContainerDarkMediumContrast = Color(0xFF9C906E) +val onSecondaryContainerDarkMediumContrast = Color(0xFF000000) +val tertiaryDarkMediumContrast = Color(0xFFB0D4B3) +val onTertiaryDarkMediumContrast = Color(0xFF001B08) +val tertiaryContainerDarkMediumContrast = Color(0xFF77997B) +val onTertiaryContainerDarkMediumContrast = Color(0xFF000000) +val errorDarkMediumContrast = Color(0xFFFFBAB1) +val onErrorDarkMediumContrast = Color(0xFF370001) +val errorContainerDarkMediumContrast = Color(0xFFFF5449) +val onErrorContainerDarkMediumContrast = Color(0xFF000000) +val backgroundDarkMediumContrast = Color(0xFF16130B) +val onBackgroundDarkMediumContrast = Color(0xFFE9E2D4) +val surfaceDarkMediumContrast = Color(0xFF16130B) +val onSurfaceDarkMediumContrast = Color(0xFFFFFAF6) +val surfaceVariantDarkMediumContrast = Color(0xFF4C4639) +val onSurfaceVariantDarkMediumContrast = Color(0xFFD3CAB8) +val outlineDarkMediumContrast = Color(0xFFAAA291) +val outlineVariantDarkMediumContrast = Color(0xFF898273) +val scrimDarkMediumContrast = Color(0xFF000000) +val inverseSurfaceDarkMediumContrast = Color(0xFFE9E2D4) +val inverseOnSurfaceDarkMediumContrast = Color(0xFF2D2A21) +val inversePrimaryDarkMediumContrast = Color(0xFF584600) +val surfaceDimDarkMediumContrast = Color(0xFF16130B) +val surfaceBrightDarkMediumContrast = Color(0xFF3D392F) +val surfaceContainerLowestDarkMediumContrast = Color(0xFF110E07) +val surfaceContainerLowDarkMediumContrast = Color(0xFF1E1B13) +val surfaceContainerDarkMediumContrast = Color(0xFF231F17) +val surfaceContainerHighDarkMediumContrast = Color(0xFF2D2A21) +val surfaceContainerHighestDarkMediumContrast = Color(0xFF38342B) + +val primaryDarkHighContrast = Color(0xFFFFFAF6) +val onPrimaryDarkHighContrast = Color(0xFF000000) +val primaryContainerDarkHighContrast = Color(0xFFE5C971) +val onPrimaryContainerDarkHighContrast = Color(0xFF000000) +val secondaryDarkHighContrast = Color(0xFFFFFAF6) +val onSecondaryDarkHighContrast = Color(0xFF000000) +val secondaryContainerDarkHighContrast = Color(0xFFD8CAA5) +val onSecondaryContainerDarkHighContrast = Color(0xFF000000) +val tertiaryDarkHighContrast = Color(0xFFF0FFEE) +val onTertiaryDarkHighContrast = Color(0xFF000000) +val tertiaryContainerDarkHighContrast = Color(0xFFB0D4B3) +val onTertiaryContainerDarkHighContrast = Color(0xFF000000) +val errorDarkHighContrast = Color(0xFFFFF9F9) +val onErrorDarkHighContrast = Color(0xFF000000) +val errorContainerDarkHighContrast = Color(0xFFFFBAB1) +val onErrorContainerDarkHighContrast = Color(0xFF000000) +val backgroundDarkHighContrast = Color(0xFF16130B) +val onBackgroundDarkHighContrast = Color(0xFFE9E2D4) +val surfaceDarkHighContrast = Color(0xFF16130B) +val onSurfaceDarkHighContrast = Color(0xFFFFFFFF) +val surfaceVariantDarkHighContrast = Color(0xFF4C4639) +val onSurfaceVariantDarkHighContrast = Color(0xFFFFFAF6) +val outlineDarkHighContrast = Color(0xFFD3CAB8) +val outlineVariantDarkHighContrast = Color(0xFFD3CAB8) +val scrimDarkHighContrast = Color(0xFF000000) +val inverseSurfaceDarkHighContrast = Color(0xFFE9E2D4) +val inverseOnSurfaceDarkHighContrast = Color(0xFF000000) +val inversePrimaryDarkHighContrast = Color(0xFF342900) +val surfaceDimDarkHighContrast = Color(0xFF16130B) +val surfaceBrightDarkHighContrast = Color(0xFF3D392F) +val surfaceContainerLowestDarkHighContrast = Color(0xFF110E07) +val surfaceContainerLowDarkHighContrast = Color(0xFF1E1B13) +val surfaceContainerDarkHighContrast = Color(0xFF231F17) +val surfaceContainerHighDarkHighContrast = Color(0xFF2D2A21) +val surfaceContainerHighestDarkHighContrast = Color(0xFF38342B) + + + + + + + diff --git a/app/src/main/java/com/rtbishop/look4sat/presentation/theme/Theme.kt b/app/src/main/java/com/rtbishop/look4sat/presentation/theme/Theme.kt new file mode 100644 index 00000000..369d7df3 --- /dev/null +++ b/app/src/main/java/com/rtbishop/look4sat/presentation/theme/Theme.kt @@ -0,0 +1,217 @@ +package com.rtbishop.look4sat.presentation.theme +import android.app.Activity +import android.os.Build +import androidx.compose.foundation.ExperimentalFoundationApi +import androidx.compose.foundation.LocalOverscrollConfiguration +import androidx.compose.foundation.isSystemInDarkTheme +import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Shapes +import androidx.compose.material3.lightColorScheme +import androidx.compose.material3.darkColorScheme +import androidx.compose.material3.dynamicDarkColorScheme +import androidx.compose.material3.dynamicLightColorScheme +import androidx.compose.material3.Typography +import androidx.compose.runtime.Composable +import androidx.compose.runtime.CompositionLocalProvider +import androidx.compose.runtime.SideEffect +import androidx.compose.runtime.collectAsState +import androidx.compose.runtime.getValue +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.graphics.toArgb +import androidx.compose.ui.platform.LocalContext +import androidx.compose.ui.platform.LocalView +import androidx.compose.ui.text.TextStyle +import androidx.compose.ui.text.font.FontFamily +import androidx.compose.ui.text.font.FontWeight +import androidx.compose.ui.unit.dp +import androidx.compose.ui.unit.sp +import androidx.core.view.WindowCompat +import com.rtbishop.look4sat.MainApplication + +@OptIn(ExperimentalFoundationApi::class) +@Composable +fun MainTheme( + darkTheme: Boolean = isSystemInDarkTheme(), + dynamicColor: Boolean = true, + content: @Composable () -> Unit +) { + val view = LocalView.current + + if (view.isInEditMode) MaterialTheme( + colorScheme = lightScheme, + typography = typography, + shapes = shapes + ) { + CompositionLocalProvider(LocalOverscrollConfiguration.provides(null), content = content) + } + else { + val otherSettings by (LocalContext.current.applicationContext as MainApplication).container.settingsRepo.otherSettings.collectAsState() + val isOldScheme = otherSettings.stateOfOldScheme + val colorScheme = when { + isOldScheme -> oldScheme + + dynamicColor && Build.VERSION.SDK_INT >= Build.VERSION_CODES.S -> { + val context = LocalContext.current + if (darkTheme) dynamicDarkColorScheme(context) else dynamicLightColorScheme(context) + } + + darkTheme -> darkScheme + else -> lightScheme + } + SideEffect { + val window = (view.context as Activity).window + window.statusBarColor = colorScheme.background.toArgb() + WindowCompat.getInsetsController(window, view).isAppearanceLightStatusBars = + if (isOldScheme) false else !darkTheme + } + MaterialTheme(colorScheme = colorScheme, typography = typography, shapes = shapes) { + CompositionLocalProvider(LocalOverscrollConfiguration.provides(null), content = content) + } + } +} + +private val typography = Typography( + bodyLarge = TextStyle( + fontFamily = FontFamily.Default, + fontWeight = FontWeight.Normal, + fontSize = 16.sp, + lineHeight = 24.sp, + letterSpacing = 0.5.sp + ), titleLarge = TextStyle( + fontFamily = FontFamily.Default, + fontWeight = FontWeight.Normal, + fontSize = 22.sp, + lineHeight = 28.sp, + letterSpacing = 0.sp + ), labelSmall = TextStyle( + fontFamily = FontFamily.Default, + fontWeight = FontWeight.Medium, + fontSize = 11.sp, + lineHeight = 16.sp, + letterSpacing = 0.5.sp + ) +) + +private val shapes = Shapes( + extraSmall = RoundedCornerShape(4.dp), small = RoundedCornerShape(6.dp), // buttons corners + medium = RoundedCornerShape(8.dp), // cards corners + large = RoundedCornerShape(12.dp), extraLarge = RoundedCornerShape(16.dp) +) + +private val accentYellow = Color(0xFFFFE082) +private val textWhite = Color(0xCCFFFFFF) +private val textGrey = Color(0x66FFFFFF) +private val textBlack = Color(0xFF000000) +private val surfaceInverse = Color(0x40FFFFFF) +private val surfaceBtn = Color(0xFF303030) +private val surfaceCard = Color(0xFF1C1C1C) +private val surfaceBg = Color(0xFF121212) +private val transparent = Color(0x00000000) +private val oldScheme = lightColorScheme( + primary = accentYellow, + onPrimary = textBlack, +// primaryContainer = primaryContainer, +// onPrimaryContainer = onPrimaryContainer, +// inversePrimary = inversePrimary, + secondary = accentYellow, + onSecondary = textBlack, + secondaryContainer = surfaceInverse, // navBar indicator + onSecondaryContainer = textBlack, // navBar active icon + tertiary = surfaceBtn, + onTertiary = textWhite, +// tertiaryContainer = tertiaryContainer, +// onTertiaryContainer = onTertiaryContainer, + background = surfaceBg, + onBackground = textWhite, + surface = surfaceCard, + onSurface = textWhite, + surfaceVariant = surfaceCard, + onSurfaceVariant = textGrey, // navBar inactive icon + surfaceTint = transparent, + inverseSurface = surfaceInverse, +// inverseOnSurface = inverseOnSurface, +// error = error, +// onError = onError, +// errorContainer = errorContainer, +// onErrorContainer = onErrorContainer, +// outline = outline, +// outlineVariant = outlineVariant, +// scrim = scrim, +) + +private val lightScheme = lightColorScheme( + primary = primaryLight, + onPrimary = onPrimaryLight, + primaryContainer = primaryContainerLight, + onPrimaryContainer = onPrimaryContainerLight, + secondary = secondaryLight, + onSecondary = onSecondaryLight, + secondaryContainer = secondaryContainerLight, + onSecondaryContainer = onSecondaryContainerLight, + tertiary = tertiaryLight, + onTertiary = onTertiaryLight, + tertiaryContainer = tertiaryContainerLight, + onTertiaryContainer = onTertiaryContainerLight, + error = errorLight, + onError = onErrorLight, + errorContainer = errorContainerLight, + onErrorContainer = onErrorContainerLight, + background = backgroundLight, + onBackground = onBackgroundLight, + surface = surfaceLight, + onSurface = onSurfaceLight, + surfaceVariant = surfaceVariantLight, + onSurfaceVariant = onSurfaceVariantLight, + outline = outlineLight, + outlineVariant = outlineVariantLight, + scrim = scrimLight, + inverseSurface = inverseSurfaceLight, + inverseOnSurface = inverseOnSurfaceLight, + inversePrimary = inversePrimaryLight, + surfaceDim = surfaceDimLight, + surfaceBright = surfaceBrightLight, + surfaceContainerLowest = surfaceContainerLowestLight, + surfaceContainerLow = surfaceContainerLowLight, + surfaceContainer = surfaceContainerLight, + surfaceContainerHigh = surfaceContainerHighLight, + surfaceContainerHighest = surfaceContainerHighestLight, +) + +private val darkScheme = darkColorScheme( + primary = primaryDark, + onPrimary = onPrimaryDark, + primaryContainer = primaryContainerDark, + onPrimaryContainer = onPrimaryContainerDark, + secondary = secondaryDark, + onSecondary = onSecondaryDark, + secondaryContainer = secondaryContainerDark, + onSecondaryContainer = onSecondaryContainerDark, + tertiary = tertiaryDark, + onTertiary = onTertiaryDark, + tertiaryContainer = tertiaryContainerDark, + onTertiaryContainer = onTertiaryContainerDark, + error = errorDark, + onError = onErrorDark, + errorContainer = errorContainerDark, + onErrorContainer = onErrorContainerDark, + background = backgroundDark, + onBackground = onBackgroundDark, + surface = surfaceDark, + onSurface = onSurfaceDark, + surfaceVariant = surfaceVariantDark, + onSurfaceVariant = onSurfaceVariantDark, + outline = outlineDark, + outlineVariant = outlineVariantDark, + scrim = scrimDark, + inverseSurface = inverseSurfaceDark, + inverseOnSurface = inverseOnSurfaceDark, + inversePrimary = inversePrimaryDark, + surfaceDim = surfaceDimDark, + surfaceBright = surfaceBrightDark, + surfaceContainerLowest = surfaceContainerLowestDark, + surfaceContainerLow = surfaceContainerLowDark, + surfaceContainer = surfaceContainerDark, + surfaceContainerHigh = surfaceContainerHighDark, + surfaceContainerHighest = surfaceContainerHighestDark, +) diff --git a/app/src/main/res/drawable/launcher_mc.xml b/app/src/main/res/drawable/launcher_mc.xml new file mode 100644 index 00000000..a9e2f0cd --- /dev/null +++ b/app/src/main/res/drawable/launcher_mc.xml @@ -0,0 +1,20 @@ + + + + + + + + diff --git a/app/src/main/res/mipmap/ic_launcher.xml b/app/src/main/res/mipmap/ic_launcher.xml index f4977d78..c9f1ee87 100644 --- a/app/src/main/res/mipmap/ic_launcher.xml +++ b/app/src/main/res/mipmap/ic_launcher.xml @@ -2,4 +2,5 @@ + diff --git a/app/src/main/res/mipmap/ic_launcher_round.xml b/app/src/main/res/mipmap/ic_launcher_round.xml index f4977d78..c9f1ee87 100644 --- a/app/src/main/res/mipmap/ic_launcher_round.xml +++ b/app/src/main/res/mipmap/ic_launcher_round.xml @@ -2,4 +2,5 @@ + diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index 7bfb23f2..675103b6 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -178,4 +178,5 @@ за интерес к приложению и публикацию интервью на сайте. Это ПО поставляется без гарантий. + • Используйте старую цветовую схему. diff --git a/app/src/main/res/values-si/strings.xml b/app/src/main/res/values-si/strings.xml index 24815fe0..8ffb92cb 100644 --- a/app/src/main/res/values-si/strings.xml +++ b/app/src/main/res/values-si/strings.xml @@ -175,4 +175,5 @@ SatNOGSWeb අඩවියට API හා DB විශාල දත්ත ප්‍රමාණයක් ලබාදීම සඳහා. \n• DownloadAstro කණ්ඩායමට යෙදුම පිළිබඳ ඔවුන්ගේ උනන්දුව සහ කැපවීම ලැබිම සම්බන්ධයෙන්. මෘදුකාංගය වගකීමක් සමග නොලැබේ + • පැරණි වර්ණ පටිපාටිය භාවිතා කරන්න diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index c870ada7..309d6eff 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -179,4 +179,5 @@ team for their interest to the app and the interview published. 该应用程序不提供任何保修. + • 使用旧版配色方案 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 99e6665d..5a4bcf06 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -180,4 +180,5 @@ team for their interest to the app and the interview published. The app comes with no warranty. + • Use the old color scheme diff --git a/data/src/main/java/com/rtbishop/look4sat/data/repository/SettingsRepo.kt b/data/src/main/java/com/rtbishop/look4sat/data/repository/SettingsRepo.kt index 7b62691d..ac022891 100644 --- a/data/src/main/java/com/rtbishop/look4sat/data/repository/SettingsRepo.kt +++ b/data/src/main/java/com/rtbishop/look4sat/data/repository/SettingsRepo.kt @@ -53,6 +53,7 @@ class SettingsRepo(private val manager: LocationManager, private val preferences private val keyStateOfSensors = "stateOfSensors" private val keyStateOfSweep = "stateOfSweep" private val keyStateOfUtc = "stateOfUtc" + private val keyStateOfOldScheme = "stateOfOldScheme" private val keyStationAltitude = "stationAltitude" private val keyStationLatitude = "stationLatitude" private val keyStationLongitude = "stationLongitude" @@ -221,12 +222,18 @@ class SettingsRepo(private val manager: LocationManager, private val preferences _otherSettings.value = otherSettings.value.copy(stateOfUtc = value) } + override fun setStateOfOldScheme(value: Boolean){ + preferences.edit { putBoolean(keyStateOfOldScheme, value) } + _otherSettings.value = otherSettings.value.copy(stateOfOldScheme = value) + } + private fun getOtherSettings(): OtherSettings { val stateOfAutoUpdate = preferences.getBoolean(keyStateOfAutoUpdate, true) val stateOfSensors = preferences.getBoolean(keyStateOfSensors, true) val stateOfSweep = preferences.getBoolean(keyStateOfSweep, true) val stateOfUtc = preferences.getBoolean(keyStateOfUtc, false) - return OtherSettings(stateOfAutoUpdate, stateOfSensors, stateOfSweep, stateOfUtc) + val stateOfOldScheme = preferences.getBoolean(keyStateOfOldScheme,false) + return OtherSettings(stateOfAutoUpdate, stateOfSensors, stateOfSweep, stateOfUtc,stateOfOldScheme) } //endregion diff --git a/domain/src/main/java/com/rtbishop/look4sat/domain/model/Settings.kt b/domain/src/main/java/com/rtbishop/look4sat/domain/model/Settings.kt index 71c604df..9fe282b8 100644 --- a/domain/src/main/java/com/rtbishop/look4sat/domain/model/Settings.kt +++ b/domain/src/main/java/com/rtbishop/look4sat/domain/model/Settings.kt @@ -8,5 +8,6 @@ data class OtherSettings( val stateOfAutoUpdate: Boolean, val stateOfSensors: Boolean, val stateOfSweep: Boolean, - val stateOfUtc: Boolean + val stateOfUtc: Boolean, + val stateOfOldScheme: Boolean ) diff --git a/domain/src/main/java/com/rtbishop/look4sat/domain/repository/ISettingsRepo.kt b/domain/src/main/java/com/rtbishop/look4sat/domain/repository/ISettingsRepo.kt index ba2230dd..f61bd377 100644 --- a/domain/src/main/java/com/rtbishop/look4sat/domain/repository/ISettingsRepo.kt +++ b/domain/src/main/java/com/rtbishop/look4sat/domain/repository/ISettingsRepo.kt @@ -55,6 +55,7 @@ interface ISettingsRepo { fun setStateOfSensors(value: Boolean) fun setStateOfSweep(value: Boolean) fun setStateOfUtc(value: Boolean) + fun setStateOfOldScheme(value: Boolean) //endregion //region # Undefined settings