aboutsummaryrefslogtreecommitdiff
path: root/src/com/android/tv/dvr/DvrDataManager.java
blob: 066136671b13e3688f8022ba82449186b56f0d2b (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
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
/*
 * Copyright (C) 2015 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.support.annotation.MainThread;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.util.Range;

import com.android.tv.dvr.ScheduledRecording.RecordingState;

import java.util.Collection;
import java.util.List;

/**
 * Read only data manager.
 */
@MainThread
public interface DvrDataManager {
    long NEXT_START_TIME_NOT_FOUND = -1;

    boolean isInitialized();

    /**
     * Returns {@code true} if the schedules were loaded, otherwise {@code false}.
     */
    boolean isDvrScheduleLoadFinished();

    /**
     * Returns {@code true} if the recorded programs were loaded, otherwise {@code false}.
     */
    boolean isRecordedProgramLoadFinished();

    /**
     * Returns past recordings.
     */
    List<RecordedProgram> getRecordedPrograms();

    /**
     * Returns past recorded programs in the given series.
     */
    List<RecordedProgram> getRecordedPrograms(long seriesRecordingId);

    /**
     * Returns all {@link ScheduledRecording} regardless of state.
     * <p>
     * The result doesn't contain the deleted schedules.
     */
    List<ScheduledRecording> getAllScheduledRecordings();

    /**
     * Returns all available {@link ScheduledRecording}, it contains started and non started
     * recordings.
     */
    List<ScheduledRecording> getAvailableScheduledRecordings();

    /**
     * Returns started recordings that expired.
     */
    List<ScheduledRecording> getStartedRecordings();

    /**
     * Returns scheduled but not started recordings that have not expired.
     */
    List<ScheduledRecording> getNonStartedScheduledRecordings();

    /**
     * Returns series recordings.
     */
    List<SeriesRecording> getSeriesRecordings();

    /**
     * Returns series recordings from the given input.
     */
    List<SeriesRecording> getSeriesRecordings(String inputId);

    /**
     * Returns the next start time after {@code time} or {@link #NEXT_START_TIME_NOT_FOUND}
     * if none is found.
     *
     * @param time time milliseconds
     */
    long getNextScheduledStartTimeAfter(long time);

    /**
     * Returns a list of the schedules with a overlap with the given time period inclusive and with
     * the given state.
     *
     * <p> A recording overlaps with a period when
     * {@code recording.getStartTime() <= period.getUpper() &&
     * recording.getEndTime() >= period.getLower()}.
     *
     * @param period a time period in milliseconds.
     * @param state the state of the schedule.
     */
    List<ScheduledRecording> getScheduledRecordings(Range<Long> period, @RecordingState int state);

    /**
     * Returns a list of the schedules in the given series.
     */
    List<ScheduledRecording> getScheduledRecordings(long seriesRecordingId);

    /**
     * Returns a list of the schedules from the given input.
     */
    List<ScheduledRecording> getScheduledRecordings(String inputId);

    /**
     * Add a {@link OnDvrScheduleLoadFinishedListener}.
     */
    void addDvrScheduleLoadFinishedListener(OnDvrScheduleLoadFinishedListener listener);

    /**
     * Remove a {@link OnDvrScheduleLoadFinishedListener}.
     */
    void removeDvrScheduleLoadFinishedListener(OnDvrScheduleLoadFinishedListener listener);

    /**
     * Add a {@link OnRecordedProgramLoadFinishedListener}.
     */
    void addRecordedProgramLoadFinishedListener(OnRecordedProgramLoadFinishedListener listener);

    /**
     * Remove a {@link OnRecordedProgramLoadFinishedListener}.
     */
    void removeRecordedProgramLoadFinishedListener(OnRecordedProgramLoadFinishedListener listener);

    /**
     * Add a {@link ScheduledRecordingListener}.
     */
    void addScheduledRecordingListener(ScheduledRecordingListener scheduledRecordingListener);

    /**
     * Remove a {@link ScheduledRecordingListener}.
     */
    void removeScheduledRecordingListener(ScheduledRecordingListener scheduledRecordingListener);

    /**
     * Add a {@link RecordedProgramListener}.
     */
    void addRecordedProgramListener(RecordedProgramListener listener);

    /**
     * Remove a {@link RecordedProgramListener}.
     */
    void removeRecordedProgramListener(RecordedProgramListener listener);

    /**
     * Add a {@link ScheduledRecordingListener}.
     */
    void addSeriesRecordingListener(SeriesRecordingListener seriesRecordingListener);

    /**
     * Remove a {@link ScheduledRecordingListener}.
     */
    void removeSeriesRecordingListener(SeriesRecordingListener seriesRecordingListener);

    /**
     * Returns the scheduled recording program with the given recordingId or null if is not found.
     */
    @Nullable
    ScheduledRecording getScheduledRecording(long recordingId);

    /**
     * Returns the scheduled recording program with the given programId or null if is not found.
     */
    @Nullable
    ScheduledRecording getScheduledRecordingForProgramId(long programId);

    /**
     * Returns the recorded program with the given recordingId or null if is not found.
     */
    @Nullable
    RecordedProgram getRecordedProgram(long recordingId);

    /**
     * Returns the series recording with the given seriesId or null if is not found.
     */
    @Nullable
    SeriesRecording getSeriesRecording(long seriesRecordingId);

    /**
     * Returns the series recording with the given series ID or {@code null} if not found.
     */
    @Nullable
    SeriesRecording getSeriesRecording(String seriesId);

    /**
     * Returns the schedules which are marked deleted.
     */
    Collection<ScheduledRecording> getDeletedSchedules();

    /**
     * Returns the program IDs which is not allowed to make a schedule automatically.
     */
    @NonNull
    Collection<Long> getDisallowedProgramIds();

    /**
     * Listens for the DVR schedules loading finished.
     */
    interface OnDvrScheduleLoadFinishedListener {
        void onDvrScheduleLoadFinished();
    }

    /**
     * Listens for the recorded program loading finished.
     */
    interface OnRecordedProgramLoadFinishedListener {
        void onRecordedProgramLoadFinished();
    }

    /**
     * Listens for changes to {@link ScheduledRecording}s.
     */
    interface ScheduledRecordingListener {
        void onScheduledRecordingAdded(ScheduledRecording... scheduledRecordings);

        void onScheduledRecordingRemoved(ScheduledRecording... scheduledRecordings);

        /**
         * Called when the schedules are updated.
         *
         * <p>Note that the passed arguments are the new objects with the same ID as the old ones.
         */
        void onScheduledRecordingStatusChanged(ScheduledRecording... scheduledRecordings);
    }

    /**
     * Listens for changes to {@link SeriesRecording}s.
     */
    interface SeriesRecordingListener {
        void onSeriesRecordingAdded(SeriesRecording... seriesRecordings);

        void onSeriesRecordingRemoved(SeriesRecording... seriesRecordings);

        void onSeriesRecordingChanged(SeriesRecording... seriesRecordings);
    }

    /**
     * Listens for changes to {@link RecordedProgram}s.
     */
    interface RecordedProgramListener {
        void onRecordedProgramsAdded(RecordedProgram... recordedPrograms);

        void onRecordedProgramsChanged(RecordedProgram... recordedPrograms);

        void onRecordedProgramsRemoved(RecordedProgram... recordedPrograms);
    }
}