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.app; 18 19 import com.android.tv.TvApplication; 20 import com.android.tv.TvSingletons; 21 import com.android.tv.analytics.Analytics; 22 import com.android.tv.analytics.StubAnalytics; 23 import com.android.tv.analytics.Tracker; 24 import com.android.tv.common.dagger.ApplicationModule; 25 import com.android.tv.common.experiments.ExperimentLoader; 26 import com.android.tv.common.flags.impl.DefaultBackendKnobsFlags; 27 import com.android.tv.common.flags.impl.DefaultCloudEpgFlags; 28 import com.android.tv.common.flags.impl.DefaultConcurrentDvrPlaybackFlags; 29 import com.android.tv.common.flags.impl.DefaultUiFlags; 30 import com.android.tv.common.singletons.HasSingletons; 31 import com.android.tv.data.epg.EpgReader; 32 import com.android.tv.data.epg.StubEpgReader; 33 import com.android.tv.modules.TvSingletonsModule; 34 import com.android.tv.perf.PerformanceMonitor; 35 import com.android.tv.perf.PerformanceMonitorManagerFactory; 36 import com.android.tv.tunerinputcontroller.BuiltInTunerManager; 37 import com.android.tv.util.account.AccountHelper; 38 import com.android.tv.util.account.AccountHelperImpl; 39 import com.google.common.base.Optional; 40 import dagger.android.AndroidInjector; 41 import javax.inject.Provider; 42 43 /** The top level application for Live TV. */ 44 public class LiveTvApplication extends TvApplication implements HasSingletons<TvSingletons> { 45 46 static { 47 PERFORMANCE_MONITOR_MANAGER.getStartupMeasure().onAppClassLoaded(); 48 } 49 50 private final Provider<EpgReader> mEpgReaderProvider = 51 new Provider<EpgReader>() { 52 53 @Override 54 public EpgReader get() { 55 return new StubEpgReader(LiveTvApplication.this); 56 } 57 }; 58 59 private final DefaultBackendKnobsFlags mBackendKnobsFlags = new DefaultBackendKnobsFlags(); 60 private final DefaultCloudEpgFlags mCloudEpgFlags = new DefaultCloudEpgFlags(); 61 private final DefaultUiFlags mUiFlags = new DefaultUiFlags(); 62 private final DefaultConcurrentDvrPlaybackFlags mConcurrentDvrPlaybackFlags = 63 new DefaultConcurrentDvrPlaybackFlags(); 64 private AccountHelper mAccountHelper; 65 private Analytics mAnalytics; 66 private Tracker mTracker; 67 private ExperimentLoader mExperimentLoader; 68 private PerformanceMonitor mPerformanceMonitor; 69 70 @Override applicationInjector()71 protected AndroidInjector<LiveTvApplication> applicationInjector() { 72 return DaggerLiveTvApplicationComponent.builder() 73 .applicationModule(new ApplicationModule(this)) 74 .tvSingletonsModule(new TvSingletonsModule(this)) 75 .build(); 76 } 77 78 @Override onCreate()79 public void onCreate() { 80 super.onCreate(); 81 PERFORMANCE_MONITOR_MANAGER.getStartupMeasure().onAppCreate(this); 82 } 83 84 /** Returns the {@link AccountHelperImpl}. */ 85 @Override getAccountHelper()86 public AccountHelper getAccountHelper() { 87 if (mAccountHelper == null) { 88 mAccountHelper = new AccountHelperImpl(getApplicationContext()); 89 } 90 return mAccountHelper; 91 } 92 93 @Override getPerformanceMonitor()94 public synchronized PerformanceMonitor getPerformanceMonitor() { 95 if (mPerformanceMonitor == null) { 96 mPerformanceMonitor = PerformanceMonitorManagerFactory.create().initialize(this); 97 } 98 return mPerformanceMonitor; 99 } 100 101 @Override providesEpgReader()102 public Provider<EpgReader> providesEpgReader() { 103 return mEpgReaderProvider; 104 } 105 106 @Override getExperimentLoader()107 public ExperimentLoader getExperimentLoader() { 108 mExperimentLoader = new ExperimentLoader(); 109 return mExperimentLoader; 110 } 111 112 @Override getBackendKnobs()113 public DefaultBackendKnobsFlags getBackendKnobs() { 114 return mBackendKnobsFlags; 115 } 116 117 /** Returns the {@link Analytics}. */ 118 @Override getAnalytics()119 public synchronized Analytics getAnalytics() { 120 if (mAnalytics == null) { 121 mAnalytics = StubAnalytics.getInstance(this); 122 } 123 return mAnalytics; 124 } 125 126 /** Returns the default tracker. */ 127 @Override getTracker()128 public synchronized Tracker getTracker() { 129 if (mTracker == null) { 130 mTracker = getAnalytics().getDefaultTracker(); 131 } 132 return mTracker; 133 } 134 135 @Override getCloudEpgFlags()136 public DefaultCloudEpgFlags getCloudEpgFlags() { 137 return mCloudEpgFlags; 138 } 139 140 @Override getUiFlags()141 public DefaultUiFlags getUiFlags() { 142 return mUiFlags; 143 } 144 145 @Override getBuiltInTunerManager()146 public Optional<BuiltInTunerManager> getBuiltInTunerManager() { 147 return Optional.absent(); 148 } 149 150 @Override getBuildType()151 public BuildType getBuildType() { 152 return BuildType.AOSP; 153 } 154 155 @Override getConcurrentDvrPlaybackFlags()156 public DefaultConcurrentDvrPlaybackFlags getConcurrentDvrPlaybackFlags() { 157 return mConcurrentDvrPlaybackFlags; 158 } 159 160 @Override singletons()161 public TvSingletons singletons() { 162 return this; 163 } 164 } 165