diff options
| -rw-r--r-- | api/system-current.txt | 8 | ||||
| -rw-r--r-- | media/java/android/media/AudioPlaybackConfiguration.java | 15 | ||||
| -rw-r--r-- | media/java/android/media/PlayerProxy.java | 109 |
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); + } + } + +} |