Add app info in setting
This commit is contained in:
-2
@@ -1,7 +1,5 @@
|
||||
package com.digitoolsolutions.app.torquevaultkmp
|
||||
|
||||
import android.os.Build
|
||||
|
||||
class AndroidPlatform : Platform {
|
||||
override val name: String = "Android"
|
||||
}
|
||||
|
||||
+3
@@ -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()) }
|
||||
}
|
||||
|
||||
+15
@@ -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
|
||||
}
|
||||
}
|
||||
+16
-1
@@ -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()
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+5
@@ -0,0 +1,5 @@
|
||||
package com.digitoolsolutions.app.torquevaultkmp.utils
|
||||
|
||||
interface AppInfo {
|
||||
val version: String?
|
||||
}
|
||||
+3
@@ -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() }
|
||||
}
|
||||
|
||||
+12
@@ -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
|
||||
}
|
||||
}
|
||||
@@ -302,6 +302,7 @@
|
||||
ASSETCATALOG_COMPILER_INCLUDE_ALL_APPICON_ASSETS = NO;
|
||||
CODE_SIGN_IDENTITY = "Apple Development";
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
CURRENT_PROJECT_VERSION = 2;
|
||||
DEVELOPMENT_ASSET_PATHS = "\"iosApp/Preview Content\"";
|
||||
DEVELOPMENT_TEAM = ZCFJN5LS8B;
|
||||
ENABLE_PREVIEWS = YES;
|
||||
@@ -319,6 +320,7 @@
|
||||
"$(inherited)",
|
||||
"@executable_path/Frameworks",
|
||||
);
|
||||
MARKETING_VERSION = 1.0.2;
|
||||
SWIFT_EMIT_LOC_STRINGS = YES;
|
||||
SWIFT_VERSION = 5.0;
|
||||
TARGETED_DEVICE_FAMILY = "1,2";
|
||||
@@ -333,6 +335,7 @@
|
||||
ASSETCATALOG_COMPILER_INCLUDE_ALL_APPICON_ASSETS = NO;
|
||||
CODE_SIGN_IDENTITY = "Apple Development";
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
CURRENT_PROJECT_VERSION = 2;
|
||||
DEVELOPMENT_ASSET_PATHS = "\"iosApp/Preview Content\"";
|
||||
DEVELOPMENT_TEAM = ZCFJN5LS8B;
|
||||
ENABLE_PREVIEWS = YES;
|
||||
@@ -350,6 +353,7 @@
|
||||
"$(inherited)",
|
||||
"@executable_path/Frameworks",
|
||||
);
|
||||
MARKETING_VERSION = 1.0.2;
|
||||
SWIFT_EMIT_LOC_STRINGS = YES;
|
||||
SWIFT_VERSION = 5.0;
|
||||
TARGETED_DEVICE_FAMILY = "1,2";
|
||||
|
||||
Reference in New Issue
Block a user