diff options
Diffstat (limited to 'src/com/android/tv/dvr/ui')
7 files changed, 503 insertions, 31 deletions
diff --git a/src/com/android/tv/dvr/ui/DvrAlreadyRecordedFragment.java b/src/com/android/tv/dvr/ui/DvrAlreadyRecordedFragment.java index 1f4faf31..028265b2 100644 --- a/src/com/android/tv/dvr/ui/DvrAlreadyRecordedFragment.java +++ b/src/com/android/tv/dvr/ui/DvrAlreadyRecordedFragment.java @@ -28,12 +28,16 @@ import androidx.leanback.widget.GuidedAction; import com.android.tv.R; import com.android.tv.TvSingletons; +import com.android.tv.common.flags.DvrFlags; import com.android.tv.data.api.Program; import com.android.tv.dvr.DvrManager; import com.android.tv.dvr.data.RecordedProgram; import java.util.List; +import javax.inject.Inject; +import dagger.android.AndroidInjection; + /** * A fragment which notifies the user that the same episode has already been scheduled. * @@ -47,9 +51,11 @@ public class DvrAlreadyRecordedFragment extends DvrGuidedStepFragment { private Program mProgram; private RecordedProgram mDuplicate; + @Inject DvrFlags mDvrFlags; @Override public void onAttach(Context context) { + AndroidInjection.inject(this); super.onAttach(context); mProgram = getArguments().getParcelable(DvrHalfSizedDialogFragment.KEY_PROGRAM); DvrManager dvrManager = TvSingletons.getSingletons(context).getDvrManager(); @@ -59,13 +65,17 @@ public class DvrAlreadyRecordedFragment extends DvrGuidedStepFragment { mProgram.getSeasonNumber(), mProgram.getEpisodeNumber()); if (mDuplicate == null) { - dvrManager.addSchedule(mProgram); - DvrUiHelper.showAddScheduleToast( - context, - mProgram.getTitle(), - mProgram.getStartTimeUtcMillis(), - mProgram.getEndTimeUtcMillis()); - dismissDialog(); + if (mDvrFlags.startEarlyEndLateEnabled()) { + DvrUiHelper.startRecordingSettingsActivity(getContext(), mProgram); + } else { + dvrManager.addSchedule(mProgram); + DvrUiHelper.showAddScheduleToast( + context, + mProgram.getTitle(), + mProgram.getStartTimeUtcMillis(), + mProgram.getEndTimeUtcMillis()); + dismissDialog(); + } } } @@ -101,7 +111,11 @@ public class DvrAlreadyRecordedFragment extends DvrGuidedStepFragment { @Override public void onTrackedGuidedActionClicked(GuidedAction action) { if (action.getId() == ACTION_RECORD_ANYWAY) { - getDvrManager().addSchedule(mProgram); + if (mDvrFlags.startEarlyEndLateEnabled()) { + DvrUiHelper.startRecordingSettingsActivity(getContext(), mProgram); + } else { + getDvrManager().addSchedule(mProgram); + } } else if (action.getId() == ACTION_WATCH) { DvrUiHelper.startDetailsActivity(getActivity(), mDuplicate, null, false); } diff --git a/src/com/android/tv/dvr/ui/DvrAlreadyScheduledFragment.java b/src/com/android/tv/dvr/ui/DvrAlreadyScheduledFragment.java index 56ffc884..4a3a5d4d 100644 --- a/src/com/android/tv/dvr/ui/DvrAlreadyScheduledFragment.java +++ b/src/com/android/tv/dvr/ui/DvrAlreadyScheduledFragment.java @@ -29,12 +29,16 @@ import androidx.leanback.widget.GuidedAction; import com.android.tv.R; import com.android.tv.TvSingletons; +import com.android.tv.common.flags.DvrFlags; import com.android.tv.data.api.Program; import com.android.tv.dvr.DvrManager; import com.android.tv.dvr.data.ScheduledRecording; import java.util.List; +import javax.inject.Inject; +import dagger.android.AndroidInjection; + /** * A fragment which notifies the user that the same episode has already been scheduled. * @@ -48,9 +52,11 @@ public class DvrAlreadyScheduledFragment extends DvrGuidedStepFragment { private Program mProgram; private ScheduledRecording mDuplicate; + @Inject DvrFlags mDvrFlags; @Override public void onAttach(Context context) { + AndroidInjection.inject(this); super.onAttach(context); mProgram = getArguments().getParcelable(DvrHalfSizedDialogFragment.KEY_PROGRAM); DvrManager dvrManager = TvSingletons.getSingletons(context).getDvrManager(); @@ -60,13 +66,17 @@ public class DvrAlreadyScheduledFragment extends DvrGuidedStepFragment { mProgram.getSeasonNumber(), mProgram.getEpisodeNumber()); if (mDuplicate == null) { - dvrManager.addSchedule(mProgram); - DvrUiHelper.showAddScheduleToast( - context, - mProgram.getTitle(), - mProgram.getStartTimeUtcMillis(), - mProgram.getEndTimeUtcMillis()); - dismissDialog(); + if (mDvrFlags.startEarlyEndLateEnabled()) { + DvrUiHelper.startRecordingSettingsActivity(getContext(), mProgram); + } else { + dvrManager.addSchedule(mProgram); + DvrUiHelper.showAddScheduleToast( + context, + mProgram.getTitle(), + mProgram.getStartTimeUtcMillis(), + mProgram.getEndTimeUtcMillis()); + dismissDialog(); + } } } @@ -108,10 +118,18 @@ public class DvrAlreadyScheduledFragment extends DvrGuidedStepFragment { @Override public void onTrackedGuidedActionClicked(GuidedAction action) { if (action.getId() == ACTION_RECORD_ANYWAY) { - getDvrManager().addSchedule(mProgram); + if (mDvrFlags.startEarlyEndLateEnabled()) { + DvrUiHelper.startRecordingSettingsActivity(getContext(), mProgram); + } else { + getDvrManager().addSchedule(mProgram); + } } else if (action.getId() == ACTION_RECORD_INSTEAD) { - getDvrManager().addSchedule(mProgram); getDvrManager().removeScheduledRecording(mDuplicate); + if (mDvrFlags.startEarlyEndLateEnabled()) { + DvrUiHelper.startRecordingSettingsActivity(getContext(), mProgram); + } else { + getDvrManager().addSchedule(mProgram); + } } dismissDialog(); } diff --git a/src/com/android/tv/dvr/ui/DvrConflictFragment.java b/src/com/android/tv/dvr/ui/DvrConflictFragment.java index 5e0a96bb..47a436da 100644 --- a/src/com/android/tv/dvr/ui/DvrConflictFragment.java +++ b/src/com/android/tv/dvr/ui/DvrConflictFragment.java @@ -92,6 +92,10 @@ public abstract class DvrConflictFragment extends DvrGuidedStepFragment { getContext(), getConflicts()); } dismissDialog(); + // Finish the Recording setting Activity on dismissal. + if (getActivity() instanceof DvrRecordingSettingsActivity) { + getActivity().finish(); + } } @Override diff --git a/src/com/android/tv/dvr/ui/DvrRecordingSettingsActivity.java b/src/com/android/tv/dvr/ui/DvrRecordingSettingsActivity.java new file mode 100644 index 00000000..9cf0bad2 --- /dev/null +++ b/src/com/android/tv/dvr/ui/DvrRecordingSettingsActivity.java @@ -0,0 +1,60 @@ +/* + * Copyright (C) 2019 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. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * 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 + */ + +package com.android.tv.dvr.ui; + +import android.app.Activity; +import android.graphics.drawable.ColorDrawable; +import android.os.Bundle; +import androidx.leanback.app.GuidedStepFragment; +import com.android.tv.R; +import com.android.tv.Starter; + +/** Activity to show details view in DVR. */ +public class DvrRecordingSettingsActivity extends Activity { + + /** + * Name of the boolean flag to decide if the setting fragment should be translucent. Type: + * boolean + */ + public static final String IS_WINDOW_TRANSLUCENT = "windows_translucent"; + /** + * Name of the program added for recording. + */ + public static final String PROGRAM = "program"; + + @Override + public void onCreate(Bundle savedInstanceState) { + Starter.start(this); + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_dvr_series_settings); + + if (savedInstanceState == null) { + DvrRecordingSettingsFragment settingFragment = new DvrRecordingSettingsFragment(); + settingFragment.setArguments(getIntent().getExtras()); + GuidedStepFragment.addAsRoot(this, settingFragment, R.id.dvr_settings_view_frame); + } + } + + @Override + public void onAttachedToWindow() { + if (!getIntent().getExtras().getBoolean(IS_WINDOW_TRANSLUCENT, true)) { + getWindow() + .setBackgroundDrawable( + new ColorDrawable(getColor(R.color.common_tv_background))); + } + } +} diff --git a/src/com/android/tv/dvr/ui/DvrRecordingSettingsFragment.java b/src/com/android/tv/dvr/ui/DvrRecordingSettingsFragment.java new file mode 100644 index 00000000..8e651b81 --- /dev/null +++ b/src/com/android/tv/dvr/ui/DvrRecordingSettingsFragment.java @@ -0,0 +1,342 @@ +/* + * Copyright (C) 2019 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. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * 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. + */ + +package com.android.tv.dvr.ui; + +import android.annotation.TargetApi; +import android.app.DialogFragment; +import android.content.Context; +import android.os.Build; +import android.os.Bundle; + +import com.android.tv.MainActivity; +import com.android.tv.R; +import com.android.tv.TvSingletons; +import com.android.tv.data.ProgramImpl; +import com.android.tv.data.api.Program; +import com.android.tv.dialog.SafeDismissDialogFragment; +import com.android.tv.dvr.DvrManager; +import com.android.tv.dvr.data.ScheduledRecording; + +import java.util.ArrayList; +import java.util.List; +import java.util.concurrent.TimeUnit; + +import androidx.leanback.app.GuidedStepFragment; +import androidx.leanback.widget.GuidanceStylist.Guidance; +import androidx.leanback.widget.GuidedAction; +import androidx.leanback.widget.GuidedActionsStylist; + +/** Fragment for DVR recording settings. */ +@TargetApi(Build.VERSION_CODES.N) +@SuppressWarnings("AndroidApiChecker") // TODO(b/32513850) remove when error prone is updated +public class DvrRecordingSettingsFragment extends GuidedStepFragment { + private static final String TAG = "RecordingSettingsFragment"; + + private static final long ACTION_ID_START_EARLY = 100; + private static final long ACTION_ID_END_LATE = 101; + + private static final int SUB_ACTION_ID_START_ON_TIME = 1; + private static final int SUB_ACTION_ID_START_ONE_MIN = 2; + private static final int SUB_ACTION_ID_START_FIVE_MIN = 3; + private static final int SUB_ACTION_ID_START_FIFTEEN_MIN = 4; + private static final int SUB_ACTION_ID_START_HALF_HOUR = 5; + + private static final int SUB_ACTION_ID_END_ON_TIME = 6; + private static final int SUB_ACTION_ID_END_ONE_MIN = 7; + private static final int SUB_ACTION_ID_END_FIFTEEN_MIN = 8; + private static final int SUB_ACTION_ID_END_HALF_HOUR = 9; + private static final int SUB_ACTION_ID_END_ONE_HOUR = 10; + private static final int SUB_ACTION_ID_END_TWO_HOURS = 11; + private static final int SUB_ACTION_ID_END_THREE_HOURS = 12; + + private Program mProgram; + private String mFragmentTitle; + private String mStartEarlyActionTitle; + private String mEndLateActionTitle; + private String mTimeActionOnTimeText; + private String mTimeActionOneMinText; + private String mTimeActionFiveMinText; + private String mTimeActionFifteenMinText; + private String mTimeActionHalfHourText; + private String mTimeActionOneHourText; + private String mTimeActionTwoHoursText; + private String mTimeActionThreeHoursText; + + private GuidedAction mStartEarlyGuidedAction; + private GuidedAction mEndLateGuidedAction; + private long mStartEarlyTime = 0; + private long mEndLateTime = 0; + private DvrManager mDvrManager; + + @Override + public void onAttach(Context context) { + super.onAttach(context); + mDvrManager = TvSingletons.getSingletons(getContext()).getDvrManager(); + mProgram = getArguments().getParcelable(DvrRecordingSettingsActivity.PROGRAM); + if (mProgram == null) { + getActivity().finish(); + return; + } + mFragmentTitle = getString(R.string.dvr_recording_settings_title); + mStartEarlyActionTitle = getString(R.string.dvr_start_early_title); + mEndLateActionTitle = getString(R.string.dvr_end_late_title); + mTimeActionOnTimeText = getString(R.string.dvr_recording_settings_time_none); + mTimeActionOneMinText = getString(R.string.dvr_recording_settings_time_one_min); + mTimeActionFiveMinText = getString(R.string.dvr_recording_settings_time_five_mins); + mTimeActionFifteenMinText = getString(R.string.dvr_recording_settings_time_fifteen_mins); + mTimeActionHalfHourText = getString(R.string.dvr_recording_settings_time_half_hour); + mTimeActionOneHourText = getString(R.string.dvr_recording_settings_time_one_hour); + mTimeActionTwoHoursText = getString(R.string.dvr_recording_settings_time_two_hours); + mTimeActionThreeHoursText = getString(R.string.dvr_recording_settings_time_three_hours); + } + + @Override + public Guidance onCreateGuidance(Bundle savedInstanceState) { + String breadcrumb = mProgram.getTitle(); + String title = mFragmentTitle; + String description = mProgram.getEpisodeTitle() + "\n" + mProgram.getDescription(); + return new Guidance(title, description, breadcrumb, null); + } + + @Override + public void onCreateActions(List<GuidedAction> actions, Bundle savedInstanceState) { + mStartEarlyGuidedAction = + new GuidedAction.Builder(getActivity()) + .id(ACTION_ID_START_EARLY) + .title(mStartEarlyActionTitle) + .description(mTimeActionOnTimeText) + .subActions(buildChannelSubActionStart()) + .build(); + actions.add(mStartEarlyGuidedAction); + + mEndLateGuidedAction = + new GuidedAction.Builder(getActivity()) + .id(ACTION_ID_END_LATE) + .title(mEndLateActionTitle) + .description(mTimeActionOnTimeText) + .subActions(buildChannelSubActionEnd()) + .build(); + actions.add(mEndLateGuidedAction); + } + + @Override + public void onCreateButtonActions(List<GuidedAction> actions, Bundle savedInstanceState) { + actions.add( + new GuidedAction.Builder(getActivity()) + .clickAction(GuidedAction.ACTION_ID_OK) + .build()); + actions.add( + new GuidedAction.Builder(getActivity()) + .clickAction(GuidedAction.ACTION_ID_CANCEL) + .build()); + } + + @Override + public void onGuidedActionClicked(GuidedAction action) { + long actionId = action.getId(); + if (actionId == GuidedAction.ACTION_ID_OK) { + long startEarlyTimeMs = TimeUnit.MINUTES.toMillis(mStartEarlyTime); + long endLateTimeMs = TimeUnit.MINUTES.toMillis(mEndLateTime); + long startTimeMs = mProgram.getStartTimeUtcMillis() - startEarlyTimeMs; + if (startTimeMs < System.currentTimeMillis()) { + startTimeMs = System.currentTimeMillis(); + startEarlyTimeMs = mProgram.getStartTimeUtcMillis() - startTimeMs; + } + long endTimeMs = mProgram.getEndTimeUtcMillis() + endLateTimeMs; + Program customizedProgram = + new ProgramImpl.Builder(mProgram) + .setStartTimeUtcMillis(startTimeMs) + .setEndTimeUtcMillis(endTimeMs) + .build(); + mDvrManager.addSchedule(customizedProgram , startEarlyTimeMs, endLateTimeMs); + List<ScheduledRecording> conflicts = + mDvrManager.getConflictingSchedules(customizedProgram); + if (conflicts.isEmpty()) { + DvrUiHelper.showAddScheduleToast( + getContext(), + customizedProgram.getTitle(), + customizedProgram.getStartTimeUtcMillis(), + customizedProgram.getEndTimeUtcMillis()); + dismissDialog(); + finishGuidedStepFragments(); + } else { + DvrUiHelper.showScheduleConflictDialog(getActivity(), customizedProgram); + } + } else if (actionId == GuidedAction.ACTION_ID_CANCEL) { + finishGuidedStepFragments(); + } + } + + @Override + public boolean onSubGuidedActionClicked(GuidedAction action) { + long actionId = action.getId(); + switch ((int) actionId) { + case SUB_ACTION_ID_START_ON_TIME : + mStartEarlyTime = 0; + updateGuidedActions(true, mTimeActionOnTimeText); + break; + case SUB_ACTION_ID_START_ONE_MIN : + mStartEarlyTime = 1; + updateGuidedActions(true, mTimeActionOneMinText); + break; + case SUB_ACTION_ID_START_FIVE_MIN : + mStartEarlyTime = 5; + updateGuidedActions(true, mTimeActionFiveMinText); + break; + case SUB_ACTION_ID_START_FIFTEEN_MIN : + mStartEarlyTime = 15; + updateGuidedActions(true, mTimeActionFifteenMinText); + break; + case SUB_ACTION_ID_START_HALF_HOUR : + mStartEarlyTime = 30; + updateGuidedActions(true, mTimeActionHalfHourText); + break; + case SUB_ACTION_ID_END_ON_TIME : + mEndLateTime = 0; + updateGuidedActions(false, mTimeActionOnTimeText); + break; + case SUB_ACTION_ID_END_ONE_MIN : + mEndLateTime = 1; + updateGuidedActions(false, mTimeActionOneMinText); + break; + case SUB_ACTION_ID_END_FIFTEEN_MIN : + mEndLateTime = 15; + updateGuidedActions(false, mTimeActionFifteenMinText); + break; + case SUB_ACTION_ID_END_HALF_HOUR : + mEndLateTime = 30; + updateGuidedActions(false, mTimeActionHalfHourText); + break; + case SUB_ACTION_ID_END_ONE_HOUR : + mEndLateTime = 60; + updateGuidedActions(false, mTimeActionOneHourText); + break; + case SUB_ACTION_ID_END_TWO_HOURS : + mEndLateTime = 120; + updateGuidedActions(false, mTimeActionTwoHoursText); + break; + case SUB_ACTION_ID_END_THREE_HOURS : + mEndLateTime = 180; + updateGuidedActions(false, mTimeActionThreeHoursText); + break; + default : + mStartEarlyTime = 0; + mEndLateTime = 0; + updateGuidedActions(true, mTimeActionOnTimeText); + updateGuidedActions(false, mTimeActionOnTimeText); + break; + } + return true; + } + + private void updateGuidedActions(boolean start, CharSequence description) { + if (start) { + mStartEarlyGuidedAction.setDescription(description); + notifyActionChanged(findActionPositionById(ACTION_ID_START_EARLY)); + } else { + mEndLateGuidedAction.setDescription(description); + notifyActionChanged(findActionPositionById(ACTION_ID_END_LATE)); + } + } + + @Override + public GuidedActionsStylist onCreateButtonActionsStylist() { + return new DvrGuidedActionsStylist(true); + } + + private List<GuidedAction> buildChannelSubActionStart() { + List<GuidedAction> timeSubActions = new ArrayList<>(); + timeSubActions.add( + new GuidedAction.Builder(getActivity()) + .id(SUB_ACTION_ID_START_ON_TIME) + .title(mTimeActionOnTimeText) + .build()); + timeSubActions.add( + new GuidedAction.Builder(getActivity()) + .id(SUB_ACTION_ID_START_ONE_MIN) + .title(mTimeActionOneMinText) + .build()); + timeSubActions.add( + new GuidedAction.Builder(getActivity()) + .id(SUB_ACTION_ID_START_FIVE_MIN) + .title(mTimeActionFiveMinText) + .build()); + timeSubActions.add( + new GuidedAction.Builder(getActivity()) + .id(SUB_ACTION_ID_START_FIFTEEN_MIN) + .title(mTimeActionFifteenMinText) + .build()); + timeSubActions.add( + new GuidedAction.Builder(getActivity()) + .id(SUB_ACTION_ID_START_HALF_HOUR) + .title(mTimeActionHalfHourText) + .build()); + return timeSubActions; + } + + private List<GuidedAction> buildChannelSubActionEnd() { + List<GuidedAction> timeSubActions = new ArrayList<>(); + timeSubActions.add( + new GuidedAction.Builder(getActivity()) + .id(SUB_ACTION_ID_END_ON_TIME) + .title(mTimeActionOnTimeText) + .build()); + timeSubActions.add( + new GuidedAction.Builder(getActivity()) + .id(SUB_ACTION_ID_END_ONE_MIN) + .title(mTimeActionOneMinText) + .build()); + timeSubActions.add( + new GuidedAction.Builder(getActivity()) + .id(SUB_ACTION_ID_END_FIFTEEN_MIN) + .title(mTimeActionFifteenMinText) + .build()); + timeSubActions.add( + new GuidedAction.Builder(getActivity()) + .id(SUB_ACTION_ID_END_HALF_HOUR) + .title(mTimeActionHalfHourText) + .build()); + timeSubActions.add( + new GuidedAction.Builder(getActivity()) + .id(SUB_ACTION_ID_END_ONE_HOUR) + .title(mTimeActionOneHourText) + .build()); + timeSubActions.add( + new GuidedAction.Builder(getActivity()) + .id(SUB_ACTION_ID_END_TWO_HOURS) + .title(mTimeActionTwoHoursText) + .build()); + timeSubActions.add( + new GuidedAction.Builder(getActivity()) + .id(SUB_ACTION_ID_END_THREE_HOURS) + .title(mTimeActionThreeHoursText) + .build()); + return timeSubActions; + } + + protected void dismissDialog() { + if (getActivity() instanceof MainActivity) { + SafeDismissDialogFragment currentDialog = + ((MainActivity) getActivity()).getOverlayManager().getCurrentDialog(); + if (currentDialog instanceof DvrHalfSizedDialogFragment) { + currentDialog.dismiss(); + } + } else if (getParentFragment() instanceof DialogFragment) { + ((DialogFragment) getParentFragment()).dismiss(); + } + } +} diff --git a/src/com/android/tv/dvr/ui/DvrScheduleFragment.java b/src/com/android/tv/dvr/ui/DvrScheduleFragment.java index 7131f626..249e63db 100644 --- a/src/com/android/tv/dvr/ui/DvrScheduleFragment.java +++ b/src/com/android/tv/dvr/ui/DvrScheduleFragment.java @@ -31,6 +31,7 @@ import androidx.leanback.widget.GuidedAction; import com.android.tv.R; import com.android.tv.TvSingletons; import com.android.tv.common.SoftPreconditions; +import com.android.tv.common.flags.DvrFlags; import com.android.tv.data.ProgramImpl; import com.android.tv.dvr.DvrManager; import com.android.tv.dvr.data.ScheduledRecording; @@ -40,6 +41,9 @@ import com.android.tv.dvr.ui.DvrConflictFragment.DvrProgramConflictFragment; import java.util.Collections; import java.util.List; +import javax.inject.Inject; +import dagger.android.AndroidInjection; + /** * A fragment which asks the user the type of the recording. * @@ -57,6 +61,7 @@ public class DvrScheduleFragment extends DvrGuidedStepFragment { private ProgramImpl mProgram; private boolean mAddCurrentProgramToSeries; + @Inject DvrFlags mDvrFlags; @Override public void onCreate(Bundle savedInstanceState) { @@ -81,6 +86,12 @@ public class DvrScheduleFragment extends DvrGuidedStepFragment { } @Override + public void onAttach(Context context) { + AndroidInjection.inject(this); + super.onAttach(context); + } + + @Override public int onProvideTheme() { return R.style.Theme_TV_Dvr_GuidedStep_Twoline_Action; } @@ -125,21 +136,28 @@ public class DvrScheduleFragment extends DvrGuidedStepFragment { @Override public void onTrackedGuidedActionClicked(GuidedAction action) { if (action.getId() == ACTION_RECORD_EPISODE) { - getDvrManager().addSchedule(mProgram); - List<ScheduledRecording> conflicts = getDvrManager().getConflictingSchedules(mProgram); - if (conflicts.isEmpty()) { - DvrUiHelper.showAddScheduleToast( - getContext(), - mProgram.getTitle(), - mProgram.getStartTimeUtcMillis(), - mProgram.getEndTimeUtcMillis()); - dismissDialog(); + if (mDvrFlags.startEarlyEndLateEnabled()) { + DvrUiHelper.startRecordingSettingsActivity(getContext(), mProgram); } else { - GuidedStepFragment fragment = new DvrProgramConflictFragment(); - Bundle args = new Bundle(); - args.putParcelable(DvrHalfSizedDialogFragment.KEY_PROGRAM, mProgram); - fragment.setArguments(args); - GuidedStepFragment.add(getFragmentManager(), fragment, R.id.halfsized_dialog_host); + getDvrManager().addSchedule(mProgram); + List<ScheduledRecording> conflicts = getDvrManager().getConflictingSchedules + (mProgram); + + if (conflicts.isEmpty()) { + DvrUiHelper.showAddScheduleToast( + getContext(), + mProgram.getTitle(), + mProgram.getStartTimeUtcMillis(), + mProgram.getEndTimeUtcMillis()); + dismissDialog(); + } else { + GuidedStepFragment fragment = new DvrProgramConflictFragment(); + Bundle args = new Bundle(); + args.putParcelable(DvrHalfSizedDialogFragment.KEY_PROGRAM, mProgram); + fragment.setArguments(args); + GuidedStepFragment.add(getFragmentManager(), fragment, R.id + .halfsized_dialog_host); + } } } else if (action.getId() == ACTION_RECORD_SERIES) { SeriesRecording seriesRecording = diff --git a/src/com/android/tv/dvr/ui/DvrUiHelper.java b/src/com/android/tv/dvr/ui/DvrUiHelper.java index 657abfa2..1ab1d173 100644 --- a/src/com/android/tv/dvr/ui/DvrUiHelper.java +++ b/src/com/android/tv/dvr/ui/DvrUiHelper.java @@ -525,6 +525,22 @@ public class DvrUiHelper { } } + /** + * Shows the episode recording settings activity. + * + * @param program Program to be recorded + */ + public static void startRecordingSettingsActivity( + Context context, + Program program) { + if (program != null) { + Intent intent = new Intent(context, DvrRecordingSettingsActivity.class); + intent.putExtra(DvrRecordingSettingsActivity.IS_WINDOW_TRANSLUCENT, true); + intent.putExtra(DvrRecordingSettingsActivity.PROGRAM, program.toParcelable()); + context.startActivity(intent); + } + } + private static void startSeriesSettingsActivityInternal( Context context, long seriesRecordingId, |