diff options
Diffstat (limited to 'src/com/android/tv/dvr/ui/DvrBrowseFragment.java')
-rw-r--r-- | src/com/android/tv/dvr/ui/DvrBrowseFragment.java | 102 |
1 files changed, 69 insertions, 33 deletions
diff --git a/src/com/android/tv/dvr/ui/DvrBrowseFragment.java b/src/com/android/tv/dvr/ui/DvrBrowseFragment.java index 87e47930..70e71cab 100644 --- a/src/com/android/tv/dvr/ui/DvrBrowseFragment.java +++ b/src/com/android/tv/dvr/ui/DvrBrowseFragment.java @@ -20,26 +20,33 @@ import android.os.Bundle; import android.support.annotation.IntDef; import android.support.v17.leanback.app.BrowseFragment; import android.support.v17.leanback.widget.ArrayObjectAdapter; +import android.support.v17.leanback.widget.ClassPresenterSelector; import android.support.v17.leanback.widget.HeaderItem; import android.support.v17.leanback.widget.ListRow; import android.support.v17.leanback.widget.ListRowPresenter; +import android.support.v17.leanback.widget.ObjectAdapter; import android.util.Log; import com.android.tv.R; import com.android.tv.TvApplication; +import com.android.tv.common.recording.RecordedProgram; import com.android.tv.dvr.DvrDataManager; -import com.android.tv.dvr.Recording; +import com.android.tv.dvr.ScheduledRecording; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.util.LinkedHashMap; -import java.util.List; /** * {@link BrowseFragment} for DVR functions. */ public class DvrBrowseFragment extends BrowseFragment { private static final String TAG = "DvrBrowseFragment"; + private static final boolean DEBUG = false; + + private ScheduledRecordingsAdapter mRecordingsInProgressAdapter; + private ScheduledRecordingsAdapter mRecordingsNotStatedAdapter; + private RecordedProgramsAdapter mRecordedProgramsAdapter; @IntDef({DVR_CURRENT_RECORDINGS, DVR_SCHEDULED_RECORDINGS, DVR_RECORDED_PROGRAMS, DVR_SETTINGS}) @Retention(RetentionPolicy.SOURCE) @@ -49,27 +56,48 @@ public class DvrBrowseFragment extends BrowseFragment { public static final int DVR_RECORDED_PROGRAMS = 2; public static final int DVR_SETTINGS = 3; - private static LinkedHashMap<Integer, Integer> sHeaders = + private static final LinkedHashMap<Integer, Integer> sHeaders = new LinkedHashMap<Integer, Integer>() {{ put(DVR_CURRENT_RECORDINGS, R.string.dvr_main_current_recordings); put(DVR_SCHEDULED_RECORDINGS, R.string.dvr_main_scheduled_recordings); put(DVR_RECORDED_PROGRAMS, R.string.dvr_main_recorded_programs); - put(DVR_SETTINGS, R.string.dvr_main_settings); + /* put(DVR_SETTINGS, R.string.dvr_main_settings); */ // TODO: Temporarily remove it for DP. }}; private DvrDataManager mDvrDataManager; private ArrayObjectAdapter mRowsAdapter; @Override - public void onActivityCreated(Bundle savedInstanceState) { - Log.d(TAG, "onCreate"); - super.onActivityCreated(savedInstanceState); + public void onCreate(Bundle savedInstanceState) { + if (DEBUG) Log.d(TAG, "onCreate"); + super.onCreate(savedInstanceState); + mDvrDataManager = TvApplication.getSingletons(getContext()).getDvrDataManager(); setupUiElements(); - setupAdapter(); + setupAdapters(); + mRecordingsInProgressAdapter.start(); + mRecordingsNotStatedAdapter.start(); + mRecordedProgramsAdapter.start(); + initRows(); prepareEntranceTransition(); + startEntranceTransition(); + } - // TODO: load asynchronously. - loadData(); + @Override + public void onStart() { + if (DEBUG) Log.d(TAG, "onStart"); + super.onStart(); + // TODO: It's a workaround for a bug that a progress bar isn't hidden. + // We need to remove it later. + getProgressBarManager().disableProgressBar(); + } + + @Override + public void onDestroy() { + if (DEBUG) Log.d(TAG, "onDestroy"); + mRecordingsInProgressAdapter.stop(); + mRecordingsNotStatedAdapter.stop(); + mRecordedProgramsAdapter.stop(); + super.onDestroy(); } private void setupUiElements() { @@ -77,43 +105,51 @@ public class DvrBrowseFragment extends BrowseFragment { setHeadersTransitionOnBackEnabled(false); } - private void setupAdapter() { - mDvrDataManager = TvApplication.getSingletons(getContext()).getDvrDataManager(); + private void setupAdapters() { mRowsAdapter = new ArrayObjectAdapter(new ListRowPresenter()); setAdapter(mRowsAdapter); + ClassPresenterSelector presenterSelector = new ClassPresenterSelector(); + EmptyItemPresenter emptyItemPresenter = new EmptyItemPresenter(this); + ScheduledRecordingPresenter scheduledRecordingPresenter = new ScheduledRecordingPresenter( + getContext()); + RecordedProgramPresenter recordedProgramPresenter = new RecordedProgramPresenter( + getContext()); + presenterSelector.addClassPresenter(ScheduledRecording.class, scheduledRecordingPresenter); + presenterSelector.addClassPresenter(RecordedProgram.class, recordedProgramPresenter); + presenterSelector.addClassPresenter(EmptyHolder.class, emptyItemPresenter); + mRecordingsInProgressAdapter = new ScheduledRecordingsAdapter(mDvrDataManager, + ScheduledRecording.STATE_RECORDING_IN_PROGRESS, presenterSelector); + mRecordingsNotStatedAdapter = new ScheduledRecordingsAdapter(mDvrDataManager, + ScheduledRecording.STATE_RECORDING_NOT_STARTED, presenterSelector); + mRecordedProgramsAdapter = new RecordedProgramsAdapter(mDvrDataManager, presenterSelector); } - private void loadRow(ArrayObjectAdapter gridRowAdapter, List<Recording> recordings) { - if (recordings == null || recordings.size() == 0) { - gridRowAdapter.add(null); - return; - } - for (Recording r : recordings) { - gridRowAdapter.add(r); - } - } - - private void loadData() { + private void initRows() { + mRowsAdapter.clear(); for (@DVR_HEADERS_MODE int i : sHeaders.keySet()) { HeaderItem gridHeader = new HeaderItem(i, getContext().getString(sHeaders.get(i))); - GridItemPresenter gridPresenter = new GridItemPresenter(this); - ArrayObjectAdapter gridRowAdapter = new ArrayObjectAdapter(gridPresenter); + ObjectAdapter gridRowAdapter = null; switch (i) { - case DVR_CURRENT_RECORDINGS: - loadRow(gridRowAdapter, mDvrDataManager.getStartedRecordings()); + case DVR_CURRENT_RECORDINGS: { + gridRowAdapter = mRecordingsInProgressAdapter; break; - case DVR_SCHEDULED_RECORDINGS: - loadRow(gridRowAdapter, mDvrDataManager.getScheduledRecordings()); + } + case DVR_SCHEDULED_RECORDINGS: { + gridRowAdapter = mRecordingsNotStatedAdapter; + } break; - case DVR_RECORDED_PROGRAMS: - loadRow(gridRowAdapter, mDvrDataManager.getFinishedRecordings()); + case DVR_RECORDED_PROGRAMS: { + gridRowAdapter = mRecordedProgramsAdapter; + } break; case DVR_SETTINGS: + gridRowAdapter = new ArrayObjectAdapter(new EmptyItemPresenter(this)); // TODO: provide setup rows. break; } - mRowsAdapter.add(new ListRow(gridHeader, gridRowAdapter)); + if (gridRowAdapter != null) { + mRowsAdapter.add(new ListRow(gridHeader, gridRowAdapter)); + } } - startEntranceTransition(); } } |