| /* |
| * 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; |
| } |
| } |