blob: be1f418be0b50aa183aba7eebcc24619f623120e [file] [log] [blame]
/*
* Copyright (C) 2018 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;
import android.content.Context;
import android.media.PlaybackParams;
import android.media.session.PlaybackState;
import android.media.tv.TvTrackInfo;
import android.media.tv.TvView;
import android.net.Uri;
import android.support.annotation.Nullable;
import com.android.tv.InputSessionManager;
import com.android.tv.InputSessionManager.TvViewSession;
import com.android.tv.TvSingletons;
import com.android.tv.common.compat.TvViewCompat.TvInputCallbackCompat;
import com.android.tv.dvr.ui.playback.DvrPlayer;
import com.android.tv.ui.AppLayerTvView;
import com.android.tv.ui.api.TunableTvViewPlayingApi;
import java.util.List;
/**
* A {@link TvView} wrapper to handle events and TvView session.
*/
public class DvrTvView implements TunableTvViewPlayingApi {
private final AppLayerTvView mTvView;
private DvrPlayer mDvrPlayer;
private String mInputId;
private Uri mRecordedProgramUri;
private TvInputCallbackCompat mTvInputCallbackCompat;
private InputSessionManager mInputSessionManager;
private TvViewSession mSession;
public DvrTvView(Context context, AppLayerTvView tvView, DvrPlayer player) {
mTvView = tvView;
mDvrPlayer = player;
mInputSessionManager = TvSingletons.getSingletons(context).getInputSessionManager();
}
@Override
public boolean isPlaying() {
return mDvrPlayer.getPlaybackState() == PlaybackState.STATE_PLAYING;
}
@Override
public void setStreamVolume(float volume) {
mTvView.setStreamVolume(volume);
}
@Override
public void setTimeShiftListener(TimeShiftListener listener) {
// TimeShiftListener is never called from DvrTvView because TimeShift is always available
// and onRecordStartTimeChanged is not called during playback.
}
@Override
public boolean isTimeShiftAvailable() {
return true;
}
@Override
public void timeShiftPlay() {
if (mInputId != null && mRecordedProgramUri != null) {
mTvView.timeShiftPlay(mInputId, mRecordedProgramUri);
}
}
public void timeShiftPlay(String inputId, Uri recordedProgramUri) {
mInputId = inputId;
mRecordedProgramUri = recordedProgramUri;
mSession.timeShiftPlay(inputId, recordedProgramUri);
}
@Override
public void timeShiftPause() {
mTvView.timeShiftPause();
}
@Override
public void timeShiftRewind(int speed) {
PlaybackParams params = new PlaybackParams();
params.setSpeed(speed * -1);
mTvView.timeShiftSetPlaybackParams(params);
}
@Override
public void timeShiftFastForward(int speed) {
PlaybackParams params = new PlaybackParams();
params.setSpeed(speed);
mTvView.timeShiftSetPlaybackParams(params);
}
@Override
public void timeShiftSeekTo(long timeMs) {
mTvView.timeShiftSeekTo(timeMs);
}
@Override
public long timeShiftGetCurrentPositionMs() {
return mDvrPlayer.getPlaybackPosition();
}
public void setCaptionEnabled(boolean enabled) {
mTvView.setCaptionEnabled(enabled);
}
public void timeShiftResume() {
mTvView.timeShiftResume();
}
public void reset() {
mSession.reset();
}
public List<TvTrackInfo> getTracks(int type) {
return mTvView.getTracks(type);
}
public void selectTrack(int type, String trackId) {
mTvView.selectTrack(type, trackId);
}
public void timeShiftSetPlaybackParams(PlaybackParams params) {
mTvView.timeShiftSetPlaybackParams(params);
}
public void setTimeShiftPositionCallback(@Nullable TvView.TimeShiftPositionCallback callback) {
mTvView.setTimeShiftPositionCallback(callback);
}
public void setCallback(@Nullable TvInputCallbackCompat callback) {
mTvInputCallbackCompat = callback;
mTvView.setCallback(callback);
}
public void init() {
mSession = mInputSessionManager.createTvViewSession(mTvView, this, mTvInputCallbackCompat);
}
public void release() {
mInputSessionManager.releaseTvViewSession(mSession);
mInputSessionManager = null;
mDvrPlayer = null;
}
}