aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authornchalko <nchalko@google.com>2018-12-19 10:33:22 -0800
committerCopybara-Service <copybara-piper@google.com>2018-12-19 10:34:15 -0800
commitc36d72b76800064828c32b03bac02e43969a4b82 (patch)
treebb1f2157b35360a4415aeef1aa0c2186073ed431
parentdf3ade4b407b417827c9e2a86b0129ca5e6d8157 (diff)
downloadTV-c36d72b76800064828c32b03bac02e43969a4b82.tar.gz
Use HasSingletons for application singletons
PiperOrigin-RevId: 226195173 Change-Id: Ie0272d84d56e2a43d95a1ff2c4b6859370ca6283
-rw-r--r--common/src/com/android/tv/common/BaseApplication.java8
-rw-r--r--common/src/com/android/tv/common/singletons/HasSingletons.java7
-rw-r--r--src/com/android/tv/TvSingletons.java8
-rw-r--r--src/com/android/tv/app/LiveTvApplication.java9
-rw-r--r--tests/common/src/com/android/tv/testing/TestSingletonApp.java9
-rw-r--r--tests/unit/src/com/android/tv/util/MockTvSingletons.java8
6 files changed, 44 insertions, 5 deletions
diff --git a/common/src/com/android/tv/common/BaseApplication.java b/common/src/com/android/tv/common/BaseApplication.java
index 6166b46b..566bd25b 100644
--- a/common/src/com/android/tv/common/BaseApplication.java
+++ b/common/src/com/android/tv/common/BaseApplication.java
@@ -40,7 +40,13 @@ public abstract class BaseApplication extends Application implements BaseSinglet
*/
@VisibleForTesting public static BaseSingletons sSingletons;
- /** Returns the {@link BaseSingletons} using the application context. */
+ /**
+ * Returns the {@link BaseSingletons} using the application context.
+ *
+ * @deprecated use {@link com.android.tv.common.singletons.HasSingletons#get(Class, Context)}
+ * instead
+ */
+ @Deprecated
public static BaseSingletons getSingletons(Context context) {
// STOP-SHIP: changing the method to protected once the Tuner application is created.
// No need to be "synchronized" because this doesn't create any instance.
diff --git a/common/src/com/android/tv/common/singletons/HasSingletons.java b/common/src/com/android/tv/common/singletons/HasSingletons.java
index b72ee4fc..193aed3a 100644
--- a/common/src/com/android/tv/common/singletons/HasSingletons.java
+++ b/common/src/com/android/tv/common/singletons/HasSingletons.java
@@ -15,12 +15,19 @@
*/
package com.android.tv.common.singletons;
+import android.content.Context;
+
/**
* A type that can know about and supply a singleton, typically a type t such as an android activity
* or application.
*/
public interface HasSingletons<C> {
+ @SuppressWarnings("unchecked") // injection
+ static <C> C get(Class<C> clazz, Context context) {
+ return ((HasSingletons<C>) context).singletons();
+ }
+
/** Returns the strongly typed singleton. */
C singletons();
}
diff --git a/src/com/android/tv/TvSingletons.java b/src/com/android/tv/TvSingletons.java
index f582b236..89e45a81 100644
--- a/src/com/android/tv/TvSingletons.java
+++ b/src/com/android/tv/TvSingletons.java
@@ -44,7 +44,13 @@ import javax.inject.Provider;
/** Interface with getters for application scoped singletons. */
public interface TvSingletons extends BaseSingletons, HasBuiltInTunerManager {
- /** Returns the @{@link TvSingletons} using the application context. */
+ /**
+ * Returns the @{@link TvSingletons} using the application context.
+ *
+ * @deprecated use {@link com.android.tv.common.singletons.HasSingletons#get(Class, Context)}
+ * instead
+ */
+ @Deprecated
static TvSingletons getSingletons(Context context) {
return (TvSingletons) BaseApplication.getSingletons(context);
}
diff --git a/src/com/android/tv/app/LiveTvApplication.java b/src/com/android/tv/app/LiveTvApplication.java
index db20846c..0646e104 100644
--- a/src/com/android/tv/app/LiveTvApplication.java
+++ b/src/com/android/tv/app/LiveTvApplication.java
@@ -22,6 +22,7 @@ import android.content.Intent;
import android.media.tv.TvContract;
import com.android.tv.TvActivity;
import com.android.tv.TvApplication;
+import com.android.tv.TvSingletons;
import com.android.tv.analytics.Analytics;
import com.android.tv.analytics.StubAnalytics;
import com.android.tv.analytics.Tracker;
@@ -30,6 +31,7 @@ import com.android.tv.common.experiments.ExperimentLoader;
import com.android.tv.common.flags.impl.DefaultBackendKnobsFlags;
import com.android.tv.common.flags.impl.DefaultCloudEpgFlags;
import com.android.tv.common.flags.impl.DefaultConcurrentDvrPlaybackFlags;
+import com.android.tv.common.singletons.HasSingletons;
import com.android.tv.common.util.CommonUtils;
import com.android.tv.data.epg.EpgReader;
import com.android.tv.data.epg.StubEpgReader;
@@ -44,7 +46,7 @@ import com.google.common.base.Optional;
import javax.inject.Provider;
/** The top level application for Live TV. */
-public class LiveTvApplication extends TvApplication {
+public class LiveTvApplication extends TvApplication implements HasSingletons<TvSingletons> {
static {
PERFORMANCE_MONITOR_MANAGER.getStartupMeasure().onAppClassLoaded();
@@ -169,4 +171,9 @@ public class LiveTvApplication extends TvApplication {
public DefaultConcurrentDvrPlaybackFlags getConcurrentDvrPlaybackFlags() {
return mConcurrentDvrPlaybackFlags;
}
+
+ @Override
+ public TvSingletons singletons() {
+ return this;
+ }
}
diff --git a/tests/common/src/com/android/tv/testing/TestSingletonApp.java b/tests/common/src/com/android/tv/testing/TestSingletonApp.java
index de0db8ce..199ce98e 100644
--- a/tests/common/src/com/android/tv/testing/TestSingletonApp.java
+++ b/tests/common/src/com/android/tv/testing/TestSingletonApp.java
@@ -33,6 +33,7 @@ import com.android.tv.common.flags.impl.DefaultCloudEpgFlags;
import com.android.tv.common.flags.impl.DefaultConcurrentDvrPlaybackFlags;
import com.android.tv.common.flags.impl.DefaultExoplayer2Flags;
import com.android.tv.common.recording.RecordingStorageStatusManager;
+import com.android.tv.common.singletons.HasSingletons;
import com.android.tv.common.util.Clock;
import com.android.tv.data.ChannelDataManager;
import com.android.tv.data.PreviewDataManager;
@@ -60,7 +61,8 @@ import java.util.concurrent.Executor;
import javax.inject.Provider;
/** Test application for Live TV. */
-public class TestSingletonApp extends Application implements TvSingletons, HasTunerSessionFactory {
+public class TestSingletonApp extends Application
+ implements TvSingletons, HasTunerSessionFactory, HasSingletons<TvSingletons> {
public final FakeClock fakeClock = FakeClock.createWithCurrentTime();
public final FakeEpgReader epgReader = new FakeEpgReader(fakeClock);
public final FakeEpgFetcher epgFetcher = new FakeEpgFetcher();
@@ -271,4 +273,9 @@ public class TestSingletonApp extends Application implements TvSingletons, HasTu
public TunerSessionFactory getTunerSessionFactory() {
return mTunerSessionFactory;
}
+
+ @Override
+ public TvSingletons singletons() {
+ return this;
+ }
}
diff --git a/tests/unit/src/com/android/tv/util/MockTvSingletons.java b/tests/unit/src/com/android/tv/util/MockTvSingletons.java
index d59ef2d4..f16722f3 100644
--- a/tests/unit/src/com/android/tv/util/MockTvSingletons.java
+++ b/tests/unit/src/com/android/tv/util/MockTvSingletons.java
@@ -29,6 +29,7 @@ import com.android.tv.common.flags.impl.DefaultBackendKnobsFlags;
import com.android.tv.common.flags.impl.DefaultCloudEpgFlags;
import com.android.tv.common.flags.impl.DefaultConcurrentDvrPlaybackFlags;
import com.android.tv.common.recording.RecordingStorageStatusManager;
+import com.android.tv.common.singletons.HasSingletons;
import com.android.tv.common.util.Clock;
import com.android.tv.data.ChannelDataManager;
import com.android.tv.data.PreviewDataManager;
@@ -48,7 +49,7 @@ import java.util.concurrent.Executor;
import javax.inject.Provider;
/** Mock {@link TvSingletons} class. */
-public class MockTvSingletons implements TvSingletons {
+public class MockTvSingletons implements TvSingletons, HasSingletons<TvSingletons> {
public final FakeClock fakeClock = FakeClock.createWithCurrentTime();
private final TvApplication mApp;
@@ -228,4 +229,9 @@ public class MockTvSingletons implements TvSingletons {
public DefaultConcurrentDvrPlaybackFlags getConcurrentDvrPlaybackFlags() {
return mConcurrentDvrPlaybackFlags;
}
+
+ @Override
+ public TvSingletons singletons() {
+ return this;
+ }
}