aboutsummaryrefslogtreecommitdiff
path: root/src/com/android/tv/dvr/ui/DvrBrowseFragment.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/com/android/tv/dvr/ui/DvrBrowseFragment.java')
-rw-r--r--src/com/android/tv/dvr/ui/DvrBrowseFragment.java102
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();
}
}