mirror of
https://github.com/android10/Android-CleanArchitecture.git
synced 2025-08-15 00:13:05 +08:00
First refactor to use dagger on presentation layer.
This commit is contained in:
@ -6,14 +6,18 @@ package com.fernandocejas.android10.sample.data.cache.serializer;
|
|||||||
|
|
||||||
import com.fernandocejas.android10.sample.data.entity.UserEntity;
|
import com.fernandocejas.android10.sample.data.entity.UserEntity;
|
||||||
import com.google.gson.Gson;
|
import com.google.gson.Gson;
|
||||||
|
import javax.inject.Inject;
|
||||||
|
import javax.inject.Singleton;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Class user as Serializer/Deserializer for user entities.
|
* Class user as Serializer/Deserializer for user entities.
|
||||||
*/
|
*/
|
||||||
|
@Singleton
|
||||||
public class JsonSerializer {
|
public class JsonSerializer {
|
||||||
|
|
||||||
private final Gson gson = new Gson();
|
private final Gson gson = new Gson();
|
||||||
|
|
||||||
|
@Inject
|
||||||
public JsonSerializer() {
|
public JsonSerializer() {
|
||||||
//empty
|
//empty
|
||||||
}
|
}
|
||||||
|
@ -9,13 +9,17 @@ import com.fernandocejas.android10.sample.domain.User;
|
|||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import javax.inject.Inject;
|
||||||
|
import javax.inject.Singleton;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Mapper class used to transform {@link UserEntity} (in the data layer) to {@link User} in the
|
* Mapper class used to transform {@link UserEntity} (in the data layer) to {@link User} in the
|
||||||
* domain layer.
|
* domain layer.
|
||||||
*/
|
*/
|
||||||
|
@Singleton
|
||||||
public class UserEntityDataMapper {
|
public class UserEntityDataMapper {
|
||||||
|
|
||||||
|
@Inject
|
||||||
public UserEntityDataMapper() {
|
public UserEntityDataMapper() {
|
||||||
//empty
|
//empty
|
||||||
}
|
}
|
||||||
|
@ -9,6 +9,7 @@ import com.fernandocejas.android10.sample.data.cache.UserCache;
|
|||||||
import com.fernandocejas.android10.sample.data.entity.mapper.UserEntityJsonMapper;
|
import com.fernandocejas.android10.sample.data.entity.mapper.UserEntityJsonMapper;
|
||||||
import com.fernandocejas.android10.sample.data.net.RestApi;
|
import com.fernandocejas.android10.sample.data.net.RestApi;
|
||||||
import com.fernandocejas.android10.sample.data.net.RestApiImpl;
|
import com.fernandocejas.android10.sample.data.net.RestApiImpl;
|
||||||
|
import javax.inject.Inject;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Factory that creates different implementations of {@link UserDataStore}.
|
* Factory that creates different implementations of {@link UserDataStore}.
|
||||||
@ -18,6 +19,7 @@ public class UserDataStoreFactory {
|
|||||||
private final Context context;
|
private final Context context;
|
||||||
private final UserCache userCache;
|
private final UserCache userCache;
|
||||||
|
|
||||||
|
@Inject
|
||||||
public UserDataStoreFactory(Context context, UserCache userCache) {
|
public UserDataStoreFactory(Context context, UserCache userCache) {
|
||||||
if (context == null || userCache == null) {
|
if (context == null || userCache == null) {
|
||||||
throw new IllegalArgumentException("Constructor parameters cannot be null!!!");
|
throw new IllegalArgumentException("Constructor parameters cannot be null!!!");
|
||||||
|
@ -9,6 +9,8 @@ import com.fernandocejas.android10.sample.presentation.internal.di.components.Ap
|
|||||||
import com.fernandocejas.android10.sample.presentation.internal.di.components.Dagger_ApplicationComponent;
|
import com.fernandocejas.android10.sample.presentation.internal.di.components.Dagger_ApplicationComponent;
|
||||||
import com.fernandocejas.android10.sample.presentation.internal.di.modules.ApplicationModule;
|
import com.fernandocejas.android10.sample.presentation.internal.di.modules.ApplicationModule;
|
||||||
import com.fernandocejas.android10.sample.presentation.view.activity.BaseActivity;
|
import com.fernandocejas.android10.sample.presentation.view.activity.BaseActivity;
|
||||||
|
import com.fernandocejas.android10.sample.presentation.view.fragment.UserDetailsFragment;
|
||||||
|
import com.fernandocejas.android10.sample.presentation.view.fragment.UserListFragment;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Android Main Application
|
* Android Main Application
|
||||||
@ -32,4 +34,12 @@ public class AndroidApplication extends Application {
|
|||||||
public void inject(BaseActivity baseActivity) {
|
public void inject(BaseActivity baseActivity) {
|
||||||
this.applicationComponent.inject(baseActivity);
|
this.applicationComponent.inject(baseActivity);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void inject(UserListFragment userListFragment) {
|
||||||
|
this.applicationComponent.inject(userListFragment);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void inject(UserDetailsFragment userDetailsFragment) {
|
||||||
|
this.applicationComponent.inject(userDetailsFragment);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -7,13 +7,18 @@ package com.fernandocejas.android10.sample.presentation.internal.di.components;
|
|||||||
import com.fernandocejas.android10.sample.presentation.AndroidApplication;
|
import com.fernandocejas.android10.sample.presentation.AndroidApplication;
|
||||||
import com.fernandocejas.android10.sample.presentation.internal.di.modules.ActivityModule;
|
import com.fernandocejas.android10.sample.presentation.internal.di.modules.ActivityModule;
|
||||||
import com.fernandocejas.android10.sample.presentation.internal.di.modules.ApplicationModule;
|
import com.fernandocejas.android10.sample.presentation.internal.di.modules.ApplicationModule;
|
||||||
|
import com.fernandocejas.android10.sample.presentation.internal.di.modules.UserModule;
|
||||||
import com.fernandocejas.android10.sample.presentation.view.activity.BaseActivity;
|
import com.fernandocejas.android10.sample.presentation.view.activity.BaseActivity;
|
||||||
|
import com.fernandocejas.android10.sample.presentation.view.fragment.UserDetailsFragment;
|
||||||
|
import com.fernandocejas.android10.sample.presentation.view.fragment.UserListFragment;
|
||||||
import dagger.Component;
|
import dagger.Component;
|
||||||
import javax.inject.Singleton;
|
import javax.inject.Singleton;
|
||||||
|
|
||||||
@Singleton
|
@Singleton
|
||||||
@Component(modules = {ApplicationModule.class, ActivityModule.class})
|
@Component(modules = {ApplicationModule.class, ActivityModule.class, UserModule.class})
|
||||||
public interface ApplicationComponent {
|
public interface ApplicationComponent {
|
||||||
void inject(AndroidApplication androidApplication);
|
void inject(AndroidApplication androidApplication);
|
||||||
void inject(BaseActivity activity);
|
void inject(BaseActivity activity);
|
||||||
|
void inject(UserListFragment userListFragment);
|
||||||
|
void inject(UserDetailsFragment userDetailsFragment);
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,91 @@
|
|||||||
|
/**
|
||||||
|
* Copyright (C) 2015 android10.org. All rights reserved.
|
||||||
|
* @author Fernando Cejas (the android10 coder)
|
||||||
|
*/
|
||||||
|
package com.fernandocejas.android10.sample.presentation.internal.di.modules;
|
||||||
|
|
||||||
|
import android.content.Context;
|
||||||
|
import com.fernandocejas.android10.sample.data.cache.FileManager;
|
||||||
|
import com.fernandocejas.android10.sample.data.cache.UserCache;
|
||||||
|
import com.fernandocejas.android10.sample.data.cache.UserCacheImpl;
|
||||||
|
import com.fernandocejas.android10.sample.data.cache.serializer.JsonSerializer;
|
||||||
|
import com.fernandocejas.android10.sample.data.entity.mapper.UserEntityDataMapper;
|
||||||
|
import com.fernandocejas.android10.sample.data.executor.JobExecutor;
|
||||||
|
import com.fernandocejas.android10.sample.data.repository.UserDataRepository;
|
||||||
|
import com.fernandocejas.android10.sample.data.repository.datasource.UserDataStoreFactory;
|
||||||
|
import com.fernandocejas.android10.sample.domain.executor.PostExecutionThread;
|
||||||
|
import com.fernandocejas.android10.sample.domain.executor.ThreadExecutor;
|
||||||
|
import com.fernandocejas.android10.sample.domain.interactor.GetUserDetailsUseCase;
|
||||||
|
import com.fernandocejas.android10.sample.domain.interactor.GetUserDetailsUseCaseImpl;
|
||||||
|
import com.fernandocejas.android10.sample.domain.interactor.GetUserListUseCase;
|
||||||
|
import com.fernandocejas.android10.sample.domain.interactor.GetUserListUseCaseImpl;
|
||||||
|
import com.fernandocejas.android10.sample.domain.repository.UserRepository;
|
||||||
|
import com.fernandocejas.android10.sample.presentation.UIThread;
|
||||||
|
import com.fernandocejas.android10.sample.presentation.mapper.UserModelDataMapper;
|
||||||
|
import com.fernandocejas.android10.sample.presentation.presenter.UserDetailsPresenter;
|
||||||
|
import com.fernandocejas.android10.sample.presentation.presenter.UserListPresenter;
|
||||||
|
import dagger.Module;
|
||||||
|
import dagger.Provides;
|
||||||
|
|
||||||
|
@Module
|
||||||
|
public class UserModule {
|
||||||
|
|
||||||
|
@Provides ThreadExecutor provideThreadExecutor() {
|
||||||
|
return JobExecutor.getInstance();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Provides PostExecutionThread providePostExecutionThread() {
|
||||||
|
return UIThread.getInstance();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Provides JsonSerializer provideJsonSerializer() {
|
||||||
|
return new JsonSerializer();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Provides FileManager provideFileManager() {
|
||||||
|
return FileManager.getInstance();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Provides UserCache provideUserCache(Context context, JsonSerializer jsonSerializer,
|
||||||
|
FileManager fileManager, ThreadExecutor threadExecutor) {
|
||||||
|
return UserCacheImpl.getInstance(context, jsonSerializer, fileManager, threadExecutor);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Provides UserDataStoreFactory provideUserDataStoreFactory(Context context, UserCache userCache) {
|
||||||
|
return new UserDataStoreFactory(context, userCache);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Provides UserEntityDataMapper provideUserEntityDataMapper() {
|
||||||
|
return new UserEntityDataMapper();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Provides UserRepository provideUserRepository(UserDataStoreFactory userDataStoreFactory,
|
||||||
|
UserEntityDataMapper userEntityDataMapper) {
|
||||||
|
return UserDataRepository.getInstance(userDataStoreFactory, userEntityDataMapper);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Provides GetUserListUseCase provideGetUserListUseCase(UserRepository userRepository,
|
||||||
|
ThreadExecutor threadExecutor, PostExecutionThread postExecutionThread) {
|
||||||
|
return new GetUserListUseCaseImpl(userRepository, threadExecutor, postExecutionThread);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Provides UserModelDataMapper provideUserModelDataMapper() {
|
||||||
|
return new UserModelDataMapper();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Provides UserListPresenter provideUserListPresenter(GetUserListUseCase userListUseCase,
|
||||||
|
UserModelDataMapper userModelDataMapper) {
|
||||||
|
return new UserListPresenter(userListUseCase, userModelDataMapper);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Provides GetUserDetailsUseCase provideGetUserDetailsUseCase(UserRepository userRepository,
|
||||||
|
ThreadExecutor threadExecutor, PostExecutionThread postExecutionThread) {
|
||||||
|
return new GetUserDetailsUseCaseImpl(userRepository,
|
||||||
|
threadExecutor, postExecutionThread);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Provides UserDetailsPresenter provideUserDetailsPresenter(GetUserDetailsUseCase getUserDetailsUseCase,
|
||||||
|
UserModelDataMapper userModelDataMapper) {
|
||||||
|
return new UserDetailsPresenter(getUserDetailsUseCase, userModelDataMapper);
|
||||||
|
}
|
||||||
|
}
|
@ -9,13 +9,17 @@ import com.fernandocejas.android10.sample.presentation.model.UserModel;
|
|||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
|
import javax.inject.Inject;
|
||||||
|
import javax.inject.Singleton;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Mapper class used to transform {@link User} (in the domain layer) to {@link UserModel} in the
|
* Mapper class used to transform {@link User} (in the domain layer) to {@link UserModel} in the
|
||||||
* presentation layer.
|
* presentation layer.
|
||||||
*/
|
*/
|
||||||
|
@Singleton
|
||||||
public class UserModelDataMapper {
|
public class UserModelDataMapper {
|
||||||
|
|
||||||
|
@Inject
|
||||||
public UserModelDataMapper() {
|
public UserModelDataMapper() {
|
||||||
//empty
|
//empty
|
||||||
}
|
}
|
||||||
|
@ -4,6 +4,7 @@
|
|||||||
*/
|
*/
|
||||||
package com.fernandocejas.android10.sample.presentation.presenter;
|
package com.fernandocejas.android10.sample.presentation.presenter;
|
||||||
|
|
||||||
|
import android.support.annotation.NonNull;
|
||||||
import com.fernandocejas.android10.sample.domain.User;
|
import com.fernandocejas.android10.sample.domain.User;
|
||||||
import com.fernandocejas.android10.sample.domain.exception.ErrorBundle;
|
import com.fernandocejas.android10.sample.domain.exception.ErrorBundle;
|
||||||
import com.fernandocejas.android10.sample.domain.interactor.GetUserDetailsUseCase;
|
import com.fernandocejas.android10.sample.domain.interactor.GetUserDetailsUseCase;
|
||||||
@ -21,20 +22,21 @@ public class UserDetailsPresenter implements Presenter {
|
|||||||
/** id used to retrieve user details */
|
/** id used to retrieve user details */
|
||||||
private int userId;
|
private int userId;
|
||||||
|
|
||||||
private final UserDetailsView viewDetailsView;
|
private UserDetailsView viewDetailsView;
|
||||||
|
|
||||||
private final GetUserDetailsUseCase getUserDetailsUseCase;
|
private final GetUserDetailsUseCase getUserDetailsUseCase;
|
||||||
private final UserModelDataMapper userModelDataMapper;
|
private final UserModelDataMapper userModelDataMapper;
|
||||||
|
|
||||||
public UserDetailsPresenter(UserDetailsView userDetailsView,
|
public UserDetailsPresenter(GetUserDetailsUseCase getUserDetailsUseCase,
|
||||||
GetUserDetailsUseCase getUserDetailsUseCase, UserModelDataMapper userModelDataMapper) {
|
UserModelDataMapper userModelDataMapper) {
|
||||||
if (userDetailsView == null || getUserDetailsUseCase == null || userModelDataMapper == null) {
|
|
||||||
throw new IllegalArgumentException("Constructor parameters cannot be null!!!");
|
|
||||||
}
|
|
||||||
this.viewDetailsView = userDetailsView;
|
|
||||||
this.getUserDetailsUseCase = getUserDetailsUseCase;
|
this.getUserDetailsUseCase = getUserDetailsUseCase;
|
||||||
this.userModelDataMapper = userModelDataMapper;
|
this.userModelDataMapper = userModelDataMapper;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void setView(@NonNull UserDetailsView view) {
|
||||||
|
this.viewDetailsView = view;
|
||||||
|
}
|
||||||
|
|
||||||
@Override public void resume() {}
|
@Override public void resume() {}
|
||||||
|
|
||||||
@Override public void pause() {}
|
@Override public void pause() {}
|
||||||
|
@ -4,6 +4,7 @@
|
|||||||
*/
|
*/
|
||||||
package com.fernandocejas.android10.sample.presentation.presenter;
|
package com.fernandocejas.android10.sample.presentation.presenter;
|
||||||
|
|
||||||
|
import android.support.annotation.NonNull;
|
||||||
import com.fernandocejas.android10.sample.domain.User;
|
import com.fernandocejas.android10.sample.domain.User;
|
||||||
import com.fernandocejas.android10.sample.domain.exception.ErrorBundle;
|
import com.fernandocejas.android10.sample.domain.exception.ErrorBundle;
|
||||||
import com.fernandocejas.android10.sample.domain.interactor.GetUserListUseCase;
|
import com.fernandocejas.android10.sample.domain.interactor.GetUserListUseCase;
|
||||||
@ -12,27 +13,32 @@ import com.fernandocejas.android10.sample.presentation.mapper.UserModelDataMappe
|
|||||||
import com.fernandocejas.android10.sample.presentation.model.UserModel;
|
import com.fernandocejas.android10.sample.presentation.model.UserModel;
|
||||||
import com.fernandocejas.android10.sample.presentation.view.UserListView;
|
import com.fernandocejas.android10.sample.presentation.view.UserListView;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
|
import javax.inject.Inject;
|
||||||
|
import javax.inject.Singleton;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* {@link Presenter} that controls communication between views and models of the presentation
|
* {@link Presenter} that controls communication between views and models of the presentation
|
||||||
* layer.
|
* layer.
|
||||||
*/
|
*/
|
||||||
|
@Singleton
|
||||||
public class UserListPresenter implements Presenter {
|
public class UserListPresenter implements Presenter {
|
||||||
|
|
||||||
private final UserListView viewListView;
|
private UserListView viewListView;
|
||||||
|
|
||||||
private final GetUserListUseCase getUserListUseCase;
|
private final GetUserListUseCase getUserListUseCase;
|
||||||
private final UserModelDataMapper userModelDataMapper;
|
private final UserModelDataMapper userModelDataMapper;
|
||||||
|
|
||||||
public UserListPresenter(UserListView userListView, GetUserListUseCase getUserListUserCase,
|
@Inject
|
||||||
|
public UserListPresenter(GetUserListUseCase getUserListUserCase,
|
||||||
UserModelDataMapper userModelDataMapper) {
|
UserModelDataMapper userModelDataMapper) {
|
||||||
if (userListView == null || getUserListUserCase == null || userModelDataMapper == null) {
|
|
||||||
throw new IllegalArgumentException("Constructor parameters cannot be null!!!");
|
|
||||||
}
|
|
||||||
this.viewListView = userListView;
|
|
||||||
this.getUserListUseCase = getUserListUserCase;
|
this.getUserListUseCase = getUserListUserCase;
|
||||||
this.userModelDataMapper = userModelDataMapper;
|
this.userModelDataMapper = userModelDataMapper;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void setView(@NonNull UserListView view) {
|
||||||
|
this.viewListView = view;
|
||||||
|
}
|
||||||
|
|
||||||
@Override public void resume() {}
|
@Override public void resume() {}
|
||||||
|
|
||||||
@Override public void pause() {}
|
@Override public void pause() {}
|
||||||
|
@ -7,6 +7,7 @@ package com.fernandocejas.android10.sample.presentation.view.fragment;
|
|||||||
import android.app.Fragment;
|
import android.app.Fragment;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.widget.Toast;
|
import android.widget.Toast;
|
||||||
|
import com.fernandocejas.android10.sample.presentation.AndroidApplication;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Base {@link android.app.Fragment} class for every fragment in this application.
|
* Base {@link android.app.Fragment} class for every fragment in this application.
|
||||||
@ -16,15 +17,8 @@ public abstract class BaseFragment extends Fragment {
|
|||||||
@Override public void onCreate(Bundle savedInstanceState) {
|
@Override public void onCreate(Bundle savedInstanceState) {
|
||||||
super.onCreate(savedInstanceState);
|
super.onCreate(savedInstanceState);
|
||||||
setRetainInstance(true);
|
setRetainInstance(true);
|
||||||
initializePresenter();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Initializes the {@link com.fernandocejas.android10.sample.presentation.presenter.Presenter}
|
|
||||||
* for this fragment in a MVP pattern used to architect the application presentation layer.
|
|
||||||
*/
|
|
||||||
abstract void initializePresenter();
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Shows a {@link android.widget.Toast} message.
|
* Shows a {@link android.widget.Toast} message.
|
||||||
*
|
*
|
||||||
@ -33,4 +27,13 @@ public abstract class BaseFragment extends Fragment {
|
|||||||
protected void showToastMessage(String message) {
|
protected void showToastMessage(String message) {
|
||||||
Toast.makeText(getActivity(), message, Toast.LENGTH_SHORT).show();
|
Toast.makeText(getActivity(), message, Toast.LENGTH_SHORT).show();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the Android Main Application.
|
||||||
|
*
|
||||||
|
* @return singleton {@link com.fernandocejas.android10.sample.presentation.AndroidApplication}
|
||||||
|
*/
|
||||||
|
protected AndroidApplication getApplication() {
|
||||||
|
return (AndroidApplication)getActivity().getApplication();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -15,26 +15,12 @@ import android.widget.TextView;
|
|||||||
import butterknife.ButterKnife;
|
import butterknife.ButterKnife;
|
||||||
import butterknife.InjectView;
|
import butterknife.InjectView;
|
||||||
import butterknife.OnClick;
|
import butterknife.OnClick;
|
||||||
import com.fernandocejas.android10.sample.data.cache.FileManager;
|
|
||||||
import com.fernandocejas.android10.sample.data.cache.UserCache;
|
|
||||||
import com.fernandocejas.android10.sample.data.cache.UserCacheImpl;
|
|
||||||
import com.fernandocejas.android10.sample.data.cache.serializer.JsonSerializer;
|
|
||||||
import com.fernandocejas.android10.sample.data.entity.mapper.UserEntityDataMapper;
|
|
||||||
import com.fernandocejas.android10.sample.data.executor.JobExecutor;
|
|
||||||
import com.fernandocejas.android10.sample.data.repository.UserDataRepository;
|
|
||||||
import com.fernandocejas.android10.sample.data.repository.datasource.UserDataStoreFactory;
|
|
||||||
import com.fernandocejas.android10.sample.domain.executor.PostExecutionThread;
|
|
||||||
import com.fernandocejas.android10.sample.domain.executor.ThreadExecutor;
|
|
||||||
import com.fernandocejas.android10.sample.domain.interactor.GetUserDetailsUseCase;
|
|
||||||
import com.fernandocejas.android10.sample.domain.interactor.GetUserDetailsUseCaseImpl;
|
|
||||||
import com.fernandocejas.android10.sample.domain.repository.UserRepository;
|
|
||||||
import com.fernandocejas.android10.sample.presentation.R;
|
import com.fernandocejas.android10.sample.presentation.R;
|
||||||
import com.fernandocejas.android10.sample.presentation.UIThread;
|
|
||||||
import com.fernandocejas.android10.sample.presentation.mapper.UserModelDataMapper;
|
|
||||||
import com.fernandocejas.android10.sample.presentation.model.UserModel;
|
import com.fernandocejas.android10.sample.presentation.model.UserModel;
|
||||||
import com.fernandocejas.android10.sample.presentation.presenter.UserDetailsPresenter;
|
import com.fernandocejas.android10.sample.presentation.presenter.UserDetailsPresenter;
|
||||||
import com.fernandocejas.android10.sample.presentation.view.UserDetailsView;
|
import com.fernandocejas.android10.sample.presentation.view.UserDetailsView;
|
||||||
import com.fernandocejas.android10.sample.presentation.view.component.AutoLoadImageView;
|
import com.fernandocejas.android10.sample.presentation.view.component.AutoLoadImageView;
|
||||||
|
import javax.inject.Inject;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Fragment that shows details of a certain user.
|
* Fragment that shows details of a certain user.
|
||||||
@ -44,7 +30,8 @@ public class UserDetailsFragment extends BaseFragment implements UserDetailsView
|
|||||||
private static final String ARGUMENT_KEY_USER_ID = "org.android10.ARGUMENT_USER_ID";
|
private static final String ARGUMENT_KEY_USER_ID = "org.android10.ARGUMENT_USER_ID";
|
||||||
|
|
||||||
private int userId;
|
private int userId;
|
||||||
private UserDetailsPresenter userDetailsPresenter;
|
|
||||||
|
@Inject UserDetailsPresenter userDetailsPresenter;
|
||||||
|
|
||||||
@InjectView(R.id.iv_cover) AutoLoadImageView iv_cover;
|
@InjectView(R.id.iv_cover) AutoLoadImageView iv_cover;
|
||||||
@InjectView(R.id.tv_fullname) TextView tv_fullname;
|
@InjectView(R.id.tv_fullname) TextView tv_fullname;
|
||||||
@ -69,6 +56,7 @@ public class UserDetailsFragment extends BaseFragment implements UserDetailsView
|
|||||||
|
|
||||||
@Override public void onCreate(Bundle savedInstanceState) {
|
@Override public void onCreate(Bundle savedInstanceState) {
|
||||||
super.onCreate(savedInstanceState);
|
super.onCreate(savedInstanceState);
|
||||||
|
this.getApplication().inject(this);
|
||||||
this.initialize();
|
this.initialize();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -96,28 +84,9 @@ public class UserDetailsFragment extends BaseFragment implements UserDetailsView
|
|||||||
this.userDetailsPresenter.pause();
|
this.userDetailsPresenter.pause();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override void initializePresenter() {
|
private void initialize() {
|
||||||
// All these dependency initialization could have been avoided using a
|
this.userDetailsPresenter.setView(this);
|
||||||
// dependency injection framework. But in this case are used this way for
|
this.userId = getArguments().getInt(ARGUMENT_KEY_USER_ID);
|
||||||
// LEARNING EXAMPLE PURPOSE.
|
|
||||||
ThreadExecutor threadExecutor = JobExecutor.getInstance();
|
|
||||||
PostExecutionThread postExecutionThread = UIThread.getInstance();
|
|
||||||
|
|
||||||
JsonSerializer userCacheSerializer = new JsonSerializer();
|
|
||||||
UserCache userCache = UserCacheImpl.getInstance(getActivity(), userCacheSerializer,
|
|
||||||
FileManager.getInstance(), threadExecutor);
|
|
||||||
UserDataStoreFactory userDataStoreFactory =
|
|
||||||
new UserDataStoreFactory(this.getContext(), userCache);
|
|
||||||
UserEntityDataMapper userEntityDataMapper = new UserEntityDataMapper();
|
|
||||||
UserRepository userRepository = UserDataRepository.getInstance(userDataStoreFactory,
|
|
||||||
userEntityDataMapper);
|
|
||||||
|
|
||||||
GetUserDetailsUseCase getUserDetailsUseCase = new GetUserDetailsUseCaseImpl(userRepository,
|
|
||||||
threadExecutor, postExecutionThread);
|
|
||||||
UserModelDataMapper userModelDataMapper = new UserModelDataMapper();
|
|
||||||
|
|
||||||
this.userDetailsPresenter =
|
|
||||||
new UserDetailsPresenter(this, getUserDetailsUseCase, userModelDataMapper);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override public void renderUser(UserModel user) {
|
@Override public void renderUser(UserModel user) {
|
||||||
@ -156,13 +125,6 @@ public class UserDetailsFragment extends BaseFragment implements UserDetailsView
|
|||||||
return getActivity().getApplicationContext();
|
return getActivity().getApplicationContext();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Initializes fragment's private members.
|
|
||||||
*/
|
|
||||||
private void initialize() {
|
|
||||||
this.userId = getArguments().getInt(ARGUMENT_KEY_USER_ID);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Loads all users.
|
* Loads all users.
|
||||||
*/
|
*/
|
||||||
|
@ -16,28 +16,14 @@ import android.widget.RelativeLayout;
|
|||||||
import butterknife.ButterKnife;
|
import butterknife.ButterKnife;
|
||||||
import butterknife.InjectView;
|
import butterknife.InjectView;
|
||||||
import butterknife.OnClick;
|
import butterknife.OnClick;
|
||||||
import com.fernandocejas.android10.sample.data.cache.FileManager;
|
|
||||||
import com.fernandocejas.android10.sample.data.cache.UserCache;
|
|
||||||
import com.fernandocejas.android10.sample.data.cache.UserCacheImpl;
|
|
||||||
import com.fernandocejas.android10.sample.data.cache.serializer.JsonSerializer;
|
|
||||||
import com.fernandocejas.android10.sample.data.entity.mapper.UserEntityDataMapper;
|
|
||||||
import com.fernandocejas.android10.sample.data.executor.JobExecutor;
|
|
||||||
import com.fernandocejas.android10.sample.data.repository.UserDataRepository;
|
|
||||||
import com.fernandocejas.android10.sample.data.repository.datasource.UserDataStoreFactory;
|
|
||||||
import com.fernandocejas.android10.sample.domain.executor.PostExecutionThread;
|
|
||||||
import com.fernandocejas.android10.sample.domain.executor.ThreadExecutor;
|
|
||||||
import com.fernandocejas.android10.sample.domain.interactor.GetUserListUseCase;
|
|
||||||
import com.fernandocejas.android10.sample.domain.interactor.GetUserListUseCaseImpl;
|
|
||||||
import com.fernandocejas.android10.sample.domain.repository.UserRepository;
|
|
||||||
import com.fernandocejas.android10.sample.presentation.R;
|
import com.fernandocejas.android10.sample.presentation.R;
|
||||||
import com.fernandocejas.android10.sample.presentation.UIThread;
|
|
||||||
import com.fernandocejas.android10.sample.presentation.mapper.UserModelDataMapper;
|
|
||||||
import com.fernandocejas.android10.sample.presentation.model.UserModel;
|
import com.fernandocejas.android10.sample.presentation.model.UserModel;
|
||||||
import com.fernandocejas.android10.sample.presentation.presenter.UserListPresenter;
|
import com.fernandocejas.android10.sample.presentation.presenter.UserListPresenter;
|
||||||
import com.fernandocejas.android10.sample.presentation.view.UserListView;
|
import com.fernandocejas.android10.sample.presentation.view.UserListView;
|
||||||
import com.fernandocejas.android10.sample.presentation.view.adapter.UsersAdapter;
|
import com.fernandocejas.android10.sample.presentation.view.adapter.UsersAdapter;
|
||||||
import com.fernandocejas.android10.sample.presentation.view.adapter.UsersLayoutManager;
|
import com.fernandocejas.android10.sample.presentation.view.adapter.UsersLayoutManager;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
|
import javax.inject.Inject;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Fragment that shows a list of Users.
|
* Fragment that shows a list of Users.
|
||||||
@ -51,7 +37,7 @@ public class UserListFragment extends BaseFragment implements UserListView {
|
|||||||
void onUserClicked(final UserModel userModel);
|
void onUserClicked(final UserModel userModel);
|
||||||
}
|
}
|
||||||
|
|
||||||
private UserListPresenter userListPresenter;
|
@Inject UserListPresenter userListPresenter;
|
||||||
|
|
||||||
@InjectView(R.id.rv_users) RecyclerView rv_users;
|
@InjectView(R.id.rv_users) RecyclerView rv_users;
|
||||||
@InjectView(R.id.rl_progress) RelativeLayout rl_progress;
|
@InjectView(R.id.rl_progress) RelativeLayout rl_progress;
|
||||||
@ -72,6 +58,12 @@ public class UserListFragment extends BaseFragment implements UserListView {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override public void onCreate(Bundle savedInstanceState) {
|
||||||
|
super.onCreate(savedInstanceState);
|
||||||
|
this.getApplication().inject(this);
|
||||||
|
this.initialize();
|
||||||
|
}
|
||||||
|
|
||||||
@Override public View onCreateView(LayoutInflater inflater, ViewGroup container,
|
@Override public View onCreateView(LayoutInflater inflater, ViewGroup container,
|
||||||
Bundle savedInstanceState) {
|
Bundle savedInstanceState) {
|
||||||
|
|
||||||
@ -97,27 +89,8 @@ public class UserListFragment extends BaseFragment implements UserListView {
|
|||||||
this.userListPresenter.pause();
|
this.userListPresenter.pause();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override protected void initializePresenter() {
|
private void initialize() {
|
||||||
// All these dependency initialization could have been avoided using a
|
this.userListPresenter.setView(this);
|
||||||
// dependency injection framework. But in this case are used this way for
|
|
||||||
// LEARNING EXAMPLE PURPOSE.
|
|
||||||
ThreadExecutor threadExecutor = JobExecutor.getInstance();
|
|
||||||
PostExecutionThread postExecutionThread = UIThread.getInstance();
|
|
||||||
|
|
||||||
JsonSerializer userCacheSerializer = new JsonSerializer();
|
|
||||||
UserCache userCache = UserCacheImpl.getInstance(getActivity(), userCacheSerializer,
|
|
||||||
FileManager.getInstance(), threadExecutor);
|
|
||||||
UserDataStoreFactory userDataStoreFactory =
|
|
||||||
new UserDataStoreFactory(this.getContext(), userCache);
|
|
||||||
UserEntityDataMapper userEntityDataMapper = new UserEntityDataMapper();
|
|
||||||
UserRepository userRepository = UserDataRepository.getInstance(userDataStoreFactory,
|
|
||||||
userEntityDataMapper);
|
|
||||||
|
|
||||||
GetUserListUseCase getUserListUseCase = new GetUserListUseCaseImpl(userRepository,
|
|
||||||
threadExecutor, postExecutionThread);
|
|
||||||
UserModelDataMapper userModelDataMapper = new UserModelDataMapper();
|
|
||||||
|
|
||||||
this.userListPresenter = new UserListPresenter(this, getUserListUseCase, userModelDataMapper);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void setupUI() {
|
private void setupUI() {
|
||||||
|
Reference in New Issue
Block a user