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.content.Context;
21 import android.content.Intent;
22 import android.os.Bundle;
23 import androidx.leanback.widget.GuidanceStylist.Guidance;
24 import androidx.leanback.widget.GuidedAction;
25 import com.android.tv.R;
26 import com.android.tv.TvSingletons;
27 import com.android.tv.common.SoftPreconditions;
28 import com.android.tv.dvr.ui.browse.DvrBrowseActivity;
29 import java.util.ArrayList;
30 import java.util.List;
31 
32 public class DvrInsufficientSpaceErrorFragment extends DvrGuidedStepFragment {
33     /** Key for the failed scheduled recordings information. */
34     public static final String FAILED_SCHEDULED_RECORDING_INFOS =
35             "failed_scheduled_recording_infos";
36 
37     private static final String TAG = "DvrInsufficientSpaceErrorFragment";
38 
39     private static final int ACTION_VIEW_RECENT_RECORDINGS = 1;
40 
41     private ArrayList<String> mFailedScheduledRecordingInfos;
42 
43     @Override
onAttach(Context context)44     public void onAttach(Context context) {
45         super.onAttach(context);
46         Bundle args = getArguments();
47         if (args != null) {
48             mFailedScheduledRecordingInfos =
49                     args.getStringArrayList(FAILED_SCHEDULED_RECORDING_INFOS);
50         }
51         SoftPreconditions.checkState(
52                 mFailedScheduledRecordingInfos != null && !mFailedScheduledRecordingInfos.isEmpty(),
53                 TAG,
54                 "failed scheduled recording is null");
55     }
56 
57     @Override
onCreateGuidance(Bundle savedInstanceState)58     public Guidance onCreateGuidance(Bundle savedInstanceState) {
59         String title;
60         String description;
61         int failedScheduledRecordingSize = mFailedScheduledRecordingInfos.size();
62         if (failedScheduledRecordingSize == 1) {
63             title =
64                     getString(
65                             R.string.dvr_error_insufficient_space_title_one_recording,
66                             mFailedScheduledRecordingInfos.get(0));
67             description =
68                     getString(
69                             R.string.dvr_error_insufficient_space_description_one_recording,
70                             mFailedScheduledRecordingInfos.get(0));
71         } else if (failedScheduledRecordingSize == 2) {
72             title =
73                     getString(
74                             R.string.dvr_error_insufficient_space_title_two_recordings,
75                             mFailedScheduledRecordingInfos.get(0),
76                             mFailedScheduledRecordingInfos.get(1));
77             description =
78                     getString(
79                             R.string.dvr_error_insufficient_space_description_two_recordings,
80                             mFailedScheduledRecordingInfos.get(0),
81                             mFailedScheduledRecordingInfos.get(1));
82         } else {
83             title =
84                     getString(
85                             R.string.dvr_error_insufficient_space_title_three_or_more_recordings,
86                             mFailedScheduledRecordingInfos.get(0),
87                             mFailedScheduledRecordingInfos.get(1),
88                             mFailedScheduledRecordingInfos.get(2));
89             description =
90                     getString(
91                             R.string
92                                     .dvr_error_insufficient_space_description_three_or_more_recordings,
93                             mFailedScheduledRecordingInfos.get(0),
94                             mFailedScheduledRecordingInfos.get(1),
95                             mFailedScheduledRecordingInfos.get(2));
96         }
97         return new Guidance(title, description, null, null);
98     }
99 
100     @Override
onCreateActions(List<GuidedAction> actions, Bundle savedInstanceState)101     public void onCreateActions(List<GuidedAction> actions, Bundle savedInstanceState) {
102         Activity activity = getActivity();
103         actions.add(
104                 new GuidedAction.Builder(activity).clickAction(GuidedAction.ACTION_ID_OK).build());
105         if (TvSingletons.getSingletons(getContext()).getDvrManager().hasValidItems()) {
106             actions.add(
107                     new GuidedAction.Builder(activity)
108                             .id(ACTION_VIEW_RECENT_RECORDINGS)
109                             .title(
110                                     getResources()
111                                             .getString(
112                                                     R.string
113                                                             .dvr_error_insufficient_space_action_view_recent_recordings))
114                             .build());
115         }
116     }
117 
118     @Override
onTrackedGuidedActionClicked(GuidedAction action)119     public void onTrackedGuidedActionClicked(GuidedAction action) {
120         if (action.getId() == ACTION_VIEW_RECENT_RECORDINGS) {
121             Intent intent = new Intent(getActivity(), DvrBrowseActivity.class);
122             getActivity().startActivity(intent);
123         }
124         dismissDialog();
125     }
126 
127     @Override
getTrackerPrefix()128     public String getTrackerPrefix() {
129         return "DvrInsufficientSpaceErrorFragment";
130     }
131 
132     @Override
getTrackerLabelForGuidedAction(GuidedAction action)133     public String getTrackerLabelForGuidedAction(GuidedAction action) {
134         long actionId = action.getId();
135         if (actionId == ACTION_VIEW_RECENT_RECORDINGS) {
136             return "view-recent";
137         } else {
138             return super.getTrackerLabelForGuidedAction(action);
139         }
140     }
141 }
142