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

Commit cb9ab1c

Browse files
authored
Merge pull request #4 from pulkitkumar/pk_dagger2
Dagger (Full DI)
2 parents 578d04b + fc90ac9 commit cb9ab1c

28 files changed

+395
-147
lines changed

app/build.gradle

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,10 @@ dependencies {
4848
compile 'com.github.bumptech.glide:glide:3.6.1'
4949
compile 'com.github.bumptech.glide:okhttp-integration:1.3.1'
5050

51+
// Dagger
52+
compile 'com.google.dagger:dagger:2.5'
53+
apt 'com.google.dagger:dagger-compiler:2.5'
54+
5155
// Other
5256
compile 'net.jcip:jcip-annotations:1.0'
5357
compile 'com.squareup.picasso:picasso:2.5.2'

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

Lines changed: 0 additions & 18 deletions
This file was deleted.

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

Lines changed: 50 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -3,35 +3,73 @@
33
import android.app.Application;
44
import android.content.Context;
55
import android.os.StrictMode;
6-
import android.support.annotation.NonNull;
6+
7+
import com.esoxjem.movieguide.di.AppComponent;
8+
import com.esoxjem.movieguide.di.AppModule;
9+
import com.esoxjem.movieguide.di.DaggerAppComponent;
10+
import com.esoxjem.movieguide.di.DetailsModule;
11+
import com.esoxjem.movieguide.di.FavoritesModule;
12+
import com.esoxjem.movieguide.di.ListingModule;
13+
import com.esoxjem.movieguide.di.NetworkModule;
14+
import com.esoxjem.movieguide.di.SortingModule;
715

816
/**
917
* @author arun
1018
*/
1119
public class BaseApplication extends Application
1220
{
13-
private static Context appContext;
14-
private AppComponent appComponent;
21+
private AppComponent component;
1522

1623
@Override
1724
public void onCreate()
1825
{
1926
super.onCreate();
2027
StrictMode.enableDefaults();
21-
appContext = getApplicationContext();
22-
appComponent = DaggerAppComponent.builder()
23-
.appnModule(new AppModule(this))
24-
.build();
2528
}
2629

27-
@NonNull
28-
public static Context getAppContext()
30+
public static AppComponent getAppComponent(Context context) {
31+
BaseApplication app = (BaseApplication) context.getApplicationContext();
32+
if (app.component == null) {
33+
app.component = DaggerAppComponent.builder()
34+
.appModule(app.getAppModule())
35+
.networkModule(app.getNetworkModule())
36+
.detailsModule(app.getDetailsModule())
37+
.favoritesModule(app.getFavoritesModule())
38+
.listingModule(app.getListingModule())
39+
.sortingModule(app.getSortingModule())
40+
.build();
41+
}
42+
return app.component;
43+
}
44+
45+
private AppModule getAppModule()
46+
{
47+
return new AppModule(this);
48+
}
49+
50+
private DetailsModule getDetailsModule()
51+
{
52+
return new DetailsModule();
53+
}
54+
55+
private FavoritesModule getFavoritesModule()
56+
{
57+
return new FavoritesModule();
58+
}
59+
60+
private ListingModule getListingModule()
2961
{
30-
return appContext;
62+
return new ListingModule();
3163
}
3264

33-
public AppComponent getAppComponent()
65+
private SortingModule getSortingModule()
3466
{
35-
return appComponent;
67+
return new SortingModule();
3668
}
69+
70+
private NetworkModule getNetworkModule()
71+
{
72+
return new NetworkModule();
73+
}
74+
3775
}

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,4 +14,5 @@ public interface IMovieDetailsPresenter
1414
Subscription showReviews(Movie movie);
1515
void showFavoriteButton(Movie movie);
1616
void onFavoriteClick(Movie movie);
17+
void setView(IMovieDetailsView view);
1718
}

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

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
import android.widget.TextView;
2222

2323
import com.bumptech.glide.Glide;
24+
import com.esoxjem.movieguide.BaseApplication;
2425
import com.esoxjem.movieguide.R;
2526
import com.esoxjem.movieguide.constants.Constants;
2627
import com.esoxjem.movieguide.entities.Movie;
@@ -31,14 +32,17 @@
3132

3233
import java.util.List;
3334

35+
import javax.inject.Inject;
36+
3437
import rx.Subscription;
3538

