TIF: Pass the playback params as a whole

Bug: 21172914
Change-Id: I2d89f267d8d83b14b5d436304aa0ff82490211d8
diff --git a/media/java/android/media/tv/ITvInputManager.aidl b/media/java/android/media/tv/ITvInputManager.aidl
index 6fe5dbb..f8057db 100644
--- a/media/java/android/media/tv/ITvInputManager.aidl
+++ b/media/java/android/media/tv/ITvInputManager.aidl
@@ -18,6 +18,7 @@
 
 import android.content.ComponentName;
 import android.graphics.Rect;
+import android.media.PlaybackParams;
 import android.media.tv.DvbDeviceInfo;
 import android.media.tv.ITvInputClient;
 import android.media.tv.ITvInputHardware;
@@ -79,7 +80,7 @@
     void timeShiftPause(in IBinder sessionToken, int userId);
     void timeShiftResume(in IBinder sessionToken, int userId);
     void timeShiftSeekTo(in IBinder sessionToken, long timeMs, int userId);
-    void timeShiftSetPlaybackRate(in IBinder sessionToken, float rate, int audioMode, int userId);
+    void timeShiftSetPlaybackParams(in IBinder sessionToken, in PlaybackParams params, int userId);
     void timeShiftEnablePositionTracking(in IBinder sessionToken, boolean enable, int userId);
 
     // For TV input hardware binding
diff --git a/media/java/android/media/tv/ITvInputSession.aidl b/media/java/android/media/tv/ITvInputSession.aidl
index 17f3984..6a06b8f 100644
--- a/media/java/android/media/tv/ITvInputSession.aidl
+++ b/media/java/android/media/tv/ITvInputSession.aidl
@@ -17,6 +17,7 @@
 package android.media.tv;
 
 import android.graphics.Rect;
+import android.media.PlaybackParams;
 import android.media.tv.TvTrackInfo;
 import android.net.Uri;
 import android.os.Bundle;
@@ -50,6 +51,6 @@
     void timeShiftPause();
     void timeShiftResume();
     void timeShiftSeekTo(long timeMs);
-    void timeShiftSetPlaybackRate(float rate, int audioMode);
+    void timeShiftSetPlaybackParams(in PlaybackParams params);
     void timeShiftEnablePositionTracking(boolean enable);
 }
diff --git a/media/java/android/media/tv/ITvInputSessionWrapper.java b/media/java/android/media/tv/ITvInputSessionWrapper.java
index 58954bd..66b904b 100644
--- a/media/java/android/media/tv/ITvInputSessionWrapper.java
+++ b/media/java/android/media/tv/ITvInputSessionWrapper.java
@@ -62,7 +62,7 @@
     private static final int DO_TIME_SHIFT_PAUSE = 14;
     private static final int DO_TIME_SHIFT_RESUME = 15;
     private static final int DO_TIME_SHIFT_SEEK_TO = 16;
-    private static final int DO_TIME_SHIFT_SET_PLAYBACK_RATE = 17;
+    private static final int DO_TIME_SHIFT_SET_PLAYBACK_PARAMS = 17;
     private static final int DO_TIME_SHIFT_ENABLE_POSITION_TRACKING = 18;
 
     private final HandlerCaller mCaller;
@@ -172,7 +172,7 @@
                 mTvInputSessionImpl.timeShiftSeekTo((Long) msg.obj);
                 break;
             }
