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

Commit 1608f496 authored by Jean-Michel Trivi's avatar Jean-Michel Trivi Committed by Android (Google) Code Review
Browse files

Merge "Public API for RemoteController" into klp-dev

parents 1816375f a83487e8
Loading
Loading
Loading
Loading
+34 −0
Original line number Diff line number Diff line
@@ -80,6 +80,7 @@ package android {
    field public static final java.lang.String MANAGE_DEVICE_ADMINS = "android.permission.MANAGE_DEVICE_ADMINS";
    field public static final java.lang.String MANAGE_DOCUMENTS = "android.permission.MANAGE_DOCUMENTS";
    field public static final java.lang.String MASTER_CLEAR = "android.permission.MASTER_CLEAR";
    field public static final java.lang.String MEDIA_CONTENT_CONTROL = "android.permission.MEDIA_CONTENT_CONTROL";
    field public static final java.lang.String MODIFY_AUDIO_SETTINGS = "android.permission.MODIFY_AUDIO_SETTINGS";
    field public static final java.lang.String MODIFY_PHONE_STATE = "android.permission.MODIFY_PHONE_STATE";
    field public static final java.lang.String MOUNT_FORMAT_FILESYSTEMS = "android.permission.MOUNT_FORMAT_FILESYSTEMS";
@@ -12009,6 +12010,7 @@ package android.media {
    method public void adjustStreamVolume(int, int, int);
    method public void adjustSuggestedStreamVolume(int, int, int);
    method public void adjustVolume(int, int);
    method public void dispatchMediaKeyEvent(android.view.KeyEvent);
    method public int getMode();
    method public java.lang.String getParameters(java.lang.String);
    method public java.lang.String getProperty(java.lang.String);
@@ -12030,6 +12032,7 @@ package android.media {
    method public void registerMediaButtonEventReceiver(android.content.ComponentName);
    method public void registerMediaButtonEventReceiver(android.app.PendingIntent);
    method public void registerRemoteControlClient(android.media.RemoteControlClient);
    method public boolean registerRemoteController(android.media.RemoteController);
    method public int requestAudioFocus(android.media.AudioManager.OnAudioFocusChangeListener, int, int);
    method public deprecated void setBluetoothA2dpOn(boolean);
    method public void setBluetoothScoOn(boolean);
@@ -12051,6 +12054,7 @@ package android.media {
    method public void unregisterMediaButtonEventReceiver(android.content.ComponentName);
    method public void unregisterMediaButtonEventReceiver(android.app.PendingIntent);
    method public void unregisterRemoteControlClient(android.media.RemoteControlClient);
    method public void unregisterRemoteController(android.media.RemoteController);
    field public static final java.lang.String ACTION_AUDIO_BECOMING_NOISY = "android.media.AUDIO_BECOMING_NOISY";
    field public static final deprecated java.lang.String ACTION_SCO_AUDIO_STATE_CHANGED = "android.media.SCO_AUDIO_STATE_CHANGED";
    field public static final java.lang.String ACTION_SCO_AUDIO_STATE_UPDATED = "android.media.ACTION_SCO_AUDIO_STATE_UPDATED";
@@ -13280,6 +13284,36 @@ package android.media {
    method public abstract void onPlaybackPositionUpdate(long);
  }
  public final class RemoteController {
    ctor public RemoteController(android.content.Context) throws java.lang.IllegalArgumentException;
    ctor public RemoteController(android.content.Context, android.os.Looper) throws java.lang.IllegalArgumentException;
    method public int clearArtworkConfiguration();
    method public android.media.RemoteController.MetadataEditor editMetadata();
    method public int seekTo(long);
    method public int sendMediaKeyEvent(android.view.KeyEvent);
    method public int setArtworkConfiguration(int, int);
    method public void setOnClientUpdateListener(android.media.RemoteController.OnClientUpdateListener);
    method public int setSynchronizationMode(int);
    field public static final int ERROR = -1; // 0xffffffff
    field public static final int ERROR_BAD_VALUE = -2; // 0xfffffffe
    field public static final int POSITION_SYNCHRONIZATION_CHECK = 1; // 0x1
    field public static final int POSITION_SYNCHRONIZATION_NONE = 0; // 0x0
    field public static final int SUCCESS = 0; // 0x0
  }
  public class RemoteController.MetadataEditor extends android.media.MediaMetadataEditor {
    method public synchronized void apply();
  }
  public static abstract class RemoteController.OnClientUpdateListener {
    ctor public RemoteController.OnClientUpdateListener();
    method public void onClientChange(boolean);
    method public void onClientMetadataUpdate(android.media.RemoteController.MetadataEditor);
    method public void onClientPlaybackStateUpdate(int);
    method public void onClientPlaybackStateUpdate(int, long, long, float);
    method public void onClientTransportControlUpdate(int);
  }
  public final class ResourceBusyException extends android.media.MediaDrmException {
    ctor public ResourceBusyException(java.lang.String);
  }
+1 −1
Original line number Diff line number Diff line
@@ -2107,7 +2107,7 @@
        android:description="@string/permdesc_captureSecureVideoOutput"
        android:protectionLevel="signature|system" />

    <!--@hide Allows an application to know what content is playing and control its playback.
    <!-- Allows an application to know what content is playing and control its playback.
         <p>Not for use by third-party applications due to privacy of media consumption</p>  -->
    <permission android:name="android.permission.MEDIA_CONTENT_CONTROL"
        android:label="@string/permlab_mediaContentControl"
+32 −10
Original line number Diff line number Diff line
@@ -16,6 +16,7 @@

package android.media;

import android.Manifest;
import android.annotation.SdkConstant;
import android.annotation.SdkConstant.SdkConstantType;
import android.app.PendingIntent;
@@ -443,10 +444,29 @@ public class AudioManager {
    }

    /**
     * @hide
     * @param KeyEvent
     */
    protected void dispatchMediaKeyEvent(KeyEvent keyEvent) {
     * Sends a simulated key event for a media button.
     * To simulate a key press, you must first send a KeyEvent built with a
     * {@link KeyEvent#ACTION_DOWN} action, then another event with the {@link KeyEvent#ACTION_UP}
     * action.
     * <p>The key event will be sent to the current media key event consumer which registered with
     * {@link AudioManager#registerMediaButtonEventReceiver(PendingIntent)}.
     * @param keyEvent a {@link KeyEvent} instance whose key code is one of
     *     {@link KeyEvent#KEYCODE_MUTE},
     *     {@link KeyEvent#KEYCODE_HEADSETHOOK},
     *     {@link KeyEvent#KEYCODE_MEDIA_PLAY},
     *     {@link KeyEvent#KEYCODE_MEDIA_PAUSE},
     *     {@link KeyEvent#KEYCODE_MEDIA_PLAY_PAUSE},
     *     {@link KeyEvent#KEYCODE_MEDIA_STOP},
     *     {@link KeyEvent#KEYCODE_MEDIA_NEXT},
     *     {@link KeyEvent#KEYCODE_MEDIA_PREVIOUS},
     *     {@link KeyEvent#KEYCODE_MEDIA_REWIND},
     *     {@link KeyEvent#KEYCODE_MEDIA_RECORD},
     *     {@link KeyEvent#KEYCODE_MEDIA_FAST_FORWARD},
     *     {@link KeyEvent#KEYCODE_MEDIA_CLOSE},
     *     {@link KeyEvent#KEYCODE_MEDIA_EJECT},
     *     or {@link KeyEvent#KEYCODE_MEDIA_AUDIO_TRACK}.
     */
    public void dispatchMediaKeyEvent(KeyEvent keyEvent) {
        IAudioService service = getService();
        try {
            service.dispatchMediaKeyEvent(keyEvent);
@@ -2247,9 +2267,11 @@ public class AudioManager {
    }

    /**
     * @hide
     * CANDIDATE FOR PUBLIC API
     * @param rctlr
     * Registers a {@link RemoteController} instance for it to receive media metadata updates
     * and playback state information from applications using {@link RemoteControlClient}, and
     * control their playback.
     * <p>Registration requires the {@link Manifest.permission#MEDIA_CONTENT_CONTROL} permission.
     * @param rctlr the object to register.
     * @return true if the {@link RemoteController} was successfully registered, false if an
     *     error occurred, due to an internal system error, or insufficient permissions.
     */
@@ -2272,9 +2294,9 @@ public class AudioManager {
    }

    /**
     * @hide
     * CANDIDATE FOR PUBLIC API
     * @param rctlr
     * Unregisters a {@link RemoteController}, causing it to no longer receive media metadata and
     * playback state information, and no longer be capable of controlling playback.
     * @param rctlr the object to unregister.
     */
    public void unregisterRemoteController(RemoteController rctlr) {
        if (rctlr == null) {
+10 −0
Original line number Diff line number Diff line
@@ -524,10 +524,20 @@ public class MediaFocusControl implements OnFinished {
    //==========================================================================================
    // RemoteControl
    //==========================================================================================
    /**
     * No-op if the key code for keyEvent is not a valid media key
     * (see {@link #isValidMediaKeyEvent(KeyEvent)})
     * @param keyEvent the key event to send
     */
    protected void dispatchMediaKeyEvent(KeyEvent keyEvent) {
        filterMediaKeyEvent(keyEvent, false /*needWakeLock*/);
    }

    /**
     * No-op if the key code for keyEvent is not a valid media key
     * (see {@link #isValidMediaKeyEvent(KeyEvent)})
     * @param keyEvent the key event to send
     */
    protected void dispatchMediaKeyEventUnderWakelock(KeyEvent keyEvent) {
        filterMediaKeyEvent(keyEvent, true /*needWakeLock*/);
    }
+131 −164

File changed.

Preview size limit exceeded, changes collapsed.