• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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