diff --git a/app/src/main/java/foundation/e/parentalcontrol/DeviceAdmin.kt b/app/src/main/java/foundation/e/parentalcontrol/DeviceAdmin.kt index 47aef7790e5b3479dfe7c236ef78d342b6f77eba..b118bc0d482107eabe11bb29bfdb6b969f58f882 100644 --- a/app/src/main/java/foundation/e/parentalcontrol/DeviceAdmin.kt +++ b/app/src/main/java/foundation/e/parentalcontrol/DeviceAdmin.kt @@ -70,9 +70,7 @@ class DeviceAdmin : DeviceAdminReceiver() { private fun setSettings(context: Context) { if (isAdminActive(context)) { val mainUI = MainUI(context) - if (!BuildConfig.DEBUG) { - mainUI.setDefaultRestrictions() - } + mainUI.setDefaultRestrictions() mainUI.setDefaultMessages() } } diff --git a/app/src/main/java/foundation/e/parentalcontrol/MainActivity.kt b/app/src/main/java/foundation/e/parentalcontrol/MainActivity.kt index e46584516e0e240ed035251fd7a2e16300c499a6..6df8571710d61e7246a19641192c0c20b18cf197 100644 --- a/app/src/main/java/foundation/e/parentalcontrol/MainActivity.kt +++ b/app/src/main/java/foundation/e/parentalcontrol/MainActivity.kt @@ -782,6 +782,7 @@ class MainActivity : ComponentActivity() { SystemUtils.safeSetProp("persist.sys.mdm_active", "0") val mainUI = MainUI(mActivity) mainUI.blockAllUserApps(false) + mainUI.removePrivateDns() val devicePolicyManager: DevicePolicyManager = dA.getDevicePolicyManager(mActivity) if (dA.isDeviceOwnerApp(mActivity)) { devicePolicyManager.clearDeviceOwnerApp(mActivity.packageName) diff --git a/app/src/main/java/foundation/e/parentalcontrol/ui/view/MainUI.kt b/app/src/main/java/foundation/e/parentalcontrol/ui/view/MainUI.kt index 2837a519df86c5564d675ec05ebfdb48203def0b..a785a1fc7b31bb510a3fa60ab9ab274642d9bb58 100644 --- a/app/src/main/java/foundation/e/parentalcontrol/ui/view/MainUI.kt +++ b/app/src/main/java/foundation/e/parentalcontrol/ui/view/MainUI.kt @@ -23,11 +23,13 @@ import androidx.compose.runtime.remember import androidx.compose.runtime.setValue import androidx.compose.ui.res.stringResource import com.android.net.module.util.ConnectivitySettingsUtils +import foundation.e.parentalcontrol.BuildConfig import foundation.e.parentalcontrol.DeviceAdmin import foundation.e.parentalcontrol.R import foundation.e.parentalcontrol.data.LoginStatus import foundation.e.parentalcontrol.providers.AppLoungeData import foundation.e.parentalcontrol.ui.buttons.ToggleWithText +import foundation.e.parentalcontrol.utils.Constants import foundation.e.parentalcontrol.utils.DpmStringUtils import foundation.e.parentalcontrol.utils.PrefsUtils import foundation.e.parentalcontrol.utils.SystemUtils @@ -43,8 +45,6 @@ class MainUI(context: Context) { private var mContext: Context = context private val appSettingsRestriction = UserManager.DISALLOW_APPS_CONTROL - private val appInstallRestriction = UserManager.DISALLOW_INSTALL_APPS - private val appUnInstallRestriction = UserManager.DISALLOW_UNINSTALL_APPS private val appUnknownSourceRestriction = UserManager.DISALLOW_INSTALL_UNKNOWN_SOURCES private val dnsSettingsRestriction = UserManager.DISALLOW_CONFIG_PRIVATE_DNS private val multiUserRestriction = @@ -59,10 +59,6 @@ class MainUI(context: Context) { private var appSettingsToggleState by mutableStateOf(isThisRestrictionSet(appSettingsRestriction)) - private var appInstallSettingsToggleState by - mutableStateOf(isThisRestrictionSet(appInstallRestriction)) - private var appUninstallSettingsToggleState by - mutableStateOf(isThisRestrictionSet(appUnInstallRestriction)) private var appUnknownSourceSettingsToggleState by mutableStateOf(isThisRestrictionSet(appUnknownSourceRestriction)) private var dnsSettingsToggleState by @@ -80,7 +76,9 @@ class MainUI(context: Context) { if (!dA.isAdminActive(mContext)) return setRestriction(appSettingsRestriction) - setRestriction(developerSettingsRestriction) + if (!BuildConfig.DEBUG) { + setRestriction(developerSettingsRestriction) + } setRestriction(appUnknownSourceRestriction) setRestriction(factoryResetSettingsRestriction) @@ -89,24 +87,7 @@ class MainUI(context: Context) { multiUserRestriction.forEach { restriction -> setRestriction(restriction) } } - // Set default private dns - if (!isThisRestrictionSet(dnsSettingsRestriction)) { - val cloudflareDnsHostName = mContext.getString(R.string.family_cloudflare_dns_com) - devicePolicyManager.setGlobalSetting( - deviceAdminComponent, - ConnectivitySettingsUtils.PRIVATE_DNS_MODE, - ConnectivitySettingsUtils.PRIVATE_DNS_MODE_PROVIDER_HOSTNAME_STRING - ) - devicePolicyManager.setGlobalSetting( - deviceAdminComponent, - ConnectivitySettingsUtils.PRIVATE_DNS_SPECIFIER, - cloudflareDnsHostName - ) - } - - if (dA.isDeviceOwnerApp(mContext)) { - setRestriction(dnsSettingsRestriction) - } + setPrivateDns() blockBlackListedApps() } @@ -132,6 +113,76 @@ class MainUI(context: Context) { } } + fun removePrivateDns() { + var currentDnsHostMode = + PrefsUtils.getSharePref().getString(Constants.PREF_DNS_HOST_MODE, null) + var currentDnsHostName = + PrefsUtils.getSharePref().getString(Constants.PREF_DNS_HOST_NAME, null) + + if (currentDnsHostMode == null) { + currentDnsHostMode = ConnectivitySettingsUtils.PRIVATE_DNS_MODE_OPPORTUNISTIC_STRING + } + + devicePolicyManager.setGlobalSetting( + deviceAdminComponent, + ConnectivitySettingsUtils.PRIVATE_DNS_MODE, + currentDnsHostMode + ) + + if (currentDnsHostName == null) { + currentDnsHostName = "" + } + + devicePolicyManager.setGlobalSetting( + deviceAdminComponent, + ConnectivitySettingsUtils.PRIVATE_DNS_SPECIFIER, + currentDnsHostName + ) + + if (dA.isDeviceOwnerApp(mContext)) { + clearRestriction(dnsSettingsRestriction) + } + } + + private fun setPrivateDns() { + // Set default private dns + if (!isThisRestrictionSet(dnsSettingsRestriction)) { + val cloudflareDnsHostName = mContext.getString(R.string.family_cloudflare_dns_com) + val currentDnsHostMode = + Settings.Global.getString( + mContext.contentResolver, + ConnectivitySettingsUtils.PRIVATE_DNS_MODE + ) + val currentDnsHostName = + Settings.Global.getString( + mContext.contentResolver, + ConnectivitySettingsUtils.PRIVATE_DNS_SPECIFIER + ) + + PrefsUtils.getEdit() + .apply { + putString(Constants.PREF_DNS_HOST_MODE, currentDnsHostMode) + putString(Constants.PREF_DNS_HOST_NAME, currentDnsHostName) + } + .apply() + + devicePolicyManager.setGlobalSetting( + deviceAdminComponent, + ConnectivitySettingsUtils.PRIVATE_DNS_MODE, + ConnectivitySettingsUtils.PRIVATE_DNS_MODE_PROVIDER_HOSTNAME_STRING + ) + devicePolicyManager.setGlobalSetting( + deviceAdminComponent, + ConnectivitySettingsUtils.PRIVATE_DNS_SPECIFIER, + cloudflareDnsHostName + ) + } + + if (dA.isDeviceOwnerApp(mContext)) { + setRestriction(dnsSettingsRestriction) + } + } + fun blockAllUserApps(block: Boolean) { val installedApps = SystemUtils.getInstalledUserApps(mContext) @@ -189,7 +240,6 @@ class MainUI(context: Context) { deviceAdminComponent, mContext.getString(R.string.activate_admin_summary) ) - devicePolicyManager.setProfileName(deviceAdminComponent, "Child") devicePolicyManager.setOrganizationName(deviceAdminComponent, "Parent") if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { @@ -214,32 +264,6 @@ class MainUI(context: Context) { } ) - ToggleWithText( - text = stringResource(R.string.disable_installing_apps), - isChecked = appInstallSettingsToggleState, - onCheckedChange = { isActive -> - if (isActive) { - setRestriction(appInstallRestriction) - } else { - clearRestriction(appInstallRestriction) - } - appInstallSettingsToggleState = isActive - } - ) - - ToggleWithText( - text = stringResource(R.string.disable_uninstalling_apps), - isChecked = appUninstallSettingsToggleState, - onCheckedChange = { isActive -> - if (isActive) { - setRestriction(appUnInstallRestriction) - } else { - clearRestriction(appUnInstallRestriction) - } - appUninstallSettingsToggleState = isActive - } - ) - ToggleWithText( text = stringResource(R.string.disable_developer_options), isChecked = developerSettingsToggleState, @@ -285,28 +309,9 @@ class MainUI(context: Context) { isChecked = cloudflareToggleState.value, onCheckedChange = { isActive -> if (isActive) { - devicePolicyManager.setGlobalSetting( - deviceAdminComponent, - ConnectivitySettingsUtils.PRIVATE_DNS_MODE, - ConnectivitySettingsUtils.PRIVATE_DNS_MODE_PROVIDER_HOSTNAME_STRING - ) - devicePolicyManager.setGlobalSetting( - deviceAdminComponent, - ConnectivitySettingsUtils.PRIVATE_DNS_SPECIFIER, - cloudflareDnsHostName - ) - if (dA.isDeviceOwnerApp(mContext)) { - setRestriction(dnsSettingsRestriction) - } + setPrivateDns() } else { - devicePolicyManager.setGlobalSetting( - deviceAdminComponent, - ConnectivitySettingsUtils.PRIVATE_DNS_MODE, - ConnectivitySettingsUtils.PRIVATE_DNS_MODE_OPPORTUNISTIC_STRING - ) - if (dA.isDeviceOwnerApp(mContext)) { - clearRestriction(dnsSettingsRestriction) - } + removePrivateDns() } cloudflareToggleState.value = isActive } diff --git a/app/src/main/java/foundation/e/parentalcontrol/utils/Constants.kt b/app/src/main/java/foundation/e/parentalcontrol/utils/Constants.kt index 98f37750fc6cead4095b0178ab1a9cd541a7e0d7..cc120c76331a81b55d4116271fd5739331c5c5a2 100644 --- a/app/src/main/java/foundation/e/parentalcontrol/utils/Constants.kt +++ b/app/src/main/java/foundation/e/parentalcontrol/utils/Constants.kt @@ -13,6 +13,8 @@ object Constants { const val PREF_PASSWORD_SET = "password_set" const val PREF_PASSWORD = "password" const val PREF_AGE = "age" + const val PREF_DNS_HOST_MODE = "dns_host_mode" + const val PREF_DNS_HOST_NAME = "dns_host_name" const val RESTART_SERVICE = "foundation.e.parental_control.RESTART_SERVICE" diff --git a/app/src/main/java/foundation/e/parentalcontrol/utils/PrefsUtils.kt b/app/src/main/java/foundation/e/parentalcontrol/utils/PrefsUtils.kt index 91bd8f83dd9fdf827d84419de6ecd9de3709a632..b396559dc815d3d78a51d83b0c3c47a65ab30d8d 100644 --- a/app/src/main/java/foundation/e/parentalcontrol/utils/PrefsUtils.kt +++ b/app/src/main/java/foundation/e/parentalcontrol/utils/PrefsUtils.kt @@ -55,6 +55,10 @@ object PrefsUtils { sharedPreferences.edit().clear().apply() } + fun getSharePref(): SharedPreferences { + return sharedPreferences + } + fun saveBlockedApps(blockedApps: List) { val json = Gson().toJson(blockedApps) sharedPreferences.edit().putString(KEY_BLOCKED_APPS, json).apply() diff --git a/app/src/main/res/drawable-xhdpi/ic_notifications.png b/app/src/main/res/drawable-xhdpi/ic_notifications.png deleted file mode 100644 index 8957be928fceab6bc18143d971e28edd6ea4d7e3..0000000000000000000000000000000000000000 Binary files a/app/src/main/res/drawable-xhdpi/ic_notifications.png and /dev/null differ diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index 41ca11ae7a45a3e04510b5740b66dbc93bb16ac7..ade2bb1cc5b6673a0075997f21b86dc3bc5adc97 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -1,6 +1,5 @@ - Bloquea malware y contenido para adultos con cloudflare Control parental activado No se puede acceder a esta aplicación o configuración mientras el control parental está activado. \n @@ -34,16 +33,8 @@ 12-15 años 16-17 años Cambiar mi código de seguridad - Desactivar control de ajustes de la aplicación - Desactivar la instalación de aplicaciones - Desactivar la desinstalación de aplicaciones - Desactivar opciones de desarrollador - Desactivar restablecimiento de fábrica del dispositivo - Desactivar usuarios múltiples - Desactivar aplicaciones clasificadas para adultos Seguridad Debes ser el usuario principal para configurar control parental - Control parental reiniciado Para poder restringir el uso de aplicaciones según el grupo de edad que hayas seleccionado, tienes que iniciar sesión en App Lounge en modo Anónimo. \n \nMientras no lo hagas, solo podrás iniciar las aplicaciones predeterminadas. @@ -60,7 +51,6 @@ Seguridad > Aplicaciones de administración del dispositivo Abrir ajustes Escribe tu contraseña - Desactivar instalación de aplicaciones desde fuentes desconocidas Sólo se permiten números para el pin "Por favor, elimina los usuarios instalados antes de activar el control parental para un mejor control sobre el dispositivo. Las siguientes funciones no funcionarán si continúas: \n diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index 568b9d184f5e716fbb5e29d39dea0c4611ec36a1..664c15f3ba40ab282be4d8f91440e71a27602f66 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -27,14 +27,6 @@ 12–15 ans 16–17 ans Modifier mon code de sécurité - Désactiver les contrôles de paramètres d\'applications - Désactiver l\'installation d\'applications - Désactiver la désinstallation d\'applications - Désactiver les options développeur - Désactiver l\'installation d\'applications depuis des sources inconnues - Désactiver les utilisateurs multiples - Désactiver les applications à destination des adultes - Bloquer les malwares et les contenus pour adultes avec le Cloudflare Le Contrôle Parental est activé Sécurité Seuls les chiffres sont autorisés pour le code PIN @@ -46,7 +38,6 @@ Vous ne pouvez pas accéder à cette application ou à ce paramètre tant que le Contrôle Parental est activé. \n \nL\'accès à une application dépend de l\'évaluation de son contenu par rapport à la tranche d\'âge définie dans l\'application de Contrôle Parental. - Parental Control a redemarré Pour pouvoir restreindre l\'usage des applications en fonction de la tranche d\'âge sélectionnée, vous devez vous connecter à App Lounge en utilisant le mode Anonyme. \n \nEn attendant que vous le fassiez, seules les applications par défaut seront utilisables. @@ -66,5 +57,4 @@ Sécurité > Applis d\'administration de l\'appareil Ouvrir les paramètres Merci de sélectionner la tranche d\'âge de votre enfant pour que la protection activée par le contrôle parental soit adaptée. - Désactiver l\'option de réinitialisation du téléphone \ No newline at end of file diff --git a/app/src/main/res/values-is/strings.xml b/app/src/main/res/values-is/strings.xml index fe5a0b67810bc9701019fbe770fd49ca1f105f8c..c1acc63fb5cb5656a87805d5bd46e5357b1ba5c9 100644 --- a/app/src/main/res/values-is/strings.xml +++ b/app/src/main/res/values-is/strings.xml @@ -9,7 +9,6 @@ Settu PIN-númer Þetta forrit veitir vörn gegn óviðeigandi efni fyrir börnin þín og unglinga. Þú getur virkjað þessa eiginleika þegar þú lánar símann þinn til barns eða haft þetta virkt á tækjunum þeirra. Veldu aldurshóp barnsins þannig að viðeigandi varnir barnalæsingarinnar séu virkjaðar. - Gera stýringu forritastillinga óvirka Þú þarft að vera inni sem aðalnotandi til að stilla barnalæsingu "Fjarlægðu uppsetta notendur áður en barnalæsing er virkjuð til að hafa betri stjórn á tækinu. Eiginleikarnir hér fyrir neðan virka ekki ef þú heldur áfram: \n @@ -29,13 +28,9 @@ Annað tækjastjórnunarforrit fannst. Gerðu það óvirkt eða fjarlægðu það áður en barnalæsing er virkjuð. Til að fjarlægja það, ættirðu að fara í stillingarnar hér fyrir neðan. \n \n - Gera marga notendur óvirka - Gera forrit flokkuð fyrir fullorðna óvirk - Loka á spilliforrit og fullorðinsefni með Cloudflare Barnalæsing er virk Öryggi Einungis tölur eru leyfðar í PIN-númerum - Barnalæsing endurræst Innskráningar krafist Ræsa App Lounge Henda @@ -62,9 +57,4 @@ 12–15 ára 16–17 ára Breyta öryggiskóðanum mínum - Koma í veg fyrir uppsetningu forrita - Koma í veg fyrir fjarlægingu forrita - Gera stillingar fyrir forritara óvirkar - Koma í veg fyrir uppsetningu forrita með óþekktan uppruna - Koma í veg fyrir núllstillingu á verksmiðjustillingar \ No newline at end of file diff --git a/app/src/main/res/values-ml/strings.xml b/app/src/main/res/values-ml/strings.xml index ba13bf46d649759c4e893675898343e3526fe899..aa81b5083a1a57c34d1dfb6dd82cb94ea1da2121 100644 --- a/app/src/main/res/values-ml/strings.xml +++ b/app/src/main/res/values-ml/strings.xml @@ -23,7 +23,6 @@ 12-15 വയസ്സ് 16-17 വയസ്സ് എൻ്റെ സുരക്ഷാ കോഡ് മാറ്റുക - ക്ലൗഡ്ഫ്ലെയർ ഉപയോഗിച്ച് ക്ഷുദ്രവെയറും മുതിർന്നവർക്കുള്ള ഉള്ളടക്കവും തടയുക രക്ഷാകർതൃ നിയന്ത്രണം സജീവമാക്കി സുരക്ഷ പിൻ ചെയ്യാൻ അനുവദിച്ചിരിക്കുന്ന നമ്പറുകൾ മാത്രം diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml index 915150da1307364bd8c12bdfc037420b7446aa71..2a11efdb211406ca903143fde847a2d2284fe8ef 100644 --- a/app/src/main/res/values-tr/strings.xml +++ b/app/src/main/res/values-tr/strings.xml @@ -5,10 +5,7 @@ Ebeveyn kontrolü açıkken bu uygulamaya veya ayara erişilemez. \n \nBir uygulamaya erişim, ebeveyn kontrolü uygulamasında ayarladığınız yaş grubuyla ilgili içerik derecelendirmesine bağlıdır. - Cloudflare ile kötü amaçlı yazılımları ve yetişkinlere yönelik içeriği engelle En az 4 hane olmalıdır - Uygulama kaldırmayı devre dışı bırak - Fabrika ayarlarına sıfırlamayı devre dışı bırak "Cihazınız üzerinde daha iyi kontrol için lütfen ebeveyn kontrolünü etkinleştirmeden önce yüklü kullanıcıları kaldırın. Devam ederseniz aşağıdaki özellikler çalışmayacaktır: \n \n @@ -40,17 +37,10 @@ 12-15 yaş 16-17 yaş Güvenlik kodumu değiştir - Uygulama ayarları kontrolünü devre dışı bırak - Uygulama yüklemeyi devre dışı bırak - Geliştirici seçeneklerini devre dışı bırak - Bilinmeyen kaynaklardan uygulama yüklemeyi devre dışı bırak - Birden fazla kullanıcıyı devre dışı bırakm - Yetişkinler için derecelendirilmiş uygulamaları devre dışı bırak Ebeveyn kontrolü etkinleştirildi Güvenlik Pin için sadece numaralara izin verilir Ebeveyn kontrolünü ayarlamak için ana kullanıcı olmalısınız - Ebeveyn kontrolü yeniden başlatıldı Uygulamaların kullanımını seçtiğiniz yaş grubuna göre kısıtlayabilmek için Anonim mod üzerinden App Lounge\'da oturum açmanız gerekir. \n \nBunu yapana kadar, yalnızca varsayılan uygulamaları başlatabileceksiniz. diff --git a/app/src/main/res/values/debug_strings.xml b/app/src/main/res/values/debug_strings.xml index 8f5206b988c6a3e41f7b9fdc118192350891e161..56d0346259bf3ff91d5464ffe99b5e484d682244 100644 --- a/app/src/main/res/values/debug_strings.xml +++ b/app/src/main/res/values/debug_strings.xml @@ -1,8 +1,6 @@ Disable app settings control - Disable installing apps - Disable uninstalling apps Disable developer options Disable installing apps from unknown sources Disable factory reset device