aboutsummaryrefslogtreecommitdiff
path: root/src/com/android/tv/dvr
diff options
context:
space:
mode:
authorNick Chalko <nchalko@google.com>2018-01-17 11:15:16 -0800
committerNick Chalko <nchalko@google.com>2018-01-17 11:20:37 -0800
commit38fef3bf253578f518d1bc727da4afb263194398 (patch)
tree09a06234eda7c54216bca773b6d8407eafe0722d /src/com/android/tv/dvr
parentc9889d13513e26649a7708cf2d0562cb592d441a (diff)
downloadTV-38fef3bf253578f518d1bc727da4afb263194398.tar.gz
Fix broken build
This reverts c9889d1 Update aosp build to use a snapshot of exoplyer. by nchalko · 5 hours ago master 8952aa7 Clean format by nchalko · 20 hours ago ba3fb16 Merge "Use a snapshot of exoplayer" by TreeHugger Robot · 18 hours ago ff75e39 Project import generated by Copybara. by Live Channels Team · 22 hours ago 9737fc2 Use a snapshot of exoplayer by Nick Chalko · 20 hours ago 4a5144a Project import generated by Copybara. by Live Channels Team · 6 days ago Bug: 72092981 Bug: 69474774 Change-Id: Ie756857c10bf052c60b6442c3d61252f65b49143
Diffstat (limited to 'src/com/android/tv/dvr')
-rw-r--r--src/com/android/tv/dvr/BaseDvrDataManager.java2
-rw-r--r--src/com/android/tv/dvr/DvrDataManagerImpl.java31
-rw-r--r--src/com/android/tv/dvr/DvrManager.java16
-rw-r--r--src/com/android/tv/dvr/DvrScheduleManager.java14
-rw-r--r--src/com/android/tv/dvr/DvrStorageStatusManager.java286
-rw-r--r--src/com/android/tv/dvr/DvrWatchedPositionManager.java2
-rw-r--r--src/com/android/tv/dvr/data/RecordedProgram.java4
-rw-r--r--src/com/android/tv/dvr/data/ScheduledRecording.java22
-rw-r--r--src/com/android/tv/dvr/data/SeriesRecording.java2
-rw-r--r--src/com/android/tv/dvr/provider/AsyncDvrDbTask.java3
-rw-r--r--src/com/android/tv/dvr/provider/DvrDatabaseHelper.java2
-rw-r--r--src/com/android/tv/dvr/provider/DvrDbSync.java6
-rw-r--r--src/com/android/tv/dvr/provider/EpisodicProgramLoadTask.java6
-rw-r--r--src/com/android/tv/dvr/recorder/ConflictChecker.java34
-rw-r--r--src/com/android/tv/dvr/recorder/DvrRecordingService.java12
-rw-r--r--src/com/android/tv/dvr/recorder/DvrStartRecordingReceiver.java7
-rw-r--r--src/com/android/tv/dvr/recorder/InputTaskScheduler.java3
-rw-r--r--src/com/android/tv/dvr/recorder/RecordingScheduler.java9
-rw-r--r--src/com/android/tv/dvr/recorder/RecordingTask.java13
-rw-r--r--src/com/android/tv/dvr/recorder/ScheduledProgramReaper.java2
-rw-r--r--src/com/android/tv/dvr/recorder/SeriesRecordingScheduler.java34
-rw-r--r--src/com/android/tv/dvr/ui/DvrAlreadyRecordedFragment.java4
-rw-r--r--src/com/android/tv/dvr/ui/DvrAlreadyScheduledFragment.java4
-rw-r--r--src/com/android/tv/dvr/ui/DvrChannelRecordDurationOptionFragment.java6
-rw-r--r--src/com/android/tv/dvr/ui/DvrConflictFragment.java10
-rw-r--r--src/com/android/tv/dvr/ui/DvrGuidedStepFragment.java16
-rw-r--r--src/com/android/tv/dvr/ui/DvrInsufficientSpaceErrorFragment.java4
-rw-r--r--src/com/android/tv/dvr/ui/DvrPrioritySettingsFragment.java10
-rw-r--r--src/com/android/tv/dvr/ui/DvrScheduleFragment.java14
-rw-r--r--src/com/android/tv/dvr/ui/DvrSeriesDeletionActivity.java4
-rw-r--r--src/com/android/tv/dvr/ui/DvrSeriesDeletionFragment.java8
-rw-r--r--src/com/android/tv/dvr/ui/DvrSeriesScheduledFragment.java8
-rw-r--r--src/com/android/tv/dvr/ui/DvrSeriesSettingsActivity.java4
-rw-r--r--src/com/android/tv/dvr/ui/DvrSeriesSettingsFragment.java14
-rw-r--r--src/com/android/tv/dvr/ui/DvrStopRecordingFragment.java4
-rw-r--r--src/com/android/tv/dvr/ui/DvrStopSeriesRecordingFragment.java5
-rw-r--r--src/com/android/tv/dvr/ui/DvrUiHelper.java23
-rw-r--r--src/com/android/tv/dvr/ui/TrackedGuidedStepFragment.java4
-rw-r--r--src/com/android/tv/dvr/ui/browse/CurrentRecordingDetailsFragment.java6
-rw-r--r--src/com/android/tv/dvr/ui/browse/DetailsContent.java6
-rw-r--r--src/com/android/tv/dvr/ui/browse/DetailsViewBackgroundHelper.java1
-rw-r--r--src/com/android/tv/dvr/ui/browse/DvrBrowseActivity.java4
-rw-r--r--src/com/android/tv/dvr/ui/browse/DvrBrowseFragment.java9
-rw-r--r--src/com/android/tv/dvr/ui/browse/DvrDetailsActivity.java4
-rw-r--r--src/com/android/tv/dvr/ui/browse/DvrDetailsFragment.java10
-rw-r--r--src/com/android/tv/dvr/ui/browse/DvrItemPresenter.java5
-rw-r--r--src/com/android/tv/dvr/ui/browse/FullSchedulesCardPresenter.java4
-rw-r--r--src/com/android/tv/dvr/ui/browse/RecordedProgramDetailsFragment.java8
-rw-r--r--src/com/android/tv/dvr/ui/browse/RecordedProgramPresenter.java4
-rw-r--r--src/com/android/tv/dvr/ui/browse/RecordingCardView.java4
-rw-r--r--src/com/android/tv/dvr/ui/browse/RecordingDetailsFragment.java4
-rw-r--r--src/com/android/tv/dvr/ui/browse/ScheduledRecordingDetailsFragment.java4
-rw-r--r--src/com/android/tv/dvr/ui/browse/ScheduledRecordingPresenter.java4
-rw-r--r--src/com/android/tv/dvr/ui/browse/SeriesRecordingDetailsFragment.java8
-rw-r--r--src/com/android/tv/dvr/ui/browse/SeriesRecordingPresenter.java5
-rw-r--r--src/com/android/tv/dvr/ui/list/BaseDvrSchedulesFragment.java7
-rw-r--r--src/com/android/tv/dvr/ui/list/DvrSchedulesActivity.java4
-rw-r--r--src/com/android/tv/dvr/ui/list/DvrSeriesSchedulesFragment.java5
-rw-r--r--src/com/android/tv/dvr/ui/list/ScheduleRowAdapter.java8
-rw-r--r--src/com/android/tv/dvr/ui/list/ScheduleRowPresenter.java10
-rw-r--r--src/com/android/tv/dvr/ui/list/SchedulesHeaderRowPresenter.java6
-rw-r--r--src/com/android/tv/dvr/ui/list/SeriesScheduleRowAdapter.java5
-rw-r--r--src/com/android/tv/dvr/ui/playback/DvrPlaybackActivity.java4
-rw-r--r--src/com/android/tv/dvr/ui/playback/DvrPlaybackMediaSessionHelper.java6
-rw-r--r--src/com/android/tv/dvr/ui/playback/DvrPlaybackOverlayFragment.java6
65 files changed, 492 insertions, 311 deletions
diff --git a/src/com/android/tv/dvr/BaseDvrDataManager.java b/src/com/android/tv/dvr/BaseDvrDataManager.java
index 0befba9c..342e4b21 100644
--- a/src/com/android/tv/dvr/BaseDvrDataManager.java
+++ b/src/com/android/tv/dvr/BaseDvrDataManager.java
@@ -25,11 +25,11 @@ import android.util.ArraySet;
import android.util.Log;
import com.android.tv.common.SoftPreconditions;
import com.android.tv.common.feature.CommonFeatures;
-import com.android.tv.common.util.Clock;
import com.android.tv.dvr.data.RecordedProgram;
import com.android.tv.dvr.data.ScheduledRecording;
import com.android.tv.dvr.data.ScheduledRecording.RecordingState;
import com.android.tv.dvr.data.SeriesRecording;
+import com.android.tv.util.Clock;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
diff --git a/src/com/android/tv/dvr/DvrDataManagerImpl.java b/src/com/android/tv/dvr/DvrDataManagerImpl.java
index 28006b08..17ea63a0 100644
--- a/src/com/android/tv/dvr/DvrDataManagerImpl.java
+++ b/src/com/android/tv/dvr/DvrDataManagerImpl.java
@@ -38,12 +38,9 @@ import android.text.TextUtils;
import android.util.ArraySet;
import android.util.Log;
import android.util.Range;
-import com.android.tv.TvSingletons;
+import com.android.tv.TvApplication;
import com.android.tv.common.SoftPreconditions;
-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.DvrStorageStatusManager.OnStorageMountChangedListener;
import com.android.tv.dvr.data.IdGenerator;
import com.android.tv.dvr.data.RecordedProgram;
import com.android.tv.dvr.data.ScheduledRecording;
@@ -61,9 +58,11 @@ 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;
@@ -115,7 +114,7 @@ public class DvrDataManagerImpl extends BaseDvrDataManager {
private boolean mRecordedProgramLoadFinished;
private final Set<AsyncTask> mPendingTasks = new ArraySet<>();
private DvrDbSync mDbSync;
- private RecordingStorageStatusManager mStorageStatusManager;
+ private DvrStorageStatusManager mStorageStatusManager;
private final TvInputCallback mInputCallback =
new TvInputCallback() {
@@ -141,7 +140,7 @@ public class DvrDataManagerImpl extends BaseDvrDataManager {
@Override
public void onStorageMountChanged(boolean storageMounted) {
for (TvInputInfo input : mInputManager.getTvInputInfos(true, true)) {
- if (CommonUtils.isBundledInput(input.getId())) {
+ if (Utils.isBundledInput(input.getId())) {
if (storageMounted) {
unhideInput(input.getId());
} else {
@@ -170,9 +169,8 @@ public class DvrDataManagerImpl extends BaseDvrDataManager {
public DvrDataManagerImpl(Context context, Clock clock) {
super(context, clock);
mContext = context;
- mInputManager = TvSingletons.getSingletons(context).getTvInputManagerHelper();
- mStorageStatusManager =
- TvSingletons.getSingletons(context).getRecordingStorageStatusManager();
+ mInputManager = TvApplication.getSingletons(context).getTvInputManagerHelper();
+ mStorageStatusManager = TvApplication.getSingletons(context).getDvrStorageStatusManager();
}
public void start() {
@@ -610,8 +608,9 @@ public class DvrDataManagerImpl extends BaseDvrDataManager {
SoftPreconditions.checkArgument(
previousSeries == null,
TAG,
- "Attempt to add series" + " recording with the duplicate series ID: %s",
- r.getSeriesId());
+ "Attempt to add series"
+ + " recording with the duplicate series ID: "
+ + r.getSeriesId());
}
if (mDvrLoadFinished) {
notifySeriesRecordingAdded(seriesRecordings);
@@ -780,14 +779,13 @@ public class DvrDataManagerImpl extends BaseDvrDataManager {
if (!SoftPreconditions.checkArgument(
mSeriesRecordings.containsKey(r.getId()),
TAG,
- "Non Existing Series ID: %s",
- r)) {
+ "Non Existing Series ID: " + 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: %s", r);
+ old1.equals(old2), TAG, "Series ID cannot be" + " updated: " + r);
}
if (mDvrLoadFinished) {
notifySeriesRecordingChanged(seriesRecordings);
@@ -797,8 +795,7 @@ public class DvrDataManagerImpl extends BaseDvrDataManager {
private boolean isInputAvailable(String inputId) {
return mInputManager.hasTvInputInfo(inputId)
- && (!CommonUtils.isBundledInput(inputId)
- || mStorageStatusManager.isStorageMounted());
+ && (!Utils.isBundledInput(inputId) || mStorageStatusManager.isStorageMounted());
}
private void removeDeletedSchedules(ScheduledRecording... addedSchedules) {
diff --git a/src/com/android/tv/dvr/DvrManager.java b/src/com/android/tv/dvr/DvrManager.java
index 247e1bc5..50751d95 100644
--- a/src/com/android/tv/dvr/DvrManager.java
+++ b/src/com/android/tv/dvr/DvrManager.java
@@ -36,10 +36,10 @@ import android.support.annotation.VisibleForTesting;
import android.support.annotation.WorkerThread;
import android.util.Log;
import android.util.Range;
-import com.android.tv.TvSingletons;
+import com.android.tv.ApplicationSingletons;
+import com.android.tv.TvApplication;
import com.android.tv.common.SoftPreconditions;
import com.android.tv.common.feature.CommonFeatures;
-import com.android.tv.common.util.CommonUtils;
import com.android.tv.data.Channel;
import com.android.tv.data.Program;
import com.android.tv.dvr.DvrDataManager.OnRecordedProgramLoadFinishedListener;
@@ -78,9 +78,9 @@ public class DvrManager {
public DvrManager(Context context) {
SoftPreconditions.checkFeatureEnabled(context, CommonFeatures.DVR, TAG);
mAppContext = context.getApplicationContext();
- TvSingletons tvSingletons = TvSingletons.getSingletons(context);
- mDataManager = (WritableDvrDataManager) tvSingletons.getDvrDataManager();
- mScheduleManager = tvSingletons.getDvrScheduleManager();
+ ApplicationSingletons appSingletons = TvApplication.getSingletons(context);
+ mDataManager = (WritableDvrDataManager) appSingletons.getDvrDataManager();
+ mScheduleManager = appSingletons.getDvrScheduleManager();
if (mDataManager.isInitialized() && mScheduleManager.isInitialized()) {
createSeriesRecordingsForRecordedProgramsIfNeeded(mDataManager.getRecordedPrograms());
} else {
@@ -666,7 +666,7 @@ public class DvrManager {
return false;
}
Program program =
- TvSingletons.getSingletons(mAppContext)
+ TvApplication.getSingletons(mAppContext)
.getProgramDataManager()
.getCurrentProgram(channel.getId());
return program == null || !program.isRecordingProhibited();
@@ -683,7 +683,7 @@ public class DvrManager {
return false;
}
Channel channel =
- TvSingletons.getSingletons(mAppContext)
+ TvApplication.getSingletons(mAppContext)
.getChannelDataManager()
.getChannel(program.getChannelId());
if (channel == null || channel.isRecordingProhibited()) {
@@ -833,7 +833,7 @@ public class DvrManager {
if (!recordedProgramPath.exists()) {
if (DEBUG) Log.d(TAG, "File to delete not exist: " + recordedProgramPath);
} else {
- CommonUtils.deleteDirOrFile(recordedProgramPath);
+ Utils.deleteDirOrFile(recordedProgramPath);
if (DEBUG) {
Log.d(TAG, "Sucessfully deleted files of the recorded program: " + dataUri);
}
diff --git a/src/com/android/tv/dvr/DvrScheduleManager.java b/src/com/android/tv/dvr/DvrScheduleManager.java
index cbb89290..62f93c8b 100644
--- a/src/com/android/tv/dvr/DvrScheduleManager.java
+++ b/src/com/android/tv/dvr/DvrScheduleManager.java
@@ -25,7 +25,8 @@ import android.support.annotation.NonNull;
import android.support.annotation.VisibleForTesting;
import android.util.ArraySet;
import android.util.Range;
-import com.android.tv.TvSingletons;
+import com.android.tv.ApplicationSingletons;
+import com.android.tv.TvApplication;
import com.android.tv.common.SoftPreconditions;
import com.android.tv.data.Channel;
import com.android.tv.data.ChannelDataManager;
@@ -50,7 +51,6 @@ import java.util.concurrent.CopyOnWriteArraySet;
/** A class to manage the schedules. */
@TargetApi(Build.VERSION_CODES.N)
@MainThread
-@SuppressWarnings("AndroidApiChecker") // TODO(b/32513850) remove when error prone is updated
public class DvrScheduleManager {
private static final String TAG = "DvrScheduleManager";
@@ -94,9 +94,9 @@ public class DvrScheduleManager {
public DvrScheduleManager(Context context) {
mContext = context;
- TvSingletons tvSingletons = TvSingletons.getSingletons(context);
- mDataManager = (DvrDataManagerImpl) tvSingletons.getDvrDataManager();
- mChannelDataManager = tvSingletons.getChannelDataManager();
+ ApplicationSingletons appSingletons = TvApplication.getSingletons(context);
+ mDataManager = (DvrDataManagerImpl) appSingletons.getDvrDataManager();
+ mChannelDataManager = appSingletons.getChannelDataManager();
if (mDataManager.isDvrScheduleLoadFinished() && mChannelDataManager.isDbLoadFinished()) {
buildData();
} else {
@@ -126,7 +126,7 @@ public class DvrScheduleManager {
TvInputInfo input =
Utils.getTvInputInfoForInputId(mContext, schedule.getInputId());
if (!SoftPreconditions.checkArgument(
- input != null, TAG, "Input was removed for : %s", schedule)) {
+ input != null, TAG, "Input was removed for : " + schedule)) {
// Input removed.
mInputScheduleMap.remove(schedule.getInputId());
mInputConflictInfoMap.remove(schedule.getInputId());
@@ -190,7 +190,7 @@ public class DvrScheduleManager {
TvInputInfo input =
Utils.getTvInputInfoForInputId(mContext, schedule.getInputId());
if (!SoftPreconditions.checkArgument(
- input != null, TAG, "Input was removed for : %s", schedule)) {
+ input != null, TAG, "Input was removed for : " + schedule)) {
// Input removed.
mInputScheduleMap.remove(schedule.getInputId());
mInputConflictInfoMap.remove(schedule.getInputId());
diff --git a/src/com/android/tv/dvr/DvrStorageStatusManager.java b/src/com/android/tv/dvr/DvrStorageStatusManager.java
index fe5a47b8..a2f4bda8 100644
--- a/src/com/android/tv/dvr/DvrStorageStatusManager.java
+++ b/src/com/android/tv/dvr/DvrStorageStatusManager.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2017 The Android Open Source Project
+ * Copyright (C) 2016 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -11,56 +11,272 @@
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
- * limitations under the License.
+ * limitations under the License
*/
+
package com.android.tv.dvr;
+import android.content.BroadcastReceiver;
import android.content.ContentProviderOperation;
import android.content.ContentResolver;
import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
import android.content.OperationApplicationException;
import android.database.Cursor;
+import android.media.tv.TvContract;
import android.media.tv.TvInputInfo;
import android.net.Uri;
import android.os.AsyncTask;
+import android.os.Environment;
+import android.os.Looper;
import android.os.RemoteException;
-import android.support.media.tv.TvContractCompat;
+import android.os.StatFs;
+import android.support.annotation.AnyThread;
+import android.support.annotation.IntDef;
+import android.support.annotation.WorkerThread;
import android.util.Log;
-import com.android.tv.TvSingletons;
-import com.android.tv.common.recording.RecordingStorageStatusManager;
-import com.android.tv.common.util.CommonUtils;
+import com.android.tv.TvApplication;
+import com.android.tv.common.SoftPreconditions;
+import com.android.tv.common.feature.CommonFeatures;
import com.android.tv.util.TvInputManagerHelper;
+import com.android.tv.util.Utils;
import java.io.File;
+import java.io.IOException;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
import java.util.ArrayList;
import java.util.List;
+import java.util.Objects;
+import java.util.Set;
+import java.util.concurrent.CopyOnWriteArraySet;
-/** A class for extending TV app-specific function to {@link RecordingStorageStatusManager}. */
-@SuppressWarnings("TryWithResources") // TODO(b/62143348): remove when error prone check fixed
-public class DvrStorageStatusManager extends RecordingStorageStatusManager {
+/** Signals DVR storage status change such as plugging/unplugging. */
+public class DvrStorageStatusManager {
private static final String TAG = "DvrStorageStatusManager";
+ private static final boolean DEBUG = false;
- private final Context mContext;
- private CleanUpDbTask mCleanUpDbTask;
+ /** Minimum storage size to support DVR */
+ public static final long MIN_STORAGE_SIZE_FOR_DVR_IN_BYTES = 50 * 1024 * 1024 * 1024L; // 50GB
+
+ private static final long MIN_FREE_STORAGE_SIZE_FOR_DVR_IN_BYTES =
+ 10 * 1024 * 1024 * 1024L; // 10GB
+ private static final String RECORDING_DATA_SUB_PATH = "/recording";
private static final String[] PROJECTION = {
- TvContractCompat.RecordedPrograms._ID,
- TvContractCompat.RecordedPrograms.COLUMN_PACKAGE_NAME,
- TvContractCompat.RecordedPrograms.COLUMN_RECORDING_DATA_URI
+ TvContract.RecordedPrograms._ID,
+ TvContract.RecordedPrograms.COLUMN_PACKAGE_NAME,
+ TvContract.RecordedPrograms.COLUMN_RECORDING_DATA_URI
};
private static final int BATCH_OPERATION_COUNT = 100;
- public DvrStorageStatusManager(Context context) {
- super(context);
+ @IntDef({
+ STORAGE_STATUS_OK,
+ STORAGE_STATUS_TOTAL_CAPACITY_TOO_SMALL,
+ STORAGE_STATUS_FREE_SPACE_INSUFFICIENT,
+ STORAGE_STATUS_MISSING
+ })
+ @Retention(RetentionPolicy.SOURCE)
+ public @interface StorageStatus {}
+
+ /** Current storage is OK to record a program. */
+ public static final int STORAGE_STATUS_OK = 0;
+
+ /** Current storage's total capacity is smaller than DVR requirement. */
+ public static final int STORAGE_STATUS_TOTAL_CAPACITY_TOO_SMALL = 1;
+
+ /** Current storage's free space is insufficient to record programs. */
+ public static final int STORAGE_STATUS_FREE_SPACE_INSUFFICIENT = 2;
+
+ /** Current storage is missing. */
+ public static final int STORAGE_STATUS_MISSING = 3;
+
+ private final Context mContext;
+ private final Set<OnStorageMountChangedListener> mOnStorageMountChangedListeners =
+ new CopyOnWriteArraySet<>();
+ private final boolean mRunningInMainProcess;
+ private MountedStorageStatus mMountedStorageStatus;
+ private boolean mStorageValid;
+ private CleanUpDbTask mCleanUpDbTask;
+
+ private class MountedStorageStatus {
+ private final boolean mStorageMounted;
+ private final File mStorageMountedDir;
+ private final long mStorageMountedCapacity;
+
+ private MountedStorageStatus(boolean mounted, File mountedDir, long capacity) {
+ mStorageMounted = mounted;
+ mStorageMountedDir = mountedDir;
+ mStorageMountedCapacity = capacity;
+ }
+
+ private boolean isValidForDvr() {
+ return mStorageMounted && mStorageMountedCapacity >= MIN_STORAGE_SIZE_FOR_DVR_IN_BYTES;
+ }
+
+ @Override
+ public boolean equals(Object other) {
+ if (!(other instanceof MountedStorageStatus)) {
+ return false;
+ }
+ MountedStorageStatus status = (MountedStorageStatus) other;
+ return mStorageMounted == status.mStorageMounted
+ && Objects.equals(mStorageMountedDir, status.mStorageMountedDir)
+ && mStorageMountedCapacity == status.mStorageMountedCapacity;
+ }
+ }
+
+ public interface OnStorageMountChangedListener {
+
+ /**
+ * Listener for DVR storage status change.
+ *
+ * @param storageMounted {@code true} when DVR possible storage is mounted, {@code false}
+ * otherwise.
+ */
+ void onStorageMountChanged(boolean storageMounted);
+ }
+
+ private final class StorageStatusBroadcastReceiver extends BroadcastReceiver {
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ MountedStorageStatus result = getStorageStatusInternal();
+ if (mMountedStorageStatus.equals(result)) {
+ return;
+ }
+ mMountedStorageStatus = result;
+ if (result.mStorageMounted && mRunningInMainProcess) {
+ // Cleans up DB in LC process.
+ // Tuner process is not always on.
+ if (mCleanUpDbTask != null) {
+ mCleanUpDbTask.cancel(true);
+ }
+ mCleanUpDbTask = new CleanUpDbTask();
+ mCleanUpDbTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
+ }
+ boolean valid = result.isValidForDvr();
+ if (valid == mStorageValid) {
+ return;
+ }
+ mStorageValid = valid;
+ for (OnStorageMountChangedListener l : mOnStorageMountChangedListeners) {
+ l.onStorageMountChanged(valid);
+ }
+ }
+ }
+
+ /**
+ * Creates DvrStorageStatusManager.
+ *
+ * @param context {@link Context}
+ */
+ public DvrStorageStatusManager(final Context context, boolean runningInMainProcess) {
mContext = context;
+ mRunningInMainProcess = runningInMainProcess;
+ mMountedStorageStatus = getStorageStatusInternal();
+ mStorageValid = mMountedStorageStatus.isValidForDvr();
+ IntentFilter filter = new IntentFilter();
+ filter.addAction(Intent.ACTION_MEDIA_MOUNTED);
+ filter.addAction(Intent.ACTION_MEDIA_UNMOUNTED);
+ filter.addAction(Intent.ACTION_MEDIA_EJECT);
+ filter.addAction(Intent.ACTION_MEDIA_REMOVED);
+ filter.addAction(Intent.ACTION_MEDIA_BAD_REMOVAL);
+ filter.addDataScheme(ContentResolver.SCHEME_FILE);
+ mContext.registerReceiver(new StorageStatusBroadcastReceiver(), filter);
+ }
+
+ /**
+ * Adds the listener for receiving storage status change.
+ *
+ * @param listener
+ */
+ public void addListener(OnStorageMountChangedListener listener) {
+ mOnStorageMountChangedListeners.add(listener);
+ }
+
+ /** Removes the current listener. */
+ public void removeListener(OnStorageMountChangedListener listener) {
+ mOnStorageMountChangedListeners.remove(listener);
+ }
+
+ /** Returns true if a storage is mounted. */
+ public boolean isStorageMounted() {
+ return mMountedStorageStatus.mStorageMounted;
+ }
+
+ /** Returns the path to DVR recording data directory. This can take for a while sometimes. */
+ @WorkerThread
+ public File getRecordingRootDataDirectory() {
+ SoftPreconditions.checkState(Looper.myLooper() != Looper.getMainLooper());
+ if (mMountedStorageStatus.mStorageMountedDir == null) {
+ return null;
+ }
+ File root = mContext.getExternalFilesDir(null);
+ String rootPath;
+ try {
+ rootPath = root != null ? root.getCanonicalPath() : null;
+ } catch (IOException | SecurityException e) {
+ return null;
+ }
+ return rootPath == null ? null : new File(rootPath + RECORDING_DATA_SUB_PATH);
+ }
+
+ /**
+ * Returns the current storage status for DVR recordings.
+ *
+ * @return {@link StorageStatus}
+ */
+ @AnyThread
+ public @StorageStatus int getDvrStorageStatus() {
+ MountedStorageStatus status = mMountedStorageStatus;
+ if (status.mStorageMountedDir == null) {
+ return STORAGE_STATUS_MISSING;
+ }
+ if (CommonFeatures.FORCE_RECORDING_UNTIL_NO_SPACE.isEnabled(mContext)) {
+ return STORAGE_STATUS_OK;
+ }
+ if (status.mStorageMountedCapacity < MIN_STORAGE_SIZE_FOR_DVR_IN_BYTES) {
+ return STORAGE_STATUS_TOTAL_CAPACITY_TOO_SMALL;
+ }
+ try {
+ StatFs statFs = new StatFs(status.mStorageMountedDir.toString());
+ if (statFs.getAvailableBytes() < MIN_FREE_STORAGE_SIZE_FOR_DVR_IN_BYTES) {
+ return STORAGE_STATUS_FREE_SPACE_INSUFFICIENT;
+ }
+ } catch (IllegalArgumentException e) {
+ // In rare cases, storage status change was not notified yet.
+ SoftPreconditions.checkState(false);
+ return STORAGE_STATUS_FREE_SPACE_INSUFFICIENT;
+ }
+ return STORAGE_STATUS_OK;
}
- @Override
- protected void cleanUpDbIfNeeded() {
- if (mCleanUpDbTask != null) {
- mCleanUpDbTask.cancel(true);
+ /**
+ * Returns whether the storage has sufficient storage.
+ *
+ * @return {@code true} when there is sufficient storage, {@code false} otherwise
+ */
+ public boolean isStorageSufficient() {
+ return getDvrStorageStatus() == STORAGE_STATUS_OK;
+ }
+
+ private MountedStorageStatus getStorageStatusInternal() {
+ boolean storageMounted =
+ Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED);
+ File storageMountedDir = storageMounted ? Environment.getExternalStorageDirectory() : null;
+ storageMounted = storageMounted && storageMountedDir != null;
+ long storageMountedCapacity = 0L;
+ if (storageMounted) {
+ try {
+ StatFs statFs = new StatFs(storageMountedDir.toString());
+ storageMountedCapacity = statFs.getTotalBytes();
+ } catch (IllegalArgumentException e) {
+ Log.e(TAG, "Storage mount status was changed.");
+ storageMounted = false;
+ storageMountedDir = null;
+ }
}
- mCleanUpDbTask = new CleanUpDbTask();
- mCleanUpDbTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
+ return new MountedStorageStatus(storageMounted, storageMountedDir, storageMountedCapacity);
}
private class CleanUpDbTask extends AsyncTask<Void, Void, Boolean> {
@@ -72,11 +288,11 @@ public class DvrStorageStatusManager extends RecordingStorageStatusManager {
@Override
protected Boolean doInBackground(Void... params) {
- @StorageStatus int storageStatus = getDvrStorageStatus();
- if (storageStatus == STORAGE_STATUS_MISSING) {
+ @DvrStorageStatusManager.StorageStatus int storageStatus = getDvrStorageStatus();
+ if (storageStatus == DvrStorageStatusManager.STORAGE_STATUS_MISSING) {
return null;
}
- if (storageStatus == STORAGE_STATUS_TOTAL_CAPACITY_TOO_SMALL) {
+ if (storageStatus == DvrStorageStatusManager.STORAGE_STATUS_TOTAL_CAPACITY_TOO_SMALL) {
return true;
}
List<ContentProviderOperation> ops = getDeleteOps();
@@ -94,7 +310,7 @@ public class DvrStorageStatusManager extends RecordingStorageStatusManager {
ArrayList<ContentProviderOperation> batchOps =
new ArrayList<>(ops.subList(i, toIndex));
try {
- mContext.getContentResolver().applyBatch(TvContractCompat.AUTHORITY, batchOps);
+ mContext.getContentResolver().applyBatch(TvContract.AUTHORITY, batchOps);
} catch (RemoteException | OperationApplicationException e) {
Log.e(TAG, "Failed to clean up RecordedPrograms.", e);
}
@@ -105,16 +321,16 @@ public class DvrStorageStatusManager extends RecordingStorageStatusManager {
@Override
protected void onPostExecute(Boolean forgetStorage) {
if (forgetStorage != null && forgetStorage == true) {
- DvrManager dvrManager = TvSingletons.getSingletons(mContext).getDvrManager();
+ DvrManager dvrManager = TvApplication.getSingletons(mContext).getDvrManager();
TvInputManagerHelper tvInputManagerHelper =
- TvSingletons.getSingletons(mContext).getTvInputManagerHelper();
+ TvApplication.getSingletons(mContext).getTvInputManagerHelper();
List<TvInputInfo> tvInputInfoList =
tvInputManagerHelper.getTvInputInfos(true, false);
if (tvInputInfoList == null || tvInputInfoList.isEmpty()) {
return;
}
for (TvInputInfo info : tvInputInfoList) {
- if (CommonUtils.isBundledInput(info.getId())) {
+ if (Utils.isBundledInput(info.getId())) {
dvrManager.forgetStorage(info.getId());
}
}
@@ -129,7 +345,7 @@ public class DvrStorageStatusManager extends RecordingStorageStatusManager {
try (Cursor c =
mContentResolver.query(
- TvContractCompat.RecordedPrograms.CONTENT_URI,
+ TvContract.RecordedPrograms.CONTENT_URI,
PROJECTION,
null,
null,
@@ -138,8 +354,10 @@ public class DvrStorageStatusManager extends RecordingStorageStatusManager {
return null;
}
while (c.moveToNext()) {
- @StorageStatus int storageStatus = getDvrStorageStatus();
- if (isCancelled() || storageStatus == STORAGE_STATUS_MISSING) {
+ @DvrStorageStatusManager.StorageStatus
+ int storageStatus = getDvrStorageStatus();
+ if (isCancelled()
+ || storageStatus == DvrStorageStatusManager.STORAGE_STATUS_MISSING) {
ops.clear();
break;
}
@@ -150,7 +368,7 @@ public class DvrStorageStatusManager extends RecordingStorageStatusManager {
continue;
}
Uri dataUri = Uri.parse(dataUriString);
- if (!CommonUtils.isInBundledPackageSet(packageName)
+ if (!Utils.isInBundledPackageSet(packageName)
|| dataUri == null
|| dataUri.getPath() == null
|| !ContentResolver.SCHEME_FILE.equals(dataUri.getScheme())) {
@@ -160,7 +378,7 @@ public class DvrStorageStatusManager extends RecordingStorageStatusManager {
if (!recordedProgramDir.exists()) {
ops.add(
ContentProviderOperation.newDelete(
- TvContractCompat.buildRecordedProgramUri(
+ TvContract.buildRecordedProgramUri(
Long.parseLong(id)))
.build());
}
diff --git a/src/com/android/tv/dvr/DvrWatchedPositionManager.java b/src/com/android/tv/dvr/DvrWatchedPositionManager.java
index 8616962f..7da2bfc9 100644
--- a/src/com/android/tv/dvr/DvrWatchedPositionManager.java
+++ b/src/com/android/tv/dvr/DvrWatchedPositionManager.java
@@ -20,7 +20,7 @@ import android.content.Context;
import android.content.SharedPreferences;
import android.media.tv.TvInputManager;
import android.support.annotation.IntDef;
-import com.android.tv.common.util.SharedPreferencesUtils;
+import com.android.tv.common.SharedPreferencesUtils;
import com.android.tv.dvr.data.RecordedProgram;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
diff --git a/src/com/android/tv/dvr/data/RecordedProgram.java b/src/com/android/tv/dvr/data/RecordedProgram.java
index e1fbca8c..18841ae5 100644
--- a/src/com/android/tv/dvr/data/RecordedProgram.java
+++ b/src/com/android/tv/dvr/data/RecordedProgram.java
@@ -30,10 +30,10 @@ import android.support.annotation.Nullable;
import android.text.TextUtils;
import com.android.tv.common.R;
import com.android.tv.common.TvContentRatingCache;
-import com.android.tv.common.util.CommonUtils;
import com.android.tv.data.BaseProgram;
import com.android.tv.data.GenreItems;
import com.android.tv.data.InternalDataUtils;
+import com.android.tv.util.Utils;
import java.util.Arrays;
import java.util.Collection;
import java.util.Comparator;
@@ -118,7 +118,7 @@ public class RecordedProgram extends BaseProgram {
.setInternalProviderFlag3(cursor.getInt(index++))
.setInternalProviderFlag4(cursor.getInt(index++))
.setVersionNumber(cursor.getInt(index++));
- if (CommonUtils.isInBundledPackageSet(builder.mPackageName)) {
+ if (Utils.isInBundledPackageSet(builder.mPackageName)) {
InternalDataUtils.deserializeInternalProviderData(cursor.getBlob(index), builder);
}
return builder.build();
diff --git a/src/com/android/tv/dvr/data/ScheduledRecording.java b/src/com/android/tv/dvr/data/ScheduledRecording.java
index aa1dfc72..7de37ebc 100644
--- a/src/com/android/tv/dvr/data/ScheduledRecording.java
+++ b/src/com/android/tv/dvr/data/ScheduledRecording.java
@@ -16,25 +16,23 @@
package com.android.tv.dvr.data;
-import android.annotation.TargetApi;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
-import android.os.Build;
import android.os.Parcel;
import android.os.Parcelable;
import android.support.annotation.IntDef;
import android.text.TextUtils;
import android.util.Range;
import com.android.tv.R;
-import com.android.tv.TvSingletons;
+import com.android.tv.TvApplication;
import com.android.tv.common.SoftPreconditions;
-import com.android.tv.common.util.CommonUtils;
import com.android.tv.data.Channel;
import com.android.tv.data.Program;
import com.android.tv.dvr.DvrScheduleManager;
import com.android.tv.dvr.provider.DvrContract.Schedules;
import com.android.tv.util.CompositeComparator;
+import com.android.tv.util.Utils;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.util.Collection;
@@ -42,8 +40,6 @@ import java.util.Comparator;
import java.util.Objects;
/** A data class for one recording contents. */
-@TargetApi(Build.VERSION_CODES.N)
-@SuppressWarnings("AndroidApiChecker") // TODO(b/32513850) remove when error prone is updated
public final class ScheduledRecording implements Parcelable {
private static final String TAG = "ScheduledRecording";
@@ -659,7 +655,7 @@ public final class ScheduledRecording implements Parcelable {
return mProgramTitle;
}
Channel channel =
- TvSingletons.getSingletons(context).getChannelDataManager().getChannel(mChannelId);
+ TvApplication.getSingletons(context).getChannelDataManager().getChannel(mChannelId);
return channel != null
? channel.getDisplayName()
: context.getString(R.string.no_program_information);
@@ -673,7 +669,7 @@ public final class ScheduledRecording implements Parcelable {
case Schedules.TYPE_PROGRAM:
return TYPE_PROGRAM;
default:
- SoftPreconditions.checkArgument(false, TAG, "Unknown recording type %s", type);
+ SoftPreconditions.checkArgument(false, TAG, "Unknown recording type " + type);
return TYPE_TIMED;
}
}
@@ -686,7 +682,7 @@ public final class ScheduledRecording implements Parcelable {
case TYPE_PROGRAM:
return Schedules.TYPE_PROGRAM;
default:
- SoftPreconditions.checkArgument(false, TAG, "Unknown recording type %s", type);
+ SoftPreconditions.checkArgument(false, TAG, "Unknown recording type " + type);
return Schedules.TYPE_TIMED;
}
}
@@ -712,7 +708,7 @@ public final class ScheduledRecording implements Parcelable {
case Schedules.STATE_RECORDING_CANCELED:
return STATE_RECORDING_CANCELED;
default:
- SoftPreconditions.checkArgument(false, TAG, "Unknown recording state %s", state);
+ SoftPreconditions.checkArgument(false, TAG, "Unknown recording state" + state);
return STATE_RECORDING_NOT_STARTED;
}
}
@@ -738,7 +734,7 @@ public final class ScheduledRecording implements Parcelable {
case STATE_RECORDING_CANCELED:
return Schedules.STATE_RECORDING_CANCELED;
default:
- SoftPreconditions.checkArgument(false, TAG, "Unknown recording state %s", state);
+ SoftPreconditions.checkArgument(false, TAG, "Unknown recording state" + state);
return Schedules.STATE_RECORDING_NOT_STARTED;
}
}
@@ -769,12 +765,12 @@ public final class ScheduledRecording implements Parcelable {
+ ",type="
+ mType
+ ",startTime="
- + CommonUtils.toIsoDateTimeString(mStartTimeMs)
+ + Utils.toIsoDateTimeString(mStartTimeMs)
+ "("
+ mStartTimeMs
+ ")"
+ ",endTime="
- + CommonUtils.toIsoDateTimeString(mEndTimeMs)
+ + Utils.toIsoDateTimeString(mEndTimeMs)
+ "("
+ mEndTimeMs
+ ")"
diff --git a/src/com/android/tv/dvr/data/SeriesRecording.java b/src/com/android/tv/dvr/data/SeriesRecording.java
index 96b3425a..1fd1cea3 100644
--- a/src/com/android/tv/dvr/data/SeriesRecording.java
+++ b/src/com/android/tv/dvr/data/SeriesRecording.java
@@ -568,7 +568,7 @@ public class SeriesRecording implements Parcelable {
mLongDescription,
mSeriesId,
mChannelOption,
- Arrays.hashCode(mCanonicalGenreIds),
+ mCanonicalGenreIds,
mPosterUri,
mPhotoUri,
mState);
diff --git a/src/com/android/tv/dvr/provider/AsyncDvrDbTask.java b/src/com/android/tv/dvr/provider/AsyncDvrDbTask.java
index db18e609..ad00bec8 100644
--- a/src/com/android/tv/dvr/provider/AsyncDvrDbTask.java
+++ b/src/com/android/tv/dvr/provider/AsyncDvrDbTask.java
@@ -20,18 +20,17 @@ import android.content.Context;
import android.database.Cursor;
import android.os.AsyncTask;
import android.support.annotation.Nullable;
-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.NamedThreadFactory;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
/** {@link AsyncTask} that defaults to executing on its own single threaded Executor Service. */
-@SuppressWarnings("TryWithResources") // TODO(b/62143348): remove when error prone check fixed
public abstract class AsyncDvrDbTask<Params, Progress, Result>
extends AsyncTask<Params, Progress, Result> {
private static final NamedThreadFactory THREAD_FACTORY =
diff --git a/src/com/android/tv/dvr/provider/DvrDatabaseHelper.java b/src/com/android/tv/dvr/provider/DvrDatabaseHelper.java
index 0fb96d1b..fb793a0e 100644
--- a/src/com/android/tv/dvr/provider/DvrDatabaseHelper.java
+++ b/src/com/android/tv/dvr/provider/DvrDatabaseHelper.java
@@ -34,7 +34,7 @@ import com.android.tv.dvr.provider.DvrContract.SeriesRecordings;
/** A data class for one recorded contents. */
public class DvrDatabaseHelper extends SQLiteOpenHelper {
private static final String TAG = "DvrDatabaseHelper";
- private static final boolean DEBUG = false;
+ private static final boolean DEBUG = true;
private static final int DATABASE_VERSION = 17;
private static final String DB_NAME = "dvr.db";
diff --git a/src/com/android/tv/dvr/provider/DvrDbSync.java b/src/com/android/tv/dvr/provider/DvrDbSync.java
index 8bd16221..1cdeef24 100644
--- a/src/com/android/tv/dvr/provider/DvrDbSync.java
+++ b/src/com/android/tv/dvr/provider/DvrDbSync.java
@@ -29,7 +29,7 @@ import android.os.Looper;
import android.support.annotation.MainThread;
import android.support.annotation.VisibleForTesting;
import android.util.Log;
-import com.android.tv.TvSingletons;
+import com.android.tv.TvApplication;
import com.android.tv.data.ChannelDataManager;
import com.android.tv.data.Program;
import com.android.tv.dvr.DvrDataManager.ScheduledRecordingListener;
@@ -140,8 +140,8 @@ public class DvrDbSync {
this(
context,
dataManager,
- TvSingletons.getSingletons(context).getChannelDataManager(),
- TvSingletons.getSingletons(context).getDvrManager(),
+ TvApplication.getSingletons(context).getChannelDataManager(),
+ TvApplication.getSingletons(context).getDvrManager(),
SeriesRecordingScheduler.getInstance(context));
}
diff --git a/src/com/android/tv/dvr/provider/EpisodicProgramLoadTask.java b/src/com/android/tv/dvr/provider/EpisodicProgramLoadTask.java
index 7cdc7b73..e9ca11e5 100644
--- a/src/com/android/tv/dvr/provider/EpisodicProgramLoadTask.java
+++ b/src/com/android/tv/dvr/provider/EpisodicProgramLoadTask.java
@@ -25,9 +25,8 @@ import android.net.Uri;
import android.os.Build;
import android.support.annotation.Nullable;
import android.support.annotation.WorkerThread;
-import com.android.tv.TvSingletons;
+import com.android.tv.TvApplication;
import com.android.tv.common.SoftPreconditions;
-import com.android.tv.common.util.PermissionUtils;
import com.android.tv.data.Program;
import com.android.tv.dvr.DvrDataManager;
import com.android.tv.dvr.data.ScheduledRecording;
@@ -35,6 +34,7 @@ import com.android.tv.dvr.data.SeasonEpisodeNumber;
import com.android.tv.dvr.data.SeriesRecording;
import com.android.tv.util.AsyncDbTask.AsyncProgramQueryTask;
import com.android.tv.util.AsyncDbTask.CursorFilter;
+import com.android.tv.util.PermissionUtils;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
@@ -91,7 +91,7 @@ public abstract class EpisodicProgramLoadTask {
*/
public EpisodicProgramLoadTask(Context context, Collection<SeriesRecording> seriesRecordings) {
mContext = context.getApplicationContext();
- mDataManager = TvSingletons.getSingletons(context).getDvrDataManager();
+ mDataManager = TvApplication.getSingletons(context).getDvrDataManager();
mSeriesRecordings.addAll(seriesRecordings);
}
diff --git a/src/com/android/tv/dvr/recorder/ConflictChecker.java b/src/com/android/tv/dvr/recorder/ConflictChecker.java
index f5bc7b9f..732815cd 100644
--- a/src/com/android/tv/dvr/recorder/ConflictChecker.java
+++ b/src/com/android/tv/dvr/recorder/ConflictChecker.java
@@ -27,10 +27,11 @@ import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.util.ArraySet;
import android.util.Log;
+import com.android.tv.ApplicationSingletons;
import com.android.tv.InputSessionManager;
import com.android.tv.InputSessionManager.OnTvViewChannelChangeListener;
import com.android.tv.MainActivity;
-import com.android.tv.TvSingletons;
+import com.android.tv.TvApplication;
import com.android.tv.common.WeakHandler;
import com.android.tv.data.Channel;
import com.android.tv.data.ChannelDataManager;
@@ -39,7 +40,6 @@ import com.android.tv.dvr.DvrScheduleManager;
import com.android.tv.dvr.data.ScheduledRecording;
import com.android.tv.dvr.ui.DvrUiHelper;
import java.util.ArrayList;
-import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -88,35 +88,21 @@ public class ConflictChecker {
new ScheduledRecordingListener() {
@Override
public void onScheduledRecordingAdded(ScheduledRecording... scheduledRecordings) {
- if (DEBUG) {
- Log.d(
- TAG,
- "onScheduledRecordingAdded: "
- + Arrays.toString(scheduledRecordings));
- }
+ if (DEBUG) Log.d(TAG, "onScheduledRecordingAdded: " + scheduledRecordings);
mHandler.sendEmptyMessage(MSG_CHECK_CONFLICT);
}
@Override
public void onScheduledRecordingRemoved(ScheduledRecording... scheduledRecordings) {
- if (DEBUG) {
- Log.d(
- TAG,
- "onScheduledRecordingRemoved: "
- + Arrays.toString(scheduledRecordings));
- }
+ if (DEBUG) Log.d(TAG, "onScheduledRecordingRemoved: " + scheduledRecordings);
mHandler.sendEmptyMessage(MSG_CHECK_CONFLICT);
}
@Override
public void onScheduledRecordingStatusChanged(
ScheduledRecording... scheduledRecordings) {
- if (DEBUG) {
- Log.d(
- TAG,
- "onScheduledRecordingStatusChanged: "
- + Arrays.toString(scheduledRecordings));
- }
+ if (DEBUG)
+ Log.d(TAG, "onScheduledRecordingStatusChanged: " + scheduledRecordings);
mHandler.sendEmptyMessage(MSG_CHECK_CONFLICT);
}
};
@@ -133,10 +119,10 @@ public class ConflictChecker {
public ConflictChecker(MainActivity mainActivity) {
mMainActivity = mainActivity;
- TvSingletons tvSingletons = TvSingletons.getSingletons(mainActivity);
- mChannelDataManager = tvSingletons.getChannelDataManager();
- mScheduleManager = tvSingletons.getDvrScheduleManager();
- mSessionManager = tvSingletons.getInputSessionManager();
+ ApplicationSingletons appSingletons = TvApplication.getSingletons(mainActivity);
+ mChannelDataManager = appSingletons.getChannelDataManager();
+ mScheduleManager = appSingletons.getDvrScheduleManager();
+ mSessionManager = appSingletons.getInputSessionManager();
}
/** Starts checking the conflict. */
diff --git a/src/com/android/tv/dvr/recorder/DvrRecordingService.java b/src/com/android/tv/dvr/recorder/DvrRecordingService.java
index 9fdbf062..3b21bab2 100644
--- a/src/com/android/tv/dvr/recorder/DvrRecordingService.java
+++ b/src/com/android/tv/dvr/recorder/DvrRecordingService.java
@@ -29,15 +29,15 @@ import android.support.annotation.Nullable;
import android.support.annotation.RequiresApi;
import android.support.annotation.VisibleForTesting;
import android.util.Log;
+import com.android.tv.ApplicationSingletons;
import com.android.tv.InputSessionManager;
import com.android.tv.InputSessionManager.OnRecordingSessionChangeListener;
import com.android.tv.R;
-import com.android.tv.Starter;
-import com.android.tv.TvSingletons;
+import com.android.tv.TvApplication;
import com.android.tv.common.SoftPreconditions;
import com.android.tv.common.feature.CommonFeatures;
-import com.android.tv.common.util.Clock;
import com.android.tv.dvr.WritableDvrDataManager;
+import com.android.tv.util.Clock;
import com.android.tv.util.RecurringRunner;
/**
@@ -114,12 +114,12 @@ public class DvrRecordingService extends Service {
@Override
public void onCreate() {
- Starter.start(this);
+ TvApplication.setCurrentRunningProcess(this, true);
if (DEBUG) Log.d(TAG, "onCreate");
super.onCreate();
SoftPreconditions.checkFeatureEnabled(this, CommonFeatures.DVR, TAG);
sInstance = this;
- TvSingletons singletons = TvSingletons.getSingletons(this);
+ ApplicationSingletons singletons = TvApplication.getSingletons(this);
WritableDvrDataManager dataManager =
(WritableDvrDataManager) singletons.getDvrDataManager();
mSessionManager = singletons.getInputSessionManager();
@@ -183,6 +183,7 @@ public class DvrRecordingService extends Service {
@VisibleForTesting
protected void startForegroundInternal(boolean hasUpcomingRecording) {
+ // STOPSHIP: Replace the content title with real UX strings
Notification.Builder builder =
new Notification.Builder(this)
.setContentTitle(mContentTitle)
@@ -203,6 +204,7 @@ public class DvrRecordingService extends Service {
private void createNotificationChannel() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
+ // STOPSHIP: Replace the channel name with real UX strings
mNotificationChannel =
new NotificationChannel(
DVR_NOTIFICATION_CHANNEL_ID,
diff --git a/src/com/android/tv/dvr/recorder/DvrStartRecordingReceiver.java b/src/com/android/tv/dvr/recorder/DvrStartRecordingReceiver.java
index bb5ea99d..f7521d6a 100644
--- a/src/com/android/tv/dvr/recorder/DvrStartRecordingReceiver.java
+++ b/src/com/android/tv/dvr/recorder/DvrStartRecordingReceiver.java
@@ -21,16 +21,15 @@ import android.content.Context;
import android.content.Intent;
import android.os.Build;
import android.support.annotation.RequiresApi;
-import com.android.tv.Starter;
-import com.android.tv.TvSingletons;
+import com.android.tv.TvApplication;
/** Signals the DVR to start recording shows <i>soon</i>. */
@RequiresApi(Build.VERSION_CODES.N)
public class DvrStartRecordingReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
- Starter.start(context);
- RecordingScheduler scheduler = TvSingletons.getSingletons(context).getRecordingScheduler();
+ TvApplication.setCurrentRunningProcess(context, true);
+ RecordingScheduler scheduler = TvApplication.getSingletons(context).getRecordingScheduler();
if (scheduler != null) {
scheduler.updateAndStartServiceIfNeeded();
}
diff --git a/src/com/android/tv/dvr/recorder/InputTaskScheduler.java b/src/com/android/tv/dvr/recorder/InputTaskScheduler.java
index 722e75fc..ff46c7c3 100644
--- a/src/com/android/tv/dvr/recorder/InputTaskScheduler.java
+++ b/src/com/android/tv/dvr/recorder/InputTaskScheduler.java
@@ -26,13 +26,13 @@ import android.util.ArrayMap;
import android.util.Log;
import android.util.LongSparseArray;
import com.android.tv.InputSessionManager;
-import com.android.tv.common.util.Clock;
import com.android.tv.data.Channel;
import com.android.tv.data.ChannelDataManager;
import com.android.tv.dvr.DvrDataManager;
import com.android.tv.dvr.DvrManager;
import com.android.tv.dvr.WritableDvrDataManager;
import com.android.tv.dvr.data.ScheduledRecording;
+import com.android.tv.util.Clock;
import com.android.tv.util.CompositeComparator;
import java.util.ArrayList;
import java.util.Collections;
@@ -443,7 +443,6 @@ public class InputTaskScheduler {
break;
case MSG_UPDATE_SCHEDULED_RECORDING:
handleUpdateSchedule((ScheduledRecording) msg.obj);
- break;
case MSG_BUILD_SCHEDULE:
handleBuildSchedule();
break;
diff --git a/src/com/android/tv/dvr/recorder/RecordingScheduler.java b/src/com/android/tv/dvr/recorder/RecordingScheduler.java
index d631d84f..ea54f8c3 100644
--- a/src/com/android/tv/dvr/recorder/RecordingScheduler.java
+++ b/src/com/android/tv/dvr/recorder/RecordingScheduler.java
@@ -31,10 +31,10 @@ import android.support.annotation.VisibleForTesting;
import android.util.ArrayMap;
import android.util.Log;
import android.util.Range;
+import com.android.tv.ApplicationSingletons;
import com.android.tv.InputSessionManager;
-import com.android.tv.TvSingletons;
+import com.android.tv.TvApplication;
import com.android.tv.common.SoftPreconditions;
-import com.android.tv.common.util.Clock;
import com.android.tv.data.ChannelDataManager;
import com.android.tv.data.ChannelDataManager.Listener;
import com.android.tv.dvr.DvrDataManager;
@@ -43,6 +43,7 @@ import com.android.tv.dvr.DvrDataManager.ScheduledRecordingListener;
import com.android.tv.dvr.DvrManager;
import com.android.tv.dvr.WritableDvrDataManager;
import com.android.tv.dvr.data.ScheduledRecording;
+import com.android.tv.util.Clock;
import com.android.tv.util.TvInputManagerHelper;
import com.android.tv.util.Utils;
import java.util.Arrays;
@@ -119,10 +120,10 @@ public class RecordingScheduler extends TvInputCallback implements ScheduledReco
*/
public static RecordingScheduler createScheduler(Context context) {
SoftPreconditions.checkState(
- TvSingletons.getSingletons(context).getRecordingScheduler() == null);
+ TvApplication.getSingletons(context).getRecordingScheduler() == null);
HandlerThread handlerThread = new HandlerThread(HANDLER_THREAD_NAME);
handlerThread.start();
- TvSingletons singletons = TvSingletons.getSingletons(context);
+ ApplicationSingletons singletons = TvApplication.getSingletons(context);
return new RecordingScheduler(
handlerThread.getLooper(),
singletons.getDvrManager(),
diff --git a/src/com/android/tv/dvr/recorder/RecordingTask.java b/src/com/android/tv/dvr/recorder/RecordingTask.java
index 4bd73e8a..85c6a0d5 100644
--- a/src/com/android/tv/dvr/recorder/RecordingTask.java
+++ b/src/com/android/tv/dvr/recorder/RecordingTask.java
@@ -33,15 +33,14 @@ import android.widget.Toast;
import com.android.tv.InputSessionManager;
import com.android.tv.InputSessionManager.RecordingSession;
import com.android.tv.R;
-import com.android.tv.TvSingletons;
+import com.android.tv.TvApplication;
import com.android.tv.common.SoftPreconditions;
-import com.android.tv.common.util.Clock;
-import com.android.tv.common.util.CommonUtils;
import com.android.tv.data.Channel;
import com.android.tv.dvr.DvrManager;
import com.android.tv.dvr.WritableDvrDataManager;
import com.android.tv.dvr.data.ScheduledRecording;
import com.android.tv.dvr.recorder.InputTaskScheduler.HandlerWrapper;
+import com.android.tv.util.Clock;
import com.android.tv.util.Utils;
import java.util.Comparator;
import java.util.concurrent.TimeUnit;
@@ -179,7 +178,7 @@ public class RecordingTask extends RecordingCallback
release();
return false;
default:
- SoftPreconditions.checkArgument(false, TAG, "unexpected message type %s", msg);
+ SoftPreconditions.checkArgument(false, TAG, "unexpected message type " + msg);
break;
}
return true;
@@ -254,7 +253,7 @@ public class RecordingTask extends RecordingCallback
new Runnable() {
@Override
public void run() {
- if (TvSingletons.getSingletons(mContext)
+ if (TvApplication.getSingletons(mContext)
.getMainActivityWrapper()
.isResumed()) {
ScheduledRecording scheduledRecording =
@@ -282,7 +281,7 @@ public class RecordingTask extends RecordingCallback
}
}
});
- // fall through
+ // Pass through
default:
failAndQuit();
break;
@@ -427,7 +426,7 @@ public class RecordingTask extends RecordingCallback
+ " with a delay of "
+ delay / 1000
+ " seconds to arrive at "
- + CommonUtils.toIsoDateTimeString(when));
+ + Utils.toIsoDateTimeString(when));
}
return mHandler.sendEmptyMessageDelayed(what, delay);
}
diff --git a/src/com/android/tv/dvr/recorder/ScheduledProgramReaper.java b/src/com/android/tv/dvr/recorder/ScheduledProgramReaper.java
index f30308f3..c59d4a93 100644
--- a/src/com/android/tv/dvr/recorder/ScheduledProgramReaper.java
+++ b/src/com/android/tv/dvr/recorder/ScheduledProgramReaper.java
@@ -18,10 +18,10 @@ package com.android.tv.dvr.recorder;
import android.support.annotation.MainThread;
import android.support.annotation.VisibleForTesting;
-import com.android.tv.common.util.Clock;
import com.android.tv.dvr.WritableDvrDataManager;
import com.android.tv.dvr.data.ScheduledRecording;
import com.android.tv.dvr.data.SeriesRecording;
+import com.android.tv.util.Clock;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.TimeUnit;
diff --git a/src/com/android/tv/dvr/recorder/SeriesRecordingScheduler.java b/src/com/android/tv/dvr/recorder/SeriesRecordingScheduler.java
index 4f7a789b..05f876ad 100644
--- a/src/com/android/tv/dvr/recorder/SeriesRecordingScheduler.java
+++ b/src/com/android/tv/dvr/recorder/SeriesRecordingScheduler.java
@@ -27,13 +27,13 @@ import android.text.TextUtils;
import android.util.ArraySet;
import android.util.Log;
import android.util.LongSparseArray;
-import com.android.tv.TvSingletons;
+import com.android.tv.ApplicationSingletons;
+import com.android.tv.TvApplication;
+import com.android.tv.common.CollectionUtils;
+import com.android.tv.common.SharedPreferencesUtils;
import com.android.tv.common.SoftPreconditions;
-import com.android.tv.common.experiments.Experiments;
-import com.android.tv.common.util.CollectionUtils;
-import com.android.tv.common.util.SharedPreferencesUtils;
import com.android.tv.data.Program;
-import com.android.tv.data.epg.EpgReader;
+import com.android.tv.data.epg.EpgFetcher;
import com.android.tv.dvr.DvrDataManager;
import com.android.tv.dvr.DvrDataManager.ScheduledRecordingListener;
import com.android.tv.dvr.DvrDataManager.SeriesRecordingListener;
@@ -44,6 +44,8 @@ import com.android.tv.dvr.data.SeasonEpisodeNumber;
import com.android.tv.dvr.data.SeriesInfo;
import com.android.tv.dvr.data.SeriesRecording;
import com.android.tv.dvr.provider.EpisodicProgramLoadTask;
+import com.android.tv.experiments.Experiments;
+import com.android.tv.util.LocationUtils;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
@@ -56,7 +58,6 @@ import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
-import javax.inject.Provider;
/**
* Creates the {@link com.android.tv.dvr.data.ScheduledRecording}s for the {@link
@@ -207,9 +208,9 @@ public class SeriesRecordingScheduler {
private SeriesRecordingScheduler(Context context) {
mContext = context.getApplicationContext();
- TvSingletons tvSingletons = TvSingletons.getSingletons(context);
- mDvrManager = tvSingletons.getDvrManager();
- mDataManager = (WritableDvrDataManager) tvSingletons.getDvrDataManager();
+ ApplicationSingletons appSingletons = TvApplication.getSingletons(context);
+ mDvrManager = appSingletons.getDvrManager();
+ mDataManager = (WritableDvrDataManager) appSingletons.getDvrDataManager();
mSharedPreferences =
context.getSharedPreferences(
SharedPreferencesUtils.SHARED_PREF_SERIES_RECORDINGS, Context.MODE_PRIVATE);
@@ -262,10 +263,7 @@ public class SeriesRecordingScheduler {
private void executeFetchSeriesInfoTask(SeriesRecording seriesRecording) {
if (Experiments.CLOUD_EPG.get()) {
- FetchSeriesInfoTask task =
- new FetchSeriesInfoTask(
- seriesRecording,
- TvSingletons.getSingletons(mContext).providesEpgReader());
+ FetchSeriesInfoTask task = new FetchSeriesInfoTask(seriesRecording);
task.execute();
mFetchSeriesInfoTasks.put(seriesRecording.getId(), task);
}
@@ -536,18 +534,16 @@ public class SeriesRecordingScheduler {
}
private class FetchSeriesInfoTask extends AsyncTask<Void, Void, SeriesInfo> {
- private final SeriesRecording mSeriesRecording;
- private final Provider<EpgReader> mEpgReaderProvider;
+ private SeriesRecording mSeriesRecording;
- FetchSeriesInfoTask(
- SeriesRecording seriesRecording, Provider<EpgReader> epgReaderProvider) {
+ FetchSeriesInfoTask(SeriesRecording seriesRecording) {
mSeriesRecording = seriesRecording;
- mEpgReaderProvider = epgReaderProvider;
}
@Override
protected SeriesInfo doInBackground(Void... voids) {
- return mEpgReaderProvider.get().getSeriesInfo(mSeriesRecording.getSeriesId());
+ return EpgFetcher.createEpgReader(mContext, LocationUtils.getCurrentCountry(mContext))
+ .getSeriesInfo(mSeriesRecording.getSeriesId());
}
@Override
diff --git a/src/com/android/tv/dvr/ui/DvrAlreadyRecordedFragment.java b/src/com/android/tv/dvr/ui/DvrAlreadyRecordedFragment.java
index fce94230..f4077e44 100644
--- a/src/com/android/tv/dvr/ui/DvrAlreadyRecordedFragment.java
+++ b/src/com/android/tv/dvr/ui/DvrAlreadyRecordedFragment.java
@@ -25,7 +25,7 @@ import android.support.annotation.NonNull;
import android.support.v17.leanback.widget.GuidanceStylist.Guidance;
import android.support.v17.leanback.widget.GuidedAction;
import com.android.tv.R;
-import com.android.tv.TvSingletons;
+import com.android.tv.TvApplication;
import com.android.tv.data.Program;
import com.android.tv.dvr.DvrManager;
import com.android.tv.dvr.data.RecordedProgram;
@@ -49,7 +49,7 @@ public class DvrAlreadyRecordedFragment extends DvrGuidedStepFragment {
public void onAttach(Context context) {
super.onAttach(context);
mProgram = getArguments().getParcelable(DvrHalfSizedDialogFragment.KEY_PROGRAM);
- DvrManager dvrManager = TvSingletons.getSingletons(context).getDvrManager();
+ DvrManager dvrManager = TvApplication.getSingletons(context).getDvrManager();
mDuplicate =
dvrManager.getRecordedProgram(
mProgram.getTitle(),
diff --git a/src/com/android/tv/dvr/ui/DvrAlreadyScheduledFragment.java b/src/com/android/tv/dvr/ui/DvrAlreadyScheduledFragment.java
index 456ad830..f27ec5c5 100644
--- a/src/com/android/tv/dvr/ui/DvrAlreadyScheduledFragment.java
+++ b/src/com/android/tv/dvr/ui/DvrAlreadyScheduledFragment.java
@@ -26,7 +26,7 @@ import android.support.v17.leanback.widget.GuidanceStylist.Guidance;
import android.support.v17.leanback.widget.GuidedAction;
import android.text.format.DateUtils;
import com.android.tv.R;
-import com.android.tv.TvSingletons;
+import com.android.tv.TvApplication;
import com.android.tv.data.Program;
import com.android.tv.dvr.DvrManager;
import com.android.tv.dvr.data.ScheduledRecording;
@@ -50,7 +50,7 @@ public class DvrAlreadyScheduledFragment extends DvrGuidedStepFragment {
public void onAttach(Context context) {
super.onAttach(context);
mProgram = getArguments().getParcelable(DvrHalfSizedDialogFragment.KEY_PROGRAM);
- DvrManager dvrManager = TvSingletons.getSingletons(context).getDvrManager();
+ DvrManager dvrManager = TvApplication.getSingletons(context).getDvrManager();
mDuplicate =
dvrManager.getScheduledRecording(
mProgram.getTitle(),
diff --git a/src/com/android/tv/dvr/ui/DvrChannelRecordDurationOptionFragment.java b/src/com/android/tv/dvr/ui/DvrChannelRecordDurationOptionFragment.java
index 24a6fcd3..e247b82b 100644
--- a/src/com/android/tv/dvr/ui/DvrChannelRecordDurationOptionFragment.java
+++ b/src/com/android/tv/dvr/ui/DvrChannelRecordDurationOptionFragment.java
@@ -22,7 +22,7 @@ import android.support.v17.leanback.app.GuidedStepFragment;
import android.support.v17.leanback.widget.GuidanceStylist.Guidance;
import android.support.v17.leanback.widget.GuidedAction;
import com.android.tv.R;
-import com.android.tv.TvSingletons;
+import com.android.tv.TvApplication;
import com.android.tv.common.SoftPreconditions;
import com.android.tv.data.Channel;
import com.android.tv.dvr.DvrManager;
@@ -42,7 +42,7 @@ public class DvrChannelRecordDurationOptionFragment extends DvrGuidedStepFragmen
if (args != null) {
long channelId = args.getLong(DvrHalfSizedDialogFragment.KEY_CHANNEL_ID);
mChannel =
- TvSingletons.getSingletons(getContext())
+ TvApplication.getSingletons(getContext())
.getChannelDataManager()
.getChannel(channelId);
}
@@ -90,7 +90,7 @@ public class DvrChannelRecordDurationOptionFragment extends DvrGuidedStepFragmen
@Override
public void onTrackedGuidedActionClicked(GuidedAction action) {
- DvrManager dvrManager = TvSingletons.getSingletons(getContext()).getDvrManager();
+ DvrManager dvrManager = TvApplication.getSingletons(getContext()).getDvrManager();
long duration = mDurations.get((int) action.getId());
long startTimeMs = System.currentTimeMillis();
long endTimeMs = System.currentTimeMillis() + duration;
diff --git a/src/com/android/tv/dvr/ui/DvrConflictFragment.java b/src/com/android/tv/dvr/ui/DvrConflictFragment.java
index 641f86c1..80011acd 100644
--- a/src/com/android/tv/dvr/ui/DvrConflictFragment.java
+++ b/src/com/android/tv/dvr/ui/DvrConflictFragment.java
@@ -29,7 +29,7 @@ import android.view.View;
import android.view.ViewGroup;
import com.android.tv.MainActivity;
import com.android.tv.R;
-import com.android.tv.TvSingletons;
+import com.android.tv.TvApplication;
import com.android.tv.common.SoftPreconditions;
import com.android.tv.data.Channel;
import com.android.tv.data.Program;
@@ -149,7 +149,7 @@ public abstract class DvrConflictFragment extends DvrGuidedStepFragment {
private String getScheduleTitle(ScheduledRecording schedule) {
if (schedule.getType() == ScheduledRecording.TYPE_TIMED) {
Channel channel =
- TvSingletons.getSingletons(getContext())
+ TvApplication.getSingletons(getContext())
.getChannelDataManager()
.getChannel(schedule.getChannelId());
if (channel != null) {
@@ -179,7 +179,7 @@ public abstract class DvrConflictFragment extends DvrGuidedStepFragment {
List<ScheduledRecording> conflicts = null;
if (input != null) {
conflicts =
- TvSingletons.getSingletons(getContext())
+ TvApplication.getSingletons(getContext())
.getDvrManager()
.getConflictingSchedules(mProgram);
}
@@ -227,7 +227,7 @@ public abstract class DvrConflictFragment extends DvrGuidedStepFragment {
Bundle args = getArguments();
long channelId = args.getLong(DvrHalfSizedDialogFragment.KEY_CHANNEL_ID);
mChannel =
- TvSingletons.getSingletons(getContext())
+ TvApplication.getSingletons(getContext())
.getChannelDataManager()
.getChannel(channelId);
SoftPreconditions.checkArgument(mChannel != null);
@@ -238,7 +238,7 @@ public abstract class DvrConflictFragment extends DvrGuidedStepFragment {
mStartTimeMs = args.getLong(DvrHalfSizedDialogFragment.KEY_START_TIME_MS);
mEndTimeMs = args.getLong(DvrHalfSizedDialogFragment.KEY_END_TIME_MS);
conflicts =
- TvSingletons.getSingletons(getContext())
+ TvApplication.getSingletons(getContext())
.getDvrManager()
.getConflictingSchedules(
mChannel.getId(), mStartTimeMs, mEndTimeMs);
diff --git a/src/com/android/tv/dvr/ui/DvrGuidedStepFragment.java b/src/com/android/tv/dvr/ui/DvrGuidedStepFragment.java
index 793bd01b..8524e1ea 100644
--- a/src/com/android/tv/dvr/ui/DvrGuidedStepFragment.java
+++ b/src/com/android/tv/dvr/ui/DvrGuidedStepFragment.java
@@ -26,13 +26,14 @@ import android.support.v17.leanback.widget.VerticalGridView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
+import com.android.tv.ApplicationSingletons;
import com.android.tv.MainActivity;
import com.android.tv.R;
-import com.android.tv.TvSingletons;
-import com.android.tv.common.recording.RecordingStorageStatusManager;
+import com.android.tv.TvApplication;
import com.android.tv.dialog.HalfSizedDialogFragment.OnActionClickListener;
import com.android.tv.dialog.SafeDismissDialogFragment;
import com.android.tv.dvr.DvrManager;
+import com.android.tv.dvr.DvrStorageStatusManager;
import java.util.List;
public abstract class DvrGuidedStepFragment extends TrackedGuidedStepFragment {
@@ -55,7 +56,7 @@ public abstract class DvrGuidedStepFragment extends TrackedGuidedStepFragment {
@Override
public void onAttach(Context context) {
super.onAttach(context);
- TvSingletons singletons = TvSingletons.getSingletons(context);
+ ApplicationSingletons singletons = TvApplication.getSingletons(context);
mDvrManager = singletons.getDvrManager();
}
@@ -114,8 +115,8 @@ public abstract class DvrGuidedStepFragment extends TrackedGuidedStepFragment {
}
/**
- * The inner guided step fragment for {@link
- * com.android.tv.dvr.ui.DvrHalfSizedDialogFragment .DvrNoFreeSpaceErrorDialogFragment}.
+ * The inner guided step fragment for {@link com.android.tv.dvr.ui.DvrHalfSizedDialogFragment
+ * .DvrNoFreeSpaceErrorDialogFragment}.
*/
public static class DvrNoFreeSpaceErrorFragment extends DvrGuidedStepFragment {
@Override
@@ -154,8 +155,7 @@ public abstract class DvrGuidedStepFragment extends TrackedGuidedStepFragment {
}
/**
- * The inner guided step fragment for {@link
- * com.android.tv.dvr.ui.DvrHalfSizedDialogFragment
+ * The inner guided step fragment for {@link com.android.tv.dvr.ui.DvrHalfSizedDialogFragment
* .DvrSmallSizedStorageErrorDialogFragment}.
*/
public static class DvrSmallSizedStorageErrorFragment extends DvrGuidedStepFragment {
@@ -166,7 +166,7 @@ public abstract class DvrGuidedStepFragment extends TrackedGuidedStepFragment {
getResources()
.getString(
R.string.dvr_error_small_sized_storage_description,
- RecordingStorageStatusManager.MIN_STORAGE_SIZE_FOR_DVR_IN_BYTES
+ DvrStorageStatusManager.MIN_STORAGE_SIZE_FOR_DVR_IN_BYTES
/ 1024
/ 1024
/ 1024);
diff --git a/src/com/android/tv/dvr/ui/DvrInsufficientSpaceErrorFragment.java b/src/com/android/tv/dvr/ui/DvrInsufficientSpaceErrorFragment.java
index 6fba4d98..ad26a5c2 100644
--- a/src/com/android/tv/dvr/ui/DvrInsufficientSpaceErrorFragment.java
+++ b/src/com/android/tv/dvr/ui/DvrInsufficientSpaceErrorFragment.java
@@ -23,7 +23,7 @@ import android.os.Bundle;
import android.support.v17.leanback.widget.GuidanceStylist.Guidance;
import android.support.v17.leanback.widget.GuidedAction;
import com.android.tv.R;
-import com.android.tv.TvSingletons;
+import com.android.tv.TvApplication;
import com.android.tv.common.SoftPreconditions;
import com.android.tv.dvr.ui.browse.DvrBrowseActivity;
import java.util.ArrayList;
@@ -102,7 +102,7 @@ public class DvrInsufficientSpaceErrorFragment extends DvrGuidedStepFragment {
Activity activity = getActivity();
actions.add(
new GuidedAction.Builder(activity).clickAction(GuidedAction.ACTION_ID_OK).build());
- if (TvSingletons.getSingletons(getContext()).getDvrManager().hasValidItems()) {
+ if (TvApplication.getSingletons(getContext()).getDvrManager().hasValidItems()) {
actions.add(
new GuidedAction.Builder(activity)
.id(ACTION_VIEW_RECENT_RECORDINGS)
diff --git a/src/com/android/tv/dvr/ui/DvrPrioritySettingsFragment.java b/src/com/android/tv/dvr/ui/DvrPrioritySettingsFragment.java
index 5bb97e90..03124260 100644
--- a/src/com/android/tv/dvr/ui/DvrPrioritySettingsFragment.java
+++ b/src/com/android/tv/dvr/ui/DvrPrioritySettingsFragment.java
@@ -16,11 +16,9 @@
package com.android.tv.dvr.ui;
-import android.annotation.TargetApi;
import android.app.FragmentManager;
import android.content.Context;
import android.graphics.Typeface;
-import android.os.Build;
import android.os.Bundle;
import android.support.v17.leanback.widget.GuidanceStylist.Guidance;
import android.support.v17.leanback.widget.GuidedAction;
@@ -29,7 +27,7 @@ import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;
import com.android.tv.R;
-import com.android.tv.TvSingletons;
+import com.android.tv.TvApplication;
import com.android.tv.dvr.DvrDataManager;
import com.android.tv.dvr.DvrManager;
import com.android.tv.dvr.DvrScheduleManager;
@@ -38,8 +36,6 @@ import java.util.ArrayList;
import java.util.List;
/** Fragment for DVR series recording settings. */
-@TargetApi(Build.VERSION_CODES.N)
-@SuppressWarnings("AndroidApiChecker") // TODO(b/32513850) remove when error prone is updated
public class DvrPrioritySettingsFragment extends TrackedGuidedStepFragment {
/** Name of series recording id starting the fragment. Type: Long */
public static final String COME_FROM_SERIES_RECORDING_ID = "series_recording_id";
@@ -66,7 +62,7 @@ public class DvrPrioritySettingsFragment extends TrackedGuidedStepFragment {
.setPriority(Long.MAX_VALUE)
.setId(ONE_TIME_RECORDING_ID)
.build());
- DvrDataManager dvrDataManager = TvSingletons.getSingletons(context).getDvrDataManager();
+ DvrDataManager dvrDataManager = TvApplication.getSingletons(context).getDvrDataManager();
long comeFromSeriesRecordingId = getArguments().getLong(COME_FROM_SERIES_RECORDING_ID, -1);
for (SeriesRecording series : dvrDataManager.getSeriesRecordings()) {
if (series.getState() == SeriesRecording.STATE_SERIES_NORMAL
@@ -131,7 +127,7 @@ public class DvrPrioritySettingsFragment extends TrackedGuidedStepFragment {
public void onTrackedGuidedActionClicked(GuidedAction action) {
long actionId = action.getId();
if (actionId == ACTION_ID_SAVE) {
- DvrManager dvrManager = TvSingletons.getSingletons(getContext()).getDvrManager();
+ DvrManager dvrManager = TvApplication.getSingletons(getContext()).getDvrManager();
int size = mSeriesRecordings.size();
for (int i = 1; i < size; ++i) {
long priority = DvrScheduleManager.suggestSeriesPriority(size - i);
diff --git a/src/com/android/tv/dvr/ui/DvrScheduleFragment.java b/src/com/android/tv/dvr/ui/DvrScheduleFragment.java
index 5251e140..854fea56 100644
--- a/src/com/android/tv/dvr/ui/DvrScheduleFragment.java
+++ b/src/com/android/tv/dvr/ui/DvrScheduleFragment.java
@@ -27,7 +27,7 @@ import android.support.v17.leanback.widget.GuidanceStylist.Guidance;
import android.support.v17.leanback.widget.GuidedAction;
import android.text.format.DateUtils;
import com.android.tv.R;
-import com.android.tv.TvSingletons;
+import com.android.tv.TvApplication;
import com.android.tv.common.SoftPreconditions;
import com.android.tv.data.Program;
import com.android.tv.dvr.DvrManager;
@@ -63,18 +63,16 @@ public class DvrScheduleFragment extends DvrGuidedStepFragment {
mProgram = args.getParcelable(DvrHalfSizedDialogFragment.KEY_PROGRAM);
mAddCurrentProgramToSeries = args.getBoolean(KEY_ADD_CURRENT_PROGRAM_TO_SERIES, false);
}
- DvrManager dvrManager = TvSingletons.getSingletons(getContext()).getDvrManager();
+ DvrManager dvrManager = TvApplication.getSingletons(getContext()).getDvrManager();
SoftPreconditions.checkArgument(
mProgram != null && mProgram.isEpisodic(),
TAG,
- "The program should be episodic: %s ",
- mProgram);
+ "The program should be episodic: " + mProgram);
SeriesRecording seriesRecording = dvrManager.getSeriesRecording(mProgram);
SoftPreconditions.checkArgument(
seriesRecording == null || seriesRecording.isStopped(),
TAG,
- "The series recording should be stopped or null: %s",
- seriesRecording);
+ "The series recording should be stopped or null: " + seriesRecording);
super.onCreate(savedInstanceState);
}
@@ -146,7 +144,7 @@ public class DvrScheduleFragment extends DvrGuidedStepFragment {
}
} else if (action.getId() == ACTION_RECORD_SERIES) {
SeriesRecording seriesRecording =
- TvSingletons.getSingletons(getContext())
+ TvApplication.getSingletons(getContext())
.getDvrDataManager()
.getSeriesRecording(mProgram.getSeriesId());
if (seriesRecording == null) {
@@ -161,7 +159,7 @@ public class DvrScheduleFragment extends DvrGuidedStepFragment {
seriesRecording =
SeriesRecording.buildFrom(seriesRecording)
.setPriority(
- TvSingletons.getSingletons(getContext())
+ TvApplication.getSingletons(getContext())
.getDvrScheduleManager()
.suggestNewSeriesPriority())
.build();
diff --git a/src/com/android/tv/dvr/ui/DvrSeriesDeletionActivity.java b/src/com/android/tv/dvr/ui/DvrSeriesDeletionActivity.java
index a2ae1f97..8b05cf1c 100644
--- a/src/com/android/tv/dvr/ui/DvrSeriesDeletionActivity.java
+++ b/src/com/android/tv/dvr/ui/DvrSeriesDeletionActivity.java
@@ -20,7 +20,7 @@ import android.app.Activity;
import android.os.Bundle;
import android.support.v17.leanback.app.GuidedStepFragment;
import com.android.tv.R;
-import com.android.tv.Starter;
+import com.android.tv.TvApplication;
/** Activity to show details view in DVR. */
public class DvrSeriesDeletionActivity extends Activity {
@@ -29,7 +29,7 @@ public class DvrSeriesDeletionActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
- Starter.start(this);
+ TvApplication.setCurrentRunningProcess(this, true);
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_dvr_series_settings);
// Check savedInstanceState to prevent that activity is being showed with animation.
diff --git a/src/com/android/tv/dvr/ui/DvrSeriesDeletionFragment.java b/src/com/android/tv/dvr/ui/DvrSeriesDeletionFragment.java
index 685f0a58..5f2c3582 100644
--- a/src/com/android/tv/dvr/ui/DvrSeriesDeletionFragment.java
+++ b/src/com/android/tv/dvr/ui/DvrSeriesDeletionFragment.java
@@ -27,7 +27,7 @@ import android.text.TextUtils;
import android.view.ViewGroup.LayoutParams;
import android.widget.Toast;
import com.android.tv.R;
-import com.android.tv.TvSingletons;
+import com.android.tv.TvApplication;
import com.android.tv.common.SoftPreconditions;
import com.android.tv.dvr.DvrDataManager;
import com.android.tv.dvr.DvrManager;
@@ -67,9 +67,9 @@ public class DvrSeriesDeletionFragment extends GuidedStepFragment {
mSeriesRecordingId =
getArguments().getLong(DvrSeriesDeletionActivity.SERIES_RECORDING_ID, -1);
SoftPreconditions.checkArgument(mSeriesRecordingId != -1);
- mDvrDataManager = TvSingletons.getSingletons(context).getDvrDataManager();
+ mDvrDataManager = TvApplication.getSingletons(context).getDvrDataManager();
mDvrWatchedPositionManager =
- TvSingletons.getSingletons(context).getDvrWatchedPositionManager();
+ TvApplication.getSingletons(context).getDvrWatchedPositionManager();
mRecordings = mDvrDataManager.getRecordedPrograms(mSeriesRecordingId);
mOneLineActionHeight =
getResources()
@@ -166,7 +166,7 @@ public class DvrSeriesDeletionFragment extends GuidedStepFragment {
}
}
if (!idsToDelete.isEmpty()) {
- DvrManager dvrManager = TvSingletons.getSingletons(getActivity()).getDvrManager();
+ DvrManager dvrManager = TvApplication.getSingletons(getActivity()).getDvrManager();
dvrManager.removeRecordedPrograms(idsToDelete);
}
Toast.makeText(
diff --git a/src/com/android/tv/dvr/ui/DvrSeriesScheduledFragment.java b/src/com/android/tv/dvr/ui/DvrSeriesScheduledFragment.java
index edb62c96..d600b54d 100644
--- a/src/com/android/tv/dvr/ui/DvrSeriesScheduledFragment.java
+++ b/src/com/android/tv/dvr/ui/DvrSeriesScheduledFragment.java
@@ -23,7 +23,7 @@ import android.os.Bundle;
import android.support.v17.leanback.widget.GuidanceStylist;
import android.support.v17.leanback.widget.GuidedAction;
import com.android.tv.R;
-import com.android.tv.TvSingletons;
+import com.android.tv.TvApplication;
import com.android.tv.data.Program;
import com.android.tv.dvr.DvrScheduleManager;
import com.android.tv.dvr.data.ScheduledRecording;
@@ -68,7 +68,7 @@ public class DvrSeriesScheduledFragment extends DvrGuidedStepFragment {
getArguments()
.getBoolean(DvrSeriesScheduledDialogActivity.SHOW_VIEW_SCHEDULE_OPTION);
mSeriesRecording =
- TvSingletons.getSingletons(context)
+ TvApplication.getSingletons(context)
.getDvrDataManager()
.getSeriesRecording(seriesRecordingId);
if (mSeriesRecording == null) {
@@ -78,12 +78,12 @@ public class DvrSeriesScheduledFragment extends DvrGuidedStepFragment {
mPrograms = (List<Program>) BigArguments.getArgument(SERIES_SCHEDULED_KEY_PROGRAMS);
BigArguments.reset();
mSchedulesAddedCount =
- TvSingletons.getSingletons(getContext())
+ TvApplication.getSingletons(getContext())
.getDvrManager()
.getAvailableScheduledRecording(mSeriesRecording.getId())
.size();
DvrScheduleManager dvrScheduleManager =
- TvSingletons.getSingletons(context).getDvrScheduleManager();
+ TvApplication.getSingletons(context).getDvrScheduleManager();
List<ScheduledRecording> conflictingRecordings =
dvrScheduleManager.getConflictingSchedules(mSeriesRecording);
mHasConflict = !conflictingRecordings.isEmpty();
diff --git a/src/com/android/tv/dvr/ui/DvrSeriesSettingsActivity.java b/src/com/android/tv/dvr/ui/DvrSeriesSettingsActivity.java
index 1a51cf46..117f72d8 100644
--- a/src/com/android/tv/dvr/ui/DvrSeriesSettingsActivity.java
+++ b/src/com/android/tv/dvr/ui/DvrSeriesSettingsActivity.java
@@ -21,7 +21,7 @@ import android.graphics.drawable.ColorDrawable;
import android.os.Bundle;
import android.support.v17.leanback.app.GuidedStepFragment;
import com.android.tv.R;
-import com.android.tv.Starter;
+import com.android.tv.TvApplication;
import com.android.tv.common.SoftPreconditions;
/** Activity to show details view in DVR. */
@@ -60,7 +60,7 @@ public class DvrSeriesSettingsActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
- Starter.start(this);
+ TvApplication.setCurrentRunningProcess(this, true);
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_dvr_series_settings);
long seriesRecordingId = getIntent().getLongExtra(SERIES_RECORDING_ID, -1);
diff --git a/src/com/android/tv/dvr/ui/DvrSeriesSettingsFragment.java b/src/com/android/tv/dvr/ui/DvrSeriesSettingsFragment.java
index 9383058a..c44e44a3 100644
--- a/src/com/android/tv/dvr/ui/DvrSeriesSettingsFragment.java
+++ b/src/com/android/tv/dvr/ui/DvrSeriesSettingsFragment.java
@@ -16,10 +16,8 @@
package com.android.tv.dvr.ui;
-import android.annotation.TargetApi;
import android.app.FragmentManager;
import android.content.Context;
-import android.os.Build;
import android.os.Bundle;
import android.support.v17.leanback.app.GuidedStepFragment;
import android.support.v17.leanback.widget.GuidanceStylist.Guidance;
@@ -27,7 +25,7 @@ import android.support.v17.leanback.widget.GuidedAction;
import android.support.v17.leanback.widget.GuidedActionsStylist;
import android.util.LongSparseArray;
import com.android.tv.R;
-import com.android.tv.TvSingletons;
+import com.android.tv.TvApplication;
import com.android.tv.data.Channel;
import com.android.tv.data.ChannelDataManager;
import com.android.tv.data.Program;
@@ -45,8 +43,6 @@ import java.util.List;
import java.util.Set;
/** Fragment for DVR series recording settings. */
-@TargetApi(Build.VERSION_CODES.N)
-@SuppressWarnings("AndroidApiChecker") // TODO(b/32513850) remove when error prone is updated
public class DvrSeriesSettingsFragment extends GuidedStepFragment
implements DvrDataManager.SeriesRecordingListener {
private static final String TAG = "SeriesSettingsFragment";
@@ -85,7 +81,7 @@ public class DvrSeriesSettingsFragment extends GuidedStepFragment
public void onAttach(Context context) {
super.onAttach(context);
mBackStackCount = getFragmentManager().getBackStackEntryCount();
- mDvrDataManager = TvSingletons.getSingletons(context).getDvrDataManager();
+ mDvrDataManager = TvApplication.getSingletons(context).getDvrDataManager();
mSeriesRecordingId = getArguments().getLong(DvrSeriesSettingsActivity.SERIES_RECORDING_ID);
mSeriesRecording = mDvrDataManager.getSeriesRecording(mSeriesRecordingId);
if (mSeriesRecording == null) {
@@ -106,7 +102,7 @@ public class DvrSeriesSettingsFragment extends GuidedStepFragment
}
Set<Long> channelIds = new HashSet<>();
ChannelDataManager channelDataManager =
- TvSingletons.getSingletons(context).getChannelDataManager();
+ TvApplication.getSingletons(context).getChannelDataManager();
for (Program program : mPrograms) {
long channelId = program.getChannelId();
if (channelIds.add(channelId)) {
@@ -212,7 +208,7 @@ public class DvrSeriesSettingsFragment extends GuidedStepFragment
if (mSelectedChannelId != Channel.INVALID_ID) {
builder.setChannelId(mSelectedChannelId);
}
- DvrManager dvrManager = TvSingletons.getSingletons(getContext()).getDvrManager();
+ DvrManager dvrManager = TvApplication.getSingletons(getContext()).getDvrManager();
dvrManager.updateSeriesRecording(builder.build());
if (mCurrentProgram != null
&& (mChannelOption == SeriesRecording.OPTION_CHANNEL_ALL
@@ -332,7 +328,7 @@ public class DvrSeriesSettingsFragment extends GuidedStepFragment
recordingCandidates)
.get(mSeriesRecordingId);
if (!programsToSchedule.isEmpty()) {
- TvSingletons.getSingletons(getContext())
+ TvApplication.getSingletons(getContext())
.getDvrManager()
.addScheduleToSeriesRecording(mSeriesRecording, programsToSchedule);
}
diff --git a/src/com/android/tv/dvr/ui/DvrStopRecordingFragment.java b/src/com/android/tv/dvr/ui/DvrStopRecordingFragment.java
index e93387ab..6f34e8a0 100644
--- a/src/com/android/tv/dvr/ui/DvrStopRecordingFragment.java
+++ b/src/com/android/tv/dvr/ui/DvrStopRecordingFragment.java
@@ -26,7 +26,7 @@ import android.support.annotation.NonNull;
import android.support.v17.leanback.widget.GuidanceStylist.Guidance;
import android.support.v17.leanback.widget.GuidedAction;
import com.android.tv.R;
-import com.android.tv.TvSingletons;
+import com.android.tv.TvApplication;
import com.android.tv.dvr.DvrDataManager;
import com.android.tv.dvr.DvrDataManager.ScheduledRecordingListener;
import com.android.tv.dvr.data.ScheduledRecording;
@@ -100,7 +100,7 @@ public class DvrStopRecordingFragment extends DvrGuidedStepFragment {
dismissDialog();
return;
}
- mDvrDataManager = TvSingletons.getSingletons(context).getDvrDataManager();
+ mDvrDataManager = TvApplication.getSingletons(context).getDvrDataManager();
mDvrDataManager.addScheduledRecordingListener(mScheduledRecordingListener);
mStopReason = args.getInt(KEY_REASON);
}
diff --git a/src/com/android/tv/dvr/ui/DvrStopSeriesRecordingFragment.java b/src/com/android/tv/dvr/ui/DvrStopSeriesRecordingFragment.java
index 99211fdb..3d84f48f 100644
--- a/src/com/android/tv/dvr/ui/DvrStopSeriesRecordingFragment.java
+++ b/src/com/android/tv/dvr/ui/DvrStopSeriesRecordingFragment.java
@@ -25,8 +25,9 @@ import android.support.v17.leanback.widget.GuidedAction;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
+import com.android.tv.ApplicationSingletons;
import com.android.tv.R;
-import com.android.tv.TvSingletons;
+import com.android.tv.TvApplication;
import com.android.tv.dvr.DvrDataManager;
import com.android.tv.dvr.DvrManager;
import com.android.tv.dvr.data.ScheduledRecording;
@@ -76,7 +77,7 @@ public class DvrStopSeriesRecordingFragment extends DvrGuidedStepFragment {
@Override
public void onTrackedGuidedActionClicked(GuidedAction action) {
if (action.getId() == ACTION_STOP_SERIES_RECORDING) {
- TvSingletons singletons = TvSingletons.getSingletons(getContext());
+ ApplicationSingletons singletons = TvApplication.getSingletons(getContext());
DvrManager dvrManager = singletons.getDvrManager();
DvrDataManager dataManager = singletons.getDvrDataManager();
List<ScheduledRecording> toDelete = new ArrayList<>();
diff --git a/src/com/android/tv/dvr/ui/DvrUiHelper.java b/src/com/android/tv/dvr/ui/DvrUiHelper.java
index 6373b30f..ae60f4a4 100644
--- a/src/com/android/tv/dvr/ui/DvrUiHelper.java
+++ b/src/com/android/tv/dvr/ui/DvrUiHelper.java
@@ -39,15 +39,14 @@ import android.widget.ImageView;
import android.widget.Toast;
import com.android.tv.MainActivity;
import com.android.tv.R;
-import com.android.tv.TvSingletons;
+import com.android.tv.TvApplication;
import com.android.tv.common.SoftPreconditions;
-import com.android.tv.common.recording.RecordingStorageStatusManager;
-import com.android.tv.common.util.CommonUtils;
import com.android.tv.data.BaseProgram;
import com.android.tv.data.Channel;
import com.android.tv.data.Program;
import com.android.tv.dialog.HalfSizedDialogFragment;
import com.android.tv.dvr.DvrManager;
+import com.android.tv.dvr.DvrStorageStatusManager;
import com.android.tv.dvr.data.RecordedProgram;
import com.android.tv.dvr.data.ScheduledRecording;
import com.android.tv.dvr.data.SeriesRecording;
@@ -92,17 +91,17 @@ public class DvrUiHelper {
*/
public static void checkStorageStatusAndShowErrorMessage(
Activity activity, String inputId, Runnable recordingRequestRunnable) {
- if (CommonUtils.isBundledInput(inputId)) {
- switch (TvSingletons.getSingletons(activity)
- .getRecordingStorageStatusManager()
+ if (Utils.isBundledInput(inputId)) {
+ switch (TvApplication.getSingletons(activity)
+ .getDvrStorageStatusManager()
.getDvrStorageStatus()) {
- case RecordingStorageStatusManager.STORAGE_STATUS_TOTAL_CAPACITY_TOO_SMALL:
+ case DvrStorageStatusManager.STORAGE_STATUS_TOTAL_CAPACITY_TOO_SMALL:
showDvrSmallSizedStorageErrorDialog(activity);
return;
- case RecordingStorageStatusManager.STORAGE_STATUS_MISSING:
+ case DvrStorageStatusManager.STORAGE_STATUS_MISSING:
showDvrMissingStorageErrorDialog(activity);
return;
- case RecordingStorageStatusManager.STORAGE_STATUS_FREE_SPACE_INSUFFICIENT:
+ case DvrStorageStatusManager.STORAGE_STATUS_FREE_SPACE_INSUFFICIENT:
showDvrNoFreeSpaceErrorDialog(activity, recordingRequestRunnable);
return;
}
@@ -282,7 +281,7 @@ public class DvrUiHelper {
if (program == null) {
return false;
}
- DvrManager dvrManager = TvSingletons.getSingletons(activity).getDvrManager();
+ DvrManager dvrManager = TvApplication.getSingletons(activity).getDvrManager();
if (!program.isEpisodic()) {
// One time recording.
dvrManager.addSchedule(program);
@@ -393,7 +392,7 @@ public class DvrUiHelper {
return;
}
List<ScheduledRecording> conflicts =
- TvSingletons.getSingletons(context)
+ TvApplication.getSingletons(context)
.getDvrManager()
.getConflictingSchedulesForTune(channel.getId());
startSchedulesActivity(context, getEarliestScheduledRecording(conflicts));
@@ -444,7 +443,7 @@ public class DvrUiHelper {
boolean showViewScheduleOptionInDialog,
Program currentProgram) {
SeriesRecording series =
- TvSingletons.getSingletons(context)
+ TvApplication.getSingletons(context)
.getDvrDataManager()
.getSeriesRecording(seriesRecordingId);
if (series == null) {
diff --git a/src/com/android/tv/dvr/ui/TrackedGuidedStepFragment.java b/src/com/android/tv/dvr/ui/TrackedGuidedStepFragment.java
index 0172f76f..0a24187a 100644
--- a/src/com/android/tv/dvr/ui/TrackedGuidedStepFragment.java
+++ b/src/com/android/tv/dvr/ui/TrackedGuidedStepFragment.java
@@ -19,7 +19,7 @@ package com.android.tv.dvr.ui;
import android.content.Context;
import android.support.v17.leanback.app.GuidedStepFragment;
import android.support.v17.leanback.widget.GuidedAction;
-import com.android.tv.TvSingletons;
+import com.android.tv.TvApplication;
import com.android.tv.analytics.Tracker;
/** A {@link GuidedStepFragment} with {@link Tracker} for analytics. */
@@ -29,7 +29,7 @@ public abstract class TrackedGuidedStepFragment extends GuidedStepFragment {
@Override
public void onAttach(Context context) {
super.onAttach(context);
- mTracker = TvSingletons.getSingletons(context).getAnalytics().getDefaultTracker();
+ mTracker = TvApplication.getSingletons(context).getAnalytics().getDefaultTracker();
}
@Override
diff --git a/src/com/android/tv/dvr/ui/browse/CurrentRecordingDetailsFragment.java b/src/com/android/tv/dvr/ui/browse/CurrentRecordingDetailsFragment.java
index 7e7e1f75..22246e5a 100644
--- a/src/com/android/tv/dvr/ui/browse/CurrentRecordingDetailsFragment.java
+++ b/src/com/android/tv/dvr/ui/browse/CurrentRecordingDetailsFragment.java
@@ -22,7 +22,7 @@ import android.support.v17.leanback.widget.Action;
import android.support.v17.leanback.widget.OnActionClickedListener;
import android.support.v17.leanback.widget.SparseArrayObjectAdapter;
import com.android.tv.R;
-import com.android.tv.TvSingletons;
+import com.android.tv.TvApplication;
import com.android.tv.dialog.HalfSizedDialogFragment;
import com.android.tv.dvr.DvrDataManager;
import com.android.tv.dvr.DvrManager;
@@ -66,7 +66,7 @@ public class CurrentRecordingDetailsFragment extends RecordingDetailsFragment {
@Override
public void onAttach(Context context) {
super.onAttach(context);
- mDvrDataManger = TvSingletons.getSingletons(context).getDvrDataManager();
+ mDvrDataManger = TvApplication.getSingletons(context).getDvrDataManager();
mDvrDataManger.addScheduledRecordingListener(mScheduledRecordingListener);
}
@@ -100,7 +100,7 @@ public class CurrentRecordingDetailsFragment extends RecordingDetailsFragment {
public void onActionClick(long actionId) {
if (actionId == DvrStopRecordingFragment.ACTION_STOP) {
DvrManager dvrManager =
- TvSingletons.getSingletons(getContext())
+ TvApplication.getSingletons(getContext())
.getDvrManager();
dvrManager.stopRecording(getRecording());
getActivity().finish();
diff --git a/src/com/android/tv/dvr/ui/browse/DetailsContent.java b/src/com/android/tv/dvr/ui/browse/DetailsContent.java
index 70903373..9f588aa3 100644
--- a/src/com/android/tv/dvr/ui/browse/DetailsContent.java
+++ b/src/com/android/tv/dvr/ui/browse/DetailsContent.java
@@ -21,7 +21,7 @@ import android.media.tv.TvContract;
import android.support.annotation.Nullable;
import android.text.TextUtils;
import com.android.tv.R;
-import com.android.tv.TvSingletons;
+import com.android.tv.TvApplication;
import com.android.tv.data.Channel;
import com.android.tv.dvr.data.RecordedProgram;
import com.android.tv.dvr.data.ScheduledRecording;
@@ -76,7 +76,7 @@ class DetailsContent {
static DetailsContent createFromScheduledRecording(
Context context, ScheduledRecording scheduledRecording) {
Channel channel =
- TvSingletons.getSingletons(context)
+ TvApplication.getSingletons(context)
.getChannelDataManager()
.getChannel(scheduledRecording.getChannelId());
String description =
@@ -278,7 +278,7 @@ class DetailsContent {
/** Builds details content. */
public DetailsContent build(Context context) {
Channel channel =
- TvSingletons.getSingletons(context)
+ TvApplication.getSingletons(context)
.getChannelDataManager()
.getChannel(mChannelId);
if (mDetailsContent.mTitle == null) {
diff --git a/src/com/android/tv/dvr/ui/browse/DetailsViewBackgroundHelper.java b/src/com/android/tv/dvr/ui/browse/DetailsViewBackgroundHelper.java
index 849360b8..5a058454 100644
--- a/src/com/android/tv/dvr/ui/browse/DetailsViewBackgroundHelper.java
+++ b/src/com/android/tv/dvr/ui/browse/DetailsViewBackgroundHelper.java
@@ -57,7 +57,6 @@ class DetailsViewBackgroundHelper {
public DetailsViewBackgroundHelper(Activity activity) {
mBackgroundManager = BackgroundManager.getInstance(activity);
mBackgroundManager.attach(activity.getWindow());
- mBackgroundManager.setAutoReleaseOnStop(false);
}
/** Sets the given image to background. */
diff --git a/src/com/android/tv/dvr/ui/browse/DvrBrowseActivity.java b/src/com/android/tv/dvr/ui/browse/DvrBrowseActivity.java
index 6cc1c7a1..f208b5e8 100644
--- a/src/com/android/tv/dvr/ui/browse/DvrBrowseActivity.java
+++ b/src/com/android/tv/dvr/ui/browse/DvrBrowseActivity.java
@@ -21,7 +21,7 @@ import android.content.Intent;
import android.media.tv.TvInputManager;
import android.os.Bundle;
import com.android.tv.R;
-import com.android.tv.Starter;
+import com.android.tv.TvApplication;
/** {@link android.app.Activity} for DVR UI. */
public class DvrBrowseActivity extends Activity {
@@ -29,7 +29,7 @@ public class DvrBrowseActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
- Starter.start(this);
+ TvApplication.setCurrentRunningProcess(this, true);
super.onCreate(savedInstanceState);
setContentView(R.layout.dvr_main);
mFragment = (DvrBrowseFragment) getFragmentManager().findFragmentById(R.id.dvr_frame);
diff --git a/src/com/android/tv/dvr/ui/browse/DvrBrowseFragment.java b/src/com/android/tv/dvr/ui/browse/DvrBrowseFragment.java
index 90326a8b..f8a54ef0 100644
--- a/src/com/android/tv/dvr/ui/browse/DvrBrowseFragment.java
+++ b/src/com/android/tv/dvr/ui/browse/DvrBrowseFragment.java
@@ -16,9 +16,7 @@
package com.android.tv.dvr.ui.browse;
-import android.annotation.TargetApi;
import android.content.Context;
-import android.os.Build;
import android.os.Bundle;
import android.os.Handler;
import android.support.v17.leanback.app.BrowseFragment;
@@ -31,8 +29,9 @@ import android.support.v17.leanback.widget.TitleViewAdapter;
import android.util.Log;
import android.view.View;
import android.view.ViewTreeObserver.OnGlobalFocusChangeListener;
+import com.android.tv.ApplicationSingletons;
import com.android.tv.R;
-import com.android.tv.TvSingletons;
+import com.android.tv.TvApplication;
import com.android.tv.data.GenreItems;
import com.android.tv.dvr.DvrDataManager;
import com.android.tv.dvr.DvrDataManager.OnDvrScheduleLoadFinishedListener;
@@ -52,8 +51,6 @@ import java.util.HashMap;
import java.util.List;
/** {@link BrowseFragment} for DVR functions. */
-@TargetApi(Build.VERSION_CODES.N)
-@SuppressWarnings("AndroidApiChecker") // TODO(b/32513850) remove when error prone is updated
public class DvrBrowseFragment extends BrowseFragment
implements RecordedProgramListener,
ScheduledRecordingListener,
@@ -171,7 +168,7 @@ public class DvrBrowseFragment extends BrowseFragment
if (DEBUG) Log.d(TAG, "onCreate");
super.onCreate(savedInstanceState);
Context context = getContext();
- TvSingletons singletons = TvSingletons.getSingletons(context);
+ ApplicationSingletons singletons = TvApplication.getSingletons(context);
mDvrDataManager = singletons.getDvrDataManager();
mDvrScheudleManager = singletons.getDvrScheduleManager();
mPresenterSelector =
diff --git a/src/com/android/tv/dvr/ui/browse/DvrDetailsActivity.java b/src/com/android/tv/dvr/ui/browse/DvrDetailsActivity.java
index 2659c3f3..a953f1d2 100644
--- a/src/com/android/tv/dvr/ui/browse/DvrDetailsActivity.java
+++ b/src/com/android/tv/dvr/ui/browse/DvrDetailsActivity.java
@@ -23,7 +23,7 @@ import android.transition.Transition;
import android.transition.Transition.TransitionListener;
import android.view.View;
import com.android.tv.R;
-import com.android.tv.Starter;
+import com.android.tv.TvApplication;
import com.android.tv.dialog.PinDialogFragment;
/** Activity to show details view in DVR. */
@@ -59,7 +59,7 @@ public class DvrDetailsActivity extends Activity implements PinDialogFragment.On
@Override
public void onCreate(Bundle savedInstanceState) {
- Starter.start(this);
+ TvApplication.setCurrentRunningProcess(this, true);
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_dvr_details);
long recordId = getIntent().getLongExtra(RECORDING_ID, -1);
diff --git a/src/com/android/tv/dvr/ui/browse/DvrDetailsFragment.java b/src/com/android/tv/dvr/ui/browse/DvrDetailsFragment.java
index 209fc6e1..f03f3f58 100644
--- a/src/com/android/tv/dvr/ui/browse/DvrDetailsFragment.java
+++ b/src/com/android/tv/dvr/ui/browse/DvrDetailsFragment.java
@@ -37,9 +37,8 @@ import android.support.v17.leanback.widget.VerticalGridView;
import android.text.TextUtils;
import android.widget.Toast;
import com.android.tv.R;
-import com.android.tv.TvSingletons;
+import com.android.tv.TvApplication;
import com.android.tv.common.SoftPreconditions;
-import com.android.tv.common.util.CommonUtils;
import com.android.tv.data.Channel;
import com.android.tv.data.ChannelDataManager;
import com.android.tv.dialog.PinDialogFragment;
@@ -49,6 +48,7 @@ import com.android.tv.dvr.ui.DvrUiHelper;
import com.android.tv.parental.ParentalControlSettings;
import com.android.tv.util.ImageLoader;
import com.android.tv.util.ToastUtils;
+import com.android.tv.util.Utils;
import java.io.File;
abstract class DvrDetailsFragment extends DetailsFragment {
@@ -195,7 +195,7 @@ abstract class DvrDetailsFragment extends DetailsFragment {
}
protected void startPlayback(RecordedProgram recordedProgram, long seekTimeMs) {
- if (CommonUtils.isInBundledPackageSet(recordedProgram.getPackageName())
+ if (Utils.isInBundledPackageSet(recordedProgram.getPackageName())
&& !isDataUriAccessible(recordedProgram.getDataUri())) {
// Since cleaning RecordedProgram from forgotten storage will take some time,
// ignore playback until cleaning is finished.
@@ -207,7 +207,7 @@ abstract class DvrDetailsFragment extends DetailsFragment {
}
long programId = recordedProgram.getId();
ParentalControlSettings parental =
- TvSingletons.getSingletons(getActivity())
+ TvApplication.getSingletons(getActivity())
.getTvInputManagerHelper()
.getParentalControlSettings();
if (!parental.isParentalControlsEnabled()) {
@@ -215,7 +215,7 @@ abstract class DvrDetailsFragment extends DetailsFragment {
return;
}
ChannelDataManager channelDataManager =
- TvSingletons.getSingletons(getActivity()).getChannelDataManager();
+ TvApplication.getSingletons(getActivity()).getChannelDataManager();
Channel channel = channelDataManager.getChannel(recordedProgram.getChannelId());
if (channel != null && channel.isLocked()) {
checkPinToPlay(recordedProgram, seekTimeMs);
diff --git a/src/com/android/tv/dvr/ui/browse/DvrItemPresenter.java b/src/com/android/tv/dvr/ui/browse/DvrItemPresenter.java
index 1e5f6935..4298d86a 100644
--- a/src/com/android/tv/dvr/ui/browse/DvrItemPresenter.java
+++ b/src/com/android/tv/dvr/ui/browse/DvrItemPresenter.java
@@ -31,9 +31,8 @@ import java.util.Set;
/**
* An abstract class to present DVR items in {@link RecordingCardView}, which is mainly used in
* {@link DvrBrowseFragment}. DVR items might include: {@link
- * com.android.tv.dvr.data.ScheduledRecording}, {@link
- * com.android.tv.dvr.data.RecordedProgram}, and {@link
- * com.android.tv.dvr.data.SeriesRecording}.
+ * com.android.tv.dvr.data.ScheduledRecording}, {@link com.android.tv.dvr.data.RecordedProgram}, and
+ * {@link com.android.tv.dvr.data.SeriesRecording}.
*/
public abstract class DvrItemPresenter<T> extends Presenter {
protected final Context mContext;
diff --git a/src/com/android/tv/dvr/ui/browse/FullSchedulesCardPresenter.java b/src/com/android/tv/dvr/ui/browse/FullSchedulesCardPresenter.java
index af0f24c0..88133331 100644
--- a/src/com/android/tv/dvr/ui/browse/FullSchedulesCardPresenter.java
+++ b/src/com/android/tv/dvr/ui/browse/FullSchedulesCardPresenter.java
@@ -20,7 +20,7 @@ import android.content.Context;
import android.graphics.drawable.Drawable;
import android.view.View;
import com.android.tv.R;
-import com.android.tv.TvSingletons;
+import com.android.tv.TvApplication;
import com.android.tv.dvr.data.ScheduledRecording;
import com.android.tv.dvr.ui.DvrUiHelper;
import com.android.tv.util.Utils;
@@ -50,7 +50,7 @@ class FullSchedulesCardPresenter extends DvrItemPresenter<Object> {
cardView.setTitle(mCardTitleText);
cardView.setImage(mIconDrawable);
List<ScheduledRecording> scheduledRecordings =
- TvSingletons.getSingletons(mContext)
+ TvApplication.getSingletons(mContext)
.getDvrDataManager()
.getAvailableScheduledRecordings();
int fullDays = 0;
diff --git a/src/com/android/tv/dvr/ui/browse/RecordedProgramDetailsFragment.java b/src/com/android/tv/dvr/ui/browse/RecordedProgramDetailsFragment.java
index 47b1a198..3b3401b2 100644
--- a/src/com/android/tv/dvr/ui/browse/RecordedProgramDetailsFragment.java
+++ b/src/com/android/tv/dvr/ui/browse/RecordedProgramDetailsFragment.java
@@ -23,7 +23,7 @@ import android.support.v17.leanback.widget.Action;
import android.support.v17.leanback.widget.OnActionClickedListener;
import android.support.v17.leanback.widget.SparseArrayObjectAdapter;
import com.android.tv.R;
-import com.android.tv.TvSingletons;
+import com.android.tv.TvApplication;
import com.android.tv.dvr.DvrDataManager;
import com.android.tv.dvr.DvrManager;
import com.android.tv.dvr.DvrWatchedPositionManager;
@@ -44,7 +44,7 @@ public class RecordedProgramDetailsFragment extends DvrDetailsFragment
@Override
public void onCreate(Bundle savedInstanceState) {
- mDvrDataManager = TvSingletons.getSingletons(getContext()).getDvrDataManager();
+ mDvrDataManager = TvApplication.getSingletons(getContext()).getDvrDataManager();
mDvrDataManager.addRecordedProgramListener(this);
super.onCreate(savedInstanceState);
}
@@ -52,7 +52,7 @@ public class RecordedProgramDetailsFragment extends DvrDetailsFragment
@Override
public void onCreateInternal() {
mDvrWatchedPositionManager =
- TvSingletons.getSingletons(getActivity()).getDvrWatchedPositionManager();
+ TvApplication.getSingletons(getActivity()).getDvrWatchedPositionManager();
setDetailsOverviewRow(
DetailsContent.createFromRecordedProgram(getContext(), mRecordedProgram));
}
@@ -139,7 +139,7 @@ public class RecordedProgramDetailsFragment extends DvrDetailsFragment
mRecordedProgram.getId()));
} else if (action.getId() == ACTION_DELETE_RECORDING) {
DvrManager dvrManager =
- TvSingletons.getSingletons(getActivity()).getDvrManager();
+ TvApplication.getSingletons(getActivity()).getDvrManager();
dvrManager.removeRecordedProgram(mRecordedProgram);
getActivity().finish();
}
diff --git a/src/com/android/tv/dvr/ui/browse/RecordedProgramPresenter.java b/src/com/android/tv/dvr/ui/browse/RecordedProgramPresenter.java
index e2db3ac4..aad1cc6a 100644
--- a/src/com/android/tv/dvr/ui/browse/RecordedProgramPresenter.java
+++ b/src/com/android/tv/dvr/ui/browse/RecordedProgramPresenter.java
@@ -19,7 +19,7 @@ package com.android.tv.dvr.ui.browse;
import android.content.Context;
import android.media.tv.TvInputManager;
import com.android.tv.R;
-import com.android.tv.TvSingletons;
+import com.android.tv.TvApplication;
import com.android.tv.dvr.DvrWatchedPositionManager;
import com.android.tv.dvr.DvrWatchedPositionManager.WatchedPositionChangedListener;
import com.android.tv.dvr.data.RecordedProgram;
@@ -95,7 +95,7 @@ public class RecordedProgramPresenter extends DvrItemPresenter<RecordedProgram>
mTodayString = mContext.getString(R.string.dvr_date_today);
mYesterdayString = mContext.getString(R.string.dvr_date_yesterday);
mDvrWatchedPositionManager =
- TvSingletons.getSingletons(mContext).getDvrWatchedPositionManager();
+ TvApplication.getSingletons(mContext).getDvrWatchedPositionManager();
mProgressBarColor =
mContext.getResources().getColor(R.color.play_controls_progress_bar_watched);
mShowEpisodeTitle = showEpisodeTitle;
diff --git a/src/com/android/tv/dvr/ui/browse/RecordingCardView.java b/src/com/android/tv/dvr/ui/browse/RecordingCardView.java
index 0a204c14..edee5d3a 100644
--- a/src/com/android/tv/dvr/ui/browse/RecordingCardView.java
+++ b/src/com/android/tv/dvr/ui/browse/RecordingCardView.java
@@ -37,8 +37,8 @@ import com.android.tv.ui.ViewUtils;
import com.android.tv.util.ImageLoader;
/**
- * A CardView for displaying info about a {@link com.android.tv.dvr.data.ScheduledRecording}
- * or {@link RecordedProgram} or {@link com.android.tv.dvr.data.SeriesRecording}.
+ * A CardView for displaying info about a {@link com.android.tv.dvr.data.ScheduledRecording} or
+ * {@link RecordedProgram} or {@link com.android.tv.dvr.data.SeriesRecording}.
*/
public class RecordingCardView extends BaseCardView {
// This value should be the same with
diff --git a/src/com/android/tv/dvr/ui/browse/RecordingDetailsFragment.java b/src/com/android/tv/dvr/ui/browse/RecordingDetailsFragment.java
index e4d95630..c8f1c785 100644
--- a/src/com/android/tv/dvr/ui/browse/RecordingDetailsFragment.java
+++ b/src/com/android/tv/dvr/ui/browse/RecordingDetailsFragment.java
@@ -18,7 +18,7 @@ package com.android.tv.dvr.ui.browse;
import android.os.Bundle;
import android.support.v17.leanback.app.DetailsFragment;
-import com.android.tv.TvSingletons;
+import com.android.tv.TvApplication;
import com.android.tv.dvr.data.ScheduledRecording;
/** {@link DetailsFragment} for recordings in DVR. */
@@ -35,7 +35,7 @@ abstract class RecordingDetailsFragment extends DvrDetailsFragment {
protected boolean onLoadRecordingDetails(Bundle args) {
long scheduledRecordingId = args.getLong(DvrDetailsActivity.RECORDING_ID);
mRecording =
- TvSingletons.getSingletons(getContext())
+ TvApplication.getSingletons(getContext())
.getDvrDataManager()
.getScheduledRecording(scheduledRecordingId);
return mRecording != null;
diff --git a/src/com/android/tv/dvr/ui/browse/ScheduledRecordingDetailsFragment.java b/src/com/android/tv/dvr/ui/browse/ScheduledRecordingDetailsFragment.java
index 0765117d..b3e6ebb3 100644
--- a/src/com/android/tv/dvr/ui/browse/ScheduledRecordingDetailsFragment.java
+++ b/src/com/android/tv/dvr/ui/browse/ScheduledRecordingDetailsFragment.java
@@ -22,7 +22,7 @@ import android.support.v17.leanback.widget.Action;
import android.support.v17.leanback.widget.OnActionClickedListener;
import android.support.v17.leanback.widget.SparseArrayObjectAdapter;
import com.android.tv.R;
-import com.android.tv.TvSingletons;
+import com.android.tv.TvApplication;
import com.android.tv.dvr.DvrManager;
import com.android.tv.dvr.ui.DvrUiHelper;
@@ -37,7 +37,7 @@ public class ScheduledRecordingDetailsFragment extends RecordingDetailsFragment
@Override
public void onCreate(Bundle savedInstance) {
- mDvrManager = TvSingletons.getSingletons(getContext()).getDvrManager();
+ mDvrManager = TvApplication.getSingletons(getContext()).getDvrManager();
mHideViewSchedule = getArguments().getBoolean(DvrDetailsActivity.HIDE_VIEW_SCHEDULE);
super.onCreate(savedInstance);
}
diff --git a/src/com/android/tv/dvr/ui/browse/ScheduledRecordingPresenter.java b/src/com/android/tv/dvr/ui/browse/ScheduledRecordingPresenter.java
index f1ed52c8..fa948447 100644
--- a/src/com/android/tv/dvr/ui/browse/ScheduledRecordingPresenter.java
+++ b/src/com/android/tv/dvr/ui/browse/ScheduledRecordingPresenter.java
@@ -19,7 +19,7 @@ package com.android.tv.dvr.ui.browse;
import android.content.Context;
import android.os.Handler;
import com.android.tv.R;
-import com.android.tv.TvSingletons;
+import com.android.tv.TvApplication;
import com.android.tv.dvr.DvrManager;
import com.android.tv.dvr.data.ScheduledRecording;
import com.android.tv.util.Utils;
@@ -100,7 +100,7 @@ class ScheduledRecordingPresenter extends DvrItemPresenter<ScheduledRecording> {
public ScheduledRecordingPresenter(Context context) {
super(context);
- mDvrManager = TvSingletons.getSingletons(mContext).getDvrManager();
+ mDvrManager = TvApplication.getSingletons(mContext).getDvrManager();
mProgressBarColor =
mContext.getResources()
.getColor(R.color.play_controls_recording_icon_color_on_focus);
diff --git a/src/com/android/tv/dvr/ui/browse/SeriesRecordingDetailsFragment.java b/src/com/android/tv/dvr/ui/browse/SeriesRecordingDetailsFragment.java
index 2cd191a7..48bc9cbd 100644
--- a/src/com/android/tv/dvr/ui/browse/SeriesRecordingDetailsFragment.java
+++ b/src/com/android/tv/dvr/ui/browse/SeriesRecordingDetailsFragment.java
@@ -33,7 +33,7 @@ import android.support.v17.leanback.widget.PresenterSelector;
import android.support.v17.leanback.widget.SparseArrayObjectAdapter;
import android.text.TextUtils;
import com.android.tv.R;
-import com.android.tv.TvSingletons;
+import com.android.tv.TvApplication;
import com.android.tv.data.BaseProgram;
import com.android.tv.dvr.DvrDataManager;
import com.android.tv.dvr.DvrWatchedPositionManager;
@@ -73,7 +73,7 @@ public class SeriesRecordingDetailsFragment extends DvrDetailsFragment
@Override
public void onCreate(Bundle savedInstanceState) {
- mDvrDataManager = TvSingletons.getSingletons(getActivity()).getDvrDataManager();
+ mDvrDataManager = TvApplication.getSingletons(getActivity()).getDvrDataManager();
mWatchLabel = getString(R.string.dvr_detail_watch);
mResumeLabel = getString(R.string.dvr_detail_series_resume);
mWatchDrawable = getResources().getDrawable(R.drawable.lb_ic_play, null);
@@ -84,7 +84,7 @@ public class SeriesRecordingDetailsFragment extends DvrDetailsFragment
@Override
protected void onCreateInternal() {
mDvrWatchedPositionManager =
- TvSingletons.getSingletons(getActivity()).getDvrWatchedPositionManager();
+ TvApplication.getSingletons(getActivity()).getDvrWatchedPositionManager();
setDetailsOverviewRow(DetailsContent.createFromSeriesRecording(getContext(), mSeries));
setupRecordedProgramsRow();
mDvrDataManager.addSeriesRecordingListener(this);
@@ -137,7 +137,7 @@ public class SeriesRecordingDetailsFragment extends DvrDetailsFragment
protected boolean onLoadRecordingDetails(Bundle args) {
long recordId = args.getLong(DvrDetailsActivity.RECORDING_ID);
mSeries =
- TvSingletons.getSingletons(getActivity())
+ TvApplication.getSingletons(getActivity())
.getDvrDataManager()
.getSeriesRecording(recordId);
if (mSeries == null) {
diff --git a/src/com/android/tv/dvr/ui/browse/SeriesRecordingPresenter.java b/src/com/android/tv/dvr/ui/browse/SeriesRecordingPresenter.java
index 14f9dceb..02ce24ef 100644
--- a/src/com/android/tv/dvr/ui/browse/SeriesRecordingPresenter.java
+++ b/src/com/android/tv/dvr/ui/browse/SeriesRecordingPresenter.java
@@ -19,8 +19,9 @@ package com.android.tv.dvr.ui.browse;
import android.content.Context;
import android.media.tv.TvInputManager;
import android.text.TextUtils;
+import com.android.tv.ApplicationSingletons;
import com.android.tv.R;
-import com.android.tv.TvSingletons;
+import com.android.tv.TvApplication;
import com.android.tv.dvr.DvrDataManager;
import com.android.tv.dvr.DvrDataManager.RecordedProgramListener;
import com.android.tv.dvr.DvrDataManager.ScheduledRecordingListener;
@@ -185,7 +186,7 @@ class SeriesRecordingPresenter extends DvrItemPresenter<SeriesRecording> {
public SeriesRecordingPresenter(Context context) {
super(context);
- TvSingletons singletons = TvSingletons.getSingletons(context);
+ ApplicationSingletons singletons = TvApplication.getSingletons(context);
mDvrDataManager = singletons.getDvrDataManager();
mDvrManager = singletons.getDvrManager();
mWatchedPositionManager = singletons.getDvrWatchedPositionManager();
diff --git a/src/com/android/tv/dvr/ui/list/BaseDvrSchedulesFragment.java b/src/com/android/tv/dvr/ui/list/BaseDvrSchedulesFragment.java
index 84298bdf..42c7086a 100644
--- a/src/com/android/tv/dvr/ui/list/BaseDvrSchedulesFragment.java
+++ b/src/com/android/tv/dvr/ui/list/BaseDvrSchedulesFragment.java
@@ -23,8 +23,9 @@ import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
+import com.android.tv.ApplicationSingletons;
import com.android.tv.R;
-import com.android.tv.TvSingletons;
+import com.android.tv.TvApplication;
import com.android.tv.dvr.DvrDataManager;
import com.android.tv.dvr.DvrScheduleManager;
import com.android.tv.dvr.data.ScheduledRecording;
@@ -49,7 +50,7 @@ public abstract class BaseDvrSchedulesFragment extends DetailsFragment
mRowsAdapter = onCreateRowsAdapter(presenterSelector);
setAdapter(mRowsAdapter);
mRowsAdapter.start();
- TvSingletons singletons = TvSingletons.getSingletons(getContext());
+ ApplicationSingletons singletons = TvApplication.getSingletons(getContext());
singletons.getDvrDataManager().addScheduledRecordingListener(this);
singletons.getDvrScheduleManager().addOnConflictStateChangeListener(this);
mEmptyInfoScreenView = (TextView) getActivity().findViewById(R.id.empty_info_screen);
@@ -95,7 +96,7 @@ public abstract class BaseDvrSchedulesFragment extends DetailsFragment
@Override
public void onDestroy() {
- TvSingletons singletons = TvSingletons.getSingletons(getContext());
+ ApplicationSingletons singletons = TvApplication.getSingletons(getContext());
singletons.getDvrScheduleManager().removeOnConflictStateChangeListener(this);
singletons.getDvrDataManager().removeScheduledRecordingListener(this);
mRowsAdapter.stop();
diff --git a/src/com/android/tv/dvr/ui/list/DvrSchedulesActivity.java b/src/com/android/tv/dvr/ui/list/DvrSchedulesActivity.java
index 82b85630..11df780c 100644
--- a/src/com/android/tv/dvr/ui/list/DvrSchedulesActivity.java
+++ b/src/com/android/tv/dvr/ui/list/DvrSchedulesActivity.java
@@ -21,7 +21,7 @@ import android.app.ProgressDialog;
import android.os.Bundle;
import android.support.annotation.IntDef;
import com.android.tv.R;
-import com.android.tv.Starter;
+import com.android.tv.TvApplication;
import com.android.tv.data.Program;
import com.android.tv.dvr.data.SeriesRecording;
import com.android.tv.dvr.provider.EpisodicProgramLoadTask;
@@ -53,7 +53,7 @@ public class DvrSchedulesActivity extends Activity {
@Override
public void onCreate(final Bundle savedInstanceState) {
- Starter.start(this);
+ TvApplication.setCurrentRunningProcess(this, true);
// Pass null to prevent automatically re-creating fragments
super.onCreate(null);
setContentView(R.layout.activity_dvr_schedules);
diff --git a/src/com/android/tv/dvr/ui/list/DvrSeriesSchedulesFragment.java b/src/com/android/tv/dvr/ui/list/DvrSeriesSchedulesFragment.java
index d376e358..6ec2e152 100644
--- a/src/com/android/tv/dvr/ui/list/DvrSeriesSchedulesFragment.java
+++ b/src/com/android/tv/dvr/ui/list/DvrSeriesSchedulesFragment.java
@@ -30,8 +30,9 @@ import android.transition.Fade;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
+import com.android.tv.ApplicationSingletons;
import com.android.tv.R;
-import com.android.tv.TvSingletons;
+import com.android.tv.TvApplication;
import com.android.tv.data.ChannelDataManager;
import com.android.tv.data.Program;
import com.android.tv.dvr.DvrDataManager;
@@ -140,7 +141,7 @@ public class DvrSeriesSchedulesFragment extends BaseDvrSchedulesFragment {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
- TvSingletons singletons = TvSingletons.getSingletons(getContext());
+ ApplicationSingletons singletons = TvApplication.getSingletons(getContext());
mChannelDataManager = singletons.getChannelDataManager();
mChannelDataManager.addListener(mChannelListener);
mDvrDataManager = singletons.getDvrDataManager();
diff --git a/src/com/android/tv/dvr/ui/list/ScheduleRowAdapter.java b/src/com/android/tv/dvr/ui/list/ScheduleRowAdapter.java
index 1215c19a..8dd6c322 100644
--- a/src/com/android/tv/dvr/ui/list/ScheduleRowAdapter.java
+++ b/src/com/android/tv/dvr/ui/list/ScheduleRowAdapter.java
@@ -26,7 +26,7 @@ import android.text.format.DateUtils;
import android.util.ArraySet;
import android.util.Log;
import com.android.tv.R;
-import com.android.tv.TvSingletons;
+import com.android.tv.TvApplication;
import com.android.tv.common.SoftPreconditions;
import com.android.tv.dvr.DvrManager;
import com.android.tv.dvr.data.ScheduledRecording;
@@ -79,11 +79,11 @@ class ScheduleRowAdapter extends ArrayObjectAdapter {
public void start() {
clear();
List<ScheduledRecording> recordingList =
- TvSingletons.getSingletons(mContext)
+ TvApplication.getSingletons(mContext)
.getDvrDataManager()
.getNonStartedScheduledRecordings();
recordingList.addAll(
- TvSingletons.getSingletons(mContext).getDvrDataManager().getStartedRecordings());
+ TvApplication.getSingletons(mContext).getDvrDataManager().getStartedRecordings());
Collections.sort(
recordingList, ScheduledRecording.START_TIME_THEN_PRIORITY_THEN_ID_COMPARATOR);
long deadLine = Utils.getLastMillisecondOfDay(System.currentTimeMillis());
@@ -136,7 +136,7 @@ class ScheduleRowAdapter extends ArrayObjectAdapter {
/** Stops schedules row adapter. */
public void stop() {
mHandler.removeCallbacksAndMessages(null);
- DvrManager dvrManager = TvSingletons.getSingletons(getContext()).getDvrManager();
+ DvrManager dvrManager = TvApplication.getSingletons(getContext()).getDvrManager();
for (int i = 0; i < size(); i++) {
if (get(i) instanceof ScheduleRow) {
ScheduleRow row = (ScheduleRow) get(i);
diff --git a/src/com/android/tv/dvr/ui/list/ScheduleRowPresenter.java b/src/com/android/tv/dvr/ui/list/ScheduleRowPresenter.java
index 5cab607a..67096e3b 100644
--- a/src/com/android/tv/dvr/ui/list/ScheduleRowPresenter.java
+++ b/src/com/android/tv/dvr/ui/list/ScheduleRowPresenter.java
@@ -38,7 +38,7 @@ import android.widget.RelativeLayout;
import android.widget.TextView;
import android.widget.Toast;
import com.android.tv.R;
-import com.android.tv.TvSingletons;
+import com.android.tv.TvApplication;
import com.android.tv.common.SoftPreconditions;
import com.android.tv.data.Channel;
import com.android.tv.dialog.HalfSizedDialogFragment;
@@ -344,8 +344,8 @@ class ScheduleRowPresenter extends RowPresenter {
setHeaderPresenter(null);
setSelectEffectEnabled(false);
mContext = context;
- mDvrManager = TvSingletons.getSingletons(context).getDvrManager();
- mDvrScheduleManager = TvSingletons.getSingletons(context).getDvrScheduleManager();
+ mDvrManager = TvApplication.getSingletons(context).getDvrManager();
+ mDvrScheduleManager = TvApplication.getSingletons(context).getDvrScheduleManager();
mTunerConflictWillNotBeRecordedInfo =
mContext.getString(R.string.dvr_schedules_tuner_conflict_will_not_be_recorded_info);
mTunerConflictWillBePartiallyRecordedInfo =
@@ -426,7 +426,7 @@ class ScheduleRowPresenter extends RowPresenter {
switch (actions.length) {
case 2:
viewHolder.mSecondActionView.setImageResource(getImageForAction(actions[1]));
- // fall through
+ // pass through
case 1:
viewHolder.mFirstActionView.setImageResource(getImageForAction(actions[0]));
break;
@@ -486,7 +486,7 @@ class ScheduleRowPresenter extends RowPresenter {
private String getChannelNameText(ScheduleRow row) {
Channel channel =
- TvSingletons.getSingletons(mContext)
+ TvApplication.getSingletons(mContext)
.getChannelDataManager()
.getChannel(row.getChannelId());
return channel == null
diff --git a/src/com/android/tv/dvr/ui/list/SchedulesHeaderRowPresenter.java b/src/com/android/tv/dvr/ui/list/SchedulesHeaderRowPresenter.java
index eb01aba2..03cc0a79 100644
--- a/src/com/android/tv/dvr/ui/list/SchedulesHeaderRowPresenter.java
+++ b/src/com/android/tv/dvr/ui/list/SchedulesHeaderRowPresenter.java
@@ -28,7 +28,7 @@ import android.view.ViewGroup;
import android.view.animation.DecelerateInterpolator;
import android.widget.TextView;
import com.android.tv.R;
-import com.android.tv.TvSingletons;
+import com.android.tv.TvApplication;
import com.android.tv.dvr.data.SeriesRecording;
import com.android.tv.dvr.ui.DvrUiHelper;
import com.android.tv.dvr.ui.list.SchedulesHeaderRow.SeriesRecordingHeaderRow;
@@ -158,11 +158,11 @@ abstract class SchedulesHeaderRowPresenter extends RowPresenter {
SeriesRecording seriesRecording =
SeriesRecording.buildFrom(header.getSeriesRecording())
.setPriority(
- TvSingletons.getSingletons(getContext())
+ TvApplication.getSingletons(getContext())
.getDvrScheduleManager()
.suggestNewSeriesPriority())
.build();
- TvSingletons.getSingletons(getContext())
+ TvApplication.getSingletons(getContext())
.getDvrManager()
.updateSeriesRecording(seriesRecording);
DvrUiHelper.startSeriesSettingsActivity(
diff --git a/src/com/android/tv/dvr/ui/list/SeriesScheduleRowAdapter.java b/src/com/android/tv/dvr/ui/list/SeriesScheduleRowAdapter.java
index 9a9c94ea..692c0f99 100644
--- a/src/com/android/tv/dvr/ui/list/SeriesScheduleRowAdapter.java
+++ b/src/com/android/tv/dvr/ui/list/SeriesScheduleRowAdapter.java
@@ -23,8 +23,9 @@ import android.os.Build;
import android.support.v17.leanback.widget.ClassPresenterSelector;
import android.util.ArrayMap;
import android.util.Log;
+import com.android.tv.ApplicationSingletons;
import com.android.tv.R;
-import com.android.tv.TvSingletons;
+import com.android.tv.TvApplication;
import com.android.tv.common.SoftPreconditions;
import com.android.tv.data.Program;
import com.android.tv.dvr.DvrDataManager;
@@ -64,7 +65,7 @@ class SeriesScheduleRowAdapter extends ScheduleRowAdapter {
} else {
mInputId = null;
}
- TvSingletons singletons = TvSingletons.getSingletons(context);
+ ApplicationSingletons singletons = TvApplication.getSingletons(context);
mDvrManager = singletons.getDvrManager();
mDataManager = singletons.getDvrDataManager();
setHasStableIds(true);
diff --git a/src/com/android/tv/dvr/ui/playback/DvrPlaybackActivity.java b/src/com/android/tv/dvr/ui/playback/DvrPlaybackActivity.java
index b8b19adc..29f2734d 100644
--- a/src/com/android/tv/dvr/ui/playback/DvrPlaybackActivity.java
+++ b/src/com/android/tv/dvr/ui/playback/DvrPlaybackActivity.java
@@ -24,7 +24,7 @@ import android.net.Uri;
import android.os.Bundle;
import android.util.Log;
import com.android.tv.R;
-import com.android.tv.Starter;
+import com.android.tv.TvApplication;
import com.android.tv.dialog.PinDialogFragment.OnPinCheckedListener;
import com.android.tv.dvr.data.RecordedProgram;
import com.android.tv.util.Utils;
@@ -39,7 +39,7 @@ public class DvrPlaybackActivity extends Activity implements OnPinCheckedListene
@Override
public void onCreate(Bundle savedInstanceState) {
- Starter.start(this);
+ TvApplication.setCurrentRunningProcess(this, true);
if (DEBUG) Log.d(TAG, "onCreate");
super.onCreate(savedInstanceState);
setIntent(createProgramIntent(getIntent()));
diff --git a/src/com/android/tv/dvr/ui/playback/DvrPlaybackMediaSessionHelper.java b/src/com/android/tv/dvr/ui/playback/DvrPlaybackMediaSessionHelper.java
index dd17b22d..3ff90aa4 100644
--- a/src/com/android/tv/dvr/ui/playback/DvrPlaybackMediaSessionHelper.java
+++ b/src/com/android/tv/dvr/ui/playback/DvrPlaybackMediaSessionHelper.java
@@ -29,7 +29,7 @@ import android.os.AsyncTask;
import android.support.annotation.Nullable;
import android.text.TextUtils;
import com.android.tv.R;
-import com.android.tv.TvSingletons;
+import com.android.tv.TvApplication;
import com.android.tv.data.Channel;
import com.android.tv.data.ChannelDataManager;
import com.android.tv.dvr.DvrWatchedPositionManager;
@@ -61,8 +61,8 @@ class DvrPlaybackMediaSessionHelper {
mActivity = activity;
mDvrPlayer = dvrPlayer;
mDvrWatchedPositionManager =
- TvSingletons.getSingletons(activity).getDvrWatchedPositionManager();
- mChannelDataManager = TvSingletons.getSingletons(activity).getChannelDataManager();
+ TvApplication.getSingletons(activity).getDvrWatchedPositionManager();
+ mChannelDataManager = TvApplication.getSingletons(activity).getChannelDataManager();
mDvrPlayer.setCallback(
new DvrPlayer.DvrPlayerCallback() {
@Override
diff --git a/src/com/android/tv/dvr/ui/playback/DvrPlaybackOverlayFragment.java b/src/com/android/tv/dvr/ui/playback/DvrPlaybackOverlayFragment.java
index d3374cfa..c5fccda2 100644
--- a/src/com/android/tv/dvr/ui/playback/DvrPlaybackOverlayFragment.java
+++ b/src/com/android/tv/dvr/ui/playback/DvrPlaybackOverlayFragment.java
@@ -43,7 +43,7 @@ import android.view.View;
import android.view.ViewGroup;
import android.widget.Toast;
import com.android.tv.R;
-import com.android.tv.TvSingletons;
+import com.android.tv.TvApplication;
import com.android.tv.data.BaseProgram;
import com.android.tv.dialog.PinDialogFragment;
import com.android.tv.dvr.DvrDataManager;
@@ -116,9 +116,9 @@ public class DvrPlaybackOverlayFragment extends PlaybackFragment {
.getResources()
.getDimensionPixelOffset(
R.dimen.dvr_playback_overlay_padding_top_no_secondary_row);
- mDvrDataManager = TvSingletons.getSingletons(getActivity()).getDvrDataManager();
+ mDvrDataManager = TvApplication.getSingletons(getActivity()).getDvrDataManager();
mContentRatingsManager =
- TvSingletons.getSingletons(getContext())
+ TvApplication.getSingletons(getContext())
.getTvInputManagerHelper()
.getContentRatingsManager();
if (!mDvrDataManager.isRecordedProgramLoadFinished()) {