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

Commit 12d3e11

Browse files
author
Pulkit Kumar
committed
provided dependencies
1 parent 7428df0 commit 12d3e11

25 files changed

+419
-61
lines changed

app/build.gradle

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
apply plugin: 'com.android.application'
2+
apply plugin: 'com.neenbedankt.android-apt'
23

34
android {
45
compileSdkVersion 23
@@ -47,6 +48,10 @@ dependencies {
4748
compile 'com.github.bumptech.glide:glide:3.6.1'
4849
compile 'com.github.bumptech.glide:okhttp-integration:1.3.1'
4950

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

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

Lines changed: 45 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,26 +3,65 @@
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.DaggerAppComponent;
9+
import com.esoxjem.movieguide.di.DetailsModule;
10+
import com.esoxjem.movieguide.di.FavoritesModule;
11+
import com.esoxjem.movieguide.di.ListingModule;
12+
import com.esoxjem.movieguide.di.NetworkModule;
13+
import com.esoxjem.movieguide.di.SortingModule;
714

815
/**
916
* @author arun
1017
*/
1118
public class BaseApplication extends Application
1219
{
13-
private static Context appContext;
20+
AppComponent component;
1421

1522
@Override
1623
public void onCreate()
1724
{
1825
super.onCreate();
1926
StrictMode.enableDefaults();
20-
appContext = getApplicationContext();
2127
}
2228

23-
@NonNull
24-
public static Context getAppContext()
29+
public static AppComponent getAppComponent(Context context) {
30+
BaseApplication app = (BaseApplication) context.getApplicationContext();
31+
if (app.component == null) {
32+
app.component = DaggerAppComponent.builder()
33+
.networkModule(app.getNetworkModule())
34+
.detailsModule(app.getDetailsModule())
35+
.favoritesModule(app.getFavoritesModule())
36+
.listingModule(app.getListingModule())
37+
.sortingModule(app.getSortingModule())
38+
.build();
39+
}
40+
return app.component;
41+
}
42+
43+
private DetailsModule getDetailsModule()
44+
{
45+
return new DetailsModule();
46+
}
47+
48+
private FavoritesModule getFavoritesModule()
49+
{
50+
return new FavoritesModule(this);
51+
}
52+
53+
private ListingModule getListingModule()
54+
{
55+
return new ListingModule();
56+
}
57+
58+
private SortingModule getSortingModule()
59+
{
60+
return new SortingModule(this);
61+
}
62+
63+
private NetworkModule getNetworkModule()
2564
{
26-
return appContext;
65+
return new NetworkModule();
2766
}
2867
}

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: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
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+
NetworkModule.class,
17+
DetailsModule.class,
18+
FavoritesModule.class,
19+
ListingModule.class,
20+
SortingModule.class})
21+
public interface AppComponent
22+
{
23+
MovieDetailsFragment inject(MovieDetailsFragment fragment);
24+
MoviesListingFragment inject(MoviesListingFragment fragment);
25+
SortingDialogFragment inject(SortingDialogFragment fragment);
26+
}
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: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
package com.esoxjem.movieguide.di;
2+
3+
import android.app.Application;
4+
import android.content.Context;
5+
import android.content.SharedPreferences;
6+
7+
import com.esoxjem.movieguide.favorites.FavoritesInteractor;
8+
import com.esoxjem.movieguide.favorites.FavoritesStore;
9+
import com.esoxjem.movieguide.favorites.IFavoritesInteractor;
10+
11+
import javax.inject.Named;
12+
import javax.inject.Singleton;
13+
14+
import dagger.Module;
15+
import dagger.Provides;
16+
17+
/**
18+
* Created by pulkitkumar on 17/09/16.
19+
*/
20+
@Module
21+
public class FavoritesModule
22+
{
23+
private static final String PREF_NAME = "FavoritesStore";
24+
public static final String FAVOURITES = "favourites";
25+
private Application app;
26+
27+
public FavoritesModule (Application app)
28+
{
29+
this.app = app;
30+
}
31+
32+
@Provides
33+
@Singleton
34+
IFavoritesInteractor provideFavouritesInteractor(FavoritesStore store)
35+
{
36+
return new FavoritesInteractor(store);
37+
}
38+
39+
@Provides
40+
@Singleton
41+
FavoritesStore provideFavouritesStore()
42+
{
43+
SharedPreferences pref = app.getApplicationContext().getSharedPreferences(PREF_NAME, Context.MODE_PRIVATE);
44+
return new FavoritesStore(pref);
45+
}
46+
}
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+
}
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
package com.esoxjem.movieguide.di;
2+
3+
import com.esoxjem.movieguide.network.RequestHandler;
4+
import com.squareup.okhttp.OkHttpClient;
5+
6+
import java.net.CookieHandler;
7+
import java.net.CookieManager;
8+
import java.net.CookiePolicy;
9+
import java.util.concurrent.TimeUnit;
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
20+
public class NetworkModule
21+
{
22+
public static final int TIMEOUT_IN_MS = 30000;
23+
24+
@Provides
25+
@Singleton
26+
CookieManager provideCookieManager()
27+
{
28+
CookieManager cookieManager = new CookieManager();
29+
cookieManager.setCookiePolicy(CookiePolicy.ACCEPT_ALL);
30+
CookieHandler.setDefault(cookieManager);
31+
return cookieManager;
32+
}
33+
34+
@Provides
35+
@Singleton
36+
OkHttpClient provideOkHttpClient(CookieManager cookieManager)
37+
{
38+
OkHttpClient okHttpClient = new OkHttpClient();
39+
okHttpClient.setConnectTimeout(TIMEOUT_IN_MS, TimeUnit.MILLISECONDS);
40+
okHttpClient.setReadTimeout(TIMEOUT_IN_MS, TimeUnit.MILLISECONDS);
41+
okHttpClient.setCookieHandler(cookieManager);
42+
return okHttpClient;
43+
}
44+
45+
@Provides
46+
@Singleton
47+
RequestHandler provideRequestHandler(OkHttpClient okHttpClient)
48+
{
49+
return new RequestHandler(okHttpClient);
50+
}
51+
}

0 commit comments

Comments
 (0)