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

Commit 0c82ed90 authored by Joshua Trask's avatar Joshua Trask Committed by Matt Casey
Browse files

Remove system call to "headless" unbundled chooser

The behavior of proxying through a headless implementation of
the unbundled component was left over from an earlier stage of
the migration ("phase 2" of go/sharesheet-unbundling-phases).

This headless use is no longer supported in the unbundled
component, and it seems that some users are triggering this
code path even when unbundling is disabled -- resulting in
displaying both the "legacy" (system-side) UI and then, when
a share target is selected, the new unbundled UI (which is
no longer "headless").

Bug: 213348070
Change-Id: I146b42e9624d795cfa6689b6a417778ae912d8b5
Test: manual verification of crash fix, atest ChooserActivityTest
parent efc2678c
Loading
Loading
Loading
Loading
+3 −33
Original line number Diff line number Diff line
@@ -33,7 +33,6 @@ import android.annotation.StringRes;
import android.annotation.UiThread;
import android.app.Activity;
import android.app.ActivityManager;
import android.app.ActivityTaskManager;
import android.app.ActivityThread;
import android.app.VoiceInteractor.PickOptionRequest;
import android.app.VoiceInteractor.PickOptionRequest.Option;
@@ -54,13 +53,11 @@ import android.content.pm.PackageManager.NameNotFoundException;
import android.content.pm.ResolveInfo;
import android.content.pm.UserInfo;
import android.content.res.Configuration;
import android.content.res.Resources;
import android.content.res.TypedArray;
import android.graphics.Insets;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.os.IBinder;
import android.os.PatternMatcher;
import android.os.RemoteException;
import android.os.StrictMode;
@@ -1464,36 +1461,9 @@ public class ResolverActivity extends Activity implements

    public boolean startAsCallerImpl(Intent intent, Bundle options, boolean ignoreTargetSecurity,
            int userId) {
        // Pass intent to delegate chooser activity with permission token.
        // TODO: This should move to a trampoline Activity in the system when the ChooserActivity
        // moves into systemui
        try {
            // TODO: Once this is a small springboard activity, it can move off the UI process
            // and we can move the request method to ActivityManagerInternal.
            final Intent chooserIntent = new Intent();
            final ComponentName delegateActivity = ComponentName.unflattenFromString(
                    Resources.getSystem().getString(R.string.config_chooserActivity));
            IBinder permissionToken = ActivityTaskManager.getService()
                    .requestStartActivityPermissionToken(delegateActivity);
            chooserIntent.setClassName(delegateActivity.getPackageName(),
                    delegateActivity.getClassName());
            chooserIntent.putExtra(ActivityTaskManager.EXTRA_PERMISSION_TOKEN, permissionToken);

            // TODO: These extras will change as chooser activity moves into systemui
            chooserIntent.putExtra(Intent.EXTRA_INTENT, intent);
            chooserIntent.putExtra(ActivityTaskManager.EXTRA_OPTIONS, options);
            chooserIntent.putExtra(ActivityTaskManager.EXTRA_IGNORE_TARGET_SECURITY,
                    ignoreTargetSecurity);
            chooserIntent.putExtra(Intent.EXTRA_USER_ID, userId);
            chooserIntent.addFlags(Intent.FLAG_ACTIVITY_PREVIOUS_IS_TOP);

            // Don't close until the delegate finishes, or the token will be invalidated.
            mAwaitingDelegateResponse = true;

            startActivityForResult(chooserIntent, REQUEST_CODE_RETURN_FROM_DELEGATE_CHOOSER);
        } catch (RemoteException e) {
            Log.e(TAG, e.toString());
        }
        // Note: this method will be overridden in the delegate implementation to use the passed-in
        // permission token.
        startActivityAsCaller(intent, options, null, false, userId);
        return true;
    }

+3 −13
Original line number Diff line number Diff line
@@ -30,11 +30,9 @@ import android.os.Bundle;
import android.os.Parcel;
import android.os.Parcelable;
import android.os.UserHandle;
import android.provider.DeviceConfig;

import com.android.internal.app.ResolverActivity;
import com.android.internal.app.ResolverListAdapter.ResolveInfoPresentationGetter;
import com.android.internal.config.sysui.SystemUiDeviceConfigFlags;

import java.util.ArrayList;
import java.util.Arrays;
@@ -45,11 +43,6 @@ import java.util.List;
 * resolve it to an activity.
 */
public class DisplayResolveInfo implements TargetInfo, Parcelable {
    private final boolean mEnableChooserDelegate =
            DeviceConfig.getBoolean(DeviceConfig.NAMESPACE_SYSTEMUI,
                    SystemUiDeviceConfigFlags.USE_DELEGATE_CHOOSER,
                    false);

    private final ResolveInfo mResolveInfo;
    private CharSequence mDisplayLabel;
    private Drawable mDisplayIcon;
@@ -180,12 +173,9 @@ public class DisplayResolveInfo implements TargetInfo, Parcelable {

    @Override
    public boolean startAsCaller(ResolverActivity activity, Bundle options, int userId) {
        if (mEnableChooserDelegate) {
        // TODO: if the start-as-caller API no longer requires a permission token, this can go back
        // to inlining the real activity-start call, and we can remove startAsCallerImpl.
        return activity.startAsCallerImpl(mResolvedIntent, options, false, userId);
        } else {
            activity.startActivityAsCaller(mResolvedIntent, options, null, false, userId);
            return true;
        }
    }

    @Override