summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--api/system-current.txt8
-rw-r--r--media/java/android/media/AudioPlaybackConfiguration.java15
-rw-r--r--media/java/android/media/PlayerProxy.java109
3 files changed, 129 insertions, 3 deletions
diff --git a/api/system-current.txt b/api/system-current.txt
index 75b0a34a101c..87df130e51a2 100644
--- a/api/system-current.txt
+++ b/api/system-current.txt
@@ -21854,6 +21854,7 @@ package android.media {
method public int getClientPid();
method public int getClientUid();
method public int getPlayerInterfaceId();
+ method public android.media.PlayerProxy getPlayerProxy();
method public int getPlayerState();
method public int getPlayerType();
method public void writeToParcel(android.os.Parcel, int);
@@ -23682,6 +23683,13 @@ package android.media {
field public static final android.os.Parcelable.Creator<android.media.PlaybackParams> CREATOR;
}
+ public class PlayerProxy {
+ method public void pause() throws java.lang.IllegalStateException;
+ method public void setVolume(float) throws java.lang.IllegalStateException;
+ method public void start() throws java.lang.IllegalStateException;
+ method public void stop() throws java.lang.IllegalStateException;
+ }
+
public final class Rating implements android.os.Parcelable {
method public int describeContents();
method public float getPercentRating();
diff --git a/media/java/android/media/AudioPlaybackConfiguration.java b/media/java/android/media/AudioPlaybackConfiguration.java
index b38a07f15511..dd9c6a784ff1 100644
--- a/media/java/android/media/AudioPlaybackConfiguration.java
+++ b/media/java/android/media/AudioPlaybackConfiguration.java
@@ -283,10 +283,19 @@ public final class AudioPlaybackConfiguration implements Parcelable {
/**
* @hide
- * FIXME return a player proxy instead, make systemApi
- * @return
+ * Return a proxy for the player associated with this playback configuration
+ * @return a proxy player
*/
- public IPlayer getPlayerProxy() {
+ @SystemApi
+ public PlayerProxy getPlayerProxy() {
+ return mIPlayerShell == null ? null : new PlayerProxy(this);
+ }
+
+ /**
+ * @hide
+ * @return the IPlayer interface for the associated player
+ */
+ IPlayer getIPlayer() {
return mIPlayerShell == null ? null : mIPlayerShell.getIPlayer();
}
diff --git a/media/java/android/media/PlayerProxy.java b/media/java/android/media/PlayerProxy.java
new file mode 100644
index 000000000000..171be277e18f
--- /dev/null
+++ b/media/java/android/media/PlayerProxy.java
@@ -0,0 +1,109 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.media;
+
+import android.annotation.NonNull;
+import android.annotation.SystemApi;
+import android.os.RemoteException;
+import android.util.Log;
+
+import java.lang.IllegalArgumentException;
+import java.util.Objects;
+
+/**
+ * Class to remotely control a player.
+ * @hide
+ */
+@SystemApi
+public class PlayerProxy {
+
+ private final static String TAG = "PlayerProxy";
+ private final static boolean DEBUG = false;
+
+ private final AudioPlaybackConfiguration mConf; // never null
+
+ /**
+ * @hide
+ * Constructor. Proxy for this player associated with this AudioPlaybackConfiguration
+ * @param conf the configuration being proxied.
+ */
+ PlayerProxy(@NonNull AudioPlaybackConfiguration apc) {
+ if (apc == null) {
+ throw new IllegalArgumentException("Illegal null AudioPlaybackConfiguration");
+ }
+ mConf = apc;
+ };
+
+ //=====================================================================
+ // Methods matching the IPlayer interface
+ /**
+ * @hide
+ * @throws IllegalStateException
+ */
+ @SystemApi
+ public void start() throws IllegalStateException {
+ try {
+ mConf.getIPlayer().start();
+ } catch (NullPointerException|RemoteException e) {
+ throw new IllegalStateException(
+ "No player to proxy for start operation, player already released?", e);
+ }
+ }
+
+ /**
+ * @hide
+ * @throws IllegalStateException
+ */
+ @SystemApi
+ public void pause() throws IllegalStateException {
+ try {
+ mConf.getIPlayer().pause();
+ } catch (NullPointerException|RemoteException e) {
+ throw new IllegalStateException(
+ "No player to proxy for pause operation, player already released?", e);
+ }
+ }
+
+ /**
+ * @hide
+ * @throws IllegalStateException
+ */
+ @SystemApi
+ public void stop() throws IllegalStateException {
+ try {
+ mConf.getIPlayer().stop();
+ } catch (NullPointerException|RemoteException e) {
+ throw new IllegalStateException(
+ "No player to proxy for stop operation, player already released?", e);
+ }
+ }
+
+ /**
+ * @hide
+ * @throws IllegalStateException
+ */
+ @SystemApi
+ public void setVolume(float vol) throws IllegalStateException {
+ try {
+ mConf.getIPlayer().setVolume(vol);
+ } catch (NullPointerException|RemoteException e) {
+ throw new IllegalStateException(
+ "No player to proxy for setVolume operation, player already released?", e);
+ }
+ }
+
+}