diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
index 07fcc40e..9a5a9c50 100644
--- a/.github/workflows/release.yml
+++ b/.github/workflows/release.yml
@@ -40,7 +40,7 @@ jobs:
echo "${{ secrets.KEY_STORE }}" | base64 -d > keystore.jks
APK=$(find app/build/outputs/apk/release -name "*.apk" | head -1)
VERSION=${TAG_NAME#v}
- SIGNED_APK="app/build/outputs/apk/release/look4sat-${VERSION}.apk"
+ SIGNED_APK="app/build/outputs/apk/release/Look4Sat-Pro-${VERSION}.apk"
BUILD_TOOLS=$(ls -d ${ANDROID_HOME}/build-tools/*/ | sort -V | tail -1)
${BUILD_TOOLS}apksigner sign \
--ks keystore.jks \
diff --git a/.gitignore b/.gitignore
index a3196c82..07d4b106 100644
--- a/.gitignore
+++ b/.gitignore
@@ -39,8 +39,7 @@ captures/
.idea/
# Keystore files
-# Uncomment the following line if you do not want to check your keystore files in.
-#*.jks
+*.jks
/*.properties
/keystore.properties
/app/keystore.jks
diff --git a/core/presentation/src/main/res/values-tr/strings.xml b/core/presentation/src/main/res/values-tr/strings.xml
index a9ff9f22..6df543c2 100644
--- a/core/presentation/src/main/res/values-tr/strings.xml
+++ b/core/presentation/src/main/res/values-tr/strings.xml
@@ -51,11 +51,11 @@
\n\nDoğru tahminler alabilmek için veritabanını en az haftada bir güncelleyin.
What\'s new in Look4Sat
- * Switched to short-form commands in NetworkReporter, by theojalba
- \n* Added CAT radio control for full-duplex SAT operation, by jcmerg
- \n* Added normalized time for passes AOS/LOS, fixed refresh state bug
- \n* Added multiple performance tweaks, improved passes calculation
- \n* Fixed UTC pass time problem mentioned in issue #201
+ * Roaming sayfası QTH定位器 2.0'dan birebir taşındı: 8 haneli konum, 3x3 ızgara, kırmızı işaret, canlı GPS
+ \n\n* İçeriğin sistem durum/gezinme çubuklarıyla çakışması düzeltildi; ızgara sütunları referans düzenle eşleşiyor
+ \n\n* Roaming sayfası renkleri uygulama temasını takip eder - kırmızı gece modunda tamamen görünür
+ \n\n* Ayarlar: sıkışan anahtar satırları ve teşekkür aralığı düzeltildi
+ \n\n* Uygulama adı artık Look4Sat Pro
@@ -103,7 +103,7 @@
Görünür
- Look4Sat v%s
+ Look4Sat Pro v%s
https://play.google.com/store/apps/details?id=com.rtbishop.look4sat
Bağış yap
https://ko-fi.com/rt_bishop
diff --git a/core/presentation/src/main/res/values-zh/strings.xml b/core/presentation/src/main/res/values-zh/strings.xml
index 743200fd..5f34bf71 100644
--- a/core/presentation/src/main/res/values-zh/strings.xml
+++ b/core/presentation/src/main/res/values-zh/strings.xml
@@ -39,6 +39,14 @@
没有即将过境的卫星
欢迎来到 Look4Sat\!
请务必在设置中通过GPS、经纬度或QTH定位您的位置\n建议至少每周更新一次数据库,以确保预测结果的准确性
+ Look4Sat Pro 更新内容
+
+ * 漫游页完整移植 QTH定位器 2.0:8 位网格、3x3 九宫格、红点查表定位、实时 GPS
+ \n\n* 修复内容被系统状态栏/导航栏遮挡;九宫格列宽与原版一致
+ \n\n* 漫游页配色跟随应用主题,红色夜间模式下清晰可见
+ \n\n* 设置:修复开关行挤压与感谢列表间距
+ \n\n* 应用名现为 Look4Sat Pro
+
后退
diff --git a/core/presentation/src/main/res/values/strings.xml b/core/presentation/src/main/res/values/strings.xml
index ca7ae6a0..eff962d0 100644
--- a/core/presentation/src/main/res/values/strings.xml
+++ b/core/presentation/src/main/res/values/strings.xml
@@ -53,8 +53,11 @@
\n\nPlease update the database at least weekly to get accurate predictions.
What\'s new in Look4Sat
- * Added required tweaks to support Android 17 (API 37)
- \n\n* Added ACCESS_LOCAL_NETWORK permission check to support network data output
+ * Roaming page ported verbatim from QTH定位器 2.0: 8-char locator, 3x3 grid, red marker lookup, live GPS
+ \n\n* Fixed content overlapping the system status/navigation bars; grid columns now match the reference layout
+ \n\n* Roaming page colors follow the app theme - fully visible in red night mode
+ \n\n* Settings: fixed squeezed toggle rows and credits spacing
+ \n\n* App name is now Look4Sat Pro
@@ -112,7 +115,7 @@
Visible
- Look4Sat v%s
+ Look4Sat Pro v%s
https://play.google.com/store/apps/details?id=com.rtbishop.look4sat
Donate
https://ko-fi.com/rt_bishop
diff --git a/feature/roaming/src/main/java/com/rtbishop/look4sat/feature/roaming/RoamingScreen.kt b/feature/roaming/src/main/java/com/rtbishop/look4sat/feature/roaming/RoamingScreen.kt
index d869cff6..a876519a 100644
--- a/feature/roaming/src/main/java/com/rtbishop/look4sat/feature/roaming/RoamingScreen.kt
+++ b/feature/roaming/src/main/java/com/rtbishop/look4sat/feature/roaming/RoamingScreen.kt
@@ -31,6 +31,7 @@ import androidx.activity.compose.rememberLauncherForActivityResult
import androidx.activity.result.contract.ActivityResultContracts
import androidx.compose.foundation.Image
import androidx.compose.foundation.background
+import androidx.compose.foundation.shape.CircleShape
import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column
@@ -45,6 +46,7 @@ import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size
import androidx.compose.foundation.layout.width
import androidx.compose.material3.CircularProgressIndicator
+import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.foundation.layout.WindowInsets
import androidx.compose.foundation.layout.windowInsetsPadding
@@ -144,7 +146,7 @@ fun RoamingScreen() {
Column(
modifier = Modifier
.fillMaxSize()
- .background(Color(0xFFF2F2F2))
+ .background(MaterialTheme.colorScheme.background)
.windowInsetsPadding(WindowInsets.systemBars)
) {
// relativeLayout7: 顶部 GPS 状态条, 25dp 高, holo_blue_bright
@@ -153,45 +155,45 @@ fun RoamingScreen() {
.fillMaxWidth()
.padding(2.dp)
.height(25.dp)
- .background(Color(0xFF01DDFF))
+ .background(MaterialTheme.colorScheme.surfaceVariant)
) {
Row(modifier = Modifier.fillMaxSize(), verticalAlignment = Alignment.CenterVertically) {
// tvTitleGPS: "GPS" 14sp 黑, 左 8dp
Text(
text = "GPS",
fontSize = 14.sp,
- color = Color.Black,
+ color = MaterialTheme.colorScheme.onSurfaceVariant,
modifier = Modifier.padding(start = 8.dp)
)
// imGps: toRightOf tvTitleGPS + marginLeft 15dp (成品 main.xml)
Spacer(modifier = Modifier.width(15.dp))
- // imGps: 绿点 (15dp)
+ // imGps: 绿点 (15dp, 主题色 primary -> 夜间滤镜下可见)
if (state.gpsOn) {
- Image(
- painter = painterResource(R.drawable.roam_gps_green),
- contentDescription = null,
- modifier = Modifier.size(15.dp)
+ Box(
+ modifier = Modifier
+ .size(15.dp)
+ .background(MaterialTheme.colorScheme.primary, CircleShape)
)
}
- // imGpsOff: 红点叠层 (15dp)
+ // imGpsOff: 红点叠层 (15dp, 主题色 error)
if (state.gpsOff) {
- Image(
- painter = painterResource(R.drawable.roam_gps_red),
- contentDescription = null,
- modifier = Modifier.size(15.dp)
+ Box(
+ modifier = Modifier
+ .size(15.dp)
+ .background(MaterialTheme.colorScheme.error, CircleShape)
)
}
Spacer(modifier = Modifier.weight(1f))
// tvDate: 14sp 黑, 居中
if (state.showDate) {
- Text(text = state.date.ifEmpty { dateText }, fontSize = 14.sp, color = Color.Black)
+ Text(text = state.date.ifEmpty { dateText }, fontSize = 14.sp, color = MaterialTheme.colorScheme.onSurfaceVariant)
}
Spacer(modifier = Modifier.weight(1f))
// tvTime: 14sp 黑, 右对齐
Text(
text = state.time,
fontSize = 14.sp,
- color = Color.Black,
+ color = MaterialTheme.colorScheme.onSurfaceVariant,
modifier = Modifier.padding(end = 8.dp)
)
}
@@ -201,12 +203,12 @@ fun RoamingScreen() {
Box(
modifier = Modifier
.align(Alignment.Center)
- .background(Color(0xFAF8F54A))
+ .background(MaterialTheme.colorScheme.primary)
.clickable { context.startActivity(Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS)) }
.padding(horizontal = 5.dp),
contentAlignment = Alignment.Center
) {
- Text(text = "设置启用GPS", fontSize = 14.sp, color = Color.Black)
+ Text(text = "设置启用GPS", fontSize = 14.sp, color = MaterialTheme.colorScheme.onPrimary)
}
}
}
@@ -215,19 +217,19 @@ fun RoamingScreen() {
modifier = Modifier
.fillMaxWidth()
.padding(horizontal = 2.dp)
- .background(Color(0xFF01DDFF))
+ .background(MaterialTheme.colorScheme.surfaceVariant)
) {
// 纬度行: tvLati 16sp 黑 左 8dp | tvLat 右对齐 3dp
Row(modifier = Modifier.fillMaxWidth().padding(vertical = 2.dp), verticalAlignment = Alignment.CenterVertically) {
- Text(text = state.latLabel, fontSize = 16.sp, color = Color.Black, modifier = Modifier.padding(start = 8.dp))
+ Text(text = state.latLabel, fontSize = 16.sp, color = MaterialTheme.colorScheme.onSurfaceVariant, modifier = Modifier.padding(start = 8.dp))
Spacer(modifier = Modifier.weight(1f))
- Text(text = state.latValue, fontSize = 14.sp, color = Color.Black, modifier = Modifier.padding(end = 3.dp))
+ Text(text = state.latValue, fontSize = 14.sp, color = MaterialTheme.colorScheme.onSurfaceVariant, modifier = Modifier.padding(end = 3.dp))
}
// 经度行
Row(modifier = Modifier.fillMaxWidth().padding(vertical = 2.dp), verticalAlignment = Alignment.CenterVertically) {
- Text(text = state.lonLabel, fontSize = 16.sp, color = Color.Black, modifier = Modifier.padding(start = 8.dp))
+ Text(text = state.lonLabel, fontSize = 16.sp, color = MaterialTheme.colorScheme.onSurfaceVariant, modifier = Modifier.padding(start = 8.dp))
Spacer(modifier = Modifier.weight(1f))
- Text(text = state.lonValue, fontSize = 14.sp, color = Color.Black, modifier = Modifier.padding(end = 3.dp))
+ Text(text = state.lonValue, fontSize = 14.sp, color = MaterialTheme.colorScheme.onSurfaceVariant, modifier = Modifier.padding(end = 3.dp))
}
}
// relativeLayout6: 定位码区, 43sp bold 黑居中
@@ -235,13 +237,13 @@ fun RoamingScreen() {
modifier = Modifier
.fillMaxWidth()
.padding(2.dp)
- .background(Color(0xFF01DDFF))
+ .background(MaterialTheme.colorScheme.surfaceVariant)
) {
Text(
text = state.loc,
fontSize = 43.sp,
fontWeight = FontWeight.Bold,
- color = Color.Black,
+ color = MaterialTheme.colorScheme.onSurfaceVariant,
textAlign = TextAlign.Center,
modifier = Modifier.fillMaxWidth()
)
@@ -249,7 +251,7 @@ fun RoamingScreen() {
if (state.showProgress) {
CircularProgressIndicator(
modifier = Modifier.size(24.dp).align(Alignment.Center),
- color = Color.Black,
+ color = MaterialTheme.colorScheme.onSurfaceVariant,
strokeWidth = 2.dp
)
}
@@ -259,7 +261,7 @@ fun RoamingScreen() {
text = "请稍等,加载可能需要几分钟的时间。",
fontSize = 16.sp,
fontStyle = androidx.compose.ui.text.font.FontStyle.Italic,
- color = Color.Black,
+ color = MaterialTheme.colorScheme.onSurfaceVariant,
modifier = Modifier.align(Alignment.TopCenter).padding(top = 2.dp)
)
}
@@ -284,7 +286,7 @@ fun RoamingScreen() {
.align(Alignment.TopCenter)
.offset(y = 2.dp)
.size(width = 200.dp, height = 200.dp)
- .background(Color(0xFF01DDFF))
+ .background(MaterialTheme.colorScheme.surfaceVariant)
) {
// iv: 红点 10x10dp, top|left, leftMargin/topMargin 查表绝对定位
Image(
@@ -300,7 +302,7 @@ fun RoamingScreen() {
text = state.grids[4],
fontSize = 30.sp,
fontWeight = FontWeight.Bold,
- color = Color.White,
+ color = MaterialTheme.colorScheme.onSurfaceVariant,
textAlign = TextAlign.Center,
modifier = Modifier
.size(width = 100.dp, height = 80.dp)
@@ -320,7 +322,7 @@ fun RoamingScreen() {
Text(
text = "制作:US1PM 汉化:BA7LCE",
fontSize = 10.sp,
- color = Color.Black,
+ color = MaterialTheme.colorScheme.onSurfaceVariant,
textAlign = TextAlign.Center,
modifier = Modifier.fillMaxWidth().padding(bottom = 10.dp)
)
@@ -333,14 +335,14 @@ private fun GridCell(text: String, modifier: Modifier) {
Box(
modifier = modifier
.padding(2.dp)
- .background(Color(0xFF0BACF1)),
+ .background(MaterialTheme.colorScheme.surface),
contentAlignment = Alignment.Center
) {
Text(
text = text,
fontSize = 14.sp,
fontWeight = FontWeight.Bold,
- color = Color.Black,
+ color = MaterialTheme.colorScheme.onSurface,
textAlign = TextAlign.Center
)
}
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 cabcad4d..ab9b5839 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
@@ -29,6 +29,7 @@ import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.fillMaxHeight
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height
+import androidx.compose.foundation.layout.heightIn
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.width
import androidx.compose.foundation.lazy.grid.GridCells
@@ -486,9 +487,7 @@ private fun OtherCardPreview() = MainTheme {
@Composable
private fun OtherCard(settings: OtherSettings, onAction: (SettingsAction) -> Unit) {
ElevatedCard(
- modifier = Modifier
- .fillMaxWidth()
- .height(268.dp)
+ modifier = Modifier.fillMaxWidth()
) {
Column(
modifier = Modifier.padding(horizontal = 8.dp, vertical = 4.dp),
@@ -561,15 +560,11 @@ private fun CardCreditsPreview() = MainTheme { CardCredits() }
@Composable
private fun CardCredits(modifier: Modifier = Modifier) {
ElevatedCard(
- modifier = modifier
- .fillMaxWidth()
- .height(268.dp)
+ modifier = modifier.fillMaxWidth()
) {
Column(
- verticalArrangement = Arrangement.SpaceBetween,
- modifier = Modifier
- .padding(horizontal = 8.dp, vertical = 4.dp)
- .fillMaxHeight()
+ verticalArrangement = Arrangement.spacedBy(8.dp),
+ modifier = Modifier.padding(horizontal = 8.dp, vertical = 4.dp)
) {
Text(
text = stringResource(id = R.string.prefs_outro_title),
@@ -578,6 +573,8 @@ private fun CardCredits(modifier: Modifier = Modifier) {
Text(
text = stringResource(id = R.string.prefs_outro_thanks)
)
+ // 感谢列表与保修声明之间保留约两行间距 (用户要求)
+ Spacer(modifier = Modifier.height(24.dp))
Text(
text = stringResource(id = R.string.prefs_outro_license),
color = MaterialTheme.colorScheme.primary
@@ -593,7 +590,7 @@ private fun TopCard(onClick: () -> Unit, modifier: Modifier = Modifier, version:
horizontalArrangement = Arrangement.spacedBy(12.dp),
verticalAlignment = Alignment.CenterVertically,
modifier = Modifier
- .height(48.dp)
+ .heightIn(min = 48.dp)
.clickable { onClick() }) {
Spacer(Modifier)
Icon(
@@ -608,7 +605,6 @@ private fun TopCard(onClick: () -> Unit, modifier: Modifier = Modifier, version:
modifier = Modifier
.weight(1f)
.padding(end = 6.dp)
- .infiniteMarquee()
)
}
}