diff options
author | Nick Chalko <nchalko@google.com> | 2016-02-26 13:38:57 -0800 |
---|---|---|
committer | Nick Chalko <nchalko@google.com> | 2016-02-26 13:39:22 -0800 |
commit | ba5845f23b8fbc985890f892961abc8b39886611 (patch) | |
tree | da373b9fe1955a2c7008c2e65df5ec3f5b087454 /src/com/android/tv/dvr/DvrDataManagerImpl.java | |
parent | 1abddd9f6225298066094e20a6c29061b6af4590 (diff) | |
download | TV-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.java | 95 |
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); + } } |