blob: 263c579e4ad2bae8b743a915192d5c4d9482ad9f [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.list;
import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import com.android.tv.R;
import com.android.tv.common.SoftPreconditions;
import com.android.tv.dvr.ui.DvrUiHelper;
import com.android.tv.util.Utils;
/** A RowPresenter for series schedule row. */
class SeriesScheduleRowPresenter extends ScheduleRowPresenter {
private static final String TAG = "SeriesRowPresenter";
private boolean mLtr;
public SeriesScheduleRowPresenter(Context context) {
super(context);
mLtr =
context.getResources().getConfiguration().getLayoutDirection()
== View.LAYOUT_DIRECTION_LTR;
}
public static class SeriesScheduleRowViewHolder extends ScheduleRowViewHolder {
public SeriesScheduleRowViewHolder(View view, ScheduleRowPresenter presenter) {
super(view, presenter);
ViewGroup.LayoutParams lp = getTimeView().getLayoutParams();
lp.width =
view.getResources()
.getDimensionPixelSize(R.dimen.dvr_series_schedules_item_time_width);
getTimeView().setLayoutParams(lp);
}
}
@Override
protected ScheduleRowViewHolder onGetScheduleRowViewHolder(View view) {
return new SeriesScheduleRowViewHolder(view, this);
}
@Override
protected String onGetRecordingTimeText(ScheduleRow row) {
return Utils.getDurationString(
getContext(), row.getStartTimeMs(), row.getEndTimeMs(), false, true, true, 0);
}
@Override
protected String onGetProgramInfoText(ScheduleRow row) {
return row.getEpisodeDisplayTitle(getContext());
}
@Override
protected void onBindRowViewHolder(ViewHolder vh, Object item) {
super.onBindRowViewHolder(vh, item);
SeriesScheduleRowViewHolder viewHolder = (SeriesScheduleRowViewHolder) vh;
EpisodicProgramRow row = (EpisodicProgramRow) item;
if (getDvrManager().isConflicting(row.getSchedule())) {
viewHolder
.getProgramTitleView()
.setCompoundDrawablePadding(
getContext()
.getResources()
.getDimensionPixelOffset(
R.dimen.dvr_schedules_warning_icon_padding));
viewHolder
.getProgramTitleView()
.setCompoundDrawablesRelativeWithIntrinsicBounds(
R.drawable.ic_warning_gray600_36dp, 0, 0, 0);
} else {
viewHolder.getProgramTitleView().setCompoundDrawablesWithIntrinsicBounds(0, 0, 0, 0);
}
}
@Override
protected void onInfoClicked(ScheduleRow row) {
DvrUiHelper.startSchedulesActivity(getContext(), row.getSchedule());
}
@Override
protected void onStartRecording(ScheduleRow row) {
SoftPreconditions.checkState(
row.getSchedule() == null, TAG, "Start request with the existing schedule: " + row);
row.setStartRecordingRequested(true);
getDvrManager().addScheduleWithHighestPriority(((EpisodicProgramRow) row).getProgram());
}
@Override
protected void onStopRecording(ScheduleRow row) {
SoftPreconditions.checkState(
row.getSchedule() != null, TAG, "Stop request with the null schedule: " + row);
row.setStopRecordingRequested(true);
getDvrManager().stopRecording(row.getSchedule());
}
@Override
protected void onCreateSchedule(ScheduleRow row) {
if (row.getSchedule() == null) {
getDvrManager().addScheduleWithHighestPriority(((EpisodicProgramRow) row).getProgram());
} else {
super.onCreateSchedule(row);
}
}
@Override
@ScheduleRowAction
protected int[] getAvailableActions(ScheduleRow row) {
if (row.getSchedule() == null) {
if (row.isOnAir()) {
return new int[] {ACTION_START_RECORDING};
} else {
return new int[] {ACTION_CREATE_SCHEDULE};
}
}
return super.getAvailableActions(row);
}
@Override
protected boolean canResolveConflict() {
return false;
}
@Override
protected boolean shouldKeepScheduleAfterRemoving() {
return true;
}
}