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.list; 18 19 import android.app.Activity; 20 import android.app.ProgressDialog; 21 import android.os.Bundle; 22 import android.support.annotation.IntDef; 23 24 import com.android.tv.R; 25 import com.android.tv.Starter; 26 import com.android.tv.data.api.Program; 27 import com.android.tv.dvr.data.SeriesRecording; 28 import com.android.tv.dvr.provider.EpisodicProgramLoadTask; 29 import com.android.tv.dvr.recorder.SeriesRecordingScheduler; 30 import com.android.tv.dvr.ui.BigArguments; 31 32 import java.lang.annotation.Retention; 33 import java.lang.annotation.RetentionPolicy; 34 import java.util.Collections; 35 import java.util.List; 36 37 /** Activity to show the list of recording schedules. */ 38 public class DvrSchedulesActivity extends Activity { 39 /** 40 * The key for the type of the schedules which will be listed in the list. The type of the value 41 * should be {@link ScheduleListType}. 42 */ 43 public static final String KEY_SCHEDULES_TYPE = "schedules_type"; 44 45 @Retention(RetentionPolicy.SOURCE) 46 @IntDef({TYPE_FULL_SCHEDULE, TYPE_SERIES_SCHEDULE}) 47 public @interface ScheduleListType {} 48 /** A type which means the activity will display the full scheduled recordings. */ 49 public static final int TYPE_FULL_SCHEDULE = 0; 50 /** 51 * A type which means the activity will display a scheduled recording list of a series 52 * recording. 53 */ 54 public static final int TYPE_SERIES_SCHEDULE = 1; 55 56 @Override onCreate(final Bundle savedInstanceState)57 public void onCreate(final Bundle savedInstanceState) { 58 Starter.start(this); 59 // Pass null to prevent automatically re-creating fragments 60 super.onCreate(null); 61 setContentView(R.layout.activity_dvr_schedules); 62 int scheduleType = getIntent().getIntExtra(KEY_SCHEDULES_TYPE, TYPE_FULL_SCHEDULE); 63 if (scheduleType == TYPE_FULL_SCHEDULE) { 64 DvrSchedulesFragment schedulesFragment = new DvrSchedulesFragment(); 65 schedulesFragment.setArguments(getIntent().getExtras()); 66 getFragmentManager() 67 .beginTransaction() 68 .add(R.id.fragment_container, schedulesFragment) 69 .commit(); 70 } else if (scheduleType == TYPE_SERIES_SCHEDULE) { 71 if (BigArguments.getArgument( 72 DvrSeriesSchedulesFragment.SERIES_SCHEDULES_KEY_SERIES_PROGRAMS) 73 != null) { 74 // The programs will be passed to the DvrSeriesSchedulesFragment, so don't need 75 // to reset the BigArguments. 76 showDvrSeriesSchedulesFragment(getIntent().getExtras()); 77 } else { 78 final ProgressDialog dialog = 79 ProgressDialog.show( 80 this, 81 null, 82 getString(R.string.dvr_series_progress_message_reading_programs)); 83 SeriesRecording seriesRecording = 84 getIntent() 85 .getExtras() 86 .getParcelable( 87 DvrSeriesSchedulesFragment 88 .SERIES_SCHEDULES_KEY_SERIES_RECORDING); 89 // To get programs faster, hold the update of the series schedules. 90 SeriesRecordingScheduler.getInstance(this).pauseUpdate(); 91 new EpisodicProgramLoadTask(this, Collections.singletonList(seriesRecording)) { 92 @Override 93 protected void onPostExecute(List<Program> programs) { 94 SeriesRecordingScheduler.getInstance(DvrSchedulesActivity.this) 95 .resumeUpdate(); 96 dialog.dismiss(); 97 Bundle args = getIntent().getExtras(); 98 BigArguments.reset(); 99 BigArguments.setArgument( 100 DvrSeriesSchedulesFragment.SERIES_SCHEDULES_KEY_SERIES_PROGRAMS, 101 programs == null ? Collections.EMPTY_LIST : programs); 102 showDvrSeriesSchedulesFragment(args); 103 } 104 }.setLoadCurrentProgram(true) 105 .setLoadDisallowedProgram(true) 106 .setLoadScheduledEpisode(true) 107 .setIgnoreChannelOption(true) 108 .execute(); 109 } 110 } else { 111 finish(); 112 } 113 } 114 showDvrSeriesSchedulesFragment(Bundle args)115 private void showDvrSeriesSchedulesFragment(Bundle args) { 116 DvrSeriesSchedulesFragment schedulesFragment = new DvrSeriesSchedulesFragment(); 117 schedulesFragment.setArguments(args); 118 getFragmentManager() 119 .beginTransaction() 120 .add(R.id.fragment_container, schedulesFragment) 121 .commit(); 122 } 123 } 124