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
This commit is contained in:
John Wu
2021-12-02 15:23:59 -08:00
parent 4795c7fff5
commit c43c6f53e1
3 changed files with 19 additions and 11 deletions

View File

@@ -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;
}
/**

View File

@@ -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

View File

@@ -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;
}