blob: f6e6ac26e16ddaf485f5e1dd2bb7af90728e4e30 [file] [log] [blame]
/*
* Copyright (C) 2016 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License
*/
package com.android.tv.dvr.ui;
import android.app.Activity;
import android.app.ProgressDialog;
import android.os.Bundle;
import android.support.annotation.IntDef;
import com.android.tv.R;
import com.android.tv.TvApplication;
import com.android.tv.data.Program;
import com.android.tv.dvr.EpisodicProgramLoadTask;
import com.android.tv.dvr.SeriesRecording;
import com.android.tv.dvr.SeriesRecordingScheduler;
import com.android.tv.dvr.ui.list.DvrSchedulesFragment;
import com.android.tv.dvr.ui.list.DvrSeriesSchedulesFragment;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
/**
* Activity to show the list of recording schedules.
*/
public class DvrSchedulesActivity extends Activity {
/**
* The key for the type of the schedules which will be listed in the list. The type of the value
* should be {@link ScheduleListType}.
*/
public static final String KEY_SCHEDULES_TYPE = "schedules_type";
@Retention(RetentionPolicy.SOURCE)
@IntDef({TYPE_FULL_SCHEDULE, TYPE_SERIES_SCHEDULE})
public @interface ScheduleListType {}
/**
* A type which means the activity will display the full scheduled recordings.
*/
public static final int TYPE_FULL_SCHEDULE = 0;
/**
* A type which means the activity will display a scheduled recording list of a series
* recording.
*/
public static final int TYPE_SERIES_SCHEDULE = 1;
@Override
public void onCreate(final Bundle savedInstanceState) {
TvApplication.setCurrentRunningProcess(this, true);
// Pass null to prevent automatically re-creating fragments
super.onCreate(null);
setContentView(R.layout.activity_dvr_schedules);
int scheduleType = getIntent().getIntExtra(KEY_SCHEDULES_TYPE, TYPE_FULL_SCHEDULE);
if (scheduleType == TYPE_FULL_SCHEDULE) {
DvrSchedulesFragment schedulesFragment = new DvrSchedulesFragment();
schedulesFragment.setArguments(getIntent().getExtras());
getFragmentManager().beginTransaction().add(
R.id.fragment_container, schedulesFragment).commit();
} else if (scheduleType == TYPE_SERIES_SCHEDULE) {
final ProgressDialog dialog = ProgressDialog.show(this, null, getString(
R.string.dvr_series_schedules_progress_message_reading_programs));
SeriesRecording seriesRecording = getIntent().getExtras()
.getParcelable(DvrSeriesSchedulesFragment
.SERIES_SCHEDULES_KEY_SERIES_RECORDING);
// To get programs faster, hold the update of the series schedules.
SeriesRecordingScheduler.getInstance(this).pauseUpdate();
new EpisodicProgramLoadTask(this, Collections.singletonList(seriesRecording)) {
@Override
protected void onPostExecute(List<Program> programs) {
SeriesRecordingScheduler.getInstance(DvrSchedulesActivity.this).resumeUpdate();
dialog.dismiss();
Bundle args = getIntent().getExtras();
args.putParcelableArrayList(DvrSeriesSchedulesFragment
.SERIES_SCHEDULES_KEY_SERIES_PROGRAMS, new ArrayList<>(programs));
DvrSeriesSchedulesFragment schedulesFragment = new DvrSeriesSchedulesFragment();
schedulesFragment.setArguments(args);
getFragmentManager().beginTransaction().add(
R.id.fragment_container, schedulesFragment).commit();
}
}.setLoadCurrentProgram(true)
.setLoadDisallowedProgram(true)
.setLoadScheduledEpisode(true)
.setIgnoreChannelOption(true)
.execute();
} else {
finish();
}
}
}