aboutsummaryrefslogtreecommitdiff
path: root/src/com/android/tv/dvr/ui/DvrPrioritySettingsFragment.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/com/android/tv/dvr/ui/DvrPrioritySettingsFragment.java')
-rw-r--r--src/com/android/tv/dvr/ui/DvrPrioritySettingsFragment.java262
1 files changed, 262 insertions, 0 deletions
diff --git a/src/com/android/tv/dvr/ui/DvrPrioritySettingsFragment.java b/src/com/android/tv/dvr/ui/DvrPrioritySettingsFragment.java
new file mode 100644
index 00000000..e4cb7243
--- /dev/null
+++ b/src/com/android/tv/dvr/ui/DvrPrioritySettingsFragment.java
@@ -0,0 +1,262 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.tv.dvr.ui;
+
+import android.app.FragmentManager;
+import android.content.Context;
+import android.graphics.Typeface;
+import android.os.Bundle;
+import android.support.v17.leanback.widget.GuidanceStylist.Guidance;
+import android.support.v17.leanback.widget.GuidedAction;
+import android.support.v17.leanback.widget.GuidedActionsStylist;
+import android.view.View;
+import android.widget.ImageView;
+import android.widget.TextView;
+
+import com.android.tv.R;
+import com.android.tv.TvApplication;
+import com.android.tv.dvr.DvrDataManager;
+import com.android.tv.dvr.DvrManager;
+import com.android.tv.dvr.DvrScheduleManager;
+import com.android.tv.dvr.data.SeriesRecording;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/** Fragment for DVR series recording settings. */
+public class DvrPrioritySettingsFragment extends TrackedGuidedStepFragment {
+ /**
+ * Name of series recording id starting the fragment.
+ * Type: Long
+ */
+ public static final String COME_FROM_SERIES_RECORDING_ID = "series_recording_id";
+
+ private static final int ONE_TIME_RECORDING_ID = 0;
+ // button action's IDs are negative.
+ private static final long ACTION_ID_SAVE = -100L;
+
+ private final List<SeriesRecording> mSeriesRecordings = new ArrayList<>();
+
+ private SeriesRecording mSelectedRecording;
+ private SeriesRecording mComeFromSeriesRecording;
+ private float mSelectedActionElevation;
+ private int mActionColor;
+ private int mSelectedActionColor;
+
+ @Override
+ public void onAttach(Context context) {
+ super.onAttach(context);
+ mSeriesRecordings.clear();
+ mSeriesRecordings.add(new SeriesRecording.Builder()
+ .setTitle(getString(R.string.dvr_priority_action_one_time_recording))
+ .setPriority(Long.MAX_VALUE)
+ .setId(ONE_TIME_RECORDING_ID)
+ .build());
+ DvrDataManager dvrDataManager = TvApplication.getSingletons(context).getDvrDataManager();
+ long comeFromSeriesRecordingId =
+ getArguments().getLong(COME_FROM_SERIES_RECORDING_ID, -1);
+ for (SeriesRecording series : dvrDataManager.getSeriesRecordings()) {
+ if (series.getState() == SeriesRecording.STATE_SERIES_NORMAL
+ || series.getId() == comeFromSeriesRecordingId) {
+ mSeriesRecordings.add(series);
+ }
+ }
+ mSeriesRecordings.sort(SeriesRecording.PRIORITY_COMPARATOR);
+ mComeFromSeriesRecording = dvrDataManager.getSeriesRecording(comeFromSeriesRecordingId);
+ mSelectedActionElevation = getResources().getDimension(R.dimen.card_elevation_normal);
+ mActionColor = getResources().getColor(R.color.dvr_guided_step_action_text_color, null);
+ mSelectedActionColor =
+ getResources().getColor(R.color.dvr_guided_step_action_text_color_selected, null);
+ }
+
+ @Override
+ public void onResume() {
+ super.onResume();
+ setSelectedActionPosition(mComeFromSeriesRecording == null ? 1
+ : mSeriesRecordings.indexOf(mComeFromSeriesRecording));
+ }
+
+ @Override
+ public Guidance onCreateGuidance(Bundle savedInstanceState) {
+ String breadcrumb = mComeFromSeriesRecording == null ? null
+ : mComeFromSeriesRecording.getTitle();
+ return new Guidance(getString(R.string.dvr_priority_title),
+ getString(R.string.dvr_priority_description), breadcrumb, null);
+ }
+
+ @Override
+ public void onCreateActions(List<GuidedAction> actions, Bundle savedInstanceState) {
+ int position = 0;
+ for (SeriesRecording seriesRecording : mSeriesRecordings) {
+ actions.add(new GuidedAction.Builder(getActivity())
+ .id(position++)
+ .title(seriesRecording.getTitle())
+ .build());
+ }
+ }
+
+ @Override
+ public void onCreateButtonActions(List<GuidedAction> actions, Bundle savedInstanceState) {
+ actions.add(new GuidedAction.Builder(getActivity())
+ .id(ACTION_ID_SAVE)
+ .title(getString(R.string.dvr_priority_button_action_save))
+ .build());
+ actions.add(new GuidedAction.Builder(getActivity())
+ .clickAction(GuidedAction.ACTION_ID_CANCEL)
+ .build());
+ }
+
+ @Override
+ public void onTrackedGuidedActionClicked(GuidedAction action) {
+ long actionId = action.getId();
+ if (actionId == ACTION_ID_SAVE) {
+ DvrManager dvrManager = TvApplication.getSingletons(getContext()).getDvrManager();
+ int size = mSeriesRecordings.size();
+ for (int i = 1; i < size; ++i) {
+ long priority = DvrScheduleManager.suggestSeriesPriority(size - i);
+ SeriesRecording seriesRecording = mSeriesRecordings.get(i);
+ if (seriesRecording.getPriority() != priority) {
+ dvrManager.updateSeriesRecording(SeriesRecording.buildFrom(seriesRecording)
+ .setPriority(priority).build());
+ }
+ }
+ FragmentManager fragmentManager = getFragmentManager();
+ fragmentManager.popBackStack();
+ } else if (actionId == GuidedAction.ACTION_ID_CANCEL) {
+ FragmentManager fragmentManager = getFragmentManager();
+ fragmentManager.popBackStack();
+ } else if (mSelectedRecording == null) {
+ mSelectedRecording = mSeriesRecordings.get((int) actionId);
+ for (int i = 0; i < mSeriesRecordings.size(); ++i) {
+ updateItem(i);
+ }
+ } else {
+ mSelectedRecording = null;
+ for (int i = 0; i < mSeriesRecordings.size(); ++i) {
+ updateItem(i);
+ }
+ }
+ }
+
+ @Override
+ public String getTrackerPrefix() {
+ return "DvrPrioritySettingsFragment";
+ }
+
+ @Override
+ public String getTrackerLabelForGuidedAction(GuidedAction action) {
+ long actionId = action.getId();
+ if (actionId == ACTION_ID_SAVE) {
+ return "save";
+ } else {
+ return super.getTrackerLabelForGuidedAction(action);
+ }
+ }
+
+ @Override
+ public void onGuidedActionFocused(GuidedAction action) {
+ super.onGuidedActionFocused(action);
+ if (mSelectedRecording == null) {
+ return;
+ }
+ if (action.getId() < 0) {
+ mSelectedRecording = null;
+ for (int i = 0; i < mSeriesRecordings.size(); ++i) {
+ updateItem(i);
+ }
+ return;
+ }
+ int position = (int) action.getId();
+ int previousPosition = mSeriesRecordings.indexOf(mSelectedRecording);
+ mSeriesRecordings.remove(mSelectedRecording);
+ mSeriesRecordings.add(position, mSelectedRecording);
+ updateItem(previousPosition);
+ updateItem(position);
+ notifyActionChanged(previousPosition);
+ notifyActionChanged(position);
+ }
+
+ @Override
+ public GuidedActionsStylist onCreateButtonActionsStylist() {
+ return new DvrGuidedActionsStylist(true);
+ }
+
+ @Override
+ public GuidedActionsStylist onCreateActionsStylist() {
+ return new DvrGuidedActionsStylist(false) {
+ @Override
+ public void onBindViewHolder(ViewHolder vh, GuidedAction action) {
+ super.onBindViewHolder(vh, action);
+ updateItem(vh.itemView, (int) action.getId());
+ }
+
+ @Override
+ public int onProvideItemLayoutId() {
+ return R.layout.priority_settings_action_item;
+ }
+ };
+ }
+
+ private void updateItem(int position) {
+ View itemView = getActionItemView(position);
+ if (itemView == null) {
+ return;
+ }
+ updateItem(itemView, position);
+ }
+
+ private void updateItem(View itemView, int position) {
+ GuidedAction action = getActions().get(position);
+ action.setTitle(mSeriesRecordings.get(position).getTitle());
+ boolean selected = mSelectedRecording != null
+ && mSeriesRecordings.indexOf(mSelectedRecording) == position;
+ TextView titleView = (TextView) itemView.findViewById(R.id.guidedactions_item_title);
+ ImageView imageView = (ImageView) itemView.findViewById(R.id.guidedactions_item_tail_image);
+ if (position == 0) {
+ // one-time recording
+ itemView.setBackgroundResource(R.drawable.setup_selector_background);
+ imageView.setVisibility(View.GONE);
+ itemView.setFocusable(false);
+ itemView.setElevation(0);
+ // strings.xml <i> tag doesn't work.
+ titleView.setTypeface(titleView.getTypeface(), Typeface.ITALIC);
+ } else if (mSelectedRecording == null) {
+ titleView.setTextColor(mActionColor);
+ itemView.setBackgroundResource(R.drawable.setup_selector_background);
+ imageView.setImageResource(R.drawable.ic_draggable_white);
+ imageView.setVisibility(View.VISIBLE);
+ itemView.setFocusable(true);
+ itemView.setElevation(0);
+ titleView.setTypeface(titleView.getTypeface(), Typeface.NORMAL);
+ } else if (selected) {
+ titleView.setTextColor(mSelectedActionColor);
+ itemView.setBackgroundResource(R.drawable.priority_settings_action_item_selected);
+ imageView.setImageResource(R.drawable.ic_dragging_grey);
+ imageView.setVisibility(View.VISIBLE);
+ itemView.setFocusable(true);
+ itemView.setElevation(mSelectedActionElevation);
+ titleView.setTypeface(titleView.getTypeface(), Typeface.NORMAL);
+ } else {
+ titleView.setTextColor(mActionColor);
+ itemView.setBackgroundResource(R.drawable.setup_selector_background);
+ imageView.setVisibility(View.INVISIBLE);
+ itemView.setFocusable(true);
+ itemView.setElevation(0);
+ titleView.setTypeface(titleView.getTypeface(), Typeface.NORMAL);
+ }
+ }
+} \ No newline at end of file