aboutsummaryrefslogtreecommitdiff
path: root/src/com/android/tv/dvr/provider/DvrDbFuture.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/com/android/tv/dvr/provider/DvrDbFuture.java')
-rw-r--r--src/com/android/tv/dvr/provider/DvrDbFuture.java98
1 files changed, 54 insertions, 44 deletions
diff --git a/src/com/android/tv/dvr/provider/DvrDbFuture.java b/src/com/android/tv/dvr/provider/DvrDbFuture.java
index cbc2c07d..ae8c480b 100644
--- a/src/com/android/tv/dvr/provider/DvrDbFuture.java
+++ b/src/com/android/tv/dvr/provider/DvrDbFuture.java
@@ -16,23 +16,21 @@
package com.android.tv.dvr.provider;
+import android.content.Context;
import android.database.Cursor;
import android.support.annotation.Nullable;
import android.util.Log;
-
import com.android.tv.common.concurrent.NamedThreadFactory;
import com.android.tv.dvr.data.ScheduledRecording;
import com.android.tv.dvr.data.SeriesRecording;
import com.android.tv.dvr.provider.DvrContract.Schedules;
import com.android.tv.dvr.provider.DvrContract.SeriesRecordings;
import com.android.tv.util.MainThreadExecutor;
-
import com.google.common.util.concurrent.FutureCallback;
import com.google.common.util.concurrent.Futures;
import com.google.common.util.concurrent.ListenableFuture;
import com.google.common.util.concurrent.ListeningExecutorService;
import com.google.common.util.concurrent.MoreExecutors;
-
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.Executors;
@@ -40,24 +38,29 @@ import java.util.concurrent.Executors;
/** {@link DvrDbFuture} that defaults to executing on its own single threaded Executor Service. */
public abstract class DvrDbFuture<ParamsT, ResultT> {
private static final NamedThreadFactory THREAD_FACTORY =
- new NamedThreadFactory(DvrDbFuture.class.getSimpleName());
+ new NamedThreadFactory(DvrDbFuture.class.getSimpleName());
private static final ListeningExecutorService DB_EXECUTOR =
- MoreExecutors.listeningDecorator(Executors.newSingleThreadExecutor(THREAD_FACTORY));
+ MoreExecutors.listeningDecorator(Executors.newSingleThreadExecutor(THREAD_FACTORY));
- final DvrDatabaseHelper mDbHelper;
+ private static DvrDatabaseHelper sDbHelper;
private ListenableFuture<ResultT> mFuture;
- private DvrDbFuture(DvrDatabaseHelper mDbHelper) {
- this.mDbHelper = mDbHelper;
+ final Context mContext;
+
+ private DvrDbFuture(Context context) {
+ mContext = context;
}
- /** Execute the task on the {@link #DB_EXECUTOR} thread and return Future */
+ /** Execute the task on the {@link #DB_EXECUTOR} thread and return Future*/
@SafeVarargs
public final ListenableFuture<ResultT> executeOnDbThread(
- FutureCallback<ResultT> callback, ParamsT... params) {
- mFuture = DB_EXECUTOR.submit(() -> dbHelperInBackground(params));
- Futures.addCallback(mFuture, callback, MainThreadExecutor.getInstance());
- return mFuture;
+ FutureCallback<ResultT> callback, ParamsT... params) {
+ if (sDbHelper == null) {
+ sDbHelper = new DvrDatabaseHelper(mContext.getApplicationContext());
+ }
+ mFuture = DB_EXECUTOR.submit(() -> dbHelperInBackground(params));
+ Futures.addCallback(mFuture, callback, MainThreadExecutor.getInstance());
+ return mFuture;
}
/** Executes in the background after initializing DbHelper} */
@@ -69,48 +72,52 @@ public abstract class DvrDbFuture<ParamsT, ResultT> {
}
/** Inserts schedules. */
- public static class AddScheduleFuture extends DvrDbFuture<ScheduledRecording, Void> {
- public AddScheduleFuture(DvrDatabaseHelper dbHelper) {
- super(dbHelper);
+ public static class AddScheduleFuture
+ extends DvrDbFuture<ScheduledRecording, Void> {
+ public AddScheduleFuture(Context context) {
+ super(context);
}
@Override
protected final Void dbHelperInBackground(ScheduledRecording... params) {
- mDbHelper.insertSchedules(params);
+ sDbHelper.insertSchedules(params);
return null;
}
}
/** Update schedules. */
- public static class UpdateScheduleFuture extends DvrDbFuture<ScheduledRecording, Void> {
- public UpdateScheduleFuture(DvrDatabaseHelper dbHelper) {
- super(dbHelper);
+ public static class UpdateScheduleFuture
+ extends DvrDbFuture<ScheduledRecording, Void> {
+ public UpdateScheduleFuture(Context context) {
+ super(context);
}
@Override
protected final Void dbHelperInBackground(ScheduledRecording... params) {
- mDbHelper.updateSchedules(params);
+ sDbHelper.updateSchedules(params);
return null;
}
}
/** Delete schedules. */
- public static class DeleteScheduleFuture extends DvrDbFuture<ScheduledRecording, Void> {
- public DeleteScheduleFuture(DvrDatabaseHelper dbHelper) {
- super(dbHelper);
+ public static class DeleteScheduleFuture
+ extends DvrDbFuture<ScheduledRecording, Void> {
+ public DeleteScheduleFuture(Context context) {
+ super(context);
}
@Override
protected final Void dbHelperInBackground(ScheduledRecording... params) {
- mDbHelper.deleteSchedules(params);
+ sDbHelper.deleteSchedules(params);
return null;
}
}
/** Returns all {@link ScheduledRecording}s. */
- public static class DvrQueryScheduleFuture extends DvrDbFuture<Void, List<ScheduledRecording>> {
- public DvrQueryScheduleFuture(DvrDatabaseHelper dbHelper) {
- super(dbHelper);
+ public static class DvrQueryScheduleFuture
+ extends DvrDbFuture<Void, List<ScheduledRecording>> {
+ public DvrQueryScheduleFuture(Context context) {
+ super(context);
}
@Override
@@ -120,7 +127,7 @@ public abstract class DvrDbFuture<ParamsT, ResultT> {
return null;
}
List<ScheduledRecording> scheduledRecordings = new ArrayList<>();
- try (Cursor c = mDbHelper.query(Schedules.TABLE_NAME, ScheduledRecording.PROJECTION)) {
+ try (Cursor c = sDbHelper.query(Schedules.TABLE_NAME, ScheduledRecording.PROJECTION)) {
while (c.moveToNext() && !isCancelled()) {
scheduledRecordings.add(ScheduledRecording.fromCursor(c));
}
@@ -130,40 +137,43 @@ public abstract class DvrDbFuture<ParamsT, ResultT> {
}
/** Inserts series recordings. */
- public static class AddSeriesRecordingFuture extends DvrDbFuture<SeriesRecording, Void> {
- public AddSeriesRecordingFuture(DvrDatabaseHelper dbHelper) {
- super(dbHelper);
+ public static class AddSeriesRecordingFuture
+ extends DvrDbFuture<SeriesRecording, Void> {
+ public AddSeriesRecordingFuture(Context context) {
+ super(context);
}
@Override
protected final Void dbHelperInBackground(SeriesRecording... params) {
- mDbHelper.insertSeriesRecordings(params);
+ sDbHelper.insertSeriesRecordings(params);
return null;
}
}
/** Update series recordings. */
- public static class UpdateSeriesRecordingFuture extends DvrDbFuture<SeriesRecording, Void> {
- public UpdateSeriesRecordingFuture(DvrDatabaseHelper dbHelper) {
- super(dbHelper);
+ public static class UpdateSeriesRecordingFuture
+ extends DvrDbFuture<SeriesRecording, Void> {
+ public UpdateSeriesRecordingFuture(Context context) {
+ super(context);
}
@Override
protected final Void dbHelperInBackground(SeriesRecording... params) {
- mDbHelper.updateSeriesRecordings(params);
+ sDbHelper.updateSeriesRecordings(params);
return null;
}
}
/** Delete series recordings. */
- public static class DeleteSeriesRecordingFuture extends DvrDbFuture<SeriesRecording, Void> {
- public DeleteSeriesRecordingFuture(DvrDatabaseHelper dbHelper) {
- super(dbHelper);
+ public static class DeleteSeriesRecordingFuture
+ extends DvrDbFuture<SeriesRecording, Void> {
+ public DeleteSeriesRecordingFuture(Context context) {
+ super(context);
}
@Override
protected final Void dbHelperInBackground(SeriesRecording... params) {
- mDbHelper.deleteSeriesRecordings(params);
+ sDbHelper.deleteSeriesRecordings(params);
return null;
}
}
@@ -173,8 +183,8 @@ public abstract class DvrDbFuture<ParamsT, ResultT> {
extends DvrDbFuture<Void, List<SeriesRecording>> {
private static final String TAG = "DvrQuerySeriesRecording";
- public DvrQuerySeriesRecordingFuture(DvrDatabaseHelper dbHelper) {
- super(dbHelper);
+ public DvrQuerySeriesRecordingFuture(Context context) {
+ super(context);
}
@Override
@@ -185,7 +195,7 @@ public abstract class DvrDbFuture<ParamsT, ResultT> {
}
List<SeriesRecording> scheduledRecordings = new ArrayList<>();
try (Cursor c =
- mDbHelper.query(SeriesRecordings.TABLE_NAME, SeriesRecording.PROJECTION)) {
+ sDbHelper.query(SeriesRecordings.TABLE_NAME, SeriesRecording.PROJECTION)) {
while (c.moveToNext() && !isCancelled()) {
scheduledRecordings.add(SeriesRecording.fromCursor(c));
}