| /* |
| * 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. |
| * 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.content.Context; |
| import android.os.Bundle; |
| import android.support.v17.leanback.app.GuidedStepFragment; |
| import android.support.v17.leanback.widget.GuidedAction; |
| import android.support.v17.leanback.widget.GuidanceStylist.Guidance; |
| import android.view.LayoutInflater; |
| import android.view.View; |
| import android.view.ViewGroup; |
| |
| import com.android.tv.MainActivity; |
| import com.android.tv.R; |
| import com.android.tv.dvr.DvrStorageStatusManager; |
| import com.android.tv.dialog.HalfSizedDialogFragment; |
| import com.android.tv.dvr.ui.DvrConflictFragment.DvrChannelWatchConflictFragment; |
| import com.android.tv.dvr.ui.DvrConflictFragment.DvrProgramConflictFragment; |
| import com.android.tv.guide.ProgramGuide; |
| |
| import java.util.List; |
| |
| public class DvrHalfSizedDialogFragment extends HalfSizedDialogFragment { |
| /** |
| * Key for input ID. |
| * Type: String. |
| */ |
| public static final String KEY_INPUT_ID = "DvrHalfSizedDialogFragment.input_id"; |
| /** |
| * Key for the program. |
| * Type: {@link com.android.tv.data.Program}. |
| */ |
| public static final String KEY_PROGRAM = "DvrHalfSizedDialogFragment.program"; |
| /** |
| * Key for the channel ID. |
| * Type: long. |
| */ |
| public static final String KEY_CHANNEL_ID = "DvrHalfSizedDialogFragment.channel_id"; |
| /** |
| * Key for the recording start time in millisecond. |
| * Type: long. |
| */ |
| public static final String KEY_START_TIME_MS = "DvrHalfSizedDialogFragment.start_time_ms"; |
| /** |
| * Key for the recording end time in millisecond. |
| * Type: long. |
| */ |
| public static final String KEY_END_TIME_MS = "DvrHalfSizedDialogFragment.end_time_ms"; |
| |
| @Override |
| public void onAttach(Context context) { |
| super.onAttach(context); |
| Activity activity = getActivity(); |
| if (activity instanceof MainActivity) { |
| ProgramGuide programGuide = |
| ((MainActivity) activity).getOverlayManager().getProgramGuide(); |
| if (programGuide != null && programGuide.isActive()) { |
| programGuide.cancelHide(); |
| } |
| } |
| } |
| |
| @Override |
| public void onDetach() { |
| super.onDetach(); |
| Activity activity = getActivity(); |
| if (activity instanceof MainActivity) { |
| ProgramGuide programGuide = |
| ((MainActivity) activity).getOverlayManager().getProgramGuide(); |
| if (programGuide != null && programGuide.isActive()) { |
| programGuide.scheduleHide(); |
| } |
| } |
| } |
| |
| public abstract static class DvrGuidedStepDialogFragment extends DvrHalfSizedDialogFragment { |
| private DvrGuidedStepFragment mFragment; |
| |
| @Override |
| public View onCreateView(LayoutInflater inflater, ViewGroup container, |
| Bundle savedInstanceState) { |
| View view = super.onCreateView(inflater, container, savedInstanceState); |
| mFragment = onCreateGuidedStepFragment(); |
| mFragment.setArguments(getArguments()); |
| mFragment.setOnActionClickListener(getOnActionClickListener()); |
| GuidedStepFragment.add(getChildFragmentManager(), |
| mFragment, R.id.halfsized_dialog_host); |
| return view; |
| } |
| |
| @Override |
| public void setOnActionClickListener(OnActionClickListener listener) { |
| super.setOnActionClickListener(listener); |
| if (mFragment != null) { |
| mFragment.setOnActionClickListener(listener); |
| } |
| } |
| |
| protected abstract DvrGuidedStepFragment onCreateGuidedStepFragment(); |
| } |
| |
| /** A dialog fragment for {@link DvrScheduleFragment}. */ |
| public static class DvrScheduleDialogFragment extends DvrGuidedStepDialogFragment { |
| @Override |
| protected DvrGuidedStepFragment onCreateGuidedStepFragment() { |
| return new DvrScheduleFragment(); |
| } |
| } |
| |
| /** A dialog fragment for {@link DvrProgramConflictFragment}. */ |
| public static class DvrProgramConflictDialogFragment extends DvrGuidedStepDialogFragment { |
| @Override |
| protected DvrGuidedStepFragment onCreateGuidedStepFragment() { |
| return new DvrProgramConflictFragment(); |
| } |
| } |
| |
| /** A dialog fragment for {@link DvrChannelWatchConflictFragment}. */ |
| public static class DvrChannelWatchConflictDialogFragment extends DvrGuidedStepDialogFragment { |
| @Override |
| protected DvrGuidedStepFragment onCreateGuidedStepFragment() { |
| return new DvrChannelWatchConflictFragment(); |
| } |
| } |
| |
| /** A dialog fragment for {@link DvrChannelRecordDurationOptionFragment}. */ |
| public static class DvrChannelRecordDurationOptionDialogFragment |
| extends DvrGuidedStepDialogFragment { |
| @Override |
| protected DvrGuidedStepFragment onCreateGuidedStepFragment() { |
| return new DvrChannelRecordDurationOptionFragment(); |
| } |
| } |
| |
| /** A dialog fragment for {@link DvrInsufficientSpaceErrorFragment}. */ |
| public static class DvrInsufficientSpaceErrorDialogFragment |
| extends DvrGuidedStepDialogFragment { |
| @Override |
| protected DvrGuidedStepFragment onCreateGuidedStepFragment() { |
| return new DvrInsufficientSpaceErrorFragment(); |
| } |
| } |
| |
| /** A dialog fragment for {@link DvrMissingStorageErrorFragment}. */ |
| public static class DvrMissingStorageErrorDialogFragment |
| extends DvrGuidedStepDialogFragment { |
| @Override |
| protected DvrGuidedStepFragment onCreateGuidedStepFragment() { |
| return new DvrMissingStorageErrorFragment(); |
| } |
| } |
| |
| /** |
| * A dialog fragment to show error message when there is no enough free space to record. |
| */ |
| public static class DvrNoFreeSpaceErrorDialogFragment |
| extends DvrGuidedStepDialogFragment { |
| @Override |
| protected DvrGuidedStepFragment onCreateGuidedStepFragment() { |
| return new DvrGuidedStepFragment.DvrNoFreeSpaceErrorFragment(); |
| } |
| } |
| |
| /** |
| * A dialog fragment to show error message when the current storage is too small to |
| * support DVR |
| */ |
| public static class DvrSmallSizedStorageErrorDialogFragment |
| extends DvrGuidedStepDialogFragment { |
| @Override |
| protected DvrGuidedStepFragment onCreateGuidedStepFragment() { |
| return new DvrGuidedStepFragment() { |
| @Override |
| public Guidance onCreateGuidance(Bundle savedInstanceState) { |
| String title = getResources().getString( |
| R.string.dvr_error_small_sized_storage_title); |
| String description = getResources().getString( |
| R.string.dvr_error_small_sized_storage_description, |
| DvrStorageStatusManager.MIN_STORAGE_SIZE_FOR_DVR_IN_BYTES / 1024 |
| / 1024 / 1024); |
| return new Guidance(title, description, null, null); |
| } |
| |
| @Override |
| public void onCreateActions(List<GuidedAction> actions, Bundle savedInstanceState) { |
| Activity activity = getActivity(); |
| actions.add(new GuidedAction.Builder(activity) |
| .id(GuidedAction.ACTION_ID_OK) |
| .title(android.R.string.ok) |
| .build()); |
| } |
| |
| @Override |
| public void onGuidedActionClicked(GuidedAction action) { |
| dismissDialog(); |
| } |
| }; |
| } |
| } |
| |
| /** A dialog fragment for {@link DvrStopRecordingFragment}. */ |
| public static class DvrStopRecordingDialogFragment extends DvrGuidedStepDialogFragment { |
| @Override |
| protected DvrGuidedStepFragment onCreateGuidedStepFragment() { |
| return new DvrStopRecordingFragment(); |
| } |
| } |
| |
| /** A dialog fragment for {@link DvrAlreadyScheduledFragment}. */ |
| public static class DvrAlreadyScheduledDialogFragment extends DvrGuidedStepDialogFragment { |
| @Override |
| protected DvrGuidedStepFragment onCreateGuidedStepFragment() { |
| return new DvrAlreadyScheduledFragment(); |
| } |
| } |
| |
| /** A dialog fragment for {@link DvrAlreadyRecordedFragment}. */ |
| public static class DvrAlreadyRecordedDialogFragment extends DvrGuidedStepDialogFragment { |
| @Override |
| protected DvrGuidedStepFragment onCreateGuidedStepFragment() { |
| return new DvrAlreadyRecordedFragment(); |
| } |
| } |
| } |