Loading core/java/android/os/WorkSource.java +1 −1 Original line number Diff line number Diff line Loading @@ -128,7 +128,7 @@ public class WorkSource implements Parcelable { mNames = in.createStringArray(); int numChains = in.readInt(); if (numChains > 0) { if (numChains >= 0) { mChains = new ArrayList<>(numChains); in.readParcelableList(mChains, WorkChain.class.getClassLoader()); } else { Loading media/java/android/media/session/ISession.aidl +1 −1 Original line number Diff line number Diff line Loading @@ -35,7 +35,7 @@ interface ISession { ISessionController getController(); void setFlags(int flags); void setActive(boolean active); void setMediaButtonReceiver(in PendingIntent mbr, String sessionPackageName); void setMediaButtonReceiver(in PendingIntent mbr); void setMediaButtonBroadcastReceiver(in ComponentName broadcastReceiver); void setLaunchPendingIntent(in PendingIntent pi); void destroySession(); Loading media/java/android/media/session/MediaSession.java +1 −1 Original line number Diff line number Diff line Loading @@ -286,7 +286,7 @@ public final class MediaSession { @Deprecated public void setMediaButtonReceiver(@Nullable PendingIntent mbr) { try { mBinder.setMediaButtonReceiver(mbr, mContext.getPackageName()); mBinder.setMediaButtonReceiver(mbr); } catch (RemoteException e) { Log.wtf(TAG, "Failure in setMediaButtonReceiver.", e); } Loading services/core/java/com/android/server/am/PendingIntentRecord.java +3 −8 Original line number Diff line number Diff line Loading @@ -350,17 +350,12 @@ public final class PendingIntentRecord extends IIntentSender.Stub { resolvedType = key.requestResolvedType; } // Apply any launch flags from the ActivityOptions. This is used only by SystemUI // to ensure that we can launch the pending intent with a consistent launch mode even // if the provided PendingIntent is immutable (ie. to force an activity to launch into // a new task, or to launch multiple instances if supported by the app) // Apply any launch flags from the ActivityOptions. This is to ensure that the caller // can specify a consistent launch mode even if the PendingIntent is immutable final ActivityOptions opts = ActivityOptions.fromBundle(options); if (opts != null) { // TODO(b/254490217): Move this check into SafeActivityOptions if (controller.mAtmInternal.isCallerRecents(Binder.getCallingUid())) { finalIntent.addFlags(opts.getPendingIntentLaunchFlags()); } } // Extract options before clearing calling identity mergedOptions = key.options; Loading services/core/java/com/android/server/media/MediaButtonReceiverHolder.java +36 −25 Original line number Diff line number Diff line Loading @@ -18,6 +18,7 @@ package com.android.server.media; import android.annotation.IntDef; import android.annotation.NonNull; import android.annotation.Nullable; import android.app.BroadcastOptions; import android.app.PendingIntent; import android.content.ComponentName; Loading @@ -37,6 +38,7 @@ import android.view.KeyEvent; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.util.Collections; import java.util.List; /** Loading Loading @@ -102,15 +104,19 @@ final class MediaButtonReceiverHolder { } /** * Creates a new instance. * Creates a new instance from a {@link PendingIntent}. * * <p>This method assumes the session package name has been validated and effectively belongs to * the media session's owner. * * @param context context * @param userId userId * @param pendingIntent pending intent * @return Can be {@code null} if pending intent was null. * @param pendingIntent pending intent that will receive media button events * @param sessionPackageName package name of media session owner * @return {@link MediaButtonReceiverHolder} instance or {@code null} if pending intent was * null. */ public static MediaButtonReceiverHolder create(Context context, int userId, PendingIntent pendingIntent, String sessionPackageName) { public static MediaButtonReceiverHolder create( int userId, @Nullable PendingIntent pendingIntent, String sessionPackageName) { if (pendingIntent == null) { return null; } Loading Loading @@ -312,7 +318,7 @@ final class MediaButtonReceiverHolder { } private static ComponentName getComponentName(PendingIntent pendingIntent, int componentType) { List<ResolveInfo> resolveInfos = null; List<ResolveInfo> resolveInfos = Collections.emptyList(); switch (componentType) { case COMPONENT_TYPE_ACTIVITY: resolveInfos = pendingIntent.queryIntentComponents( Loading @@ -330,32 +336,37 @@ final class MediaButtonReceiverHolder { PACKAGE_MANAGER_COMMON_FLAGS | PackageManager.GET_RECEIVERS); break; } if (resolveInfos != null && !resolveInfos.isEmpty()) { return createComponentName(resolveInfos.get(0)); for (ResolveInfo resolveInfo : resolveInfos) { ComponentInfo componentInfo = getComponentInfo(resolveInfo); if (componentInfo != null && TextUtils.equals(componentInfo.packageName, pendingIntent.getCreatorPackage()) && componentInfo.packageName != null && componentInfo.name != null) { return new ComponentName(componentInfo.packageName, componentInfo.name); } return null; } private static ComponentName createComponentName(ResolveInfo resolveInfo) { if (resolveInfo == null) { return null; } ComponentInfo componentInfo; /** * Retrieves the {@link ComponentInfo} from a {@link ResolveInfo} instance. Similar to {@link * ResolveInfo#getComponentInfo()}, but returns {@code null} if this {@link ResolveInfo} points * to a content provider. * * @param resolveInfo Where to extract the {@link ComponentInfo} from. * @return Either a non-null {@link ResolveInfo#activityInfo} or {@link * ResolveInfo#serviceInfo}. Otherwise {@code null} if {@link ResolveInfo#providerInfo} is * not {@code null}. */ private static ComponentInfo getComponentInfo(@NonNull ResolveInfo resolveInfo) { // Code borrowed from ResolveInfo#getComponentInfo(). if (resolveInfo.activityInfo != null) { componentInfo = resolveInfo.activityInfo; return resolveInfo.activityInfo; } else if (resolveInfo.serviceInfo != null) { componentInfo = resolveInfo.serviceInfo; return resolveInfo.serviceInfo; } else { // We're not interested in content provider. return null; } // Code borrowed from ComponentInfo#getComponentName(). try { return new ComponentName(componentInfo.packageName, componentInfo.name); } catch (IllegalArgumentException | NullPointerException e) { // This may be happen if resolveActivity() end up with matching multiple activities. // see PackageManager#resolveActivity(). // We're not interested in content providers. return null; } } Loading Loading
core/java/android/os/WorkSource.java +1 −1 Original line number Diff line number Diff line Loading @@ -128,7 +128,7 @@ public class WorkSource implements Parcelable { mNames = in.createStringArray(); int numChains = in.readInt(); if (numChains > 0) { if (numChains >= 0) { mChains = new ArrayList<>(numChains); in.readParcelableList(mChains, WorkChain.class.getClassLoader()); } else { Loading
media/java/android/media/session/ISession.aidl +1 −1 Original line number Diff line number Diff line Loading @@ -35,7 +35,7 @@ interface ISession { ISessionController getController(); void setFlags(int flags); void setActive(boolean active); void setMediaButtonReceiver(in PendingIntent mbr, String sessionPackageName); void setMediaButtonReceiver(in PendingIntent mbr); void setMediaButtonBroadcastReceiver(in ComponentName broadcastReceiver); void setLaunchPendingIntent(in PendingIntent pi); void destroySession(); Loading
media/java/android/media/session/MediaSession.java +1 −1 Original line number Diff line number Diff line Loading @@ -286,7 +286,7 @@ public final class MediaSession { @Deprecated public void setMediaButtonReceiver(@Nullable PendingIntent mbr) { try { mBinder.setMediaButtonReceiver(mbr, mContext.getPackageName()); mBinder.setMediaButtonReceiver(mbr); } catch (RemoteException e) { Log.wtf(TAG, "Failure in setMediaButtonReceiver.", e); } Loading
services/core/java/com/android/server/am/PendingIntentRecord.java +3 −8 Original line number Diff line number Diff line Loading @@ -350,17 +350,12 @@ public final class PendingIntentRecord extends IIntentSender.Stub { resolvedType = key.requestResolvedType; } // Apply any launch flags from the ActivityOptions. This is used only by SystemUI // to ensure that we can launch the pending intent with a consistent launch mode even // if the provided PendingIntent is immutable (ie. to force an activity to launch into // a new task, or to launch multiple instances if supported by the app) // Apply any launch flags from the ActivityOptions. This is to ensure that the caller // can specify a consistent launch mode even if the PendingIntent is immutable final ActivityOptions opts = ActivityOptions.fromBundle(options); if (opts != null) { // TODO(b/254490217): Move this check into SafeActivityOptions if (controller.mAtmInternal.isCallerRecents(Binder.getCallingUid())) { finalIntent.addFlags(opts.getPendingIntentLaunchFlags()); } } // Extract options before clearing calling identity mergedOptions = key.options; Loading
services/core/java/com/android/server/media/MediaButtonReceiverHolder.java +36 −25 Original line number Diff line number Diff line Loading @@ -18,6 +18,7 @@ package com.android.server.media; import android.annotation.IntDef; import android.annotation.NonNull; import android.annotation.Nullable; import android.app.BroadcastOptions; import android.app.PendingIntent; import android.content.ComponentName; Loading @@ -37,6 +38,7 @@ import android.view.KeyEvent; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.util.Collections; import java.util.List; /** Loading Loading @@ -102,15 +104,19 @@ final class MediaButtonReceiverHolder { } /** * Creates a new instance. * Creates a new instance from a {@link PendingIntent}. * * <p>This method assumes the session package name has been validated and effectively belongs to * the media session's owner. * * @param context context * @param userId userId * @param pendingIntent pending intent * @return Can be {@code null} if pending intent was null. * @param pendingIntent pending intent that will receive media button events * @param sessionPackageName package name of media session owner * @return {@link MediaButtonReceiverHolder} instance or {@code null} if pending intent was * null. */ public static MediaButtonReceiverHolder create(Context context, int userId, PendingIntent pendingIntent, String sessionPackageName) { public static MediaButtonReceiverHolder create( int userId, @Nullable PendingIntent pendingIntent, String sessionPackageName) { if (pendingIntent == null) { return null; } Loading Loading @@ -312,7 +318,7 @@ final class MediaButtonReceiverHolder { } private static ComponentName getComponentName(PendingIntent pendingIntent, int componentType) { List<ResolveInfo> resolveInfos = null; List<ResolveInfo> resolveInfos = Collections.emptyList(); switch (componentType) { case COMPONENT_TYPE_ACTIVITY: resolveInfos = pendingIntent.queryIntentComponents( Loading @@ -330,32 +336,37 @@ final class MediaButtonReceiverHolder { PACKAGE_MANAGER_COMMON_FLAGS | PackageManager.GET_RECEIVERS); break; } if (resolveInfos != null && !resolveInfos.isEmpty()) { return createComponentName(resolveInfos.get(0)); for (ResolveInfo resolveInfo : resolveInfos) { ComponentInfo componentInfo = getComponentInfo(resolveInfo); if (componentInfo != null && TextUtils.equals(componentInfo.packageName, pendingIntent.getCreatorPackage()) && componentInfo.packageName != null && componentInfo.name != null) { return new ComponentName(componentInfo.packageName, componentInfo.name); } return null; } private static ComponentName createComponentName(ResolveInfo resolveInfo) { if (resolveInfo == null) { return null; } ComponentInfo componentInfo; /** * Retrieves the {@link ComponentInfo} from a {@link ResolveInfo} instance. Similar to {@link * ResolveInfo#getComponentInfo()}, but returns {@code null} if this {@link ResolveInfo} points * to a content provider. * * @param resolveInfo Where to extract the {@link ComponentInfo} from. * @return Either a non-null {@link ResolveInfo#activityInfo} or {@link * ResolveInfo#serviceInfo}. Otherwise {@code null} if {@link ResolveInfo#providerInfo} is * not {@code null}. */ private static ComponentInfo getComponentInfo(@NonNull ResolveInfo resolveInfo) { // Code borrowed from ResolveInfo#getComponentInfo(). if (resolveInfo.activityInfo != null) { componentInfo = resolveInfo.activityInfo; return resolveInfo.activityInfo; } else if (resolveInfo.serviceInfo != null) { componentInfo = resolveInfo.serviceInfo; return resolveInfo.serviceInfo; } else { // We're not interested in content provider. return null; } // Code borrowed from ComponentInfo#getComponentName(). try { return new ComponentName(componentInfo.packageName, componentInfo.name); } catch (IllegalArgumentException | NullPointerException e) { // This may be happen if resolveActivity() end up with matching multiple activities. // see PackageManager#resolveActivity(). // We're not interested in content providers. return null; } } Loading