diff options
Diffstat (limited to 'src/com/android/tv/dvr/provider/DvrDbFuture.java')
-rw-r--r-- | src/com/android/tv/dvr/provider/DvrDbFuture.java | 98 |
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)); } |