/* * Copyright (C) 2017 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.testing; import android.app.Application; import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.media.tv.TvInputManager; import android.os.AsyncTask; import com.android.tv.InputSessionManager; import com.android.tv.MainActivityWrapper; import com.android.tv.TvSingletons; import com.android.tv.analytics.Analytics; import com.android.tv.analytics.Tracker; import com.android.tv.common.BaseApplication; import com.android.tv.common.config.api.RemoteConfig; import com.android.tv.common.experiments.ExperimentLoader; import com.android.tv.common.recording.RecordingStorageStatusManager; import com.android.tv.common.util.Clock; import com.android.tv.data.ChannelDataManager; import com.android.tv.data.PreviewDataManager; import com.android.tv.data.ProgramDataManager; import com.android.tv.data.epg.EpgFetcher; import com.android.tv.data.epg.EpgReader; import com.android.tv.dvr.DvrDataManager; import com.android.tv.dvr.DvrManager; import com.android.tv.dvr.DvrScheduleManager; import com.android.tv.dvr.DvrWatchedPositionManager; import com.android.tv.dvr.recorder.RecordingScheduler; import com.android.tv.perf.PerformanceMonitor; import com.android.tv.perf.StubPerformanceMonitor; import com.android.tv.testing.dvr.DvrDataManagerInMemoryImpl; import com.android.tv.testing.testdata.TestData; import com.android.tv.tuner.TunerInputController; import com.android.tv.util.SetupUtils; import com.android.tv.util.TvInputManagerHelper; import com.android.tv.util.account.AccountHelper; import java.util.concurrent.Executor; import javax.inject.Provider; /** Test application for Live TV. */ public class TestSingletonApp extends Application implements TvSingletons { public final FakeClock fakeClock = FakeClock.createWithCurrentTime(); public final FakeEpgReader epgReader = new FakeEpgReader(fakeClock); public final FakeRemoteConfig remoteConfig = new FakeRemoteConfig(); public final FakeEpgFetcher epgFetcher = new FakeEpgFetcher(); public FakeTvInputManagerHelper tvInputManagerHelper; public SetupUtils setupUtils; public DvrManager dvrManager; public DvrDataManager mDvrDataManager; private final Provider mEpgReaderProvider = SingletonProvider.create(epgReader); private TunerInputController mTunerInputController; private PerformanceMonitor mPerformanceMonitor; private ChannelDataManager mChannelDataManager; @Override public void onCreate() { super.onCreate(); mTunerInputController = new TunerInputController( ComponentName.unflattenFromString(getEmbeddedTunerInputId())); tvInputManagerHelper = new FakeTvInputManagerHelper(this); setupUtils = SetupUtils.createForTvSingletons(this); tvInputManagerHelper.start(); mChannelDataManager = new ChannelDataManager(this, tvInputManagerHelper); mChannelDataManager.start(); mDvrDataManager = new DvrDataManagerInMemoryImpl(this, fakeClock); // HACK reset the singleton for tests BaseApplication.sSingletons = this; } public void loadTestData(TestData testData, long durationMs) { tvInputManagerHelper .getFakeTvInputManager() .add(testData.getTvInputInfo(), TvInputManager.INPUT_STATE_CONNECTED); testData.init(this, fakeClock, durationMs); } @Override public Analytics getAnalytics() { return null; } @Override public void handleInputCountChanged() {} @Override public ChannelDataManager getChannelDataManager() { return mChannelDataManager; } @Override public boolean isChannelDataManagerLoadFinished() { return false; } @Override public ProgramDataManager getProgramDataManager() { return null; } @Override public boolean isProgramDataManagerCurrentProgramsLoadFinished() { return false; } @Override public PreviewDataManager getPreviewDataManager() { return null; } @Override public DvrDataManager getDvrDataManager() { return mDvrDataManager; } @Override public DvrScheduleManager getDvrScheduleManager() { return null; } @Override public DvrManager getDvrManager() { return dvrManager; } @Override public RecordingScheduler getRecordingScheduler() { return null; } @Override public DvrWatchedPositionManager getDvrWatchedPositionManager() { return null; } @Override public InputSessionManager getInputSessionManager() { return null; } @Override public Tracker getTracker() { return null; } @Override public TvInputManagerHelper getTvInputManagerHelper() { return tvInputManagerHelper; } @Override public Provider providesEpgReader() { return mEpgReaderProvider; } @Override public EpgFetcher getEpgFetcher() { return epgFetcher; } @Override public SetupUtils getSetupUtils() { return setupUtils; } @Override public TunerInputController getTunerInputController() { return mTunerInputController; } @Override public ExperimentLoader getExperimentLoader() { return new ExperimentLoader(); } @Override public MainActivityWrapper getMainActivityWrapper() { return null; } @Override public AccountHelper getAccountHelper() { return null; } @Override public Clock getClock() { return fakeClock; } @Override public RecordingStorageStatusManager getRecordingStorageStatusManager() { return null; } @Override public RemoteConfig getRemoteConfig() { return remoteConfig; } @Override public Intent getTunerSetupIntent(Context context) { return null; } @Override public boolean isRunningInMainProcess() { return false; } @Override public PerformanceMonitor getPerformanceMonitor() { if (mPerformanceMonitor == null) { mPerformanceMonitor = new StubPerformanceMonitor(); } return mPerformanceMonitor; } @Override public String getEmbeddedTunerInputId() { return "com.android.tv/.tuner.tvinput.TunerTvInputService"; } @Override public Executor getDbExecutor() { return AsyncTask.SERIAL_EXECUTOR; } }