Revise PendingIntent.queryIntentComponents API
1. Make return type NonNull
2. Use ParceledListSlice for binder call from PendingIntent to
ActivityManagerService
Bug: 180617184
Test: atest CtsAppTestCases:android.app.cts.PendingIntentTest
#testGetIntentComponentAndType
Change-Id: Ifc4d111da07b9e1c665c07568cbed994927b0ff2
This commit is contained in:
@@ -35,7 +35,7 @@ package android.app {
|
||||
}
|
||||
|
||||
public final class PendingIntent implements android.os.Parcelable {
|
||||
method @Nullable @RequiresPermission(android.Manifest.permission.GET_INTENT_SENDER_INTENT) public java.util.List<android.content.pm.ResolveInfo> queryIntentComponents(int);
|
||||
method @NonNull @RequiresPermission(android.Manifest.permission.GET_INTENT_SENDER_INTENT) public java.util.List<android.content.pm.ResolveInfo> queryIntentComponents(int);
|
||||
}
|
||||
|
||||
public class StatusBarManager {
|
||||
|
||||
@@ -292,7 +292,7 @@ package android.app {
|
||||
}
|
||||
|
||||
public final class PendingIntent implements android.os.Parcelable {
|
||||
method @Nullable @RequiresPermission("android.permission.GET_INTENT_SENDER_INTENT") public java.util.List<android.content.pm.ResolveInfo> queryIntentComponents(int);
|
||||
method @NonNull @RequiresPermission("android.permission.GET_INTENT_SENDER_INTENT") public java.util.List<android.content.pm.ResolveInfo> queryIntentComponents(int);
|
||||
field @Deprecated public static final int FLAG_MUTABLE_UNAUDITED = 33554432; // 0x2000000
|
||||
}
|
||||
|
||||
|
||||
@@ -706,7 +706,7 @@ interface IActivityManager {
|
||||
boolean stopProfile(int userId);
|
||||
|
||||
/** Called by PendingIntent.queryIntentComponents() */
|
||||
List<ResolveInfo> queryIntentComponentsForIntentSender(in IIntentSender sender, int matchFlags);
|
||||
ParceledListSlice queryIntentComponentsForIntentSender(in IIntentSender sender, int matchFlags);
|
||||
|
||||
int getUidProcessCapabilities(int uid, in String callingPackage);
|
||||
}
|
||||
|
||||
@@ -26,7 +26,6 @@ import android.annotation.IntDef;
|
||||
import android.annotation.NonNull;
|
||||
import android.annotation.Nullable;
|
||||
import android.annotation.RequiresPermission;
|
||||
import android.annotation.SuppressLint;
|
||||
import android.annotation.SystemApi;
|
||||
import android.annotation.SystemApi.Client;
|
||||
import android.annotation.TestApi;
|
||||
@@ -41,6 +40,7 @@ import android.content.IIntentSender;
|
||||
import android.content.Intent;
|
||||
import android.content.IntentSender;
|
||||
import android.content.pm.PackageManager.ResolveInfoFlags;
|
||||
import android.content.pm.ParceledListSlice;
|
||||
import android.content.pm.ResolveInfo;
|
||||
import android.os.Build;
|
||||
import android.os.Bundle;
|
||||
@@ -60,6 +60,7 @@ import com.android.internal.os.IResultReceiver;
|
||||
|
||||
import java.lang.annotation.Retention;
|
||||
import java.lang.annotation.RetentionPolicy;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
|
||||
@@ -1239,14 +1240,17 @@ public final class PendingIntent implements Parcelable {
|
||||
* @param flags MATCH_* flags from {@link android.content.pm.PackageManager}.
|
||||
* @hide
|
||||
*/
|
||||
@SuppressLint("NullableCollection")
|
||||
@RequiresPermission(permission.GET_INTENT_SENDER_INTENT)
|
||||
@SystemApi(client = Client.MODULE_LIBRARIES)
|
||||
@TestApi
|
||||
public @Nullable List<ResolveInfo> queryIntentComponents(@ResolveInfoFlags int flags) {
|
||||
public @NonNull List<ResolveInfo> queryIntentComponents(@ResolveInfoFlags int flags) {
|
||||
try {
|
||||
return ActivityManager.getService()
|
||||
ParceledListSlice<ResolveInfo> parceledList = ActivityManager.getService()
|
||||
.queryIntentComponentsForIntentSender(mTarget, flags);
|
||||
if (parceledList == null) {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
return parceledList.getList();
|
||||
} catch (RemoteException e) {
|
||||
throw e.rethrowFromSystemServer();
|
||||
}
|
||||
|
||||
@@ -92,6 +92,7 @@ import static android.text.format.DateUtils.DAY_IN_MILLIS;
|
||||
|
||||
import static com.android.internal.protolog.ProtoLogGroup.WM_DEBUG_CONFIGURATION;
|
||||
import static com.android.server.am.ActivityManagerDebugConfig.DEBUG_ALL;
|
||||
import static com.android.server.am.ActivityManagerDebugConfig.DEBUG_ALLOWLISTS;
|
||||
import static com.android.server.am.ActivityManagerDebugConfig.DEBUG_ANR;
|
||||
import static com.android.server.am.ActivityManagerDebugConfig.DEBUG_BACKGROUND_CHECK;
|
||||
import static com.android.server.am.ActivityManagerDebugConfig.DEBUG_BACKUP;
|
||||
@@ -104,7 +105,6 @@ import static com.android.server.am.ActivityManagerDebugConfig.DEBUG_OOM_ADJ;
|
||||
import static com.android.server.am.ActivityManagerDebugConfig.DEBUG_POWER;
|
||||
import static com.android.server.am.ActivityManagerDebugConfig.DEBUG_PROCESSES;
|
||||
import static com.android.server.am.ActivityManagerDebugConfig.DEBUG_SERVICE;
|
||||
import static com.android.server.am.ActivityManagerDebugConfig.DEBUG_ALLOWLISTS;
|
||||
import static com.android.server.am.ActivityManagerDebugConfig.POSTFIX_BACKUP;
|
||||
import static com.android.server.am.ActivityManagerDebugConfig.POSTFIX_BROADCAST;
|
||||
import static com.android.server.am.ActivityManagerDebugConfig.POSTFIX_CLEANUP;
|
||||
@@ -4963,7 +4963,7 @@ public class ActivityManagerService extends IActivityManager.Stub
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<ResolveInfo> queryIntentComponentsForIntentSender(
|
||||
public ParceledListSlice<ResolveInfo> queryIntentComponentsForIntentSender(
|
||||
IIntentSender pendingResult, int matchFlags) {
|
||||
enforceCallingPermission(Manifest.permission.GET_INTENT_SENDER_INTENT,
|
||||
"queryIntentComponentsForIntentSender()");
|
||||
@@ -4981,15 +4981,15 @@ public class ActivityManagerService extends IActivityManager.Stub
|
||||
final int userId = res.key.userId;
|
||||
switch (res.key.type) {
|
||||
case ActivityManager.INTENT_SENDER_ACTIVITY:
|
||||
return mContext.getPackageManager().queryIntentActivitiesAsUser(
|
||||
intent, matchFlags, userId);
|
||||
return new ParceledListSlice<>(mContext.getPackageManager()
|
||||
.queryIntentActivitiesAsUser(intent, matchFlags, userId));
|
||||
case ActivityManager.INTENT_SENDER_SERVICE:
|
||||
case ActivityManager.INTENT_SENDER_FOREGROUND_SERVICE:
|
||||
return mContext.getPackageManager().queryIntentServicesAsUser(
|
||||
intent, matchFlags, userId);
|
||||
return new ParceledListSlice<>(mContext.getPackageManager()
|
||||
.queryIntentServicesAsUser(intent, matchFlags, userId));
|
||||
case ActivityManager.INTENT_SENDER_BROADCAST:
|
||||
return mContext.getPackageManager().queryBroadcastReceiversAsUser(
|
||||
intent, matchFlags, userId);
|
||||
return new ParceledListSlice<>(mContext.getPackageManager()
|
||||
.queryBroadcastReceiversAsUser(intent, matchFlags, userId));
|
||||
default: // ActivityManager.INTENT_SENDER_ACTIVITY_RESULT
|
||||
throw new IllegalStateException("Unsupported intent sender type: " + res.key.type);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user