165fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko/*
265fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko * Copyright (C) 2016 The Android Open Source Project
365fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko *
465fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko * Licensed under the Apache License, Version 2.0 (the "License");
565fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko * you may not use this file except in compliance with the License.
665fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko * You may obtain a copy of the License at
765fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko *
865fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko *      http://www.apache.org/licenses/LICENSE-2.0
965fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko *
1065fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko * Unless required by applicable law or agreed to in writing, software
1165fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko * distributed under the License is distributed on an "AS IS" BASIS,
1265fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1365fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko * See the License for the specific language governing permissions and
1465fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko * limitations under the License
1565fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko */
1665fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko
1765fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalkopackage com.android.tv.dvr.ui;
1865fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko
1965fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalkoimport android.graphics.drawable.Drawable;
2065fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalkoimport android.os.Bundle;
2165fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalkoimport android.support.v17.leanback.app.GuidedStepFragment;
2265fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalkoimport android.support.v17.leanback.widget.GuidanceStylist.Guidance;
2365fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalkoimport android.support.v17.leanback.widget.GuidedAction;
2465fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko
2565fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalkoimport com.android.tv.R;
2665fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalkoimport com.android.tv.TvApplication;
2765fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalkoimport com.android.tv.common.SoftPreconditions;
2865fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalkoimport com.android.tv.data.Channel;
2965fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalkoimport com.android.tv.dvr.DvrManager;
3065fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalkoimport com.android.tv.dvr.ScheduledRecording;
3165fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalkoimport com.android.tv.dvr.ui.DvrConflictFragment.DvrChannelRecordConflictFragment;
3265fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko
3365fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalkoimport java.util.ArrayList;
3465fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalkoimport java.util.List;
3565fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalkoimport java.util.concurrent.TimeUnit;
3665fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko
3765fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalkopublic class DvrChannelRecordDurationOptionFragment extends DvrGuidedStepFragment {
3865fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko    private final List<Long> mDurations = new ArrayList<>();
3965fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko    private Channel mChannel;
4065fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko
4165fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko    @Override
4265fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko    public void onCreate(Bundle savedInstanceState) {
4365fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko        Bundle args = getArguments();
4465fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko        if (args != null) {
4565fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko            long channelId = args.getLong(DvrHalfSizedDialogFragment.KEY_CHANNEL_ID);
4665fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko            mChannel = TvApplication.getSingletons(getContext()).getChannelDataManager()
4765fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko                    .getChannel(channelId);
4865fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko        }
4965fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko        SoftPreconditions.checkArgument(mChannel != null);
5065fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko        super.onCreate(savedInstanceState);
5165fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko    }
5265fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko
5365fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko    @Override
5465fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko    public Guidance onCreateGuidance(Bundle savedInstanceState) {
5565fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko        String title = getResources().getString(R.string.dvr_channel_record_duration_dialog_title);
5665fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko        Drawable icon = getResources().getDrawable(R.drawable.ic_dvr, null);
5765fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko        return new Guidance(title, null, null, icon);
5865fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko    }
5965fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko
6065fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko    @Override
6165fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko    public void onCreateActions(List<GuidedAction> actions, Bundle savedInstanceState) {
6265fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko        int actionId = -1;
6365fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko        mDurations.clear();
6465fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko        mDurations.add(TimeUnit.MINUTES.toMillis(10));
6565fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko        mDurations.add(TimeUnit.MINUTES.toMillis(30));
6665fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko        mDurations.add(TimeUnit.HOURS.toMillis(1));
6765fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko        mDurations.add(TimeUnit.HOURS.toMillis(3));
6865fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko
6965fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko        actions.add(new GuidedAction.Builder(getContext())
7065fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko                .id(++actionId)
7165fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko                .title(R.string.recording_start_dialog_10_min_duration)
7265fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko                .build());
7365fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko        actions.add(new GuidedAction.Builder(getContext())
7465fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko                .id(++actionId)
7565fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko                .title(R.string.recording_start_dialog_30_min_duration)
7665fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko                .build());
7765fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko        actions.add(new GuidedAction.Builder(getContext())
7865fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko                .id(++actionId)
7965fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko                .title(R.string.recording_start_dialog_1_hour_duration)
8065fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko                .build());
8165fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko        actions.add(new GuidedAction.Builder(getContext())
8265fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko                .id(++actionId)
8365fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko                .title(R.string.recording_start_dialog_3_hours_duration)
8465fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko                .build());
8565fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko    }
8665fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko
8765fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko    @Override
8865fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko    public void onGuidedActionClicked(GuidedAction action) {
8965fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko        DvrManager dvrManager = TvApplication.getSingletons(getContext()).getDvrManager();
9065fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko        long duration = mDurations.get((int) action.getId());
9165fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko        long startTimeMs = System.currentTimeMillis();
9265fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko        long endTimeMs = System.currentTimeMillis() + duration;
9365fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko        List<ScheduledRecording> conflicts = dvrManager.getConflictingSchedules(
9465fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko                mChannel.getId(), startTimeMs, endTimeMs);
9565fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko        dvrManager.addSchedule(mChannel, startTimeMs, endTimeMs);
9665fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko        if (conflicts.isEmpty()) {
9765fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko            dismissDialog();
9865fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko        } else {
9965fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko            GuidedStepFragment fragment = new DvrChannelRecordConflictFragment();
10065fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko            Bundle args = new Bundle();
10165fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko            args.putLong(DvrHalfSizedDialogFragment.KEY_CHANNEL_ID, mChannel.getId());
10265fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko            args.putLong(DvrHalfSizedDialogFragment.KEY_START_TIME_MS, startTimeMs);
10365fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko            args.putLong(DvrHalfSizedDialogFragment.KEY_END_TIME_MS, endTimeMs);
10465fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko            fragment.setArguments(args);
10565fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko            GuidedStepFragment.add(getFragmentManager(), fragment,
10665fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko                    R.id.halfsized_dialog_host);
10765fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko        }
10865fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko    }
10965fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko}
110