Commit 5be2ae99 authored by Marcus Sales's avatar Marcus Sales

Dependências diretas substituídas por módulos de DI.
parent 00df9753
......@@ -42,11 +42,11 @@ dependencies {
// compile "org.greenrobot:greendao:$rootProject.greenDaoVersion"
// debugCompile "com.amitshekhar.android:debug-db:$rootProject.debugDBVersion"
//
// // dependency injection
// compile "com.google.dagger:dagger:$rootProject.dagger2Version"
// annotationProcessor "com.google.dagger:dagger-compiler:$rootProject.dagger2Version"
// provided 'javax.annotation:jsr250-api:1.0'
// compile 'javax.inject:javax.inject:1'
// dependency injection
compile "com.google.dagger:dagger:$rootProject.dagger2Version"
annotationProcessor "com.google.dagger:dagger-compiler:$rootProject.dagger2Version"
provided 'javax.annotation:jsr250-api:1.0'
compile 'javax.inject:javax.inject:1'
//
// // reactive
// compile "io.reactivex.rxjava2:rxjava:$rootProject.rxjava2Version"
......@@ -62,19 +62,18 @@ dependencies {
// // logger
// compile "com.jakewharton.timber:timber:$rootProject.timberVersion"
//
// // dependencies for local unit tests
// testCompile "junit:junit:$rootProject.ext.junitVersion"
// testCompile "org.mockito:mockito-core:$rootProject.mockitoVersion"
// testAnnotationProcessor "com.google.dagger:dagger-compiler:$rootProject.dagger2Version"
// dependencies for local unit tests
testCompile "junit:junit:$rootProject.ext.junitVersion"
testCompile "org.mockito:mockito-core:$rootProject.mockitoVersion"
testAnnotationProcessor "com.google.dagger:dagger-compiler:$rootProject.dagger2Version"
//
// // UI Testing
// androidTestCompile "com.android.support.test.espresso:espresso-core:$rootProject.espressoVersion"
// androidTestCompile "com.android.support.test.espresso:espresso-intents:$rootProject.espressoVersion"
// androidTestCompile "org.mockito:mockito-core:$rootProject.mockitoVersion"
// androidTestAnnotationProcessor "com.google.dagger:dagger-compiler:$rootProject.dagger2Version"
// androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
// exclude group: 'com.android.support', module: 'support-annotations'
// })
// //compile 'com.android.support:appcompat-v7:25.1.0'
testCompile 'junit:junit:4.12'
// UI Testing
androidTestCompile "com.android.support.test.espresso:espresso-core:$rootProject.espressoVersion"
androidTestCompile "com.android.support.test.espresso:espresso-intents:$rootProject.espressoVersion"
androidTestCompile "org.mockito:mockito-core:$rootProject.mockitoVersion"
androidTestAnnotationProcessor "com.google.dagger:dagger-compiler:$rootProject.dagger2Version"
/* androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
exclude group: 'com.android.support', module: 'support-annotations'
})
testCompile 'junit:junit:4.12'*/
}
......@@ -2,7 +2,12 @@ package br.com.evologica.mvp;
import android.app.Application;
import br.com.evologica.mvp.data.AppDataManager;
import javax.inject.Inject;
import br.com.evologica.mvp.data.DataManager;
import br.com.evologica.mvp.di.component.ApplicationComponent;
import br.com.evologica.mvp.di.component.DaggerApplicationComponent;
import br.com.evologica.mvp.di.module.ApplicationModule;
import uk.co.chrisjenx.calligraphy.CalligraphyConfig;
/**
......@@ -11,17 +16,34 @@ import uk.co.chrisjenx.calligraphy.CalligraphyConfig;
public class MvpApp extends Application {
@Inject
DataManager mDataManager;
@Inject
CalligraphyConfig mCalligraphyConfig;
private ApplicationComponent mApplicationComponent;
@Override
public void onCreate() {
super.onCreate();
AppDataManager.initInstance(this);
//AppDataManager.initInstance(this);
CalligraphyConfig.initDefault(new CalligraphyConfig.Builder()
/* CalligraphyConfig.initDefault(new CalligraphyConfig.Builder()
.setDefaultFontPath("fonts/source-sans-pro/SourceSansPro-Regular.ttf")
.setFontAttrId(R.attr.fontPath)
.build());
.build());*/
mApplicationComponent = DaggerApplicationComponent.builder()
.applicationModule(new ApplicationModule(this)).build();
mApplicationComponent.inject(this);
CalligraphyConfig.initDefault(mCalligraphyConfig);
}
public ApplicationComponent getComponent() {
return mApplicationComponent;
}
}
......@@ -2,43 +2,44 @@ package br.com.evologica.mvp.data;
import android.content.Context;
import br.com.evologica.mvp.data.prefs.AppPreferencesHelper;
import javax.inject.Inject;
import javax.inject.Singleton;
import br.com.evologica.mvp.data.prefs.PreferencesHelper;
import br.com.evologica.mvp.di.ApplicationContext;
/**
* Created by marcussales on 01/03/2017.
*/
@Singleton
public class AppDataManager implements DataManager {
private AppPreferencesHelper mAppPreferencesHelper;
private static AppDataManager _INSTANCE;
public static AppDataManager initInstance(Context ctx) {
_INSTANCE = new AppDataManager(ctx);
return _INSTANCE;
}
private static final String TAG = "AppDataManager";
public static AppDataManager getInstance(){
return _INSTANCE;
}
private final Context mContext;
private final PreferencesHelper mPreferencesHelper;
public AppDataManager(Context ctx) {
mAppPreferencesHelper = new AppPreferencesHelper(ctx, "whatever");
@Inject
public AppDataManager(@ApplicationContext Context ctx,
PreferencesHelper preferencesHelper) {
mContext = ctx;
mPreferencesHelper = preferencesHelper;
}
@Override
public void setLoggedIn() {
mAppPreferencesHelper.setLoggedIn();
mPreferencesHelper.setLoggedIn();
}
@Override
public void setLoggedOut() {
mAppPreferencesHelper.setLoggedOut();
mPreferencesHelper.setLoggedOut();
}
@Override
public boolean isLogged() {
return mAppPreferencesHelper.isLogged();
return mPreferencesHelper.isLogged();
}
}
......@@ -3,18 +3,26 @@ package br.com.evologica.mvp.data.prefs;
import android.content.Context;
import android.content.SharedPreferences;
import javax.inject.Inject;
import javax.inject.Singleton;
import br.com.evologica.mvp.di.ApplicationContext;
import br.com.evologica.mvp.di.PreferenceInfo;
/**
* Created by marcussales on 01/03/2017.
*/
@Singleton
public class AppPreferencesHelper implements PreferencesHelper {
private static final String PREF_KEY_USER_LOGGED_IN = "PREF_KEY_USER_LOGGED_IN";
private final SharedPreferences mPrefs;
public AppPreferencesHelper(Context context,
String prefFileName) {
@Inject
public AppPreferencesHelper(@ApplicationContext Context context,
@PreferenceInfo String prefFileName) {
mPrefs = context.getSharedPreferences(prefFileName, Context.MODE_PRIVATE);
}
......
package br.com.evologica.mvp.di;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import javax.inject.Qualifier;
/**
* Created by marcussales on 02/03/2017.
*/
@Qualifier
@Retention(RetentionPolicy.RUNTIME)
public @interface ActivityContext {
}
package br.com.evologica.mvp.di;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import javax.inject.Qualifier;
/**
* Created by marcussales on 02/03/2017.
*/
@Qualifier
@Retention(RetentionPolicy.RUNTIME)
public @interface ApiInfo {
}
package br.com.evologica.mvp.di;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import javax.inject.Qualifier;
/**
* Created by marcussales on 02/03/2017.
*/
@Qualifier
@Retention(RetentionPolicy.RUNTIME)
public @interface ApplicationContext {
}
package br.com.evologica.mvp.di;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import javax.inject.Qualifier;
/**
* Created by marcussales on 02/03/2017.
*/
@Qualifier
@Retention(RetentionPolicy.RUNTIME)
public @interface DatabaseInfo {
}
package br.com.evologica.mvp.di;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import javax.inject.Scope;
/**
* Created by marcussales on 02/03/2017.
*/
@Scope
@Retention(RetentionPolicy.RUNTIME)
public @interface PerActivity {
}
package br.com.evologica.mvp.di;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import javax.inject.Qualifier;
/**
* Created by marcussales on 02/03/2017.
*/
@Qualifier
@Retention(RetentionPolicy.RUNTIME)
public @interface PreferenceInfo {
}
package br.com.evologica.mvp.di.component;
import br.com.evologica.mvp.di.PerActivity;
import br.com.evologica.mvp.di.module.ActivityModule;
import br.com.evologica.mvp.ui.login.LoginActivity;
import br.com.evologica.mvp.ui.main.MainActivity;
import br.com.evologica.mvp.ui.splash.SplashActivity;
import dagger.Component;
/**
* Created by marcussales on 02/03/2017.
*/
@PerActivity
@Component(dependencies = ApplicationComponent.class,modules = ActivityModule.class)
public interface ActivityComponent {
void inject(MainActivity activity);
void inject(LoginActivity activity);
void inject(SplashActivity activity);
}
package br.com.evologica.mvp.di.component;
import android.app.Application;
import android.content.Context;
import javax.inject.Singleton;
import br.com.evologica.mvp.MvpApp;
import br.com.evologica.mvp.data.DataManager;
import br.com.evologica.mvp.di.ApplicationContext;
import br.com.evologica.mvp.di.module.ApplicationModule;
import dagger.Component;
/**
* Created by marcussales on 02/03/2017.
*/
@Singleton
@Component(modules = ApplicationModule.class)
public interface ApplicationComponent {
void inject(MvpApp app);
@ApplicationContext
Context context();
Application application();
DataManager getDataManager();
}
package br.com.evologica.mvp.di.module;
import android.app.Activity;
import android.content.Context;
import br.com.evologica.mvp.di.ActivityContext;
import br.com.evologica.mvp.di.PerActivity;
import br.com.evologica.mvp.ui.login.LoginMvpPresenter;
import br.com.evologica.mvp.ui.login.LoginMvpView;
import br.com.evologica.mvp.ui.login.LoginPresenter;
import br.com.evologica.mvp.ui.main.MainMvpPresenter;
import br.com.evologica.mvp.ui.main.MainMvpView;
import br.com.evologica.mvp.ui.main.MainPresenter;
import br.com.evologica.mvp.ui.splash.SplashMvpPresenter;
import br.com.evologica.mvp.ui.splash.SplashMvpView;
import br.com.evologica.mvp.ui.splash.SplashPresenter;
import dagger.Module;
import dagger.Provides;
/**
* Created by marcussales on 02/03/2017.
*/
@Module
public class ActivityModule {
private Activity mActivity;
public ActivityModule(Activity activity) {
this.mActivity = activity;
}
@Provides
@ActivityContext
Context provideContext(){
return mActivity;
}
@Provides
Activity provideActivity(){
return mActivity;
}
@Provides
@PerActivity
SplashMvpPresenter<SplashMvpView> provideSplashPresenter(SplashPresenter<SplashMvpView> presenter){
return presenter;
}
@Provides
@PerActivity
LoginMvpPresenter<LoginMvpView> provideLoginPresenter(LoginPresenter<LoginMvpView> presenter){
return presenter;
}
@Provides
@PerActivity
MainMvpPresenter<MainMvpView> provideMainPresenter(MainPresenter<MainMvpView> presenter){
return presenter;
}
}
package br.com.evologica.mvp.di.module;
import android.app.Application;
import android.content.Context;
import javax.inject.Singleton;
import br.com.evologica.mvp.R;
import br.com.evologica.mvp.data.AppDataManager;
import br.com.evologica.mvp.data.DataManager;
import br.com.evologica.mvp.data.prefs.AppPreferencesHelper;
import br.com.evologica.mvp.data.prefs.PreferencesHelper;
import br.com.evologica.mvp.di.ApplicationContext;
import br.com.evologica.mvp.di.PreferenceInfo;
import dagger.Module;
import dagger.Provides;
import uk.co.chrisjenx.calligraphy.CalligraphyConfig;
/**
* Created by marcussales on 02/03/2017.
*/
@Module
public class ApplicationModule {
private final Application mApplication;
public ApplicationModule(Application application) {
mApplication = application;
}
@Provides
@ApplicationContext
Context provideContext() {
return mApplication;
}
@Provides
Application provideApplication() {
return mApplication;
}
@Provides
@Singleton
DataManager provideDataManager(AppDataManager appDataManager){
return appDataManager;
}
@Provides
@Singleton
PreferencesHelper providePreferencesHelper(AppPreferencesHelper appPreferencesHelper){
return appPreferencesHelper;
}
@Provides
@PreferenceInfo
String providePreferenceName(){
return "whatever";
}
@Provides
@Singleton
CalligraphyConfig provideCalligraphyDefaultConfig() {
return new CalligraphyConfig.Builder()
.setDefaultFontPath("fonts/source-sans-pro/SourceSansPro-Regular.ttf")
.setFontAttrId(R.attr.fontPath)
.build();
}
}
package br.com.evologica.mvp.ui.base;
import android.content.Context;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.annotation.StringRes;
import android.support.v7.app.AppCompatActivity;
import br.com.evologica.mvp.MvpApp;
import br.com.evologica.mvp.di.component.ActivityComponent;
import br.com.evologica.mvp.di.component.DaggerActivityComponent;
import br.com.evologica.mvp.di.module.ActivityModule;
import uk.co.chrisjenx.calligraphy.CalligraphyContextWrapper;
/**
......@@ -12,6 +18,21 @@ import uk.co.chrisjenx.calligraphy.CalligraphyContextWrapper;
public class BaseActivity extends AppCompatActivity implements MvpView, BaseFragment.Callback {
private ActivityComponent mActivityComponent;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mActivityComponent = DaggerActivityComponent.builder()
.activityModule(new ActivityModule(this))
.applicationComponent(((MvpApp) getApplication()).getComponent())
.build();
}
public ActivityComponent getActivityComponent() {
return mActivityComponent;
}
@Override
protected void attachBaseContext(Context newBase) {
super.attachBaseContext(CalligraphyContextWrapper.wrap(newBase));
......
package br.com.evologica.mvp.ui.base;
import javax.inject.Inject;
import br.com.evologica.mvp.data.DataManager;
/**
* Created by marcussales on 01/03/2017.
*/
......@@ -8,6 +12,13 @@ public class BasePresenter<V extends MvpView> implements MvpPresenter<V> {
private V mMvpView;
private final DataManager mDataManager;
@Inject
public BasePresenter(DataManager mDataManager) {
this.mDataManager = mDataManager;
}
public V getMvpView() {
return mMvpView;
}
......@@ -21,4 +32,8 @@ public class BasePresenter<V extends MvpView> implements MvpPresenter<V> {
public void onDetach() {
}
public DataManager getDataManager() {
return mDataManager;
}
}
......@@ -6,6 +6,8 @@ import android.support.annotation.Nullable;
import android.view.View;
import android.widget.EditText;
import javax.inject.Inject;
import br.com.evologica.mvp.R;
import br.com.evologica.mvp.ui.base.BaseActivity;
import br.com.evologica.mvp.ui.main.MainActivity;
......@@ -19,7 +21,10 @@ import butterknife.OnClick;
public class LoginActivity extends BaseActivity implements LoginMvpView {
private LoginMvpPresenter<LoginMvpView> mPresenter;
private static final String TAG = "LoginActivity";
@Inject
LoginMvpPresenter<LoginMvpView> mPresenter;
@BindView(R.id.et_email)
EditText mEmailEditText;
......@@ -32,9 +37,11 @@ public class LoginActivity extends BaseActivity implements LoginMvpView {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
mPresenter = new LoginPresenter<LoginMvpView>();
mPresenter.onAttach(LoginActivity.this);
getActivityComponent().inject(this);
ButterKnife.bind(this);
mPresenter.onAttach(LoginActivity.this);
}
@OnClick(R.id.btn_login)
......
package br.com.evologica.mvp.ui.login;
import br.com.evologica.mvp.di.PerActivity;
import br.com.evologica.mvp.ui.base.MvpPresenter;
/**
* Created by marcussales on 01/03/2017.
*/
@PerActivity
public interface LoginMvpPresenter<V extends LoginMvpView> extends MvpPresenter<V> {
void onLogin(String email,String password);
......
package br.com.evologica.mvp.ui.login;
import br.com.evologica.mvp.data.AppDataManager;
import javax.inject.Inject;
import br.com.evologica.mvp.data.DataManager;
import br.com.evologica.mvp.ui.base.BasePresenter;
/**
......@@ -9,9 +11,16 @@ import br.com.evologica.mvp.ui.base.BasePresenter;
public class LoginPresenter<V extends LoginMvpView> extends BasePresenter<V> implements LoginMvpPresenter<V> {
private static final String TAG = "LoginPresenter";
@Inject
public LoginPresenter(DataManager dataManager) {
super(dataManager);
}
@Override
public void onLogin(String email, String password){
AppDataManager.getInstance().setLoggedIn();
getDataManager().setLoggedIn();
getMvpView().openMainActivity();
}
}
......@@ -6,6 +6,8 @@ import android.support.annotation.Nullable;
import android.view.View;
import android.widget.Button;
import javax.inject.Inject;
import br.com.evologica.mvp.R;
import br.com.evologica.mvp.ui.base.BaseActivity;
import br.com.evologica.mvp.ui.login.LoginActivity;
......@@ -19,7 +21,8 @@ import butterknife.OnClick;
public class MainActivity extends BaseActivity implements MainMvpView {
private MainMvpPresenter<MainMvpView> mPresenter;
@Inject
MainMvpPresenter<MainMvpView> mPresenter;
@BindView(R.id.logout_button)
Button mLogoutButton;
......@@ -29,16 +32,12 @@ public class MainActivity extends BaseActivity implements MainMvpView {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mPresenter = new MainPresenter<MainMvpView>();
mPresenter.onAttach(MainActivity.this);
getActivityComponent().inject(this);
ButterKnife.bind(this);
// mLogoutButton.setOnClickListener(new View.OnClickListener() {
// @Override
// public void onClick(View v) {
//
// }
// });
mPresenter.onAttach(MainActivity.this);
}
@OnClick(R.id.logout_button)
......
package br.com.evologica.mvp.ui.main;
import br.com.evologica.mvp.di.PerActivity;
import br.com.evologica.mvp.ui.base.MvpPresenter;
import br.com.evologica.mvp.ui.base.MvpView;
......@@ -7,6 +8,7 @@ import br.com.evologica.mvp.ui.base.MvpView;
* Created by marcussales on 01/03/2017.
*/
@PerActivity
public interface MainMvpPresenter<V extends MvpView> extends MvpPresenter<V> {
void onLogout();
......
package br.com.evologica.mvp.ui.main;
import br.com.evologica.mvp.data.AppDataManager;
import javax.inject.Inject;
import br.com.evologica.mvp.data.DataManager;
import br.com.evologica.mvp.ui.base.BasePresenter;
/**
......@@ -9,9 +11,14 @@ import br.com.evologica.mvp.ui.base.BasePresenter;
public class MainPresenter<V extends MainMvpView> extends BasePresenter<V> implements MainMvpPresenter<V> {
@Inject
public MainPresenter(DataManager dataManager) {
super(dataManager);
}
@Override
public void onLogout() {
AppDataManager.getInstance().setLoggedOut();
getDataManager().setLoggedOut();
getMvpView().openLoginActivity();
}
}
......@@ -4,6 +4,8 @@ import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.Nullable;
import javax.inject.Inject;
import br.com.evologica.mvp.R;
import br.com.evologica.mvp.ui.base.BaseActivity;
import br.com.evologica.mvp.ui.login.LoginActivity;
......@@ -16,19 +18,19 @@ import butterknife.ButterKnife;
public class SplashActivity extends BaseActivity implements SplashMvpView {
private SplashMvpPresenter<SplashMvpView> mPresenter;
@Inject
SplashMvpPresenter<SplashMvpView> mPresenter;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_splash);
mPresenter = new SplashPresenter<SplashMvpView>();
mPresenter.onAttach(SplashActivity.this);
ButterKnife.bind(this);
getActivityComponent().inject(this);
ButterKnife.bind(this);
mPresenter.onAttach(SplashActivity.this);
}
@Override
......
package br.com.evologica.mvp.ui.splash;
import br.com.evologica.mvp.di.PerActivity;
import br.com.evologica.mvp.ui.base.MvpPresenter;
import br.com.evologica.mvp.ui.base.MvpView;
......@@ -7,5 +8,6 @@ import br.com.evologica.mvp.ui.base.MvpView;
* Created by marcussales on 01/03/2017.
*/
@PerActivity
public interface SplashMvpPresenter<V extends MvpView> extends MvpPresenter<V> {
}
package br.com.evologica.mvp.ui.splash;
import br.com.evologica.mvp.data.AppDataManager;
import javax.inject.Inject;
import br.com.evologica.mvp.data.DataManager;
import br.com.evologica.mvp.ui.base.BasePresenter;
/**
......@@ -9,11 +11,16 @@ import br.com.evologica.mvp.ui.base.BasePresenter;
public class SplashPresenter<V extends SplashMvpView> extends BasePresenter<V> implements SplashMvpPresenter<V> {
@Inject
public SplashPresenter(DataManager dataManager) {
super(dataManager);
}
@Override
public void onAttach(V mvpView) {
super.onAttach(mvpView);
if (!AppDataManager.getInstance().isLogged()){
if (!getDataManager().isLogged()){
getMvpView().openLoginActivity();
}else{
getMvpView().openMainActivity();
......
......@@ -38,7 +38,7 @@ ext {
//rx2AndroidNetworking = '0.0.1'
// dagger2Version = '2.8'
dagger2Version = '2.8'
//rxjava2Version = '2.0.5'
//rxandroidVersion = '2.0.1'
butterKnifeVersion = '8.5.1'
......@@ -47,8 +47,8 @@ ext {
// debugDBVersion = '1.0.0'
// timberVersion = '4.5.1'
//
// //Test dependencies
// junitVersion = '4.12'
// espressoVersion = '2.2.2'
// mockitoVersion = '2.7.1'
//Test dependencies
junitVersion = '4.12'
espressoVersion = '2.2.2'
mockitoVersion = '2.7.1'
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment