diff options
3 files changed, 36 insertions, 58 deletions
diff --git a/core/java/com/android/internal/app/ChooserActivity.java b/core/java/com/android/internal/app/ChooserActivity.java index 88089b5b85f2..d4a8a164803f 100644 --- a/core/java/com/android/internal/app/ChooserActivity.java +++ b/core/java/com/android/internal/app/ChooserActivity.java @@ -167,16 +167,6 @@ public class ChooserActivity extends ResolverActivity implements public static final String EXTRA_PRIVATE_RETAIN_IN_ON_STOP = "com.android.internal.app.ChooserActivity.EXTRA_PRIVATE_RETAIN_IN_ON_STOP"; - /** - * Boolean extra added to "unbundled Sharesheet" delegation intents to signal whether the app - * prediction service is available. Our query of the service <em>availability</em> depends on - * privileges that are only available in the system, even though the service itself would then - * be available to the unbundled component. For now, we just include the query result as part of - * the handover intent. - * TODO: investigate whether the privileged query is necessary to determine the availability. - */ - public static final String EXTRA_IS_APP_PREDICTION_SERVICE_AVAILABLE = - "com.android.internal.app.ChooserActivity.EXTRA_IS_APP_PREDICTION_SERVICE_AVAILABLE"; /** * Transition name for the first image preview. @@ -985,6 +975,12 @@ public class ChooserActivity extends ResolverActivity implements } @Override + protected void onResume() { + super.onResume(); + Log.d(TAG, "onResume: " + getComponentName().flattenToShortString()); + } + + @Override public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); ViewPager viewPager = findViewById(R.id.profile_pager); diff --git a/core/java/com/android/internal/app/ResolverActivity.java b/core/java/com/android/internal/app/ResolverActivity.java index ea8589bddabb..bfd8ff923dc1 100644 --- a/core/java/com/android/internal/app/ResolverActivity.java +++ b/core/java/com/android/internal/app/ResolverActivity.java @@ -157,8 +157,6 @@ public class ResolverActivity extends Activity implements /** See {@link #setRetainInOnStop}. */ private boolean mRetainInOnStop; - protected static final int REQUEST_CODE_RETURN_FROM_DELEGATE_CHOOSER = 20; - private static final String EXTRA_SHOW_FRAGMENT_ARGS = ":settings:show_fragment_args"; private static final String EXTRA_FRAGMENT_ARG_KEY = ":settings:fragment_args_key"; private static final String OPEN_LINKS_COMPONENT_KEY = "app_link_state"; @@ -1374,18 +1372,6 @@ public class ResolverActivity extends Activity implements .write(); } - @Override - public void onActivityResult(int requestCode, int resultCode, Intent data) { - switch (requestCode) { - case REQUEST_CODE_RETURN_FROM_DELEGATE_CHOOSER: - // Repeat the delegate's result as our own. - setResult(resultCode, data); - finish(); - break; - default: - super.onActivityResult(requestCode, resultCode, data); - } - } public void onActivityStarted(TargetInfo cti) { // Do nothing diff --git a/services/core/java/com/android/server/pm/IntentResolverInterceptor.java b/services/core/java/com/android/server/pm/IntentResolverInterceptor.java index 603badb276b2..f5eee5ac160d 100644 --- a/services/core/java/com/android/server/pm/IntentResolverInterceptor.java +++ b/services/core/java/com/android/server/pm/IntentResolverInterceptor.java @@ -23,11 +23,12 @@ import android.annotation.Nullable; import android.annotation.RequiresPermission; import android.content.ComponentName; import android.content.Context; -import android.content.Intent; import android.content.res.Resources; import android.provider.DeviceConfig; +import android.util.Slog; import com.android.internal.R; +import com.android.internal.app.ChooserActivity; import com.android.internal.config.sysui.SystemUiDeviceConfigFlags; import com.android.server.LocalServices; import com.android.server.wm.ActivityInterceptorCallback; @@ -35,25 +36,28 @@ import com.android.server.wm.ActivityInterceptorCallback.ActivityInterceptorInfo import com.android.server.wm.ActivityTaskManagerInternal; /** - * Service to register an {@code ActivityInterceptorCallback} that modifies any {@code Intent} - * that's being used to launch a user-space {@code ChooserActivity} by setting the destination - * component to the delegated component when appropriate. + * Redirects Activity starts for the system bundled {@link ChooserActivity} to an external + * Sharesheet implementation by modifying the target component when appropriate. + * <p> + * Note: config_chooserActivity (Used also by ActivityTaskSupervisor) is already updated to point + * to the new instance. This value is read and used for the new target component. */ public final class IntentResolverInterceptor { private static final String TAG = "IntentResolverIntercept"; - private final Context mContext; - private boolean mUseDelegateChooser; + private final ComponentName mFrameworkChooserComponent; + private final ComponentName mUnbundledChooserComponent; + private boolean mUseUnbundledSharesheet; private final ActivityInterceptorCallback mActivityInterceptorCallback = new ActivityInterceptorCallback() { @Nullable @Override public ActivityInterceptResult intercept(ActivityInterceptorInfo info) { - if (mUseDelegateChooser && isChooserActivity(info)) { - return new ActivityInterceptResult( - modifyChooserIntent(info.intent), - info.checkedOptions); + if (mUseUnbundledSharesheet && isSystemChooserActivity(info)) { + Slog.d(TAG, "Redirecting to UNBUNDLED Sharesheet"); + info.intent.setComponent(mUnbundledChooserComponent); + return new ActivityInterceptResult(info.intent, info.checkedOptions); } return null; } @@ -61,10 +65,13 @@ public final class IntentResolverInterceptor { public IntentResolverInterceptor(Context context) { mContext = context; + mFrameworkChooserComponent = new ComponentName(mContext, ChooserActivity.class); + mUnbundledChooserComponent = ComponentName.unflattenFromString( + Resources.getSystem().getString(R.string.config_chooserActivity)); } /** - * Start listening for intents and USE_DELEGATE_CHOOSER property changes. + * Start listening for intents and USE_UNBUNDLED_SHARESHEET property changes. */ @RequiresPermission(Manifest.permission.READ_DEVICE_CONFIG) public void registerListeners() { @@ -73,36 +80,25 @@ public final class IntentResolverInterceptor { mActivityInterceptorCallback); DeviceConfig.addOnPropertiesChangedListener(DeviceConfig.NAMESPACE_SYSTEMUI, - mContext.getMainExecutor(), properties -> updateUseDelegateChooser()); - updateUseDelegateChooser(); + mContext.getMainExecutor(), properties -> updateUseUnbundledSharesheet()); + updateUseUnbundledSharesheet(); } @RequiresPermission(Manifest.permission.READ_DEVICE_CONFIG) - private void updateUseDelegateChooser() { - mUseDelegateChooser = DeviceConfig.getBoolean( + private void updateUseUnbundledSharesheet() { + mUseUnbundledSharesheet = DeviceConfig.getBoolean( DeviceConfig.NAMESPACE_SYSTEMUI, SystemUiDeviceConfigFlags.USE_UNBUNDLED_SHARESHEET, false); + if (mUseUnbundledSharesheet) { + Slog.d(TAG, "using UNBUNDLED Sharesheet"); + } else { + Slog.d(TAG, "using FRAMEWORK Sharesheet"); + } } - private Intent modifyChooserIntent(Intent intent) { - intent.setComponent(getUnbundledChooserComponentName()); - return intent; - } - - private static boolean isChooserActivity(ActivityInterceptorInfo info) { - ComponentName targetComponent = new ComponentName(info.aInfo.packageName, info.aInfo.name); - - return targetComponent.equals(getSystemChooserComponentName()) - || targetComponent.equals(getUnbundledChooserComponentName()); - } - - private static ComponentName getSystemChooserComponentName() { - return new ComponentName("android", "com.android.internal.app.ChooserActivity"); - } - - private static ComponentName getUnbundledChooserComponentName() { - return ComponentName.unflattenFromString( - Resources.getSystem().getString(R.string.config_chooserActivity)); + private boolean isSystemChooserActivity(ActivityInterceptorInfo info) { + return mFrameworkChooserComponent.getPackageName().equals(info.aInfo.packageName) + && mFrameworkChooserComponent.getClassName().equals(info.aInfo.name); } } |