Add app info in setting
This commit is contained in:
-2
@@ -1,7 +1,5 @@
|
|||||||
package com.digitoolsolutions.app.torquevaultkmp
|
package com.digitoolsolutions.app.torquevaultkmp
|
||||||
|
|
||||||
import android.os.Build
|
|
||||||
|
|
||||||
class AndroidPlatform : Platform {
|
class AndroidPlatform : Platform {
|
||||||
override val name: String = "Android"
|
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.AppStoragePlatform
|
||||||
import com.digitoolsolutions.app.torquevaultkmp.data.storage.AppStorage
|
import com.digitoolsolutions.app.torquevaultkmp.data.storage.AppStorage
|
||||||
import com.digitoolsolutions.app.torquevaultkmp.data.storage.db.AppDatabase
|
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.AndroidBluetoothManager
|
||||||
import com.digitoolsolutions.app.torquevaultkmp.utils.AndroidNetworkMonitor
|
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.BluetoothManager
|
||||||
import com.digitoolsolutions.app.torquevaultkmp.utils.NetworkMonitor
|
import com.digitoolsolutions.app.torquevaultkmp.utils.NetworkMonitor
|
||||||
import com.digitoolsolutions.app.torquevaultkmp.utils.PermissionHandler
|
import com.digitoolsolutions.app.torquevaultkmp.utils.PermissionHandler
|
||||||
@@ -26,4 +28,5 @@ actual val platformModule = module {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
single<NetworkMonitor> { AndroidNetworkMonitor(androidContext()) }
|
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.AlertDialog
|
||||||
import androidx.compose.material3.Button
|
import androidx.compose.material3.Button
|
||||||
import androidx.compose.material3.ExperimentalMaterial3Api
|
import androidx.compose.material3.ExperimentalMaterial3Api
|
||||||
|
import androidx.compose.material3.MaterialTheme
|
||||||
import androidx.compose.material3.OutlinedTextField
|
import androidx.compose.material3.OutlinedTextField
|
||||||
import androidx.compose.material3.Scaffold
|
import androidx.compose.material3.Scaffold
|
||||||
import androidx.compose.material3.SnackbarHost
|
import androidx.compose.material3.SnackbarHost
|
||||||
@@ -29,17 +30,21 @@ import androidx.compose.runtime.rememberCoroutineScope
|
|||||||
import androidx.compose.runtime.setValue
|
import androidx.compose.runtime.setValue
|
||||||
import androidx.compose.ui.Alignment
|
import androidx.compose.ui.Alignment
|
||||||
import androidx.compose.ui.Modifier
|
import androidx.compose.ui.Modifier
|
||||||
|
import androidx.compose.ui.graphics.Color
|
||||||
import androidx.compose.ui.input.pointer.pointerInput
|
import androidx.compose.ui.input.pointer.pointerInput
|
||||||
import androidx.compose.ui.platform.LocalFocusManager
|
import androidx.compose.ui.platform.LocalFocusManager
|
||||||
import androidx.compose.ui.text.input.PasswordVisualTransformation
|
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.tooling.preview.Preview
|
||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
import androidx.navigation.NavController
|
import androidx.navigation.NavController
|
||||||
import com.digitoolsolutions.app.torquevaultkmp.components.AppBar
|
import com.digitoolsolutions.app.torquevaultkmp.components.AppBar
|
||||||
import com.digitoolsolutions.app.torquevaultkmp.screens.auth.AuthDestination
|
import com.digitoolsolutions.app.torquevaultkmp.screens.auth.AuthDestination
|
||||||
|
import com.digitoolsolutions.app.torquevaultkmp.utils.AppInfo
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
import org.koin.compose.viewmodel.koinViewModel
|
import org.koin.compose.viewmodel.koinViewModel
|
||||||
import org.jetbrains.compose.resources.stringResource
|
import org.jetbrains.compose.resources.stringResource
|
||||||
|
import org.koin.compose.koinInject
|
||||||
import torquevaultkmp.composeapp.generated.resources.Res
|
import torquevaultkmp.composeapp.generated.resources.Res
|
||||||
import torquevaultkmp.composeapp.generated.resources.auto_connect
|
import torquevaultkmp.composeapp.generated.resources.auto_connect
|
||||||
import torquevaultkmp.composeapp.generated.resources.dark_theme
|
import torquevaultkmp.composeapp.generated.resources.dark_theme
|
||||||
@@ -101,6 +106,7 @@ fun SettingContent(
|
|||||||
val focusManager = LocalFocusManager.current
|
val focusManager = LocalFocusManager.current
|
||||||
val snackbarHostState = remember { SnackbarHostState() }
|
val snackbarHostState = remember { SnackbarHostState() }
|
||||||
val scope = rememberCoroutineScope()
|
val scope = rememberCoroutineScope()
|
||||||
|
val appVersion: String? = koinInject<AppInfo>().version
|
||||||
// remember the initial serverUrl to check if it has changed when saving
|
// remember the initial serverUrl to check if it has changed when saving
|
||||||
val oldUrl by remember { mutableStateOf(serverUrl) }
|
val oldUrl by remember { mutableStateOf(serverUrl) }
|
||||||
var showRestartDialog by remember { mutableStateOf(false) }
|
var showRestartDialog by remember { mutableStateOf(false) }
|
||||||
@@ -133,7 +139,7 @@ fun SettingContent(
|
|||||||
.fillMaxSize()
|
.fillMaxSize()
|
||||||
.imePadding()
|
.imePadding()
|
||||||
.padding(padding)
|
.padding(padding)
|
||||||
.padding(16.dp)
|
.padding(start = 16.dp, top = 16.dp, end = 16.dp, bottom = 0.dp)
|
||||||
.pointerInput(Unit) {
|
.pointerInput(Unit) {
|
||||||
detectTapGestures(onTap = {
|
detectTapGestures(onTap = {
|
||||||
focusManager.clearFocus()
|
focusManager.clearFocus()
|
||||||
@@ -208,6 +214,15 @@ fun SettingContent(
|
|||||||
) {
|
) {
|
||||||
Text(stringResource(Res.string.logout))
|
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.AppStoragePlatform
|
||||||
import com.digitoolsolutions.app.torquevaultkmp.data.storage.AppStorage
|
import com.digitoolsolutions.app.torquevaultkmp.data.storage.AppStorage
|
||||||
import com.digitoolsolutions.app.torquevaultkmp.data.storage.db.AppDatabase
|
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.BluetoothManager
|
||||||
|
import com.digitoolsolutions.app.torquevaultkmp.utils.IOSAppInfo
|
||||||
import com.digitoolsolutions.app.torquevaultkmp.utils.IOSNetworkMonitor
|
import com.digitoolsolutions.app.torquevaultkmp.utils.IOSNetworkMonitor
|
||||||
import com.digitoolsolutions.app.torquevaultkmp.utils.IosBluetoothManager
|
import com.digitoolsolutions.app.torquevaultkmp.utils.IosBluetoothManager
|
||||||
import com.digitoolsolutions.app.torquevaultkmp.utils.NetworkMonitor
|
import com.digitoolsolutions.app.torquevaultkmp.utils.NetworkMonitor
|
||||||
@@ -24,4 +26,5 @@ actual val platformModule = module {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
single<NetworkMonitor> { IOSNetworkMonitor() }
|
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;
|
ASSETCATALOG_COMPILER_INCLUDE_ALL_APPICON_ASSETS = NO;
|
||||||
CODE_SIGN_IDENTITY = "Apple Development";
|
CODE_SIGN_IDENTITY = "Apple Development";
|
||||||
CODE_SIGN_STYLE = Automatic;
|
CODE_SIGN_STYLE = Automatic;
|
||||||
|
CURRENT_PROJECT_VERSION = 2;
|
||||||
DEVELOPMENT_ASSET_PATHS = "\"iosApp/Preview Content\"";
|
DEVELOPMENT_ASSET_PATHS = "\"iosApp/Preview Content\"";
|
||||||
DEVELOPMENT_TEAM = ZCFJN5LS8B;
|
DEVELOPMENT_TEAM = ZCFJN5LS8B;
|
||||||
ENABLE_PREVIEWS = YES;
|
ENABLE_PREVIEWS = YES;
|
||||||
@@ -319,6 +320,7 @@
|
|||||||
"$(inherited)",
|
"$(inherited)",
|
||||||
"@executable_path/Frameworks",
|
"@executable_path/Frameworks",
|
||||||
);
|
);
|
||||||
|
MARKETING_VERSION = 1.0.2;
|
||||||
SWIFT_EMIT_LOC_STRINGS = YES;
|
SWIFT_EMIT_LOC_STRINGS = YES;
|
||||||
SWIFT_VERSION = 5.0;
|
SWIFT_VERSION = 5.0;
|
||||||
TARGETED_DEVICE_FAMILY = "1,2";
|
TARGETED_DEVICE_FAMILY = "1,2";
|
||||||
@@ -333,6 +335,7 @@
|
|||||||
ASSETCATALOG_COMPILER_INCLUDE_ALL_APPICON_ASSETS = NO;
|
ASSETCATALOG_COMPILER_INCLUDE_ALL_APPICON_ASSETS = NO;
|
||||||
CODE_SIGN_IDENTITY = "Apple Development";
|
CODE_SIGN_IDENTITY = "Apple Development";
|
||||||
CODE_SIGN_STYLE = Automatic;
|
CODE_SIGN_STYLE = Automatic;
|
||||||
|
CURRENT_PROJECT_VERSION = 2;
|
||||||
DEVELOPMENT_ASSET_PATHS = "\"iosApp/Preview Content\"";
|
DEVELOPMENT_ASSET_PATHS = "\"iosApp/Preview Content\"";
|
||||||
DEVELOPMENT_TEAM = ZCFJN5LS8B;
|
DEVELOPMENT_TEAM = ZCFJN5LS8B;
|
||||||
ENABLE_PREVIEWS = YES;
|
ENABLE_PREVIEWS = YES;
|
||||||
@@ -350,6 +353,7 @@
|
|||||||
"$(inherited)",
|
"$(inherited)",
|
||||||
"@executable_path/Frameworks",
|
"@executable_path/Frameworks",
|
||||||
);
|
);
|
||||||
|
MARKETING_VERSION = 1.0.2;
|
||||||
SWIFT_EMIT_LOC_STRINGS = YES;
|
SWIFT_EMIT_LOC_STRINGS = YES;
|
||||||
SWIFT_VERSION = 5.0;
|
SWIFT_VERSION = 5.0;
|
||||||
TARGETED_DEVICE_FAMILY = "1,2";
|
TARGETED_DEVICE_FAMILY = "1,2";
|
||||||
|
|||||||
Reference in New Issue
Block a user