Added more tweaks to components and dependencies

This commit is contained in:
Arty Bishop committed 2025-12-27 15:02:15 +00:00
1 parent 24002827ed
commit c370d9febd
16 files changed
+50 -240

No files matched your search

+1
View File
@@ -35,6 +35,7 @@ android {
} }
androidResources { androidResources {
generateLocaleConfig = true generateLocaleConfig = true
localeFilters.addAll(listOf("en", "es-rES", "ru", "si", "uk", "zh-rCN"))
} }
} }
+5 -3
View File
@@ -7,7 +7,6 @@
<uses-permission android:name="android.permission.BLUETOOTH_CONNECT" /> <uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />
<uses-permission android:name="android.permission.BLUETOOTH_SCAN" /> <uses-permission android:name="android.permission.BLUETOOTH_SCAN" />
<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.VIBRATE" />
<application <application
android:name=".MainApplication" android:name=".MainApplication"
@@ -18,13 +17,16 @@
<activity <activity
android:name=".MainActivity" android:name=".MainActivity"
android:exported="true" android:exported="true"
android:theme="@style/Theme.Look4Sat.SplashScreen" android:theme="@style/Theme.Look4Sat.SplashScreen">
android:windowSoftInputMode="adjustResize">
<intent-filter> <intent-filter>
<action android:name="android.intent.action.MAIN" /> <action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" /> <category android:name="android.intent.category.LAUNCHER" />
</intent-filter> </intent-filter>
</activity> </activity>
<meta-data
android:name="android.telephony.PROPERTY_SATELLITE_DATA_OPTIMIZED"
android:value="com.rtbishop.look4sat" />
</application> </application>
</manifest> </manifest>
@@ -17,11 +17,7 @@
*/ */
package com.rtbishop.look4sat package com.rtbishop.look4sat
import android.annotation.SuppressLint
import android.app.Activity
import android.app.Application import android.app.Application
import android.content.pm.ActivityInfo
import android.os.Bundle
import java.text.SimpleDateFormat import java.text.SimpleDateFormat
import java.util.Date import java.util.Date
import java.util.Locale import java.util.Locale
@@ -32,7 +28,6 @@ class MainApplication : Application() {
lateinit var container: MainContainer lateinit var container: MainContainer
override fun onCreate() { override fun onCreate() {
disableMobileLandscapeLayout()
super.onCreate() super.onCreate()
container = MainContainer(this) container = MainContainer(this)
// trigger automatic update every 48 hours // trigger automatic update every 48 hours
@@ -51,23 +46,4 @@ class MainApplication : Application() {
} }
} }
} }
@SuppressLint("SourceLockedOrientationActivity")
private fun disableMobileLandscapeLayout() {
val isTablet = applicationContext.resources?.getBoolean(R.bool.isTablet) ?: true
val lifecycleAdapter = object : ActivityLifecycleCallbacks {
override fun onActivityCreated(activity: Activity, savedInstanceState: Bundle?) {
if (!isTablet) {
activity.requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT
}
}
override fun onActivityStarted(activity: Activity) {}
override fun onActivityResumed(activity: Activity) {}
override fun onActivityPaused(activity: Activity) {}
override fun onActivityStopped(activity: Activity) {}
override fun onActivitySaveInstanceState(activity: Activity, outState: Bundle) {}
override fun onActivityDestroyed(activity: Activity) {}
}
registerActivityLifecycleCallbacks(lifecycleAdapter)
}
} }
@@ -1,7 +1,9 @@
package com.rtbishop.look4sat.presentation package com.rtbishop.look4sat.presentation
import androidx.compose.material3.Icon import androidx.compose.material3.Icon
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text import androidx.compose.material3.Text
import androidx.compose.material3.adaptive.navigationsuite.NavigationSuiteDefaults
import androidx.compose.material3.adaptive.navigationsuite.NavigationSuiteScaffold import androidx.compose.material3.adaptive.navigationsuite.NavigationSuiteScaffold
import androidx.compose.material3.adaptive.navigationsuite.NavigationSuiteType import androidx.compose.material3.adaptive.navigationsuite.NavigationSuiteType
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
@@ -12,7 +14,8 @@ import androidx.navigation.compose.NavHost
import androidx.navigation.compose.currentBackStackEntryAsState import androidx.navigation.compose.currentBackStackEntryAsState
import androidx.navigation.compose.rememberNavController import androidx.navigation.compose.rememberNavController
import com.rtbishop.look4sat.R import com.rtbishop.look4sat.R
import com.rtbishop.look4sat.presentation.common.isVerticalLayout import com.rtbishop.look4sat.presentation.common.hasEnoughHeight
import com.rtbishop.look4sat.presentation.common.hasEnoughWidth
import com.rtbishop.look4sat.presentation.map.mapDestination import com.rtbishop.look4sat.presentation.map.mapDestination
import com.rtbishop.look4sat.presentation.passes.passesDestination import com.rtbishop.look4sat.presentation.passes.passesDestination
import com.rtbishop.look4sat.presentation.radar.radarDestination import com.rtbishop.look4sat.presentation.radar.radarDestination
@@ -48,8 +51,11 @@ fun MainScreen(navController: NavHostController = rememberNavController()) {
} }
}) })
} }
}, layoutType = when { }, navigationSuiteColors = NavigationSuiteDefaults.colors(
isVerticalLayout() -> NavigationSuiteType.ShortNavigationBarCompact navigationRailContainerColor = MaterialTheme.colorScheme.surfaceContainer
), layoutType = when {
!hasEnoughHeight() && hasEnoughWidth() -> NavigationSuiteType.NavigationRail
!hasEnoughWidth() -> NavigationSuiteType.ShortNavigationBarCompact
else -> NavigationSuiteType.ShortNavigationBarMedium else -> NavigationSuiteType.ShortNavigationBarMedium
} }
) { ) {
@@ -310,6 +310,16 @@ fun InfoDialog(title: String, text: String, onDismiss: () -> Unit) {
} }
} }
@Composable
fun hasEnoughHeight(): Boolean {
return currentWindowAdaptiveInfo().windowSizeClass.isHeightAtLeastBreakpoint(480)
}
@Composable
fun hasEnoughWidth(): Boolean {
return currentWindowAdaptiveInfo().windowSizeClass.isWidthAtLeastBreakpoint(600)
}
@Composable @Composable
fun isVerticalLayout(): Boolean { fun isVerticalLayout(): Boolean {
return currentWindowAdaptiveInfo().windowSizeClass.isWidthAtLeastBreakpoint(600).not() return currentWindowAdaptiveInfo().windowSizeClass.isWidthAtLeastBreakpoint(600).not()
@@ -137,15 +137,15 @@ class RadarViewModel(
) )
} }
_uiState.update { it.copy(orbitalPos = orbitalPos, satTrack = track) } _uiState.update { it.copy(orbitalPos = orbitalPos, satTrack = track) }
// viewModelScope.launch { viewModelScope.launch {
// if (settingsRepo.getRotatorState()) { if (settingsRepo.rcSettings.value.rotatorState) {
// val server = settingsRepo.getRotatorAddress() val server = settingsRepo.rcSettings.value.rotatorAddress
// val port = settingsRepo.getRotatorPort().toInt() val port = settingsRepo.rcSettings.value.rotatorPort.toInt()
// val azimuth = orbitalPos.azimuth.toDegrees().round(2) val azimuth = orbitalPos.azimuth.toDegrees().round(2)
// val elevation = orbitalPos.elevation.toDegrees().round(2) val elevation = orbitalPos.elevation.toDegrees().round(2)
// networkReporter.reportRotation(server, port, azimuth, elevation) networkReporter.reportRotation(server, port, azimuth, elevation)
// } }
// } }
} }
private fun sendPassDataBT(orbitalPos: OrbitalPos) { private fun sendPassDataBT(orbitalPos: OrbitalPos) {
-176
View File
@@ -1,176 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">Look4Sat</string>
<string name="app_timer">00:00:00</string>
<string name="app_version">Versión: %s</string>
<string name="app_subtitle">Rastreador y predictor de satélites</string>
<!--Buttons-->
<string name="btn_add">Añadir</string>
<string name="btn_accept">Aceptar</string>
<string name="btn_cancel">Cancelar</string>
<string name="btn_back">Atrás</string>
<string name="btn_modes">Modos</string>
<string name="btn_select">Seleccionar todo</string>
<string name="btn_done">OK</string>
<string name="btn_clear">Vaciar</string>
<string name="btn_clear_all">Vaciar todo</string>
<string name="btn_refresh">Recargar</string>
<string name="btn_map">Mapa</string>
<string name="btn_filter">Filtro</string>
<string name="btn_satellites">Satélites</string>
<string name="btn_settings">Ajustes</string>
<string name="btn_prev">Anterior</string>
<string name="btn_next">Siguiente</string>
<string name="btn_notify">Notificar</string>
<string name="btn_gps">GPS</string>
<string name="btn_manual">Manual</string>
<string name="btn_qth">QTH</string>
<string name="btn_web">Online</string>
<string name="btn_import">Importar</string>
<string name="btn_github">GitHub</string>
<string name="btn_support">Soporte</string>
<string name="btn_fdroid">F-Droid</string>
<!--Dialogs-->
<string name="filter_title">Filtrar pases</string>
<string name="filter_hours_hint">Horas por delante</string>
<string name="filter_hours_text">Mostrar pases que ocurrirán en X horas</string>
<string name="filter_elev_hint">Elevación mínima</string>
<string name="filter_elev_text">Mostar primero pases con elevación máxima</string>
<string name="locator_title">Ajustes ubicación QTH</string>
<string name="locator_text">Ajustar posición de la estación con tu ubicación</string>
<string name="locator_hint">QTH</string>
<string name="modes_title">Tipo de modulación</string>
<string name="position_title">Ajustar ubicaicón de la estación</string>
<string name="position_lat_text">Latitud de tu estación terrestre</string>
<string name="position_lat_hint">Latitud</string>
<string name="position_lon_text">Longitud de tu estación terrestre</string>
<string name="position_lon_hint">Longitud</string>
<string name="sources_title">Gestionar fuentes de datos</string>
<string name="sources_hint">Fuente HTTPS</string>
<string name="types_title">Seleccionar tipo de satélite</string>
<string name="types_message">Tipo: %s</string>
<!--Fragments-->
<string name="entries_search_hint">Buscar por Nombre / Id</string>
<string name="passes_error">No hay pases de satélite próximos para mostrar</string>
<string name="passes_empty_db">No hay datos para mostrar. Por favor, actualiza la base de datos a través del menú Ajustes.</string>
<string name="pass_satName">%s</string>
<string name="pass_satId">Id:%d</string>
<string name="pass_aosAz">AOS - %.1f°</string>
<string name="pass_elevation">ELEV: %.1f°</string>
<string name="pass_los">%.1f° - LOS</string>
<string name="pass_altitude">ALT: %.0f km</string>
<string name="pass_placeholder"> - - : - - </string>
<string name="pass_startTime">HH:mm:ss - MMM dd</string>
<string name="pass_endTime">dd MMM - HH:mm:ss</string>
<string name="radar_az_text">Ácimut</string>
<string name="radar_az_value">%.1f°</string>
<string name="radar_el_text">Elevación</string>
<string name="radar_el_value">%.1f°</string>
<string name="radar_alt_text">Altitud</string>
<string name="radar_alt_value">%.0f km</string>
<string name="radar_dist_text">Distancia</string>
<string name="radar_dist_value">%.0f km</string>
<string name="radar_visible">Visible</string>
<string name="radar_eclipsed">Eclipsado</string>
<string name="radar_sat_name">%s</string>
<string name="radar_sat_id">Id:%d</string>
<string name="radio_mode">Modo: %s</string>
<string name="radio_inverted">Invertido: %s</string>
<string name="radio_info">%s</string>
<string name="radio_no_link">- - . - -</string>
<string name="radio_link_low">%.4f</string>
<string name="radio_link_lowHigh">%.4f - %.4f</string>
<string name="radio_data">Transmisores satélite:</string>
<string name="radio_no_data">Este satélite no lleva transmisores</string>
<string name="radio_string_yes">Si</string>
<string name="radio_string_no">No</string>
<string name="radio_downlink">Downlink</string>
<string name="radio_uplink">Uplink</string>
<string name="map_title">Mapa mundo</string>
<string name="map_sat_name">%s</string>
<string name="map_sat_id">Id:%d</string>
<string name="map_azimuth">Ácimut: %.1f°</string>
<string name="map_elevation">Elevación: %.1f°</string>
<string name="map_latitude">Latitud: %.1f°</string>
<string name="map_longitude">Longitud: %.1f°</string>
<string name="map_qth">Ubicación QTH: %s</string>
<string name="map_visible">Visible</string>
<string name="map_eclipsed">Eclipsado</string>
<string name="map_visibility">Visibilidad: %s</string>
<string name="map_period">Período: %.0f min</string>
<string name="map_phase">Fase: %.1f°</string>
<string name="map_altitude">Altitud: %.0f km</string>
<string name="map_distance">Distancia: %.0f km</string>
<string name="map_velocity">Velocidad: %.2f km/s</string>
<string name="map_copyright">Wikimedia maps | Map data © OpenStreetMap contributors</string>
<!--Cards-->
<string name="location_title">Ubicación estación</string>
<string name="location_lat">Latitud: %.4f°</string>
<string name="location_lon">Longitud: %.4f°</string>
<string name="location_null">Sin datos de geolocalización</string>
<string name="location_gps_error">Revisa los permisos de ubicación</string>
<string name="location_manual_error">Ubicación no válida</string>
<string name="location_qth_error">Ubicación QTH no válida</string>
<string name="location_success">Ubicación actualizada con éxito</string>
<string name="data_title">Actualizar datos de satélites</string>
<string name="data_error">Actualización completada con errores</string>
<string name="data_update">Última actualización: %s</string>
<string name="data_entries">Satélites: %s</string>
<string name="data_radios">Transmisores: %s</string>
<string name="data_success">Actualización completada con éxito</string>
<string name="data_clear_success">Datos eliminados con éxito</string>
<string name="remote_title">Preferencias Rotator</string>
<string name="remote_switch">Habilitar control remoto</string>
<string name="remote_ip_hint">Dirección IP</string>
<string name="remote_port_hint">Puerto</string>
<string name="BTremote_title">Salida por Bluetooth</string>
<string name="BTremote_switch">Habilitar salida</string>
<string name="BTremote_device_hint">Id dispositivo</string>
<string name="BTremote_output_hint">Formato de datos</string>
<string name="BTremote_perm_error">Revisa los permisos de Bluetooth</string>
<string name="other_title">Otras preferencias</string>
<string name="other_switch_utc">Mostrar tiempos de pase en UTC</string>
<string name="other_switch_update">Habilitar auto actualización de datos</string>
<string name="other_switch_sweep">Habilitar animaciones radar</string>
<string name="other_switch_sensors">Usar sensores para rotar vista de radar</string>
<string name="outro_title">Me gustaría dar las gracias a:</string>
<string name="outro_thanks"> • tí por descargar y usar Look4Sat! \nQue tengas cielos despejados!
\n • <a href="https://github.com/g4dpz">David A. B. Johnson</a>
y <a href="https://github.com/davidmoten">Dave Moten</a> por crear predict4java lib
bajo <a href="https://gnu.org/licenses/old-licenses/gpl-2.0.en.html">GNU GPLv2</a>.
\n • <a href="https://github.com/csete">Alexandru Csete</a> por crear el rastreador de satélites Gpredict
que ha inspirado la creación de Look4Sat.
\n • <a href="https://celestrak.com/webmaster.php">Dr T.S. Kelso</a> por mantener
<a href="https://celestrak.com/">Celestrak</a> que proporciona acceso a datos TLE.
\n • <a href="https://libre.space/">Libre Space Foundation</a> por la API y base de datos
<a href="https://db.satnogs.org/">SatNOGS</a> que proporciona gran cantidad de datos de satélites.
\n • <a href="https://appoftheday.downloadastro.com/app/look4sat-satellite-tracker/">DownloadAstro</a>
por su interés en la app y la entrevista publicada.
</string>
<string name="outro_license"><a href="https://sites.google.com/view/look4sat-privacy-policy/home">Política de privacidad.</a>
La app viene sin garantías de ningún tipo. \nPara más información revisa la licencia <a href="https://www.gnu.org/licenses/gpl-3.0.html">GNU GPLv3</a>.
</string>
</resources>
+1 -1
View File
@@ -7,9 +7,9 @@
<string name="nav_satellites">Спутники</string> <string name="nav_satellites">Спутники</string>
<string name="nav_passes">Пролеты</string> <string name="nav_passes">Пролеты</string>
<string name="nav_radar">Radar</string>
<string name="nav_map">Карта</string> <string name="nav_map">Карта</string>
<string name="nav_settings">Настройки</string> <string name="nav_settings">Настройки</string>
<string name="menu_about">Инфо</string>
<!--Buttons--> <!--Buttons-->
+1 -1
View File
@@ -7,9 +7,9 @@
<string name="nav_satellites">චන්ද්‍රිකා</string> <string name="nav_satellites">චන්ද්‍රිකා</string>
<string name="nav_passes">පසුකර යෑම්</string> <string name="nav_passes">පසුකර යෑම්</string>
<string name="nav_radar">Radar</string>
<string name="nav_map">ලෝක සිතියම</string> <string name="nav_map">ලෝක සිතියම</string>
<string name="nav_settings">පසුතල</string> <string name="nav_settings">පසුතල</string>
<string name="menu_about">ගැන</string>
<!--Buttons--> <!--Buttons-->
@@ -1,3 +0,0 @@
<resources>
<bool name="isTablet">true</bool>
</resources>
+1 -1
View File
@@ -7,9 +7,9 @@
<string name="nav_satellites">Супутники</string> <string name="nav_satellites">Супутники</string>
<string name="nav_passes">Прольоти</string> <string name="nav_passes">Прольоти</string>
<string name="nav_radar">Radar</string>
<string name="nav_map">Мапа</string> <string name="nav_map">Мапа</string>
<string name="nav_settings">Налаштування</string> <string name="nav_settings">Налаштування</string>
<string name="menu_about">Інфо</string>
<!--Buttons--> <!--Buttons-->
<string name="btn_add">Додати</string> <string name="btn_add">Додати</string>
+1 -1
View File
@@ -7,9 +7,9 @@
<string name="nav_satellites">卫星</string> <string name="nav_satellites">卫星</string>
<string name="nav_passes">过境</string> <string name="nav_passes">过境</string>
<string name="nav_radar">Radar</string>
<string name="nav_map">世界地图</string> <string name="nav_map">世界地图</string>
<string name="nav_settings">设置</string> <string name="nav_settings">设置</string>
<string name="menu_about">关于</string>
<!--Buttons--> <!--Buttons-->
-1
View File
@@ -1,5 +1,4 @@
<resources> <resources>
<bool name="isTablet">false</bool>
<color name="accent">#FFE082</color> <color name="accent">#FFE082</color>
<color name="background">#121212</color> <color name="background">#121212</color>
<style name="Theme.Look4Sat.SplashScreen" parent="Theme.SplashScreen"> <style name="Theme.Look4Sat.SplashScreen" parent="Theme.SplashScreen">
+5 -8
View File
@@ -1,12 +1,9 @@
android.enableJetifier=false # Configure your build environment: http://www.gradle.org/docs/current/userguide/build_environment.html
android.enableR8.fullMode=true android.experimental.enableScreenshotTest=true
android.nonFinalResIds=true android.r8.optimizedResourceShrinking=true
android.nonTransitiveRClass=true
android.useAndroidX=true android.useAndroidX=true
kotlin.code.style=official kotlin.code.style=official
kotlin.daemon.jvm.options=-Xmx4g
kotlin.incremental=true
org.gradle.caching=true org.gradle.caching=true
org.gradle.configuration-cache=true org.gradle.jvmargs=-Xmx6g -XX:MaxMetaspaceSize=1g -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
org.gradle.jvmargs=-Xmx4g -Dfile.encoding=UTF-8 -XX:+UseParallelGC -XX:MaxMetaspaceSize=1g
org.gradle.parallel=true org.gradle.parallel=true
org.gradle.workers.max=4
+5 -7
View File
@@ -1,14 +1,14 @@
[versions] [versions]
android-gradle-plugin = "8.13.1" android-gradle-plugin = "8.13.2"
google-ksp = "2.3.0" google-ksp = "2.3.0"
kotlin = "2.2.21" kotlin = "2.3.0"
androidx-core-ktx = "1.17.0" androidx-core-ktx = "1.17.0"
androidx-core-splashscreen = "1.2.0" androidx-core-splashscreen = "1.2.0"
androidx-room = "2.8.4" androidx-room = "2.8.4"
compose-bom = "2025.11.01" compose-bom = "2025.12.01"
compose-activity = "1.12.0" compose-activity = "1.12.2"
compose-lifecycle = "2.10.0" compose-lifecycle = "2.10.0"
compose-navigation = "2.9.6" compose-navigation = "2.9.6"
@@ -18,7 +18,6 @@ other-okhttp = "5.3.2"
other-osmdroid = "6.1.20" other-osmdroid = "6.1.20"
test-junit4 = "4.13.2" test-junit4 = "4.13.2"
test-mockk = "1.14.6"
androidTest-junit = "1.3.0" androidTest-junit = "1.3.0"
androidTest-espresso = "3.7.0" androidTest-espresso = "3.7.0"
@@ -52,7 +51,6 @@ other-osmdroid = { module = "org.osmdroid:osmdroid-android", version.ref = "othe
test-coroutines = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-test", version.ref = "other-coroutines" } test-coroutines = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-test", version.ref = "other-coroutines" }
test-junit4 = { module = "junit:junit", version.ref = "test-junit4" } test-junit4 = { module = "junit:junit", version.ref = "test-junit4" }
test-mockk = { module = "io.mockk:mockk", version.ref = "test-mockk" }
androidTest-junit = { module = "androidx.test.ext:junit", version.ref = "androidTest-junit" } androidTest-junit = { module = "androidx.test.ext:junit", version.ref = "androidTest-junit" }
androidTest-espresso = { module = "androidx.test.espresso:espresso-core", version.ref = "androidTest-espresso" } androidTest-espresso = { module = "androidx.test.espresso:espresso-core", version.ref = "androidTest-espresso" }
@@ -72,5 +70,5 @@ composeAll = [
"compose-material3-navigation", "compose-navigation", "compose-viewmodel" "compose-material3-navigation", "compose-navigation", "compose-viewmodel"
] ]
composeDebug = ["compose-debug-manifest", "compose-debug-tooling"] composeDebug = ["compose-debug-manifest", "compose-debug-tooling"]
unitTest = ["test-coroutines", "test-junit4", "test-mockk"] unitTest = ["test-coroutines", "test-junit4"]
androidTest = ["androidTest-junit", "androidTest-espresso"] androidTest = ["androidTest-junit", "androidTest-espresso"]
+2 -2
View File
@@ -1,7 +1,7 @@
#Sat Nov 01 16:31:15 GMT 2025 #Tue Dec 02 19:07:56 GMT 2025
distributionBase=GRADLE_USER_HOME distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-9.2.0-bin.zip distributionUrl=https\://services.gradle.org/distributions/gradle-9.2.1-bin.zip
networkTimeout=10000 networkTimeout=10000
validateDistributionUrl=true validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME zipStoreBase=GRADLE_USER_HOME