mirror of
https://github.com/awfixers-stuff/OwnDroid.git
synced 2026-03-23 11:05:59 +00:00
Use main NavHost to navigate across all pages
Upgrade dependencies Upload dependencies to GitHub in workflow
This commit is contained in:
@@ -18,7 +18,6 @@ import androidx.compose.foundation.layout.fillMaxSize
|
||||
import androidx.compose.foundation.layout.fillMaxWidth
|
||||
import androidx.compose.foundation.layout.imePadding
|
||||
import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.foundation.layout.statusBarsPadding
|
||||
import androidx.compose.foundation.rememberScrollState
|
||||
import androidx.compose.foundation.shape.RoundedCornerShape
|
||||
import androidx.compose.foundation.verticalScroll
|
||||
@@ -27,6 +26,7 @@ import androidx.compose.material3.ExperimentalMaterial3Api
|
||||
import androidx.compose.material3.Icon
|
||||
import androidx.compose.material3.MaterialTheme.colorScheme
|
||||
import androidx.compose.material3.MaterialTheme.typography
|
||||
import androidx.compose.material3.Scaffold
|
||||
import androidx.compose.material3.Text
|
||||
import androidx.compose.material3.TextButton
|
||||
import androidx.compose.runtime.Composable
|
||||
@@ -53,15 +53,70 @@ import androidx.navigation.NavHostController
|
||||
import androidx.navigation.compose.NavHost
|
||||
import androidx.navigation.compose.composable
|
||||
import androidx.navigation.compose.rememberNavController
|
||||
import com.bintianqi.owndroid.dpm.AffiliationID
|
||||
import com.bintianqi.owndroid.dpm.AlwaysOnVPNPackage
|
||||
import com.bintianqi.owndroid.dpm.ApplicationManage
|
||||
import com.bintianqi.owndroid.dpm.DpmPermissions
|
||||
import com.bintianqi.owndroid.dpm.ManagedProfile
|
||||
import com.bintianqi.owndroid.dpm.CACert
|
||||
import com.bintianqi.owndroid.dpm.ChangeTime
|
||||
import com.bintianqi.owndroid.dpm.ChangeTimeZone
|
||||
import com.bintianqi.owndroid.dpm.ChangeUserIcon
|
||||
import com.bintianqi.owndroid.dpm.ChangeUsername
|
||||
import com.bintianqi.owndroid.dpm.CreateUser
|
||||
import com.bintianqi.owndroid.dpm.CreateWorkProfile
|
||||
import com.bintianqi.owndroid.dpm.CurrentUserInfo
|
||||
import com.bintianqi.owndroid.dpm.DeleteWorkProfile
|
||||
import com.bintianqi.owndroid.dpm.DeviceAdmin
|
||||
import com.bintianqi.owndroid.dpm.DeviceInfo
|
||||
import com.bintianqi.owndroid.dpm.DeviceOwner
|
||||
import com.bintianqi.owndroid.dpm.DisableAccountManagement
|
||||
import com.bintianqi.owndroid.dpm.DisableKeyguardFeatures
|
||||
import com.bintianqi.owndroid.dpm.FRPPolicy
|
||||
import com.bintianqi.owndroid.dpm.InstallSystemUpdate
|
||||
import com.bintianqi.owndroid.dpm.IntentFilter
|
||||
import com.bintianqi.owndroid.dpm.Keyguard
|
||||
import com.bintianqi.owndroid.dpm.LockScreenInfo
|
||||
import com.bintianqi.owndroid.dpm.LockTaskMode
|
||||
import com.bintianqi.owndroid.dpm.MTEPolicy
|
||||
import com.bintianqi.owndroid.dpm.WorkProfile
|
||||
import com.bintianqi.owndroid.dpm.NearbyStreamingPolicy
|
||||
import com.bintianqi.owndroid.dpm.Network
|
||||
import com.bintianqi.owndroid.dpm.NetworkLogging
|
||||
import com.bintianqi.owndroid.dpm.NetworkOptions
|
||||
import com.bintianqi.owndroid.dpm.OrgOwnedProfile
|
||||
import com.bintianqi.owndroid.dpm.OverrideAPN
|
||||
import com.bintianqi.owndroid.dpm.Password
|
||||
import com.bintianqi.owndroid.dpm.PasswordComplexity
|
||||
import com.bintianqi.owndroid.dpm.PasswordInfo
|
||||
import com.bintianqi.owndroid.dpm.PasswordQuality
|
||||
import com.bintianqi.owndroid.dpm.PermissionPolicy
|
||||
import com.bintianqi.owndroid.dpm.Permissions
|
||||
import com.bintianqi.owndroid.dpm.PreferentialNetworkService
|
||||
import com.bintianqi.owndroid.dpm.PrivateDNS
|
||||
import com.bintianqi.owndroid.dpm.ProfileOwner
|
||||
import com.bintianqi.owndroid.dpm.RecommendedGlobalProxy
|
||||
import com.bintianqi.owndroid.dpm.ResetPassword
|
||||
import com.bintianqi.owndroid.dpm.ResetPasswordToken
|
||||
import com.bintianqi.owndroid.dpm.RestrictionData
|
||||
import com.bintianqi.owndroid.dpm.SecurityLogging
|
||||
import com.bintianqi.owndroid.dpm.Shizuku
|
||||
import com.bintianqi.owndroid.dpm.SupportMessages
|
||||
import com.bintianqi.owndroid.dpm.SuspendPersonalApp
|
||||
import com.bintianqi.owndroid.dpm.SystemManage
|
||||
import com.bintianqi.owndroid.dpm.UserManage
|
||||
import com.bintianqi.owndroid.dpm.SystemOptions
|
||||
import com.bintianqi.owndroid.dpm.SystemUpdatePolicy
|
||||
import com.bintianqi.owndroid.dpm.TransferOwnership
|
||||
import com.bintianqi.owndroid.dpm.UserOperation
|
||||
import com.bintianqi.owndroid.dpm.UserOptions
|
||||
import com.bintianqi.owndroid.dpm.UserRestriction
|
||||
import com.bintianqi.owndroid.dpm.UserRestrictionItem
|
||||
import com.bintianqi.owndroid.dpm.UserSessionMessage
|
||||
import com.bintianqi.owndroid.dpm.Users
|
||||
import com.bintianqi.owndroid.dpm.WifiAuthKeypair
|
||||
import com.bintianqi.owndroid.dpm.WifiSecurityLevel
|
||||
import com.bintianqi.owndroid.dpm.WifiSsidPolicy
|
||||
import com.bintianqi.owndroid.dpm.WipeData
|
||||
import com.bintianqi.owndroid.dpm.dhizukuErrorStatus
|
||||
import com.bintianqi.owndroid.dpm.dhizukuPermissionGranted
|
||||
import com.bintianqi.owndroid.dpm.getDPM
|
||||
import com.bintianqi.owndroid.dpm.getReceiver
|
||||
import com.bintianqi.owndroid.dpm.isDeviceAdmin
|
||||
@@ -70,6 +125,7 @@ import com.bintianqi.owndroid.dpm.isProfileOwner
|
||||
import com.bintianqi.owndroid.dpm.setDefaultAffiliationID
|
||||
import com.bintianqi.owndroid.dpm.toggleInstallAppActivity
|
||||
import com.bintianqi.owndroid.ui.Animations
|
||||
import com.bintianqi.owndroid.ui.MyScaffold
|
||||
import com.bintianqi.owndroid.ui.theme.OwnDroidTheme
|
||||
import com.rosan.dhizuku.api.Dhizuku
|
||||
import kotlinx.coroutines.delay
|
||||
@@ -119,7 +175,7 @@ class MainActivity : FragmentActivity() {
|
||||
}
|
||||
if (sharedPref.getBoolean("dhizuku", false)) {
|
||||
if (Dhizuku.init(applicationContext)) {
|
||||
if (!Dhizuku.isPermissionGranted()) { dhizukuErrorStatus.value = 2 }
|
||||
if (!dhizukuPermissionGranted()) { dhizukuErrorStatus.value = 2 }
|
||||
} else {
|
||||
sharedPref.edit().putBoolean("dhizuku", false).apply()
|
||||
dhizukuErrorStatus.value = 1
|
||||
@@ -157,20 +213,105 @@ fun Home(vm: MyViewModel) {
|
||||
popExitTransition = Animations.navHostPopExitTransition
|
||||
) {
|
||||
composable(route = "HomePage") { HomePage(navCtrl) }
|
||||
|
||||
composable(route = "Permissions") { Permissions(navCtrl) }
|
||||
composable(route = "Shizuku") { Shizuku(navCtrl) }
|
||||
composable(route = "DeviceAdmin") { DeviceAdmin(navCtrl) }
|
||||
composable(route = "ProfileOwner") { ProfileOwner(navCtrl) }
|
||||
composable(route = "DeviceOwner") { DeviceOwner(navCtrl) }
|
||||
composable(route = "DeviceInfo") { DeviceInfo(navCtrl) }
|
||||
composable(route = "LockScreenInfo") { LockScreenInfo(navCtrl) }
|
||||
composable(route = "SupportMessages") { SupportMessages(navCtrl) }
|
||||
composable(route = "TransferOwnership") { TransferOwnership(navCtrl) }
|
||||
|
||||
composable(route = "System") { SystemManage(navCtrl) }
|
||||
composable(route = "ManagedProfile") { ManagedProfile(navCtrl) }
|
||||
composable(route = "Permissions") { DpmPermissions(navCtrl) }
|
||||
composable(route = "Applications") { ApplicationManage(navCtrl, dialogStatus) }
|
||||
composable(route = "UserRestriction") { UserRestriction(navCtrl) }
|
||||
composable(route = "Users") { UserManage(navCtrl) }
|
||||
composable(route = "Password") { Password(navCtrl) }
|
||||
composable(route = "Settings") { AppSetting(navCtrl, vm) }
|
||||
composable(route = "SystemOptions") { SystemOptions(navCtrl) }
|
||||
composable(route = "Keyguard") { Keyguard(navCtrl) }
|
||||
composable(route = "ChangeTime") { ChangeTime(navCtrl) }
|
||||
composable(route = "ChangeTimeZone") { ChangeTimeZone(navCtrl) }
|
||||
composable(route = "PermissionPolicy") { PermissionPolicy(navCtrl) }
|
||||
composable(route = "MTEPolicy") { MTEPolicy(navCtrl) }
|
||||
composable(route = "NearbyStreamingPolicy") { NearbyStreamingPolicy(navCtrl) }
|
||||
composable(route = "LockTaskMode") { LockTaskMode(navCtrl) }
|
||||
composable(route = "CACert") { CACert(navCtrl) }
|
||||
composable(route = "SecurityLogs") { SecurityLogging(navCtrl) }
|
||||
composable(route = "DisableAccountManagement") { DisableAccountManagement(navCtrl) }
|
||||
composable(route = "SystemUpdatePolicy") { SystemUpdatePolicy(navCtrl) }
|
||||
composable(route = "InstallSystemUpdate") { InstallSystemUpdate(navCtrl) }
|
||||
composable(route = "FRPPolicy") { FRPPolicy(navCtrl) }
|
||||
composable(route = "WipeData") { WipeData(navCtrl) }
|
||||
|
||||
composable(route = "Network") { Network(navCtrl) }
|
||||
composable(route = "NetworkOptions") { NetworkOptions(navCtrl) }
|
||||
composable(route = "MinWifiSecurityLevel") { WifiSecurityLevel(navCtrl) }
|
||||
composable(route = "WifiSsidPolicy") { WifiSsidPolicy(navCtrl) }
|
||||
composable(route = "PrivateDNS") { PrivateDNS(navCtrl) }
|
||||
composable(route = "AlwaysOnVpn") { AlwaysOnVPNPackage(navCtrl) }
|
||||
composable(route = "RecommendedGlobalProxy") { RecommendedGlobalProxy(navCtrl) }
|
||||
composable(route = "NetworkLog") { NetworkLogging(navCtrl) }
|
||||
composable(route = "WifiAuthKeypair") { WifiAuthKeypair(navCtrl) }
|
||||
composable(route = "PreferentialNetworkService") { PreferentialNetworkService(navCtrl) }
|
||||
composable(route = "OverrideAPN") { OverrideAPN(navCtrl) }
|
||||
|
||||
composable(route = "WorkProfile") { WorkProfile(navCtrl) }
|
||||
composable(route = "OrgOwnedWorkProfile") { OrgOwnedProfile(navCtrl) }
|
||||
composable(route = "CreateWorkProfile") { CreateWorkProfile(navCtrl) }
|
||||
composable(route = "SuspendPersonalApp") { SuspendPersonalApp(navCtrl) }
|
||||
composable(route = "IntentFilter") { IntentFilter(navCtrl) }
|
||||
composable(route = "DeleteWorkProfile") { DeleteWorkProfile(navCtrl) }
|
||||
|
||||
composable(route = "Applications") { ApplicationManage(navCtrl, dialogStatus) }
|
||||
|
||||
composable(route = "UserRestriction") { UserRestriction(navCtrl) }
|
||||
composable(route = "UR-Internet") {
|
||||
MyScaffold(R.string.network_and_internet, 0.dp, navCtrl) { RestrictionData.internet.forEach { UserRestrictionItem(it) } }
|
||||
}
|
||||
composable(route = "UR-Connectivity") {
|
||||
MyScaffold(R.string.connectivity, 0.dp, navCtrl) { RestrictionData.connectivity.forEach { UserRestrictionItem(it) } }
|
||||
}
|
||||
composable(route = "UR-Applications") {
|
||||
MyScaffold(R.string.applications, 0.dp, navCtrl) { RestrictionData.applications.forEach { UserRestrictionItem(it) } }
|
||||
}
|
||||
composable(route = "UR-Users") {
|
||||
MyScaffold(R.string.users, 0.dp, navCtrl) { RestrictionData.users.forEach { UserRestrictionItem(it) } }
|
||||
}
|
||||
composable(route = "UR-Media") {
|
||||
MyScaffold(R.string.media, 0.dp, navCtrl) { RestrictionData.media.forEach { UserRestrictionItem(it) } }
|
||||
}
|
||||
composable(route = "UR-Other") {
|
||||
MyScaffold(R.string.other, 0.dp, navCtrl) { RestrictionData.other.forEach { UserRestrictionItem(it) } }
|
||||
}
|
||||
|
||||
composable(route = "Users") { Users(navCtrl) }
|
||||
composable(route = "UserInfo") { CurrentUserInfo(navCtrl) }
|
||||
composable(route = "UserOptions") { UserOptions(navCtrl) }
|
||||
composable(route = "UserOperation") { UserOperation(navCtrl) }
|
||||
composable(route = "CreateUser") { CreateUser(navCtrl) }
|
||||
composable(route = "ChangeUsername") { ChangeUsername(navCtrl) }
|
||||
composable(route = "ChangeUserIcon") { ChangeUserIcon(navCtrl) }
|
||||
composable(route = "UserSessionMessage") { UserSessionMessage(navCtrl) }
|
||||
composable(route = "AffiliationID") { AffiliationID(navCtrl) }
|
||||
|
||||
composable(route = "Password") { Password(navCtrl) }
|
||||
composable(route = "PasswordInfo") { PasswordInfo(navCtrl) }
|
||||
composable(route = "ResetPasswordToken") { ResetPasswordToken(navCtrl) }
|
||||
composable(route = "ResetPassword") { ResetPassword(navCtrl) }
|
||||
composable(route = "RequirePasswordComplexity") { PasswordComplexity(navCtrl) }
|
||||
composable(route = "DisableKeyguardFeatures") { DisableKeyguardFeatures(navCtrl) }
|
||||
composable(route = "RequirePasswordQuality") { PasswordQuality(navCtrl) }
|
||||
|
||||
composable(route = "Settings") { Settings(navCtrl) }
|
||||
composable(route = "Options") { SettingsOptions(navCtrl) }
|
||||
composable(route = "Appearance") { Appearance(navCtrl, vm) }
|
||||
composable(route = "AuthSettings") { AuthSettings(navCtrl) }
|
||||
composable(route = "Automation") { Automation(navCtrl) }
|
||||
composable(route = "About") { About(navCtrl) }
|
||||
|
||||
composable(route = "PackageSelector") { PackageSelector(navCtrl) }
|
||||
}
|
||||
LaunchedEffect(Unit) {
|
||||
val profileInited = sharedPref.getBoolean("ManagedProfileActivated", false)
|
||||
val profileNotActivated = !profileInited && context.isProfileOwner && (VERSION.SDK_INT < 24 || (VERSION.SDK_INT >= 24 && dpm.isManagedProfile(receiver)))
|
||||
val profileInitialized = sharedPref.getBoolean("ManagedProfileActivated", false)
|
||||
val profileNotActivated = !profileInitialized && context.isProfileOwner && (VERSION.SDK_INT < 24 || dpm.isManagedProfile(receiver))
|
||||
if(profileNotActivated) {
|
||||
dpm.setProfileEnabled(receiver)
|
||||
sharedPref.edit().putBoolean("ManagedProfileActivated", true).apply()
|
||||
@@ -203,58 +344,60 @@ private fun HomePage(navCtrl:NavHostController) {
|
||||
else if(deviceAdmin) R.string.device_admin else R.string.click_to_activate
|
||||
)
|
||||
}
|
||||
Column(modifier = Modifier.background(colorScheme.background).statusBarsPadding().verticalScroll(rememberScrollState())) {
|
||||
Spacer(Modifier.padding(vertical = 25.dp))
|
||||
Text(
|
||||
text = stringResource(R.string.app_name), style = typography.headlineLarge,
|
||||
modifier = Modifier.padding(start = 10.dp), color = colorScheme.onBackground
|
||||
)
|
||||
Spacer(Modifier.padding(vertical = 8.dp))
|
||||
Row(
|
||||
modifier = Modifier
|
||||
.fillMaxWidth()
|
||||
.padding(vertical = 8.dp, horizontal = 8.dp)
|
||||
.clip(RoundedCornerShape(15))
|
||||
.background(color = colorScheme.primary)
|
||||
.clickable(onClick = { navCtrl.navigate("Permissions") })
|
||||
.padding(vertical = 16.dp),
|
||||
verticalAlignment = Alignment.CenterVertically
|
||||
) {
|
||||
Spacer(modifier = Modifier.padding(start = 22.dp))
|
||||
Icon(
|
||||
painter = painterResource(if(activated) R.drawable.check_circle_fill1 else R.drawable.block_fill0),
|
||||
contentDescription = null,
|
||||
tint = colorScheme.onPrimary
|
||||
Scaffold {
|
||||
Column(modifier = Modifier.padding(it).verticalScroll(rememberScrollState())) {
|
||||
Spacer(Modifier.padding(vertical = 25.dp))
|
||||
Text(
|
||||
text = stringResource(R.string.app_name), style = typography.headlineLarge,
|
||||
modifier = Modifier.padding(start = 10.dp)
|
||||
)
|
||||
Spacer(modifier = Modifier.padding(start = 10.dp))
|
||||
Column {
|
||||
Text(
|
||||
text = stringResource(if(activated) R.string.activated else R.string.deactivated),
|
||||
style = typography.headlineSmall,
|
||||
color = colorScheme.onPrimary,
|
||||
modifier = Modifier.padding(bottom = 2.dp)
|
||||
Spacer(Modifier.padding(vertical = 8.dp))
|
||||
Row(
|
||||
modifier = Modifier
|
||||
.fillMaxWidth()
|
||||
.padding(vertical = 8.dp, horizontal = 8.dp)
|
||||
.clip(RoundedCornerShape(15))
|
||||
.background(color = colorScheme.primary)
|
||||
.clickable(onClick = { navCtrl.navigate("Permissions") })
|
||||
.padding(vertical = 16.dp),
|
||||
verticalAlignment = Alignment.CenterVertically
|
||||
) {
|
||||
Spacer(modifier = Modifier.padding(start = 22.dp))
|
||||
Icon(
|
||||
painter = painterResource(if(activated) R.drawable.check_circle_fill1 else R.drawable.block_fill0),
|
||||
contentDescription = null,
|
||||
tint = colorScheme.onPrimary
|
||||
)
|
||||
if(activateType != "") { Text(text = activateType, color = colorScheme.onPrimary) }
|
||||
Spacer(modifier = Modifier.padding(start = 10.dp))
|
||||
Column {
|
||||
Text(
|
||||
text = stringResource(if(activated) R.string.activated else R.string.deactivated),
|
||||
style = typography.headlineSmall,
|
||||
color = colorScheme.onPrimary,
|
||||
modifier = Modifier.padding(bottom = 2.dp)
|
||||
)
|
||||
if(activateType != "") { Text(text = activateType, color = colorScheme.onPrimary) }
|
||||
}
|
||||
}
|
||||
HomePageItem(R.string.system, R.drawable.android_fill0, "System", navCtrl)
|
||||
if(deviceOwner || profileOwner) { HomePageItem(R.string.network, R.drawable.wifi_fill0, "Network", navCtrl) }
|
||||
if(
|
||||
(VERSION.SDK_INT < 24 && !deviceOwner) || (
|
||||
VERSION.SDK_INT >= 24 && (dpm.isProvisioningAllowed(DevicePolicyManager.ACTION_PROVISION_MANAGED_PROFILE) ||
|
||||
(profileOwner && dpm.isManagedProfile(receiver)))
|
||||
)
|
||||
) {
|
||||
HomePageItem(R.string.work_profile, R.drawable.work_fill0, "ManagedProfile", navCtrl)
|
||||
}
|
||||
if(deviceOwner || profileOwner) HomePageItem(R.string.applications, R.drawable.apps_fill0, "Applications", navCtrl)
|
||||
if(VERSION.SDK_INT >= 24 && (profileOwner || deviceOwner)) {
|
||||
HomePageItem(R.string.user_restriction, R.drawable.person_off, "UserRestriction", navCtrl)
|
||||
}
|
||||
HomePageItem(R.string.users,R.drawable.manage_accounts_fill0,"Users", navCtrl)
|
||||
HomePageItem(R.string.password_and_keyguard, R.drawable.password_fill0, "Password", navCtrl)
|
||||
HomePageItem(R.string.settings, R.drawable.settings_fill0, "Settings", navCtrl)
|
||||
Spacer(Modifier.padding(vertical = 20.dp))
|
||||
}
|
||||
HomePageItem(R.string.system, R.drawable.android_fill0, "System", navCtrl)
|
||||
if(deviceOwner || profileOwner) { HomePageItem(R.string.network, R.drawable.wifi_fill0, "Network", navCtrl) }
|
||||
if(
|
||||
(VERSION.SDK_INT < 24 && !deviceOwner) || (
|
||||
VERSION.SDK_INT >= 24 && (dpm.isProvisioningAllowed(DevicePolicyManager.ACTION_PROVISION_MANAGED_PROFILE) ||
|
||||
(profileOwner && dpm.isManagedProfile(receiver)))
|
||||
)
|
||||
) {
|
||||
HomePageItem(R.string.work_profile, R.drawable.work_fill0, "ManagedProfile", navCtrl)
|
||||
}
|
||||
if(deviceOwner || profileOwner) HomePageItem(R.string.applications, R.drawable.apps_fill0, "Applications", navCtrl)
|
||||
if(VERSION.SDK_INT >= 24 && (profileOwner || deviceOwner)) {
|
||||
HomePageItem(R.string.user_restrict, R.drawable.person_off, "UserRestriction", navCtrl)
|
||||
}
|
||||
HomePageItem(R.string.users,R.drawable.manage_accounts_fill0,"Users", navCtrl)
|
||||
HomePageItem(R.string.password_and_keyguard, R.drawable.password_fill0, "Password", navCtrl)
|
||||
HomePageItem(R.string.settings, R.drawable.settings_fill0, "Settings", navCtrl)
|
||||
Spacer(Modifier.padding(vertical = 20.dp))
|
||||
}
|
||||
}
|
||||
|
||||
@@ -263,22 +406,19 @@ fun HomePageItem(name: Int, imgVector: Int, navTo: String, navCtrl: NavHostContr
|
||||
Row(
|
||||
modifier = Modifier
|
||||
.fillMaxWidth()
|
||||
.clip(RoundedCornerShape(25))
|
||||
.clickable(onClick = { navCtrl.navigate(navTo) })
|
||||
.padding(vertical = 13.dp),
|
||||
.padding(vertical = 12.dp),
|
||||
verticalAlignment = Alignment.CenterVertically
|
||||
) {
|
||||
Spacer(Modifier.padding(start = 30.dp))
|
||||
Icon(
|
||||
painter = painterResource(imgVector),
|
||||
contentDescription = null,
|
||||
tint = colorScheme.onBackground
|
||||
contentDescription = null
|
||||
)
|
||||
Spacer(Modifier.padding(start = 15.dp))
|
||||
Text(
|
||||
text = stringResource(name),
|
||||
style = typography.headlineSmall,
|
||||
color = colorScheme.onBackground,
|
||||
modifier = Modifier.padding(bottom = if(zhCN) { 2 } else { 0 }.dp)
|
||||
)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user