aboutsummaryrefslogtreecommitdiff
path: root/src/com/android/tv/dvr/Scheduler.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/com/android/tv/dvr/Scheduler.java')
-rw-r--r--src/com/android/tv/dvr/Scheduler.java51
1 files changed, 30 insertions, 21 deletions
diff --git a/src/com/android/tv/dvr/Scheduler.java b/src/com/android/tv/dvr/Scheduler.java
index 8070f8a6..ff9bde68 100644
--- a/src/com/android/tv/dvr/Scheduler.java
+++ b/src/com/android/tv/dvr/Scheduler.java
@@ -28,6 +28,8 @@ import android.util.Log;
import android.util.LongSparseArray;
import android.util.Range;
+import com.android.tv.data.Channel;
+import com.android.tv.data.ChannelDataManager;
import com.android.tv.util.Clock;
import java.util.List;
@@ -37,7 +39,7 @@ import java.util.concurrent.TimeUnit;
* The core class to manage schedule and run actual recording.
*/
@VisibleForTesting
-public class Scheduler implements DvrDataManager.Listener {
+public class Scheduler implements DvrDataManager.ScheduledRecordingListener {
private static final String TAG = "Scheduler";
private static final boolean DEBUG = false;
@@ -51,9 +53,9 @@ public class Scheduler implements DvrDataManager.Listener {
public static final int MESSAGE_REMOVE = 999;
private final long mId;
- HandlerWrapper(Looper looper, Recording recording, RecordingTask recordingTask) {
+ HandlerWrapper(Looper looper, ScheduledRecording scheduledRecording, RecordingTask recordingTask) {
super(looper, recordingTask);
- mId = recording.getId();
+ mId = scheduledRecording.getId();
}
@Override
@@ -73,27 +75,32 @@ public class Scheduler implements DvrDataManager.Listener {
private final Looper mLooper;
private final DvrSessionManager mSessionManager;
private final WritableDvrDataManager mDataManager;
+ private final DvrManager mDvrManager;
+ private final ChannelDataManager mChannelDataManager;
private final Context mContext;
private final Clock mClock;
private final AlarmManager mAlarmManager;
- public Scheduler(Looper looper, DvrSessionManager sessionManager,
- WritableDvrDataManager dataManager, Context context, Clock clock,
+ public Scheduler(Looper looper, DvrManager dvrManager, DvrSessionManager sessionManager,
+ WritableDvrDataManager dataManager, ChannelDataManager channelDataManager,
+ Context context, Clock clock,
AlarmManager alarmManager) {
mLooper = looper;
+ mDvrManager = dvrManager;
mSessionManager = sessionManager;
mDataManager = dataManager;
+ mChannelDataManager = channelDataManager;
mContext = context;
mClock = clock;
mAlarmManager = alarmManager;
}
private void updatePendingRecordings() {
- List<Recording> recordings = mDataManager.getRecordingsThatOverlapWith(
+ List<ScheduledRecording> scheduledRecordings = mDataManager.getRecordingsThatOverlapWith(
new Range(mClock.currentTimeMillis(),
mClock.currentTimeMillis() + SOON_DURATION_IN_MS));
// TODO(DVR): handle removing and updating exiting recordings.
- for (Recording r : recordings) {
+ for (ScheduledRecording r : scheduledRecordings) {
scheduleRecordingSoon(r);
}
}
@@ -108,18 +115,18 @@ public class Scheduler implements DvrDataManager.Listener {
}
@Override
- public void onRecordingAdded(Recording recording) {
- if (DEBUG) Log.d(TAG, "added " + recording);
- if (startsWithin(recording, SOON_DURATION_IN_MS)) {
- scheduleRecordingSoon(recording);
+ public void onScheduledRecordingAdded(ScheduledRecording scheduledRecording) {
+ if (DEBUG) Log.d(TAG, "added " + scheduledRecording);
+ if (startsWithin(scheduledRecording, SOON_DURATION_IN_MS)) {
+ scheduleRecordingSoon(scheduledRecording);
} else {
updateNextAlarm();
}
}
@Override
- public void onRecordingRemoved(Recording recording) {
- long id = recording.getId();
+ public void onScheduledRecordingRemoved(ScheduledRecording scheduledRecording) {
+ long id = scheduledRecording.getId();
HandlerWrapper wrapper = mPendingRecordings.get(id);
if (wrapper != null) {
wrapper.removeCallbacksAndMessages(null);
@@ -130,16 +137,18 @@ public class Scheduler implements DvrDataManager.Listener {
}
@Override
- public void onRecordingStatusChanged(Recording recording) {
+ public void onScheduledRecordingStatusChanged(ScheduledRecording scheduledRecording) {
//TODO(DVR): implement
}
- private void scheduleRecordingSoon(Recording recording) {
- RecordingTask recordingTask = new RecordingTask(recording, mSessionManager, mDataManager,
- mClock);
- HandlerWrapper handlerWrapper = new HandlerWrapper(mLooper, recording, recordingTask);
+ private void scheduleRecordingSoon(ScheduledRecording scheduledRecording) {
+ Channel channel = mChannelDataManager.getChannel(scheduledRecording.getChannelId());
+ RecordingTask recordingTask = new RecordingTask(scheduledRecording, channel, mDvrManager,
+ mSessionManager, mDataManager, mClock);
+ HandlerWrapper handlerWrapper = new HandlerWrapper(mLooper, scheduledRecording,
+ recordingTask);
recordingTask.setHandler(handlerWrapper);
- mPendingRecordings.put(recording.getId(), handlerWrapper);
+ mPendingRecordings.put(scheduledRecording.getId(), handlerWrapper);
handlerWrapper.sendEmptyMessage(RecordingTask.MESSAGE_INIT);
}
@@ -164,7 +173,7 @@ public class Scheduler implements DvrDataManager.Listener {
}
@VisibleForTesting
- boolean startsWithin(Recording recording, long durationInMs) {
- return mClock.currentTimeMillis() >= recording.getStartTimeMs() - durationInMs;
+ boolean startsWithin(ScheduledRecording scheduledRecording, long durationInMs) {
+ return mClock.currentTimeMillis() >= scheduledRecording.getStartTimeMs() - durationInMs;
}
}