diff options
author | Jae Seo <jaeseo@google.com> | 2015-04-23 00:17:36 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2015-04-23 00:17:37 +0000 |
commit | c6e64a95ce6eab7bda64914ee90e353fe26169ec (patch) | |
tree | 890c46a8e002aa95fea4fac9d8c885593829effa | |
parent | 7de07a60c22efd7abd298d15e2517d0b1ac4a093 (diff) | |
parent | 411d58d330eafb093fe7edfa3fcccfadfc470076 (diff) | |
download | frameworks_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.java | 30 |
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; |