diff options
Diffstat (limited to 'src/com/android/tv/dvr/ui/DvrUiHelper.java')
-rw-r--r-- | src/com/android/tv/dvr/ui/DvrUiHelper.java | 547 |
1 files changed, 310 insertions, 237 deletions
diff --git a/src/com/android/tv/dvr/ui/DvrUiHelper.java b/src/com/android/tv/dvr/ui/DvrUiHelper.java index 302fd6cd..16afbdef 100644 --- a/src/com/android/tv/dvr/ui/DvrUiHelper.java +++ b/src/com/android/tv/dvr/ui/DvrUiHelper.java @@ -37,17 +37,18 @@ import android.text.TextUtils; import android.text.style.TextAppearanceSpan; import android.widget.ImageView; import android.widget.Toast; - import com.android.tv.MainActivity; import com.android.tv.R; -import com.android.tv.TvApplication; +import com.android.tv.TvSingletons; +import com.android.tv.common.BuildConfig; 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.data.api.Channel; 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; @@ -56,6 +57,7 @@ import com.android.tv.dvr.ui.DvrHalfSizedDialogFragment.DvrAlreadyRecordedDialog import com.android.tv.dvr.ui.DvrHalfSizedDialogFragment.DvrAlreadyScheduledDialogFragment; import com.android.tv.dvr.ui.DvrHalfSizedDialogFragment.DvrChannelRecordDurationOptionDialogFragment; import com.android.tv.dvr.ui.DvrHalfSizedDialogFragment.DvrChannelWatchConflictDialogFragment; +import com.android.tv.dvr.ui.DvrHalfSizedDialogFragment.DvrFutureProgramInfoDialogFragment; import com.android.tv.dvr.ui.DvrHalfSizedDialogFragment.DvrInsufficientSpaceErrorDialogFragment; import com.android.tv.dvr.ui.DvrHalfSizedDialogFragment.DvrMissingStorageErrorDialogFragment; import com.android.tv.dvr.ui.DvrHalfSizedDialogFragment.DvrNoFreeSpaceErrorDialogFragment; @@ -65,21 +67,19 @@ import com.android.tv.dvr.ui.DvrHalfSizedDialogFragment.DvrSmallSizedStorageErro import com.android.tv.dvr.ui.DvrHalfSizedDialogFragment.DvrStopRecordingDialogFragment; import com.android.tv.dvr.ui.browse.DvrBrowseActivity; import com.android.tv.dvr.ui.browse.DvrDetailsActivity; +import com.android.tv.dvr.ui.list.DvrHistoryActivity; import com.android.tv.dvr.ui.list.DvrSchedulesActivity; import com.android.tv.dvr.ui.list.DvrSchedulesFragment; import com.android.tv.dvr.ui.list.DvrSeriesSchedulesFragment; import com.android.tv.dvr.ui.playback.DvrPlaybackActivity; import com.android.tv.util.ToastUtils; import com.android.tv.util.Utils; - import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Set; -/** - * A helper class for DVR UI. - */ +/** A helper class for DVR UI. */ @MainThread @TargetApi(Build.VERSION_CODES.N) public class DvrUiHelper { @@ -91,45 +91,43 @@ public class DvrUiHelper { * Checks if the storage status is good for recording and shows error messages if needed. * * @param recordingRequestRunnable if the storage status is OK to record or users choose to - * perform the operation anyway, this Runnable will run. + * perform the operation anyway, this Runnable will run. */ - public static void checkStorageStatusAndShowErrorMessage(Activity activity, String inputId, - Runnable recordingRequestRunnable) { - if (Utils.isBundledInput(inputId)) { - switch (TvApplication.getSingletons(activity).getDvrStorageStatusManager() + public static void checkStorageStatusAndShowErrorMessage( + Activity activity, String inputId, Runnable recordingRequestRunnable) { + if (CommonUtils.isBundledInput(inputId)) { + switch (TvSingletons.getSingletons(activity) + .getRecordingStorageStatusManager() .getDvrStorageStatus()) { - case DvrStorageStatusManager.STORAGE_STATUS_TOTAL_CAPACITY_TOO_SMALL: + case RecordingStorageStatusManager.STORAGE_STATUS_TOTAL_CAPACITY_TOO_SMALL: showDvrSmallSizedStorageErrorDialog(activity); return; - case DvrStorageStatusManager.STORAGE_STATUS_MISSING: + case RecordingStorageStatusManager.STORAGE_STATUS_MISSING: showDvrMissingStorageErrorDialog(activity); return; - case DvrStorageStatusManager.STORAGE_STATUS_FREE_SPACE_INSUFFICIENT: + case RecordingStorageStatusManager.STORAGE_STATUS_FREE_SPACE_INSUFFICIENT: showDvrNoFreeSpaceErrorDialog(activity, recordingRequestRunnable); return; + default: // fall out } } recordingRequestRunnable.run(); } - /** - * Shows the schedule dialog. - */ - public static void showScheduleDialog(Activity activity, Program program, - boolean addCurrentProgramToSeries) { + /** Shows the schedule dialog. */ + public static void showScheduleDialog( + Activity activity, Program program, boolean addCurrentProgramToSeries) { if (SoftPreconditions.checkNotNull(program) == null) { return; } Bundle args = new Bundle(); args.putParcelable(DvrHalfSizedDialogFragment.KEY_PROGRAM, program); - args.putBoolean(DvrScheduleFragment.KEY_ADD_CURRENT_PROGRAM_TO_SERIES, - addCurrentProgramToSeries); + args.putBoolean( + DvrScheduleFragment.KEY_ADD_CURRENT_PROGRAM_TO_SERIES, addCurrentProgramToSeries); showDialogFragment(activity, new DvrScheduleDialogFragment(), args, true, true); } - /** - * Shows the recording duration options dialog. - */ + /** Shows the recording duration options dialog. */ public static void showChannelRecordDurationOptions(Activity activity, Channel channel) { if (SoftPreconditions.checkNotNull(channel) == null) { return; @@ -139,9 +137,7 @@ public class DvrUiHelper { showDialogFragment(activity, new DvrChannelRecordDurationOptionDialogFragment(), args); } - /** - * Shows the dialog which says that the new schedule conflicts with others. - */ + /** Shows the dialog which says that the new schedule conflicts with others. */ public static void showScheduleConflictDialog(Activity activity, Program program) { if (program == null) { return; @@ -151,9 +147,7 @@ public class DvrUiHelper { showDialogFragment(activity, new DvrProgramConflictDialogFragment(), args, false, true); } - /** - * Shows the conflict dialog for the channel watching. - */ + /** Shows the conflict dialog for the channel watching. */ public static void showChannelWatchConflictDialog(MainActivity activity, Channel channel) { if (channel == null) { return; @@ -163,63 +157,60 @@ public class DvrUiHelper { showDialogFragment(activity, new DvrChannelWatchConflictDialogFragment(), args); } - /** - * Shows DVR insufficient space error dialog. - */ - public static void showDvrInsufficientSpaceErrorDialog(MainActivity activity, - Set<String> failedScheduledRecordingInfoSet) { + /** Shows DVR insufficient space error dialog. */ + public static void showDvrInsufficientSpaceErrorDialog( + MainActivity activity, Set<String> failedScheduledRecordingInfoSet) { Bundle args = new Bundle(); ArrayList<String> failedScheduledRecordingInfoArray = new ArrayList<>(failedScheduledRecordingInfoSet); - args.putStringArrayList(DvrInsufficientSpaceErrorFragment.FAILED_SCHEDULED_RECORDING_INFOS, + args.putStringArrayList( + DvrInsufficientSpaceErrorFragment.FAILED_SCHEDULED_RECORDING_INFOS, failedScheduledRecordingInfoArray); showDialogFragment(activity, new DvrInsufficientSpaceErrorDialogFragment(), args); - Utils.clearRecordingFailedReason(activity, - TvInputManager.RECORDING_ERROR_INSUFFICIENT_SPACE); + Utils.clearRecordingFailedReason( + activity, TvInputManager.RECORDING_ERROR_INSUFFICIENT_SPACE); Utils.clearFailedScheduledRecordingInfoSet(activity); } /** * Shows DVR no free space error dialog. * - * @param recordingRequestRunnable the recording request to be executed when users choose - * {@link DvrGuidedStepFragment#ACTION_RECORD_ANYWAY}. + * @param recordingRequestRunnable the recording request to be executed when users choose {@link + * DvrGuidedStepFragment#ACTION_RECORD_ANYWAY}. */ - public static void showDvrNoFreeSpaceErrorDialog(Activity activity, - Runnable recordingRequestRunnable) { + public static void showDvrNoFreeSpaceErrorDialog( + Activity activity, Runnable recordingRequestRunnable) { DvrHalfSizedDialogFragment fragment = new DvrNoFreeSpaceErrorDialogFragment(); - fragment.setOnActionClickListener(new HalfSizedDialogFragment.OnActionClickListener() { - @Override - public void onActionClick(long actionId) { - if (actionId == DvrGuidedStepFragment.ACTION_RECORD_ANYWAY) { - recordingRequestRunnable.run(); - } else if (actionId == DvrGuidedStepFragment.ACTION_DELETE_RECORDINGS) { - Intent intent = new Intent(activity, DvrBrowseActivity.class); - activity.startActivity(intent); - } - } - }); + fragment.setOnActionClickListener( + new HalfSizedDialogFragment.OnActionClickListener() { + @Override + public void onActionClick(long actionId) { + if (actionId == DvrGuidedStepFragment.ACTION_RECORD_ANYWAY) { + recordingRequestRunnable.run(); + } else if (actionId == DvrGuidedStepFragment.ACTION_DELETE_RECORDINGS) { + Intent intent = new Intent(activity, DvrBrowseActivity.class); + activity.startActivity(intent); + } + } + }); showDialogFragment(activity, fragment, null); } - /** - * Shows DVR missing storage error dialog. - */ + /** Shows DVR missing storage error dialog. */ private static void showDvrMissingStorageErrorDialog(Activity activity) { showDialogFragment(activity, new DvrMissingStorageErrorDialogFragment(), null); } - /** - * Shows DVR small sized storage error dialog. - */ + /** Shows DVR small sized storage error dialog. */ public static void showDvrSmallSizedStorageErrorDialog(Activity activity) { showDialogFragment(activity, new DvrSmallSizedStorageErrorDialogFragment(), null); } - /** - * Shows stop recording dialog. - */ - public static void showStopRecordingDialog(Activity activity, long channelId, int reason, + /** Shows stop recording dialog. */ + public static void showStopRecordingDialog( + Activity activity, + long channelId, + int reason, HalfSizedDialogFragment.OnActionClickListener listener) { Bundle args = new Bundle(); args.putLong(DvrHalfSizedDialogFragment.KEY_CHANNEL_ID, channelId); @@ -229,9 +220,7 @@ public class DvrUiHelper { showDialogFragment(activity, fragment, args); } - /** - * Shows "already scheduled" dialog. - */ + /** Shows "already scheduled" dialog. */ public static void showAlreadyScheduleDialog(Activity activity, Program program) { if (program == null) { return; @@ -241,9 +230,7 @@ public class DvrUiHelper { showDialogFragment(activity, new DvrAlreadyScheduledDialogFragment(), args, false, true); } - /** - * Shows "already recorded" dialog. - */ + /** Shows "already recorded" dialog. */ public static void showAlreadyRecordedDialog(Activity activity, Program program) { if (program == null) { return; @@ -253,37 +240,49 @@ public class DvrUiHelper { showDialogFragment(activity, new DvrAlreadyRecordedDialogFragment(), args, false, true); } + /** Shows program information dialog. */ + public static void showProgramInfoDialog(Activity activity, Program program) { + if (program == null || !BuildConfig.ENG) { + return; + } + Bundle args = new Bundle(); + args.putParcelable(DvrHalfSizedDialogFragment.KEY_PROGRAM, program); + showDialogFragment(activity, new DvrFutureProgramInfoDialogFragment(), args, false, true); + } + /** * Handle the request of recording a current program. It will handle creating schedules and * shows the proper dialog and toast message respectively for timed-recording and program * recording cases. * - * @param addProgramToSeries denotes whether the program to be recorded should be added into - * the series recording when users choose to record the entire series. + * @param addProgramToSeries denotes whether the program to be recorded should be added into the + * series recording when users choose to record the entire series. */ - public static void requestRecordingCurrentProgram(Activity activity, - Channel channel, Program program, boolean addProgramToSeries) { + public static void requestRecordingCurrentProgram( + Activity activity, Channel channel, Program program, boolean addProgramToSeries) { if (program == null) { DvrUiHelper.showChannelRecordDurationOptions(activity, channel); } else if (DvrUiHelper.handleCreateSchedule(activity, program, addProgramToSeries)) { - String msg = activity.getString(R.string.dvr_msg_current_program_scheduled, - program.getTitle(), Utils.toTimeString(program.getEndTimeUtcMillis(), false)); + String msg = + activity.getString( + R.string.dvr_msg_current_program_scheduled, + program.getTitle(), + Utils.toTimeString(program.getEndTimeUtcMillis(), false)); Toast.makeText(activity, msg, Toast.LENGTH_SHORT).show(); } } /** - * Handle the request of recording a future program. It will handle creating schedules and - * shows the proper toast message. + * Handle the request of recording a future program. It will handle creating schedules and shows + * the proper toast message. * - * @param addProgramToSeries denotes whether the program to be recorded should be added into - * the series recording when users choose to record the entire series. + * @param addProgramToSeries denotes whether the program to be recorded should be added into the + * series recording when users choose to record the entire series. */ - public static void requestRecordingFutureProgram(Activity activity, - Program program, boolean addProgramToSeries) { + public static void requestRecordingFutureProgram( + Activity activity, Program program, boolean addProgramToSeries) { if (DvrUiHelper.handleCreateSchedule(activity, program, addProgramToSeries)) { - String msg = activity.getString( - R.string.dvr_msg_program_scheduled, program.getTitle()); + String msg = activity.getString(R.string.dvr_msg_program_scheduled, program.getTitle()); ToastUtils.show(activity, msg, Toast.LENGTH_SHORT); } } @@ -292,12 +291,12 @@ public class DvrUiHelper { * Handles the action to create the new schedule. It returns {@code true} if the schedule is * added and there's no additional UI, otherwise {@code false}. */ - private static boolean handleCreateSchedule(Activity activity, Program program, - boolean addProgramToSeries) { + private static boolean handleCreateSchedule( + Activity activity, Program program, boolean addProgramToSeries) { if (program == null) { return false; } - DvrManager dvrManager = TvApplication.getSingletons(activity).getDvrManager(); + DvrManager dvrManager = TvSingletons.getSingletons(activity).getDvrManager(); if (!program.isEpisodic()) { // One time recording. dvrManager.addSchedule(program); @@ -307,18 +306,24 @@ public class DvrUiHelper { } } else { // Show recorded program rather than the schedule. - RecordedProgram recordedProgram = dvrManager.getRecordedProgram(program.getTitle(), - program.getSeasonNumber(), program.getEpisodeNumber()); + RecordedProgram recordedProgram = + dvrManager.getRecordedProgram( + program.getTitle(), + program.getSeasonNumber(), + program.getEpisodeNumber()); if (recordedProgram != null) { DvrUiHelper.showAlreadyRecordedDialog(activity, program); return false; } - ScheduledRecording duplicate = dvrManager.getScheduledRecording(program.getTitle(), - program.getSeasonNumber(), program.getEpisodeNumber()); + ScheduledRecording duplicate = + dvrManager.getScheduledRecording( + program.getTitle(), + program.getSeasonNumber(), + program.getEpisodeNumber()); if (duplicate != null && (duplicate.getState() == ScheduledRecording.STATE_RECORDING_NOT_STARTED - || duplicate.getState() - == ScheduledRecording.STATE_RECORDING_IN_PROGRESS)) { + || duplicate.getState() + == ScheduledRecording.STATE_RECORDING_IN_PROGRESS)) { DvrUiHelper.showAlreadyScheduleDialog(activity, program); return false; } @@ -334,39 +339,44 @@ public class DvrUiHelper { return true; } - private static void showDialogFragment(Activity activity, - DvrHalfSizedDialogFragment dialogFragment, Bundle args) { + private static void showDialogFragment( + Activity activity, DvrHalfSizedDialogFragment dialogFragment, Bundle args) { showDialogFragment(activity, dialogFragment, args, false, false); } - private static void showDialogFragment(Activity activity, - DvrHalfSizedDialogFragment dialogFragment, Bundle args, boolean keepSidePanelHistory, + private static void showDialogFragment( + Activity activity, + DvrHalfSizedDialogFragment dialogFragment, + Bundle args, + boolean keepSidePanelHistory, boolean keepProgramGuide) { dialogFragment.setArguments(args); if (activity instanceof MainActivity) { - ((MainActivity) activity).getOverlayManager() - .showDialogFragment(DvrHalfSizedDialogFragment.DIALOG_TAG, dialogFragment, - keepSidePanelHistory, keepProgramGuide); + ((MainActivity) activity) + .getOverlayManager() + .showDialogFragment( + DvrHalfSizedDialogFragment.DIALOG_TAG, + dialogFragment, + keepSidePanelHistory, + keepProgramGuide); } else { - dialogFragment.show(activity.getFragmentManager(), - DvrHalfSizedDialogFragment.DIALOG_TAG); + dialogFragment.show( + activity.getFragmentManager(), DvrHalfSizedDialogFragment.DIALOG_TAG); } } - /** - * Checks whether channel watch conflict dialog is open or not. - */ + /** Checks whether channel watch conflict dialog is open or not. */ public static boolean isChannelWatchConflictDialogShown(MainActivity activity) { - return activity.getOverlayManager().getCurrentDialog() instanceof - DvrChannelWatchConflictDialogFragment; + return activity.getOverlayManager().getCurrentDialog() + instanceof DvrChannelWatchConflictDialogFragment; } - private static ScheduledRecording getEarliestScheduledRecording(List<ScheduledRecording> - recordings) { + private static ScheduledRecording getEarliestScheduledRecording( + List<ScheduledRecording> recordings) { ScheduledRecording earlistScheduledRecording = null; if (!recordings.isEmpty()) { - Collections.sort(recordings, - ScheduledRecording.START_TIME_THEN_PRIORITY_THEN_ID_COMPARATOR); + Collections.sort( + recordings, ScheduledRecording.START_TIME_THEN_PRIORITY_THEN_ID_COMPARATOR); earlistScheduledRecording = recordings.get(0); } return earlistScheduledRecording; @@ -378,10 +388,10 @@ public class DvrUiHelper { * @param programId the ID of the recorded program going to be played. * @param seekTimeMs the seek position to initial playback. * @param pinChecked {@code true} if the pin code for parental controls has already been - * verified, otherwise {@code false}. + * verified, otherwise {@code false}. */ - public static void startPlaybackActivity(Context context, long programId, - long seekTimeMs, boolean pinChecked) { + public static void startPlaybackActivity( + Context context, long programId, long seekTimeMs, boolean pinChecked) { Intent intent = new Intent(context, DvrPlaybackActivity.class); intent.putExtra(Utils.EXTRA_KEY_RECORDED_PROGRAM_ID, programId); if (seekTimeMs != TvInputManager.TIME_SHIFT_INVALID_TIME) { @@ -391,51 +401,52 @@ public class DvrUiHelper { context.startActivity(intent); } - /** - * Shows the schedules activity to resolve the tune conflict. - */ + /** Shows the schedules activity to resolve the tune conflict. */ public static void startSchedulesActivityForTuneConflict(Context context, Channel channel) { if (channel == null) { return; } - List<ScheduledRecording> conflicts = TvApplication.getSingletons(context).getDvrManager() - .getConflictingSchedulesForTune(channel.getId()); + List<ScheduledRecording> conflicts = + TvSingletons.getSingletons(context) + .getDvrManager() + .getConflictingSchedulesForTune(channel.getId()); startSchedulesActivity(context, getEarliestScheduledRecording(conflicts)); } - /** - * Shows the schedules activity to resolve the one time recording conflict. - */ - public static void startSchedulesActivityForOneTimeRecordingConflict(Context context, - List<ScheduledRecording> conflicts) { + /** Shows the schedules activity to resolve the one time recording conflict. */ + public static void startSchedulesActivityForOneTimeRecordingConflict( + Context context, List<ScheduledRecording> conflicts) { startSchedulesActivity(context, getEarliestScheduledRecording(conflicts)); } - /** - * Shows the schedules activity with full schedule. - */ - public static void startSchedulesActivity(Context context, ScheduledRecording - focusedScheduledRecording) { + /** Shows the schedules activity with full schedule. */ + public static void startDvrHistoryActivity(Context context) { + Intent intent = new Intent(context, DvrHistoryActivity.class); + context.startActivity(intent); + } + + /** Shows the schedules activity with full schedule. */ + public static void startSchedulesActivity( + Context context, ScheduledRecording focusedScheduledRecording) { Intent intent = new Intent(context, DvrSchedulesActivity.class); - intent.putExtra(DvrSchedulesActivity.KEY_SCHEDULES_TYPE, - DvrSchedulesActivity.TYPE_FULL_SCHEDULE); + intent.putExtra( + DvrSchedulesActivity.KEY_SCHEDULES_TYPE, DvrSchedulesActivity.TYPE_FULL_SCHEDULE); if (focusedScheduledRecording != null) { - intent.putExtra(DvrSchedulesFragment.SCHEDULES_KEY_SCHEDULED_RECORDING, + intent.putExtra( + DvrSchedulesFragment.SCHEDULES_KEY_SCHEDULED_RECORDING, focusedScheduledRecording); } context.startActivity(intent); } - /** - * Shows the schedules activity for series recording. - */ - public static void startSchedulesActivityForSeries(Context context, - SeriesRecording seriesRecording) { + /** Shows the schedules activity for series recording. */ + public static void startSchedulesActivityForSeries( + Context context, SeriesRecording seriesRecording) { Intent intent = new Intent(context, DvrSchedulesActivity.class); - intent.putExtra(DvrSchedulesActivity.KEY_SCHEDULES_TYPE, - DvrSchedulesActivity.TYPE_SERIES_SCHEDULE); - intent.putExtra(DvrSeriesSchedulesFragment.SERIES_SCHEDULES_KEY_SERIES_RECORDING, - seriesRecording); + intent.putExtra( + DvrSchedulesActivity.KEY_SCHEDULES_TYPE, DvrSchedulesActivity.TYPE_SERIES_SCHEDULE); + intent.putExtra( + DvrSeriesSchedulesFragment.SERIES_SCHEDULES_KEY_SERIES_RECORDING, seriesRecording); context.startActivity(intent); } @@ -444,93 +455,125 @@ public class DvrUiHelper { * * @param programs list of programs which belong to the series. */ - public static void startSeriesSettingsActivity(Context context, long seriesRecordingId, - @Nullable List<Program> programs, boolean removeEmptySeriesSchedule, - boolean isWindowTranslucent, boolean showViewScheduleOptionInDialog, + public static void startSeriesSettingsActivity( + Context context, + long seriesRecordingId, + @Nullable List<Program> programs, + boolean removeEmptySeriesSchedule, + boolean isWindowTranslucent, + boolean showViewScheduleOptionInDialog, Program currentProgram) { - SeriesRecording series = TvApplication.getSingletons(context).getDvrDataManager() - .getSeriesRecording(seriesRecordingId); + SeriesRecording series = + TvSingletons.getSingletons(context) + .getDvrDataManager() + .getSeriesRecording(seriesRecordingId); if (series == null) { return; } if (programs != null) { - startSeriesSettingsActivityInternal(context, seriesRecordingId, programs, - removeEmptySeriesSchedule, isWindowTranslucent, - showViewScheduleOptionInDialog, currentProgram); + startSeriesSettingsActivityInternal( + context, + seriesRecordingId, + programs, + removeEmptySeriesSchedule, + isWindowTranslucent, + showViewScheduleOptionInDialog, + currentProgram); } else { EpisodicProgramLoadTask episodicProgramLoadTask = new EpisodicProgramLoadTask(context, series) { - @Override - protected void onPostExecute(List<Program> loadedPrograms) { - sProgressDialog.dismiss(); - sProgressDialog = null; - startSeriesSettingsActivityInternal(context, seriesRecordingId, - loadedPrograms == null ? Collections.EMPTY_LIST : loadedPrograms, - removeEmptySeriesSchedule, isWindowTranslucent, - showViewScheduleOptionInDialog, currentProgram); - } - }.setLoadCurrentProgram(true) - .setLoadDisallowedProgram(true) - .setLoadScheduledEpisode(true) - .setIgnoreChannelOption(true); - sProgressDialog = ProgressDialog.show(context, null, context.getString( - R.string.dvr_series_progress_message_reading_programs), true, true, - new DialogInterface.OnCancelListener() { @Override - public void onCancel(DialogInterface dialogInterface) { - episodicProgramLoadTask.cancel(true); + protected void onPostExecute(List<Program> loadedPrograms) { + sProgressDialog.dismiss(); sProgressDialog = null; + startSeriesSettingsActivityInternal( + context, + seriesRecordingId, + loadedPrograms == null + ? Collections.EMPTY_LIST + : loadedPrograms, + removeEmptySeriesSchedule, + isWindowTranslucent, + showViewScheduleOptionInDialog, + currentProgram); } - }); + }.setLoadCurrentProgram(true) + .setLoadDisallowedProgram(true) + .setLoadScheduledEpisode(true) + .setIgnoreChannelOption(true); + sProgressDialog = + ProgressDialog.show( + context, + null, + context.getString( + R.string.dvr_series_progress_message_reading_programs), + true, + true, + new DialogInterface.OnCancelListener() { + @Override + public void onCancel(DialogInterface dialogInterface) { + episodicProgramLoadTask.cancel(true); + sProgressDialog = null; + } + }); episodicProgramLoadTask.execute(); } } - private static void startSeriesSettingsActivityInternal(Context context, long seriesRecordingId, - @NonNull List<Program> programs, boolean removeEmptySeriesSchedule, - boolean isWindowTranslucent, boolean showViewScheduleOptionInDialog, + private static void startSeriesSettingsActivityInternal( + Context context, + long seriesRecordingId, + @NonNull List<Program> programs, + boolean removeEmptySeriesSchedule, + boolean isWindowTranslucent, + boolean showViewScheduleOptionInDialog, Program currentProgram) { - SoftPreconditions.checkState(programs != null, - TAG, "Start series settings activity but programs is null"); + SoftPreconditions.checkState( + programs != null, TAG, "Start series settings activity but programs is null"); Intent intent = new Intent(context, DvrSeriesSettingsActivity.class); intent.putExtra(DvrSeriesSettingsActivity.SERIES_RECORDING_ID, seriesRecordingId); BigArguments.reset(); BigArguments.setArgument(DvrSeriesSettingsActivity.PROGRAM_LIST, programs); - intent.putExtra(DvrSeriesSettingsActivity.REMOVE_EMPTY_SERIES_RECORDING, - removeEmptySeriesSchedule); + intent.putExtra( + DvrSeriesSettingsActivity.REMOVE_EMPTY_SERIES_RECORDING, removeEmptySeriesSchedule); intent.putExtra(DvrSeriesSettingsActivity.IS_WINDOW_TRANSLUCENT, isWindowTranslucent); - intent.putExtra(DvrSeriesSettingsActivity.SHOW_VIEW_SCHEDULE_OPTION_IN_DIALOG, + intent.putExtra( + DvrSeriesSettingsActivity.SHOW_VIEW_SCHEDULE_OPTION_IN_DIALOG, showViewScheduleOptionInDialog); intent.putExtra(DvrSeriesSettingsActivity.CURRENT_PROGRAM, currentProgram); context.startActivity(intent); } - /** - * Shows "series recording scheduled" dialog activity. - */ - public static void StartSeriesScheduledDialogActivity(Context context, - SeriesRecording seriesRecording, boolean showViewScheduleOptionInDialog, + /** Shows "series recording scheduled" dialog activity. */ + public static void startSeriesScheduledDialogActivity( + Context context, + SeriesRecording seriesRecording, + boolean showViewScheduleOptionInDialog, List<Program> programs) { if (seriesRecording == null) { return; } Intent intent = new Intent(context, DvrSeriesScheduledDialogActivity.class); - intent.putExtra(DvrSeriesScheduledDialogActivity.SERIES_RECORDING_ID, - seriesRecording.getId()); - intent.putExtra(DvrSeriesScheduledDialogActivity.SHOW_VIEW_SCHEDULE_OPTION, + intent.putExtra( + DvrSeriesScheduledDialogActivity.SERIES_RECORDING_ID, seriesRecording.getId()); + intent.putExtra( + DvrSeriesScheduledDialogActivity.SHOW_VIEW_SCHEDULE_OPTION, showViewScheduleOptionInDialog); BigArguments.reset(); - BigArguments.setArgument(DvrSeriesScheduledFragment.SERIES_SCHEDULED_KEY_PROGRAMS, - programs); + BigArguments.setArgument( + DvrSeriesScheduledFragment.SERIES_SCHEDULED_KEY_PROGRAMS, programs); context.startActivity(intent); } /** - * Shows the details activity for the DVR items. The type of DVR items may be - * {@link ScheduledRecording}, {@link RecordedProgram}, or {@link SeriesRecording}. + * Shows the details activity for the DVR items. The type of DVR items may be {@link + * ScheduledRecording}, {@link RecordedProgram}, or {@link SeriesRecording}. */ - public static void startDetailsActivity(Activity activity, Object dvrItem, - @Nullable ImageView imageView, boolean hideViewSchedule) { + public static void startDetailsActivity( + Activity activity, + Object dvrItem, + @Nullable ImageView imageView, + boolean hideViewSchedule) { if (dvrItem == null) { return; } @@ -544,6 +587,17 @@ public class DvrUiHelper { viewType = DvrDetailsActivity.SCHEDULED_RECORDING_VIEW; } else if (schedule.getState() == ScheduledRecording.STATE_RECORDING_IN_PROGRESS) { viewType = DvrDetailsActivity.CURRENT_RECORDING_VIEW; + } else if (schedule.getState() == ScheduledRecording.STATE_RECORDING_FINISHED + && schedule.getRecordedProgramId() != null) { + recordingId = schedule.getRecordedProgramId(); + viewType = DvrDetailsActivity.RECORDED_PROGRAM_VIEW; + } else if (schedule.getState() == ScheduledRecording.STATE_RECORDING_FAILED) { + viewType = DvrDetailsActivity.SCHEDULED_RECORDING_VIEW; + hideViewSchedule = true; + // TODO(b/72638385): pass detailed error message + intent.putExtra( + DvrDetailsActivity.EXTRA_FAILED_MESSAGE, + activity.getString(R.string.dvr_recording_failed)); } else { return; } @@ -561,89 +615,108 @@ public class DvrUiHelper { intent.putExtra(DvrDetailsActivity.HIDE_VIEW_SCHEDULE, hideViewSchedule); Bundle bundle = null; if (imageView != null) { - bundle = ActivityOptionsCompat.makeSceneTransitionAnimation(activity, imageView, - DvrDetailsActivity.SHARED_ELEMENT_NAME).toBundle(); + bundle = + ActivityOptionsCompat.makeSceneTransitionAnimation( + activity, imageView, DvrDetailsActivity.SHARED_ELEMENT_NAME) + .toBundle(); } activity.startActivity(intent, bundle); } - /** - * Shows the cancel all dialog for series schedules list. - */ - public static void showCancelAllSeriesRecordingDialog(DvrSchedulesActivity activity, - SeriesRecording seriesRecording) { + /** Shows the cancel all dialog for series schedules list. */ + public static void showCancelAllSeriesRecordingDialog( + DvrSchedulesActivity activity, SeriesRecording seriesRecording) { DvrStopSeriesRecordingDialogFragment dvrStopSeriesRecordingDialogFragment = new DvrStopSeriesRecordingDialogFragment(); Bundle arguments = new Bundle(); - arguments.putParcelable(DvrStopSeriesRecordingFragment.KEY_SERIES_RECORDING, - seriesRecording); + arguments.putParcelable( + DvrStopSeriesRecordingFragment.KEY_SERIES_RECORDING, seriesRecording); dvrStopSeriesRecordingDialogFragment.setArguments(arguments); - dvrStopSeriesRecordingDialogFragment.show(activity.getFragmentManager(), - DvrStopSeriesRecordingDialogFragment.DIALOG_TAG); + dvrStopSeriesRecordingDialogFragment.show( + activity.getFragmentManager(), DvrStopSeriesRecordingDialogFragment.DIALOG_TAG); } - /** - * Shows the series deletion activity. - */ + /** Shows the series deletion activity. */ public static void startSeriesDeletionActivity(Context context, long seriesRecordingId) { Intent intent = new Intent(context, DvrSeriesDeletionActivity.class); intent.putExtra(DvrSeriesDeletionActivity.SERIES_RECORDING_ID, seriesRecordingId); context.startActivity(intent); } - public static void showAddScheduleToast(Context context, - String title, long startTimeMs, long endTimeMs) { - String msg = (startTimeMs > System.currentTimeMillis()) ? - context.getString(R.string.dvr_msg_program_scheduled, title) - : context.getString(R.string.dvr_msg_current_program_scheduled, title, - Utils.toTimeString(endTimeMs, false)); + public static void showAddScheduleToast( + Context context, String title, long startTimeMs, long endTimeMs) { + String msg = + (startTimeMs > System.currentTimeMillis()) + ? context.getString(R.string.dvr_msg_program_scheduled, title) + : context.getString( + R.string.dvr_msg_current_program_scheduled, + title, + Utils.toTimeString(endTimeMs, false)); Toast.makeText(context, msg, Toast.LENGTH_SHORT).show(); } - /** - * Returns the styled schedule's title with its season and episode number. - */ - public static CharSequence getStyledTitleWithEpisodeNumber(Context context, - ScheduledRecording schedule, int episodeNumberStyleResId) { - return getStyledTitleWithEpisodeNumber(context, schedule.getProgramTitle(), - schedule.getSeasonNumber(), schedule.getEpisodeNumber(), episodeNumberStyleResId); + /** Returns the styled schedule's title with its season and episode number. */ + public static CharSequence getStyledTitleWithEpisodeNumber( + Context context, ScheduledRecording schedule, int episodeNumberStyleResId) { + return getStyledTitleWithEpisodeNumber( + context, + schedule.getProgramTitle(), + schedule.getSeasonNumber(), + schedule.getEpisodeNumber(), + episodeNumberStyleResId); } - /** - * Returns the styled program's title with its season and episode number. - */ - public static CharSequence getStyledTitleWithEpisodeNumber(Context context, - BaseProgram program, int episodeNumberStyleResId) { - return getStyledTitleWithEpisodeNumber(context, program.getTitle(), - program.getSeasonNumber(), program.getEpisodeNumber(), episodeNumberStyleResId); + /** Returns the styled program's title with its season and episode number. */ + public static CharSequence getStyledTitleWithEpisodeNumber( + Context context, BaseProgram program, int episodeNumberStyleResId) { + return getStyledTitleWithEpisodeNumber( + context, + program.getTitle(), + program.getSeasonNumber(), + program.getEpisodeNumber(), + episodeNumberStyleResId); } @NonNull - public static CharSequence getStyledTitleWithEpisodeNumber(Context context, String title, - String seasonNumber, String episodeNumber, int episodeNumberStyleResId) { + public static CharSequence getStyledTitleWithEpisodeNumber( + Context context, + String title, + String seasonNumber, + String episodeNumber, + int episodeNumberStyleResId) { if (TextUtils.isEmpty(title)) { return ""; } SpannableStringBuilder builder; if (TextUtils.isEmpty(seasonNumber) || seasonNumber.equals("0")) { - builder = TextUtils.isEmpty(episodeNumber) ? new SpannableStringBuilder(title) : - new SpannableStringBuilder(Html.fromHtml( - context.getString(R.string.program_title_with_episode_number_no_season, - title, episodeNumber))); + builder = + TextUtils.isEmpty(episodeNumber) + ? new SpannableStringBuilder(title) + : new SpannableStringBuilder(Html.fromHtml(context.getString( + R.string.program_title_with_episode_number_no_season, + title, + episodeNumber))); } else { - builder = new SpannableStringBuilder(Html.fromHtml( - context.getString(R.string.program_title_with_episode_number, - title, seasonNumber, episodeNumber))); + builder = + new SpannableStringBuilder( + Html.fromHtml( + context.getString( + R.string.program_title_with_episode_number, + title, + seasonNumber, + episodeNumber))); } Object[] spans = builder.getSpans(0, builder.length(), Object.class); if (spans.length > 0) { if (episodeNumberStyleResId != 0) { - builder.setSpan(new TextAppearanceSpan(context, episodeNumberStyleResId), - builder.getSpanStart(spans[0]), builder.getSpanEnd(spans[0]), + builder.setSpan( + new TextAppearanceSpan(context, episodeNumberStyleResId), + builder.getSpanStart(spans[0]), + builder.getSpanEnd(spans[0]), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); } builder.removeSpan(spans[0]); } return new SpannableString(builder); } -}
\ No newline at end of file +} |