aboutsummaryrefslogtreecommitdiff
path: root/src/com/android/tv/dvr/DvrTvView.java
blob: be1f418be0b50aa183aba7eebcc24619f623120e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
/*
 * 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;
    }
}