Skip to content
This repository was archived by the owner on Oct 27, 2024. It is now read-only.

Commit 70deb8b

Browse files
author
Ashwini Kumar
committed
Dependency Injection Using Dagger 2 ->Improved and cleaned the code to provide optimized way of injecting dependencies.
1 parent 8d0420f commit 70deb8b

16 files changed

+174
-83
lines changed
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package com.esoxjem.movieguide;
2+
3+
import javax.inject.Scope;
4+
5+
/**
6+
* @author Ashwini Kumar.
7+
*/
8+
@Scope
9+
public @interface ActivityScope
10+
{
11+
}
Lines changed: 7 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
package com.esoxjem.movieguide;
22

3+
import com.esoxjem.movieguide.details.DetailsComponent;
34
import com.esoxjem.movieguide.details.DetailsModule;
4-
import com.esoxjem.movieguide.details.MovieDetailsFragment;
55
import com.esoxjem.movieguide.favorites.FavoritesModule;
6+
import com.esoxjem.movieguide.listing.ListingComponent;
67
import com.esoxjem.movieguide.listing.ListingModule;
7-
import com.esoxjem.movieguide.listing.MoviesListingFragment;
88
import com.esoxjem.movieguide.network.NetworkModule;
9-
import com.esoxjem.movieguide.sorting.SortingDialogFragment;
9+
import com.esoxjem.movieguide.sorting.SortingComponent;
1010
import com.esoxjem.movieguide.sorting.SortingModule;
1111

1212
import javax.inject.Singleton;
@@ -20,15 +20,12 @@
2020
@Component(modules = {
2121
AppModule.class,
2222
NetworkModule.class,
23-
DetailsModule.class,
24-
FavoritesModule.class,
25-
ListingModule.class,
26-
SortingModule.class})
23+
FavoritesModule.class})
2724
public interface AppComponent
2825
{
29-
MovieDetailsFragment inject(MovieDetailsFragment fragment);
26+
DetailsComponent plus(DetailsModule detailsModule);
3027

31-
MoviesListingFragment inject(MoviesListingFragment fragment);
28+
ListingComponent plus(ListingModule listingModule);
3229

33-
SortingDialogFragment inject(SortingDialogFragment fragment);
30+
SortingComponent plus(SortingModule sortingModule);
3431
}

app/src/main/java/com/esoxjem/movieguide/BaseApplication.java

Lines changed: 16 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -4,71 +4,43 @@
44
import android.content.Context;
55
import android.os.StrictMode;
66

7-
import com.esoxjem.movieguide.details.DetailsModule;
87
import com.esoxjem.movieguide.favorites.FavoritesModule;
9-
import com.esoxjem.movieguide.listing.ListingModule;
108
import com.esoxjem.movieguide.network.NetworkModule;
11-
import com.esoxjem.movieguide.sorting.SortingModule;
129

