Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b8529f33 authored by Mark Renouf's avatar Mark Renouf Committed by Automerger Merge Worker
Browse files

Merge "Remove remaining references to 'delegate chooser'" into tm-dev am: 18ce89e9

parents 7777f061 18ce89e9
Loading
Loading
Loading
Loading
+6 −10
Original line number Diff line number Diff line
@@ -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.
@@ -984,6 +974,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);
+0 −14
Original line number Diff line number Diff line
@@ -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
+30 −34
Original line number Diff line number Diff line
@@ -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);
    }
}