From 3b1fb478caaa51bc0694ab993b0a9090febf4c3e Mon Sep 17 00:00:00 2001 From: frknkrc44 Date: Mon, 1 Sep 2025 20:32:26 +0300 Subject: [PATCH] Add risky package warning with bypass switch --- .../hidemyapplist/service/PrefManager.kt | 5 +++++ .../ui/adapter/AppManageAdapter.kt | 19 +++++++++++++++++++ .../ui/fragment/SettingsFragment.kt | 7 +++++++ .../hidemyapplist/ui/view/AppItemView.kt | 2 +- app/src/main/res/values/strings.xml | 4 ++++ app/src/main/res/xml/settings.xml | 5 +++++ 6 files changed, 41 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/icu/nullptr/hidemyapplist/service/PrefManager.kt b/app/src/main/java/icu/nullptr/hidemyapplist/service/PrefManager.kt index 022a034..eef3c8e 100644 --- a/app/src/main/java/icu/nullptr/hidemyapplist/service/PrefManager.kt +++ b/app/src/main/java/icu/nullptr/hidemyapplist/service/PrefManager.kt @@ -19,6 +19,7 @@ object PrefManager { private const val PREF_THEME_COLOR = "theme_color" private const val PREF_HIDE_ICON = "hide_icon" + private const val PREF_BYPASS_RISKY_PACKAGE_WARNING = "bypass_risky_package_warning" private const val PREF_APP_FILTER_SHOW_SYSTEM = "app_filter_show_system" private const val PREF_APP_FILTER_SORT_METHOD = "app_filter_sort_method" @@ -67,6 +68,10 @@ object PrefManager { hmaApp.packageManager.setComponentEnabledSetting(component, status, PackageManager.DONT_KILL_APP) } + var bypassRiskyPackageWarning: Boolean + get() = pref.getBoolean(PREF_BYPASS_RISKY_PACKAGE_WARNING, false) + set(value) = pref.edit().putBoolean(PREF_BYPASS_RISKY_PACKAGE_WARNING, value).apply() + var appFilter_showSystem: Boolean get() = pref.getBoolean(PREF_APP_FILTER_SHOW_SYSTEM, false) set(value) = pref.edit().putBoolean(PREF_APP_FILTER_SHOW_SYSTEM, value).apply() diff --git a/app/src/main/java/icu/nullptr/hidemyapplist/ui/adapter/AppManageAdapter.kt b/app/src/main/java/icu/nullptr/hidemyapplist/ui/adapter/AppManageAdapter.kt index 75f1713..e50c71d 100644 --- a/app/src/main/java/icu/nullptr/hidemyapplist/ui/adapter/AppManageAdapter.kt +++ b/app/src/main/java/icu/nullptr/hidemyapplist/ui/adapter/AppManageAdapter.kt @@ -1,16 +1,35 @@ package icu.nullptr.hidemyapplist.ui.adapter import android.view.ViewGroup +import com.google.android.material.dialog.MaterialAlertDialogBuilder +import icu.nullptr.hidemyapplist.common.Constants.GMS_PACKAGE_NAME +import icu.nullptr.hidemyapplist.common.Constants.GSF_PACKAGE_NAME import icu.nullptr.hidemyapplist.service.ConfigManager +import icu.nullptr.hidemyapplist.service.PrefManager import icu.nullptr.hidemyapplist.ui.view.AppItemView +import org.frknkrc44.hma_oss.R class AppManageAdapter( private val onItemClickListener: (String) -> Unit ) : AppSelectAdapter() { + private val riskyPackages = arrayOf(GMS_PACKAGE_NAME, GSF_PACKAGE_NAME) inner class ViewHolder(view: AppItemView) : AppSelectAdapter.ViewHolder(view) { init { view.setOnClickListener { + if (!PrefManager.bypassRiskyPackageWarning && riskyPackages.contains(view.binding.packageName.text)) { + MaterialAlertDialogBuilder(view.context) + .setTitle(R.string.app_warning_risky_package_title) + .setMessage(R.string.app_warning_risky_package_desc) + .setNegativeButton(android.R.string.cancel, null) + .setPositiveButton(android.R.string.ok) { _, _ -> + onItemClickListener.invoke(filteredList[absoluteAdapterPosition]) + } + .show() + + return@setOnClickListener + } + onItemClickListener.invoke(filteredList[absoluteAdapterPosition]) } } diff --git a/app/src/main/java/icu/nullptr/hidemyapplist/ui/fragment/SettingsFragment.kt b/app/src/main/java/icu/nullptr/hidemyapplist/ui/fragment/SettingsFragment.kt index 6a86d59..05b8ecf 100644 --- a/app/src/main/java/icu/nullptr/hidemyapplist/ui/fragment/SettingsFragment.kt +++ b/app/src/main/java/icu/nullptr/hidemyapplist/ui/fragment/SettingsFragment.kt @@ -97,6 +97,7 @@ class SettingsFragment : Fragment(R.layout.fragment_settings), PreferenceFragmen "blackDarkTheme" -> PrefManager.blackDarkTheme "detailLog" -> ConfigManager.detailLog "hideIcon" -> PrefManager.hideIcon + "bypassRiskyPackageWarning" -> PrefManager.bypassRiskyPackageWarning "appDataIsolation" -> CommonUtils.isAppDataIsolationEnabled "voldAppDataIsolation" -> CommonUtils.isVoldAppDataIsolationEnabled "forceMountData" -> ConfigManager.forceMountData @@ -121,6 +122,7 @@ class SettingsFragment : Fragment(R.layout.fragment_settings), PreferenceFragmen "detailLog" -> ConfigManager.detailLog = value "forceMountData" -> ConfigManager.forceMountData = value "hideIcon" -> PrefManager.hideIcon = value + "bypassRiskyPackageWarning" -> PrefManager.bypassRiskyPackageWarning = value "appDataIsolation" -> Unit "voldAppDataIsolation" -> Unit else -> throw IllegalArgumentException("Invalid key: $key") @@ -267,6 +269,11 @@ class SettingsFragment : Fragment(R.layout.fragment_settings), PreferenceFragmen configureDataIsolation() + findPreference("bypassRiskyPackageWarning")?.setOnPreferenceChangeListener { _, newValue -> + activity?.recreate() + true + } + findPreference("stopSystemService")?.setOnPreferenceClickListener { if (ServiceClient.serviceVersion != 0) { MaterialAlertDialogBuilder(requireContext()) diff --git a/app/src/main/java/icu/nullptr/hidemyapplist/ui/view/AppItemView.kt b/app/src/main/java/icu/nullptr/hidemyapplist/ui/view/AppItemView.kt index 742dcc5..1589e39 100644 --- a/app/src/main/java/icu/nullptr/hidemyapplist/ui/view/AppItemView.kt +++ b/app/src/main/java/icu/nullptr/hidemyapplist/ui/view/AppItemView.kt @@ -15,7 +15,7 @@ class AppItemView @JvmOverloads constructor( defStyleRes: Int = 0 ) : LinearLayout(context, attrs, defStyleAttr, defStyleRes) { - private val binding by viewBinding(createMethod = CreateMethod.INFLATE) + val binding by viewBinding(createMethod = CreateMethod.INFLATE) var showEnabled: Boolean get() = binding.enabled.visibility == VISIBLE diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 8e0c3bb..d7df6d9 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -94,6 +94,8 @@ Using %d settings presets %d additional apps visible %d additional apps invisible + Risky package + This package is marked as risky and you can cause issues on hidden apps. Do you want to continue? Risky package @@ -142,6 +144,8 @@ Logger buffer sizes Hide module icon in launcher You can still open the app in Xposed manager + Bypass risky package warning + Note that the devs are not responsible for risky package related issues before or after you enabled this feature Language Participate in translation diff --git a/app/src/main/res/xml/settings.xml b/app/src/main/res/xml/settings.xml index b67f301..421ab63 100644 --- a/app/src/main/res/xml/settings.xml +++ b/app/src/main/res/xml/settings.xml @@ -33,6 +33,11 @@ +