├── data ├── .gitignore ├── src │ ├── main │ │ ├── AndroidManifest.xml │ │ └── java │ │ │ └── com │ │ │ └── fernandocejas │ │ │ └── android10 │ │ │ └── sample │ │ │ └── data │ │ │ ├── exception │ │ │ ├── UserNotFoundException.java │ │ │ ├── NetworkConnectionException.java │ │ │ └── RepositoryErrorBundle.java │ │ │ ├── repository │ │ │ ├── datasource │ │ │ │ ├── UserDataStore.java │ │ │ │ ├── DiskUserDataStore.java │ │ │ │ ├── CloudUserDataStore.java │ │ │ │ └── UserDataStoreFactory.java │ │ │ └── UserDataRepository.java │ │ │ ├── net │ │ │ ├── RestApi.java │ │ │ ├── ApiConnection.java │ │ │ └── RestApiImpl.java │ │ │ ├── cache │ │ │ ├── serializer │ │ │ │ └── JsonSerializer.java │ │ │ ├── UserCache.java │ │ │ └── FileManager.java │ │ │ ├── entity │ │ │ ├── mapper │ │ │ │ ├── UserEntityDataMapper.java │ │ │ │ └── UserEntityJsonMapper.java │ │ │ └── UserEntity.java │ │ │ └── executor │ │ │ └── JobExecutor.java │ └── test │ │ └── java │ │ └── com │ │ └── fernandocejas │ │ └── android10 │ │ └── sample │ │ └── data │ │ ├── ApplicationStub.java │ │ ├── ApplicationTestCase.java │ │ ├── exception │ │ └── RepositoryErrorBundleTest.java │ │ ├── repository │ │ ├── datasource │ │ │ ├── DiskUserDataStoreTest.java │ │ │ ├── CloudUserDataStoreTest.java │ │ │ └── UserDataStoreFactoryTest.java │ │ └── UserDataRepositoryTest.java │ │ ├── cache │ │ ├── FileManagerTest.java │ │ └── serializer │ │ │ └── JsonSerializerTest.java │ │ ├── entity │ │ └── mapper │ │ │ ├── UserEntityDataMapperTest.java │ │ │ └── UserEntityJsonMapperTest.java │ │ └── MyRunner.java ├── proguard-rules.pro └── build.gradle ├── presentation ├── .gitignore ├── src │ ├── main │ │ ├── res │ │ │ ├── drawable-hdpi │ │ │ │ ├── logo.png │ │ │ │ └── ic_launcher.png │ │ │ ├── drawable-mdpi │ │ │ │ └── ic_launcher.png │ │ │ ├── drawable-xhdpi │ │ │ │ └── ic_launcher.png │ │ │ ├── drawable-xxhdpi │ │ │ │ └── ic_launcher.png │ │ │ ├── layout │ │ │ │ ├── activity_user_details.xml │ │ │ │ ├── view_progress.xml │ │ │ │ ├── fragment_user_details.xml │ │ │ │ ├── activity_user_list.xml │ │ │ │ ├── view_retry.xml │ │ │ │ ├── fragment_user_list.xml │ │ │ │ ├── activity_main.xml │ │ │ │ ├── row_user.xml │ │ │ │ └── view_user_details.xml │ │ │ ├── drawable │ │ │ │ └── selector_item_user.xml │ │ │ └── values │ │ │ │ ├── dimens.xml │ │ │ │ ├── strings.xml │ │ │ │ └── styles.xml │ │ ├── java │ │ │ └── com │ │ │ │ └── fernandocejas │ │ │ │ └── android10 │ │ │ │ └── sample │ │ │ │ └── presentation │ │ │ │ ├── view │ │ │ │ ├── adapter │ │ │ │ │ ├── UsersLayoutManager.java │ │ │ │ │ └── UsersAdapter.java │ │ │ │ ├── activity │ │ │ │ │ ├── MainActivity.java │ │ │ │ │ ├── UserListActivity.java │ │ │ │ │ ├── BaseActivity.java │ │ │ │ │ └── UserDetailsActivity.java │ │ │ │ └── fragment │ │ │ │ │ ├── BaseFragment.java │ │ │ │ │ ├── UserDetailsFragment.java │ │ │ │ │ └── UserListFragment.java │ │ │ │ ├── viewmodel │ │ │ │ ├── UserDetailsView.java │ │ │ │ ├── UserItemViewModel.java │ │ │ │ ├── UserListView.java │ │ │ │ ├── LoadDataView.java │ │ │ │ └── UserListViewModel.java │ │ │ │ ├── internal │ │ │ │ └── di │ │ │ │ │ ├── HasComponent.java │ │ │ │ │ ├── PerActivity.java │ │ │ │ │ ├── modules │ │ │ │ │ ├── ActivityModule.java │ │ │ │ │ ├── ViewModule.java │ │ │ │ │ ├── UserModule.java │ │ │ │ │ ├── ViewModelModule.java │ │ │ │ │ └── ApplicationModule.java │ │ │ │ │ └── components │ │ │ │ │ ├── ActivityComponent.java │ │ │ │ │ ├── ApplicationComponent.java │ │ │ │ │ └── UserComponent.java │ │ │ │ ├── binding │ │ │ │ └── AutoLoadImageView │ │ │ │ │ └── ImageUrlViewBinding.java │ │ │ │ ├── UIThread.java │ │ │ │ ├── exception │ │ │ │ └── ErrorMessageFactory.java │ │ │ │ ├── navigation │ │ │ │ └── Navigator.java │ │ │ │ ├── AndroidApplication.java │ │ │ │ ├── model │ │ │ │ └── UserModel.java │ │ │ │ └── mapper │ │ │ │ └── UserModelDataMapper.java │ │ └── AndroidManifest.xml │ └── androidTest │ │ └── java │ │ └── com │ │ └── fernandocejas │ │ └── android10 │ │ └── sample │ │ └── test │ │ ├── exception │ │ └── ErrorMessageFactoryTest.java │ │ ├── presenter │ │ ├── UserListPresenterTest.java │ │ └── UserDetailsPresenterTest.java │ │ ├── view │ │ └── activity │ │ │ ├── UserListActivityTest.java │ │ │ └── UserDetailsActivityTest.java │ │ └── mapper │ │ └── UserModelDataMapperTest.java ├── proguard-rules.pro └── build.gradle ├── settings.gradle ├── gradle └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── .travis.yml ├── .gitignore ├── domain ├── build.gradle └── src │ ├── main │ └── java │ │ └── com │ │ └── fernandocejas │ │ └── android10 │ │ └── sample │ │ └── domain │ │ ├── exception │ │ ├── ErrorBundle.java │ │ └── DefaultErrorBundle.java │ │ ├── executor │ │ ├── ThreadExecutor.java │ │ └── PostExecutionThread.java │ │ ├── interactor │ │ ├── DefaultSubscriber.java │ │ ├── GetUserList.java │ │ ├── GetUserDetails.java │ │ └── UseCase.java │ │ ├── repository │ │ └── UserRepository.java │ │ └── User.java │ └── test │ └── java │ └── com │ └── fernandocejas │ └── android10 │ └── sample │ └── domain │ ├── UserTest.java │ ├── exception │ └── DefaultErrorBundleTest.java │ └── interactor │ ├── GetUserListTest.java │ ├── GetUserDetailsTest.java │ └── UseCaseTest.java ├── gradle.properties ├── README.md └── gradlew.bat /data/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | -------------------------------------------------------------------------------- /presentation/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | -------------------------------------------------------------------------------- /settings.gradle: -------------------------------------------------------------------------------- 1 | include ':presentation' 2 | include ':domain' 3 | include ':data' 4 | -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboBinding/Android-CleanArchitecture/HEAD/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: android 2 | 3 | android: 4 | components: 5 | - build-tools-19.1.0 6 | - android-19 7 | 8 | script: 9 | ./gradlew build 10 | -------------------------------------------------------------------------------- /presentation/src/main/res/drawable-hdpi/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboBinding/Android-CleanArchitecture/HEAD/presentation/src/main/res/drawable-hdpi/logo.png -------------------------------------------------------------------------------- /presentation/src/main/res/drawable-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboBinding/Android-CleanArchitecture/HEAD/presentation/src/main/res/drawable-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /presentation/src/main/res/drawable-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboBinding/Android-CleanArchitecture/HEAD/presentation/src/main/res/drawable-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /presentation/src/main/res/drawable-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboBinding/Android-CleanArchitecture/HEAD/presentation/src/main/res/drawable-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /presentation/src/main/res/drawable-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboBinding/Android-CleanArchitecture/HEAD/presentation/src/main/res/drawable-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /data/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | #Sat Aug 22 15:43:16 GMT+10:00 2015 2 | distributionBase=GRADLE_USER_HOME 3 | distributionPath=wrapper/dists 4 | zipStoreBase=GRADLE_USER_HOME 5 | zipStorePath=wrapper/dists 6 | distributionUrl=https\://services.gradle.org/distributions/gradle-2.4-bin.zip 7 | -------------------------------------------------------------------------------- /presentation/src/main/res/layout/activity_user_details.xml: -------------------------------------------------------------------------------- 1 | 5 | 6 | 11 | 12 | -------------------------------------------------------------------------------- /presentation/src/main/res/layout/view_progress.xml: -------------------------------------------------------------------------------- 1 | 7 | 8 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /presentation/src/main/res/drawable/selector_item_user.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /presentation/src/main/res/layout/fragment_user_details.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 10 | 11 | 14 | 15 | 18 | 19 | -------------------------------------------------------------------------------- /presentation/src/main/res/layout/activity_user_list.xml: -------------------------------------------------------------------------------- 1 | 5 | 6 | 12 | 13 | -------------------------------------------------------------------------------- /presentation/src/main/res/layout/view_retry.xml: -------------------------------------------------------------------------------- 1 | 8 | 9 |