diff --git a/app/src/main/java/ink/trmnl/android/ui/aboutapp/AppInfoScreen.kt b/app/src/main/java/ink/trmnl/android/ui/aboutapp/AppInfoScreen.kt
index 46df0a1..a7be720 100644
--- a/app/src/main/java/ink/trmnl/android/ui/aboutapp/AppInfoScreen.kt
+++ b/app/src/main/java/ink/trmnl/android/ui/aboutapp/AppInfoScreen.kt
@@ -1,9 +1,8 @@
package ink.trmnl.android.ui.aboutapp
-import androidx.compose.foundation.Image
-import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Column
+import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.WindowInsets
import androidx.compose.foundation.layout.fillMaxWidth
@@ -14,11 +13,12 @@ import androidx.compose.foundation.layout.safeDrawing
import androidx.compose.foundation.layout.statusBars
import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.verticalScroll
-import androidx.compose.material3.Button
import androidx.compose.material3.ExperimentalMaterial3Api
+import androidx.compose.material3.HorizontalDivider
import androidx.compose.material3.Icon
import androidx.compose.material3.IconButton
import androidx.compose.material3.MaterialTheme
+import androidx.compose.material3.OutlinedButton
import androidx.compose.material3.Scaffold
import androidx.compose.material3.Text
import androidx.compose.material3.TopAppBar
@@ -29,6 +29,7 @@ import androidx.compose.ui.platform.LocalUriHandler
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.font.FontWeight
+import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.tooling.preview.PreviewLightDark
import androidx.compose.ui.unit.dp
import com.slack.circuit.codegen.annotations.CircuitInject
@@ -135,66 +136,135 @@ fun AppInfoContent(
modifier =
Modifier
.padding(innerPadding)
- .padding(horizontal = 32.dp)
+ .padding(horizontal = 24.dp)
.verticalScroll(rememberScrollState())
.fillMaxWidth()
.navigationBarsPadding(),
horizontalAlignment = Alignment.CenterHorizontally,
- verticalArrangement = Arrangement.Center,
) {
- Spacer(modifier = Modifier.height(24.dp))
+ Spacer(modifier = Modifier.height(32.dp))
+ // App Logo
Icon(
painter = painterResource(R.drawable.trmnl_logo_plain),
contentDescription = null,
tint = TrmnlOrange,
- modifier = Modifier.height(64.dp),
+ modifier = Modifier.height(72.dp),
)
- Spacer(modifier = Modifier.height(16.dp))
+ Spacer(modifier = Modifier.height(24.dp))
+ // App Name
Text(
text = stringResource(R.string.app_name),
- style = MaterialTheme.typography.headlineSmall,
+ style = MaterialTheme.typography.headlineMedium,
fontWeight = FontWeight.Bold,
)
Spacer(modifier = Modifier.height(8.dp))
+ // App Description
Text(
- text = "Version: ${state.appVersion}",
- style = MaterialTheme.typography.bodyLarge,
- )
-
- Spacer(modifier = Modifier.height(4.dp))
-
- Text(
- text = "Build Type: ${state.buildType}",
+ text = "Display your TRMNL device content on your Android device",
style = MaterialTheme.typography.bodyMedium,
+ color = MaterialTheme.colorScheme.onSurfaceVariant,
+ textAlign = androidx.compose.ui.text.style.TextAlign.Center,
)
- Image(
- painter = painterResource(R.drawable.trmnl_device_white_transparent),
- contentDescription = "TRMNL Device",
+ Spacer(modifier = Modifier.height(28.dp))
+
+ // App Details Section
+ Column(
modifier =
Modifier
- .padding(vertical = 16.dp)
- .clickable { state.eventSink(Event.OpenTrmnlSite) },
- )
+ .fillMaxWidth()
+ .padding(16.dp)
+ .padding(
+ top = 16.dp,
+ bottom = 16.dp,
+ ),
+ horizontalAlignment = Alignment.Start,
+ ) {
+ Row(
+ modifier = Modifier.fillMaxWidth(),
+ horizontalArrangement = Arrangement.SpaceBetween,
+ ) {
+ Text(
+ text = "Version",
+ style = MaterialTheme.typography.bodyMedium,
+ color = MaterialTheme.colorScheme.onSurfaceVariant,
+ )
+ Text(
+ text = state.appVersion,
+ style = MaterialTheme.typography.bodyMedium,
+ fontWeight = FontWeight.SemiBold,
+ )
+ }
+
+ Spacer(modifier = Modifier.height(12.dp))
+
+ Row(
+ modifier = Modifier.fillMaxWidth(),
+ horizontalArrangement = Arrangement.SpaceBetween,
+ ) {
+ Text(
+ text = "Build Type",
+ style = MaterialTheme.typography.bodyMedium,
+ color = MaterialTheme.colorScheme.onSurfaceVariant,
+ )
+ Text(
+ text = state.buildType,
+ style = MaterialTheme.typography.bodyMedium,
+ fontWeight = FontWeight.SemiBold,
+ )
+ }
+ }
Spacer(modifier = Modifier.height(8.dp))
- Button(
+ HorizontalDivider(modifier = Modifier.fillMaxWidth())
+
+ Spacer(modifier = Modifier.height(24.dp))
+
+ // Actions Section
+ Text(
+ text = "Connect & Learn",
+ style = MaterialTheme.typography.titleMedium,
+ fontWeight = FontWeight.SemiBold,
+ modifier = Modifier.fillMaxWidth(),
+ )
+
+ Spacer(modifier = Modifier.height(16.dp))
+
+ // GitHub Button
+ OutlinedButton(
onClick = { state.eventSink(Event.OpenGithub) },
- modifier = Modifier.fillMaxWidth(0.7f),
+ modifier = Modifier.fillMaxWidth(),
) {
Icon(
- painter = painterResource(R.drawable.code_24dp),
+ painter = painterResource(R.drawable.github_filled),
contentDescription = null,
- modifier = Modifier.padding(end = 8.dp),
+ modifier = Modifier.padding(end = 12.dp),
)
- Text("View Project on GitHub")
+ Text("View on GitHub / Report Issues", modifier = Modifier.weight(1f))
}
+
+ Spacer(modifier = Modifier.height(12.dp))
+
+ // TRMNL Website Button
+ OutlinedButton(
+ onClick = { state.eventSink(Event.OpenTrmnlSite) },
+ modifier = Modifier.fillMaxWidth(),
+ ) {
+ Icon(
+ painter = painterResource(R.drawable.outline_link_2_24),
+ contentDescription = null,
+ modifier = Modifier.padding(end = 12.dp),
+ )
+ Text("Visit TRMNL", modifier = Modifier.weight(1f))
+ }
+
+ Spacer(modifier = Modifier.height(32.dp))
}
}
}
diff --git a/app/src/main/java/ink/trmnl/android/work/TrmnlImageRefreshWorker.kt b/app/src/main/java/ink/trmnl/android/work/TrmnlImageRefreshWorker.kt
index 09460a4..bc92059 100644
--- a/app/src/main/java/ink/trmnl/android/work/TrmnlImageRefreshWorker.kt
+++ b/app/src/main/java/ink/trmnl/android/work/TrmnlImageRefreshWorker.kt
@@ -170,10 +170,6 @@ class TrmnlImageRefreshWorker(
httpResponseMetadata = trmnlDisplayInfo.httpResponseMetadata,
)
- // DEPRECATED: Battery reporting now happens via Percent-Charged header in /api/display call
- // Battery percentage is automatically sent when fetching the next image for BYOD devices
- // displayRepository.reportDeviceBatteryStatus(deviceConfig)
-
// NOTE: Image metadata caching is handled automatically by `TrmnlDisplayRepository`
// when the API call succeeds, so we don't need to save it again here.
// See https://github.com/usetrmnl/trmnl-android/issues/195
diff --git a/app/src/main/res/drawable/github_filled.xml b/app/src/main/res/drawable/github_filled.xml
new file mode 100644
index 0000000..6b22e76
--- /dev/null
+++ b/app/src/main/res/drawable/github_filled.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/app/src/main/res/drawable/github_outline.xml b/app/src/main/res/drawable/github_outline.xml
new file mode 100644
index 0000000..015d8c5
--- /dev/null
+++ b/app/src/main/res/drawable/github_outline.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/app/src/main/res/drawable/outline_link_2_24.xml b/app/src/main/res/drawable/outline_link_2_24.xml
new file mode 100644
index 0000000..a8113d5
--- /dev/null
+++ b/app/src/main/res/drawable/outline_link_2_24.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/app/src/main/res/drawable/trmnl_device_white_transparent.xml b/app/src/main/res/drawable/trmnl_device_white_transparent.xml
deleted file mode 100644
index dfd2380..0000000
--- a/app/src/main/res/drawable/trmnl_device_white_transparent.xml
+++ /dev/null
@@ -1,2082 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/fastlane/metadata/android/en-US/google_play_description.txt b/fastlane/metadata/android/en-US/google_play_description.txt
index f4cb535..bacc9ee 100644
--- a/fastlane/metadata/android/en-US/google_play_description.txt
+++ b/fastlane/metadata/android/en-US/google_play_description.txt
@@ -14,7 +14,7 @@ Utility app to display TRMNL screens on any Android device
FULL DESCRIPTION (Max 4000 characters)
--------------------------------------------------------------------------------
-TRMNL serves as a digital display for TRMNL e-ink devices and BYOS installations. The app connects to the TRMNL or BYOS API, fetches display data, and shows it on Android devices. It can function both as a mirror for existing TRMNL devices or as a standalone TRMNL display connected directly to a Bring-Your-Own-Server (BYOS).
+TRMNL serves as a digital display for TRMNL e-ink devices and BYOS installations. It can function both as a mirror for existing TRMNL devices or as a standalone TRMNL display connected directly to a Bring-Your-Own-Server (BYOS).
> ⚠️ Note: TRMNL app currently requires device API key for non-BYOS based devices. TRMNL device must have a developer edition or BYOD license to enable device API key.