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

Commit bcd65d31 authored by Abhishek Aggarwal's avatar Abhishek Aggarwal
Browse files

Merge remote-tracking branch 'origin/lineage-19.1' into v1-s

parents e2b1000f 68ef7c5a
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -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 {
+1 −1
Original line number Diff line number Diff line
@@ -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();
+1 −1
Original line number Diff line number Diff line
@@ -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);
        }
+3 −8
Original line number Diff line number Diff line
@@ -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;
+36 −25
Original line number Diff line number Diff line
@@ -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;
@@ -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;

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