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