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