Add playback progress.

Change-Id: I9401b46c34e440de14e7cb794a1c3a1733e0d46c
diff --git a/samples/SupportLeanbackDemos/src/com/example/android/leanback/PlaybackOverlayFragment.java b/samples/SupportLeanbackDemos/src/com/example/android/leanback/PlaybackOverlayFragment.java
index ddb4f48..db674a2 100644
--- a/samples/SupportLeanbackDemos/src/com/example/android/leanback/PlaybackOverlayFragment.java
+++ b/samples/SupportLeanbackDemos/src/com/example/android/leanback/PlaybackOverlayFragment.java
@@ -16,6 +16,7 @@
 import android.content.Context;
 import android.content.res.Resources;
 import android.os.Bundle;
+import android.os.Handler;
 import android.support.v17.leanback.widget.Action;
 import android.support.v17.leanback.widget.ArrayObjectAdapter;
 import android.support.v17.leanback.widget.ClassPresenterSelector;
@@ -32,9 +33,11 @@
 public class PlaybackOverlayFragment extends android.support.v17.leanback.app.PlaybackOverlayFragment {
     private static final String TAG = "leanback.PlaybackControlsFragment";
 
-    private static final int NUM_ROWS = 3;
-    private static final boolean SHOW_ITEM_DETAIL = true;
+    private static final boolean SHOW_DETAIL = true;
+    private static final boolean SHOW_IMAGE = true;
     private static final boolean HIDE_MORE_ACTIONS = false;
+    private static final int TOTAL_TIME_MS = 120 * 1000;
+    private static final int NUM_ROWS = 3;
 
     private ArrayObjectAdapter mRowsAdapter;
     private ArrayObjectAdapter mPrimaryActionsAdapter;
@@ -42,12 +45,16 @@
     private PlaybackControlsRow.PlayPauseAction mPlayPauseAction;
     private PlaybackControlsRow.RepeatAction mRepeatAction;
     private PlaybackControlsRow mPlaybackControlsRow;
+    private Handler mHandler;
+    private Runnable mRunnable;
 
     @Override
     public void onCreate(Bundle savedInstanceState) {
         Log.i(TAG, "onCreate");
         super.onCreate(savedInstanceState);
 
+        mHandler = new Handler();
+
         setupRows();
     }
 
@@ -59,7 +66,7 @@
         ClassPresenterSelector ps = new ClassPresenterSelector();
 
         PlaybackControlsRowPresenter playbackControlsRowPresenter;
-        if (SHOW_ITEM_DETAIL) {
+        if (SHOW_DETAIL) {
             playbackControlsRowPresenter = new PlaybackControlsRowPresenter(
                     new DetailsDescriptionPresenter());
         } else {
@@ -69,6 +76,15 @@
             public void onActionClicked(Action action) {
                 Toast.makeText(getActivity(), action.toString(), Toast.LENGTH_SHORT).show();
                 if (action.getId() == mPlayPauseAction.getId()) {
+                    if (mPlayPauseAction.isPlayIconShown()) {
+                        int totalTime = mPlaybackControlsRow.getTotalTime();
+                        if (totalTime > 0 && mPlaybackControlsRow.getCurrentTime() >= totalTime) {
+                            mPlaybackControlsRow.setCurrentTime(0);
+                        }
+                        startProgressAutomation();
+                    } else {
+                        stopProgressAutomation();
+                    }
                     mPlayPauseAction.toggle();
                     notifyChanged(mPrimaryActionsAdapter, mPlayPauseAction);
                 } else if (action.getId() == mRepeatAction.getId()) {
@@ -95,15 +111,21 @@
         mPrimaryActionsAdapter = new ArrayObjectAdapter(presenterSelector);
         mSecondaryActionsAdapter = new ArrayObjectAdapter(presenterSelector);
 
-        if (SHOW_ITEM_DETAIL) {
+        if (SHOW_DETAIL) {
             mPlaybackControlsRow = new PlaybackControlsRow("Playback Controls Title");
-            mPlaybackControlsRow.setImageDrawable(context.getResources().getDrawable(
-                    R.drawable.details_img));
         } else {
             mPlaybackControlsRow = new PlaybackControlsRow();
         }
+        if (SHOW_IMAGE) {
+            mPlaybackControlsRow.setImageDrawable(context.getResources().getDrawable(
+                    R.drawable.details_img));
+        }
         mPlaybackControlsRow.setPrimaryActionsAdapter(mPrimaryActionsAdapter);
         mPlaybackControlsRow.setSecondaryActionsAdapter(mSecondaryActionsAdapter);
+        mPlaybackControlsRow.setTotalTime(TOTAL_TIME_MS);
+        mPlaybackControlsRow.setCurrentTime(10 * 1000);
+        mPlaybackControlsRow.setBufferedProgress(75 * 1000);
+
         mRowsAdapter.add(mPlaybackControlsRow);
 
         mPlayPauseAction = new PlaybackControlsRow.PlayPauseAction(context);
@@ -128,4 +150,28 @@
             mRowsAdapter.add(new ListRow(header, listRowAdapter));
         }
     }
+
+    private void startProgressAutomation() {
+        int width = getView().getWidth();
+        final int totalTime = mPlaybackControlsRow.getTotalTime();
+        final int updateFreq = totalTime <= 0 ? 1000 :
+                Math.max(16, totalTime / width);
+        mRunnable = new Runnable() {
+            @Override
+            public void run() {
+                int currentTime = mPlaybackControlsRow.getCurrentTime() + updateFreq;
+                mPlaybackControlsRow.setCurrentTime(currentTime);
+                if (totalTime <= 0 || totalTime > currentTime) {
+                    mHandler.postDelayed(this, updateFreq);
+                }
+            }
+        };
+        mHandler.postDelayed(mRunnable, updateFreq);
+    }
+
+    private void stopProgressAutomation() {
+        if (mHandler != null && mRunnable != null) {
+            mHandler.removeCallbacks(mRunnable);
+        }
+    }
 }