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

Commit c43c6f53 authored by John Wu's avatar John Wu
Browse files

Update SlicePermissionActivity component in manifest

After ag/15315839, all explicit intents has to match the component's
intent filter declared in the manifest xml if the target package is
targeting T+. An incomplete intent filter has been set for
SlicePermissionActivity, which causes all slice permission request
intents fail to resolve and deliver to SystemUI.

Because SliceProvider.SLICE_TYPE is not a valid MIME type that can be
used for intent filters, the least complicated solution is to remove the
intent filter altogether and check the intent in the activity code.

Bug: 207782463
Test: atest SlicePermissionsTest#testPermissionIntent
Change-Id: I47b1e5d860976bbcd446ae3d21fab0e988279c5e
parent 4795c7ff
Loading
Loading
Loading
Loading
+13 −4
Original line number Diff line number Diff line
@@ -299,7 +299,7 @@ public abstract class SliceProvider extends ContentProvider {
     * @see #getCallingPackage()
     */
    public @NonNull PendingIntent onCreatePermissionRequest(Uri sliceUri) {
        return createPermissionIntent(getContext(), sliceUri, getCallingPackage());
        return createPermissionPendingIntent(getContext(), sliceUri, getCallingPackage());
    }

    @Override
@@ -508,7 +508,17 @@ public abstract class SliceProvider extends ContentProvider {
    /**
     * @hide
     */
    public static PendingIntent createPermissionIntent(Context context, Uri sliceUri,
    public static PendingIntent createPermissionPendingIntent(Context context, Uri sliceUri,
            String callingPackage) {
        return PendingIntent.getActivity(context, 0,
                createPermissionIntent(context, sliceUri, callingPackage),
                PendingIntent.FLAG_IMMUTABLE);
    }

    /**
     * @hide
     */
    public static Intent createPermissionIntent(Context context, Uri sliceUri,
            String callingPackage) {
        Intent intent = new Intent(SliceManager.ACTION_REQUEST_SLICE_PERMISSION);
        intent.setComponent(ComponentName.unflattenFromString(context.getResources().getString(
@@ -518,8 +528,7 @@ public abstract class SliceProvider extends ContentProvider {
        // Unique pending intent.
        intent.setData(sliceUri.buildUpon().appendQueryParameter("package", callingPackage)
                .build());

        return PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_IMMUTABLE);
        return intent;
    }

    /**
+1 −5
Original line number Diff line number Diff line
@@ -587,11 +587,7 @@
            android:theme="@style/Theme.SystemUI.Dialog.Alert"
            android:finishOnCloseSystemDialogs="true"
            android:excludeFromRecents="true"
            android:exported="true">
            <intent-filter>
                <action android:name="com.android.intent.action.REQUEST_SLICE_PERMISSION" />
            </intent-filter>
        </activity>
            android:exported="true" />

        <!-- platform logo easter egg activity -->
        <activity
+5 −2
Original line number Diff line number Diff line
@@ -50,10 +50,13 @@ public class SlicePermissionActivity extends Activity implements OnClickListener
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        // Verify intent is valid
        mUri = getIntent().getParcelableExtra(SliceProvider.EXTRA_BIND_URI);
        mCallingPkg = getIntent().getStringExtra(SliceProvider.EXTRA_PKG);
        if (mUri == null) {
            Log.e(TAG, SliceProvider.EXTRA_BIND_URI + " wasn't provided");
        if (mUri == null
                || !SliceProvider.SLICE_TYPE.equals(getContentResolver().getType(mUri))
                || !SliceManager.ACTION_REQUEST_SLICE_PERMISSION.equals(getIntent().getAction())) {
            Log.e(TAG, "Intent is not valid");
            finish();
            return;
        }