summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJae Seo <jaeseo@google.com>2015-04-23 00:17:36 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2015-04-23 00:17:37 +0000
commitc6e64a95ce6eab7bda64914ee90e353fe26169ec (patch)
tree890c46a8e002aa95fea4fac9d8c885593829effa
parent7de07a60c22efd7abd298d15e2517d0b1ac4a093 (diff)
parent411d58d330eafb093fe7edfa3fcccfadfc470076 (diff)
downloadframeworks_base-c6e64a95ce6eab7bda64914ee90e353fe26169ec.zip
frameworks_base-c6e64a95ce6eab7bda64914ee90e353fe26169ec.tar.gz
frameworks_base-c6e64a95ce6eab7bda64914ee90e353fe26169ec.tar.bz2
Merge "TIF: Cache multiple app private commands"
-rw-r--r--media/java/android/media/tv/TvView.java30
1 files changed, 14 insertions, 16 deletions
diff --git a/media/java/android/media/tv/TvView.java b/media/java/android/media/tv/TvView.java
index 9451f69..fd5d647 100644
--- a/media/java/android/media/tv/TvView.java
+++ b/media/java/android/media/tv/TvView.java
@@ -31,6 +31,7 @@ import android.os.Handler;
import android.text.TextUtils;
import android.util.AttributeSet;
import android.util.Log;
+import android.util.Pair;
import android.view.InputEvent;
import android.view.KeyEvent;
import android.view.MotionEvent;
@@ -42,7 +43,9 @@ import android.view.ViewGroup;
import android.view.ViewRootImpl;
import java.lang.ref.WeakReference;
+import java.util.ArrayDeque;
import java.util.List;
+import java.util.Queue;
/**
* Displays TV contents. The TvView class provides a high level interface for applications to show
@@ -83,8 +86,7 @@ public class TvView extends ViewGroup {
private OnUnhandledInputEventListener mOnUnhandledInputEventListener;
private Float mStreamVolume;
private Boolean mCaptionEnabled;
- private String mAppPrivateCommandAction;
- private Bundle mAppPrivateCommandData;
+ private final Queue<Pair<String, Bundle>> mPendingAppPrivateCommands = new ArrayDeque<>();
private boolean mSurfaceChanged;
private int mSurfaceFormat;
@@ -501,12 +503,9 @@ public class TvView extends ViewGroup {
if (mSession != null) {
mSession.sendAppPrivateCommand(action, data);
} else {
- Log.w(TAG, "sendAppPrivateCommand - session not created (action " + action + " cached)");
- if (mAppPrivateCommandAction != null) {
- Log.w(TAG, "previous cached action " + action + " removed");
- }
- mAppPrivateCommandAction = action;
- mAppPrivateCommandData = data;
+ Log.w(TAG, "sendAppPrivateCommand - session not yet created (action \"" + action
+ + "\" pending)");
+ mPendingAppPrivateCommands.add(Pair.create(action, data));
}
}
@@ -728,8 +727,7 @@ public class TvView extends ViewGroup {
}
private void release() {
- mAppPrivateCommandAction = null;
- mAppPrivateCommandData = null;
+ mPendingAppPrivateCommands.clear();
setSessionSurface(null);
removeSessionOverlayView();
@@ -1002,6 +1000,12 @@ public class TvView extends ViewGroup {
}
mSession = session;
if (session != null) {
+ // Sends the pending app private commands first.
+ for (Pair<String, Bundle> command : mPendingAppPrivateCommands) {
+ mSession.sendAppPrivateCommand(command.first, command.second);
+ }
+ mPendingAppPrivateCommands.clear();
+
synchronized (sMainTvViewLock) {
if (hasWindowFocus() && TvView.this == sMainTvView.get()) {
mSession.setMain();
@@ -1024,12 +1028,6 @@ public class TvView extends ViewGroup {
mSession.setCaptionEnabled(mCaptionEnabled);
}
mSession.tune(mChannelUri, mTuneParams);
- if (mAppPrivateCommandAction != null) {
- mSession.sendAppPrivateCommand(
- mAppPrivateCommandAction, mAppPrivateCommandData);
- mAppPrivateCommandAction = null;
- mAppPrivateCommandData = null;
- }
ensurePositionTracking();
} else {
mSessionCallback = null;