1 /* 2 * Copyright (C) 2017 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.testing; 18 19 import android.app.Application; 20 import android.content.ComponentName; 21 import android.content.Context; 22 import android.content.Intent; 23 import android.media.tv.TvInputManager; 24 import android.os.AsyncTask; 25 import com.android.tv.InputSessionManager; 26 import com.android.tv.MainActivityWrapper; 27 import com.android.tv.TvSingletons; 28 import com.android.tv.analytics.Analytics; 29 import com.android.tv.analytics.Tracker; 30 import com.android.tv.common.BaseApplication; 31 import com.android.tv.common.config.api.RemoteConfig; 32 import com.android.tv.common.experiments.ExperimentLoader; 33 import com.android.tv.common.recording.RecordingStorageStatusManager; 34 import com.android.tv.common.util.Clock; 35 import com.android.tv.data.ChannelDataManager; 36 import com.android.tv.data.PreviewDataManager; 37 import com.android.tv.data.ProgramDataManager; 38 import com.android.tv.data.epg.EpgFetcher; 39 import com.android.tv.data.epg.EpgReader; 40 import com.android.tv.dvr.DvrDataManager; 41 import com.android.tv.dvr.DvrManager; 42 import com.android.tv.dvr.DvrScheduleManager; 43 import com.android.tv.dvr.DvrWatchedPositionManager; 44 import com.android.tv.dvr.recorder.RecordingScheduler; 45 import com.android.tv.perf.PerformanceMonitor; 46 import com.android.tv.perf.StubPerformanceMonitor; 47 import com.android.tv.testing.dvr.DvrDataManagerInMemoryImpl; 48 import com.android.tv.testing.testdata.TestData; 49 import com.android.tv.tuner.TunerInputController; 50 import com.android.tv.util.SetupUtils; 51 import com.android.tv.util.TvInputManagerHelper; 52 import com.android.tv.util.account.AccountHelper; 53 import java.util.concurrent.Executor; 54 import javax.inject.Provider; 55 56 /** Test application for Live TV. */ 57 public class TestSingletonApp extends Application implements TvSingletons { 58 public final FakeClock fakeClock = FakeClock.createWithCurrentTime(); 59 public final FakeEpgReader epgReader = new FakeEpgReader(fakeClock); 60 public final FakeRemoteConfig remoteConfig = new FakeRemoteConfig(); 61 public final FakeEpgFetcher epgFetcher = new FakeEpgFetcher(); 62 63 public FakeTvInputManagerHelper tvInputManagerHelper; 64 public SetupUtils setupUtils; 65 public DvrManager dvrManager; 66 public DvrDataManager mDvrDataManager; 67 68 private final Provider<EpgReader> mEpgReaderProvider = SingletonProvider.create(epgReader); 69 private TunerInputController mTunerInputController; 70 private PerformanceMonitor mPerformanceMonitor; 71 private ChannelDataManager mChannelDataManager; 72 73 @Override onCreate()74 public void onCreate() { 75 super.onCreate(); 76 mTunerInputController = 77 new TunerInputController( 78 ComponentName.unflattenFromString(getEmbeddedTunerInputId())); 79 80 tvInputManagerHelper = new FakeTvInputManagerHelper(this); 81 setupUtils = SetupUtils.createForTvSingletons(this); 82 tvInputManagerHelper.start(); 83 mChannelDataManager = new ChannelDataManager(this, tvInputManagerHelper); 84 mChannelDataManager.start(); 85 mDvrDataManager = new DvrDataManagerInMemoryImpl(this, fakeClock); 86 // HACK reset the singleton for tests 87 BaseApplication.sSingletons = this; 88 } 89 loadTestData(TestData testData, long durationMs)90 public void loadTestData(TestData testData, long durationMs) { 91 tvInputManagerHelper 92 .getFakeTvInputManager() 93 .add(testData.getTvInputInfo(), TvInputManager.INPUT_STATE_CONNECTED); 94 testData.init(this, fakeClock, durationMs); 95 } 96 97 @Override getAnalytics()98 public Analytics getAnalytics() { 99 return null; 100 } 101 102 @Override handleInputCountChanged()103 public void handleInputCountChanged() {} 104 105 @Override getChannelDataManager()106 public ChannelDataManager getChannelDataManager() { 107 return mChannelDataManager; 108 } 109 110 @Override isChannelDataManagerLoadFinished()111 public boolean isChannelDataManagerLoadFinished() { 112 return false; 113 } 114 115 @Override getProgramDataManager()116 public ProgramDataManager getProgramDataManager() { 117 return null; 118 } 119 120 @Override isProgramDataManagerCurrentProgramsLoadFinished()121 public boolean isProgramDataManagerCurrentProgramsLoadFinished() { 122 return false; 123 } 124 125 @Override getPreviewDataManager()126 public PreviewDataManager getPreviewDataManager() { 127 return null; 128 } 129 130 @Override getDvrDataManager()131 public DvrDataManager getDvrDataManager() { 132 return mDvrDataManager; 133 } 134 135 @Override getDvrScheduleManager()136 public DvrScheduleManager getDvrScheduleManager() { 137 return null; 138 } 139 140 @Override getDvrManager()141 public DvrManager getDvrManager() { 142 return dvrManager; 143 } 144 145 @Override getRecordingScheduler()146 public RecordingScheduler getRecordingScheduler() { 147 return null; 148 } 149 150 @Override getDvrWatchedPositionManager()151 public DvrWatchedPositionManager getDvrWatchedPositionManager() { 152 return null; 153 } 154 155 @Override getInputSessionManager()156 public InputSessionManager getInputSessionManager() { 157 return null; 158 } 159 160 @Override getTracker()161 public Tracker getTracker() { 162 return null; 163 } 164 165 @Override getTvInputManagerHelper()166 public TvInputManagerHelper getTvInputManagerHelper() { 167 return tvInputManagerHelper; 168 } 169 170 @Override providesEpgReader()171 public Provider<EpgReader> providesEpgReader() { 172 return mEpgReaderProvider; 173 } 174 175 @Override getEpgFetcher()176 public EpgFetcher getEpgFetcher() { 177 return epgFetcher; 178 } 179 180 @Override getSetupUtils()181 public SetupUtils getSetupUtils() { 182 return setupUtils; 183 } 184 185 @Override getTunerInputController()186 public TunerInputController getTunerInputController() { 187 return mTunerInputController; 188 } 189 190 @Override getExperimentLoader()191 public ExperimentLoader getExperimentLoader() { 192 return new ExperimentLoader(); 193 } 194 195 @Override getMainActivityWrapper()196 public MainActivityWrapper getMainActivityWrapper() { 197 return null; 198 } 199 200 @Override getAccountHelper()201 public AccountHelper getAccountHelper() { 202 return null; 203 } 204 205 @Override getClock()206 public Clock getClock() { 207 return fakeClock; 208 } 209 210 @Override getRecordingStorageStatusManager()211 public RecordingStorageStatusManager getRecordingStorageStatusManager() { 212 return null; 213 } 214 215 @Override getRemoteConfig()216 public RemoteConfig getRemoteConfig() { 217 return remoteConfig; 218 } 219 220 @Override getTunerSetupIntent(Context context)221 public Intent getTunerSetupIntent(Context context) { 222 return null; 223 } 224 225 @Override isRunningInMainProcess()226 public boolean isRunningInMainProcess() { 227 return false; 228 } 229 230 @Override getPerformanceMonitor()231 public PerformanceMonitor getPerformanceMonitor() { 232 if (mPerformanceMonitor == null) { 233 mPerformanceMonitor = new StubPerformanceMonitor(); 234 } 235 return mPerformanceMonitor; 236 } 237 238 @Override getEmbeddedTunerInputId()239 public String getEmbeddedTunerInputId() { 240 return "com.android.tv/.tuner.tvinput.TunerTvInputService"; 241 } 242 243 @Override getDbExecutor()244 public Executor getDbExecutor() { 245 return AsyncTask.SERIAL_EXECUTOR; 246 } 247 } 248