From aab65a9e002fb6e1580e4322478a67916316fd74 Mon Sep 17 00:00:00 2001 From: eugene_matsyuk Date: Thu, 23 Aug 2018 10:21:53 +0300 Subject: [PATCH] core and app components refactoring --- .../dagger_arch/DaggerArchApplication.java | 6 --- .../dagger_arch/di/app/AppComponent.java | 11 +---- .../dagger_arch/routing/GlobalNavigator.java | 40 +++++++++++++------ .../core_db_impl/di/CoreDbComponent.java | 17 +++++--- .../di/CoreNetworkComponent.java | 17 +++++--- .../core/di/app/CoreUtilsComponent.java | 17 +++++--- .../ScannerExampleApplication.java | 2 +- 7 files changed, 63 insertions(+), 47 deletions(-) diff --git a/app/src/main/java/com/example/eugene_matsyuk/dagger_arch/DaggerArchApplication.java b/app/src/main/java/com/example/eugene_matsyuk/dagger_arch/DaggerArchApplication.java index 8b70183..87dab06 100644 --- a/app/src/main/java/com/example/eugene_matsyuk/dagger_arch/DaggerArchApplication.java +++ b/app/src/main/java/com/example/eugene_matsyuk/dagger_arch/DaggerArchApplication.java @@ -4,9 +4,6 @@ import android.content.Context; import com.arellomobile.mvp.RegisterMoxyReflectorPackages; -import com.example.core.di.app.CoreUtilsComponent; -import com.example.core_db_impl.di.CoreDbComponent; -import com.example.core_network_impl.di.CoreNetworkComponent; import com.example.eugene_matsyuk.dagger_arch.di.app.AppComponent; import com.example.eugene_matsyuk.dagger_arch.di.app.DaggerAppComponent; import com.example.eugene_matsyuk.dagger_arch.routing.GlobalNavigator; @@ -40,9 +37,6 @@ public void onCreate() { sContext = getApplicationContext(); AppComponent.init( DaggerAppComponent.builder() - .coreDbApi(CoreDbComponent.createOnce()) - .coreNetworkApi(CoreNetworkComponent.createOnce()) - .coreUtilsApi(CoreUtilsComponent.createOnce()) .build() ); AppComponent.get().inject(this); diff --git a/app/src/main/java/com/example/eugene_matsyuk/dagger_arch/di/app/AppComponent.java b/app/src/main/java/com/example/eugene_matsyuk/dagger_arch/di/app/AppComponent.java index 9f69b43..3fd464b 100644 --- a/app/src/main/java/com/example/eugene_matsyuk/dagger_arch/di/app/AppComponent.java +++ b/app/src/main/java/com/example/eugene_matsyuk/dagger_arch/di/app/AppComponent.java @@ -2,11 +2,7 @@ import android.support.annotation.NonNull; -import com.example.core.di.app.CoreUtilsApi; -import com.example.core_db_api.di.CoreDbApi; -import com.example.core_network_api.di.CoreNetworkApi; import com.example.eugene_matsyuk.dagger_arch.DaggerArchApplication; -import com.example.eugene_matsyuk.dagger_arch.presentation.main.view.MainActivity; import javax.inject.Singleton; @@ -17,13 +13,9 @@ modules = { GlobalNavigationModule.class, AppModule.class -}, dependencies = { - CoreUtilsApi.class, - CoreNetworkApi.class, - CoreDbApi.class }) @Singleton -public abstract class AppComponent implements CoreUtilsApi, CoreNetworkApi, CoreDbApi { +public abstract class AppComponent { private static volatile AppComponent sInstance; @@ -40,7 +32,6 @@ public static void init(@NonNull AppComponent component) { sInstance = component; } - public abstract void inject(MainActivity mainActivity); public abstract void inject(DaggerArchApplication daggerArchApplication); public abstract MainScreenComponent mainScreenComponent(); diff --git a/app/src/main/java/com/example/eugene_matsyuk/dagger_arch/routing/GlobalNavigator.java b/app/src/main/java/com/example/eugene_matsyuk/dagger_arch/routing/GlobalNavigator.java index 95a7e12..cb619a1 100644 --- a/app/src/main/java/com/example/eugene_matsyuk/dagger_arch/routing/GlobalNavigator.java +++ b/app/src/main/java/com/example/eugene_matsyuk/dagger_arch/routing/GlobalNavigator.java @@ -6,7 +6,9 @@ import com.example.antitheft.di.AntitheftFeatureComponent; import com.example.antitheft.di.AntitheftFeatureDependenciesComponent; import com.example.antitheft.presentation.view.AntitheftActivity; -import com.example.eugene_matsyuk.dagger_arch.di.app.AppComponent; +import com.example.core.di.app.CoreUtilsComponent; +import com.example.core_db_impl.di.CoreDbComponent; +import com.example.core_network_impl.di.CoreNetworkComponent; import com.example.purchase_impl.di.DaggerPurchaseFeatureDependenciesComponent; import com.example.purchase_impl.di.PurchaseComponent; import com.example.scanner.di.ScannerFeatureComponent; @@ -49,31 +51,45 @@ private void applyCommand(Command command) { } private void forward(Forward command) { - Class cls; String name = command.getScreenKey(); + initFeatureComponent(name); + startFeatureStartPoint(name); + } + + private void startFeatureStartPoint(String name) { + Class cls; switch (name) { case SCANNER_SCREEN: cls = ScannerActivity.class; - initDependenciesForScanner(); break; case AV_SCREEN: cls = AntitheftActivity.class; - initDependenciesForAt(); break; default: throw new RuntimeException("Unexpected screen: " + name); } - Intent intent = new Intent(mContext, cls); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); mContext.startActivity(intent); } + private void initFeatureComponent(String name) { + switch (name) { + case SCANNER_SCREEN: + initDependenciesForScanner(); + break; + case AV_SCREEN: + initDependenciesForAt(); + break; + default: throw new RuntimeException("Unexpected screen: " + name); + } + } + private void initDependenciesForAt() { AntitheftFeatureComponent.init( AntitheftFeatureDependenciesComponent.create( - AppComponent.get(), - AppComponent.get(), - AppComponent.get(), + CoreUtilsComponent.get(), + CoreNetworkComponent.get(), + CoreDbComponent.get(), createPurchaseComponent() ) ); @@ -82,7 +98,7 @@ private void initDependenciesForAt() { private PurchaseComponent createPurchaseComponent() { return PurchaseComponent.create( DaggerPurchaseFeatureDependenciesComponent.builder() - .coreNetworkApi(AppComponent.get()) + .coreNetworkApi(CoreNetworkComponent.get()) .build() ); } @@ -90,9 +106,9 @@ private PurchaseComponent createPurchaseComponent() { private void initDependenciesForScanner() { ScannerFeatureComponent.init( ScannerFeatureDependenciesComponent.create( - AppComponent.get(), - AppComponent.get(), - AppComponent.get(), + CoreUtilsComponent.get(), + CoreNetworkComponent.get(), + CoreDbComponent.get(), createPurchaseComponent() ) ); diff --git a/core-db-impl/src/main/java/com/example/core_db_impl/di/CoreDbComponent.java b/core-db-impl/src/main/java/com/example/core_db_impl/di/CoreDbComponent.java index 09bdae9..6c0bac5 100644 --- a/core-db-impl/src/main/java/com/example/core_db_impl/di/CoreDbComponent.java +++ b/core-db-impl/src/main/java/com/example/core_db_impl/di/CoreDbComponent.java @@ -10,12 +10,17 @@ @Singleton public abstract class CoreDbComponent implements CoreDbApi { - /** - * Call only one time! - * @return CoreDbComponent - */ - public static CoreDbComponent createOnce() { - return DaggerCoreDbComponent.builder().build(); + private static volatile CoreDbComponent sCoreDbComponent; + + public static CoreDbComponent get() { + if (sCoreDbComponent == null) { + synchronized (CoreDbComponent.class) { + if (sCoreDbComponent == null) { + sCoreDbComponent = DaggerCoreDbComponent.builder().build(); + } + } + } + return sCoreDbComponent; } } diff --git a/core-network-impl/src/main/java/com/example/core_network_impl/di/CoreNetworkComponent.java b/core-network-impl/src/main/java/com/example/core_network_impl/di/CoreNetworkComponent.java index c561efe..6217d49 100644 --- a/core-network-impl/src/main/java/com/example/core_network_impl/di/CoreNetworkComponent.java +++ b/core-network-impl/src/main/java/com/example/core_network_impl/di/CoreNetworkComponent.java @@ -10,12 +10,17 @@ @Singleton public abstract class CoreNetworkComponent implements CoreNetworkApi { - /** - * Call only one time! - * @return CoreNetworkComponent - */ - public static CoreNetworkComponent createOnce() { - return DaggerCoreNetworkComponent.builder().build(); + private static volatile CoreNetworkComponent sCoreNetworkComponent; + + public static CoreNetworkComponent get() { + if (sCoreNetworkComponent == null) { + synchronized (CoreNetworkComponent.class) { + if (sCoreNetworkComponent == null) { + sCoreNetworkComponent = DaggerCoreNetworkComponent.builder().build(); + } + } + } + return sCoreNetworkComponent; } } diff --git a/core-utils/src/main/java/com/example/core/di/app/CoreUtilsComponent.java b/core-utils/src/main/java/com/example/core/di/app/CoreUtilsComponent.java index be93ca7..dcd8cc5 100644 --- a/core-utils/src/main/java/com/example/core/di/app/CoreUtilsComponent.java +++ b/core-utils/src/main/java/com/example/core/di/app/CoreUtilsComponent.java @@ -8,12 +8,17 @@ @Singleton public abstract class CoreUtilsComponent implements CoreUtilsApi { - /** - * Call only one time! - * @return CoreUtilsComponent - */ - public static CoreUtilsComponent createOnce() { - return DaggerCoreUtilsComponent.builder().build(); + private static volatile CoreUtilsComponent sCoreUtilsComponent; + + public static CoreUtilsComponent get() { + if (sCoreUtilsComponent == null) { + synchronized (CoreUtilsComponent.class) { + if (sCoreUtilsComponent == null) { + sCoreUtilsComponent = DaggerCoreUtilsComponent.builder().build(); + } + } + } + return sCoreUtilsComponent; } } diff --git a/feature-scanner-example/src/main/java/com/example/scanner_example/ScannerExampleApplication.java b/feature-scanner-example/src/main/java/com/example/scanner_example/ScannerExampleApplication.java index 5062023..f3ce6cc 100644 --- a/feature-scanner-example/src/main/java/com/example/scanner_example/ScannerExampleApplication.java +++ b/feature-scanner-example/src/main/java/com/example/scanner_example/ScannerExampleApplication.java @@ -16,7 +16,7 @@ public void onCreate() { // component ScannerFeatureComponent.init( ScannerFeatureDependenciesFakeComponent.create( - CoreUtilsComponent.createOnce() + CoreUtilsComponent.get() ) ); }