mirror of
https://github.com/awfixers-stuff/OwnDroid.git
synced 2026-03-23 11:05:59 +00:00
Disable metered data for specific apps, close #109
Update workflow file
This commit is contained in:
1
.github/workflows/build.yml
vendored
1
.github/workflows/build.yml
vendored
@@ -3,6 +3,7 @@ name: Build APK
|
|||||||
on:
|
on:
|
||||||
workflow_dispatch:
|
workflow_dispatch:
|
||||||
push:
|
push:
|
||||||
|
branches: ["master"]
|
||||||
paths-ignore:
|
paths-ignore:
|
||||||
- '**.md'
|
- '**.md'
|
||||||
tags-ignore:
|
tags-ignore:
|
||||||
|
|||||||
@@ -148,7 +148,8 @@ fun ApplicationsScreen(onNavigateUp: () -> Unit) {
|
|||||||
) {
|
) {
|
||||||
composable<Home> { HomeScreen(pkgName) { navController.navigate(it) } }
|
composable<Home> { HomeScreen(pkgName) { navController.navigate(it) } }
|
||||||
composable<UserControlDisabledPackages> { UserControlDisabledPackagesScreen(pkgName) }
|
composable<UserControlDisabledPackages> { UserControlDisabledPackagesScreen(pkgName) }
|
||||||
composable<PermissionManager> { PermissionManagerScreen(pkgName) }
|
composable<PermissionsManager> { PermissionsScreen(pkgName) }
|
||||||
|
composable<DisableMeteredData> { DisableMeteredDataScreen(pkgName) }
|
||||||
composable<CrossProfilePackages> { CrossProfilePackagesScreen(pkgName) }
|
composable<CrossProfilePackages> { CrossProfilePackagesScreen(pkgName) }
|
||||||
composable<CrossProfileWidgetProviders> { CrossProfileWidgetProvidersScreen(pkgName) }
|
composable<CrossProfileWidgetProviders> { CrossProfileWidgetProvidersScreen(pkgName) }
|
||||||
composable<CredentialManagerPolicy> { CredentialManagerPolicyScreen(pkgName) }
|
composable<CredentialManagerPolicy> { CredentialManagerPolicyScreen(pkgName) }
|
||||||
@@ -230,7 +231,10 @@ private fun HomeScreen(pkgName: String, onNavigate: (Any) -> Unit) {
|
|||||||
FunctionItem(title = R.string.ucd, icon = R.drawable.do_not_touch_fill0) { onNavigate(UserControlDisabledPackages) }
|
FunctionItem(title = R.string.ucd, icon = R.drawable.do_not_touch_fill0) { onNavigate(UserControlDisabledPackages) }
|
||||||
}
|
}
|
||||||
if(VERSION.SDK_INT >= 23) {
|
if(VERSION.SDK_INT >= 23) {
|
||||||
FunctionItem(title = R.string.permission_manage, icon = R.drawable.key_fill0) { onNavigate(PermissionManager) }
|
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)) {
|
if(VERSION.SDK_INT >= 30 && profileOwner && dpm.isManagedProfile(receiver)) {
|
||||||
FunctionItem(title = R.string.cross_profile_package, icon = R.drawable.work_fill0) { onNavigate(CrossProfilePackages) }
|
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) }
|
FunctionItem(title = R.string.cross_profile_widget, icon = R.drawable.widgets_fill0) { onNavigate(CrossProfileWidgetProviders) }
|
||||||
}
|
}
|
||||||
if(VERSION.SDK_INT >= 34 && deviceOwner) {
|
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) {
|
FunctionItem(title = R.string.permitted_accessibility_services, icon = R.drawable.settings_accessibility_fill0) {
|
||||||
onNavigate(PermittedAccessibilityServices)
|
onNavigate(PermittedAccessibilityServices)
|
||||||
@@ -471,11 +475,11 @@ private fun UserControlDisabledPackagesScreen(pkgName:String) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Serializable private object PermissionManager
|
@Serializable private object PermissionsManager
|
||||||
|
|
||||||
@RequiresApi(23)
|
@RequiresApi(23)
|
||||||
@Composable
|
@Composable
|
||||||
private fun PermissionManagerScreen(pkgName: String) {
|
private fun PermissionsScreen(pkgName: String) {
|
||||||
val context = LocalContext.current
|
val context = LocalContext.current
|
||||||
val dpm = context.getDPM()
|
val dpm = context.getDPM()
|
||||||
val receiver = context.getReceiver()
|
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
|
@Serializable private object CrossProfilePackages
|
||||||
|
|
||||||
@RequiresApi(30)
|
@RequiresApi(30)
|
||||||
@@ -676,7 +720,7 @@ private fun CredentialManagerPolicyScreen(pkgName: String) { // TODO: rename "ma
|
|||||||
LaunchedEffect(Unit) { refreshPolicy() }
|
LaunchedEffect(Unit) { refreshPolicy() }
|
||||||
Column(modifier = Modifier.fillMaxSize().padding(horizontal = 8.dp).verticalScroll(rememberScrollState())) {
|
Column(modifier = Modifier.fillMaxSize().padding(horizontal = 8.dp).verticalScroll(rememberScrollState())) {
|
||||||
Spacer(Modifier.padding(vertical = 10.dp))
|
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))
|
Spacer(Modifier.padding(vertical = 5.dp))
|
||||||
RadioButtonItem(R.string.none, policyType == -1) { policyType = -1 }
|
RadioButtonItem(R.string.none, policyType == -1) { policyType = -1 }
|
||||||
RadioButtonItem(R.string.blacklist, policyType == PACKAGE_POLICY_BLOCKLIST) { policyType = PACKAGE_POLICY_BLOCKLIST }
|
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 ->
|
val choosePackage = rememberLauncherForActivityResult(ChoosePackageContract()) { result ->
|
||||||
result?.let { input = it }
|
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(
|
OutlinedTextField(
|
||||||
value = input, onValueChange = { input = it },
|
value = input, onValueChange = { input = it },
|
||||||
label = { Text(stringResource(R.string.package_name)) },
|
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">Отключить управление пользователем</string>
|
||||||
<string name="ucd_desc">Если вы установите этот флажок, вы не сможете очистить хранилище этих приложений или принудительно остановить их.</string>
|
<string name="ucd_desc">Если вы установите этот флажок, вы не сможете очистить хранилище этих приложений или принудительно остановить их.</string>
|
||||||
<string name="app_list_is">Список приложений:</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_package">Кросс-профильный пакет</string>
|
||||||
<string name="cross_profile_widget">Кросс-профильный виджет</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="whitelist_and_system_app">Белый список и системные приложения</string>
|
||||||
<string name="permitted_packages_is">Разрешенные пакеты: \n</string>
|
<string name="permitted_packages_is">Разрешенные пакеты: \n</string>
|
||||||
<string name="permitted_accessibility_services">Разрешенные службы доступности</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">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="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="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_package">Çapraz Profil Paketi</string>
|
||||||
<string name="cross_profile_widget">Çapraz Profil Widget\'ı</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="whitelist_and_system_app">Beyaz Liste ve Sistem Uygulaması</string>
|
||||||
<string name="permitted_packages_is">İzin Verilen Paketler: \n</string>
|
<string name="permitted_packages_is">İzin Verilen Paketler: \n</string>
|
||||||
<string name="permitted_accessibility_services">İzin Verilen Erişilebilirlik Servisleri</string>
|
<string name="permitted_accessibility_services">İzin Verilen Erişilebilirlik Servisleri</string>
|
||||||
|
|||||||
@@ -375,10 +375,10 @@
|
|||||||
<string name="ucd">禁止用户控制</string>
|
<string name="ucd">禁止用户控制</string>
|
||||||
<string name="ucd_desc">用户将无法清除这些应用的存储空间或强制停止这些应用</string>
|
<string name="ucd_desc">用户将无法清除这些应用的存储空间或强制停止这些应用</string>
|
||||||
<string name="app_list_is">应用列表:</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_package">跨资料应用</string>
|
||||||
<string name="cross_profile_widget">跨资料微件</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="whitelist_and_system_app">白名单和系统应用</string>
|
||||||
<string name="permitted_packages_is">许可的应用:\n</string>
|
<string name="permitted_packages_is">许可的应用:\n</string>
|
||||||
<string name="permitted_accessibility_services">许可的无障碍服务</string>
|
<string name="permitted_accessibility_services">许可的无障碍服务</string>
|
||||||
|
|||||||
@@ -414,10 +414,10 @@
|
|||||||
<string name="ucd">Disable user control</string>
|
<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="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="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_package">Cross profile package</string>
|
||||||
<string name="cross_profile_widget">Cross profile widget</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="whitelist_and_system_app">Whitelist and system app</string>
|
||||||
<string name="permitted_packages_is">Permitted packages: \n</string>
|
<string name="permitted_packages_is">Permitted packages: \n</string>
|
||||||
<string name="permitted_accessibility_services">Permitted accessibility services</string>
|
<string name="permitted_accessibility_services">Permitted accessibility services</string>
|
||||||
|
|||||||
Reference in New Issue
Block a user