Merge "add function setTvView to link the input Session and IApp Session"

This commit is contained in:
Yixiao Luo
2021-11-16 03:01:40 +00:00
committed by Android (Google) Code Review
4 changed files with 70 additions and 0 deletions

View File

@@ -28,6 +28,7 @@ import android.content.Context;
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 @@ public final class TvInputManager {
// @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 @@ public final class TvInputManager {
mSessionCallbackRecordMap = sessionCallbackRecordMap;
}
public TvIAppManager.Session getIAppSession() {
return mIAppSession;
}
public void setIAppSession(TvIAppManager.Session IAppSession) {
this.mIAppSession = IAppSession;
}
/**
* Releases this session.
*/

View File

@@ -34,6 +34,8 @@ import android.media.PlaybackParams;
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 @@ public class TvView extends ViewGroup {
mCallback = callback;
}
/** @hide */
public Session getInputSession() {
return mSession;
}
/**
* Sets this as the main {@link TvView}.
*

View File

@@ -20,6 +20,7 @@ import android.annotation.NonNull;
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 @@ public final class TvIAppManager {
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 @@ public final class TvIAppManager {
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");

View File

@@ -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 @@ public class TvIAppView extends ViewGroup {
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 class TvIAppView extends ViewGroup {
}
}
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;