blob: c6e2685090fb2985ac3a29def7a83225060b4bdb [file] [log] [blame]
/*
* 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.content.Context;
import android.content.Intent;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.support.v17.leanback.widget.GuidanceStylist;
import android.support.v17.leanback.widget.GuidedAction;
import com.android.tv.R;
import com.android.tv.TvSingletons;
import com.android.tv.data.Program;
import com.android.tv.dvr.DvrScheduleManager;
import com.android.tv.dvr.data.ScheduledRecording;
import com.android.tv.dvr.data.SeriesRecording;
import com.android.tv.dvr.ui.list.DvrSchedulesActivity;
import com.android.tv.dvr.ui.list.DvrSeriesSchedulesFragment;
import java.util.List;
public class DvrSeriesScheduledFragment extends DvrGuidedStepFragment {
/**
* The key for program list which will be passed to {@link DvrSeriesSchedulesFragment}. Type:
* List<{@link Program}>
*/
public static final String SERIES_SCHEDULED_KEY_PROGRAMS = "series_scheduled_key_programs";
private static final long SERIES_RECORDING_ID_NOT_SET = -1;
private static final int ACTION_VIEW_SCHEDULES = 1;
private SeriesRecording mSeriesRecording;
private boolean mShowViewScheduleOption;
private List<Program> mPrograms;
private int mSchedulesAddedCount = 0;
private boolean mHasConflict = false;
private int mInThisSeriesConflictCount = 0;
private int mOutThisSeriesConflictCount = 0;
@Override
public void onAttach(Context context) {
super.onAttach(context);
long seriesRecordingId =
getArguments()
.getLong(
DvrSeriesScheduledDialogActivity.SERIES_RECORDING_ID,
SERIES_RECORDING_ID_NOT_SET);
if (seriesRecordingId == SERIES_RECORDING_ID_NOT_SET) {
getActivity().finish();
return;
}
mShowViewScheduleOption =
getArguments()
.getBoolean(DvrSeriesScheduledDialogActivity.SHOW_VIEW_SCHEDULE_OPTION);
mSeriesRecording =
TvSingletons.getSingletons(context)
.getDvrDataManager()
.getSeriesRecording(seriesRecordingId);
if (mSeriesRecording == null) {
getActivity().finish();
return;
}
mPrograms = (List<Program>) BigArguments.getArgument(SERIES_SCHEDULED_KEY_PROGRAMS);
BigArguments.reset();
mSchedulesAddedCount =
TvSingletons.getSingletons(getContext())
.getDvrManager()
.getAvailableScheduledRecording(mSeriesRecording.getId())
.size();
DvrScheduleManager dvrScheduleManager =
TvSingletons.getSingletons(context).getDvrScheduleManager();
List<ScheduledRecording> conflictingRecordings =
dvrScheduleManager.getConflictingSchedules(mSeriesRecording);
mHasConflict = !conflictingRecordings.isEmpty();
for (ScheduledRecording recording : conflictingRecordings) {
if (recording.getSeriesRecordingId() == mSeriesRecording.getId()) {
++mInThisSeriesConflictCount;
} else if (recording.getPriority() < mSeriesRecording.getPriority()) {
++mOutThisSeriesConflictCount;
}
}
}
@Override
public GuidanceStylist.Guidance onCreateGuidance(Bundle savedInstanceState) {
String title = getString(R.string.dvr_series_recording_dialog_title);
Drawable icon;
if (!mHasConflict) {
icon = getResources().getDrawable(R.drawable.quantum_ic_check_circle_white_48, null);
} else {
icon = getResources().getDrawable(R.drawable.quantum_ic_error_white_48, null);
}
return new GuidanceStylist.Guidance(title, getDescription(), null, icon);
}
@Override
public void onCreateActions(List<GuidedAction> actions, Bundle savedInstanceState) {
Context context = getContext();
actions.add(
new GuidedAction.Builder(context).clickAction(GuidedAction.ACTION_ID_OK).build());
if (mShowViewScheduleOption) {
actions.add(
new GuidedAction.Builder(context)
.id(ACTION_VIEW_SCHEDULES)
.title(R.string.dvr_action_view_schedules)
.build());
}
}
@Override
public void onTrackedGuidedActionClicked(GuidedAction action) {
if (action.getId() == ACTION_VIEW_SCHEDULES) {
Intent intent = new Intent(getActivity(), DvrSchedulesActivity.class);
intent.putExtra(
DvrSchedulesActivity.KEY_SCHEDULES_TYPE,
DvrSchedulesActivity.TYPE_SERIES_SCHEDULE);
intent.putExtra(
DvrSeriesSchedulesFragment.SERIES_SCHEDULES_KEY_SERIES_RECORDING,
mSeriesRecording);
BigArguments.reset();
BigArguments.setArgument(
DvrSeriesSchedulesFragment.SERIES_SCHEDULES_KEY_SERIES_PROGRAMS, mPrograms);
startActivity(intent);
}
getActivity().finish();
}
@Override
public String getTrackerPrefix() {
return "DvrMissingStorageErrorFragment";
}
@Override
public String getTrackerLabelForGuidedAction(GuidedAction action) {
long actionId = action.getId();
if (actionId == ACTION_VIEW_SCHEDULES) {
return "view-schedules";
} else {
return super.getTrackerLabelForGuidedAction(action);
}
}
private String getDescription() {
if (!mHasConflict) {
return getResources()
.getQuantityString(
R.plurals.dvr_series_scheduled_no_conflict,
mSchedulesAddedCount,
mSchedulesAddedCount,
mSeriesRecording.getTitle());
} else {
// mInThisSeriesConflictCount equals 0 and mOutThisSeriesConflictCount equals 0 means
// mHasConflict is false. So we don't need to check that case.
if (mInThisSeriesConflictCount != 0 && mOutThisSeriesConflictCount != 0) {
return getResources()
.getQuantityString(
R.plurals.dvr_series_scheduled_this_and_other_series_conflict,
mSchedulesAddedCount,
mSchedulesAddedCount,
mSeriesRecording.getTitle(),
mInThisSeriesConflictCount + mOutThisSeriesConflictCount);
} else if (mInThisSeriesConflictCount != 0) {
return getResources()
.getQuantityString(
R.plurals.dvr_series_recording_scheduled_only_this_series_conflict,
mSchedulesAddedCount,
mSchedulesAddedCount,
mSeriesRecording.getTitle(),
mInThisSeriesConflictCount);
} else {
if (mOutThisSeriesConflictCount == 1) {
return getResources()
.getQuantityString(
R.plurals.dvr_series_scheduled_only_other_series_one_conflict,
mSchedulesAddedCount,
mSchedulesAddedCount,
mSeriesRecording.getTitle());
} else {
return getResources()
.getQuantityString(
R.plurals.dvr_series_scheduled_only_other_series_many_conflicts,
mSchedulesAddedCount,
mSchedulesAddedCount,
mSeriesRecording.getTitle(),
mOutThisSeriesConflictCount);
}
}
}
}
}