aboutsummaryrefslogtreecommitdiff
path: root/src/com/android/tv/dvr/DvrDataManagerImpl.java
diff options
context:
space:
mode:
authorNick Chalko <nchalko@google.com>2016-02-26 13:38:57 -0800
committerNick Chalko <nchalko@google.com>2016-02-26 13:39:22 -0800
commitba5845f23b8fbc985890f892961abc8b39886611 (patch)
treeda373b9fe1955a2c7008c2e65df5ec3f5b087454 /src/com/android/tv/dvr/DvrDataManagerImpl.java
parent1abddd9f6225298066094e20a6c29061b6af4590 (diff)
downloadTV-ba5845f23b8fbc985890f892961abc8b39886611.tar.gz
Sync to ub-tv-interns at cc7c29d2a24a1343498f6d95ca5a79e003e6aefe
Change-Id: I580da190231e47c65b69f425b30ec4685eb50ce4
Diffstat (limited to 'src/com/android/tv/dvr/DvrDataManagerImpl.java')
-rw-r--r--src/com/android/tv/dvr/DvrDataManagerImpl.java95
1 files changed, 85 insertions, 10 deletions
diff --git a/src/com/android/tv/dvr/DvrDataManagerImpl.java b/src/com/android/tv/dvr/DvrDataManagerImpl.java
index d1c590af..647d9bd7 100644
--- a/src/com/android/tv/dvr/DvrDataManagerImpl.java
+++ b/src/com/android/tv/dvr/DvrDataManagerImpl.java
@@ -17,23 +17,32 @@
package com.android.tv.dvr;
import android.content.Context;
+import android.support.annotation.MainThread;
+import android.support.annotation.Nullable;
import android.support.annotation.VisibleForTesting;
+import android.util.Log;
import android.util.Range;
import com.android.tv.dvr.Recording.RecordingState;
+import com.android.tv.dvr.provider.AsyncDvrDbTask;
import com.android.tv.dvr.provider.AsyncDvrDbTask.AsyncDvrQueryTask;
+import com.android.tv.util.SoftPreconditions;
import java.util.ArrayList;
import java.util.Collections;
+import java.util.HashMap;
import java.util.List;
/**
* DVR Data manager to handle recordings and schedules.
*/
+@MainThread
public class DvrDataManagerImpl extends BaseDvrDataManager {
+ private static final String TAG = "DvrDataManagerImpl";
+
private Context mContext;
private boolean mLoadFinished;
- private final List<Recording> mRecordings = new ArrayList<>();
+ private final HashMap<Long, Recording> mRecordings = new HashMap<>();
private AsyncDvrQueryTask mQueryTask;
public DvrDataManagerImpl(Context context) {
@@ -47,8 +56,9 @@ public class DvrDataManagerImpl extends BaseDvrDataManager {
protected void onPostExecute(List<Recording> result) {
mQueryTask = null;
mLoadFinished = true;
- mRecordings.addAll(result);
- Collections.sort(mRecordings, Recording.START_TIME_COMPARATOR);
+ for (Recording r : result) {
+ mRecordings.put(r.getId(), r);
+ }
}
};
mQueryTask.executeOnDbThread();
@@ -71,7 +81,10 @@ public class DvrDataManagerImpl extends BaseDvrDataManager {
if (!mLoadFinished) {
return Collections.emptyList();
}
- return Collections.unmodifiableList(mRecordings);
+ ArrayList<Recording> list = new ArrayList<>(mRecordings.size());
+ list.addAll(mRecordings.values());
+ Collections.sort(list, Recording.START_TIME_COMPARATOR);
+ return Collections.unmodifiableList(list);
}
@Override
@@ -91,7 +104,7 @@ public class DvrDataManagerImpl extends BaseDvrDataManager {
private List<Recording> getRecordingsWithState(@RecordingState int state) {
List<Recording> result = new ArrayList<>();
- for (Recording r : mRecordings) {
+ for (Recording r : mRecordings.values()) {
if (r.getState() == state) {
result.add(r);
}
@@ -107,7 +120,7 @@ public class DvrDataManagerImpl extends BaseDvrDataManager {
@Override
public long getNextScheduledStartTimeAfter(long startTime) {
- return getNextStartTimeAfter(mRecordings, startTime);
+ return getNextStartTimeAfter(getRecordings(), startTime);
}
@VisibleForTesting
@@ -129,7 +142,7 @@ public class DvrDataManagerImpl extends BaseDvrDataManager {
@Override
public List<Recording> getRecordingsThatOverlapWith(Range<Long> period) {
List<Recording> result = new ArrayList<>();
- for (Recording r : mRecordings) {
+ for (Recording r : mRecordings.values()) {
if (r.isOverLapping(period)) {
result.add(r);
}
@@ -137,18 +150,80 @@ public class DvrDataManagerImpl extends BaseDvrDataManager {
return result;
}
+ @Nullable
+ @Override
+ public Recording getRecording(long recordingId) {
+ if (mLoadFinished) {
+ return mRecordings.get(recordingId);
+ }
+ return null;
+ }
+
@Override
- public void addRecording(Recording recording) { }
+ public void addRecording(final Recording recording) {
+ new AsyncDvrDbTask.AsyncAddRecordingTask(mContext) {
+ @Override
+ protected void onPostExecute(List<Recording> recordings) {
+ super.onPostExecute(recordings);
+ SoftPreconditions.checkArgument(recordings.size() == 1);
+ for (Recording r : recordings) {
+ if (r.getId() != -1) {
+ mRecordings.put(r.getId(), r);
+ notifyRecordingAdded(r);
+ } else {
+ Log.w(TAG, "Error adding " + r);
+ }
+ }
+
+ }
+ }.executeOnDbThread(recording);
+ }
@Override
public void addSeasonRecording(SeasonRecording seasonRecording) { }
@Override
- public void removeRecording(Recording recording) { }
+ public void removeRecording(final Recording recording) {
+ new AsyncDvrDbTask.AsyncDeleteRecordingTask(mContext) {
+ @Override
+ protected void onPostExecute(List<Integer> counts) {
+ super.onPostExecute(counts);
+ SoftPreconditions.checkArgument(counts.size() == 1);
+ for (Integer c : counts) {
+ if (c == 1) {
+ mRecordings.remove(recording.getId());
+ //TODO change to notifyRecordingUpdated
+ notifyRecordingRemoved(recording);
+ } else {
+ Log.w(TAG, "Error removing " + recording);
+ }
+ }
+
+ }
+ }.executeOnDbThread(recording);
+ }
@Override
public void removeSeasonSchedule(SeasonRecording seasonSchedule) { }
@Override
- public void updateRecording(Recording r) { }
+ public void updateRecording(final Recording recording) {
+ new AsyncDvrDbTask.AsyncUpdateRecordingTask(mContext) {
+ @Override
+ protected void onPostExecute(List<Integer> counts) {
+ super.onPostExecute(counts);
+ SoftPreconditions.checkArgument(counts.size() == 1);
+ for (Integer c : counts) {
+ if (c == 1) {
+ mRecordings.put(recording.getId(), recording);
+ //TODO change to notifyRecordingUpdated
+ notifyRecordingStatusChanged(recording);
+ } else {
+ Log.w(TAG, "Error updating " + recording);
+ }
+ }
+
+ }
+ }.executeOnDbThread(recording);
+ }
}