/* * 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.res.Resources; import android.media.tv.TvInputManager; import android.os.Bundle; import android.support.v17.leanback.widget.Action; import android.support.v17.leanback.widget.OnActionClickedListener; import android.support.v17.leanback.widget.SparseArrayObjectAdapter; import android.text.TextUtils; import com.android.tv.R; import com.android.tv.TvApplication; import com.android.tv.data.Channel; import com.android.tv.dvr.DvrDataManager; import com.android.tv.dvr.DvrManager; import com.android.tv.dvr.DvrWatchedPositionManager; import com.android.tv.dvr.RecordedProgram; /** * {@link DetailsFragment} for recorded program in DVR. */ public class RecordedProgramDetailsFragment extends DvrDetailsFragment implements DvrDataManager.RecordedProgramListener { private static final int ACTION_RESUME_PLAYING = 1; private static final int ACTION_PLAY_FROM_BEGINNING = 2; private static final int ACTION_DELETE_RECORDING = 3; private DvrWatchedPositionManager mDvrWatchedPositionManager; private RecordedProgram mRecordedProgram; private DetailsContent mDetailsContent; private boolean mPaused; private DvrDataManager mDvrDataManager; @Override public void onCreate(Bundle savedInstanceState) { mDvrDataManager = TvApplication.getSingletons(getContext()).getDvrDataManager(); mDvrDataManager.addRecordedProgramListener(this); super.onCreate(savedInstanceState); } @Override public void onCreateInternal() { mDvrWatchedPositionManager = TvApplication.getSingletons(getActivity()) .getDvrWatchedPositionManager(); setDetailsOverviewRow(mDetailsContent); } @Override public void onResume() { super.onResume(); if (mPaused) { updateActions(); mPaused = false; } } @Override public void onPause() { super.onPause(); mPaused = true; } @Override public void onDestroy() { mDvrDataManager.removeRecordedProgramListener(this); super.onDestroy(); } @Override protected boolean onLoadRecordingDetails(Bundle args) { long recordedProgramId = args.getLong(DvrDetailsActivity.RECORDING_ID); mRecordedProgram = mDvrDataManager.getRecordedProgram(recordedProgramId); if (mRecordedProgram == null) { // notify super class to end activity before initializing anything return false; } mDetailsContent = createDetailsContent(); return true; } private DetailsContent createDetailsContent() { Channel channel = TvApplication.getSingletons(getContext()).getChannelDataManager() .getChannel(mRecordedProgram.getChannelId()); String description = TextUtils.isEmpty(mRecordedProgram.getLongDescription()) ? mRecordedProgram.getDescription() : mRecordedProgram.getLongDescription(); return new DetailsContent.Builder() .setTitle(getTitleFromProgram(mRecordedProgram, channel)) .setStartTimeUtcMillis(mRecordedProgram.getStartTimeUtcMillis()) .setEndTimeUtcMillis(mRecordedProgram.getEndTimeUtcMillis()) .setDescription(description) .setImageUris(mRecordedProgram, channel) .build(); } @Override protected SparseArrayObjectAdapter onCreateActionsAdapter() { SparseArrayObjectAdapter adapter = new SparseArrayObjectAdapter(new ActionPresenterSelector()); Resources res = getResources(); if (mDvrWatchedPositionManager.getWatchedStatus(mRecordedProgram) == DvrWatchedPositionManager.DVR_WATCHED_STATUS_WATCHING) { adapter.set(ACTION_RESUME_PLAYING, new Action(ACTION_RESUME_PLAYING, res.getString(R.string.dvr_detail_resume_play), null, res.getDrawable(R.drawable.lb_ic_play))); adapter.set(ACTION_PLAY_FROM_BEGINNING, new Action(ACTION_PLAY_FROM_BEGINNING, res.getString(R.string.dvr_detail_play_from_beginning), null, res.getDrawable(R.drawable.lb_ic_replay))); } else { adapter.set(ACTION_PLAY_FROM_BEGINNING, new Action(ACTION_PLAY_FROM_BEGINNING, res.getString(R.string.dvr_detail_watch), null, res.getDrawable(R.drawable.lb_ic_play))); } adapter.set(ACTION_DELETE_RECORDING, new Action(ACTION_DELETE_RECORDING, res.getString(R.string.dvr_detail_delete), null, res.getDrawable(R.drawable.ic_delete_32dp))); return adapter; } @Override protected OnActionClickedListener onCreateOnActionClickedListener() { return new OnActionClickedListener() { @Override public void onActionClicked(Action action) { if (action.getId() == ACTION_PLAY_FROM_BEGINNING) { startPlayback(mRecordedProgram, TvInputManager.TIME_SHIFT_INVALID_TIME); } else if (action.getId() == ACTION_RESUME_PLAYING) { startPlayback(mRecordedProgram, mDvrWatchedPositionManager .getWatchedPosition(mRecordedProgram.getId())); } else if (action.getId() == ACTION_DELETE_RECORDING) { DvrManager dvrManager = TvApplication .getSingletons(getActivity()).getDvrManager(); dvrManager.removeRecordedProgram(mRecordedProgram); getActivity().finish(); } } }; } @Override public void onRecordedProgramsAdded(RecordedProgram... recordedPrograms) { } @Override public void onRecordedProgramsChanged(RecordedProgram... recordedPrograms) { } @Override public void onRecordedProgramsRemoved(RecordedProgram... recordedPrograms) { for (RecordedProgram recordedProgram : recordedPrograms) { if (recordedProgram.getId() == mRecordedProgram.getId()) { getActivity().finish(); } } } }