diff options
author | Nick Chalko <nchalko@google.com> | 2018-01-17 11:15:16 -0800 |
---|---|---|
committer | Nick Chalko <nchalko@google.com> | 2018-01-17 11:20:37 -0800 |
commit | 38fef3bf253578f518d1bc727da4afb263194398 (patch) | |
tree | 09a06234eda7c54216bca773b6d8407eafe0722d /src/com/android/tv/dvr | |
parent | c9889d13513e26649a7708cf2d0562cb592d441a (diff) | |
download | TV-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')
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()) { |