diff --git a/buildsystem/dependencies.gradle b/buildsystem/dependencies.gradle index 5414bf7..a75a85e 100644 --- a/buildsystem/dependencies.gradle +++ b/buildsystem/dependencies.gradle @@ -22,6 +22,7 @@ ext { gsonVersion = '2.3' okHttpVersion = '2.5.0' androidAnnotationsVersion = '21.0.3' + arrowVersion = '1.0.0' //Testing robolectricVersion = '3.1.1' @@ -42,7 +43,7 @@ ext { recyclerView: "com.android.support:recyclerview-v7:${recyclerViewVersion}", rxJava: "io.reactivex:rxjava:${rxJavaVersion}", rxAndroid: "io.reactivex:rxandroid:${rxAndroidVersion}", - javaxAnnotation: "javax.annotation:jsr250-api:${javaxAnnotationVersion}", + javaxAnnotation: "javax.annotation:jsr250-api:${javaxAnnotationVersion}" ] presentationTestDependencies = [ @@ -57,11 +58,13 @@ ext { javaxAnnotation: "javax.annotation:jsr250-api:${javaxAnnotationVersion}", javaxInject: "javax.inject:javax.inject:${javaxInjectVersion}", rxJava: "io.reactivex:rxjava:${rxJavaVersion}", + arrow: "com.fernandocejas:arrow:${arrowVersion}" ] domainTestDependencies = [ junit: "junit:junit:${jUnitVersion}", mockito: "org.mockito:mockito-core:${mockitoVersion}", + assertj: "org.assertj:assertj-core:${assertJVersion}" ] dataDependencies = [ diff --git a/domain/build.gradle b/domain/build.gradle index 84ecd76..894a22d 100644 --- a/domain/build.gradle +++ b/domain/build.gradle @@ -23,7 +23,9 @@ dependencies { compile domainDependencies.javaxInject compile domainDependencies.rxJava + compile domainDependencies.arrow testCompile domainTestDependencies.junit testCompile domainTestDependencies.mockito -} \ No newline at end of file + testCompile domainTestDependencies.assertj +} diff --git a/domain/src/main/java/com/fernandocejas/android10/sample/domain/interactor/GetUserDetails.java b/domain/src/main/java/com/fernandocejas/android10/sample/domain/interactor/GetUserDetails.java index 3767b09..e4f1b3b 100644 --- a/domain/src/main/java/com/fernandocejas/android10/sample/domain/interactor/GetUserDetails.java +++ b/domain/src/main/java/com/fernandocejas/android10/sample/domain/interactor/GetUserDetails.java @@ -19,6 +19,8 @@ import com.fernandocejas.android10.sample.domain.User; import com.fernandocejas.android10.sample.domain.executor.PostExecutionThread; import com.fernandocejas.android10.sample.domain.executor.ThreadExecutor; import com.fernandocejas.android10.sample.domain.repository.UserRepository; +import com.fernandocejas.arrow.annotations.VisibleForTesting; +import com.fernandocejas.arrow.optional.Optional; import javax.inject.Inject; import rx.Observable; @@ -29,19 +31,26 @@ import rx.Observable; public class GetUserDetails extends UseCase { public static final String NAME = "userDetails"; + public static final String PARAM_USER_ID_KEY = "userId"; + + @VisibleForTesting + static final int PARAM_USER_ID_DEFAULT_VALUE = -1; - private final int userId; private final UserRepository userRepository; @Inject - public GetUserDetails(int userId, UserRepository userRepository, - ThreadExecutor threadExecutor, PostExecutionThread postExecutionThread) { + public GetUserDetails(UserRepository userRepository, ThreadExecutor threadExecutor, + PostExecutionThread postExecutionThread) { super(threadExecutor, postExecutionThread); - this.userId = userId; this.userRepository = userRepository; } - @Override protected Observable buildUseCaseObservable() { - return this.userRepository.user(this.userId); + @Override protected Observable buildUseCaseObservable(Optional params) { + if (params.isPresent()) { + final int userId = params.get().getInt(PARAM_USER_ID_KEY, PARAM_USER_ID_DEFAULT_VALUE); + return this.userRepository.user(userId); + } else { + return Observable.empty(); + } } } diff --git a/domain/src/main/java/com/fernandocejas/android10/sample/domain/interactor/GetUserList.java b/domain/src/main/java/com/fernandocejas/android10/sample/domain/interactor/GetUserList.java index d98eebe..b63d340 100644 --- a/domain/src/main/java/com/fernandocejas/android10/sample/domain/interactor/GetUserList.java +++ b/domain/src/main/java/com/fernandocejas/android10/sample/domain/interactor/GetUserList.java @@ -19,6 +19,7 @@ import com.fernandocejas.android10.sample.domain.User; import com.fernandocejas.android10.sample.domain.executor.PostExecutionThread; import com.fernandocejas.android10.sample.domain.executor.ThreadExecutor; import com.fernandocejas.android10.sample.domain.repository.UserRepository; +import com.fernandocejas.arrow.optional.Optional; import javax.inject.Inject; import rx.Observable; @@ -39,7 +40,7 @@ public class GetUserList extends UseCase { this.userRepository = userRepository; } - @Override public Observable buildUseCaseObservable() { + @Override public Observable buildUseCaseObservable(Optional params) { return this.userRepository.users(); } } diff --git a/domain/src/main/java/com/fernandocejas/android10/sample/domain/interactor/Params.java b/domain/src/main/java/com/fernandocejas/android10/sample/domain/interactor/Params.java new file mode 100644 index 0000000..b2113e0 --- /dev/null +++ b/domain/src/main/java/com/fernandocejas/android10/sample/domain/interactor/Params.java @@ -0,0 +1,50 @@ +/** + * Copyright (C) 2016 Fernando Cejas Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.fernandocejas.android10.sample.domain.interactor; + +import java.util.HashMap; +import java.util.Map; + +/** + * Class backed by a Map, used to pass parameters to {@link UseCase} instances. + */ +public final class Params { + public static final Params EMPTY = Params.create(); + + private final Map parameters = new HashMap<>(); + + private Params() {} + + public static Params create() { + return new Params(); + } + + public void putInt(String key, int value) { + parameters.put(key, value); + } + + int getInt(String key, int defaultValue) { + final Object object = parameters.get(key); + if (object == null) { + return defaultValue; + } + try { + return (int) object; + } catch (ClassCastException e) { + return defaultValue; + } + } +} diff --git a/domain/src/main/java/com/fernandocejas/android10/sample/domain/interactor/UseCase.java b/domain/src/main/java/com/fernandocejas/android10/sample/domain/interactor/UseCase.java index 5bb6300..36888a9 100644 --- a/domain/src/main/java/com/fernandocejas/android10/sample/domain/interactor/UseCase.java +++ b/domain/src/main/java/com/fernandocejas/android10/sample/domain/interactor/UseCase.java @@ -17,8 +17,9 @@ package com.fernandocejas.android10.sample.domain.interactor; import com.fernandocejas.android10.sample.domain.executor.PostExecutionThread; import com.fernandocejas.android10.sample.domain.executor.ThreadExecutor; -import rx.Subscriber; +import com.fernandocejas.arrow.optional.Optional; import rx.Observable; +import rx.Subscriber; import rx.Subscription; import rx.schedulers.Schedulers; import rx.subscriptions.Subscriptions; @@ -38,8 +39,7 @@ public abstract class UseCase { private Subscription subscription = Subscriptions.empty(); - protected UseCase(ThreadExecutor threadExecutor, - PostExecutionThread postExecutionThread) { + protected UseCase(ThreadExecutor threadExecutor, PostExecutionThread postExecutionThread) { this.threadExecutor = threadExecutor; this.postExecutionThread = postExecutionThread; } @@ -47,17 +47,18 @@ public abstract class UseCase { /** * Builds an {@link rx.Observable} which will be used when executing the current {@link UseCase}. */ - protected abstract Observable buildUseCaseObservable(); + protected abstract Observable buildUseCaseObservable(Optional params); /** * Executes the current use case. * - * @param useCaseSubscriber The guy who will be listen to the observable build - * with {@link #buildUseCaseObservable()}. + * @param useCaseSubscriber Subscriber which will be listening to the observable build + * by {@link #buildUseCaseObservable(Optional)} ()} method. + * @param params Parameters used to build execute this use case. */ @SuppressWarnings("unchecked") - public void execute(Subscriber useCaseSubscriber) { - this.subscription = this.buildUseCaseObservable() + public void execute(Subscriber useCaseSubscriber, Params params) { + this.subscription = this.buildUseCaseObservable(Optional.of(params)) .subscribeOn(Schedulers.from(threadExecutor)) .observeOn(postExecutionThread.getScheduler()) .subscribe(useCaseSubscriber); diff --git a/domain/src/test/java/com/fernandocejas/android10/sample/domain/UserTest.java b/domain/src/test/java/com/fernandocejas/android10/sample/domain/UserTest.java index ea45784..e321d41 100644 --- a/domain/src/test/java/com/fernandocejas/android10/sample/domain/UserTest.java +++ b/domain/src/test/java/com/fernandocejas/android10/sample/domain/UserTest.java @@ -18,8 +18,7 @@ package com.fernandocejas.android10.sample.domain; import org.junit.Before; import org.junit.Test; -import static org.hamcrest.core.Is.is; -import static org.junit.Assert.assertThat; +import static org.assertj.core.api.Assertions.assertThat; public class UserTest { @@ -34,8 +33,8 @@ public class UserTest { @Test public void testUserConstructorHappyCase() { - int userId = user.getUserId(); + final int userId = user.getUserId(); - assertThat(userId, is(FAKE_USER_ID)); + assertThat(userId).isEqualTo(FAKE_USER_ID); } } diff --git a/domain/src/test/java/com/fernandocejas/android10/sample/domain/interactor/GetUserDetailsTest.java b/domain/src/test/java/com/fernandocejas/android10/sample/domain/interactor/GetUserDetailsTest.java index f0c119d..feaa037 100644 --- a/domain/src/test/java/com/fernandocejas/android10/sample/domain/interactor/GetUserDetailsTest.java +++ b/domain/src/test/java/com/fernandocejas/android10/sample/domain/interactor/GetUserDetailsTest.java @@ -18,12 +18,15 @@ package com.fernandocejas.android10.sample.domain.interactor; import com.fernandocejas.android10.sample.domain.executor.PostExecutionThread; import com.fernandocejas.android10.sample.domain.executor.ThreadExecutor; import com.fernandocejas.android10.sample.domain.repository.UserRepository; +import com.fernandocejas.arrow.optional.Optional; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.runners.MockitoJUnitRunner; +import rx.Observable; +import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verifyNoMoreInteractions; import static org.mockito.Mockito.verifyZeroInteractions; @@ -31,7 +34,7 @@ import static org.mockito.Mockito.verifyZeroInteractions; @RunWith(MockitoJUnitRunner.class) public class GetUserDetailsTest { - private static final int FAKE_USER_ID = 123; + private static final int USER_ID = 123; private GetUserDetails getUserDetails; @@ -41,15 +44,38 @@ public class GetUserDetailsTest { @Before public void setUp() { - getUserDetails = new GetUserDetails(FAKE_USER_ID, mockUserRepository, - mockThreadExecutor, mockPostExecutionThread); + getUserDetails = new GetUserDetails(mockUserRepository, mockThreadExecutor, + mockPostExecutionThread); } @Test public void testGetUserDetailsUseCaseObservableHappyCase() { - getUserDetails.buildUseCaseObservable(); + final Params params = Params.create(); + params.putInt(GetUserDetails.PARAM_USER_ID_KEY, USER_ID); - verify(mockUserRepository).user(FAKE_USER_ID); + getUserDetails.buildUseCaseObservable(Optional.of(params)); + + verify(mockUserRepository).user(USER_ID); + verifyNoMoreInteractions(mockUserRepository); + verifyZeroInteractions(mockPostExecutionThread); + verifyZeroInteractions(mockThreadExecutor); + } + + @Test + public void testShouldReturnEmptyObservableWhenNoParameters() { + final Observable observable = getUserDetails.buildUseCaseObservable(Optional.absent()); + + assertThat(observable).isEqualTo(Observable.empty()); + verifyZeroInteractions(mockUserRepository); + verifyZeroInteractions(mockPostExecutionThread); + verifyZeroInteractions(mockThreadExecutor); + } + + @Test + public void testShouldUseDefaultUserIdValueWhenNoUserIdParameter() { + getUserDetails.buildUseCaseObservable(Optional.of(Params.create())); + + verify(mockUserRepository).user(GetUserDetails.PARAM_USER_ID_DEFAULT_VALUE); verifyNoMoreInteractions(mockUserRepository); verifyZeroInteractions(mockPostExecutionThread); verifyZeroInteractions(mockThreadExecutor); diff --git a/domain/src/test/java/com/fernandocejas/android10/sample/domain/interactor/GetUserListTest.java b/domain/src/test/java/com/fernandocejas/android10/sample/domain/interactor/GetUserListTest.java index 0ea9165..73cf0e1 100644 --- a/domain/src/test/java/com/fernandocejas/android10/sample/domain/interactor/GetUserListTest.java +++ b/domain/src/test/java/com/fernandocejas/android10/sample/domain/interactor/GetUserListTest.java @@ -18,12 +18,14 @@ package com.fernandocejas.android10.sample.domain.interactor; import com.fernandocejas.android10.sample.domain.executor.PostExecutionThread; import com.fernandocejas.android10.sample.domain.executor.ThreadExecutor; import com.fernandocejas.android10.sample.domain.repository.UserRepository; +import com.fernandocejas.arrow.optional.Optional; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.runners.MockitoJUnitRunner; +import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verifyNoMoreInteractions; import static org.mockito.Mockito.verifyZeroInteractions; @@ -45,11 +47,22 @@ public class GetUserListTest { @Test public void testGetUserListUseCaseObservableHappyCase() { - getUserList.buildUseCaseObservable(); + getUserList.buildUseCaseObservable(Optional.of(Params.EMPTY)); verify(mockUserRepository).users(); verifyNoMoreInteractions(mockUserRepository); verifyZeroInteractions(mockThreadExecutor); verifyZeroInteractions(mockPostExecutionThread); } + + @Test + @SuppressWarnings("unchecked") + public void testThereShouldNotBeAnyInteractionWithParams() { + Optional params = mock(Optional.class); + + getUserList.buildUseCaseObservable(params); + + verify(mockUserRepository).users(); + verifyZeroInteractions(params); + } } diff --git a/domain/src/test/java/com/fernandocejas/android10/sample/domain/interactor/ParamsTest.java b/domain/src/test/java/com/fernandocejas/android10/sample/domain/interactor/ParamsTest.java new file mode 100644 index 0000000..4d95afc --- /dev/null +++ b/domain/src/test/java/com/fernandocejas/android10/sample/domain/interactor/ParamsTest.java @@ -0,0 +1,49 @@ +/** + * Copyright (C) 2016 Fernando Cejas Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.fernandocejas.android10.sample.domain.interactor; + +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.runners.MockitoJUnitRunner; + +import static org.assertj.core.api.Assertions.assertThat; + +@RunWith(MockitoJUnitRunner.class) +public class ParamsTest { + + private Params params; + + @Before + public void setUp() { + params = Params.create(); + } + + @Test + public void testShouldReturnIntValue() { + params.putInt("key01", 3); + + assertThat(params.getInt("key01", 5)).isEqualTo(3); + } + + @Test + public void testShouldReturnIntDefaultValue() { + params.putInt("key01", 3); + params.putInt("key02", 4); + + assertThat(params.getInt("key03", 5)).isEqualTo(5); + } +} diff --git a/domain/src/test/java/com/fernandocejas/android10/sample/domain/interactor/UseCaseTest.java b/domain/src/test/java/com/fernandocejas/android10/sample/domain/interactor/UseCaseTest.java index 7f290e3..291cc2b 100644 --- a/domain/src/test/java/com/fernandocejas/android10/sample/domain/interactor/UseCaseTest.java +++ b/domain/src/test/java/com/fernandocejas/android10/sample/domain/interactor/UseCaseTest.java @@ -17,6 +17,7 @@ package com.fernandocejas.android10.sample.domain.interactor; import com.fernandocejas.android10.sample.domain.executor.PostExecutionThread; import com.fernandocejas.android10.sample.domain.executor.ThreadExecutor; +import com.fernandocejas.arrow.optional.Optional; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; @@ -27,8 +28,7 @@ import rx.Subscriber; import rx.observers.TestSubscriber; import rx.schedulers.TestScheduler; -import static org.hamcrest.MatcherAssert.assertThat; -import static org.hamcrest.core.Is.is; +import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.BDDMockito.given; @RunWith(MockitoJUnitRunner.class) @@ -51,35 +51,33 @@ public class UseCaseTest { TestScheduler testScheduler = new TestScheduler(); given(mockPostExecutionThread.getScheduler()).willReturn(testScheduler); - useCase.execute(testSubscriber); + useCase.execute(testSubscriber, Params.EMPTY); - assertThat(testSubscriber.getOnNextEvents().size(), is(0)); + assertThat(testSubscriber.getOnNextEvents().size()).isZero(); } @Test public void testSubscriptionWhenExecutingUseCase() { TestSubscriber testSubscriber = new TestSubscriber<>(); - useCase.execute(testSubscriber); + useCase.execute(testSubscriber, Params.EMPTY); useCase.unsubscribe(); - assertThat(testSubscriber.isUnsubscribed(), is(true)); + assertThat(testSubscriber.isUnsubscribed()).isTrue(); } private static class UseCaseTestClass extends UseCase { - UseCaseTestClass( - ThreadExecutor threadExecutor, - PostExecutionThread postExecutionThread) { + UseCaseTestClass(ThreadExecutor threadExecutor, PostExecutionThread postExecutionThread) { super(threadExecutor, postExecutionThread); } - @Override protected Observable buildUseCaseObservable() { + @Override protected Observable buildUseCaseObservable(Optional params) { return Observable.empty(); } - @Override public void execute(Subscriber UseCaseSubscriber) { - super.execute(UseCaseSubscriber); + @Override public void execute(Subscriber useCaseSubscriber, Params params) { + super.execute(useCaseSubscriber, Params.EMPTY); } } } diff --git a/presentation/src/androidTest/java/com/fernandocejas/android10/sample/test/presenter/UserDetailsPresenterTest.java b/presentation/src/androidTest/java/com/fernandocejas/android10/sample/test/presenter/UserDetailsPresenterTest.java index 07d8bc3..e2e0c53 100644 --- a/presentation/src/androidTest/java/com/fernandocejas/android10/sample/test/presenter/UserDetailsPresenterTest.java +++ b/presentation/src/androidTest/java/com/fernandocejas/android10/sample/test/presenter/UserDetailsPresenterTest.java @@ -27,6 +27,7 @@ import org.mockito.Mock; import org.mockito.runners.MockitoJUnitRunner; import rx.Subscriber; +import com.fernandocejas.android10.sample.domain.interactor.Params; import static org.mockito.BDDMockito.given; import static org.mockito.Matchers.any; import static org.mockito.Mockito.verify; @@ -34,6 +35,8 @@ import static org.mockito.Mockito.verify; @RunWith(MockitoJUnitRunner.class) public class UserDetailsPresenterTest { + private static final int USER_ID = 1; + private UserDetailsPresenter userDetailsPresenter; @Mock private Context mockContext; @@ -51,10 +54,10 @@ public class UserDetailsPresenterTest { public void testUserDetailsPresenterInitialize() { given(mockUserDetailsView.context()).willReturn(mockContext); - userDetailsPresenter.initialize(); + userDetailsPresenter.initialize(USER_ID); verify(mockUserDetailsView).hideRetry(); verify(mockUserDetailsView).showLoading(); - verify(mockGetUserDetails).execute(any(Subscriber.class)); + verify(mockGetUserDetails).execute(any(Subscriber.class), any(Params.class)); } } diff --git a/presentation/src/androidTest/java/com/fernandocejas/android10/sample/test/presenter/UserListPresenterTest.java b/presentation/src/androidTest/java/com/fernandocejas/android10/sample/test/presenter/UserListPresenterTest.java index e02d3fc..eabe55e 100644 --- a/presentation/src/androidTest/java/com/fernandocejas/android10/sample/test/presenter/UserListPresenterTest.java +++ b/presentation/src/androidTest/java/com/fernandocejas/android10/sample/test/presenter/UserListPresenterTest.java @@ -17,6 +17,7 @@ package com.fernandocejas.android10.sample.test.presenter; import android.content.Context; import com.fernandocejas.android10.sample.domain.interactor.GetUserList; +import com.fernandocejas.android10.sample.domain.interactor.Params; import com.fernandocejas.android10.sample.presentation.mapper.UserModelDataMapper; import com.fernandocejas.android10.sample.presentation.presenter.UserListPresenter; import com.fernandocejas.android10.sample.presentation.view.UserListView; @@ -55,6 +56,6 @@ public class UserListPresenterTest { verify(mockUserListView).hideRetry(); verify(mockUserListView).showLoading(); - verify(mockGetUserList).execute(any(Subscriber.class)); + verify(mockGetUserList).execute(any(Subscriber.class), any(Params.class)); } } diff --git a/presentation/src/main/java/com/fernandocejas/android10/sample/presentation/internal/di/modules/UserModule.java b/presentation/src/main/java/com/fernandocejas/android10/sample/presentation/internal/di/modules/UserModule.java index 32f8c21..94cbebd 100644 --- a/presentation/src/main/java/com/fernandocejas/android10/sample/presentation/internal/di/modules/UserModule.java +++ b/presentation/src/main/java/com/fernandocejas/android10/sample/presentation/internal/di/modules/UserModule.java @@ -32,14 +32,8 @@ import javax.inject.Named; @Module public class UserModule { - private int userId = -1; - public UserModule() {} - public UserModule(int userId) { - this.userId = userId; - } - @Provides @PerActivity @Named(GetUserList.NAME) UseCase provideGetUserListUseCase( GetUserList getUserList) { return getUserList; @@ -48,6 +42,6 @@ public class UserModule { @Provides @PerActivity @Named(GetUserDetails.NAME) UseCase provideGetUserDetailsUseCase( UserRepository userRepository, ThreadExecutor threadExecutor, PostExecutionThread postExecutionThread) { - return new GetUserDetails(userId, userRepository, threadExecutor, postExecutionThread); + return new GetUserDetails(userRepository, threadExecutor, postExecutionThread); } } diff --git a/presentation/src/main/java/com/fernandocejas/android10/sample/presentation/presenter/UserDetailsPresenter.java b/presentation/src/main/java/com/fernandocejas/android10/sample/presentation/presenter/UserDetailsPresenter.java index 367911f..4886930 100644 --- a/presentation/src/main/java/com/fernandocejas/android10/sample/presentation/presenter/UserDetailsPresenter.java +++ b/presentation/src/main/java/com/fernandocejas/android10/sample/presentation/presenter/UserDetailsPresenter.java @@ -22,6 +22,7 @@ import com.fernandocejas.android10.sample.domain.exception.ErrorBundle; import com.fernandocejas.android10.sample.domain.interactor.DefaultSubscriber; import com.fernandocejas.android10.sample.domain.interactor.GetUserDetails; import com.fernandocejas.android10.sample.domain.interactor.UseCase; +import com.fernandocejas.android10.sample.domain.interactor.Params; import com.fernandocejas.android10.sample.presentation.exception.ErrorMessageFactory; import com.fernandocejas.android10.sample.presentation.internal.di.PerActivity; import com.fernandocejas.android10.sample.presentation.mapper.UserModelDataMapper; @@ -64,19 +65,19 @@ public class UserDetailsPresenter implements Presenter { } /** - * Initializes the presenter by start retrieving user details. + * Initializes the presenter by showing/hiding proper views + * and retrieving user details. */ - public void initialize() { - this.loadUserDetails(); - } - - /** - * Loads user details. - */ - private void loadUserDetails() { + public void initialize(int userId) { this.hideViewRetry(); this.showViewLoading(); - this.getUserDetails(); + this.getUserDetails(userId); + } + + private void getUserDetails(int userId) { + final Params params = Params.create(); + params.putInt(GetUserDetails.PARAM_USER_ID_KEY, userId); + this.getUserDetailsUseCase.execute(new UserDetailsSubscriber(), params); } private void showViewLoading() { @@ -106,10 +107,6 @@ public class UserDetailsPresenter implements Presenter { this.viewDetailsView.renderUser(userModel); } - private void getUserDetails() { - this.getUserDetailsUseCase.execute(new UserDetailsSubscriber()); - } - @RxLogSubscriber private final class UserDetailsSubscriber extends DefaultSubscriber { diff --git a/presentation/src/main/java/com/fernandocejas/android10/sample/presentation/presenter/UserListPresenter.java b/presentation/src/main/java/com/fernandocejas/android10/sample/presentation/presenter/UserListPresenter.java index 7b4ccb8..55a5e14 100644 --- a/presentation/src/main/java/com/fernandocejas/android10/sample/presentation/presenter/UserListPresenter.java +++ b/presentation/src/main/java/com/fernandocejas/android10/sample/presentation/presenter/UserListPresenter.java @@ -22,6 +22,7 @@ import com.fernandocejas.android10.sample.domain.exception.ErrorBundle; import com.fernandocejas.android10.sample.domain.interactor.DefaultSubscriber; import com.fernandocejas.android10.sample.domain.interactor.GetUserList; import com.fernandocejas.android10.sample.domain.interactor.UseCase; +import com.fernandocejas.android10.sample.domain.interactor.Params; import com.fernandocejas.android10.sample.presentation.exception.ErrorMessageFactory; import com.fernandocejas.android10.sample.presentation.internal.di.PerActivity; import com.fernandocejas.android10.sample.presentation.mapper.UserModelDataMapper; @@ -113,7 +114,7 @@ public class UserListPresenter implements Presenter { } private void getUserList() { - this.getUserListUseCase.execute(new UserListSubscriber()); + this.getUserListUseCase.execute(new UserListSubscriber(), Params.EMPTY); } private final class UserListSubscriber extends DefaultSubscriber> { diff --git a/presentation/src/main/java/com/fernandocejas/android10/sample/presentation/view/activity/UserDetailsActivity.java b/presentation/src/main/java/com/fernandocejas/android10/sample/presentation/view/activity/UserDetailsActivity.java index fb2ae48..f13ecf2 100644 --- a/presentation/src/main/java/com/fernandocejas/android10/sample/presentation/view/activity/UserDetailsActivity.java +++ b/presentation/src/main/java/com/fernandocejas/android10/sample/presentation/view/activity/UserDetailsActivity.java @@ -13,7 +13,6 @@ import com.fernandocejas.android10.sample.presentation.R; import com.fernandocejas.android10.sample.presentation.internal.di.HasComponent; import com.fernandocejas.android10.sample.presentation.internal.di.components.DaggerUserComponent; import com.fernandocejas.android10.sample.presentation.internal.di.components.UserComponent; -import com.fernandocejas.android10.sample.presentation.internal.di.modules.UserModule; import com.fernandocejas.android10.sample.presentation.view.fragment.UserDetailsFragment; /** @@ -55,7 +54,7 @@ public class UserDetailsActivity extends BaseActivity implements HasComponent