Browse Source

feat: language switcher with platform signed on privileged

septs 2 weeks ago
parent
commit
6837aba211

+ 11 - 1
app/src/main/java/im/angry/openeuicc/ui/PrivilegedSettingsFragment.kt

@@ -1,5 +1,6 @@
 package im.angry.openeuicc.ui
 
+import android.content.pm.PackageManager
 import android.os.Bundle
 import androidx.preference.CheckBoxPreference
 import androidx.preference.Preference
@@ -7,6 +8,13 @@ import im.angry.openeuicc.R
 import im.angry.openeuicc.util.*
 
 class PrivilegedSettingsFragment : SettingsFragment(), PrivilegedEuiccContextMarker {
+    private val isSignedWithPlatformKey by lazy {
+        val info = with(requireContext()) {
+            packageManager.getApplicationInfo(packageName, PackageManager.GET_META_DATA)
+        }
+        info.javaClass.getMethod("isSignedWithPlatformKey").invoke(info) as Boolean
+    }
+
     override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
         super.onCreatePreferences(savedInstanceState, rootKey)
         addPreferencesFromResource(R.xml.pref_privileged_settings)
@@ -18,7 +26,9 @@ class PrivilegedSettingsFragment : SettingsFragment(), PrivilegedEuiccContextMar
         // This is disabled here, not moved to unprivileged, because I have hope that this will
         // eventually work for platform-signed apps. Or, at some point we might introduce our own
         // locale picker, which hopefully works whether privileged or not.
-        requirePreference<Preference>("pref_advanced_language").isVisible = false
+        requirePreference<Preference>("pref_advanced_language").apply {
+            isVisible = isVisible && !isSignedWithPlatformKey
+        }
 
         // Force use TelephonyManager API
         requirePreference<CheckBoxPreference>("pref_developer_removable_telephony_manager")