summaryrefslogtreecommitdiff
path: root/java/src
diff options
context:
space:
mode:
author Govinda Wasserman <gwasserman@google.com> 2023-05-23 11:54:43 -0400
committer Govinda Wasserman <gwasserman@google.com> 2023-05-23 16:23:46 -0400
commit7bb7e8e7249e7aa154c39d4a2210265307817b87 (patch)
tree56aa019e637516e2c99985dd6449fac5beb88aa0 /java/src
parent4d81a24902db8cf6e3f8bdb22333441d62be28fb (diff)
Fix ChooserActivity stuck disabled
If a device upgrades straight from TM QPR3 to UDC it would get stuck with ChooserActivity disabled. This change returns ChooserActivity to its default enabled/disabled state on boot. This class can be safely removed once there are no longer devices upgrading from TM QPR3. Test: Flash device to TM QPR3 with wipe Test: Fully boot the device Test: Flash device to UDC (including this change) without wipe Test: Fully boot the device Test: $ adb shell pm resolve-activity -a android.intent.action.CHOOSER Test: Observe that the intent resolves to com.android.intentresolver.ChooserActivity BUG: 283722356 FIX: 283722356 Change-Id: I04621bc64fd2b536da40d2b21793e7dc5d91a1c7
Diffstat (limited to 'java/src')
-rw-r--r--java/src/com/android/intentresolver/ChooserActivityReEnabler.kt39
1 files changed, 39 insertions, 0 deletions
diff --git a/java/src/com/android/intentresolver/ChooserActivityReEnabler.kt b/java/src/com/android/intentresolver/ChooserActivityReEnabler.kt
new file mode 100644
index 00000000..3236c1be
--- /dev/null
+++ b/java/src/com/android/intentresolver/ChooserActivityReEnabler.kt
@@ -0,0 +1,39 @@
+package com.android.intentresolver
+
+import android.content.BroadcastReceiver
+import android.content.ComponentName
+import android.content.Context
+import android.content.Intent
+import android.content.pm.PackageManager
+
+/**
+ * Ensures that the unbundled version of [ChooserActivity] does not get stuck in a disabled state.
+ */
+class ChooserActivityReEnabler : BroadcastReceiver() {
+
+ override fun onReceive(context: Context, intent: Intent) {
+ if (intent.action == Intent.ACTION_BOOT_COMPLETED) {
+ context.packageManager.setComponentEnabledSetting(
+ CHOOSER_COMPONENT,
+ PackageManager.COMPONENT_ENABLED_STATE_DEFAULT,
+ /* flags = */ 0,
+ )
+
+ // This only needs to be run once, so we disable ourself to avoid additional startup
+ // process on future boots
+ context.packageManager.setComponentEnabledSetting(
+ SELF_COMPONENT,
+ PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
+ /* flags = */ 0,
+ )
+ }
+ }
+
+ companion object {
+ private const val CHOOSER_PACKAGE = "com.android.intentresolver"
+ private val CHOOSER_COMPONENT =
+ ComponentName(CHOOSER_PACKAGE, "$CHOOSER_PACKAGE.ChooserActivity")
+ private val SELF_COMPONENT =
+ ComponentName(CHOOSER_PACKAGE, "$CHOOSER_PACKAGE.ChooserActivityReEnabler")
+ }
+}