-            case DO_TIME_SHIFT_SET_PLAYBACK_RATE: {
+            case DO_TIME_SHIFT_SET_PLAYBACK_PARAMS: {
                 PlaybackParams params = new PlaybackParams()
                         .setSpeed((Float) msg.obj)
                         .setAudioFallbackMode(msg.arg1);
@@ -293,9 +293,9 @@
     }
 
     @Override
-    public void timeShiftSetPlaybackRate(float rate, int audioMode) {
-        mCaller.executeOrSendMessage(mCaller.obtainMessageIO(DO_TIME_SHIFT_SET_PLAYBACK_RATE,
-                audioMode, Float.valueOf(rate)));
+    public void timeShiftSetPlaybackParams(PlaybackParams params) {
+        mCaller.executeOrSendMessage(mCaller.obtainMessageO(DO_TIME_SHIFT_SET_PLAYBACK_PARAMS,
+                params));
     }
 
     @Override
diff --git a/media/java/android/media/tv/TvInputManager.java b/media/java/android/media/tv/TvInputManager.java
index caa8a09..7fc19f1 100644
--- a/media/java/android/media/tv/TvInputManager.java
+++ b/media/java/android/media/tv/TvInputManager.java
@@ -20,6 +20,7 @@
 import android.annotation.Nullable;
 import android.annotation.SystemApi;
 import android.graphics.Rect;
+import android.media.PlaybackParams;
 import android.net.Uri;
 import android.os.Bundle;
 import android.os.Handler;
@@ -1747,23 +1748,17 @@
         }
 
         /**
-         * Sets playback rate and audio mode.
+         * Sets playback rate using {@link android.media.PlaybackParams}.
          *
-         * @param rate The ratio between desired playback rate and normal one.
-         * @param audioMode Audio playback mode. Must be one of the supported audio modes:
-         * <ul>
-         * <li> {@link android.media.MediaPlayer#PLAYBACK_RATE_AUDIO_MODE_DEFAULT}
-         * <li> {@link android.media.MediaPlayer#PLAYBACK_RATE_AUDIO_MODE_STRETCH}
-         * <li> {@link android.media.MediaPlayer#PLAYBACK_RATE_AUDIO_MODE_RESAMPLE}
-         * </ul>
+         * @param params The playback params.
          */
-        void timeShiftSetPlaybackRate(float rate, int audioMode) {
+        void timeShiftSetPlaybackParams(PlaybackParams params) {
             if (mToken == null) {
                 Log.w(TAG, "The session has been already released");
                 return;
             }
             try {
-                mService.timeShiftSetPlaybackRate(mToken, rate, audioMode, mUserId);
+                mService.timeShiftSetPlaybackParams(mToken, params, mUserId);
             } catch (RemoteException e) {
                 throw new RuntimeException(e);
             }
diff --git a/media/java/android/media/tv/TvView.java b/media/java/android/media/tv/TvView.java
index 6169eea..e7ce1dd 100644
--- a/media/java/android/media/tv/TvView.java
+++ b/media/java/android/media/tv/TvView.java
@@ -28,7 +28,6 @@
 import android.media.tv.TvInputManager.Session;
 import android.media.tv.TvInputManager.Session.FinishedInputEventCallback;
 import android.media.tv.TvInputManager.SessionCallback;
-import android.media.tv.TvView.TimeShiftPositionCallback;
 import android.net.Uri;
 import android.os.Bundle;
 import android.os.Handler;
@@ -470,13 +469,13 @@
     }
 
     /**
-     * Sets playback rate using {@link android.media#PlaybackParams}.
+     * Sets playback rate using {@link android.media.PlaybackParams}.
      *
      * @param params The playback params.
      */
     public void timeShiftSetPlaybackParams(@NonNull PlaybackParams params) {
         if (mSession != null) {
-            mSession.timeShiftSetPlaybackRate(params.getSpeed(), params.getAudioFallbackMode());
+            mSession.timeShiftSetPlaybackParams(params);
         }
     }
 
diff --git a/services/core/java/com/android/server/tv/TvInputManagerService.java b/services/core/java/com/android/server/tv/TvInputManagerService.java
index a869c20..0fffa0f 100644
--- a/services/core/java/com/android/server/tv/TvInputManagerService.java
+++ b/services/core/java/com/android/server/tv/TvInputManagerService.java
@@ -39,6 +39,7 @@
 import android.graphics.Rect;
 import android.hardware.hdmi.HdmiControlManager;
 import android.hardware.hdmi.HdmiDeviceInfo;
+import android.media.PlaybackParams;
 import android.media.tv.DvbDeviceInfo;
 import android.media.tv.ITvInputClient;
 import android.media.tv.ITvInputHardware;
@@ -87,8 +88,6 @@
 import java.io.FileNotFoundException;
 import java.io.IOException;
 import java.io.PrintWriter;
-import java.lang.IllegalArgumentException;
-import java.lang.Integer;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collections;
@@ -1422,19 +1421,19 @@
         }
 
         @Override
-        public void timeShiftSetPlaybackRate(IBinder sessionToken, float rate, int audioMode,
+        public void timeShiftSetPlaybackParams(IBinder sessionToken, PlaybackParams params,
                 int userId) {
             final int callingUid = Binder.getCallingUid();
             final int resolvedUserId = resolveCallingUserId(Binder.getCallingPid(), callingUid,
-                    userId, "timeShiftSetPlaybackRate");
+                    userId, "timeShiftSetPlaybackParams");
             final long identity = Binder.clearCallingIdentity();
             try {
                 synchronized (mLock) {
                     try {
                         getSessionLocked(sessionToken, callingUid, resolvedUserId)
-                                .timeShiftSetPlaybackRate(rate, audioMode);
+                                .timeShiftSetPlaybackParams(params);
                     } catch (RemoteException | SessionNotFoundException e) {
-                        Slog.e(TAG, "error in timeShiftSetPlaybackRate", e);
+                        Slog.e(TAG, "error in timeShiftSetPlaybackParams", e);
                     }
                 }
             } finally {