Merge "add function setTvView to link the input Session and IApp Session"
diff --git a/media/java/android/media/tv/TvInputManager.java b/media/java/android/media/tv/TvInputManager.java
index f22b7dc..0461f0a 100644
--- a/media/java/android/media/tv/TvInputManager.java
+++ b/media/java/android/media/tv/TvInputManager.java
@@ -28,6 +28,7 @@
import android.content.Intent;
import android.graphics.Rect;
import android.media.PlaybackParams;
+import android.media.tv.interactive.TvIAppManager;
import android.net.Uri;
import android.os.Binder;
import android.os.Bundle;
@@ -2073,6 +2074,8 @@
// @GuardedBy("mMetadataLock")
private int mVideoHeight;
+ private TvIAppManager.Session mIAppSession;
+
private Session(IBinder token, InputChannel channel, ITvInputManager service, int userId,
int seq, SparseArray<SessionCallbackRecord> sessionCallbackRecordMap) {
mToken = token;
@@ -2083,6 +2086,14 @@
mSessionCallbackRecordMap = sessionCallbackRecordMap;
}
+ public TvIAppManager.Session getIAppSession() {
+ return mIAppSession;
+ }
+
+ public void setIAppSession(TvIAppManager.Session IAppSession) {
+ this.mIAppSession = IAppSession;
+ }
+
/**
* Releases this session.
*/
diff --git a/media/java/android/media/tv/TvView.java b/media/java/android/media/tv/TvView.java
index b1baf94..6994d28 100644
--- a/media/java/android/media/tv/TvView.java
+++ b/media/java/android/media/tv/TvView.java
@@ -34,6 +34,8 @@
import android.media.tv.TvInputManager.Session;
import android.media.tv.TvInputManager.Session.FinishedInputEventCallback;
import android.media.tv.TvInputManager.SessionCallback;
+import android.media.tv.interactive.TvIAppManager;
+import android.media.tv.interactive.TvIAppView;
import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
@@ -197,6 +199,11 @@
mCallback = callback;
}
+ /** @hide */
+ public Session getInputSession() {
+ return mSession;
+ }
+
/**
* Sets this as the main {@link TvView}.
*
diff --git a/media/java/android/media/tv/interactive/TvIAppManager.java b/media/java/android/media/tv/interactive/TvIAppManager.java
index 16e19e7..94534cd 100644
--- a/media/java/android/media/tv/interactive/TvIAppManager.java
+++ b/media/java/android/media/tv/interactive/TvIAppManager.java
@@ -20,6 +20,7 @@
import android.annotation.Nullable;
import android.annotation.SystemService;
import android.content.Context;
+import android.media.tv.TvInputManager;
import android.os.Handler;
import android.os.IBinder;
import android.os.RemoteException;
@@ -150,6 +151,8 @@
private IBinder mToken;
+ private TvInputManager.Session mInputSession;
+
private Session(IBinder token, ITvIAppManager service, int userId, int seq,
SparseArray<SessionCallbackRecord> sessionCallbackRecordMap) {
mToken = token;
@@ -159,6 +162,14 @@
mSessionCallbackRecordMap = sessionCallbackRecordMap;
}
+ public TvInputManager.Session getInputSession() {
+ return mInputSession;
+ }
+
+ public void setInputSession(TvInputManager.Session inputSession) {
+ mInputSession = inputSession;
+ }
+
void startIApp() {
if (mToken == null) {
Log.w(TAG, "The session has been already released");
diff --git a/media/java/android/media/tv/interactive/TvIAppView.java b/media/java/android/media/tv/interactive/TvIAppView.java
index adaaab0..1b25c23 100644
--- a/media/java/android/media/tv/interactive/TvIAppView.java
+++ b/media/java/android/media/tv/interactive/TvIAppView.java
@@ -16,9 +16,12 @@
package android.media.tv.interactive;
+import android.annotation.Nullable;
import android.content.Context;
import android.content.res.Resources;
import android.content.res.XmlResourceParser;
+import android.media.tv.TvInputManager;
+import android.media.tv.TvView;
import android.media.tv.interactive.TvIAppManager.Session;
import android.media.tv.interactive.TvIAppManager.SessionCallback;
import android.os.Handler;
@@ -39,6 +42,11 @@
private static final String TAG = "TvIAppView";
private static final boolean DEBUG = false;
+ private static final int SET_TVVIEW_SUCCESS = 1;
+ private static final int SET_TVVIEW_FAIL = 2;
+ private static final int UNSET_TVVIEW_SUCCESS = 3;
+ private static final int UNSET_TVVIEW_FAIL = 4;
+
private final TvIAppManager mTvIAppManager;
private final Handler mHandler = new Handler();
private Session mSession;
@@ -213,6 +221,39 @@
}
}
+ public Session getIAppSession() {
+ return mSession;
+ }
+
+ /**
+ * Sets the TvIAppView to receive events from TIS. This method links the session of
+ * TvIAppManager to TvInputManager session, so the TIAS can get the TIS events.
+ *
+ * @param tvView the TvView to be linked to this TvIAppView via linking of Sessions.
+ * @return to be added
+ */
+ public int setTvView(@Nullable TvView tvView) {
+ if (tvView == null) {
+ return unsetTvView();
+ }
+ TvInputManager.Session inputSession = tvView.getInputSession();
+ if (inputSession == null || mSession == null) {
+ return SET_TVVIEW_FAIL;
+ }
+ mSession.setInputSession(inputSession);
+ inputSession.setIAppSession(mSession);
+ return SET_TVVIEW_SUCCESS;
+ }
+
+ private int unsetTvView() {
+ if (mSession == null || mSession.getInputSession() == null) {
+ return UNSET_TVVIEW_FAIL;
+ }
+ mSession.getInputSession().setIAppSession(null);
+ mSession.setInputSession(null);
+ return UNSET_TVVIEW_SUCCESS;
+ }
+
private class MySessionCallback extends SessionCallback {
final String mIAppServiceId;
int mType;