3639
/**
3740
* A simple {@link Fragment} subclass.
3841
*/
3942
public class MovieDetailsFragment extends Fragment implements IMovieDetailsView, View.OnClickListener
4043
{
41-
private MovieDetailsPresenter mMovieDetailsPresenter;
44+
@Inject
45+
IMovieDetailsPresenter mMovieDetailsPresenter;
4246
private ImageView mMoviePoster;
4347
private TextView mMovieTitle;
4448
private TextView mMovieReleaseDate;
@@ -71,7 +75,9 @@ public static MovieDetailsFragment getInstance(@NonNull Movie movie)
7175
public void onCreate(Bundle savedInstanceState)
7276
{
7377
super.onCreate(savedInstanceState);
74-
mMovieDetailsPresenter = new MovieDetailsPresenter(this);
78+
setRetainInstance(true);
79+
BaseApplication.getAppComponent(getContext()).inject(this);
80+
mMovieDetailsPresenter.setView(this);
7581
}
7682

7783
@Override

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

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@
1212
import java.io.IOException;
1313
import java.util.List;
1414

15+
import javax.inject.Inject;
16+
1517
import rx.Observable;
1618
import rx.functions.Func0;
1719

@@ -20,6 +22,13 @@
2022
*/
2123
public class MovieDetailsInteractor implements IMovieDetailsInteractor
2224
{
25+
private RequestHandler mRequestHandler;
26+
27+
public MovieDetailsInteractor(RequestHandler requestHandler)
28+
{
29+
mRequestHandler = requestHandler;
30+
}
31+
2332
@Override
2433
public Observable<List<Video>> getTrailers(final String id)
2534
{
@@ -41,7 +50,7 @@ private List<Video> get(String id) throws IOException, JSONException
4150
{
4251
String url = String.format(Api.GET_TRAILERS, id);
4352
Request request = RequestGenerator.get(url);
44-
String body = RequestHandler.request(request);
53+
String body = mRequestHandler.request(request);
4554
return MovieDetailsParser.parseTrailers(body);
4655
}
4756
});
@@ -68,7 +77,7 @@ private List<Review> get(String id) throws IOException, JSONException
6877
{
6978
String url = String.format(Api.GET_REVIEWS, id);
7079
Request request = RequestGenerator.get(url);
71-
String body = RequestHandler.request(request);
80+
String body = mRequestHandler.request(request);
7281
return MovieDetailsParser.parseReviews(body);
7382
}
7483
});

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

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,11 +22,16 @@ public class MovieDetailsPresenter implements IMovieDetailsPresenter
2222
private IMovieDetailsInteractor mMovieDetailsInteractor;
2323
private IFavoritesInteractor mFavoritesInteractor;
2424

25-
public MovieDetailsPresenter(IMovieDetailsView movieDetailsView)
25+
public MovieDetailsPresenter(IMovieDetailsInteractor movieDetailsInteractor, IFavoritesInteractor favoritesInteractor)
2626
{
27-
mMovieDetailsView = movieDetailsView;
28-
mMovieDetailsInteractor = new MovieDetailsInteractor();
29-
mFavoritesInteractor = new FavoritesInteractor();
27+
mMovieDetailsInteractor = movieDetailsInteractor;
28+
mFavoritesInteractor = favoritesInteractor;
29+
}
30+
31+
@Override
32+
public void setView(IMovieDetailsView view)
33+
{
34+
mMovieDetailsView = view;
3035
}
3136

3237
@Override
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package com.esoxjem.movieguide.di;
2+
3+
import com.esoxjem.movieguide.details.MovieDetailsFragment;
4+
import com.esoxjem.movieguide.listing.MoviesListingFragment;
5+
import com.esoxjem.movieguide.sorting.SortingDialogFragment;
6+
7+
import javax.inject.Singleton;
8+
9+
import dagger.Component;
10+
11+
/**
12+
* Created by pulkitkumar on 17/09/16.
13+
*/
14+
@Singleton
15+
@Component(modules = {
16+
AppModule.class,
17+
NetworkModule.class,
18+
DetailsModule.class,
19+
FavoritesModule.class,
20+
ListingModule.class,
21+
SortingModule.class})
22+
public interface AppComponent
23+
{
24+
MovieDetailsFragment inject(MovieDetailsFragment fragment);
25+
MoviesListingFragment inject(MoviesListingFragment fragment);
26+
SortingDialogFragment inject(SortingDialogFragment fragment);
27+
}
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,29 @@
1-
package com.esoxjem.movieguide;
1+
package com.esoxjem.movieguide.di;
22

33
import android.app.Application;
44
import android.content.Context;
55

