commit 2429ecd45a81753661bc3a2cd663876c9bf7e248
parent a49447ef64a729073cdb42137847e0a9a70b793f
Author: rhunk <101876869+rhunk@users.noreply.github.com>
Date: Sat, 1 Jun 2024 17:23:06 +0200
chore(debug): git hash
Diffstat:
4 files changed, 91 insertions(+), 19 deletions(-)
diff --git a/app/src/main/kotlin/me/rhunk/snapenhance/RemoteSideContext.kt b/app/src/main/kotlin/me/rhunk/snapenhance/RemoteSideContext.kt
@@ -160,6 +160,7 @@ class RemoteSideContext(
val cert = certFactory.generateCertificate(ByteArrayInputStream(it.toByteArray())) as X509Certificate
cert.issuerDN.toString()
} ?: throw Exception("Failed to get certificate info"),
+ gitHash = BuildConfig.GIT_HASH,
isDebugBuild = BuildConfig.DEBUG,
mappingVersion = mappings.getGeneratedBuildNumber(),
mappingsOutdated = mappings.isMappingsOutdated()
diff --git a/app/src/main/kotlin/me/rhunk/snapenhance/ui/manager/data/InstallationSummary.kt b/app/src/main/kotlin/me/rhunk/snapenhance/ui/manager/data/InstallationSummary.kt
@@ -15,6 +15,7 @@ data class ModInfo(
val buildVersion: String,
val buildVersionCode: Long,
val buildIssuer: String,
+ val gitHash: String,
val isDebugBuild: Boolean,
val mappingVersion: Long?,
val mappingsOutdated: Boolean?,
diff --git a/app/src/main/kotlin/me/rhunk/snapenhance/ui/manager/pages/home/HomeRoot.kt b/app/src/main/kotlin/me/rhunk/snapenhance/ui/manager/pages/home/HomeRoot.kt
@@ -5,26 +5,26 @@ import android.net.Uri
import androidx.compose.foundation.ScrollState
import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.*
+import androidx.compose.foundation.text.ClickableText
import androidx.compose.foundation.verticalScroll
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.automirrored.filled.Help
import androidx.compose.material.icons.filled.*
import androidx.compose.material3.*
-import androidx.compose.runtime.Composable
-import androidx.compose.runtime.getValue
-import androidx.compose.runtime.mutableStateOf
-import androidx.compose.runtime.remember
-import androidx.compose.runtime.setValue
+import androidx.compose.runtime.*
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.vector.ImageVector
import androidx.compose.ui.platform.LocalDensity
import androidx.compose.ui.res.vectorResource
+import androidx.compose.ui.text.SpanStyle
+import androidx.compose.ui.text.buildAnnotatedString
import androidx.compose.ui.text.font.Font
import androidx.compose.ui.text.font.FontFamily
import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.text.style.TextOverflow
+import androidx.compose.ui.text.withStyle
import androidx.compose.ui.unit.Dp
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
@@ -41,6 +41,7 @@ import me.rhunk.snapenhance.storage.setQuickTiles
import me.rhunk.snapenhance.ui.manager.Routes
import me.rhunk.snapenhance.ui.manager.data.Updater
import me.rhunk.snapenhance.ui.util.ActivityLauncherHelper
+import java.text.DateFormat
class HomeRoot : Routes.Route() {
companion object {
@@ -120,6 +121,29 @@ class HomeRoot : Routes.Route() {
)
}
+ @Composable
+ private fun InfoCard(
+ content: @Composable ColumnScope.() -> Unit,
+ ) {
+ OutlinedCard(
+ modifier = Modifier
+ .padding(all = cardMargin)
+ .fillMaxWidth(),
+ colors = CardDefaults.cardColors(
+ containerColor = MaterialTheme.colorScheme.surfaceVariant,
+ contentColor = MaterialTheme.colorScheme.onSurfaceVariant
+ )
+ ) {
+ Column(
+ modifier = Modifier
+ .fillMaxWidth()
+ .padding(all = 15.dp)
+ ) {
+ content()
+ }
+ }
+ }
+
@OptIn(ExperimentalLayoutApi::class, ExperimentalMaterial3Api::class)
override val content: @Composable (NavBackStackEntry) -> Unit = {
@@ -197,21 +221,12 @@ class HomeRoot : Routes.Route() {
}
if (latestUpdate != null) {
- Spacer(modifier = Modifier.height(20.dp))
- OutlinedCard(
- modifier = Modifier
- .padding(all = cardMargin)
- .fillMaxWidth(),
- colors = CardDefaults.cardColors(
- containerColor = MaterialTheme.colorScheme.surfaceVariant,
- contentColor = MaterialTheme.colorScheme.onSurfaceVariant
- )
- ) {
+ Spacer(modifier = Modifier.height(10.dp))
+ InfoCard {
Row(
- modifier = Modifier
- .fillMaxWidth()
- .padding(all = 15.dp),
- horizontalArrangement = Arrangement.SpaceBetween
+ modifier = Modifier.fillMaxWidth(),
+ horizontalArrangement = Arrangement.SpaceBetween,
+ verticalAlignment = Alignment.CenterVertically
) {
Column {
Text(
@@ -237,6 +252,53 @@ class HomeRoot : Routes.Route() {
}
}
+ if (BuildConfig.DEBUG) {
+ Spacer(modifier = Modifier.height(10.dp))
+ InfoCard {
+ Text(
+ text = "You are running a debug build of SnapEnhance",
+ fontSize = 14.sp,
+ fontWeight = FontWeight.Bold,
+ )
+ val buildSummary = buildAnnotatedString {
+ withStyle(style = SpanStyle(fontSize = 13.sp, color = MaterialTheme.colorScheme.onSurfaceVariant, fontWeight = FontWeight.Light)) {
+ append("Version ")
+ append(BuildConfig.VERSION_NAME)
+ append(" (")
+ append(BuildConfig.VERSION_CODE.toString())
+ append(") - ")
+ }
+ pushStringAnnotation(
+ tag = "git_hash",
+ annotation = BuildConfig.GIT_HASH
+ )
+ withStyle(style = SpanStyle(fontSize = 13.sp, fontWeight = FontWeight.Bold, color = MaterialTheme.colorScheme.primary)) {
+ append(BuildConfig.GIT_HASH.substring(0, 7))
+ }
+ pop()
+ }
+ ClickableText(
+ text = buildSummary,
+ onClick = { offset ->
+ buildSummary.getStringAnnotations(tag = "git_hash", start = offset, end = offset)
+ .firstOrNull()?.let {
+ context.activity?.startActivity(Intent(Intent.ACTION_VIEW).apply {
+ data = Uri.parse("https://github.com/rhunk/SnapEnhance/commit/${it.item}")
+ })
+ }
+ }
+ )
+ Text(
+ fontSize = 12.sp,
+ text = remember {
+ "Build date: " + DateFormat.getDateTimeInstance().format(BuildConfig.BUILD_TIMESTAMP) + " (${((System.currentTimeMillis() - BuildConfig.BUILD_TIMESTAMP) / 86400000).toInt()} days ago)"
+ },
+ lineHeight = 20.sp,
+ fontWeight = FontWeight.Light
+ )
+ }
+ }
+
var showQuickActionsMenu by remember { mutableStateOf(false) }
Row(
diff --git a/common/build.gradle.kts b/common/build.gradle.kts
@@ -1,3 +1,5 @@
+import java.io.ByteArrayOutputStream
+
plugins {
alias(libs.plugins.androidLibrary)
alias(libs.plugins.kotlinAndroid)
@@ -22,6 +24,12 @@ android {
buildConfigField("String", "APPLICATION_ID", "\"${rootProject.ext["applicationId"]}\"")
buildConfigField("long", "BUILD_TIMESTAMP", "${System.currentTimeMillis()}L")
buildConfigField("String", "BUILD_HASH", "\"${rootProject.ext["buildHash"]}\"")
+ val gitHash = ByteArrayOutputStream()
+ exec {
+ commandLine("git", "rev-parse", "HEAD")
+ standardOutput = gitHash
+ }
+ buildConfigField("String", "GIT_HASH", "\"${gitHash.toString(Charsets.UTF_8).trim()}\"")
}
compileOptions {