1310
/**
1411
* @author arun
1512
*/
1613
public class BaseApplication extends Application
1714
{
18-
private AppComponent component;
15+
private AppComponent appComponent;
16+
17+
public static BaseApplication get(Context context)
18+
{
19+
return (BaseApplication) context.getApplicationContext();
20+
}
1921

2022
@Override
2123
public void onCreate()
2224
{
2325
super.onCreate();
2426
StrictMode.enableDefaults();
27+
initAppComponent();
2528
}
2629

27-
public static AppComponent getAppComponent(Context context)
30+
public AppComponent initAppComponent()
2831
{
29-
BaseApplication app = (BaseApplication) context.getApplicationContext();
30-
if (app.component == null)
31-
{
32-
app.component = DaggerAppComponent.builder()
33-
.appModule(app.getAppModule())
34-
.networkModule(app.getNetworkModule())
35-
.detailsModule(app.getDetailsModule())
36-
.favoritesModule(app.getFavoritesModule())
37-
.listingModule(app.getListingModule())
38-
.sortingModule(app.getSortingModule())
39-
.build();
40-
}
41-
return app.component;
42-
}
32+
appComponent = DaggerAppComponent.builder()
33+
.appModule(new AppModule(this))
34+
.networkModule(new NetworkModule())
35+
.favoritesModule(new FavoritesModule())
36+
.build();
4337

44-
private AppModule getAppModule()
45-
{
46-
return new AppModule(this);
47-
}
48-
49-
private DetailsModule getDetailsModule()
50-
{
51-
return new DetailsModule();
52-
}
53-
54-
private FavoritesModule getFavoritesModule()
55-
{
56-
return new FavoritesModule();
57-
}
58-
59-
private ListingModule getListingModule()
60-
{
61-
return new ListingModule();
62-
}
63-
64-
private SortingModule getSortingModule()
65-
{
66-
return new SortingModule();
38+
return appComponent;
6739
}
6840

69-
private NetworkModule getNetworkModule()
41+
public AppComponent getAppComponent()
7042
{
71-
return new NetworkModule();
43+
return appComponent;
7244
}
7345

7446
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package com.esoxjem.movieguide.details;
2+
3+
import com.esoxjem.movieguide.ActivityScope;
4+
5+
import dagger.Subcomponent;
6+
7+
/**
8+
* @author Ashwini Kumar.
9+
*/
10+
@ActivityScope
11+
@Subcomponent(modules = DetailsModule.class)
12+
public interface DetailsComponent
13+
{
14+
void inject(MovieDetailsFragment movieDetailsFragment);
15+
}

app/src/main/java/com/esoxjem/movieguide/details/DetailsModule.java

Lines changed: 19 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,42 @@
11
package com.esoxjem.movieguide.details;
22

3-
import com.esoxjem.movieguide.favorites.FavoritesModule;
3+
import com.esoxjem.movieguide.ActivityScope;
44
import com.esoxjem.movieguide.favorites.IFavoritesInteractor;
5-
import com.esoxjem.movieguide.network.NetworkModule;
65
import com.esoxjem.movieguide.network.RequestHandler;
76

8-
import javax.inject.Singleton;
9-
107
import dagger.Module;
118
import dagger.Provides;
129

1310
/**
1411
* @author pulkitkumar
12+
* @author Ashwini Kumar.
1513
*/
16-
@Module(includes = {NetworkModule.class, FavoritesModule.class})
14+
@Module
1715
public class DetailsModule
1816
{
17+
private MovieDetailsFragment movieDetailsFragment;
18+
19+
public DetailsModule(MovieDetailsFragment movieDetailsFragment)
20+
{
21+
this.movieDetailsFragment = movieDetailsFragment;
22+
}
23+
24+
@Provides
25+
@ActivityScope
26+
MovieDetailsFragment provideMovieDetailsFragment()
27+
{
28+
return movieDetailsFragment;
29+
}
30+
1931
@Provides
20-
@Singleton
32+
@ActivityScope
2133
IMovieDetailsInteractor provideInteractor(RequestHandler requestHandler)
2234
{
2335
return new MovieDetailsInteractor(requestHandler);
2436
}
2537

2638
@Provides
39+
@ActivityScope
2740
IMovieDetailsPresenter providePresenter(IMovieDetailsInteractor detailsInteractor,
2841
IFavoritesInteractor favoritesInteractor)
2942
{

app/src/main/java/com/esoxjem/movieguide/details/MovieDetailsFragment.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ public void onCreate(Bundle savedInstanceState)
7373
{
7474
super.onCreate(savedInstanceState);
7575
setRetainInstance(true);
76-
BaseApplication.getAppComponent(getContext()).inject(this);
76+
BaseApplication.get(getContext()).getAppComponent().plus(new DetailsModule(this)).inject(this);
7777
movieDetailsPresenter.setView(this);
7878
}
7979

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package com.esoxjem.movieguide.favorites;
22

3-
import com.esoxjem.movieguide.AppModule;
3+
import android.content.Context;
44

55
import javax.inject.Singleton;
66

@@ -9,8 +9,9 @@
99

1010
/**
1111
* @author pulkitkumar
12+
* @author Ashwini Kumar.
1213
*/
13-
@Module(includes = AppModule.class)
14+
@Module
1415
public class FavoritesModule
1516
{
1617
@Provides
@@ -19,4 +20,11 @@ IFavoritesInteractor provideFavouritesInteractor(FavoritesStore store)
1920
{
2021
return new FavoritesInteractor(store);
2122
}
23+
24+
@Provides
25+
@Singleton
26+
FavoritesStore provideFavoritesStore(Context context)
27+
{
28+
return new FavoritesStore(context);
29+
}
2230
}

app/src/main/java/com/esoxjem/movieguide/favorites/FavoritesStore.java

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import android.content.SharedPreferences;
55
import android.text.TextUtils;
66

7+
import com.esoxjem.movieguide.BaseApplication;
78
import com.esoxjem.movieguide.Movie;
89
import com.squareup.moshi.JsonAdapter;
910
import com.squareup.moshi.Moshi;
@@ -13,8 +14,6 @@
1314
import java.util.List;
1415
import java.util.Map;
1516

16-
import javax.inject.Inject;
17-
1817
import javax.inject.Singleton;
1918

2019
/**
@@ -27,10 +26,9 @@ public class FavoritesStore
2726
private static final String PREF_NAME = "FavoritesStore";
2827
private SharedPreferences pref;
2928

30-
@Inject
3129
public FavoritesStore(Context context)
3230
{
33-
pref = context.getApplicationContext().getSharedPreferences(PREF_NAME, Context.MODE_PRIVATE);
31+
pref = BaseApplication.get(context).getSharedPreferences(PREF_NAME, Context.MODE_PRIVATE);
3432
}
3533

3634
public void setFavorite(Movie movie)
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package com.esoxjem.movieguide.listing;
2+
3+
import com.esoxjem.movieguide.ActivityScope;
4+
5+
import dagger.Subcomponent;
6+
7+
/**
8+
* @author Ashwini Kumar.
9+
*/
10+
@ActivityScope
11+
@Subcomponent(modules = ListingModule.class)
12+
public interface ListingComponent
13+
{
14+
void inject(MoviesListingFragment moviesListingFragment);
15+
}
Lines changed: 28 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,38 @@
11
package com.esoxjem.movieguide.listing;
22

3-
import com.esoxjem.movieguide.network.NetworkModule;
4-
import com.esoxjem.movieguide.sorting.SortingModule;
5-
import com.esoxjem.movieguide.favorites.FavoritesModule;
3+
import android.content.Context;
4+
5+
import com.esoxjem.movieguide.ActivityScope;
66
import com.esoxjem.movieguide.favorites.IFavoritesInteractor;
77
import com.esoxjem.movieguide.network.RequestHandler;
88
import com.esoxjem.movieguide.sorting.SortingOptionStore;
99

10-
import javax.inject.Singleton;
11-
1210
import dagger.Module;
1311
import dagger.Provides;
1412

1513
/**
1614
* @author pulkitkumar
15+
* @author Ashwini Kumar.
1716
*/
18-
@Module(includes = {NetworkModule.class, SortingModule.class, FavoritesModule.class})
17+
@Module
1918
public class ListingModule
2019
{
20+
private MoviesListingFragment moviesListingFragment;
21+
22+
public ListingModule(MoviesListingFragment moviesListingFragment)
23+
{
24+
this.moviesListingFragment = moviesListingFragment;
25+
}
26+
27+
@Provides
28+
@ActivityScope
29+
MoviesListingFragment provideMoviesListingFragment()
30+
{
31+
return moviesListingFragment;
32+
}
33+
2134
@Provides
22-
@Singleton
35+
@ActivityScope
2336
IMoviesListingInteractor provideMovieListingInteractor(IFavoritesInteractor favoritesInteractor,
2437
RequestHandler requestHandler,
2538
SortingOptionStore sortingOptionStore)
@@ -28,8 +41,16 @@ IMoviesListingInteractor provideMovieListingInteractor(IFavoritesInteractor favo
2841
}
2942

3043
@Provides
44+
@ActivityScope
3145
IMoviesListingPresenter provideMovieListingPresenter(IMoviesListingInteractor interactor)
3246
{
3347
return new MoviesListingPresenter(interactor);
3448
}
49+
50+
@Provides
51+
@ActivityScope
52+
SortingOptionStore providesSortingOptionStore(Context context)
53+
{
54+
return new SortingOptionStore(context);
55+
}
3556
}

app/src/main/java/com/esoxjem/movieguide/listing/MoviesListingFragment.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ public void onCreate(Bundle savedInstanceState)
5151
super.onCreate(savedInstanceState);
5252
setHasOptionsMenu(true);
5353
setRetainInstance(true);
54-
BaseApplication.getAppComponent(getContext()).inject(this);
54+
BaseApplication.get(getContext()).getAppComponent().plus(new ListingModule(this)).inject(this);
5555
moviesPresenter.setView(this);
5656
}
5757

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package com.esoxjem.movieguide.sorting;
2+
3+
import com.esoxjem.movieguide.ActivityScope;
4+
5+
import dagger.Subcomponent;
6+
7+
/**
8+
* @author Ashwini Kumar.
9+
*/
10+
@ActivityScope
11+
@Subcomponent(modules = SortingModule.class)
12+
public interface SortingComponent
13+
{
14+
void inject(SortingDialogFragment sortingDialogFragment);
15+
}

app/src/main/java/com/esoxjem/movieguide/sorting/SortingDialogFragment.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ public void onCreate(@Nullable Bundle savedInstanceState)
3939
{
4040
super.onCreate(savedInstanceState);
4141
setRetainInstance(true);
42-
BaseApplication.getAppComponent(getContext()).inject(this);
42+
BaseApplication.get(getContext()).getAppComponent().plus(new SortingModule(this)).inject(this);
4343
sortingDialogPresenter.setView(this);
4444
}
4545

app/src/main/java/com/esoxjem/movieguide/sorting/SortingDialogInteractor.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,15 @@
11
package com.esoxjem.movieguide.sorting;
22

3+
import javax.inject.Inject;
4+
35
/**
46
* @author arun
57
*/
68
public class SortingDialogInteractor implements ISortingDialogInteractor
79
{
810
private SortingOptionStore sortingOptionStore;
911

12+
@Inject
1013
public SortingDialogInteractor(SortingOptionStore store)
1114
{
1215
sortingOptionStore = store;

0 commit comments

Comments
 (0)