6-
import javax.inject.Singleton;
6+
import com.esoxjem.movieguide.BaseApplication;
77

88
import dagger.Module;
99
import dagger.Provides;
1010

1111
/**
12-
* @author arun
12+
* Created by pulkitkumar on 17/09/16.
1313
*/
1414
@Module
1515
public class AppModule
1616
{
17-
private final Application application;
17+
private Application app;
1818

1919
public AppModule(Application application)
2020
{
21-
this.application = application;
21+
app = application;
2222
}
2323

2424
@Provides
25-
@Singleton
26-
Context providesContext()
25+
public Context provideContext()
2726
{
28-
return application;
27+
return app;
2928
}
3029
}
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
package com.esoxjem.movieguide.di;
2+
3+
import com.esoxjem.movieguide.details.IMovieDetailsInteractor;
4+
import com.esoxjem.movieguide.details.IMovieDetailsPresenter;
5+
import com.esoxjem.movieguide.details.MovieDetailsInteractor;
6+
import com.esoxjem.movieguide.details.MovieDetailsPresenter;
7+
import com.esoxjem.movieguide.favorites.IFavoritesInteractor;
8+
import com.esoxjem.movieguide.network.RequestHandler;
9+
10+
import javax.inject.Singleton;
11+
12+
import dagger.Module;
13+
import dagger.Provides;
14+
15+
/**
16+
* Created by pulkitkumar on 17/09/16.
17+
*/
18+
@Module (includes = {NetworkModule.class, FavoritesModule.class})
19+
public class DetailsModule
20+
{
21+
@Provides
22+
@Singleton
23+
IMovieDetailsInteractor provideInteractor(RequestHandler requestHandler)
24+
{
25+
return new MovieDetailsInteractor(requestHandler);
26+
}
27+
28+
@Provides
29+
IMovieDetailsPresenter providePresenter(IMovieDetailsInteractor detailsInteractor,
30+
IFavoritesInteractor favoritesInteractor)
31+
{
32+
return new MovieDetailsPresenter(detailsInteractor, favoritesInteractor);
33+
}
34+
}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
package com.esoxjem.movieguide.di;
2+
3+
import com.esoxjem.movieguide.favorites.FavoritesInteractor;
4+
import com.esoxjem.movieguide.favorites.FavoritesStore;
5+
import com.esoxjem.movieguide.favorites.IFavoritesInteractor;
6+
7+
import javax.inject.Singleton;
8+
9+
import dagger.Module;
10+
import dagger.Provides;
11+
12+
/**
13+
* Created by pulkitkumar on 17/09/16.
14+
*/
15+
@Module (includes = AppModule.class)
16+
public class FavoritesModule
17+
{
18+
@Provides
19+
@Singleton
20+
IFavoritesInteractor provideFavouritesInteractor(FavoritesStore store)
21+
{
22+
return new FavoritesInteractor(store);
23+
}
24+
}
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
package com.esoxjem.movieguide.di;
2+
3+
import com.esoxjem.movieguide.favorites.IFavoritesInteractor;
4+
import com.esoxjem.movieguide.listing.IMoviesListingInteractor;
5+
import com.esoxjem.movieguide.listing.IMoviesListingPresenter;
6+
import com.esoxjem.movieguide.listing.MoviesListingInteractor;
7+
import com.esoxjem.movieguide.listing.MoviesListingPresenter;
8+
import com.esoxjem.movieguide.network.RequestHandler;
9+
import com.esoxjem.movieguide.sorting.SortingOptionStore;
10+
11+
import javax.inject.Singleton;
12+
13+
import dagger.Module;
14+
import dagger.Provides;
15+
16+
/**
17+
* Created by pulkitkumar on 17/09/16.
18+
*/
19+
@Module(includes = {NetworkModule.class, SortingModule.class, FavoritesModule.class})
20+
public class ListingModule
21+
{
22+
@Provides
23+
@Singleton
24+
IMoviesListingInteractor provideMovieListingInteractor(IFavoritesInteractor favoritesInteractor,
25+
RequestHandler requestHandler,
26+
SortingOptionStore sortingOptionStore)
27+
{
28+
return new MoviesListingInteractor(favoritesInteractor, requestHandler, sortingOptionStore);
29+
}
30+
31+
@Provides
32+
IMoviesListingPresenter provideMovieListingPresenter(IMoviesListingInteractor interactor)
33+
{
34+
return new MoviesListingPresenter(interactor);
35+
}
36+
}

0 commit comments

Comments
 (0)