summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Govinda Wasserman <gwasserman@google.com> 2023-07-17 10:27:43 -0400
committer Govinda Wasserman <gwasserman@google.com> 2023-12-12 12:07:02 -0500
commitdd10bf5818019d58b19f735bfb5c1091d057b8f6 (patch)
tree06378e9838ceb2ed9df84258c1632cbc79d08f51
parentcd0a55e83be5c8b9e99c7d0ced6dd17a7bb349e9 (diff)
Creates ChooserActivity alias
This alias allows us to avoid a bug that caused Share Sheet to crash any app that tried to use it. It also removes the previous solution as it had the potential to not take effect if too many receivers tried to act on the BOOT_COMPLETE broadcast. Test: $ adb root Test: $ adb shell pm disable com.android.intentresolver/.ChooserActivity Test: $ adb shell pm resolve-activity -a android.intent.action.CHOOSER Test: Verify that the activity resolves BUG: 283722356 FIX: 283722356 Change-Id: I820c5f88204c83e635cb877b222bdf6cbe53aaff Merged-In: I820c5f88204c83e635cb877b222bdf6cbe53aaff
-rw-r--r--AndroidManifest.xml33
-rw-r--r--java/src/com/android/intentresolver/ChooserActivityReEnabler.kt39
2 files changed, 16 insertions, 56 deletions
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index da781a22..17a35347 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -36,7 +36,6 @@
<uses-permission android:name="android.permission.START_ACTIVITY_AS_CALLER" />
<uses-permission android:name="android.permission.UNLIMITED_SHORTCUTS_API_CALLS" />
<uses-permission android:name="android.permission.QUERY_CLONED_APPS" />
- <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<application
android:hardwareAccelerated="true"
@@ -46,15 +45,12 @@
android:requiredForAllUsers="true"
android:supportsRtl="true">
- <activity android:name=".ChooserActivity"
- android:theme="@style/Theme.DeviceDefault.Chooser"
- android:finishOnCloseSystemDialogs="true"
- android:excludeFromRecents="true"
- android:documentLaunchMode="never"
- android:relinquishTaskIdentity="true"
- android:configChanges="screenSize|smallestScreenSize|screenLayout|keyboard|keyboardHidden"
- android:visibleToInstantApps="true"
- android:exported="true">
+ <!-- This alias needs to be maintained until there are no more devices that could be
+ upgrading from T QPR3. (b/283722356) -->
+ <activity-alias
+ android:name=".ChooserActivityLauncher"
+ android:targetActivity=".ChooserActivity"
+ android:exported="true">
<!-- This intent filter is assigned a priority greater than 100 so
that it will take precedence over the framework ChooserActivity
@@ -65,14 +61,17 @@
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.VOICE" />
</intent-filter>
- </activity>
+ </activity-alias>
- <receiver android:name=".ChooserActivityReEnabler"
- android:exported="true">
- <intent-filter>
- <action android:name="android.intent.action.BOOT_COMPLETED" />
- </intent-filter>
- </receiver>
+ <activity android:name=".ChooserActivity"
+ android:theme="@style/Theme.DeviceDefault.Chooser"
+ android:finishOnCloseSystemDialogs="true"
+ android:excludeFromRecents="true"
+ android:documentLaunchMode="never"
+ android:relinquishTaskIdentity="true"
+ android:configChanges="screenSize|smallestScreenSize|screenLayout|keyboard|keyboardHidden"
+ android:visibleToInstantApps="true"
+ android:exported="false"/>
</application>
diff --git a/java/src/com/android/intentresolver/ChooserActivityReEnabler.kt b/java/src/com/android/intentresolver/ChooserActivityReEnabler.kt
deleted file mode 100644
index 3236c1be..00000000
--- a/java/src/com/android/intentresolver/ChooserActivityReEnabler.kt
+++ /dev/null
@@ -1,39 +0,0 @@
-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")
- }
-}