From 3c15a2863a87ca406aee35e38249d04fae3a6ef7 Mon Sep 17 00:00:00 2001 From: Eric Cochran Date: Thu, 8 Feb 2018 23:48:26 -0800 Subject: [PATCH 1/2] Fix referencing TileService on older devices. Use a different component for 24+, and only reference this component on 24+. --- .../telecine/TelecineApplication.java | 10 +++++++++- .../jakewharton/telecine/TelecineComponent.java | 2 ++ .../com/jakewharton/telecine/TelecineModule.java | 2 -- .../telecine/TelecineTileService.java | 16 ++++++++++++++++ 4 files changed, 27 insertions(+), 3 deletions(-) diff --git a/telecine/src/main/java/com/jakewharton/telecine/TelecineApplication.java b/telecine/src/main/java/com/jakewharton/telecine/TelecineApplication.java index ed03239..627b614 100644 --- a/telecine/src/main/java/com/jakewharton/telecine/TelecineApplication.java +++ b/telecine/src/main/java/com/jakewharton/telecine/TelecineApplication.java @@ -13,13 +13,21 @@ import javax.inject.Inject; import timber.log.Timber; +import static android.os.Build.VERSION.SDK_INT; +import static android.os.Build.VERSION_CODES.N; + public final class TelecineApplication extends Application implements HasActivityInjector, HasServiceInjector { @Inject DispatchingAndroidInjector dispatchingActivityInjector; @Inject DispatchingAndroidInjector dispatchingServiceInjector; @Override public void onCreate() { - DaggerTelecineComponent.builder().application(this).build().inject(this); + TelecineComponent component = DaggerTelecineComponent.builder().application(this).build(); + if (SDK_INT >= N) { + component.telecineTileServiceComponent().inject(this); + } else { + component.inject(this); + } super.onCreate(); if (BuildConfig.DEBUG) { diff --git a/telecine/src/main/java/com/jakewharton/telecine/TelecineComponent.java b/telecine/src/main/java/com/jakewharton/telecine/TelecineComponent.java index cd0216d..4990594 100644 --- a/telecine/src/main/java/com/jakewharton/telecine/TelecineComponent.java +++ b/telecine/src/main/java/com/jakewharton/telecine/TelecineComponent.java @@ -10,6 +10,8 @@ interface TelecineComponent { void inject(TelecineApplication app); + TelecineTileService.Component telecineTileServiceComponent(); + @Component.Builder interface Builder { @BindsInstance Builder application(Application application); diff --git a/telecine/src/main/java/com/jakewharton/telecine/TelecineModule.java b/telecine/src/main/java/com/jakewharton/telecine/TelecineModule.java index cf4a475..bd84d66 100644 --- a/telecine/src/main/java/com/jakewharton/telecine/TelecineModule.java +++ b/telecine/src/main/java/com/jakewharton/telecine/TelecineModule.java @@ -108,6 +108,4 @@ static Integer provideVideoSizePercentage(@VideoSizePercentage IntPreference pre abstract TelecineShortcutLaunchActivity contributeTelecineShortcutLaunchActivity(); @ContributesAndroidInjector abstract TelecineService contributeTelecineService(); - - @ContributesAndroidInjector abstract TelecineTileService contributeTelecineTileService(); } diff --git a/telecine/src/main/java/com/jakewharton/telecine/TelecineTileService.java b/telecine/src/main/java/com/jakewharton/telecine/TelecineTileService.java index aff58e9..61edc7b 100644 --- a/telecine/src/main/java/com/jakewharton/telecine/TelecineTileService.java +++ b/telecine/src/main/java/com/jakewharton/telecine/TelecineTileService.java @@ -1,10 +1,14 @@ package com.jakewharton.telecine; import android.annotation.TargetApi; +import android.app.Service; import android.service.quicksettings.Tile; import android.service.quicksettings.TileService; import com.google.android.gms.analytics.HitBuilders; +import dagger.Subcomponent; import dagger.android.AndroidInjection; +import dagger.android.ContributesAndroidInjector; +import dagger.android.DispatchingAndroidInjector; import javax.inject.Inject; import timber.log.Timber; @@ -49,4 +53,16 @@ public final class TelecineTileService extends TileService { .setAction(Analytics.ACTION_QUICK_TILE_REMOVED) .build()); } + + @Subcomponent(modules = Module.class) + interface Component { + void inject(TelecineApplication app); + + DispatchingAndroidInjector injector(); + } + + @dagger.Module + abstract class Module { + @ContributesAndroidInjector abstract TelecineTileService contributeTelecineTileService(); + } } From c165de83e3a628fd8ab59327528d0f3bf8a6d8b0 Mon Sep 17 00:00:00 2001 From: Eric Cochran Date: Tue, 20 Feb 2018 00:30:03 -0800 Subject: [PATCH 2/2] Remove redundant component method. And shuffle code. --- .../telecine/TelecineApplication.java | 2 +- .../jakewharton/telecine/TelecineComponent.java | 14 +++++++++++++- .../telecine/TelecineTileService.java | 16 ---------------- 3 files changed, 14 insertions(+), 18 deletions(-) diff --git a/telecine/src/main/java/com/jakewharton/telecine/TelecineApplication.java b/telecine/src/main/java/com/jakewharton/telecine/TelecineApplication.java index 627b614..084e936 100644 --- a/telecine/src/main/java/com/jakewharton/telecine/TelecineApplication.java +++ b/telecine/src/main/java/com/jakewharton/telecine/TelecineApplication.java @@ -24,7 +24,7 @@ public final class TelecineApplication extends Application @Override public void onCreate() { TelecineComponent component = DaggerTelecineComponent.builder().application(this).build(); if (SDK_INT >= N) { - component.telecineTileServiceComponent().inject(this); + component.for24Plus().inject(this); } else { component.inject(this); } diff --git a/telecine/src/main/java/com/jakewharton/telecine/TelecineComponent.java b/telecine/src/main/java/com/jakewharton/telecine/TelecineComponent.java index 4990594..41d3e08 100644 --- a/telecine/src/main/java/com/jakewharton/telecine/TelecineComponent.java +++ b/telecine/src/main/java/com/jakewharton/telecine/TelecineComponent.java @@ -3,18 +3,30 @@ import android.app.Application; import dagger.BindsInstance; import dagger.Component; +import dagger.Subcomponent; import dagger.android.AndroidInjectionModule; +import dagger.android.ContributesAndroidInjector; import javax.inject.Singleton; @Singleton @Component(modules = { AndroidInjectionModule.class, TelecineModule.class }) interface TelecineComponent { void inject(TelecineApplication app); - TelecineTileService.Component telecineTileServiceComponent(); + For24Plus for24Plus(); @Component.Builder interface Builder { @BindsInstance Builder application(Application application); TelecineComponent build(); } + + @Subcomponent(modules = For24Plus.Module.class) + interface For24Plus { + void inject(TelecineApplication app); + + @dagger.Module + abstract class Module { + @ContributesAndroidInjector abstract TelecineTileService contributeTelecineTileService(); + } + } } diff --git a/telecine/src/main/java/com/jakewharton/telecine/TelecineTileService.java b/telecine/src/main/java/com/jakewharton/telecine/TelecineTileService.java index 61edc7b..aff58e9 100644 --- a/telecine/src/main/java/com/jakewharton/telecine/TelecineTileService.java +++ b/telecine/src/main/java/com/jakewharton/telecine/TelecineTileService.java @@ -1,14 +1,10 @@ package com.jakewharton.telecine; import android.annotation.TargetApi; -import android.app.Service; import android.service.quicksettings.Tile; import android.service.quicksettings.TileService; import com.google.android.gms.analytics.HitBuilders; -import dagger.Subcomponent; import dagger.android.AndroidInjection; -import dagger.android.ContributesAndroidInjector; -import dagger.android.DispatchingAndroidInjector; import javax.inject.Inject; import timber.log.Timber; @@ -53,16 +49,4 @@ public final class TelecineTileService extends TileService { .setAction(Analytics.ACTION_QUICK_TILE_REMOVED) .build()); } - - @Subcomponent(modules = Module.class) - interface Component { - void inject(TelecineApplication app); - - DispatchingAndroidInjector injector(); - } - - @dagger.Module - abstract class Module { - @ContributesAndroidInjector abstract TelecineTileService contributeTelecineTileService(); - } }