aboutsummaryrefslogtreecommitdiff
path: root/src/com/android/tv/dvr/DvrDataManagerImpl.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/com/android/tv/dvr/DvrDataManagerImpl.java')
-rw-r--r--src/com/android/tv/dvr/DvrDataManagerImpl.java439
1 files changed, 245 insertions, 194 deletions
diff --git a/src/com/android/tv/dvr/DvrDataManagerImpl.java b/src/com/android/tv/dvr/DvrDataManagerImpl.java
index 6094ca72..2b4ecbf5 100644
--- a/src/com/android/tv/dvr/DvrDataManagerImpl.java
+++ b/src/com/android/tv/dvr/DvrDataManagerImpl.java
@@ -38,10 +38,12 @@ import android.text.TextUtils;
import android.util.ArraySet;
import android.util.Log;
import android.util.Range;
-
-import com.android.tv.TvApplication;
+import com.android.tv.TvSingletons;
import com.android.tv.common.SoftPreconditions;
-import com.android.tv.dvr.DvrStorageStatusManager.OnStorageMountChangedListener;
+import com.android.tv.common.recording.RecordingStorageStatusManager;
+import com.android.tv.common.recording.RecordingStorageStatusManager.OnStorageMountChangedListener;
+import com.android.tv.common.util.Clock;
+import com.android.tv.common.util.CommonUtils;
import com.android.tv.dvr.data.IdGenerator;
import com.android.tv.dvr.data.RecordedProgram;
import com.android.tv.dvr.data.ScheduledRecording;
@@ -59,12 +61,9 @@ import com.android.tv.dvr.provider.DvrDbSync;
import com.android.tv.dvr.recorder.SeriesRecordingScheduler;
import com.android.tv.util.AsyncDbTask;
import com.android.tv.util.AsyncDbTask.AsyncRecordedProgramQueryTask;
-import com.android.tv.util.Clock;
import com.android.tv.util.Filter;
import com.android.tv.util.TvInputManagerHelper;
import com.android.tv.util.TvUriMatcher;
-import com.android.tv.util.Utils;
-
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
@@ -73,10 +72,9 @@ import java.util.Iterator;
import java.util.List;
import java.util.Map.Entry;
import java.util.Set;
+import java.util.concurrent.Executor;
-/**
- * DVR Data manager to handle recordings and schedules.
- */
+/** DVR Data manager to handle recordings and schedules. */
@MainThread
@TargetApi(Build.VERSION_CODES.N)
public class DvrDataManagerImpl extends BaseDvrDataManager {
@@ -98,52 +96,54 @@ public class DvrDataManagerImpl extends BaseDvrDataManager {
private final HashMap<Long, SeriesRecording> mSeriesRecordingsForRemovedInput = new HashMap<>();
private final Context mContext;
- private final ContentObserver mContentObserver = new ContentObserver(new Handler(
- Looper.getMainLooper())) {
- @Override
- public void onChange(boolean selfChange) {
- onChange(selfChange, null);
- }
+ private Executor mDbExecutor;
+ private final ContentObserver mContentObserver =
+ new ContentObserver(new Handler(Looper.getMainLooper())) {
+ @Override
+ public void onChange(boolean selfChange) {
+ onChange(selfChange, null);
+ }
- @Override
- public void onChange(boolean selfChange, final @Nullable Uri uri) {
- RecordedProgramsQueryTask task = new RecordedProgramsQueryTask(
- mContext.getContentResolver(), uri);
- task.executeOnDbThread();
- mPendingTasks.add(task);
- }
- };
+ @Override
+ public void onChange(boolean selfChange, final @Nullable Uri uri) {
+ RecordedProgramsQueryTask task =
+ new RecordedProgramsQueryTask(mContext.getContentResolver(), uri);
+ task.executeOnDbThread();
+ mPendingTasks.add(task);
+ }
+ };
private boolean mDvrLoadFinished;
private boolean mRecordedProgramLoadFinished;
private final Set<AsyncTask> mPendingTasks = new ArraySet<>();
private DvrDbSync mDbSync;
- private DvrStorageStatusManager mStorageStatusManager;
+ private RecordingStorageStatusManager mStorageStatusManager;
- private final TvInputCallback mInputCallback = new TvInputCallback() {
- @Override
- public void onInputAdded(String inputId) {
- if (DEBUG) Log.d(TAG, "onInputAdded " + inputId);
- if (!isInputAvailable(inputId)) {
- if (DEBUG) Log.d(TAG, "Not available for recording");
- return;
- }
- unhideInput(inputId);
- }
+ private final TvInputCallback mInputCallback =
+ new TvInputCallback() {
+ @Override
+ public void onInputAdded(String inputId) {
+ if (DEBUG) Log.d(TAG, "onInputAdded " + inputId);
+ if (!isInputAvailable(inputId)) {
+ if (DEBUG) Log.d(TAG, "Not available for recording");
+ return;
+ }
+ unhideInput(inputId);
+ }
- @Override
- public void onInputRemoved(String inputId) {
- if (DEBUG) Log.d(TAG, "onInputRemoved " + inputId);
- hideInput(inputId);
- }
- };
+ @Override
+ public void onInputRemoved(String inputId) {
+ if (DEBUG) Log.d(TAG, "onInputRemoved " + inputId);
+ hideInput(inputId);
+ }
+ };
private final OnStorageMountChangedListener mStorageMountChangedListener =
new OnStorageMountChangedListener() {
@Override
public void onStorageMountChanged(boolean storageMounted) {
for (TvInputInfo input : mInputManager.getTvInputInfos(true, true)) {
- if (Utils.isBundledInput(input.getId())) {
+ if (CommonUtils.isBundledInput(input.getId())) {
if (storageMounted) {
unhideInput(input.getId());
} else {
@@ -154,8 +154,8 @@ public class DvrDataManagerImpl extends BaseDvrDataManager {
}
};
- private static <T> List<T> moveElements(HashMap<Long, T> from, HashMap<Long, T> to,
- Filter<T> filter) {
+ private static <T> List<T> moveElements(
+ HashMap<Long, T> from, HashMap<Long, T> to, Filter<T> filter) {
List<T> moved = new ArrayList<>();
Iterator<Entry<Long, T>> iter = from.entrySet().iterator();
while (iter.hasNext()) {
@@ -172,119 +172,139 @@ public class DvrDataManagerImpl extends BaseDvrDataManager {
public DvrDataManagerImpl(Context context, Clock clock) {
super(context, clock);
mContext = context;
- mInputManager = TvApplication.getSingletons(context).getTvInputManagerHelper();
- mStorageStatusManager = TvApplication.getSingletons(context).getDvrStorageStatusManager();
+ TvSingletons tvSingletons = TvSingletons.getSingletons(context);
+ mInputManager = tvSingletons.getTvInputManagerHelper();
+ mStorageStatusManager = tvSingletons.getRecordingStorageStatusManager();
+ mDbExecutor = tvSingletons.getDbExecutor();
}
public void start() {
mInputManager.addCallback(mInputCallback);
mStorageStatusManager.addListener(mStorageMountChangedListener);
- AsyncDvrQuerySeriesRecordingTask dvrQuerySeriesRecordingTask
- = new AsyncDvrQuerySeriesRecordingTask(mContext) {
- @Override
- protected void onCancelled(List<SeriesRecording> seriesRecordings) {
- mPendingTasks.remove(this);
- }
+ AsyncDvrQuerySeriesRecordingTask dvrQuerySeriesRecordingTask =
+ new AsyncDvrQuerySeriesRecordingTask(mContext) {
+ @Override
+ protected void onCancelled(List<SeriesRecording> seriesRecordings) {
+ mPendingTasks.remove(this);
+ }
- @Override
- protected void onPostExecute(List<SeriesRecording> seriesRecordings) {
- mPendingTasks.remove(this);
- long maxId = 0;
- HashSet<String> seriesIds = new HashSet<>();
- for (SeriesRecording r : seriesRecordings) {
- if (SoftPreconditions.checkState(!seriesIds.contains(r.getSeriesId()), TAG,
- "Skip loading series recording with duplicate series ID: " + r)) {
- seriesIds.add(r.getSeriesId());
- if (isInputAvailable(r.getInputId())) {
- mSeriesRecordings.put(r.getId(), r);
- mSeriesId2SeriesRecordings.put(r.getSeriesId(), r);
- } else {
- mSeriesRecordingsForRemovedInput.put(r.getId(), r);
+ @Override
+ protected void onPostExecute(List<SeriesRecording> seriesRecordings) {
+ mPendingTasks.remove(this);
+ long maxId = 0;
+ HashSet<String> seriesIds = new HashSet<>();
+ for (SeriesRecording r : seriesRecordings) {
+ if (SoftPreconditions.checkState(
+ !seriesIds.contains(r.getSeriesId()),
+ TAG,
+ "Skip loading series recording with duplicate series ID: "
+ + r)) {
+ seriesIds.add(r.getSeriesId());
+ if (isInputAvailable(r.getInputId())) {
+ mSeriesRecordings.put(r.getId(), r);
+ mSeriesId2SeriesRecordings.put(r.getSeriesId(), r);
+ } else {
+ mSeriesRecordingsForRemovedInput.put(r.getId(), r);
+ }
+ }
+ if (maxId < r.getId()) {
+ maxId = r.getId();
+ }
}
+ IdGenerator.SERIES_RECORDING.setMaxId(maxId);
}
- if (maxId < r.getId()) {
- maxId = r.getId();
- }
- }
- IdGenerator.SERIES_RECORDING.setMaxId(maxId);
- }
- };
+ };
dvrQuerySeriesRecordingTask.executeOnDbThread();
mPendingTasks.add(dvrQuerySeriesRecordingTask);
- AsyncDvrQueryScheduleTask dvrQueryScheduleTask
- = new AsyncDvrQueryScheduleTask(mContext) {
- @Override
- protected void onCancelled(List<ScheduledRecording> scheduledRecordings) {
- mPendingTasks.remove(this);
- }
+ AsyncDvrQueryScheduleTask dvrQueryScheduleTask =
+ new AsyncDvrQueryScheduleTask(mContext) {
+ @Override
+ protected void onCancelled(List<ScheduledRecording> scheduledRecordings) {
+ mPendingTasks.remove(this);
+ }
- @SuppressLint("SwitchIntDef")
- @Override
- protected void onPostExecute(List<ScheduledRecording> result) {
- mPendingTasks.remove(this);
- long maxId = 0;
- List<SeriesRecording> seriesRecordingsToAdd = new ArrayList<>();
- List<ScheduledRecording> toUpdate = new ArrayList<>();
- List<ScheduledRecording> toDelete = new ArrayList<>();
- for (ScheduledRecording r : result) {
- if (!isInputAvailable(r.getInputId())) {
- mScheduledRecordingsForRemovedInput.put(r.getId(), r);
- } else if (r.getState() == ScheduledRecording.STATE_RECORDING_DELETED) {
- getDeletedScheduleMap().put(r.getProgramId(), r);
- } else {
- mScheduledRecordings.put(r.getId(), r);
- if (r.getProgramId() != ScheduledRecording.ID_NOT_SET) {
- mProgramId2ScheduledRecordings.put(r.getProgramId(), r);
- }
- // Adjust the state of the schedules before DB loading is finished.
- switch (r.getState()) {
- case ScheduledRecording.STATE_RECORDING_IN_PROGRESS:
- if (r.getEndTimeMs() <= mClock.currentTimeMillis()) {
- toUpdate.add(ScheduledRecording.buildFrom(r)
- .setState(ScheduledRecording.STATE_RECORDING_FAILED)
- .build());
- } else {
- toUpdate.add(ScheduledRecording.buildFrom(r)
- .setState(
- ScheduledRecording.STATE_RECORDING_NOT_STARTED)
- .build());
+ @SuppressLint("SwitchIntDef")
+ @Override
+ protected void onPostExecute(List<ScheduledRecording> result) {
+ mPendingTasks.remove(this);
+ long maxId = 0;
+ int reasonNotStarted =
+ ScheduledRecording
+ .FAILED_REASON_PROGRAM_ENDED_BEFORE_RECORDING_STARTED;
+ List<ScheduledRecording> toUpdate = new ArrayList<>();
+ List<ScheduledRecording> toDelete = new ArrayList<>();
+ for (ScheduledRecording r : result) {
+ if (!isInputAvailable(r.getInputId())) {
+ mScheduledRecordingsForRemovedInput.put(r.getId(), r);
+ } else if (r.getState() == ScheduledRecording.STATE_RECORDING_DELETED) {
+ getDeletedScheduleMap().put(r.getProgramId(), r);
+ } else {
+ mScheduledRecordings.put(r.getId(), r);
+ if (r.getProgramId() != ScheduledRecording.ID_NOT_SET) {
+ mProgramId2ScheduledRecordings.put(r.getProgramId(), r);
}
- break;
- case ScheduledRecording.STATE_RECORDING_NOT_STARTED:
- if (r.getEndTimeMs() <= mClock.currentTimeMillis()) {
- toUpdate.add(ScheduledRecording.buildFrom(r)
- .setState(ScheduledRecording.STATE_RECORDING_FAILED)
- .build());
+ // Adjust the state of the schedules before DB loading is finished.
+ switch (r.getState()) {
+ case ScheduledRecording.STATE_RECORDING_IN_PROGRESS:
+ if (r.getEndTimeMs() <= mClock.currentTimeMillis()) {
+ int reason =
+ ScheduledRecording.FAILED_REASON_NOT_FINISHED;
+ toUpdate.add(
+ ScheduledRecording.buildFrom(r)
+ .setState(
+ ScheduledRecording
+ .STATE_RECORDING_FAILED)
+ .setFailedReason(reason)
+ .build());
+ } else {
+ toUpdate.add(
+ ScheduledRecording.buildFrom(r)
+ .setState(
+ ScheduledRecording
+ .STATE_RECORDING_NOT_STARTED)
+ .build());
+ }
+ break;
+ case ScheduledRecording.STATE_RECORDING_NOT_STARTED:
+ if (r.getEndTimeMs() <= mClock.currentTimeMillis()) {
+ toUpdate.add(
+ ScheduledRecording.buildFrom(r)
+ .setState(
+ ScheduledRecording
+ .STATE_RECORDING_FAILED)
+ .setFailedReason(reasonNotStarted)
+ .build());
+ }
+ break;
+ case ScheduledRecording.STATE_RECORDING_CANCELED:
+ toDelete.add(r);
+ break;
+ default: // fall out
}
- break;
- case ScheduledRecording.STATE_RECORDING_CANCELED:
- toDelete.add(r);
- break;
+ }
+ if (maxId < r.getId()) {
+ maxId = r.getId();
+ }
+ }
+ if (!toUpdate.isEmpty()) {
+ updateScheduledRecording(ScheduledRecording.toArray(toUpdate));
+ }
+ if (!toDelete.isEmpty()) {
+ removeScheduledRecording(ScheduledRecording.toArray(toDelete));
+ }
+ IdGenerator.SCHEDULED_RECORDING.setMaxId(maxId);
+ if (mRecordedProgramLoadFinished) {
+ validateSeriesRecordings();
+ }
+ mDvrLoadFinished = true;
+ notifyDvrScheduleLoadFinished();
+ if (isInitialized()) {
+ mDbSync = new DvrDbSync(mContext, DvrDataManagerImpl.this);
+ mDbSync.start();
+ SeriesRecordingScheduler.getInstance(mContext).start();
}
}
- if (maxId < r.getId()) {
- maxId = r.getId();
- }
- }
- if (!toUpdate.isEmpty()) {
- updateScheduledRecording(ScheduledRecording.toArray(toUpdate));
- }
- if (!toDelete.isEmpty()) {
- removeScheduledRecording(ScheduledRecording.toArray(toDelete));
- }
- IdGenerator.SCHEDULED_RECORDING.setMaxId(maxId);
- if (mRecordedProgramLoadFinished) {
- validateSeriesRecordings();
- }
- mDvrLoadFinished = true;
- notifyDvrScheduleLoadFinished();
- if (isInitialized()) {
- mDbSync = new DvrDbSync(mContext, DvrDataManagerImpl.this);
- mDbSync.start();
- SeriesRecordingScheduler.getInstance(mContext).start();
- }
- }
- };
+ };
dvrQueryScheduleTask.executeOnDbThread();
mPendingTasks.add(dvrQueryScheduleTask);
RecordedProgramsQueryTask mRecordedProgramQueryTask =
@@ -341,8 +361,8 @@ public class DvrDataManagerImpl extends BaseDvrDataManager {
mRecordedProgramsForRemovedInput.clear();
notifyRecordedProgramsRemoved(RecordedProgram.toArray(oldRecordedPrograms));
} else {
- HashMap<Long, RecordedProgram> oldRecordedPrograms
- = new HashMap<>(mRecordedPrograms);
+ HashMap<Long, RecordedProgram> oldRecordedPrograms =
+ new HashMap<>(mRecordedPrograms);
mRecordedPrograms.clear();
mRecordedProgramsForRemovedInput.clear();
List<RecordedProgram> addedRecordedPrograms = new ArrayList<>();
@@ -492,7 +512,8 @@ public class DvrDataManagerImpl extends BaseDvrDataManager {
}
@VisibleForTesting
- static long getNextStartTimeAfter(List<ScheduledRecording> scheduledRecordings, long startTime) {
+ static long getNextStartTimeAfter(
+ List<ScheduledRecording> scheduledRecordings, long startTime) {
int start = 0;
int end = scheduledRecordings.size() - 1;
while (start <= end) {
@@ -503,13 +524,14 @@ public class DvrDataManagerImpl extends BaseDvrDataManager {
end = mid - 1;
}
}
- return start < scheduledRecordings.size() ? scheduledRecordings.get(start).getStartTimeMs()
+ return start < scheduledRecordings.size()
+ ? scheduledRecordings.get(start).getStartTimeMs()
: NEXT_START_TIME_NOT_FOUND;
}
@Override
- public List<ScheduledRecording> getScheduledRecordings(Range<Long> period,
- @RecordingState int state) {
+ public List<ScheduledRecording> getScheduledRecordings(
+ Range<Long> period, @RecordingState int state) {
List<ScheduledRecording> result = new ArrayList<>();
for (ScheduledRecording r : mScheduledRecordings.values()) {
if (r.isOverLapping(period) && r.getState() == state) {
@@ -595,8 +617,11 @@ public class DvrDataManagerImpl extends BaseDvrDataManager {
r.setId(IdGenerator.SERIES_RECORDING.newId());
mSeriesRecordings.put(r.getId(), r);
SeriesRecording previousSeries = mSeriesId2SeriesRecordings.put(r.getSeriesId(), r);
- SoftPreconditions.checkArgument(previousSeries == null, TAG, "Attempt to add series"
- + " recording with the duplicate series ID: " + r.getSeriesId());
+ SoftPreconditions.checkArgument(
+ previousSeries == null,
+ TAG,
+ "Attempt to add series" + " recording with the duplicate series ID: %s",
+ r.getSeriesId());
}
if (mDvrLoadFinished) {
notifySeriesRecordingAdded(seriesRecordings);
@@ -620,20 +645,23 @@ public class DvrDataManagerImpl extends BaseDvrDataManager {
mProgramId2ScheduledRecordings.remove(r.getProgramId());
if (r.getSeriesRecordingId() != SeriesRecording.ID_NOT_SET
&& (r.getState() == ScheduledRecording.STATE_RECORDING_NOT_STARTED
- || r.getState() == ScheduledRecording.STATE_RECORDING_IN_PROGRESS)) {
+ || r.getState() == ScheduledRecording.STATE_RECORDING_IN_PROGRESS)) {
seriesRecordingIdsToCheck.add(r.getSeriesRecordingId());
}
boolean isScheduleForRemovedInput =
mScheduledRecordingsForRemovedInput.remove(r.getProgramId()) != null;
// If it belongs to the series recording and it's not started yet, just mark delete
// instead of deleting it.
- if (!isScheduleForRemovedInput && !forceRemove
+ if (!isScheduleForRemovedInput
+ && !forceRemove
&& r.getSeriesRecordingId() != SeriesRecording.ID_NOT_SET
&& (r.getState() == ScheduledRecording.STATE_RECORDING_NOT_STARTED
- || r.getState() == ScheduledRecording.STATE_RECORDING_CANCELED)) {
+ || r.getState() == ScheduledRecording.STATE_RECORDING_CANCELED)) {
SoftPreconditions.checkState(r.getProgramId() != ScheduledRecording.ID_NOT_SET);
- ScheduledRecording deleted = ScheduledRecording.buildFrom(r)
- .setState(ScheduledRecording.STATE_RECORDING_DELETED).build();
+ ScheduledRecording deleted =
+ ScheduledRecording.buildFrom(r)
+ .setState(ScheduledRecording.STATE_RECORDING_DELETED)
+ .build();
getDeletedScheduleMap().put(deleted.getProgramId(), deleted);
schedulesNotToDelete.add(deleted);
} else {
@@ -655,12 +683,12 @@ public class DvrDataManagerImpl extends BaseDvrDataManager {
}
}
if (!schedulesToDelete.isEmpty()) {
- new AsyncDeleteScheduleTask(mContext).executeOnDbThread(
- ScheduledRecording.toArray(schedulesToDelete));
+ new AsyncDeleteScheduleTask(mContext)
+ .executeOnDbThread(ScheduledRecording.toArray(schedulesToDelete));
}
if (!schedulesNotToDelete.isEmpty()) {
- new AsyncUpdateScheduleTask(mContext).executeOnDbThread(
- ScheduledRecording.toArray(schedulesNotToDelete));
+ new AsyncUpdateScheduleTask(mContext)
+ .executeOnDbThread(ScheduledRecording.toArray(schedulesNotToDelete));
}
}
@@ -680,8 +708,10 @@ public class DvrDataManagerImpl extends BaseDvrDataManager {
if (r.getState() == ScheduledRecording.STATE_RECORDING_NOT_STARTED) {
toDelete.add(r);
} else {
- toUpdate.add(ScheduledRecording.buildFrom(r)
- .setSeriesRecordingId(SeriesRecording.ID_NOT_SET).build());
+ toUpdate.add(
+ ScheduledRecording.buildFrom(r)
+ .setSeriesRecordingId(SeriesRecording.ID_NOT_SET)
+ .build());
}
}
}
@@ -709,7 +739,9 @@ public class DvrDataManagerImpl extends BaseDvrDataManager {
List<ScheduledRecording> toUpdate = new ArrayList<>();
Set<Long> seriesRecordingIdsToCheck = new HashSet<>();
for (ScheduledRecording r : schedules) {
- if (!SoftPreconditions.checkState(mScheduledRecordings.containsKey(r.getId()), TAG,
+ if (!SoftPreconditions.checkState(
+ mScheduledRecordings.containsKey(r.getId()),
+ TAG,
"Recording not found for: " + r)) {
continue;
}
@@ -720,8 +752,8 @@ public class DvrDataManagerImpl extends BaseDvrDataManager {
long programId = r.getProgramId();
if (oldScheduledRecording.getProgramId() != programId
&& oldScheduledRecording.getProgramId() != ScheduledRecording.ID_NOT_SET) {
- ScheduledRecording oldValueForProgramId = mProgramId2ScheduledRecordings
- .get(oldScheduledRecording.getProgramId());
+ ScheduledRecording oldValueForProgramId =
+ mProgramId2ScheduledRecordings.get(oldScheduledRecording.getProgramId());
if (oldValueForProgramId.getId() == r.getId()) {
// Only remove the old ScheduledRecording if it has the same ID as the new one.
mProgramId2ScheduledRecordings.remove(oldScheduledRecording.getProgramId());
@@ -755,14 +787,17 @@ public class DvrDataManagerImpl extends BaseDvrDataManager {
@Override
public void updateSeriesRecording(final SeriesRecording... seriesRecordings) {
for (SeriesRecording r : seriesRecordings) {
- if (!SoftPreconditions.checkArgument(mSeriesRecordings.containsKey(r.getId()), TAG,
- "Non Existing Series ID: " + r)) {
+ if (!SoftPreconditions.checkArgument(
+ mSeriesRecordings.containsKey(r.getId()),
+ TAG,
+ "Non Existing Series ID: %s",
+ r)) {
continue;
}
SeriesRecording old1 = mSeriesRecordings.put(r.getId(), r);
SeriesRecording old2 = mSeriesId2SeriesRecordings.put(r.getSeriesId(), r);
- SoftPreconditions.checkArgument(old1.equals(old2), TAG, "Series ID cannot be"
- + " updated: " + r);
+ SoftPreconditions.checkArgument(
+ old1.equals(old2), TAG, "Series ID cannot be updated: %s", r);
}
if (mDvrLoadFinished) {
notifySeriesRecordingChanged(seriesRecordings);
@@ -772,7 +807,8 @@ public class DvrDataManagerImpl extends BaseDvrDataManager {
private boolean isInputAvailable(String inputId) {
return mInputManager.hasTvInputInfo(inputId)
- && (!Utils.isBundledInput(inputId) || mStorageStatusManager.isStorageMounted());
+ && (!CommonUtils.isBundledInput(inputId)
+ || mStorageStatusManager.isStorageMounted());
}
private void removeDeletedSchedules(ScheduledRecording... addedSchedules) {
@@ -784,8 +820,8 @@ public class DvrDataManagerImpl extends BaseDvrDataManager {
}
}
if (!schedulesToDelete.isEmpty()) {
- new AsyncDeleteScheduleTask(mContext).executeOnDbThread(
- ScheduledRecording.toArray(schedulesToDelete));
+ new AsyncDeleteScheduleTask(mContext)
+ .executeOnDbThread(ScheduledRecording.toArray(schedulesToDelete));
}
}
@@ -805,15 +841,17 @@ public class DvrDataManagerImpl extends BaseDvrDataManager {
}
}
if (!schedulesToDelete.isEmpty()) {
- new AsyncDeleteScheduleTask(mContext).executeOnDbThread(
- ScheduledRecording.toArray(schedulesToDelete));
+ new AsyncDeleteScheduleTask(mContext)
+ .executeOnDbThread(ScheduledRecording.toArray(schedulesToDelete));
}
}
private void unhideInput(String inputId) {
if (DEBUG) Log.d(TAG, "unhideInput " + inputId);
List<ScheduledRecording> movedSchedules =
- moveElements(mScheduledRecordingsForRemovedInput, mScheduledRecordings,
+ moveElements(
+ mScheduledRecordingsForRemovedInput,
+ mScheduledRecordings,
new Filter<ScheduledRecording>() {
@Override
public boolean filter(ScheduledRecording r) {
@@ -821,7 +859,9 @@ public class DvrDataManagerImpl extends BaseDvrDataManager {
}
});
List<RecordedProgram> movedRecordedPrograms =
- moveElements(mRecordedProgramsForRemovedInput, mRecordedPrograms,
+ moveElements(
+ mRecordedProgramsForRemovedInput,
+ mRecordedPrograms,
new Filter<RecordedProgram>() {
@Override
public boolean filter(RecordedProgram r) {
@@ -830,7 +870,9 @@ public class DvrDataManagerImpl extends BaseDvrDataManager {
});
List<SeriesRecording> removedSeriesRecordings = new ArrayList<>();
List<SeriesRecording> movedSeriesRecordings =
- moveElements(mSeriesRecordingsForRemovedInput, mSeriesRecordings,
+ moveElements(
+ mSeriesRecordingsForRemovedInput,
+ mSeriesRecordings,
new Filter<SeriesRecording>() {
@Override
public boolean filter(SeriesRecording r) {
@@ -856,8 +898,8 @@ public class DvrDataManagerImpl extends BaseDvrDataManager {
for (SeriesRecording r : removedSeriesRecordings) {
mSeriesRecordingsForRemovedInput.remove(r.getId());
}
- new AsyncDeleteSeriesRecordingTask(mContext).executeOnDbThread(
- SeriesRecording.toArray(removedSeriesRecordings));
+ new AsyncDeleteSeriesRecordingTask(mContext)
+ .executeOnDbThread(SeriesRecording.toArray(removedSeriesRecordings));
// Notify after all the data are moved.
if (!movedSchedules.isEmpty()) {
notifyScheduledRecordingAdded(ScheduledRecording.toArray(movedSchedules));
@@ -873,7 +915,9 @@ public class DvrDataManagerImpl extends BaseDvrDataManager {
private void hideInput(String inputId) {
if (DEBUG) Log.d(TAG, "hideInput " + inputId);
List<ScheduledRecording> movedSchedules =
- moveElements(mScheduledRecordings, mScheduledRecordingsForRemovedInput,
+ moveElements(
+ mScheduledRecordings,
+ mScheduledRecordingsForRemovedInput,
new Filter<ScheduledRecording>() {
@Override
public boolean filter(ScheduledRecording r) {
@@ -881,7 +925,9 @@ public class DvrDataManagerImpl extends BaseDvrDataManager {
}
});
List<SeriesRecording> movedSeriesRecordings =
- moveElements(mSeriesRecordings, mSeriesRecordingsForRemovedInput,
+ moveElements(
+ mSeriesRecordings,
+ mSeriesRecordingsForRemovedInput,
new Filter<SeriesRecording>() {
@Override
public boolean filter(SeriesRecording r) {
@@ -889,7 +935,9 @@ public class DvrDataManagerImpl extends BaseDvrDataManager {
}
});
List<RecordedProgram> movedRecordedPrograms =
- moveElements(mRecordedPrograms, mRecordedProgramsForRemovedInput,
+ moveElements(
+ mRecordedPrograms,
+ mRecordedProgramsForRemovedInput,
new Filter<RecordedProgram>() {
@Override
public boolean filter(RecordedProgram r) {
@@ -931,7 +979,8 @@ public class DvrDataManagerImpl extends BaseDvrDataManager {
public void forgetStorage(String inputId) {
List<ScheduledRecording> schedulesToDelete = new ArrayList<>();
for (Iterator<ScheduledRecording> i =
- mScheduledRecordingsForRemovedInput.values().iterator(); i.hasNext(); ) {
+ mScheduledRecordingsForRemovedInput.values().iterator();
+ i.hasNext(); ) {
ScheduledRecording r = i.next();
if (inputId.equals(r.getInputId())) {
schedulesToDelete.add(r);
@@ -939,32 +988,34 @@ public class DvrDataManagerImpl extends BaseDvrDataManager {
}
}
List<SeriesRecording> seriesRecordingsToDelete = new ArrayList<>();
- for (Iterator<SeriesRecording> i =
- mSeriesRecordingsForRemovedInput.values().iterator(); i.hasNext(); ) {
+ for (Iterator<SeriesRecording> i = mSeriesRecordingsForRemovedInput.values().iterator();
+ i.hasNext(); ) {
SeriesRecording r = i.next();
if (inputId.equals(r.getInputId())) {
seriesRecordingsToDelete.add(r);
i.remove();
}
}
- for (Iterator<RecordedProgram> i =
- mRecordedProgramsForRemovedInput.values().iterator(); i.hasNext(); ) {
+ for (Iterator<RecordedProgram> i = mRecordedProgramsForRemovedInput.values().iterator();
+ i.hasNext(); ) {
if (inputId.equals(i.next().getInputId())) {
i.remove();
}
}
- new AsyncDeleteScheduleTask(mContext).executeOnDbThread(
- ScheduledRecording.toArray(schedulesToDelete));
- new AsyncDeleteSeriesRecordingTask(mContext).executeOnDbThread(
- SeriesRecording.toArray(seriesRecordingsToDelete));
- new AsyncDbTask<Void, Void, Void>() {
+ new AsyncDeleteScheduleTask(mContext)
+ .executeOnDbThread(ScheduledRecording.toArray(schedulesToDelete));
+ new AsyncDeleteSeriesRecordingTask(mContext)
+ .executeOnDbThread(SeriesRecording.toArray(seriesRecordingsToDelete));
+ new AsyncDbTask<Void, Void, Void>(mDbExecutor) {
@Override
protected Void doInBackground(Void... params) {
ContentResolver resolver = mContext.getContentResolver();
- String args[] = { inputId };
+ String[] args = {inputId};
try {
- resolver.delete(RecordedPrograms.CONTENT_URI,
- RecordedPrograms.COLUMN_INPUT_ID + " = ?", args);
+ resolver.delete(
+ RecordedPrograms.CONTENT_URI,
+ RecordedPrograms.COLUMN_INPUT_ID + " = ?",
+ args);
} catch (SQLiteException e) {
Log.e(TAG, "Failed to delete recorded programs for inputId: " + inputId, e);
}
@@ -996,7 +1047,7 @@ public class DvrDataManagerImpl extends BaseDvrDataManager {
private final Uri mUri;
public RecordedProgramsQueryTask(ContentResolver contentResolver, Uri uri) {
- super(contentResolver, uri == null ? RecordedPrograms.CONTENT_URI : uri);
+ super(mDbExecutor, contentResolver, uri == null ? RecordedPrograms.CONTENT_URI : uri);
mUri = uri;
}