Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

v6.1 #80

Merged
merged 8 commits into from
Oct 26, 2024
Merged

v6.1 #80

Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Hide some functions when unavailable
  • Loading branch information
BinTianqi committed Sep 7, 2024
commit 3d5b9efd965e55b0452aae345587f37eeddabe13
6 changes: 4 additions & 2 deletions app/src/main/java/com/bintianqi/owndroid/MainActivity.kt
Original file line number Diff line number Diff line change
Expand Up @@ -183,12 +183,14 @@ private fun HomePage(navCtrl:NavHostController) {
val dpm = context.getDPM()
val receiver = context.getReceiver()
val sharedPref = context.getSharedPreferences("data", Context.MODE_PRIVATE)
var activated by remember { mutableStateOf(false) }
var activateType by remember { mutableStateOf("") }
val deviceAdmin = context.isDeviceAdmin
val deviceOwner = context.isDeviceOwner
val profileOwner = context.isProfileOwner
val refreshStatus by dhizukuErrorStatus.collectAsState()
LaunchedEffect(refreshStatus) {
activated = context.isDeviceAdmin
activateType = if(sharedPref.getBoolean("dhizuku", false)) context.getString(R.string.dhizuku) + " - " else ""
activateType += context.getString(
if(deviceOwner) { R.string.device_owner }
Expand Down Expand Up @@ -217,14 +219,14 @@ private fun HomePage(navCtrl:NavHostController) {
) {
Spacer(modifier = Modifier.padding(start = 22.dp))
Icon(
painter = painterResource(if(deviceAdmin) R.drawable.check_circle_fill1 else R.drawable.block_fill0),
painter = painterResource(if(activated) R.drawable.check_circle_fill1 else R.drawable.block_fill0),
contentDescription = null,
tint = colorScheme.onPrimary
)
Spacer(modifier = Modifier.padding(start = 10.dp))
Column {
Text(
text = stringResource(if(deviceAdmin) R.string.activated else R.string.deactivated),
text = stringResource(if(activated) R.string.activated else R.string.deactivated),
style = typography.headlineSmall,
color = colorScheme.onPrimary,
modifier = Modifier.padding(bottom = 2.dp)
Expand Down
17 changes: 15 additions & 2 deletions app/src/main/java/com/bintianqi/owndroid/dpm/Network.kt
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,7 @@ import androidx.compose.foundation.verticalScroll
import androidx.compose.material3.AlertDialog
import androidx.compose.material3.Button
import androidx.compose.material3.Icon
import androidx.compose.material3.IconButton
import androidx.compose.material3.MaterialTheme.typography
import androidx.compose.material3.OutlinedTextField
import androidx.compose.material3.Scaffold
Expand Down Expand Up @@ -110,6 +111,7 @@ import com.bintianqi.owndroid.ui.RadioButtonItem
import com.bintianqi.owndroid.ui.SubPageItem
import com.bintianqi.owndroid.ui.SwitchItem
import com.bintianqi.owndroid.ui.TopBar
import com.bintianqi.owndroid.writeClipBoard

@Composable
fun Network(navCtrl: NavHostController) {
Expand Down Expand Up @@ -157,7 +159,18 @@ fun Network(navCtrl: NavHostController) {
onDismissRequest = { wifiMacDialog.value = false },
confirmButton = { TextButton(onClick = { wifiMacDialog.value = false }) { Text(stringResource(R.string.confirm)) } },
title = { Text(stringResource(R.string.wifi_mac_addr)) },
text = { SelectionContainer { Text(dpm.getWifiMacAddress(receiver)?: stringResource(R.string.none)) } },
text = {
val mac = dpm.getWifiMacAddress(receiver)
OutlinedTextField(
value = mac ?: stringResource(R.string.none),
onValueChange = {}, readOnly = true, modifier = Modifier.fillMaxWidth(), textStyle = typography.titleMedium,
trailingIcon = {
if(mac != null) IconButton(onClick = { writeClipBoard(context, mac) }) {
Icon(painter = painterResource(R.drawable.content_copy_fill0), contentDescription = stringResource(R.string.copy))
}
}
)
},
modifier = Modifier.fillMaxWidth()
)
}
Expand Down Expand Up @@ -222,7 +235,7 @@ private fun Switches() {
Spacer(Modifier.padding(vertical = 5.dp))
if(VERSION.SDK_INT >= 33 && deviceOwner) {
SwitchItem(
R.string.preferential_network_service, stringResource(R.string.developing), R.drawable.globe_fill0,
R.string.preferential_network_service, "", R.drawable.globe_fill0,
{ dpm.isPreferentialNetworkServiceEnabled }, { dpm.isPreferentialNetworkServiceEnabled = it }, padding = false
)
}
Expand Down
5 changes: 1 addition & 4 deletions app/src/main/java/com/bintianqi/owndroid/dpm/Password.kt
Original file line number Diff line number Diff line change
Expand Up @@ -167,7 +167,7 @@ private fun Home(navCtrl:NavHostController, scrollState: ScrollState) {
if(VERSION.SDK_INT >= 26 && (deviceOwner || profileOwner)) {
SubPageItem(R.string.required_strong_auth_timeout, "", R.drawable.fingerprint_off_fill0) { navCtrl.navigate("RequiredStrongAuthTimeout") }
}
if(deviceOwner || profileOwner) {
if(VERSION.SDK_INT < 31 && (deviceOwner || profileOwner)) {
SubPageItem(R.string.required_password_quality, "", R.drawable.password_fill0) { navCtrl.navigate("RequirePasswordQuality") }
}
Spacer(Modifier.padding(vertical = 30.dp))
Expand Down Expand Up @@ -736,9 +736,6 @@ private fun PasswordQuality() {
Spacer(Modifier.padding(vertical = 10.dp))
Text(text = stringResource(R.string.required_password_quality), style = typography.headlineLarge)
Spacer(Modifier.padding(vertical = 5.dp))
Text(text = stringResource(R.string.password_complexity_instead_password_quality))
if(VERSION.SDK_INT >= 31) { Text(text = stringResource(R.string.password_quality_deprecated_desc), color = colorScheme.error) }
Spacer(Modifier.padding(vertical = 5.dp))
for(index in 1..6) {
RadioButtonItem(passwordQuality[index].second, selectedItem == passwordQuality[index].first, { selectedItem = passwordQuality[index].first })
}
Expand Down
66 changes: 38 additions & 28 deletions app/src/main/java/com/bintianqi/owndroid/dpm/Permissions.kt
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ import androidx.compose.ui.focus.FocusRequester
import androidx.compose.ui.focus.focusRequester
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.platform.LocalFocusManager
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.input.ImeAction
import androidx.compose.ui.text.input.KeyboardType
Expand All @@ -38,6 +39,7 @@ import androidx.navigation.compose.rememberNavController
import com.bintianqi.owndroid.R
import com.bintianqi.owndroid.backToHomeStateFlow
import com.bintianqi.owndroid.ui.*
import com.bintianqi.owndroid.writeClipBoard
import com.rosan.dhizuku.api.Dhizuku
import com.rosan.dhizuku.api.DhizukuRequestPermissionListener
import kotlinx.coroutines.launch
Expand Down Expand Up @@ -74,7 +76,6 @@ fun DpmPermissions(navCtrl:NavHostController) {
composable(route = "DeviceOwner") { DeviceOwner() }
composable(route = "DeviceInfo") { DeviceInfo() }
composable(route = "OrgID") { OrgID() }
composable(route = "SpecificID") { SpecificID() }
composable(route = "OrgName") { OrgName() }
composable(route = "DisableAccountManagement") { DisableAccountManagement() }
composable(route = "LockScreenInfo") { LockScreenInfo() }
Expand All @@ -84,6 +85,7 @@ fun DpmPermissions(navCtrl:NavHostController) {
}
}

@SuppressLint("NewApi")
@Composable
private fun Home(localNavCtrl:NavHostController,listScrollState:ScrollState) {
val context = LocalContext.current
Expand All @@ -93,6 +95,8 @@ private fun Home(localNavCtrl:NavHostController,listScrollState:ScrollState) {
val deviceAdmin = context.isDeviceAdmin
val deviceOwner = context.isDeviceOwner
val profileOwner = context.isProfileOwner
var enrollmentIdDialog by remember { mutableStateOf(false) }
val enrollmentSpecificId = if(VERSION.SDK_INT >= 31 && (deviceOwner || profileOwner)) dpm.enrollmentSpecificId else ""
Column(modifier = Modifier.fillMaxSize().verticalScroll(listScrollState)) {
Text(
text = stringResource(R.string.permission),
Expand All @@ -112,9 +116,9 @@ private fun Home(localNavCtrl:NavHostController,listScrollState:ScrollState) {
R.string.device_admin, stringResource(if(deviceAdmin) R.string.activated else R.string.deactivated),
operation = { localNavCtrl.navigate("DeviceAdmin") }
)
if(!deviceOwner) {
if(profileOwner) {
SubPageItem(
R.string.profile_owner, stringResource(if(profileOwner) R.string.activated else R.string.deactivated),
R.string.profile_owner, stringResource(R.string.activated),
operation = { localNavCtrl.navigate("ProfileOwner") }
)
}
Expand All @@ -131,7 +135,9 @@ private fun Home(localNavCtrl:NavHostController,listScrollState:ScrollState) {
}
if(VERSION.SDK_INT >= 31 && (profileOwner || deviceOwner)) {
SubPageItem(R.string.org_id, "", R.drawable.corporate_fare_fill0) { localNavCtrl.navigate("OrgID") }
SubPageItem(R.string.enrollment_specific_id, "", R.drawable.id_card_fill0) { localNavCtrl.navigate("SpecificID") }
}
if(enrollmentSpecificId != "") {
SubPageItem(R.string.enrollment_specific_id, "", R.drawable.id_card_fill0) { enrollmentIdDialog = true }
}
if(deviceOwner || profileOwner) {
SubPageItem(R.string.disable_account_management, "", R.drawable.account_circle_fill0) { localNavCtrl.navigate("DisableAccountManagement") }
Expand All @@ -147,6 +153,27 @@ private fun Home(localNavCtrl:NavHostController,listScrollState:ScrollState) {
}
Spacer(Modifier.padding(vertical = 30.dp))
}
if(enrollmentIdDialog) AlertDialog(
title = { Text(stringResource(R.string.enrollment_specific_id)) },
text = {
val esid = dpm.enrollmentSpecificId
OutlinedTextField(
value = esid,
onValueChange = {}, readOnly = true, modifier = Modifier.fillMaxWidth(),
trailingIcon = {
IconButton(onClick = { writeClipBoard(context, esid) }) {
Icon(painter = painterResource(R.drawable.content_copy_fill0), contentDescription = stringResource(R.string.copy))
}
}
)
},
onDismissRequest = { enrollmentIdDialog = false },
confirmButton = {
TextButton(onClick = { enrollmentIdDialog = false }) {
Text(stringResource(R.string.confirm))
}
}
)
}

private fun toggleDhizukuMode(status: Boolean, context: Context) {
Expand Down Expand Up @@ -466,7 +493,7 @@ private fun OrgID() {
Text(text = stringResource(R.string.org_id), style = typography.headlineLarge)
Spacer(Modifier.padding(vertical = 5.dp))
OutlinedTextField(
value = orgId, onValueChange = {orgId=it},
value = orgId, onValueChange = { orgId=it },
label = { Text(stringResource(R.string.org_id)) },
keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Ascii, imeAction = ImeAction.Done),
keyboardActions = KeyboardActions(onDone = {focusMgr.clearFocus() }),
Expand All @@ -479,35 +506,18 @@ private fun OrgID() {
Spacer(Modifier.padding(vertical = 5.dp))
Button(
onClick = {
dpm.setOrganizationId(orgId)
Toast.makeText(context, R.string.success,Toast.LENGTH_SHORT).show()
try {
dpm.setOrganizationId(orgId)
Toast.makeText(context, R.string.success,Toast.LENGTH_SHORT).show()
} catch(e: IllegalStateException) {
Toast.makeText(context, R.string.failed,Toast.LENGTH_SHORT).show()
}
},
enabled = orgId.length in 6..64,
modifier = Modifier.fillMaxWidth()
) {
Text(stringResource(R.string.apply))
}
Spacer(Modifier.padding(vertical = 5.dp))
Information{ Text(text = stringResource(R.string.get_specific_id_after_set_org_id)) }
}
}

@SuppressLint("NewApi")
@Composable
private fun SpecificID() {
val context = LocalContext.current
val dpm = context.getDPM()
Column(modifier = Modifier.fillMaxSize().verticalScroll(rememberScrollState()).padding(horizontal = 8.dp)) {
val specificId = dpm.enrollmentSpecificId
Spacer(Modifier.padding(vertical = 10.dp))
Text(text = stringResource(R.string.enrollment_specific_id), style = typography.headlineLarge)
Spacer(Modifier.padding(vertical = 5.dp))
if(specificId != "") {
SelectionContainer(modifier = Modifier.horizontalScroll(rememberScrollState())) { Text(specificId) }
CopyTextButton(R.string.copy, specificId)
}else{
Text(stringResource(R.string.require_set_org_id))
}
}
}

Expand Down
5 changes: 0 additions & 5 deletions app/src/main/res/values-tr/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,6 @@
<string name="es_active_per_user">Aktif(Kullanıcı Başına)</string>
<string name="activated_device_admin">Aktif Cihaz Yöneticileri: %1$s</string>
<string name="enrollment_specific_id">Kayıt Özel Kimliği</string>
<string name="require_set_org_id">Organizasyon Kimliği Gerekli</string>
<string name="org_name">Organizasyon Adı</string>
<string name="disable_account_management">Hesap Yönetimini Devre Dışı Bırak</string>
<string name="account_types_are">Hesap Türleri: </string>
Expand Down Expand Up @@ -244,7 +243,6 @@
<string name="log_file_size_is">Log file size: %1$s</string> <!--TODO-->
<string name="delete_logs">Delete logs</string> <!--TODO-->
<string name="export_logs">Export logs</string> <!--TODO-->
<string name="retrieve">Geri al</string>
<string name="wifi_auth_keypair">WiFi anahtar çifti</string>
<string name="keypair">Anahtar çifti</string>
<string name="override_apn_settings">APN ayarlarını geçersiz kıl</string>
Expand Down Expand Up @@ -290,7 +288,6 @@
<string name="clear_cross_profile_filters">Tüm filtreleri temizle</string>
<string name="org_id">Kuruluş Kimliği</string>
<string name="length_6_to_64">Uzunluk 6 ile 64 karakter arasında olmalıdır</string>
<string name="get_specific_id_after_set_org_id">Bunu ayarladıktan sonra cihaz spesifik Kimlik alabilirsiniz. </string>
<string name="delete_work_profile">Delete work profile</string> <!--TODO-->

<!--AppManager-->
Expand Down Expand Up @@ -532,8 +529,6 @@
<string name="password_quality_biometrics_weak">Biyometrik (Zayıf)</string>
<string name="password_quality_numeric_complex">Sayısal karmaşık (Tekrar eden karakter yok)</string>
<string name="required_password_quality">Gereken şifre kalitesi</string>
<string name="password_complexity_instead_password_quality">Şifre karmaşıklığı ayarlamak şifre kalitesi ayarlarını devre dışı bırakacaktır.</string>
<string name="password_quality_deprecated_desc">Kullanım dışı. Bunun yerine "Gereken şifre karmaşıklığı" kullanın.</string>
<string name="activate_reset_password_token_here">Şifre sıfırlama jetonunu burada etkinleştirin.</string>

<!--Settings&About-->
Expand Down
5 changes: 0 additions & 5 deletions app/src/main/res/values-zh-rCN/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,6 @@
<string name="es_active_per_user">每个用户分别加密</string>
<string name="activated_device_admin">激活的Device admin: %1$s</string>
<string name="enrollment_specific_id">设备注册专用ID</string>
<string name="require_set_org_id">需要设置组织ID</string>
<string name="org_name">组织名称</string>
<string name="disable_account_management">禁用账号管理</string>
<string name="account_types_are">账号类型:</string>
Expand Down Expand Up @@ -239,7 +238,6 @@
<string name="log_file_size_is">日志文件大小:%1$s</string>
<string name="delete_logs">删除日志</string>
<string name="export_logs">导出日志</string>
<string name="retrieve">收集</string>
<string name="wifi_auth_keypair">WiFi密钥对</string>
<string name="keypair">密钥对</string>
<string name="override_apn_settings">APN设置</string>
Expand Down Expand Up @@ -285,7 +283,6 @@
<string name="clear_cross_profile_filters">清除所有过滤器</string>
<string name="org_id">组织ID</string>
<string name="length_6_to_64">长度应在6~64个字符之间</string>
<string name="get_specific_id_after_set_org_id">设置组织ID后才能获取设备唯一标识码</string>
<string name="delete_work_profile">删除工作资料</string>

<!--AppManage-->
Expand Down Expand Up @@ -524,8 +521,6 @@
<string name="password_quality_biometrics_weak">生物识别(弱)</string>
<string name="password_quality_numeric_complex">复杂数字(无连续性)</string>
<string name="required_password_quality">密码质量要求</string>
<string name="password_complexity_instead_password_quality">设置密码复杂度将会取代密码质量</string>
<string name="password_quality_deprecated_desc">已弃用,请使用上面的”密码复杂度要求“</string>
<string name="activate_reset_password_token_here">在这里激活密码重置令牌</string>

<!--Settings&About-->
Expand Down
5 changes: 0 additions & 5 deletions app/src/main/res/values/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,6 @@
<string name="es_active_per_user">Active(per-user)</string>
<string name="activated_device_admin">Active device admins: %1$s</string>
<string name="enrollment_specific_id">Enrollment specific ID</string>
<string name="require_set_org_id">Require organization ID</string>
<string name="org_name">Organization name</string>
<string name="disable_account_management">Disable account management</string>
<string name="account_types_are">Account types: </string>
Expand Down Expand Up @@ -248,7 +247,6 @@
<string name="log_file_size_is">Log file size: %1$s</string>
<string name="delete_logs">Delete logs</string>
<string name="export_logs">Export logs</string>
<string name="retrieve">Retrieve</string>
<string name="wifi_auth_keypair">WiFi keypair</string>
<string name="keypair">Keypair</string>
<string name="override_apn_settings">APN settings</string>
Expand Down Expand Up @@ -297,7 +295,6 @@
<string name="clear_cross_profile_filters">Clear all filters</string>
<string name="org_id">Organization ID</string>
<string name="length_6_to_64">The length should be between 6~64 characters</string>
<string name="get_specific_id_after_set_org_id">You can get device specific ID after set this. </string>
<string name="delete_work_profile">Delete work profile</string>

<!--AppManager-->
Expand Down Expand Up @@ -537,8 +534,6 @@
<string name="password_quality_biometrics_weak">Biometrics (Weak)</string>
<string name="password_quality_numeric_complex">Numeric complex (No repeating characters)</string>
<string name="required_password_quality">Required password quality</string>
<string name="password_complexity_instead_password_quality">Set password complexity will disable password quality settings. </string>
<string name="password_quality_deprecated_desc">Deprecated. Use "Required password complexity" instead. </string>
<string name="activate_reset_password_token_here">Activate reset password token here. </string>

<!--Settings&About-->
Expand Down