Add app info in setting

This commit is contained in:
2026-06-26 22:03:24 +07:00
parent 6c6a5bfff9
commit 7ef4b7d1cf
8 changed files with 58 additions and 3 deletions
@@ -1,7 +1,5 @@
package com.digitoolsolutions.app.torquevaultkmp
import android.os.Build
class AndroidPlatform : Platform {
override val name: String = "Android"
}
@@ -5,8 +5,10 @@ import app.cash.sqldelight.driver.android.AndroidSqliteDriver
import com.digitoolsolutions.app.torquevaultkmp.AppStoragePlatform
import com.digitoolsolutions.app.torquevaultkmp.data.storage.AppStorage
import com.digitoolsolutions.app.torquevaultkmp.data.storage.db.AppDatabase
import com.digitoolsolutions.app.torquevaultkmp.utils.AndroidAppInfo
import com.digitoolsolutions.app.torquevaultkmp.utils.AndroidBluetoothManager
import com.digitoolsolutions.app.torquevaultkmp.utils.AndroidNetworkMonitor
import com.digitoolsolutions.app.torquevaultkmp.utils.AppInfo
import com.digitoolsolutions.app.torquevaultkmp.utils.BluetoothManager
import com.digitoolsolutions.app.torquevaultkmp.utils.NetworkMonitor
import com.digitoolsolutions.app.torquevaultkmp.utils.PermissionHandler
@@ -26,4 +28,5 @@ actual val platformModule = module {
)
}
single<NetworkMonitor> { AndroidNetworkMonitor(androidContext()) }
single<AppInfo> { AndroidAppInfo(androidContext()) }
}
@@ -0,0 +1,15 @@
package com.digitoolsolutions.app.torquevaultkmp.utils
import android.content.Context
import android.os.Build
import androidx.annotation.RequiresApi
class AndroidAppInfo(private val context: Context): AppInfo {
override val version: String?
@RequiresApi(Build.VERSION_CODES.P)
get() {
val packageInfo = context.packageManager.getPackageInfo(context.packageName, 0)
val versionName = packageInfo.versionName
return versionName
}
}
@@ -13,6 +13,7 @@ import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material3.AlertDialog
import androidx.compose.material3.Button
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.OutlinedTextField
import androidx.compose.material3.Scaffold
import androidx.compose.material3.SnackbarHost
@@ -29,17 +30,21 @@ import androidx.compose.runtime.rememberCoroutineScope
import androidx.compose.runtime.setValue
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.input.pointer.pointerInput
import androidx.compose.ui.platform.LocalFocusManager
import androidx.compose.ui.text.input.PasswordVisualTransformation
import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import androidx.navigation.NavController
import com.digitoolsolutions.app.torquevaultkmp.components.AppBar
import com.digitoolsolutions.app.torquevaultkmp.screens.auth.AuthDestination
import com.digitoolsolutions.app.torquevaultkmp.utils.AppInfo
import kotlinx.coroutines.launch
import org.koin.compose.viewmodel.koinViewModel
import org.jetbrains.compose.resources.stringResource
import org.koin.compose.koinInject
import torquevaultkmp.composeapp.generated.resources.Res
import torquevaultkmp.composeapp.generated.resources.auto_connect
import torquevaultkmp.composeapp.generated.resources.dark_theme
@@ -101,6 +106,7 @@ fun SettingContent(
val focusManager = LocalFocusManager.current
val snackbarHostState = remember { SnackbarHostState() }
val scope = rememberCoroutineScope()
val appVersion: String? = koinInject<AppInfo>().version
// remember the initial serverUrl to check if it has changed when saving
val oldUrl by remember { mutableStateOf(serverUrl) }
var showRestartDialog by remember { mutableStateOf(false) }
@@ -133,7 +139,7 @@ fun SettingContent(
.fillMaxSize()
.imePadding()
.padding(padding)
.padding(16.dp)
.padding(start = 16.dp, top = 16.dp, end = 16.dp, bottom = 0.dp)
.pointerInput(Unit) {
detectTapGestures(onTap = {
focusManager.clearFocus()
@@ -208,6 +214,15 @@ fun SettingContent(
) {
Text(stringResource(Res.string.logout))
}
Spacer(modifier = Modifier.weight(1f))
Text(
text="Digitool Solutions Team" + if(appVersion != null) " - App version: $appVersion" else "",
style = MaterialTheme.typography.bodySmall,
color = Color.Gray,
textAlign = TextAlign.Center,
modifier = Modifier.fillMaxWidth()
)
}
}
}
@@ -0,0 +1,5 @@
package com.digitoolsolutions.app.torquevaultkmp.utils
interface AppInfo {
val version: String?
}
@@ -5,7 +5,9 @@ import app.cash.sqldelight.driver.native.NativeSqliteDriver
import com.digitoolsolutions.app.torquevaultkmp.AppStoragePlatform
import com.digitoolsolutions.app.torquevaultkmp.data.storage.AppStorage
import com.digitoolsolutions.app.torquevaultkmp.data.storage.db.AppDatabase
import com.digitoolsolutions.app.torquevaultkmp.utils.AppInfo
import com.digitoolsolutions.app.torquevaultkmp.utils.BluetoothManager
import com.digitoolsolutions.app.torquevaultkmp.utils.IOSAppInfo
import com.digitoolsolutions.app.torquevaultkmp.utils.IOSNetworkMonitor
import com.digitoolsolutions.app.torquevaultkmp.utils.IosBluetoothManager
import com.digitoolsolutions.app.torquevaultkmp.utils.NetworkMonitor
@@ -24,4 +26,5 @@ actual val platformModule = module {
)
}
single<NetworkMonitor> { IOSNetworkMonitor() }
single<AppInfo> { IOSAppInfo() }
}
@@ -0,0 +1,12 @@
package com.digitoolsolutions.app.torquevaultkmp.utils
import platform.Foundation.NSBundle
class IOSAppInfo: AppInfo {
override val version: String?
get() {
val infoDict = NSBundle.mainBundle.infoDictionary
val version = infoDict?.get("CFBundleShortVersionString") as? String
return version
}
}