diff options
author | nchalko <nchalko@google.com> | 2019-01-08 15:11:56 -0800 |
---|---|---|
committer | Nick Chalko <nchalko@google.com> | 2019-02-12 22:10:25 -0800 |
commit | 8d29ba6d5e9df1238f2bee30f7e8afa8b7fa9c85 (patch) | |
tree | 3e2df6ead0cbc5971c5b9c8efcf3f78a860217c3 | |
parent | 62efccd567f95e29a835f172b57b8461c83695af (diff) | |
download | TV-8d29ba6d5e9df1238f2bee30f7e8afa8b7fa9c85.tar.gz |
Inject TunerTsStreamManager
PiperOrigin-RevId: 228408250
Change-Id: Ie5f41a1f95353238bc4e3c898b600f844db68e21
10 files changed, 78 insertions, 31 deletions
diff --git a/tests/common/src/com/android/tv/testing/TestSingletonApp.java b/tests/common/src/com/android/tv/testing/TestSingletonApp.java index 29068b14..00f64ce5 100644 --- a/tests/common/src/com/android/tv/testing/TestSingletonApp.java +++ b/tests/common/src/com/android/tv/testing/TestSingletonApp.java @@ -50,6 +50,7 @@ import com.android.tv.testing.dvr.DvrDataManagerInMemoryImpl; import com.android.tv.testing.testdata.TestData; import com.android.tv.tuner.singletons.TunerSingletons; import com.android.tv.tuner.source.TsDataSourceManagerFactory; +import com.android.tv.tuner.source.TunerTsStreamerManager; import com.android.tv.tuner.tvinput.factory.TunerSessionFactory; import com.android.tv.tuner.tvinput.factory.TunerSessionFactory.HasTunerSessionFactory; import com.android.tv.tuner.tvinput.factory.TunerSessionFactoryImpl; @@ -83,11 +84,13 @@ public class TestSingletonApp extends Application private final DefaultUiFlags mUiFlags = new DefaultUiFlags(); private final DefaultConcurrentDvrPlaybackFlags mConcurrentDvrPlaybackFlags = new DefaultConcurrentDvrPlaybackFlags(); + private final TsDataSourceManagerFactory mTsDataSourceManagerFactory = + new TsDataSourceManagerFactory(() -> new TunerTsStreamerManager()); private final TunerSessionFactoryImpl mTunerSessionFactory = new TunerSessionFactoryImpl( new DefaultExoplayer2Flags(), mConcurrentDvrPlaybackFlags, - new TsDataSourceManagerFactory()); + mTsDataSourceManagerFactory); private PerformanceMonitor mPerformanceMonitor; private ChannelDataManager mChannelDataManager; diff --git a/tuner/SampleDvbTuner/src/com/android/tv/tuner/sample/dvb/app/SampleDvbTuner.java b/tuner/SampleDvbTuner/src/com/android/tv/tuner/sample/dvb/app/SampleDvbTuner.java index ef0c5a26..ceb8a977 100644 --- a/tuner/SampleDvbTuner/src/com/android/tv/tuner/sample/dvb/app/SampleDvbTuner.java +++ b/tuner/SampleDvbTuner/src/com/android/tv/tuner/sample/dvb/app/SampleDvbTuner.java @@ -30,6 +30,7 @@ import com.android.tv.tuner.source.TsDataSourceManagerFactory; import com.android.tv.tuner.tvinput.factory.TunerSessionFactory; import com.android.tv.tuner.tvinput.factory.TunerSessionFactoryImpl; import dagger.android.AndroidInjector; +import javax.inject.Inject; /** The top level application for Sample DVB Tuner. */ public class SampleDvbTuner extends BaseApplication @@ -40,11 +41,16 @@ public class SampleDvbTuner extends BaseApplication private final DefaultConcurrentDvrPlaybackFlags mConcurrentDvrPlaybackFlags = new DefaultConcurrentDvrPlaybackFlags(); private final DefaultExoplayer2Flags mExoplayer2Flags = new DefaultExoplayer2Flags(); - private final TunerSessionFactoryImpl mTunerSessionFactory = - new TunerSessionFactoryImpl( - mExoplayer2Flags, - mConcurrentDvrPlaybackFlags, - new TsDataSourceManagerFactory()); + @Inject TsDataSourceManagerFactory mTsDataSourceManagerFactory; + private TunerSessionFactoryImpl mTunerSessionFactory; + + @Override + public void onCreate() { + super.onCreate(); + mTunerSessionFactory = + new TunerSessionFactoryImpl( + mExoplayer2Flags, mConcurrentDvrPlaybackFlags, mTsDataSourceManagerFactory); + } @Override protected AndroidInjector<SampleDvbTuner> applicationInjector() { diff --git a/tuner/SampleDvbTuner/src/com/android/tv/tuner/sample/dvb/app/SampleDvbTunerComponent.java b/tuner/SampleDvbTuner/src/com/android/tv/tuner/sample/dvb/app/SampleDvbTunerComponent.java index cb529cef..e6c80ea9 100644 --- a/tuner/SampleDvbTuner/src/com/android/tv/tuner/sample/dvb/app/SampleDvbTunerComponent.java +++ b/tuner/SampleDvbTuner/src/com/android/tv/tuner/sample/dvb/app/SampleDvbTunerComponent.java @@ -18,7 +18,9 @@ package com.android.tv.tuner.sample.dvb.app; import dagger.Component; import dagger.android.AndroidInjectionModule; import dagger.android.AndroidInjector; +import javax.inject.Singleton; /** Dagger component for {@link SampleDvbTuner}. */ +@Singleton @Component(modules = {AndroidInjectionModule.class, SampleDvbTunerModule.class}) public interface SampleDvbTunerComponent extends AndroidInjector<SampleDvbTuner> {} diff --git a/tuner/SampleNetworkTuner/src/com/android/tv/tuner/sample/network/app/SampleNetworkTuner.java b/tuner/SampleNetworkTuner/src/com/android/tv/tuner/sample/network/app/SampleNetworkTuner.java index 99634f9e..e1101039 100644 --- a/tuner/SampleNetworkTuner/src/com/android/tv/tuner/sample/network/app/SampleNetworkTuner.java +++ b/tuner/SampleNetworkTuner/src/com/android/tv/tuner/sample/network/app/SampleNetworkTuner.java @@ -30,6 +30,7 @@ import com.android.tv.tuner.source.TsDataSourceManagerFactory; import com.android.tv.tuner.tvinput.factory.TunerSessionFactory; import com.android.tv.tuner.tvinput.factory.TunerSessionFactoryImpl; import dagger.android.AndroidInjector; +import javax.inject.Inject; /** The top level application for Sample DVB Tuner. */ public class SampleNetworkTuner extends BaseApplication @@ -40,11 +41,16 @@ public class SampleNetworkTuner extends BaseApplication private final DefaultConcurrentDvrPlaybackFlags mConcurrentDvrPlaybackFlags = new DefaultConcurrentDvrPlaybackFlags(); private final DefaultExoplayer2Flags mExoplayer2Flags = new DefaultExoplayer2Flags(); - private final TunerSessionFactoryImpl mTunerSessionFactory = - new TunerSessionFactoryImpl( - mExoplayer2Flags, - mConcurrentDvrPlaybackFlags, - new TsDataSourceManagerFactory()); + @Inject TsDataSourceManagerFactory mTsDataSourceManagerFactory; + private TunerSessionFactoryImpl mTunerSessionFactory; + + @Override + public void onCreate() { + super.onCreate(); + mTunerSessionFactory = + new TunerSessionFactoryImpl( + mExoplayer2Flags, mConcurrentDvrPlaybackFlags, mTsDataSourceManagerFactory); + } @Override protected AndroidInjector<SampleNetworkTuner> applicationInjector() { diff --git a/tuner/SampleNetworkTuner/src/com/android/tv/tuner/sample/network/app/SampleNetworkTunerComponent.java b/tuner/SampleNetworkTuner/src/com/android/tv/tuner/sample/network/app/SampleNetworkTunerComponent.java index 71a20be5..b10105b3 100644 --- a/tuner/SampleNetworkTuner/src/com/android/tv/tuner/sample/network/app/SampleNetworkTunerComponent.java +++ b/tuner/SampleNetworkTuner/src/com/android/tv/tuner/sample/network/app/SampleNetworkTunerComponent.java @@ -18,7 +18,9 @@ package com.android.tv.tuner.sample.network.app; import dagger.Component; import dagger.android.AndroidInjectionModule; import dagger.android.AndroidInjector; +import javax.inject.Singleton; /** Dagger component for {@link SampleNetworkTuner}. */ +@Singleton @Component(modules = {AndroidInjectionModule.class, SampleNetworkTunerModule.class}) public interface SampleNetworkTunerComponent extends AndroidInjector<SampleNetworkTuner> {} diff --git a/tuner/src/com/android/tv/tuner/modules/TunerModule.java b/tuner/src/com/android/tv/tuner/modules/TunerModule.java index b0b58e86..4843f383 100644 --- a/tuner/src/com/android/tv/tuner/modules/TunerModule.java +++ b/tuner/src/com/android/tv/tuner/modules/TunerModule.java @@ -15,8 +15,9 @@ */ package com.android.tv.tuner.modules; +import com.android.tv.tuner.source.TunerSourceModule; import dagger.Module; /** Dagger module for TV Tuners. */ -@Module(includes = {TunerSingletonsModule.class}) +@Module(includes = {TunerSingletonsModule.class, TunerSourceModule.class}) public class TunerModule {} diff --git a/tuner/src/com/android/tv/tuner/source/TsDataSourceManager.java b/tuner/src/com/android/tv/tuner/source/TsDataSourceManager.java index a53f7869..21679307 100644 --- a/tuner/src/com/android/tv/tuner/source/TsDataSourceManager.java +++ b/tuner/src/com/android/tv/tuner/source/TsDataSourceManager.java @@ -23,6 +23,7 @@ import com.android.tv.tuner.data.TunerChannel; import com.android.tv.tuner.data.nano.Channel; import com.android.tv.tuner.ts.EventDetector.EventListener; import com.google.auto.factory.AutoFactory; +import com.google.auto.factory.Provided; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.atomic.AtomicInteger; @@ -40,13 +41,14 @@ public class TsDataSourceManager { private final int mId = sSequenceId.incrementAndGet(); private final boolean mIsRecording; - private final TunerTsStreamerManager mTunerStreamerManager = - TunerTsStreamerManager.getInstance(); + private final TunerTsStreamerManager mTunerStreamerManager; private boolean mKeepTuneStatus; - TsDataSourceManager(boolean isRecording) { + TsDataSourceManager( + boolean isRecording, @Provided TunerTsStreamerManager tunerStreamerManager) { mIsRecording = isRecording; + this.mTunerStreamerManager = tunerStreamerManager; mKeepTuneStatus = true; } diff --git a/tuner/src/com/android/tv/tuner/source/TunerSourceModule.java b/tuner/src/com/android/tv/tuner/source/TunerSourceModule.java new file mode 100644 index 00000000..656f4a04 --- /dev/null +++ b/tuner/src/com/android/tv/tuner/source/TunerSourceModule.java @@ -0,0 +1,30 @@ +/* + * Copyright (C) 2019 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.tuner.source; + +import dagger.Module; +import dagger.Provides; +import javax.inject.Singleton; + +/** Dagger module for TV Tuners Sources. */ +@Module() +public class TunerSourceModule { + @Provides + @Singleton + TunerTsStreamerManager providesTunerTsStreamerManager() { + return new TunerTsStreamerManager(); + } +} diff --git a/tuner/src/com/android/tv/tuner/source/TunerTsStreamerManager.java b/tuner/src/com/android/tv/tuner/source/TunerTsStreamerManager.java index 9c9e3ee1..35eeb9aa 100644 --- a/tuner/src/com/android/tv/tuner/source/TunerTsStreamerManager.java +++ b/tuner/src/com/android/tv/tuner/source/TunerTsStreamerManager.java @@ -17,6 +17,7 @@ package com.android.tv.tuner.source; import android.content.Context; +import android.support.annotation.VisibleForTesting; import com.android.tv.common.SoftPreconditions; import com.android.tv.common.util.AutoCloseableUtils; import com.android.tv.tuner.BuiltInTunerHalFactory; @@ -29,13 +30,17 @@ import java.util.HashSet; import java.util.Iterator; import java.util.Map; import java.util.Set; +import javax.inject.Inject; +import javax.inject.Singleton; /** * Manages {@link TunerTsStreamer} for playback and recording. The class hides handling of {@link * Tuner} from other classes. This class is used by {@link TsDataSourceManager}. Don't use this * class directly. */ -class TunerTsStreamerManager { +@Singleton +@VisibleForTesting +public class TunerTsStreamerManager { // The lock will protect mStreamerFinder, mSourceToStreamerMap and some part of TsStreamCreator // to support timely {@link TunerTsStreamer} cancellation due to a new tune request from // the same session. @@ -46,21 +51,10 @@ class TunerTsStreamerManager { private final Map<TsDataSource, TunerTsStreamer> mSourceToStreamerMap = new HashMap<>(); private final TunerFactory mTunerFactory = BuiltInTunerHalFactory.INSTANCE; private final TunerHalManager mTunerHalManager = new TunerHalManager(mTunerFactory); - private static TunerTsStreamerManager sInstance; - /** - * Returns the singleton instance for the class - * - * @return TunerTsStreamerManager - */ - static synchronized TunerTsStreamerManager getInstance() { - if (sInstance == null) { - sInstance = new TunerTsStreamerManager(); - } - return sInstance; - } - - private TunerTsStreamerManager() {} + @Inject + @VisibleForTesting + public TunerTsStreamerManager() {} synchronized TsDataSource createDataSource( Context context, diff --git a/tuner/src/com/android/tv/tuner/tvinput/BaseTunerTvInputService.java b/tuner/src/com/android/tv/tuner/tvinput/BaseTunerTvInputService.java index 93e19374..fb8eeb77 100644 --- a/tuner/src/com/android/tv/tuner/tvinput/BaseTunerTvInputService.java +++ b/tuner/src/com/android/tv/tuner/tvinput/BaseTunerTvInputService.java @@ -45,6 +45,7 @@ public class BaseTunerTvInputService extends TvInputService { private final Set<Session> mTunerSessions = Collections.newSetFromMap(new WeakHashMap<>()); private ChannelDataManager mChannelDataManager; private ConcurrentDvrPlaybackFlags mConcurrentDvrPlaybackFlags; + @Inject TsDataSourceManagerFactory mTsDataSourceManagerFactory; @Inject TunerSessionFactory mTunerSessionFactory; @Override @@ -93,7 +94,7 @@ public class BaseTunerTvInputService extends TvInputService { inputId, mChannelDataManager, mConcurrentDvrPlaybackFlags, - new TsDataSourceManagerFactory()); + mTsDataSourceManagerFactory); } @Override |