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
diff --git a/media/java/android/media/tv/TvInputManager.java b/media/java/android/media/tv/TvInputManager.java
index 78714d2..51bd205 100644
--- a/media/java/android/media/tv/TvInputManager.java
+++ b/media/java/android/media/tv/TvInputManager.java
@@ -159,12 +159,12 @@
private final Object mLock = new Object();
- // @GuardedBy(mLock)
+ // @GuardedBy("mLock")
private final List<TvInputCallbackRecord> mCallbackRecords =
new LinkedList<TvInputCallbackRecord>();
// 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>();
// A mapping from the sequence number of a session to its SessionCallbackRecord.
@@ -207,7 +207,7 @@
/**
* 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 channelUri The URI of a channel.
@@ -227,7 +227,7 @@
/**
* 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
* {@link TvTrackInfo#TYPE_AUDIO}, {@link TvTrackInfo#TYPE_VIDEO} or
* {@link TvTrackInfo#TYPE_SUBTITLE}.
@@ -238,6 +238,18 @@
}
/**
+ * 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.
*
* @param session A {@link TvInputManager.Session} associated with this callback.
@@ -312,13 +324,13 @@
private final Handler mHandler;
private Session mSession;
- public SessionCallbackRecord(SessionCallback sessionCallback,
+ SessionCallbackRecord(SessionCallback sessionCallback,
Handler handler) {
mSessionCallback = sessionCallback;
mHandler = handler;
}
- public void postSessionCreated(final Session session) {
+ void postSessionCreated(final Session session) {
mSession = session;
mHandler.post(new Runnable() {
@Override
@@ -328,7 +340,7 @@
});
}
- public void postSessionReleased() {
+ void postSessionReleased() {
mHandler.post(new Runnable() {
@Override
public void run() {
@@ -337,7 +349,7 @@
});
}
- public void postChannelRetuned(final Uri channelUri) {
+ void postChannelRetuned(final Uri channelUri) {
mHandler.post(new Runnable() {
@Override
public void run() {
@@ -346,49 +358,34 @@
});
}
- public void postTracksChanged(final List<TvTrackInfo> tracks) {
+ void postTracksChanged(final List<TvTrackInfo> tracks) {
mHandler.post(new Runnable() {
@Override
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);
}
});
}
- public void postTrackSelected(final int type, final String trackId) {
+ void postTrackSelected(final int type, final String trackId) {
mHandler.post(new Runnable() {
@Override
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);
}
});
}
- 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() {
@Override
public void run() {
@@ -397,7 +394,7 @@
});
}
- public void postVideoUnavailable(final int reason) {
+ void postVideoUnavailable(final int reason) {
mHandler.post(new Runnable() {
@Override
public void run() {
@@ -406,7 +403,7 @@
});
}
- public void postContentAllowed() {
+ void postContentAllowed() {
mHandler.post(new Runnable() {
@Override
public void run() {
@@ -415,7 +412,7 @@
});
}
- public void postContentBlocked(final TvContentRating rating) {
+ void postContentBlocked(final TvContentRating rating) {
mHandler.post(new Runnable() {
@Override
public void run() {
@@ -424,7 +421,7 @@
});
}
- 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) {
mHandler.post(new Runnable() {
@Override
@@ -434,7 +431,7 @@
});
}
- public void postSessionEvent(final String eventType, final Bundle eventArgs) {
+ void postSessionEvent(final String eventType, final Bundle eventArgs) {
mHandler.post(new Runnable() {
@Override
public void run() {
@@ -610,7 +607,10 @@
Log.e(TAG, "Callback not found for seq " + seq);
return;
}
- record.postTracksChanged(tracks);
+ if (record.mSession.updateTracks(tracks)) {
+ record.postTracksChanged(tracks);
+ postVideoSizeChangedIfNeededLocked(record);
+ }
}
}
@@ -622,7 +622,17 @@
Log.e(TAG, "Callback not found for seq " + seq);
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 @@
}
/**
- * 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>
* <li>{@link #INPUT_STATE_CONNECTED}
* <li>{@link #INPUT_STATE_CONNECTED_STANDBY}
@@ -1133,12 +1143,24 @@
private IBinder mToken;
private TvInputEventSender mSender;
private InputChannel mChannel;
+
+ private final Object mTrackLock = new Object();
+ // @GuardedBy("mTrackLock")
private final List<TvTrackInfo> mAudioTracks = new ArrayList<TvTrackInfo>();
+ // @GuardedBy("mTrackLock")
private final List<TvTrackInfo> mVideoTracks = new ArrayList<TvTrackInfo>();
+ // @GuardedBy("mTrackLock")
private final List<TvTrackInfo> mSubtitleTracks = new ArrayList<TvTrackInfo>();
+ // @GuardedBy("mTrackLock")
private String mSelectedAudioTrackId;
+ // @GuardedBy("mTrackLock")
private String mSelectedVideoTrackId;
+ // @GuardedBy("mTrackLock")
private String mSelectedSubtitleTrackId;
+ // @GuardedBy("mTrackLock")
+ private int mVideoWidth;
+ // @GuardedBy("mTrackLock")
+ private int mVideoHeight;
private Session(IBinder token, InputChannel channel, ITvInputManager service, int userId,
int seq, SparseArray<SessionCallbackRecord> sessionCallbackRecordMap) {
@@ -1273,12 +1295,16 @@
Log.w(TAG, "The session has been already released");
return;
}
- mAudioTracks.clear();
- mVideoTracks.clear();
- mSubtitleTracks.clear();
- mSelectedAudioTrackId = null;
- mSelectedVideoTrackId = null;
- mSelectedSubtitleTrackId = null;
+ synchronized (mTrackLock) {
+ mAudioTracks.clear();
+ mVideoTracks.clear();
+ mSubtitleTracks.clear();
+ mSelectedAudioTrackId = null;
+ mSelectedVideoTrackId = null;
+ mSelectedSubtitleTrackId = null;
+ mVideoWidth = 0;
+ mVideoHeight = 0;
+ }
try {
mService.tune(mToken, channelUri, params, mUserId);
} catch (RemoteException e) {
@@ -1314,23 +1340,25 @@
* @see #getTracks
*/
public void selectTrack(int type, String trackId) {
- if (type == TvTrackInfo.TYPE_AUDIO) {
- if (trackId != null && !containsTrack(mAudioTracks, trackId)) {
- Log.w(TAG, "Invalid audio trackId: " + trackId);
- return;
+ synchronized (mTrackLock) {
+ if (type == TvTrackInfo.TYPE_AUDIO) {
+ if (trackId != null && !containsTrack(mAudioTracks, trackId)) {
+ 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) {
Log.w(TAG, "The session has been already released");
@@ -1361,21 +1389,23 @@
* @return the list of tracks for the given type.
*/
public List<TvTrackInfo> getTracks(int type) {
- if (type == TvTrackInfo.TYPE_AUDIO) {
- if (mAudioTracks == null) {
- return null;
+ synchronized (mTrackLock) {
+ if (type == TvTrackInfo.TYPE_AUDIO) {
+ 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);
}
@@ -1388,17 +1418,89 @@
* @see #selectTrack
*/
public String getSelectedTrack(int type) {
- if (type == TvTrackInfo.TYPE_AUDIO) {
- return mSelectedAudioTrackId;
- } else if (type == TvTrackInfo.TYPE_VIDEO) {
- return mSelectedVideoTrackId;
- } else if (type == TvTrackInfo.TYPE_SUBTITLE) {
- return mSelectedSubtitleTrackId;
+ synchronized (mTrackLock) {
+ if (type == TvTrackInfo.TYPE_AUDIO) {
+ return mSelectedAudioTrackId;
+ } else if (type == TvTrackInfo.TYPE_VIDEO) {
+ return mSelectedVideoTrackId;
+ } else if (type == TvTrackInfo.TYPE_SUBTITLE) {
+ return mSelectedSubtitleTrackId;
+ }
}
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)
* TvInputService.Session.appPrivateCommand()} on the current TvView.
*
diff --git a/media/java/android/media/tv/TvView.java b/media/java/android/media/tv/TvView.java
index 92a2a39..f9d84c1 100644
--- a/media/java/android/media/tv/TvView.java
+++ b/media/java/android/media/tv/TvView.java
@@ -59,8 +59,6 @@
private static final String TAG = "TvView";
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_OVERLAY = 1;
private static final int ZORDER_ON_TOP = 2;
@@ -69,7 +67,7 @@
private static final int CAPTION_ENABLED = 1;
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 WeakReference<TvView> sMainTvView = NULL_TV_VIEW;
@@ -86,8 +84,6 @@
private OnUnhandledInputEventListener mOnUnhandledInputEventListener;
private boolean mHasStreamVolume;
private float mStreamVolume;
- private int mVideoWidth = VIDEO_SIZE_VALUE_UNKNOWN;
- private int mVideoHeight = VIDEO_SIZE_VALUE_UNKNOWN;
private int mCaptionEnabled;
private String mAppPrivateCommandAction;
private Bundle mAppPrivateCommandData;
@@ -200,7 +196,7 @@
@SystemApi
public void setMain() {
synchronized (sMainTvViewLock) {
- sMainTvView = new WeakReference(this);
+ sMainTvView = new WeakReference<>(this);
if (hasWindowFocus() && mSession != null) {
mSession.setMain();
}
@@ -294,7 +290,7 @@
}
synchronized (sMainTvViewLock) {
if (sMainTvView.get() == null) {
- sMainTvView = new WeakReference(this);
+ sMainTvView = new WeakReference<>(this);
}
}
if (mSessionCallback != null && mSessionCallback.mInputId.equals(inputId)) {
@@ -716,19 +712,8 @@
}
/**
- * 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
- * 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 channelUri The URI of a channel.
@@ -758,6 +743,18 @@
}
/**
+ * 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.
*
* @param inputId The ID of the TV input bound to this view.
@@ -841,16 +838,17 @@
@Override
public void onSessionCreated(Session session) {
+ if (DEBUG) {
+ Log.d(TAG, "onSessionCreated()");
+ }
if (this != mSessionCallback) {
+ Log.w(TAG, "onSessionCreated - session already created");
// This callback is obsolete.
if (session != null) {
session.release();
}
return;
}
- if (DEBUG) {
- Log.d(TAG, "onSessionCreated()");
- }
mSession = session;
if (session != null) {
synchronized (sMainTvViewLock) {
@@ -891,7 +889,11 @@
@Override
public void onSessionReleased(Session session) {
+ if (DEBUG) {
+ Log.d(TAG, "onSessionReleased()");
+ }
if (this != mSessionCallback) {
+ Log.w(TAG, "onSessionReleased - session not created");
return;
}
mOverlayViewCreated = false;
@@ -905,12 +907,13 @@
@Override
public void onChannelRetuned(Session session, Uri channelUri) {
- if (this != mSessionCallback) {
- return;
- }
if (DEBUG) {
Log.d(TAG, "onChannelChangedByTvInput(" + channelUri + ")");
}
+ if (this != mSessionCallback) {
+ Log.w(TAG, "onChannelRetuned - session not created");
+ return;
+ }
if (mCallback != null) {
mCallback.onChannelRetuned(mInputId, channelUri);
}
@@ -918,11 +921,12 @@
@Override
public void onTracksChanged(Session session, List<TvTrackInfo> tracks) {
- if (this != mSessionCallback) {
- return;
- }
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) {
mCallback.onTracksChanged(mInputId, tracks);
@@ -931,26 +935,41 @@
@Override
public void onTrackSelected(Session session, int type, String trackId) {
+ if (DEBUG) {
+ Log.d(TAG, "onTrackSelected(type=" + type + ", trackId=" + trackId + ")");
+ }
if (this != mSessionCallback) {
+ Log.w(TAG, "onTrackSelected - session not created");
return;
}
- if (DEBUG) {
- Log.d(TAG, "onTrackSelected()");
- }
- // TODO: Update the video size when the type is TYPE_VIDEO.
if (mCallback != null) {
mCallback.onTrackSelected(mInputId, type, trackId);
}
}
@Override
- public void onVideoAvailable(Session session) {
+ public void onVideoSizeChanged(Session session, int width, int height) {
+ if (DEBUG) {
+ Log.d(TAG, "onVideoSizeChanged()");
+ }
if (this != mSessionCallback) {
+ Log.w(TAG, "onVideoSizeChanged - session not created");
return;
}
+ if (mCallback != null) {
+ mCallback.onVideoSizeChanged(mInputId, width, height);
+ }
+ }
+
+ @Override
+ public void onVideoAvailable(Session session) {
if (DEBUG) {
Log.d(TAG, "onVideoAvailable()");
}
+ if (this != mSessionCallback) {
+ Log.w(TAG, "onVideoAvailable - session not created");
+ return;
+ }
if (mCallback != null) {
mCallback.onVideoAvailable(mInputId);
}
@@ -958,11 +977,12 @@
@Override
public void onVideoUnavailable(Session session, int reason) {
- if (this != mSessionCallback) {
- return;
- }
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) {
mCallback.onVideoUnavailable(mInputId, reason);
@@ -971,12 +991,13 @@
@Override
public void onContentAllowed(Session session) {
- if (this != mSessionCallback) {
- return;
- }
if (DEBUG) {
Log.d(TAG, "onContentAllowed()");
}
+ if (this != mSessionCallback) {
+ Log.w(TAG, "onContentAllowed - session not created");
+ return;
+ }
if (mCallback != null) {
mCallback.onContentAllowed(mInputId);
}
@@ -984,11 +1005,12 @@
@Override
public void onContentBlocked(Session session, TvContentRating rating) {
- if (this != mSessionCallback) {
- return;
- }
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) {
mCallback.onContentBlocked(mInputId, rating);
@@ -997,13 +1019,14 @@
@Override
public void onLayoutSurface(Session session, int left, int top, int right, int bottom) {
- if (this != mSessionCallback) {
- return;
- }
if (DEBUG) {
Log.d(TAG, "onLayoutSurface (left=" + left + ", top=" + top + ", right="
+ right + ", bottom=" + bottom + ",)");
}
+ if (this != mSessionCallback) {
+ Log.w(TAG, "onLayoutSurface - session not created");
+ return;
+ }
mSurfaceViewLeft = left;
mSurfaceViewTop = top;
mSurfaceViewRight = right;
@@ -1014,12 +1037,13 @@
@Override
public void onSessionEvent(Session session, String eventType, Bundle eventArgs) {
- if (this != mSessionCallback) {
- return;
- }
if (DEBUG) {
Log.d(TAG, "onSessionEvent(" + eventType + ")");
}
+ if (this != mSessionCallback) {
+ Log.w(TAG, "onSessionEvent - session not created");
+ return;
+ }
if (mCallback != null) {
mCallback.onEvent(mInputId, eventType, eventArgs);
}