am 39b15017: am f98fe42f: Merge "TIF: Notify of size change of the video in TvView" into lmp-mr1-dev

* commit '39b150173ae3a2b6950553450648d5bb223542e3':
  TIF: Notify of size change of the video in TvView
This commit is contained in:
Jae Seo
2014-10-24 18:34:30 +00:00
committed by Android Git Automerger
2 changed files with 262 additions and 136 deletions

View File

@@ -159,12 +159,12 @@ public final class TvInputManager {
private final Object mLock = new Object(); private final Object mLock = new Object();
// @GuardedBy(mLock) // @GuardedBy("mLock")
private final List<TvInputCallbackRecord> mCallbackRecords = private final List<TvInputCallbackRecord> mCallbackRecords =
new LinkedList<TvInputCallbackRecord>(); new LinkedList<TvInputCallbackRecord>();
// A mapping from TV input ID to the state of corresponding input. // A mapping from TV input ID to the state of corresponding input.
// @GuardedBy(mLock) // @GuardedBy("mLock")
private final Map<String, Integer> mStateMap = new ArrayMap<String, Integer>(); private final Map<String, Integer> mStateMap = new ArrayMap<String, Integer>();
// A mapping from the sequence number of a session to its SessionCallbackRecord. // A mapping from the sequence number of a session to its SessionCallbackRecord.
@@ -207,7 +207,7 @@ public final class TvInputManager {
/** /**
* This is called when the channel of this session is changed by the underlying TV input * This is called when the channel of this session is changed by the underlying TV input
* with out any {@link TvInputManager.Session#tune(Uri)} request. * without any {@link TvInputManager.Session#tune(Uri)} request.
* *
* @param session A {@link TvInputManager.Session} associated with this callback. * @param session A {@link TvInputManager.Session} associated with this callback.
* @param channelUri The URI of a channel. * @param channelUri The URI of a channel.
@@ -227,7 +227,7 @@ public final class TvInputManager {
/** /**
* This is called when a track for a given type is selected. * This is called when a track for a given type is selected.
* *
* @param session A {@link TvInputManager.Session} associated with this callback * @param session A {@link TvInputManager.Session} associated with this callback.
* @param type The type of the selected track. The type can be * @param type The type of the selected track. The type can be
* {@link TvTrackInfo#TYPE_AUDIO}, {@link TvTrackInfo#TYPE_VIDEO} or * {@link TvTrackInfo#TYPE_AUDIO}, {@link TvTrackInfo#TYPE_VIDEO} or
* {@link TvTrackInfo#TYPE_SUBTITLE}. * {@link TvTrackInfo#TYPE_SUBTITLE}.
@@ -237,6 +237,18 @@ public final class TvInputManager {
public void onTrackSelected(Session session, int type, String trackId) { public void onTrackSelected(Session session, int type, String trackId) {
} }
/**
* This is invoked when the video size has been changed. It is also called when the first
* time video size information becomes available after the session is tuned to a specific
* channel.
*
* @param session A {@link TvInputManager.Session} associated with this callback.
* @param width The width of the video.
* @param height The height of the video.
*/
public void onVideoSizeChanged(Session session, int width, int height) {
}
/** /**
* This is called when the video is available, so the TV input starts the playback. * This is called when the video is available, so the TV input starts the playback.
* *
@@ -312,13 +324,13 @@ public final class TvInputManager {
private final Handler mHandler; private final Handler mHandler;
private Session mSession; private Session mSession;
public SessionCallbackRecord(SessionCallback sessionCallback, SessionCallbackRecord(SessionCallback sessionCallback,
Handler handler) { Handler handler) {
mSessionCallback = sessionCallback; mSessionCallback = sessionCallback;
mHandler = handler; mHandler = handler;
} }
public void postSessionCreated(final Session session) { void postSessionCreated(final Session session) {
mSession = session; mSession = session;
mHandler.post(new Runnable() { mHandler.post(new Runnable() {
@Override @Override
@@ -328,7 +340,7 @@ public final class TvInputManager {
}); });
} }
public void postSessionReleased() { void postSessionReleased() {
mHandler.post(new Runnable() { mHandler.post(new Runnable() {
@Override @Override
public void run() { public void run() {
@@ -337,7 +349,7 @@ public final class TvInputManager {
}); });
} }
public void postChannelRetuned(final Uri channelUri) { void postChannelRetuned(final Uri channelUri) {
mHandler.post(new Runnable() { mHandler.post(new Runnable() {
@Override @Override
public void run() { public void run() {
@@ -346,49 +358,34 @@ public final class TvInputManager {
}); });
} }
public void postTracksChanged(final List<TvTrackInfo> tracks) { void postTracksChanged(final List<TvTrackInfo> tracks) {
mHandler.post(new Runnable() { mHandler.post(new Runnable() {
@Override @Override
public void run() { public void run() {
mSession.mAudioTracks.clear();
mSession.mVideoTracks.clear();
mSession.mSubtitleTracks.clear();
for (TvTrackInfo track : tracks) {
if (track.getType() == TvTrackInfo.TYPE_AUDIO) {
mSession.mAudioTracks.add(track);
} else if (track.getType() == TvTrackInfo.TYPE_VIDEO) {
mSession.mVideoTracks.add(track);
} else if (track.getType() == TvTrackInfo.TYPE_SUBTITLE) {
mSession.mSubtitleTracks.add(track);
} else {
// Silently ignore.
}
}
mSessionCallback.onTracksChanged(mSession, tracks); mSessionCallback.onTracksChanged(mSession, tracks);
} }
}); });
} }
public void postTrackSelected(final int type, final String trackId) { void postTrackSelected(final int type, final String trackId) {
mHandler.post(new Runnable() { mHandler.post(new Runnable() {
@Override @Override
public void run() { public void run() {
if (type == TvTrackInfo.TYPE_AUDIO) {
mSession.mSelectedAudioTrackId = trackId;
} else if (type == TvTrackInfo.TYPE_VIDEO) {
mSession.mSelectedVideoTrackId = trackId;
} else if (type == TvTrackInfo.TYPE_SUBTITLE) {
mSession.mSelectedSubtitleTrackId = trackId;
} else {
// Silently ignore.
return;
}
mSessionCallback.onTrackSelected(mSession, type, trackId); mSessionCallback.onTrackSelected(mSession, type, trackId);
} }
}); });
} }
public void postVideoAvailable() { void postVideoSizeChanged(final int width, final int height) {
mHandler.post(new Runnable() {
@Override
public void run() {
mSessionCallback.onVideoSizeChanged(mSession, width, height);
}
});
}
void postVideoAvailable() {
mHandler.post(new Runnable() { mHandler.post(new Runnable() {
@Override @Override
public void run() { public void run() {
@@ -397,7 +394,7 @@ public final class TvInputManager {
}); });
} }
public void postVideoUnavailable(final int reason) { void postVideoUnavailable(final int reason) {
mHandler.post(new Runnable() { mHandler.post(new Runnable() {
@Override @Override
public void run() { public void run() {
@@ -406,7 +403,7 @@ public final class TvInputManager {
}); });
} }
public void postContentAllowed() { void postContentAllowed() {
mHandler.post(new Runnable() { mHandler.post(new Runnable() {
@Override @Override
public void run() { public void run() {
@@ -415,7 +412,7 @@ public final class TvInputManager {
}); });
} }
public void postContentBlocked(final TvContentRating rating) { void postContentBlocked(final TvContentRating rating) {
mHandler.post(new Runnable() { mHandler.post(new Runnable() {
@Override @Override
public void run() { public void run() {
@@ -424,7 +421,7 @@ public final class TvInputManager {
}); });
} }
public void postLayoutSurface(final int left, final int top, final int right, void postLayoutSurface(final int left, final int top, final int right,
final int bottom) { final int bottom) {
mHandler.post(new Runnable() { mHandler.post(new Runnable() {
@Override @Override
@@ -434,7 +431,7 @@ public final class TvInputManager {
}); });
} }
public void postSessionEvent(final String eventType, final Bundle eventArgs) { void postSessionEvent(final String eventType, final Bundle eventArgs) {
mHandler.post(new Runnable() { mHandler.post(new Runnable() {
@Override @Override
public void run() { public void run() {
@@ -610,7 +607,10 @@ public final class TvInputManager {
Log.e(TAG, "Callback not found for seq " + seq); Log.e(TAG, "Callback not found for seq " + seq);
return; return;
} }
record.postTracksChanged(tracks); if (record.mSession.updateTracks(tracks)) {
record.postTracksChanged(tracks);
postVideoSizeChangedIfNeededLocked(record);
}
} }
} }
@@ -622,7 +622,17 @@ public final class TvInputManager {
Log.e(TAG, "Callback not found for seq " + seq); Log.e(TAG, "Callback not found for seq " + seq);
return; return;
} }
record.postTrackSelected(type, trackId); if (record.mSession.updateTrackSelection(type, trackId)) {
record.postTrackSelected(type, trackId);
postVideoSizeChangedIfNeededLocked(record);
}
}
}
private void postVideoSizeChangedIfNeededLocked(SessionCallbackRecord record) {
TvTrackInfo track = record.mSession.getVideoTrackToNotify();
if (track != null) {
record.postVideoSizeChanged(track.getVideoWidth(), track.getVideoHeight());
} }
} }
@@ -778,7 +788,7 @@ public final class TvInputManager {
} }
/** /**
* Returns the state of a given TV input. It retuns one of the following: * Returns the state of a given TV input. It returns one of the following:
* <ul> * <ul>
* <li>{@link #INPUT_STATE_CONNECTED} * <li>{@link #INPUT_STATE_CONNECTED}
* <li>{@link #INPUT_STATE_CONNECTED_STANDBY} * <li>{@link #INPUT_STATE_CONNECTED_STANDBY}
@@ -1133,12 +1143,24 @@ public final class TvInputManager {
private IBinder mToken; private IBinder mToken;
private TvInputEventSender mSender; private TvInputEventSender mSender;
private InputChannel mChannel; private InputChannel mChannel;
private final Object mTrackLock = new Object();
// @GuardedBy("mTrackLock")
private final List<TvTrackInfo> mAudioTracks = new ArrayList<TvTrackInfo>(); private final List<TvTrackInfo> mAudioTracks = new ArrayList<TvTrackInfo>();
// @GuardedBy("mTrackLock")
private final List<TvTrackInfo> mVideoTracks = new ArrayList<TvTrackInfo>(); private final List<TvTrackInfo> mVideoTracks = new ArrayList<TvTrackInfo>();
// @GuardedBy("mTrackLock")
private final List<TvTrackInfo> mSubtitleTracks = new ArrayList<TvTrackInfo>(); private final List<TvTrackInfo> mSubtitleTracks = new ArrayList<TvTrackInfo>();
// @GuardedBy("mTrackLock")
private String mSelectedAudioTrackId; private String mSelectedAudioTrackId;
// @GuardedBy("mTrackLock")
private String mSelectedVideoTrackId; private String mSelectedVideoTrackId;
// @GuardedBy("mTrackLock")
private String mSelectedSubtitleTrackId; private String mSelectedSubtitleTrackId;
// @GuardedBy("mTrackLock")
private int mVideoWidth;
// @GuardedBy("mTrackLock")
private int mVideoHeight;
private Session(IBinder token, InputChannel channel, ITvInputManager service, int userId, private Session(IBinder token, InputChannel channel, ITvInputManager service, int userId,
int seq, SparseArray<SessionCallbackRecord> sessionCallbackRecordMap) { int seq, SparseArray<SessionCallbackRecord> sessionCallbackRecordMap) {
@@ -1273,12 +1295,16 @@ public final class TvInputManager {
Log.w(TAG, "The session has been already released"); Log.w(TAG, "The session has been already released");
return; return;
} }
mAudioTracks.clear(); synchronized (mTrackLock) {
mVideoTracks.clear(); mAudioTracks.clear();
mSubtitleTracks.clear(); mVideoTracks.clear();
mSelectedAudioTrackId = null; mSubtitleTracks.clear();
mSelectedVideoTrackId = null; mSelectedAudioTrackId = null;
mSelectedSubtitleTrackId = null; mSelectedVideoTrackId = null;
mSelectedSubtitleTrackId = null;
mVideoWidth = 0;
mVideoHeight = 0;
}
try { try {
mService.tune(mToken, channelUri, params, mUserId); mService.tune(mToken, channelUri, params, mUserId);
} catch (RemoteException e) { } catch (RemoteException e) {
@@ -1314,23 +1340,25 @@ public final class TvInputManager {
* @see #getTracks * @see #getTracks
*/ */
public void selectTrack(int type, String trackId) { public void selectTrack(int type, String trackId) {
if (type == TvTrackInfo.TYPE_AUDIO) { synchronized (mTrackLock) {
if (trackId != null && !containsTrack(mAudioTracks, trackId)) { if (type == TvTrackInfo.TYPE_AUDIO) {
Log.w(TAG, "Invalid audio trackId: " + trackId); if (trackId != null && !containsTrack(mAudioTracks, trackId)) {
return; Log.w(TAG, "Invalid audio trackId: " + trackId);
return;
}
} else if (type == TvTrackInfo.TYPE_VIDEO) {
if (trackId != null && !containsTrack(mVideoTracks, trackId)) {
Log.w(TAG, "Invalid video trackId: " + trackId);
return;
}
} else if (type == TvTrackInfo.TYPE_SUBTITLE) {
if (trackId != null && !containsTrack(mSubtitleTracks, trackId)) {
Log.w(TAG, "Invalid subtitle trackId: " + trackId);
return;
}
} else {
throw new IllegalArgumentException("invalid type: " + type);
} }
} else if (type == TvTrackInfo.TYPE_VIDEO) {
if (trackId != null && !containsTrack(mVideoTracks, trackId)) {
Log.w(TAG, "Invalid video trackId: " + trackId);
return;
}
} else if (type == TvTrackInfo.TYPE_SUBTITLE) {
if (trackId != null && !containsTrack(mSubtitleTracks, trackId)) {
Log.w(TAG, "Invalid subtitle trackId: " + trackId);
return;
}
} else {
throw new IllegalArgumentException("invalid type: " + type);
} }
if (mToken == null) { if (mToken == null) {
Log.w(TAG, "The session has been already released"); Log.w(TAG, "The session has been already released");
@@ -1361,21 +1389,23 @@ public final class TvInputManager {
* @return the list of tracks for the given type. * @return the list of tracks for the given type.
*/ */
public List<TvTrackInfo> getTracks(int type) { public List<TvTrackInfo> getTracks(int type) {
if (type == TvTrackInfo.TYPE_AUDIO) { synchronized (mTrackLock) {
if (mAudioTracks == null) { if (type == TvTrackInfo.TYPE_AUDIO) {
return null; if (mAudioTracks == null) {
return null;
}
return new ArrayList<TvTrackInfo>(mAudioTracks);
} else if (type == TvTrackInfo.TYPE_VIDEO) {
if (mVideoTracks == null) {
return null;
}
return new ArrayList<TvTrackInfo>(mVideoTracks);
} else if (type == TvTrackInfo.TYPE_SUBTITLE) {
if (mSubtitleTracks == null) {
return null;
}
return new ArrayList<TvTrackInfo>(mSubtitleTracks);
} }
return mAudioTracks;
} else if (type == TvTrackInfo.TYPE_VIDEO) {
if (mVideoTracks == null) {
return null;
}
return mVideoTracks;
} else if (type == TvTrackInfo.TYPE_SUBTITLE) {
if (mSubtitleTracks == null) {
return null;
}
return mSubtitleTracks;
} }
throw new IllegalArgumentException("invalid type: " + type); throw new IllegalArgumentException("invalid type: " + type);
} }
@@ -1388,16 +1418,88 @@ public final class TvInputManager {
* @see #selectTrack * @see #selectTrack
*/ */
public String getSelectedTrack(int type) { public String getSelectedTrack(int type) {
if (type == TvTrackInfo.TYPE_AUDIO) { synchronized (mTrackLock) {
return mSelectedAudioTrackId; if (type == TvTrackInfo.TYPE_AUDIO) {
} else if (type == TvTrackInfo.TYPE_VIDEO) { return mSelectedAudioTrackId;
return mSelectedVideoTrackId; } else if (type == TvTrackInfo.TYPE_VIDEO) {
} else if (type == TvTrackInfo.TYPE_SUBTITLE) { return mSelectedVideoTrackId;
return mSelectedSubtitleTrackId; } else if (type == TvTrackInfo.TYPE_SUBTITLE) {
return mSelectedSubtitleTrackId;
}
} }
throw new IllegalArgumentException("invalid type: " + type); throw new IllegalArgumentException("invalid type: " + type);
} }
/**
* Responds to onTracksChanged() and updates the internal track information. Returns true if
* there is an update.
*/
boolean updateTracks(List<TvTrackInfo> tracks) {
synchronized (mTrackLock) {
mAudioTracks.clear();
mVideoTracks.clear();
mSubtitleTracks.clear();
for (TvTrackInfo track : tracks) {
if (track.getType() == TvTrackInfo.TYPE_AUDIO) {
mAudioTracks.add(track);
} else if (track.getType() == TvTrackInfo.TYPE_VIDEO) {
mVideoTracks.add(track);
} else if (track.getType() == TvTrackInfo.TYPE_SUBTITLE) {
mSubtitleTracks.add(track);
}
}
return !mAudioTracks.isEmpty() || !mVideoTracks.isEmpty()
|| !mSubtitleTracks.isEmpty();
}
}
/**
* Responds to onTrackSelected() and updates the internal track selection information.
* Returns true if there is an update.
*/
boolean updateTrackSelection(int type, String trackId) {
synchronized (mTrackLock) {
if (type == TvTrackInfo.TYPE_AUDIO && trackId != mSelectedAudioTrackId) {
mSelectedAudioTrackId = trackId;
return true;
} else if (type == TvTrackInfo.TYPE_VIDEO && trackId != mSelectedVideoTrackId) {
mSelectedVideoTrackId = trackId;
return true;
} else if (type == TvTrackInfo.TYPE_SUBTITLE
&& trackId != mSelectedSubtitleTrackId) {
mSelectedSubtitleTrackId = trackId;
return true;
}
}
return false;
}
/**
* Returns the new/updated video track that contains new video size information. Returns
* null if there is no video track to notify. Subsequent calls of this method results in a
* non-null video track returned only by the first call and null returned by following
* calls. The caller should immediately notify of the video size change upon receiving the
* track.
*/
TvTrackInfo getVideoTrackToNotify() {
synchronized (mTrackLock) {
if (!mVideoTracks.isEmpty() && mSelectedVideoTrackId != null) {
for (TvTrackInfo track : mVideoTracks) {
if (track.getId().equals(mSelectedVideoTrackId)) {
int videoWidth = track.getVideoWidth();
int videoHeight = track.getVideoHeight();
if (mVideoWidth != videoWidth || mVideoHeight != videoHeight) {
mVideoWidth = videoWidth;
mVideoHeight = videoHeight;
return track;
}
}
}
}
}
return null;
}
/** /**
* Calls {@link TvInputService.Session#appPrivateCommand(String, Bundle) * Calls {@link TvInputService.Session#appPrivateCommand(String, Bundle)
* TvInputService.Session.appPrivateCommand()} on the current TvView. * TvInputService.Session.appPrivateCommand()} on the current TvView.

View File

@@ -59,8 +59,6 @@ public class TvView extends ViewGroup {
private static final String TAG = "TvView"; private static final String TAG = "TvView";
private static final boolean DEBUG = false; private static final boolean DEBUG = false;
private static final int VIDEO_SIZE_VALUE_UNKNOWN = 0;
private static final int ZORDER_MEDIA = 0; private static final int ZORDER_MEDIA = 0;
private static final int ZORDER_MEDIA_OVERLAY = 1; private static final int ZORDER_MEDIA_OVERLAY = 1;
private static final int ZORDER_ON_TOP = 2; private static final int ZORDER_ON_TOP = 2;
@@ -69,7 +67,7 @@ public class TvView extends ViewGroup {
private static final int CAPTION_ENABLED = 1; private static final int CAPTION_ENABLED = 1;
private static final int CAPTION_DISABLED = 2; private static final int CAPTION_DISABLED = 2;
private static final WeakReference<TvView> NULL_TV_VIEW = new WeakReference(null); private static final WeakReference<TvView> NULL_TV_VIEW = new WeakReference<>(null);
private static final Object sMainTvViewLock = new Object(); private static final Object sMainTvViewLock = new Object();
private static WeakReference<TvView> sMainTvView = NULL_TV_VIEW; private static WeakReference<TvView> sMainTvView = NULL_TV_VIEW;
@@ -86,8 +84,6 @@ public class TvView extends ViewGroup {
private OnUnhandledInputEventListener mOnUnhandledInputEventListener; private OnUnhandledInputEventListener mOnUnhandledInputEventListener;
private boolean mHasStreamVolume; private boolean mHasStreamVolume;
private float mStreamVolume; private float mStreamVolume;
private int mVideoWidth = VIDEO_SIZE_VALUE_UNKNOWN;
private int mVideoHeight = VIDEO_SIZE_VALUE_UNKNOWN;
private int mCaptionEnabled; private int mCaptionEnabled;
private String mAppPrivateCommandAction; private String mAppPrivateCommandAction;
private Bundle mAppPrivateCommandData; private Bundle mAppPrivateCommandData;
@@ -200,7 +196,7 @@ public class TvView extends ViewGroup {
@SystemApi @SystemApi
public void setMain() { public void setMain() {
synchronized (sMainTvViewLock) { synchronized (sMainTvViewLock) {
sMainTvView = new WeakReference(this); sMainTvView = new WeakReference<>(this);
if (hasWindowFocus() && mSession != null) { if (hasWindowFocus() && mSession != null) {
mSession.setMain(); mSession.setMain();
} }
@@ -294,7 +290,7 @@ public class TvView extends ViewGroup {
} }
synchronized (sMainTvViewLock) { synchronized (sMainTvViewLock) {
if (sMainTvView.get() == null) { if (sMainTvView.get() == null) {
sMainTvView = new WeakReference(this); sMainTvView = new WeakReference<>(this);
} }
} }
if (mSessionCallback != null && mSessionCallback.mInputId.equals(inputId)) { if (mSessionCallback != null && mSessionCallback.mInputId.equals(inputId)) {
@@ -715,20 +711,9 @@ public class TvView extends ViewGroup {
public void onDisconnected(String inputId) { public void onDisconnected(String inputId) {
} }
/**
* This is invoked when the view is tuned to a specific channel and starts decoding video
* stream from there. It is also called later when the video size is changed.
*
* @param inputId The ID of the TV input bound to this view.
* @param width The width of the video.
* @param height The height of the video.
*/
public void onVideoSizeChanged(String inputId, int width, int height) {
}
/** /**
* This is invoked when the channel of this TvView is changed by the underlying TV input * This is invoked when the channel of this TvView is changed by the underlying TV input
* with out any {@link TvView#tune(String, Uri)} request. * without any {@link TvView#tune(String, Uri)} request.
* *
* @param inputId The ID of the TV input bound to this view. * @param inputId The ID of the TV input bound to this view.
* @param channelUri The URI of a channel. * @param channelUri The URI of a channel.
@@ -757,6 +742,18 @@ public class TvView extends ViewGroup {
public void onTrackSelected(String inputId, int type, String trackId) { public void onTrackSelected(String inputId, int type, String trackId) {
} }
/**
* This is invoked when the video size has been changed. It is also called when the first
* time video size information becomes available after this view is tuned to a specific
* channel.
*
* @param inputId The ID of the TV input bound to this view.
* @param width The width of the video.
* @param height The height of the video.
*/
public void onVideoSizeChanged(String inputId, int width, int height) {
}
/** /**
* This is called when the video is available, so the TV input starts the playback. * This is called when the video is available, so the TV input starts the playback.
* *
@@ -841,16 +838,17 @@ public class TvView extends ViewGroup {
@Override @Override
public void onSessionCreated(Session session) { public void onSessionCreated(Session session) {
if (DEBUG) {
Log.d(TAG, "onSessionCreated()");
}
if (this != mSessionCallback) { if (this != mSessionCallback) {
Log.w(TAG, "onSessionCreated - session already created");
// This callback is obsolete. // This callback is obsolete.
if (session != null) { if (session != null) {
session.release(); session.release();
} }
return; return;
} }
if (DEBUG) {
Log.d(TAG, "onSessionCreated()");
}
mSession = session; mSession = session;
if (session != null) { if (session != null) {
synchronized (sMainTvViewLock) { synchronized (sMainTvViewLock) {
@@ -891,7 +889,11 @@ public class TvView extends ViewGroup {
@Override @Override
public void onSessionReleased(Session session) { public void onSessionReleased(Session session) {
if (DEBUG) {
Log.d(TAG, "onSessionReleased()");
}
if (this != mSessionCallback) { if (this != mSessionCallback) {
Log.w(TAG, "onSessionReleased - session not created");
return; return;
} }
mOverlayViewCreated = false; mOverlayViewCreated = false;
@@ -905,12 +907,13 @@ public class TvView extends ViewGroup {
@Override @Override
public void onChannelRetuned(Session session, Uri channelUri) { public void onChannelRetuned(Session session, Uri channelUri) {
if (this != mSessionCallback) {
return;
}
if (DEBUG) { if (DEBUG) {
Log.d(TAG, "onChannelChangedByTvInput(" + channelUri + ")"); Log.d(TAG, "onChannelChangedByTvInput(" + channelUri + ")");
} }
if (this != mSessionCallback) {
Log.w(TAG, "onChannelRetuned - session not created");
return;
}
if (mCallback != null) { if (mCallback != null) {
mCallback.onChannelRetuned(mInputId, channelUri); mCallback.onChannelRetuned(mInputId, channelUri);
} }
@@ -918,11 +921,12 @@ public class TvView extends ViewGroup {
@Override @Override
public void onTracksChanged(Session session, List<TvTrackInfo> tracks) { public void onTracksChanged(Session session, List<TvTrackInfo> tracks) {
if (this != mSessionCallback) {
return;
}
if (DEBUG) { if (DEBUG) {
Log.d(TAG, "onTracksChanged()"); Log.d(TAG, "onTracksChanged(" + tracks + ")");
}
if (this != mSessionCallback) {
Log.w(TAG, "onTracksChanged - session not created");
return;
} }
if (mCallback != null) { if (mCallback != null) {
mCallback.onTracksChanged(mInputId, tracks); mCallback.onTracksChanged(mInputId, tracks);
@@ -931,26 +935,41 @@ public class TvView extends ViewGroup {
@Override @Override
public void onTrackSelected(Session session, int type, String trackId) { public void onTrackSelected(Session session, int type, String trackId) {
if (DEBUG) {
Log.d(TAG, "onTrackSelected(type=" + type + ", trackId=" + trackId + ")");
}
if (this != mSessionCallback) { if (this != mSessionCallback) {
Log.w(TAG, "onTrackSelected - session not created");
return; return;
} }
if (DEBUG) {
Log.d(TAG, "onTrackSelected()");
}
// TODO: Update the video size when the type is TYPE_VIDEO.
if (mCallback != null) { if (mCallback != null) {
mCallback.onTrackSelected(mInputId, type, trackId); mCallback.onTrackSelected(mInputId, type, trackId);
} }
} }
@Override @Override
public void onVideoAvailable(Session session) { public void onVideoSizeChanged(Session session, int width, int height) {
if (DEBUG) {
Log.d(TAG, "onVideoSizeChanged()");
}
if (this != mSessionCallback) { if (this != mSessionCallback) {
Log.w(TAG, "onVideoSizeChanged - session not created");
return; return;
} }
if (mCallback != null) {
mCallback.onVideoSizeChanged(mInputId, width, height);
}
}
@Override
public void onVideoAvailable(Session session) {
if (DEBUG) { if (DEBUG) {
Log.d(TAG, "onVideoAvailable()"); Log.d(TAG, "onVideoAvailable()");
} }
if (this != mSessionCallback) {
Log.w(TAG, "onVideoAvailable - session not created");
return;
}
if (mCallback != null) { if (mCallback != null) {
mCallback.onVideoAvailable(mInputId); mCallback.onVideoAvailable(mInputId);
} }
@@ -958,11 +977,12 @@ public class TvView extends ViewGroup {
@Override @Override
public void onVideoUnavailable(Session session, int reason) { public void onVideoUnavailable(Session session, int reason) {
if (this != mSessionCallback) {
return;
}
if (DEBUG) { if (DEBUG) {
Log.d(TAG, "onVideoUnavailable(" + reason + ")"); Log.d(TAG, "onVideoUnavailable(reason=" + reason + ")");
}
if (this != mSessionCallback) {
Log.w(TAG, "onVideoUnavailable - session not created");
return;
} }
if (mCallback != null) { if (mCallback != null) {
mCallback.onVideoUnavailable(mInputId, reason); mCallback.onVideoUnavailable(mInputId, reason);
@@ -971,12 +991,13 @@ public class TvView extends ViewGroup {
@Override @Override
public void onContentAllowed(Session session) { public void onContentAllowed(Session session) {
if (this != mSessionCallback) {
return;
}
if (DEBUG) { if (DEBUG) {
Log.d(TAG, "onContentAllowed()"); Log.d(TAG, "onContentAllowed()");
} }
if (this != mSessionCallback) {
Log.w(TAG, "onContentAllowed - session not created");
return;
}
if (mCallback != null) { if (mCallback != null) {
mCallback.onContentAllowed(mInputId); mCallback.onContentAllowed(mInputId);
} }
@@ -984,11 +1005,12 @@ public class TvView extends ViewGroup {
@Override @Override
public void onContentBlocked(Session session, TvContentRating rating) { public void onContentBlocked(Session session, TvContentRating rating) {
if (this != mSessionCallback) {
return;
}
if (DEBUG) { if (DEBUG) {
Log.d(TAG, "onContentBlocked()"); Log.d(TAG, "onContentBlocked(rating=" + rating + ")");
}
if (this != mSessionCallback) {
Log.w(TAG, "onContentBlocked - session not created");
return;
} }
if (mCallback != null) { if (mCallback != null) {
mCallback.onContentBlocked(mInputId, rating); mCallback.onContentBlocked(mInputId, rating);
@@ -997,13 +1019,14 @@ public class TvView extends ViewGroup {
@Override @Override
public void onLayoutSurface(Session session, int left, int top, int right, int bottom) { public void onLayoutSurface(Session session, int left, int top, int right, int bottom) {
if (this != mSessionCallback) {
return;
}
if (DEBUG) { if (DEBUG) {
Log.d(TAG, "onLayoutSurface (left=" + left + ", top=" + top + ", right=" Log.d(TAG, "onLayoutSurface (left=" + left + ", top=" + top + ", right="
+ right + ", bottom=" + bottom + ",)"); + right + ", bottom=" + bottom + ",)");
} }
if (this != mSessionCallback) {
Log.w(TAG, "onLayoutSurface - session not created");
return;
}
mSurfaceViewLeft = left; mSurfaceViewLeft = left;
mSurfaceViewTop = top; mSurfaceViewTop = top;
mSurfaceViewRight = right; mSurfaceViewRight = right;
@@ -1014,12 +1037,13 @@ public class TvView extends ViewGroup {
@Override @Override
public void onSessionEvent(Session session, String eventType, Bundle eventArgs) { public void onSessionEvent(Session session, String eventType, Bundle eventArgs) {
if (this != mSessionCallback) {
return;
}
if (DEBUG) { if (DEBUG) {
Log.d(TAG, "onSessionEvent(" + eventType + ")"); Log.d(TAG, "onSessionEvent(" + eventType + ")");
} }
if (this != mSessionCallback) {
Log.w(TAG, "onSessionEvent - session not created");
return;
}
if (mCallback != null) { if (mCallback != null) {
mCallback.onEvent(mInputId, eventType, eventArgs); mCallback.onEvent(mInputId, eventType, eventArgs);
} }