mirror of
https://github.com/awfixers-stuff/OwnDroid.git
synced 2026-03-23 19:15:58 +00:00
Disable metered data for specific apps, close #109
Update workflow file
This commit is contained in:
@@ -148,7 +148,8 @@ fun ApplicationsScreen(onNavigateUp: () -> Unit) {
|
||||
) {
|
||||
composable<Home> { HomeScreen(pkgName) { navController.navigate(it) } }
|
||||
composable<UserControlDisabledPackages> { UserControlDisabledPackagesScreen(pkgName) }
|
||||
composable<PermissionManager> { PermissionManagerScreen(pkgName) }
|
||||
composable<PermissionsManager> { PermissionsScreen(pkgName) }
|
||||
composable<DisableMeteredData> { DisableMeteredDataScreen(pkgName) }
|
||||
composable<CrossProfilePackages> { CrossProfilePackagesScreen(pkgName) }
|
||||
composable<CrossProfileWidgetProviders> { CrossProfileWidgetProvidersScreen(pkgName) }
|
||||
composable<CredentialManagerPolicy> { CredentialManagerPolicyScreen(pkgName) }
|
||||
@@ -229,8 +230,11 @@ private fun HomeScreen(pkgName: String, onNavigate: (Any) -> Unit) {
|
||||
if(VERSION.SDK_INT >= 30 && (deviceOwner || (VERSION.SDK_INT >= 33 && profileOwner))) {
|
||||
FunctionItem(title = R.string.ucd, icon = R.drawable.do_not_touch_fill0) { onNavigate(UserControlDisabledPackages) }
|
||||
}
|
||||
if(VERSION.SDK_INT>=23) {
|
||||
FunctionItem(title = R.string.permission_manage, icon = R.drawable.key_fill0) { onNavigate(PermissionManager) }
|
||||
if(VERSION.SDK_INT >= 23) {
|
||||
FunctionItem(title = R.string.permissions, icon = R.drawable.key_fill0) { onNavigate(PermissionsManager) }
|
||||
}
|
||||
if(VERSION.SDK_INT >= 28) {
|
||||
FunctionItem(R.string.disable_metered_data, icon = R.drawable.money_off_fill0) { onNavigate(DisableMeteredData) }
|
||||
}
|
||||
if(VERSION.SDK_INT >= 30 && profileOwner && dpm.isManagedProfile(receiver)) {
|
||||
FunctionItem(title = R.string.cross_profile_package, icon = R.drawable.work_fill0) { onNavigate(CrossProfilePackages) }
|
||||
@@ -239,7 +243,7 @@ private fun HomeScreen(pkgName: String, onNavigate: (Any) -> Unit) {
|
||||
FunctionItem(title = R.string.cross_profile_widget, icon = R.drawable.widgets_fill0) { onNavigate(CrossProfileWidgetProviders) }
|
||||
}
|
||||
if(VERSION.SDK_INT >= 34 && deviceOwner) {
|
||||
FunctionItem(title = R.string.credential_manage_policy, icon = R.drawable.license_fill0) { onNavigate(CredentialManagerPolicy) }
|
||||
FunctionItem(title = R.string.credential_manager_policy, icon = R.drawable.license_fill0) { onNavigate(CredentialManagerPolicy) }
|
||||
}
|
||||
FunctionItem(title = R.string.permitted_accessibility_services, icon = R.drawable.settings_accessibility_fill0) {
|
||||
onNavigate(PermittedAccessibilityServices)
|
||||
@@ -471,11 +475,11 @@ private fun UserControlDisabledPackagesScreen(pkgName:String) {
|
||||
}
|
||||
}
|
||||
|
||||
@Serializable private object PermissionManager
|
||||
@Serializable private object PermissionsManager
|
||||
|
||||
@RequiresApi(23)
|
||||
@Composable
|
||||
private fun PermissionManagerScreen(pkgName: String) {
|
||||
private fun PermissionsScreen(pkgName: String) {
|
||||
val context = LocalContext.current
|
||||
val dpm = context.getDPM()
|
||||
val receiver = context.getReceiver()
|
||||
@@ -573,6 +577,46 @@ private fun PermissionManagerScreen(pkgName: String) {
|
||||
}
|
||||
}
|
||||
|
||||
@Serializable private object DisableMeteredData
|
||||
|
||||
@RequiresApi(28)
|
||||
@Composable
|
||||
private fun DisableMeteredDataScreen(pkgName: String) {
|
||||
val context = LocalContext.current
|
||||
val dpm = context.getDPM()
|
||||
val receiver = context.getReceiver()
|
||||
val packages = remember { mutableStateListOf<String>() }
|
||||
fun refresh() {
|
||||
packages.clear()
|
||||
packages.addAll(dpm.getMeteredDataDisabledPackages(receiver))
|
||||
}
|
||||
LaunchedEffect(Unit) { refresh() }
|
||||
Column(Modifier.fillMaxSize().padding(horizontal = 8.dp).verticalScroll(rememberScrollState())) {
|
||||
Text(stringResource(R.string.disable_metered_data), Modifier.padding(vertical = 8.dp), style = typography.headlineLarge)
|
||||
Column(Modifier.animateContentSize()) {
|
||||
packages.forEach { pkg ->
|
||||
ListItem(pkg) { packages -= pkg }
|
||||
}
|
||||
}
|
||||
Button(
|
||||
onClick = { packages += pkgName },
|
||||
modifier = Modifier.fillMaxWidth().padding(vertical = 4.dp),
|
||||
enabled = pkgName.isNotBlank()
|
||||
) {
|
||||
Text(stringResource(R.string.add))
|
||||
}
|
||||
Button(
|
||||
onClick = {
|
||||
context.showOperationResultToast(dpm.setMeteredDataDisabledPackages(receiver, packages).isEmpty())
|
||||
refresh()
|
||||
},
|
||||
modifier = Modifier.fillMaxWidth()
|
||||
) {
|
||||
Text(stringResource(R.string.apply))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Serializable private object CrossProfilePackages
|
||||
|
||||
@RequiresApi(30)
|
||||
@@ -676,7 +720,7 @@ private fun CredentialManagerPolicyScreen(pkgName: String) { // TODO: rename "ma
|
||||
LaunchedEffect(Unit) { refreshPolicy() }
|
||||
Column(modifier = Modifier.fillMaxSize().padding(horizontal = 8.dp).verticalScroll(rememberScrollState())) {
|
||||
Spacer(Modifier.padding(vertical = 10.dp))
|
||||
Text(text = stringResource(R.string.credential_manage_policy), style = typography.headlineLarge)
|
||||
Text(text = stringResource(R.string.credential_manager_policy), style = typography.headlineLarge)
|
||||
Spacer(Modifier.padding(vertical = 5.dp))
|
||||
RadioButtonItem(R.string.none, policyType == -1) { policyType = -1 }
|
||||
RadioButtonItem(R.string.blacklist, policyType == PACKAGE_POLICY_BLOCKLIST) { policyType = PACKAGE_POLICY_BLOCKLIST }
|
||||
|
||||
@@ -587,7 +587,7 @@ fun AddDelegatedAdminScreen(data: AddDelegatedAdmin, onNavigateUp: () -> Unit) {
|
||||
val choosePackage = rememberLauncherForActivityResult(ChoosePackageContract()) { result ->
|
||||
result?.let { input = it }
|
||||
}
|
||||
MySmallTitleScaffold(if(updateMode) R.string.place_holder else R.string.add_delegated_admin, 0.dp, onNavigateUp,) {
|
||||
MySmallTitleScaffold(if(updateMode) R.string.place_holder else R.string.add_delegated_admin, 0.dp, onNavigateUp) {
|
||||
OutlinedTextField(
|
||||
value = input, onValueChange = { input = it },
|
||||
label = { Text(stringResource(R.string.package_name)) },
|
||||
|
||||
9
app/src/main/res/drawable/money_off_fill0.xml
Normal file
9
app/src/main/res/drawable/money_off_fill0.xml
Normal file
@@ -0,0 +1,9 @@
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="24dp"
|
||||
android:height="24dp"
|
||||
android:viewportWidth="960"
|
||||
android:viewportHeight="960">
|
||||
<path
|
||||
android:pathData="M574,342q-12,-30 -35.5,-47T482,278q-18,0 -35,5t-31,19l-58,-58q14,-14 38,-25.5t44,-14.5v-84h80v82q45,9 79,36.5t51,71.5l-76,32ZM792,904 L608,720q-15,15 -41,24.5T520,756v84h-80v-86q-56,-14 -93.5,-51T292,610l80,-32q12,42 40.5,72t75.5,30q18,0 33,-4.5t29,-13.5L56,168l56,-56 736,736 -56,56Z"
|
||||
android:fillColor="#000000"/>
|
||||
</vector>
|
||||
@@ -387,10 +387,10 @@
|
||||
<string name="ucd">Отключить управление пользователем</string>
|
||||
<string name="ucd_desc">Если вы установите этот флажок, вы не сможете очистить хранилище этих приложений или принудительно остановить их.</string>
|
||||
<string name="app_list_is">Список приложений:</string>
|
||||
<string name="permission_manage">Управление разрешениями</string>
|
||||
<string name="disable_metered_data">Disable metered data</string> <!--TODO-->
|
||||
<string name="cross_profile_package">Кросс-профильный пакет</string>
|
||||
<string name="cross_profile_widget">Кросс-профильный виджет</string>
|
||||
<string name="credential_manage_policy">Политика управления учетными данными</string>
|
||||
<string name="credential_manager_policy">Credential manager policy</string> <!--TODO-->
|
||||
<string name="whitelist_and_system_app">Белый список и системные приложения</string>
|
||||
<string name="permitted_packages_is">Разрешенные пакеты: \n</string>
|
||||
<string name="permitted_accessibility_services">Разрешенные службы доступности</string>
|
||||
|
||||
@@ -395,10 +395,10 @@
|
||||
<string name="ucd">Kullanıcı Kontrolünü Devre Dışı Bırak</string>
|
||||
<string name="ucd_desc">Bunu ayarlarsanız, bu uygulamaların depolamasını temizleyemez veya zorla durduramazsınız.</string>
|
||||
<string name="app_list_is">Uygulama listesi:</string>
|
||||
<string name="permission_manage">İzin Yönetimi</string>
|
||||
<string name="disable_metered_data">Disable metered data</string> <!--TODO-->
|
||||
<string name="cross_profile_package">Çapraz Profil Paketi</string>
|
||||
<string name="cross_profile_widget">Çapraz Profil Widget\'ı</string>
|
||||
<string name="credential_manage_policy">Kimlik Yönetimi Politikası</string>
|
||||
<string name="credential_manager_policy">Credential manager policy</string> <!--TODO-->
|
||||
<string name="whitelist_and_system_app">Beyaz Liste ve Sistem Uygulaması</string>
|
||||
<string name="permitted_packages_is">İzin Verilen Paketler: \n</string>
|
||||
<string name="permitted_accessibility_services">İzin Verilen Erişilebilirlik Servisleri</string>
|
||||
|
||||
@@ -375,10 +375,10 @@
|
||||
<string name="ucd">禁止用户控制</string>
|
||||
<string name="ucd_desc">用户将无法清除这些应用的存储空间或强制停止这些应用</string>
|
||||
<string name="app_list_is">应用列表:</string>
|
||||
<string name="permission_manage">权限管理</string>
|
||||
<string name="disable_metered_data">禁用计量数据</string>
|
||||
<string name="cross_profile_package">跨资料应用</string>
|
||||
<string name="cross_profile_widget">跨资料微件</string>
|
||||
<string name="credential_manage_policy">凭据管理策略</string>
|
||||
<string name="credential_manager_policy">凭据管理器策略</string>
|
||||
<string name="whitelist_and_system_app">白名单和系统应用</string>
|
||||
<string name="permitted_packages_is">许可的应用:\n</string>
|
||||
<string name="permitted_accessibility_services">许可的无障碍服务</string>
|
||||
|
||||
@@ -414,10 +414,10 @@
|
||||
<string name="ucd">Disable user control</string>
|
||||
<string name="ucd_desc">If you set this, you cannot clear these apps\' storage or force stop them. </string>
|
||||
<string name="app_list_is">App list:</string>
|
||||
<string name="permission_manage">Permission manage</string>
|
||||
<string name="disable_metered_data">Disable metered data</string>
|
||||
<string name="cross_profile_package">Cross profile package</string>
|
||||
<string name="cross_profile_widget">Cross profile widget</string>
|
||||
<string name="credential_manage_policy">Credential manage policy</string>
|
||||
<string name="credential_manager_policy">Credential manager policy</string>
|
||||
<string name="whitelist_and_system_app">Whitelist and system app</string>
|
||||
<string name="permitted_packages_is">Permitted packages: \n</string>
|
||||
<string name="permitted_accessibility_services">Permitted accessibility services</string>
|
||||
|
||||
Reference in New Issue
Block a user