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

Commit 6e920e6d authored by Jean-Michel Trivi's avatar Jean-Michel Trivi
Browse files

Bug 5300223 RemoteControlClient uses PendingIntent

API change so RemoteControlClient is given a PendingIntent in
 its constructor, which will be used for receiving media button
 events from remote controls.
Leave the old constructors (but hidden) to not break
 current functionality until the AudioManager and AudioService
 implementations have been updated.

Change-Id: Ifa12c8036c948931adc386a827dce2936788e1cd
parent 92bda84b
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -10879,8 +10879,8 @@ package android.media {
  }
  public class RemoteControlClient {
    ctor public RemoteControlClient(android.content.ComponentName);
    ctor public RemoteControlClient(android.content.ComponentName, android.os.Looper);
    ctor public RemoteControlClient(android.app.PendingIntent);
    ctor public RemoteControlClient(android.app.PendingIntent, android.os.Looper);
    method public android.media.RemoteControlClient.MetadataEditor editMetadata(boolean);
    method public void setPlaybackState(int);
    method public void setTransportControlFlags(int);
+56 −0
Original line number Diff line number Diff line
@@ -16,7 +16,9 @@

package android.media;

import android.app.PendingIntent;
import android.content.ComponentName;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Paint;
@@ -203,6 +205,8 @@ public class RemoteControlClient
    public final static int FLAG_INFORMATION_REQUEST_ALBUM_ART = 1 << 3;

    /**
     * @hide
     * TODO remove after modifying known (internal) media apps using this API
     * Class constructor.
     * @param mediaButtonEventReceiver The receiver for the media button events. It needs to have
     *     been registered with {@link AudioManager#registerMediaButtonEventReceiver(ComponentName)}
@@ -226,6 +230,8 @@ public class RemoteControlClient
    }

    /**
     * @hide
     * TODO remove after modifying known (internal) media apps using this API
     * Class constructor for a remote control client whose internal event handling
     * happens on a user-provided Looper.
     * @param mediaButtonEventReceiver The receiver for the media button events. It needs to have
@@ -242,6 +248,56 @@ public class RemoteControlClient
        mEventHandler = new EventHandler(this, looper);
    }

    /**
     * Class constructor.
     * @param mediaButtonIntent The intent that will be sent for the media button events sent
     *     by remote controls.
     *     This intent needs to have been constructed with the {@link Intent#ACTION_MEDIA_BUTTON}
     *     action, and have a component that will handle the intent (set with
     *     {@link Intent#setComponent(ComponentName)}) registered with
     *     {@link AudioManager#registerMediaButtonEventReceiver(ComponentName)}
     *     before this new RemoteControlClient can itself be registered with
     *     {@link AudioManager#registerRemoteControlClient(RemoteControlClient)}.
     * @see AudioManager#registerMediaButtonEventReceiver(ComponentName)
     * @see AudioManager#registerRemoteControlClient(RemoteControlClient)
     */
    public RemoteControlClient(PendingIntent mediaButtonIntent) {
        // TODO implement using PendingIntent instead of ComponentName
        mRcEventReceiver = null;

        Looper looper;
        if ((looper = Looper.myLooper()) != null) {
            mEventHandler = new EventHandler(this, looper);
        } else if ((looper = Looper.getMainLooper()) != null) {
            mEventHandler = new EventHandler(this, looper);
        } else {
            mEventHandler = null;
            Log.e(TAG, "RemoteControlClient() couldn't find main application thread");
        }
    }

    /**
     * Class constructor for a remote control client whose internal event handling
     * happens on a user-provided Looper.
     * @param mediaButtonIntent The intent that will be sent for the media button events sent
     *     by remote controls.
     *     This intent needs to have been constructed with the {@link Intent#ACTION_MEDIA_BUTTON}
     *     action, and have a component that will handle the intent (set with
     *     {@link Intent#setComponent(ComponentName)}) registered with
     *     {@link AudioManager#registerMediaButtonEventReceiver(ComponentName)}
     *     before this new RemoteControlClient can itself be registered with
     *     {@link AudioManager#registerRemoteControlClient(RemoteControlClient)}.
     * @param looper The Looper running the event loop.
     * @see AudioManager#registerMediaButtonEventReceiver(ComponentName)
     * @see AudioManager#registerRemoteControlClient(RemoteControlClient)
     */
    public RemoteControlClient(PendingIntent mediaButtonIntent, Looper looper) {
        // TODO implement using PendingIntent instead of ComponentName
        mRcEventReceiver = null;

        mEventHandler = new EventHandler(this, looper);
    }

    private static final int[] METADATA_KEYS_TYPE_STRING = {
        MediaMetadataRetriever.METADATA_KEY_ALBUM,
        MediaMetadataRetriever.METADATA_KEY_ALBUMARTIST,