1d41f0075a7d2ea826204e81fcec57d0aa57171a9Nick Chalko/*
2d41f0075a7d2ea826204e81fcec57d0aa57171a9Nick Chalko * Copyright (C) 2016 The Android Open Source Project
3d41f0075a7d2ea826204e81fcec57d0aa57171a9Nick Chalko *
4d41f0075a7d2ea826204e81fcec57d0aa57171a9Nick Chalko * Licensed under the Apache License, Version 2.0 (the "License");
5d41f0075a7d2ea826204e81fcec57d0aa57171a9Nick Chalko * you may not use this file except in compliance with the License.
6d41f0075a7d2ea826204e81fcec57d0aa57171a9Nick Chalko * You may obtain a copy of the License at
7d41f0075a7d2ea826204e81fcec57d0aa57171a9Nick Chalko *
8d41f0075a7d2ea826204e81fcec57d0aa57171a9Nick Chalko *      http://www.apache.org/licenses/LICENSE-2.0
9d41f0075a7d2ea826204e81fcec57d0aa57171a9Nick Chalko *
10d41f0075a7d2ea826204e81fcec57d0aa57171a9Nick Chalko * Unless required by applicable law or agreed to in writing, software
11d41f0075a7d2ea826204e81fcec57d0aa57171a9Nick Chalko * distributed under the License is distributed on an "AS IS" BASIS,
12d41f0075a7d2ea826204e81fcec57d0aa57171a9Nick Chalko * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13d41f0075a7d2ea826204e81fcec57d0aa57171a9Nick Chalko * See the License for the specific language governing permissions and
14d41f0075a7d2ea826204e81fcec57d0aa57171a9Nick Chalko * limitations under the License
15d41f0075a7d2ea826204e81fcec57d0aa57171a9Nick Chalko */
16d41f0075a7d2ea826204e81fcec57d0aa57171a9Nick Chalko
17d41f0075a7d2ea826204e81fcec57d0aa57171a9Nick Chalkopackage com.android.tv.dvr.ui;
18d41f0075a7d2ea826204e81fcec57d0aa57171a9Nick Chalko
19d41f0075a7d2ea826204e81fcec57d0aa57171a9Nick Chalkoimport android.app.Activity;
20d41f0075a7d2ea826204e81fcec57d0aa57171a9Nick Chalkoimport android.graphics.drawable.Drawable;
21d41f0075a7d2ea826204e81fcec57d0aa57171a9Nick Chalkoimport android.os.Bundle;
22d41f0075a7d2ea826204e81fcec57d0aa57171a9Nick Chalkoimport android.support.annotation.NonNull;
23d41f0075a7d2ea826204e81fcec57d0aa57171a9Nick Chalkoimport android.support.v17.leanback.widget.GuidanceStylist;
24d41f0075a7d2ea826204e81fcec57d0aa57171a9Nick Chalkoimport android.support.v17.leanback.widget.GuidedAction;
25d41f0075a7d2ea826204e81fcec57d0aa57171a9Nick Chalkoimport android.view.LayoutInflater;
26d41f0075a7d2ea826204e81fcec57d0aa57171a9Nick Chalkoimport android.view.View;
27d41f0075a7d2ea826204e81fcec57d0aa57171a9Nick Chalkoimport android.view.ViewGroup;
28d41f0075a7d2ea826204e81fcec57d0aa57171a9Nick Chalko
29d41f0075a7d2ea826204e81fcec57d0aa57171a9Nick Chalkoimport com.android.tv.ApplicationSingletons;
30d41f0075a7d2ea826204e81fcec57d0aa57171a9Nick Chalkoimport com.android.tv.R;
31d41f0075a7d2ea826204e81fcec57d0aa57171a9Nick Chalkoimport com.android.tv.TvApplication;
32d41f0075a7d2ea826204e81fcec57d0aa57171a9Nick Chalkoimport com.android.tv.dvr.DvrDataManager;
33d41f0075a7d2ea826204e81fcec57d0aa57171a9Nick Chalkoimport com.android.tv.dvr.DvrManager;
34d41f0075a7d2ea826204e81fcec57d0aa57171a9Nick Chalkoimport com.android.tv.dvr.ScheduledRecording;
35d41f0075a7d2ea826204e81fcec57d0aa57171a9Nick Chalkoimport com.android.tv.dvr.SeriesRecording;
36d41f0075a7d2ea826204e81fcec57d0aa57171a9Nick Chalko
37d41f0075a7d2ea826204e81fcec57d0aa57171a9Nick Chalkoimport java.util.ArrayList;
38d41f0075a7d2ea826204e81fcec57d0aa57171a9Nick Chalkoimport java.util.List;
39d41f0075a7d2ea826204e81fcec57d0aa57171a9Nick Chalko
40d41f0075a7d2ea826204e81fcec57d0aa57171a9Nick Chalko/**
41d41f0075a7d2ea826204e81fcec57d0aa57171a9Nick Chalko * A fragment which asks the user to stop series recording.
42d41f0075a7d2ea826204e81fcec57d0aa57171a9Nick Chalko */
43d41f0075a7d2ea826204e81fcec57d0aa57171a9Nick Chalkopublic class DvrStopSeriesRecordingFragment extends DvrGuidedStepFragment {
44d41f0075a7d2ea826204e81fcec57d0aa57171a9Nick Chalko    /**
45d41f0075a7d2ea826204e81fcec57d0aa57171a9Nick Chalko     * Key for the series recording to be stopped.
46d41f0075a7d2ea826204e81fcec57d0aa57171a9Nick Chalko     */
47d41f0075a7d2ea826204e81fcec57d0aa57171a9Nick Chalko    public static final String KEY_SERIES_RECORDING = "key_series_recoridng";
48d41f0075a7d2ea826204e81fcec57d0aa57171a9Nick Chalko
49d41f0075a7d2ea826204e81fcec57d0aa57171a9Nick Chalko    private static final int ACTION_STOP_SERIES_RECORDING = 1;
50d41f0075a7d2ea826204e81fcec57d0aa57171a9Nick Chalko
51d41f0075a7d2ea826204e81fcec57d0aa57171a9Nick Chalko    private SeriesRecording mSeriesRecording;
52d41f0075a7d2ea826204e81fcec57d0aa57171a9Nick Chalko
53d41f0075a7d2ea826204e81fcec57d0aa57171a9Nick Chalko    @Override
54d41f0075a7d2ea826204e81fcec57d0aa57171a9Nick Chalko    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
55d41f0075a7d2ea826204e81fcec57d0aa57171a9Nick Chalko        mSeriesRecording = getArguments().getParcelable(KEY_SERIES_RECORDING);
56d41f0075a7d2ea826204e81fcec57d0aa57171a9Nick Chalko        return super.onCreateView(inflater, container, savedInstanceState);
57d41f0075a7d2ea826204e81fcec57d0aa57171a9Nick Chalko    }
58d41f0075a7d2ea826204e81fcec57d0aa57171a9Nick Chalko
59d41f0075a7d2ea826204e81fcec57d0aa57171a9Nick Chalko    @NonNull
60d41f0075a7d2ea826204e81fcec57d0aa57171a9Nick Chalko    @Override
61d41f0075a7d2ea826204e81fcec57d0aa57171a9Nick Chalko    public GuidanceStylist.Guidance onCreateGuidance(Bundle savedInstanceState) {
62d41f0075a7d2ea826204e81fcec57d0aa57171a9Nick Chalko        String title = getString(R.string.dvr_series_schedules_stop_dialog_title);
63d41f0075a7d2ea826204e81fcec57d0aa57171a9Nick Chalko        String description = getString(R.string.dvr_series_schedules_stop_dialog_description);
64d41f0075a7d2ea826204e81fcec57d0aa57171a9Nick Chalko        Drawable icon = getContext().getDrawable(R.drawable.ic_dvr_delete);
65d41f0075a7d2ea826204e81fcec57d0aa57171a9Nick Chalko        return new GuidanceStylist.Guidance(title, description, null, icon);
66d41f0075a7d2ea826204e81fcec57d0aa57171a9Nick Chalko    }
67d41f0075a7d2ea826204e81fcec57d0aa57171a9Nick Chalko
68d41f0075a7d2ea826204e81fcec57d0aa57171a9Nick Chalko    @Override
69d41f0075a7d2ea826204e81fcec57d0aa57171a9Nick Chalko    public void onCreateActions(@NonNull List<GuidedAction> actions, Bundle savedInstanceState) {
70d41f0075a7d2ea826204e81fcec57d0aa57171a9Nick Chalko        Activity activity = getActivity();
71d41f0075a7d2ea826204e81fcec57d0aa57171a9Nick Chalko        actions.add(new GuidedAction.Builder(activity)
72d41f0075a7d2ea826204e81fcec57d0aa57171a9Nick Chalko                .id(ACTION_STOP_SERIES_RECORDING)
73d41f0075a7d2ea826204e81fcec57d0aa57171a9Nick Chalko                .title(R.string.dvr_series_schedules_stop_dialog_action_stop)
74d41f0075a7d2ea826204e81fcec57d0aa57171a9Nick Chalko                .build());
75d41f0075a7d2ea826204e81fcec57d0aa57171a9Nick Chalko        actions.add(new GuidedAction.Builder(activity)
76d41f0075a7d2ea826204e81fcec57d0aa57171a9Nick Chalko                .clickAction(GuidedAction.ACTION_ID_CANCEL)
77d41f0075a7d2ea826204e81fcec57d0aa57171a9Nick Chalko                .build());
78d41f0075a7d2ea826204e81fcec57d0aa57171a9Nick Chalko    }
79d41f0075a7d2ea826204e81fcec57d0aa57171a9Nick Chalko
80d41f0075a7d2ea826204e81fcec57d0aa57171a9Nick Chalko    @Override
81d41f0075a7d2ea826204e81fcec57d0aa57171a9Nick Chalko    public void onGuidedActionClicked(GuidedAction action) {
82d41f0075a7d2ea826204e81fcec57d0aa57171a9Nick Chalko        if (action.getId() == ACTION_STOP_SERIES_RECORDING) {
83d41f0075a7d2ea826204e81fcec57d0aa57171a9Nick Chalko            ApplicationSingletons singletons = TvApplication.getSingletons(getContext());
84d41f0075a7d2ea826204e81fcec57d0aa57171a9Nick Chalko            DvrManager dvrManager = singletons.getDvrManager();
85d41f0075a7d2ea826204e81fcec57d0aa57171a9Nick Chalko            DvrDataManager dataManager = singletons.getDvrDataManager();
86d41f0075a7d2ea826204e81fcec57d0aa57171a9Nick Chalko            List<ScheduledRecording> toDelete = new ArrayList<>();
87d41f0075a7d2ea826204e81fcec57d0aa57171a9Nick Chalko            for (ScheduledRecording r : dataManager.getAvailableScheduledRecordings()) {
88d41f0075a7d2ea826204e81fcec57d0aa57171a9Nick Chalko                if (r.getSeriesRecordingId() == mSeriesRecording.getId()) {
89d41f0075a7d2ea826204e81fcec57d0aa57171a9Nick Chalko                    if (r.getState() == ScheduledRecording.STATE_RECORDING_NOT_STARTED) {
90d41f0075a7d2ea826204e81fcec57d0aa57171a9Nick Chalko                        toDelete.add(r);
91d41f0075a7d2ea826204e81fcec57d0aa57171a9Nick Chalko                    } else {
92d41f0075a7d2ea826204e81fcec57d0aa57171a9Nick Chalko                        dvrManager.stopRecording(r);
93d41f0075a7d2ea826204e81fcec57d0aa57171a9Nick Chalko                    }
94d41f0075a7d2ea826204e81fcec57d0aa57171a9Nick Chalko                }
95d41f0075a7d2ea826204e81fcec57d0aa57171a9Nick Chalko            }
96d41f0075a7d2ea826204e81fcec57d0aa57171a9Nick Chalko            if (!toDelete.isEmpty()) {
97d41f0075a7d2ea826204e81fcec57d0aa57171a9Nick Chalko                dvrManager.forceRemoveScheduledRecording(ScheduledRecording.toArray(toDelete));
98d41f0075a7d2ea826204e81fcec57d0aa57171a9Nick Chalko            }
99d41f0075a7d2ea826204e81fcec57d0aa57171a9Nick Chalko            dvrManager.updateSeriesRecording(SeriesRecording.buildFrom(mSeriesRecording)
100d41f0075a7d2ea826204e81fcec57d0aa57171a9Nick Chalko                    .setState(SeriesRecording.STATE_SERIES_STOPPED).build());
101d41f0075a7d2ea826204e81fcec57d0aa57171a9Nick Chalko        }
102d41f0075a7d2ea826204e81fcec57d0aa57171a9Nick Chalko        dismissDialog();
103d41f0075a7d2ea826204e81fcec57d0aa57171a9Nick Chalko    }
104d41f0075a7d2ea826204e81fcec57d0aa57171a9Nick Chalko}
105