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

Commit 70efb526 authored by Jean-Michel Trivi's avatar Jean-Michel Trivi
Browse files

System API for a proxy for registered players

PlayerProxy is a wrapper on IPlayer for system components
  to control players.

Test: use vendor/google_toolbox/team/audio/cmds/ClPlaybackActivity
Bug 30258418

Change-Id: I6a40290c7f711fc0242597a5c016fc71cb4baa10
parent c25be09c
Loading
Loading
Loading
Loading
+8 −0
Original line number Diff line number Diff line
@@ -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();
+12 −3
Original line number Diff line number Diff line
@@ -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();
    }

+109 −0
Original line number Diff line number Diff line
/*
 * 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);
        }
    }

}