diff --git a/core/presentation/src/main/res/values-es/strings.xml b/core/presentation/src/main/res/values-es/strings.xml index 7a9c3d59..62a47c0a 100644 --- a/core/presentation/src/main/res/values-es/strings.xml +++ b/core/presentation/src/main/res/values-es/strings.xml @@ -161,10 +161,13 @@ Otros Hora UTC - Actualización automática + Auto-actualizar Animación radar Sensores Filtro nocturno + Tema claro + Desfase de brújula (ácimut) + Desfase de brújula (elevación) Resaltado de elevación Baja < %1$d° diff --git a/core/presentation/src/main/res/values-ru/strings.xml b/core/presentation/src/main/res/values-ru/strings.xml index bbd6160c..0678fddc 100644 --- a/core/presentation/src/main/res/values-ru/strings.xml +++ b/core/presentation/src/main/res/values-ru/strings.xml @@ -161,10 +161,13 @@ Прочее Время в UTC - Автообновление данных + Автообновление Анимация радара Сенсоры Ночной фильтр + Светлая тема + Смещение компаса (азимут) + Смещение компаса (элевация) Подсветка высоты Низко < %1$d° diff --git a/core/presentation/src/main/res/values-si/strings.xml b/core/presentation/src/main/res/values-si/strings.xml index 50dbd2e2..af31f0f2 100644 --- a/core/presentation/src/main/res/values-si/strings.xml +++ b/core/presentation/src/main/res/values-si/strings.xml @@ -161,10 +161,13 @@ වෙනත් UTC වේලාව - දත්ත ස්වයං යාවත්කාලීන - Radar sweep + ස්වයං යාවත්කාලීන + රේඩාර් පරිලෝකනය සංවේදක රාත්‍රී පෙරහන + ආලෝක තේමාව + මාලිමා අපගමනය (දිගංශය) + මාලිමා අපගමනය (උත්තෝලනය) උස් උද්දීපනය අඩු < %1$d° diff --git a/core/presentation/src/main/res/values-tr/strings.xml b/core/presentation/src/main/res/values-tr/strings.xml index aa601777..db08f871 100644 --- a/core/presentation/src/main/res/values-tr/strings.xml +++ b/core/presentation/src/main/res/values-tr/strings.xml @@ -193,10 +193,13 @@ Diğer UTC saati - Veriyi otomatik güncelle + Otomatik güncelle Radar taraması Sensör Gece filtresi + Açık tema + Pusula sapması (azimut) + Pusula sapması (yükseklik açısı) Elevasyon vurgusu Düşük < %1$d° diff --git a/core/presentation/src/main/res/values-uk/strings.xml b/core/presentation/src/main/res/values-uk/strings.xml index 93f1553f..14efa660 100644 --- a/core/presentation/src/main/res/values-uk/strings.xml +++ b/core/presentation/src/main/res/values-uk/strings.xml @@ -161,10 +161,13 @@ Інше Час в UTC - Автооновлення даних + Автооновлення Анімація радара Сенсори Нічний фільтр + Світла тема + Зміщення компаса (азимут) + Зміщення компаса (піднесення) Підсвічування висоти Низько < %1$d° diff --git a/core/presentation/src/main/res/values-zh/strings.xml b/core/presentation/src/main/res/values-zh/strings.xml index 27551f3d..e39518ec 100644 --- a/core/presentation/src/main/res/values-zh/strings.xml +++ b/core/presentation/src/main/res/values-zh/strings.xml @@ -219,12 +219,13 @@ 其他 UTC 时间 - 自动更新数据 - 雷达扫描动画 - 传感器控制雷达 + 自动更新 + 雷达扫描 + 传感器 红色夜间模式 - 雷达罗盘水平偏移量 - 雷达罗盘俯仰偏移量 + 浅色主题 + 罗盘偏移量(方位角) + 罗盘偏移量(仰角) 仰角高亮 低 < %1$d° diff --git a/core/presentation/src/main/res/values/strings.xml b/core/presentation/src/main/res/values/strings.xml index c36c1738..4e1d8714 100644 --- a/core/presentation/src/main/res/values/strings.xml +++ b/core/presentation/src/main/res/values/strings.xml @@ -56,14 +56,12 @@ \n\nPlease update the database at least weekly to get accurate predictions. What\'s new in Look4Sat - * Tweaked sunrise/sunset calculations, added tests by atsunatsu (#241) - \n\n* Overhauled sources import, added HTTP status by wty2019wty (#242) - \nSources now have priority - the top ones define satellite names and transceiver data. - \nYou can enable/disable sources and restore defaults via the Satellite data import dialog. - \n\n* Localized AMSAT status screen for Chinese by atsunatsu (#245) - \n\n* Extracted hardcoded UI strings to resources by TianhengZhuang (#247) - \n\n* Added AMSAT satellite status reports submission by atsunatsu (#248) - \n\n* Slightly optimized map performance to reduce ANRs and memory consumption. Zoom in to see satellite labels. + * Fixed AOS window filter to follow the UTC setting by wty2019wty (#252) + \n\n* Applied elevation color thresholds to the Radar by atsunatsu (#253) + \n\n* Added fuzzy satellite search ignoring separators by atsunatsu (#255) + \n\n* Added light theme suitable for e-ink devices by Ondrej Kolonicny (#256) + \n\n* Fixed IC-705 frequency read in dual-radio mode by Michael S (#260) + \n\n* Fixed day/night map overlay calculation and display issue by rt-bishop @@ -262,13 +260,13 @@ Other UTC time - Auto-update data + Auto-update Radar sweep - Use sensors + Sensors Night filter Light theme - Radar compass offset - Radar compass offset (elev) + Compass offset (azimuth) + Compass offset (elevation) Elevation highlight Low < %1$d° diff --git a/fastlane/metadata/android/en-US/changelogs/default.txt b/fastlane/metadata/android/en-US/changelogs/default.txt index 259eeef9..5c4b3428 100644 --- a/fastlane/metadata/android/en-US/changelogs/default.txt +++ b/fastlane/metadata/android/en-US/changelogs/default.txt @@ -1,5 +1,6 @@ -* Tweaked sun calculations, added tests by atsunatsu (#241) -* Overhauled sources import, added HTTP status by wty2019wty (#242) -* Localized AMSAT status screen for Chinese by atsunatsu (#245) -* Extracted hardcoded UI strings to resources by TianhengZhuang (#247) -* Added AMSAT satellite status reports submission by atsunatsu (#248) +* Fixed AOS window filter to follow the UTC setting by wty2019wty (#252) +* Applied elevation color thresholds to the Radar by atsunatsu (#253) +* Added fuzzy satellite search ignoring separators by atsunatsu (#255) +* Added light theme suitable for e-ink devices by Ondrej Kolonicny (#256) +* Fixed IC-705 frequency read in dual-radio mode by Michael S (#260) +* Fixed day/night map overlay calculation and display issue by rt-bishop diff --git a/feature/map/src/main/java/com/rtbishop/look4sat/feature/map/MapNightOverlay.kt b/feature/map/src/main/java/com/rtbishop/look4sat/feature/map/MapNightOverlay.kt index 33e17381..49c86e9a 100644 --- a/feature/map/src/main/java/com/rtbishop/look4sat/feature/map/MapNightOverlay.kt +++ b/feature/map/src/main/java/com/rtbishop/look4sat/feature/map/MapNightOverlay.kt @@ -116,8 +116,9 @@ class MapNightOverlay : Overlay() { else -> { // Terminator crosses this column — find the crossing pixel by binary search - val crossY = findCrossingY(proj, x, 0, h - 1, sinSunLat, cosSunLat, cosLonDiff) - if (dotTop < 0) { + val isNightAtTop = dotTop < 0 + val crossY = findCrossingY(proj, x, 0, h - 1, sinSunLat, cosSunLat, cosLonDiff, isNightAtTop) + if (isNightAtTop) { // Night at top, day at bottom rect.set(x.toFloat(), 0f, (x + stepPx).toFloat(), crossY.toFloat()) canvas.drawRect(rect, nightPaint) @@ -134,7 +135,11 @@ class MapNightOverlay : Overlay() { /** * Binary-search for the pixel row where the day/night boundary crosses column [x]. - * [yTop] is in day, [yBot] is in night (or vice versa). + * + * [isNightAtTop] states which side [yTop] is on. Both polarities occur: the pole nearest + * the sub-solar point is lit, so the terminator runs day-over-night while the sub-solar + * latitude is positive and night-over-day once it turns negative after the September + * equinox. Anchoring lo to the top pixel's side keeps the search valid either way. */ private fun findCrossingY( proj: org.osmdroid.views.Projection, @@ -143,7 +148,8 @@ class MapNightOverlay : Overlay() { yBot: Int, sinSunLat: Double, cosSunLat: Double, - cosLonDiff: Double + cosLonDiff: Double, + isNightAtTop: Boolean ): Int { var lo = yTop var hi = yBot @@ -152,7 +158,8 @@ class MapNightOverlay : Overlay() { val geo = proj.fromPixels(x, mid, reusableGeoPoint) ?: return mid val latRad = Math.toRadians(geo.latitude) val dot = sin(latRad) * sinSunLat + cos(latRad) * cosSunLat * cosLonDiff - if (dot < 0) hi = mid else lo = mid + // Keep lo on the top pixel's side of the terminator and hi on the opposite side + if ((dot < 0) == isNightAtTop) lo = mid else hi = mid } return (lo + hi) / 2 } diff --git a/feature/settings/src/main/java/com/rtbishop/look4sat/feature/settings/SettingsScreen.kt b/feature/settings/src/main/java/com/rtbishop/look4sat/feature/settings/SettingsScreen.kt index 8192c3c8..c6574bf3 100644 --- a/feature/settings/src/main/java/com/rtbishop/look4sat/feature/settings/SettingsScreen.kt +++ b/feature/settings/src/main/java/com/rtbishop/look4sat/feature/settings/SettingsScreen.kt @@ -495,19 +495,21 @@ private fun OtherCard(settings: OtherSettings, onAction: (SettingsAction) -> Uni color = MaterialTheme.colorScheme.primary ) Spacer(modifier = Modifier.height(4.dp)) - // Appearance: light theme (paired with a spacer to align with the two-column rows) + // Data preferences: auto-update + UTC clock + Row(modifier = Modifier.fillMaxWidth(), horizontalArrangement = Arrangement.spacedBy(8.dp)) { + SwitchTile(R.string.prefs_other_switch_update, settings.stateOfAutoUpdate) { + onAction(SettingsAction.ToggleUpdate(it)) + } + SwitchTile(R.string.prefs_other_switch_utc, settings.stateOfUtc) { + onAction(SettingsAction.ToggleUtc(it)) + } + } + Spacer(modifier = Modifier.height(4.dp)) + // Appearance: light theme + night filter Row(modifier = Modifier.fillMaxWidth(), horizontalArrangement = Arrangement.spacedBy(8.dp)) { SwitchTile(R.string.prefs_other_switch_light_theme, settings.stateOfLightTheme) { onAction(SettingsAction.ToggleLightTheme(it)) } - Spacer(modifier = Modifier.weight(1f)) - } - Spacer(modifier = Modifier.height(4.dp)) - // Display preferences: UTC clock + night filter - Row(modifier = Modifier.fillMaxWidth(), horizontalArrangement = Arrangement.spacedBy(8.dp)) { - SwitchTile(R.string.prefs_other_switch_utc, settings.stateOfUtc) { - onAction(SettingsAction.ToggleUtc(it)) - } SwitchTile( R.string.prefs_other_switch_night_mode, settings.stateOfNightMode, @@ -517,7 +519,7 @@ private fun OtherCard(settings: OtherSettings, onAction: (SettingsAction) -> Uni } } Spacer(modifier = Modifier.height(4.dp)) - // Radar behavior: sweep animation + sensor control + // Radar behavior: sweep animation + sensors, followed by the compass offset sliders Row(modifier = Modifier.fillMaxWidth(), horizontalArrangement = Arrangement.spacedBy(8.dp)) { SwitchTile(R.string.prefs_other_switch_sweep, settings.stateOfSweep) { onAction(SettingsAction.ToggleSweep(it)) @@ -527,14 +529,9 @@ private fun OtherCard(settings: OtherSettings, onAction: (SettingsAction) -> Uni } } Spacer(modifier = Modifier.height(4.dp)) - // Data management (full width) - SwitchRow(R.string.prefs_other_switch_update, settings.stateOfAutoUpdate) { - onAction(SettingsAction.ToggleUpdate(it)) - } - Spacer(modifier = Modifier.height(4.dp)) // Compass calibration sliders at the bottom CompassOffsetRow( - labelResId = R.string.prefs_other_compass_offset, + labelResId = R.string.prefs_other_compass_offset_az, value = settings.radarCompassOffset, range = -180f..180f ) { onAction(SettingsAction.SetRadarCompassOffset(it)) } @@ -561,7 +558,14 @@ private fun CompassOffsetRow( verticalAlignment = Alignment.CenterVertically, modifier = Modifier.fillMaxWidth() ) { - Text(text = stringResource(id = labelResId)) + Text( + text = stringResource(id = labelResId), + modifier = Modifier + .weight(1f) + .padding(end = 4.dp) + .infiniteMarquee(), + maxLines = 1 + ) Text(text = "${value.toInt()}°") } Spacer(modifier = Modifier.height(4.dp)) @@ -572,18 +576,6 @@ private fun CompassOffsetRow( ) } -@Composable -private fun SwitchRow(labelResId: Int, checked: Boolean, onCheckedChange: (Boolean) -> Unit) { - Row( - horizontalArrangement = Arrangement.SpaceBetween, - verticalAlignment = Alignment.CenterVertically, - modifier = Modifier.fillMaxWidth() - ) { - Text(text = stringResource(id = labelResId)) - Switch(checked = checked, onCheckedChange = onCheckedChange) - } -} - @Composable private fun RowScope.SwitchTile( labelResId: Int, @@ -598,7 +590,11 @@ private fun RowScope.SwitchTile( ) { Text( text = stringResource(id = labelResId), - modifier = Modifier.weight(1f) + modifier = Modifier + .weight(1f) + .padding(end = 4.dp) + .infiniteMarquee(), + maxLines = 1 ) Switch(checked = checked, enabled = enabled, onCheckedChange = onCheckedChange) } diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 444f916c..44c037d6 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,8 +1,8 @@ [versions] #noinspection UnusedVersionCatalogEntry -appVersionCode = "447" +appVersionCode = "448" #noinspection UnusedVersionCatalogEntry -appVersionName = "4.4.7" +appVersionName = "4.4.8" #noinspection UnusedVersionCatalogEntry compileSdk = "37" #noinspection UnusedVersionCatalogEntry @@ -12,16 +12,16 @@ jdkVersion = "21" #noinspection UnusedVersionCatalogEntry packageName = "com.rtbishop.look4sat" -android-gradle-plugin = "9.4.0" +android-gradle-plugin = "9.4.1" -androidx-core-ktx = "1.19.0" +androidx-core-ktx = "1.19.1" androidx-core-splashscreen = "1.2.0" androidx-room = "2.8.5" compose-bom = "2026.09.00" compose-activity = "1.13.0" compose-lifecycle = "2.11.0" -compose-navigation3 = "1.1.7" +compose-navigation3 = "1.2.0" google-ksp = "2.3.11" diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 1e1cc32a..f63d7b28 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,7 +1,7 @@ -#Sat Sep 12 11:29:59 BST 2026 +#Sun Sep 27 11:54:01 BST 2026 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-9.7.1-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-9.8.0-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME