blob: c96104e5c95b06d0932ac325d6942d7efe5426e9 [file] [log] [blame]
/*
* 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.Nullable;
import android.util.Range;
import com.android.tv.common.recording.RecordedProgram;
import java.util.List;
/**
* Read only data manager.
*/
@MainThread
public interface DvrDataManager {
long NEXT_START_TIME_NOT_FOUND = -1;
boolean isInitialized();
/**
* Returns past recordings.
*/
List<RecordedProgram> getRecordedPrograms();
/**
* Returns all {@link ScheduledRecording} regardless of state.
*/
List<ScheduledRecording> getAllScheduledRecordings();
/**
* Returns started recordings that expired.
*/
List<ScheduledRecording> getStartedRecordings();
/**
* Returns scheduled but not started recordings that have not expired.
*/
List<ScheduledRecording> getNonStartedScheduledRecordings();
/**
* Returns season recordings.
*/
List<SeasonRecording> getSeasonRecordings();
/**
* 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 all Recordings with a overlap with the given time period inclusive.
*
* <p> A recording overlaps with a period when
* {@code recording.getStartTime() <= period.getUpper() &&
* recording.getEndTime() >= period.getLower()}.
*
* @param period a time period in milliseconds.
*/
List<ScheduledRecording> getRecordingsThatOverlapWith(Range<Long> period);
/**
* 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);
/**
* 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);
interface ScheduledRecordingListener {
void onScheduledRecordingAdded(ScheduledRecording scheduledRecording);
void onScheduledRecordingRemoved(ScheduledRecording scheduledRecording);
void onScheduledRecordingStatusChanged(ScheduledRecording scheduledRecording);
}
interface RecordedProgramListener {
void onRecordedProgramAdded(RecordedProgram recordedProgram);
void onRecordedProgramChanged(RecordedProgram recordedProgram);
void onRecordedProgramRemoved(RecordedProgram recordedProgram);
}
}