Home | History | Annotate | Download | only in ui
      1 /*
      2  * Copyright (C) 2016 The Android Open Source Project
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License");
      5  * you may not use this file except in compliance with the License.
      6  * You may obtain a copy of the License at
      7  *
      8  *      http://www.apache.org/licenses/LICENSE-2.0
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS,
     12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13  * See the License for the specific language governing permissions and
     14  * limitations under the License.
     15  */
     16 
     17 package com.android.tv.dvr.ui;
     18 
     19 import android.app.Activity;
     20 import android.app.DialogFragment;
     21 import android.content.Context;
     22 import android.os.Bundle;
     23 import android.support.v17.leanback.widget.GuidanceStylist;
     24 import android.support.v17.leanback.widget.GuidedAction;
     25 import android.support.v17.leanback.widget.VerticalGridView;
     26 import android.view.LayoutInflater;
     27 import android.view.View;
     28 import android.view.ViewGroup;
     29 
     30 import com.android.tv.ApplicationSingletons;
     31 import com.android.tv.MainActivity;
     32 import com.android.tv.R;
     33 import com.android.tv.TvApplication;
     34 import com.android.tv.dialog.HalfSizedDialogFragment.OnActionClickListener;
     35 import com.android.tv.dialog.SafeDismissDialogFragment;
     36 import com.android.tv.dvr.DvrManager;
     37 import com.android.tv.dvr.DvrStorageStatusManager;
     38 
     39 import java.util.List;
     40 
     41 public abstract class DvrGuidedStepFragment extends TrackedGuidedStepFragment {
     42     /**
     43      * Action ID for "recording/scheduling the program anyway".
     44      */
     45     public static final int ACTION_RECORD_ANYWAY = 1;
     46     /**
     47      * Action ID for "deleting existed recordings".
     48      */
     49     public static final int ACTION_DELETE_RECORDINGS = 2;
     50     /**
     51      * Action ID for "cancelling current recording request".
     52      */
     53     public static final int ACTION_CANCEL_RECORDING = 3;
     54     public static final String UNKNOWN_DVR_ACTION = "Unknown DVR Action";
     55 
     56     private DvrManager mDvrManager;
     57     private OnActionClickListener mOnActionClickListener;
     58 
     59     protected DvrManager getDvrManager() {
     60         return mDvrManager;
     61     }
     62 
     63     @Override
     64     public void onAttach(Context context) {
     65         super.onAttach(context);
     66         ApplicationSingletons singletons = TvApplication.getSingletons(context);
     67         mDvrManager = singletons.getDvrManager();
     68     }
     69 
     70     @Override
     71     public View onCreateView(LayoutInflater inflater, ViewGroup container,
     72             Bundle savedInstanceState) {
     73         View view = super.onCreateView(inflater, container, savedInstanceState);
     74         VerticalGridView actionsList = getGuidedActionsStylist().getActionsGridView();
     75         actionsList.setWindowAlignment(VerticalGridView.WINDOW_ALIGN_BOTH_EDGE);
     76         VerticalGridView buttonActionsList = getGuidedButtonActionsStylist().getActionsGridView();
     77         buttonActionsList.setWindowAlignment(VerticalGridView.WINDOW_ALIGN_BOTH_EDGE);
     78         return view;
     79     }
     80 
     81     @Override
     82     public int onProvideTheme() {
     83         return R.style.Theme_TV_Dvr_GuidedStep;
     84     }
     85 
     86     @Override
     87     public void onTrackedGuidedActionClicked(GuidedAction action) {
     88         if (mOnActionClickListener != null) {
     89             mOnActionClickListener.onActionClick(action.getId());
     90         }
     91         dismissDialog();
     92     }
     93 
     94     @Override
     95     public String getTrackerLabelForGuidedAction(GuidedAction action) {
     96         long actionId = action.getId();
     97         if (actionId == ACTION_RECORD_ANYWAY) {
     98             return "record-anyway";
     99         } else if (actionId == ACTION_DELETE_RECORDINGS) {
    100             return "delete-recordings";
    101         } else if (actionId == ACTION_CANCEL_RECORDING) {
    102             return "cancel-recording";
    103         } else {
    104             return super.getTrackerLabelForGuidedAction(action);
    105         }
    106     }
    107 
    108     protected void dismissDialog() {
    109         if (getActivity() instanceof MainActivity) {
    110             SafeDismissDialogFragment currentDialog =
    111                     ((MainActivity) getActivity()).getOverlayManager().getCurrentDialog();
    112             if (currentDialog instanceof DvrHalfSizedDialogFragment) {
    113                 currentDialog.dismiss();
    114             }
    115         } else if (getParentFragment() instanceof DialogFragment) {
    116             ((DialogFragment) getParentFragment()).dismiss();
    117         }
    118     }
    119 
    120     protected void setOnActionClickListener(OnActionClickListener listener) {
    121         mOnActionClickListener = listener;
    122     }
    123 
    124     /**
    125      * The inner guided step fragment for
    126      * {@link com.android.tv.dvr.ui.DvrHalfSizedDialogFragment
    127      * .DvrNoFreeSpaceErrorDialogFragment}.
    128      */
    129     public static class DvrNoFreeSpaceErrorFragment extends DvrGuidedStepFragment {
    130         @Override
    131         public GuidanceStylist.Guidance onCreateGuidance(Bundle savedInstanceState) {
    132             return new GuidanceStylist.Guidance(getString(R.string.dvr_error_no_free_space_title),
    133                     getString(R.string.dvr_error_no_free_space_description), null, null);
    134         }
    135 
    136         @Override
    137         public void onCreateActions(List<GuidedAction> actions, Bundle savedInstanceState) {
    138             Activity activity = getActivity();
    139             actions.add(new GuidedAction.Builder(activity)
    140                     .id(ACTION_RECORD_ANYWAY)
    141                     .title(R.string.dvr_action_record_anyway)
    142                     .build());
    143             actions.add(new GuidedAction.Builder(activity)
    144                     .id(ACTION_DELETE_RECORDINGS)
    145                     .title(R.string.dvr_action_delete_recordings)
    146                     .build());
    147             actions.add(new GuidedAction.Builder(activity)
    148                     .id(ACTION_CANCEL_RECORDING)
    149                     .title(R.string.dvr_action_record_cancel)
    150                     .build());
    151         }
    152 
    153         @Override
    154         public String getTrackerPrefix() {
    155             return "DvrNoFreeSpaceErrorFragment";
    156         }
    157     }
    158 
    159     /**
    160      * The inner guided step fragment for
    161      * {@link com.android.tv.dvr.ui.DvrHalfSizedDialogFragment
    162      * .DvrSmallSizedStorageErrorDialogFragment}.
    163      */
    164     public static class DvrSmallSizedStorageErrorFragment extends DvrGuidedStepFragment {
    165         @Override
    166         public GuidanceStylist.Guidance onCreateGuidance(Bundle savedInstanceState) {
    167             String title = getResources().getString(
    168                     R.string.dvr_error_small_sized_storage_title);
    169             String description = getResources().getString(
    170                     R.string.dvr_error_small_sized_storage_description,
    171                     DvrStorageStatusManager.MIN_STORAGE_SIZE_FOR_DVR_IN_BYTES / 1024
    172                             / 1024 / 1024);
    173             return new GuidanceStylist.Guidance(title, description, null, null);
    174         }
    175 
    176         @Override
    177         public void onCreateActions(List<GuidedAction> actions, Bundle savedInstanceState) {
    178             Activity activity = getActivity();
    179             actions.add(new GuidedAction.Builder(activity)
    180                     .id(GuidedAction.ACTION_ID_OK)
    181                     .title(android.R.string.ok)
    182                     .build());
    183         }
    184 
    185         @Override
    186         public void onTrackedGuidedActionClicked(GuidedAction action) {
    187             dismissDialog();
    188         }
    189 
    190         @Override
    191         public String getTrackerPrefix() {
    192             return "DvrSmallSizedStorageErrorFragment";
    193         }
    194     }
    195 }