├── .idea ├── .gitignore ├── codeStyles │ └── Project.xml ├── encodings.xml ├── inspectionProfiles │ └── Project_Default.xml ├── misc.xml ├── modules.xml ├── vcs.xml └── 源码.iml ├── Chapter10-AAC ├── .gitignore ├── .idea │ ├── checkstyle-idea.xml │ ├── gradle.xml │ ├── markdown-exported-files.xml │ ├── markdown-navigator.xml │ ├── markdown-navigator │ │ └── profiles_settings.xml │ ├── misc.xml │ ├── modules.xml │ ├── runConfigurations.xml │ └── vcs.xml ├── build.gradle ├── gradle.properties ├── gradle │ └── wrapper │ │ ├── gradle-wrapper.jar │ │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat ├── main │ ├── .gitignore │ ├── build.gradle │ ├── proguard-rules.pro │ ├── proguardTest-rules.pro │ └── src │ │ └── main │ │ ├── AndroidManifest.xml │ │ ├── java │ │ └── com │ │ │ └── imuxuan │ │ │ └── art │ │ │ ├── EnApplication.java │ │ │ ├── data │ │ │ ├── DiariesRepository.java │ │ │ ├── local │ │ │ │ ├── DbManager.java │ │ │ │ ├── DiariesLocalDataSource.java │ │ │ │ └── DiaryDao.java │ │ │ └── mock │ │ │ │ └── MockDiaries.java │ │ │ ├── main │ │ │ ├── DiariesFragment.java │ │ │ ├── DiariesListBindings.java │ │ │ ├── DiariesViewModel.java │ │ │ ├── MainActivity.java │ │ │ ├── ToastInfo.java │ │ │ └── list │ │ │ │ ├── DiariesAdapter.java │ │ │ │ └── holder │ │ │ │ ├── DiaryHolder.java │ │ │ │ └── RecyclerViewHolder.java │ │ │ ├── model │ │ │ └── Diary.java │ │ │ ├── source │ │ │ ├── DataCallback.java │ │ │ └── DataSource.java │ │ │ └── util │ │ │ ├── ActivityUtils.java │ │ │ ├── CollectionUtils.java │ │ │ ├── GsonUtils.java │ │ │ ├── SharedPreferencesUtils.java │ │ │ └── ThreadUtils.java │ │ └── res │ │ ├── drawable-xxhdpi │ │ ├── add.png │ │ └── yes.png │ │ ├── layout │ │ ├── activity_diaries.xml │ │ ├── activity_diary_edit.xml │ │ ├── fragment_diaries.xml │ │ ├── fragment_diary_edit.xml │ │ └── list_diary_item.xml │ │ ├── menu │ │ ├── menu_done.xml │ │ └── menu_write.xml │ │ ├── mipmap-hdpi │ │ └── ic_launcher.png │ │ ├── mipmap-ldpi │ │ └── ic_launcher.png │ │ ├── mipmap-mdpi │ │ └── ic_launcher.png │ │ ├── mipmap-xhdpi │ │ └── ic_launcher.png │ │ ├── mipmap-xxhdpi │ │ └── ic_launcher.png │ │ ├── mipmap-xxxhdpi │ │ └── ic_launcher.png │ │ ├── values-v21 │ │ └── styles.xml │ │ ├── values-w820dp │ │ └── dimens.xml │ │ └── values │ │ ├── colors.xml │ │ ├── dimens.xml │ │ ├── strings.xml │ │ └── styles.xml └── settings.gradle ├── Chapter11-CBD ├── .gitignore ├── .idea │ ├── checkstyle-idea.xml │ ├── codeStyles │ │ └── Project.xml │ ├── gradle.xml │ ├── markdown-navigator │ │ └── profiles_settings.xml │ ├── misc.xml │ ├── modules.xml │ ├── runConfigurations.xml │ └── vcs.xml ├── build.gradle ├── build_config │ ├── base.gradle │ ├── common.gradle │ └── version.gradle ├── diary_edit │ ├── .gitignore │ ├── build.gradle │ ├── proguard-rules.pro │ └── src │ │ └── main │ │ ├── debug │ │ └── AndroidManifest.xml │ │ ├── java │ │ └── com │ │ │ └── imuxuan │ │ │ └── art │ │ │ └── diary │ │ │ └── edit │ │ │ ├── DiaryEditActivity.java │ │ │ ├── DiaryEditContract.java │ │ │ ├── DiaryEditFragment.java │ │ │ └── DiaryEditPresenter.java │ │ ├── release │ │ └── AndroidManifest.xml │ │ └── res │ │ ├── drawable-xxhdpi │ │ └── yes.png │ │ ├── layout │ │ ├── activity_diary_edit.xml │ │ └── fragment_diary_edit.xml │ │ └── menu │ │ └── menu_done.xml ├── diary_list │ ├── .gitignore │ ├── build.gradle │ ├── proguard-rules.pro │ └── src │ │ └── main │ │ ├── debug │ │ └── AndroidManifest.xml │ │ ├── java │ │ └── com │ │ │ └── imuxuan │ │ │ └── art │ │ │ └── diary │ │ │ └── list │ │ │ ├── DiariesContract.java │ │ │ ├── DiariesFragment.java │ │ │ ├── DiariesPresenter.java │ │ │ ├── MainActivity.java │ │ │ └── list │ │ │ ├── DiariesAdapter.java │ │ │ └── holder │ │ │ ├── DiaryHolder.java │ │ │ └── RecyclerViewHolder.java │ │ ├── release │ │ └── AndroidManifest.xml │ │ └── res │ │ ├── drawable-xxhdpi │ │ └── add.png │ │ ├── layout │ │ ├── activity_diaries.xml │ │ ├── fragment_diaries.xml │ │ └── list_diary_item.xml │ │ └── menu │ │ └── menu_write.xml ├── en_base │ ├── .gitignore │ ├── build.gradle │ ├── proguard-rules.pro │ └── src │ │ └── main │ │ ├── AndroidManifest.xml │ │ └── java │ │ └── com │ │ └── imuxuan │ │ └── art │ │ └── base │ │ ├── base │ │ ├── BasePresenter.java │ │ └── BaseView.java │ │ └── util │ │ ├── ActivityUtils.java │ │ ├── CollectionUtils.java │ │ ├── EnContext.java │ │ ├── GsonUtils.java │ │ └── SharedPreferencesUtils.java ├── en_common │ ├── .gitignore │ ├── build.gradle │ ├── proguard-rules.pro │ └── src │ │ └── main │ │ ├── AndroidManifest.xml │ │ └── java │ │ └── com │ │ └── imuxuan │ │ └── art │ │ └── common │ │ ├── EnApplication.java │ │ ├── data │ │ ├── DiariesRepository.java │ │ ├── local │ │ │ └── DiariesLocalDataSource.java │ │ └── mock │ │ │ └── MockDiaries.java │ │ ├── model │ │ └── Diary.java │ │ └── source │ │ ├── DataCallback.java │ │ └── DataSource.java ├── en_res │ ├── .gitignore │ ├── build.gradle │ ├── proguard-rules.pro │ └── src │ │ └── main │ │ ├── AndroidManifest.xml │ │ └── res │ │ ├── mipmap-hdpi │ │ └── ic_launcher.png │ │ ├── mipmap-ldpi │ │ └── ic_launcher.png │ │ ├── mipmap-mdpi │ │ └── ic_launcher.png │ │ ├── mipmap-xhdpi │ │ └── ic_launcher.png │ │ ├── mipmap-xxhdpi │ │ └── ic_launcher.png │ │ ├── mipmap-xxxhdpi │ │ └── ic_launcher.png │ │ ├── values-v21 │ │ └── styles.xml │ │ ├── values-w820dp │ │ └── dimens.xml │ │ └── values │ │ ├── colors.xml │ │ ├── dimens.xml │ │ ├── strings.xml │ │ └── styles.xml ├── gradle.properties ├── gradle │ └── wrapper │ │ ├── gradle-wrapper.jar │ │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat ├── main │ ├── .gitignore │ ├── build.gradle │ ├── proguard-rules.pro │ ├── proguardTest-rules.pro │ └── src │ │ └── main │ │ └── AndroidManifest.xml └── settings.gradle ├── Chapter12-Clean ├── .gitignore ├── .idea │ ├── checkstyle-idea.xml │ ├── codeStyles │ │ └── Project.xml │ ├── encodings.xml │ ├── gradle.xml │ ├── markdown-navigator │ │ └── profiles_settings.xml │ ├── misc.xml │ ├── modules.xml │ ├── runConfigurations.xml │ └── vcs.xml ├── build.gradle ├── gradle.properties ├── gradle │ └── wrapper │ │ ├── gradle-wrapper.jar │ │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat ├── main │ ├── .gitignore │ ├── build.gradle │ ├── proguard-rules.pro │ ├── proguardTest-rules.pro │ └── src │ │ └── main │ │ ├── AndroidManifest.xml │ │ ├── java │ │ └── com │ │ │ └── imuxuan │ │ │ └── art │ │ │ ├── EnApplication.java │ │ │ ├── base │ │ │ ├── BasePresenter.java │ │ │ ├── BaseView.java │ │ │ ├── UICallBackWrapper.java │ │ │ └── UseCase.java │ │ │ ├── data │ │ │ ├── DiariesRepository.java │ │ │ ├── local │ │ │ │ └── DiariesLocalDataSource.java │ │ │ └── mock │ │ │ │ └── MockDiaries.java │ │ │ ├── edit │ │ │ ├── DiaryEditActivity.java │ │ │ ├── DiaryEditContract.java │ │ │ ├── DiaryEditFragment.java │ │ │ ├── DiaryEditPresenter.java │ │ │ └── usecase │ │ │ │ ├── GetDiaryUseCase.java │ │ │ │ └── UpdateDiaryUseCase.java │ │ │ ├── main │ │ │ ├── DiariesContract.java │ │ │ ├── DiariesFragment.java │ │ │ ├── DiariesPresenter.java │ │ │ ├── MainActivity.java │ │ │ ├── list │ │ │ │ ├── DiariesAdapter.java │ │ │ │ └── holder │ │ │ │ │ ├── DiaryHolder.java │ │ │ │ │ └── RecyclerViewHolder.java │ │ │ └── usecase │ │ │ │ └── GetAllDiariesUseCase.java │ │ │ ├── model │ │ │ └── Diary.java │ │ │ ├── source │ │ │ ├── DataCallback.java │ │ │ └── DataSource.java │ │ │ └── util │ │ │ ├── ActivityUtils.java │ │ │ ├── CollectionUtils.java │ │ │ ├── GsonUtils.java │ │ │ ├── SharedPreferencesUtils.java │ │ │ └── ThreadUtils.java │ │ └── res │ │ ├── drawable-xxhdpi │ │ ├── add.png │ │ └── yes.png │ │ ├── layout │ │ ├── activity_diaries.xml │ │ ├── activity_diary_edit.xml │ │ ├── fragment_diaries.xml │ │ ├── fragment_diary_edit.xml │ │ └── list_diary_item.xml │ │ ├── menu │ │ ├── menu_done.xml │ │ └── menu_write.xml │ │ ├── mipmap-hdpi │ │ └── ic_launcher.png │ │ ├── mipmap-ldpi │ │ └── ic_launcher.png │ │ ├── mipmap-mdpi │ │ └── ic_launcher.png │ │ ├── mipmap-xhdpi │ │ └── ic_launcher.png │ │ ├── mipmap-xxhdpi │ │ └── ic_launcher.png │ │ ├── mipmap-xxxhdpi │ │ └── ic_launcher.png │ │ ├── values-v21 │ │ └── styles.xml │ │ ├── values-w820dp │ │ └── dimens.xml │ │ └── values │ │ ├── colors.xml │ │ ├── dimens.xml │ │ ├── strings.xml │ │ └── styles.xml └── settings.gradle ├── Chapter12-Viper ├── .gitignore ├── .idea │ ├── codeStyles │ │ └── Project.xml │ ├── encodings.xml │ ├── gradle.xml │ ├── markdown-navigator │ │ └── profiles_settings.xml │ ├── misc.xml │ ├── modules.xml │ ├── runConfigurations.xml │ └── vcs.xml ├── build.gradle ├── gradle.properties ├── gradle │ └── wrapper │ │ ├── gradle-wrapper.jar │ │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat ├── main │ ├── .gitignore │ ├── build.gradle │ ├── proguard-rules.pro │ ├── proguardTest-rules.pro │ └── src │ │ └── main │ │ ├── AndroidManifest.xml │ │ ├── java │ │ └── com │ │ │ └── imuxuan │ │ │ └── art │ │ │ ├── EnApplication.java │ │ │ ├── base │ │ │ ├── BaseInteractor.java │ │ │ ├── BasePresenter.java │ │ │ ├── BaseRouter.java │ │ │ ├── BaseView.java │ │ │ ├── UICallBackWrapper.java │ │ │ └── UseCase.java │ │ │ ├── data │ │ │ ├── DiariesRepository.java │ │ │ ├── local │ │ │ │ └── DiariesLocalDataSource.java │ │ │ └── mock │ │ │ │ └── MockDiaries.java │ │ │ ├── edit │ │ │ ├── DiaryEditActivity.java │ │ │ ├── DiaryEditContract.java │ │ │ ├── DiaryEditFragment.java │ │ │ ├── DiaryEditPresenter.java │ │ │ └── usecase │ │ │ │ ├── GetDiaryUseCase.java │ │ │ │ └── UpdateDiaryUseCase.java │ │ │ ├── main │ │ │ ├── DiariesContract.java │ │ │ ├── DiariesFragment.java │ │ │ ├── DiariesPresenter.java │ │ │ ├── DiariesRouter.java │ │ │ ├── MainActivity.java │ │ │ ├── list │ │ │ │ ├── DiariesAdapter.java │ │ │ │ └── holder │ │ │ │ │ ├── DiaryHolder.java │ │ │ │ │ └── RecyclerViewHolder.java │ │ │ └── usecase │ │ │ │ ├── DiariesInteractor.java │ │ │ │ └── GetAllDiariesUseCase.java │ │ │ ├── model │ │ │ └── Diary.java │ │ │ ├── source │ │ │ ├── DataCallback.java │ │ │ └── DataSource.java │ │ │ └── util │ │ │ ├── ActivityUtils.java │ │ │ ├── CollectionUtils.java │ │ │ ├── GsonUtils.java │ │ │ ├── SharedPreferencesUtils.java │ │ │ └── ThreadUtils.java │ │ └── res │ │ ├── drawable-xxhdpi │ │ ├── add.png │ │ └── yes.png │ │ ├── layout │ │ ├── activity_diaries.xml │ │ ├── activity_diary_edit.xml │ │ ├── fragment_diaries.xml │ │ ├── fragment_diary_edit.xml │ │ └── list_diary_item.xml │ │ ├── menu │ │ ├── menu_done.xml │ │ └── menu_write.xml │ │ ├── mipmap-hdpi │ │ └── ic_launcher.png │ │ ├── mipmap-ldpi │ │ └── ic_launcher.png │ │ ├── mipmap-mdpi │ │ └── ic_launcher.png │ │ ├── mipmap-xhdpi │ │ └── ic_launcher.png │ │ ├── mipmap-xxhdpi │ │ └── ic_launcher.png │ │ ├── mipmap-xxxhdpi │ │ └── ic_launcher.png │ │ ├── values-v21 │ │ └── styles.xml │ │ ├── values-w820dp │ │ └── dimens.xml │ │ └── values │ │ ├── colors.xml │ │ ├── dimens.xml │ │ ├── strings.xml │ │ └── styles.xml └── settings.gradle ├── Chapter13-Fragmentless ├── .gitignore ├── .idea │ ├── checkstyle-idea.xml │ ├── codeStyles │ │ └── Project.xml │ ├── encodings.xml │ ├── gradle.xml │ ├── misc.xml │ ├── modules.xml │ ├── runConfigurations.xml │ └── vcs.xml ├── build.gradle ├── gradle.properties ├── gradle │ └── wrapper │ │ ├── gradle-wrapper.jar │ │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat ├── main │ ├── .gitignore │ ├── build.gradle │ ├── proguard-rules.pro │ ├── proguardTest-rules.pro │ └── src │ │ └── main │ │ ├── AndroidManifest.xml │ │ ├── java │ │ └── com │ │ │ └── imuxuan │ │ │ └── art │ │ │ ├── EnApplication.java │ │ │ ├── base │ │ │ ├── BasePresenter.java │ │ │ └── BaseView.java │ │ │ ├── data │ │ │ ├── DiariesRepository.java │ │ │ ├── local │ │ │ │ └── DiariesLocalDataSource.java │ │ │ └── mock │ │ │ │ └── MockDiaries.java │ │ │ ├── main │ │ │ ├── DiariesContract.java │ │ │ ├── DiariesFragment.java │ │ │ ├── DiariesPresenter.java │ │ │ ├── DiariesView.java │ │ │ ├── MainActivity.java │ │ │ └── list │ │ │ │ ├── DiariesAdapter.java │ │ │ │ └── holder │ │ │ │ ├── DiaryHolder.java │ │ │ │ └── RecyclerViewHolder.java │ │ │ ├── model │ │ │ └── Diary.java │ │ │ ├── source │ │ │ ├── DataCallback.java │ │ │ └── DataSource.java │ │ │ └── util │ │ │ ├── ActivityUtils.java │ │ │ ├── CollectionUtils.java │ │ │ ├── GsonUtils.java │ │ │ └── SharedPreferencesUtils.java │ │ └── res │ │ ├── drawable-xxhdpi │ │ ├── add.png │ │ └── yes.png │ │ ├── layout │ │ ├── activity_diaries.xml │ │ ├── activity_diary_edit.xml │ │ ├── fragment_diaries.xml │ │ ├── fragment_diary_edit.xml │ │ └── list_diary_item.xml │ │ ├── menu │ │ ├── menu_done.xml │ │ └── menu_write.xml │ │ ├── mipmap-hdpi │ │ └── ic_launcher.png │ │ ├── mipmap-ldpi │ │ └── ic_launcher.png │ │ ├── mipmap-mdpi │ │ └── ic_launcher.png │ │ ├── mipmap-xhdpi │ │ └── ic_launcher.png │ │ ├── mipmap-xxhdpi │ │ └── ic_launcher.png │ │ ├── mipmap-xxxhdpi │ │ └── ic_launcher.png │ │ ├── values-v21 │ │ └── styles.xml │ │ ├── values-w820dp │ │ └── dimens.xml │ │ └── values │ │ ├── colors.xml │ │ ├── dimens.xml │ │ ├── strings.xml │ │ └── styles.xml └── settings.gradle ├── Chapter14-Conductor ├── .gitignore ├── .idea │ ├── checkstyle-idea.xml │ ├── codeStyles │ │ └── Project.xml │ ├── encodings.xml │ ├── gradle.xml │ ├── misc.xml │ ├── modules.xml │ ├── runConfigurations.xml │ └── vcs.xml ├── build.gradle ├── gradle.properties ├── gradle │ └── wrapper │ │ ├── gradle-wrapper.jar │ │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat ├── main │ ├── .gitignore │ ├── build.gradle │ ├── proguard-rules.pro │ ├── proguardTest-rules.pro │ └── src │ │ └── main │ │ ├── AndroidManifest.xml │ │ ├── java │ │ └── com │ │ │ └── imuxuan │ │ │ └── art │ │ │ ├── EnApplication.java │ │ │ ├── base │ │ │ ├── BaseController.java │ │ │ ├── BasePresenter.java │ │ │ └── BaseView.java │ │ │ ├── data │ │ │ ├── DiariesRepository.java │ │ │ ├── local │ │ │ │ └── DiariesLocalDataSource.java │ │ │ └── mock │ │ │ │ └── MockDiaries.java │ │ │ ├── edit │ │ │ ├── DiaryEditContract.java │ │ │ ├── DiaryEditController.java │ │ │ └── DiaryEditPresenter.java │ │ │ ├── main │ │ │ ├── DiariesContract.java │ │ │ ├── DiariesController.java │ │ │ ├── DiariesPresenter.java │ │ │ ├── MainActivity.java │ │ │ └── list │ │ │ │ ├── DiariesAdapter.java │ │ │ │ └── holder │ │ │ │ ├── DiaryHolder.java │ │ │ │ └── RecyclerViewHolder.java │ │ │ ├── model │ │ │ └── Diary.java │ │ │ ├── source │ │ │ ├── DataCallback.java │ │ │ └── DataSource.java │ │ │ └── util │ │ │ ├── ActivityUtils.java │ │ │ ├── CollectionUtils.java │ │ │ ├── GsonUtils.java │ │ │ └── SharedPreferencesUtils.java │ │ └── res │ │ ├── drawable-xxhdpi │ │ ├── add.png │ │ └── yes.png │ │ ├── layout │ │ ├── activity_diaries.xml │ │ ├── activity_diary_edit.xml │ │ ├── fragment_diaries.xml │ │ ├── fragment_diary_edit.xml │ │ └── list_diary_item.xml │ │ ├── menu │ │ ├── menu_done.xml │ │ └── menu_write.xml │ │ ├── mipmap-hdpi │ │ └── ic_launcher.png │ │ ├── mipmap-ldpi │ │ └── ic_launcher.png │ │ ├── mipmap-mdpi │ │ └── ic_launcher.png │ │ ├── mipmap-xhdpi │ │ └── ic_launcher.png │ │ ├── mipmap-xxhdpi │ │ └── ic_launcher.png │ │ ├── mipmap-xxxhdpi │ │ └── ic_launcher.png │ │ ├── values-v21 │ │ └── styles.xml │ │ ├── values-w820dp │ │ └── dimens.xml │ │ └── values │ │ ├── colors.xml │ │ ├── dimens.xml │ │ ├── strings.xml │ │ └── styles.xml └── settings.gradle ├── Chapter15-Plugin-Framework ├── .gitignore ├── .idea │ ├── checkstyle-idea.xml │ ├── codeStyles │ │ └── Project.xml │ ├── gradle.xml │ ├── markdown-navigator │ │ └── profiles_settings.xml │ ├── misc.xml │ ├── modules.xml │ ├── runConfigurations.xml │ └── vcs.xml ├── app │ ├── .gitignore │ ├── build.gradle │ ├── proguard-rules.pro │ ├── proguardTest-rules.pro │ ├── smallLibs │ │ └── armeabi │ │ │ ├── libcom_imuxuan_art_common.so │ │ │ ├── libcom_imuxuan_art_diary_edit.so │ │ │ └── libcom_imuxuan_art_diary_list.so │ └── src │ │ └── main │ │ ├── AndroidManifest.xml │ │ ├── assets │ │ └── bundle.json │ │ └── java │ │ └── com.imuxuan.art │ │ ├── EnApplication.java │ │ └── LaunchActivity.java ├── build.gradle ├── build_config │ ├── base.gradle │ ├── common.gradle │ └── version.gradle ├── diary_edit │ ├── .gitignore │ ├── build.gradle │ ├── proguard-rules.pro │ └── src │ │ └── main │ │ ├── AndroidManifest.xml │ │ ├── java │ │ └── com │ │ │ └── imuxuan │ │ │ └── art │ │ │ └── diary │ │ │ └── edit │ │ │ ├── DiaryEditActivity.java │ │ │ ├── DiaryEditContract.java │ │ │ ├── DiaryEditFragment.java │ │ │ └── DiaryEditPresenter.java │ │ └── res │ │ ├── drawable-xxhdpi │ │ └── yes.png │ │ ├── layout │ │ ├── activity_diary_edit.xml │ │ └── fragment_diary_edit.xml │ │ └── menu │ │ └── menu_done.xml ├── diary_list │ ├── .gitignore │ ├── build.gradle │ ├── proguard-rules.pro │ └── src │ │ └── main │ │ ├── AndroidManifest.xml │ │ ├── java │ │ └── com │ │ │ └── imuxuan │ │ │ └── art │ │ │ └── diary │ │ │ └── list │ │ │ ├── DiariesContract.java │ │ │ ├── DiariesFragment.java │ │ │ ├── DiariesPresenter.java │ │ │ ├── MainActivity.java │ │ │ └── list │ │ │ ├── DiariesAdapter.java │ │ │ └── holder │ │ │ ├── DiaryHolder.java │ │ │ └── RecyclerViewHolder.java │ │ └── res │ │ ├── drawable-xxhdpi │ │ └── add.png │ │ ├── layout │ │ ├── activity_diaries.xml │ │ ├── fragment_diaries.xml │ │ └── list_diary_item.xml │ │ └── menu │ │ └── menu_write.xml ├── en_base │ ├── .gitignore │ ├── build.gradle │ ├── proguard-rules.pro │ └── src │ │ └── main │ │ ├── AndroidManifest.xml │ │ └── java │ │ └── com │ │ └── imuxuan │ │ └── art │ │ └── base │ │ ├── base │ │ ├── BasePresenter.java │ │ └── BaseView.java │ │ └── util │ │ ├── ActivityUtils.java │ │ ├── CollectionUtils.java │ │ ├── EnContext.java │ │ ├── GsonUtils.java │ │ └── SharedPreferencesUtils.java ├── en_common │ ├── .gitignore │ ├── build.gradle │ ├── proguard-rules.pro │ └── src │ │ └── main │ │ ├── AndroidManifest.xml │ │ └── java │ │ └── com │ │ └── imuxuan │ │ └── art │ │ └── common │ │ ├── data │ │ ├── DiariesRepository.java │ │ ├── local │ │ │ └── DiariesLocalDataSource.java │ │ └── mock │ │ │ └── MockDiaries.java │ │ ├── model │ │ └── Diary.java │ │ └── source │ │ ├── DataCallback.java │ │ └── DataSource.java ├── en_res │ ├── .gitignore │ ├── build.gradle │ ├── proguard-rules.pro │ └── src │ │ └── main │ │ ├── AndroidManifest.xml │ │ └── res │ │ ├── mipmap-hdpi │ │ └── ic_launcher.png │ │ ├── mipmap-ldpi │ │ └── ic_launcher.png │ │ ├── mipmap-mdpi │ │ └── ic_launcher.png │ │ ├── mipmap-xhdpi │ │ └── ic_launcher.png │ │ ├── mipmap-xxhdpi │ │ └── ic_launcher.png │ │ ├── mipmap-xxxhdpi │ │ └── ic_launcher.png │ │ ├── values-v21 │ │ └── styles.xml │ │ ├── values-w820dp │ │ └── dimens.xml │ │ └── values │ │ ├── colors.xml │ │ ├── dimens.xml │ │ ├── strings.xml │ │ └── styles.xml ├── gradle.properties ├── gradle │ └── wrapper │ │ ├── gradle-wrapper.jar │ │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat └── settings.gradle ├── Chapter3-MVC ├── .gitignore ├── .idea │ ├── caches │ │ └── build_file_checksums.ser │ ├── checkstyle-idea.xml │ ├── codeStyles │ │ └── Project.xml │ ├── encodings.xml │ ├── gradle.xml │ ├── inspectionProfiles │ │ └── Project_Default.xml │ ├── misc.xml │ ├── modules.xml │ ├── runConfigurations.xml │ └── vcs.xml ├── build.gradle ├── gradle.properties ├── gradle │ └── wrapper │ │ ├── gradle-wrapper.jar │ │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat ├── mvc-active │ ├── .gitignore │ ├── build.gradle │ ├── proguard-rules.pro │ ├── proguardTest-rules.pro │ └── src │ │ └── main │ │ ├── AndroidManifest.xml │ │ ├── java │ │ └── com │ │ │ └── imuxuan │ │ │ └── art │ │ │ └── mvc │ │ │ ├── EnApplication.java │ │ │ ├── data │ │ │ ├── DiariesRepository.java │ │ │ ├── local │ │ │ │ └── DiariesLocalDataSource.java │ │ │ └── mock │ │ │ │ └── MockDiaries.java │ │ │ ├── main │ │ │ ├── DiariesAdapter.java │ │ │ ├── DiariesController.java │ │ │ ├── DiariesFragment.java │ │ │ ├── MainActivity.java │ │ │ └── holder │ │ │ │ ├── DiaryHolder.java │ │ │ │ └── RecyclerViewHolder.java │ │ │ ├── model │ │ │ └── Diary.java │ │ │ ├── observer │ │ │ └── Observer.java │ │ │ ├── source │ │ │ ├── DataCallback.java │ │ │ └── DataSource.java │ │ │ └── util │ │ │ ├── ActivityUtils.java │ │ │ ├── CollectionUtils.java │ │ │ ├── GsonUtils.java │ │ │ └── SharedPreferencesUtils.java │ │ └── res │ │ ├── drawable-xxhdpi │ │ └── add.png │ │ ├── layout │ │ ├── activity_diaries.xml │ │ ├── fragment_diaries.xml │ │ └── list_diary_item.xml │ │ ├── menu │ │ └── menu_write.xml │ │ ├── mipmap-hdpi │ │ └── ic_launcher.png │ │ ├── mipmap-ldpi │ │ └── ic_launcher.png │ │ ├── mipmap-mdpi │ │ └── ic_launcher.png │ │ ├── mipmap-xhdpi │ │ └── ic_launcher.png │ │ ├── mipmap-xxhdpi │ │ └── ic_launcher.png │ │ ├── mipmap-xxxhdpi │ │ └── ic_launcher.png │ │ ├── values-v21 │ │ └── styles.xml │ │ ├── values-w820dp │ │ └── dimens.xml │ │ └── values │ │ ├── colors.xml │ │ ├── dimens.xml │ │ ├── strings.xml │ │ └── styles.xml ├── mvc │ ├── .gitignore │ ├── build.gradle │ ├── proguard-rules.pro │ ├── proguardTest-rules.pro │ └── src │ │ └── main │ │ ├── AndroidManifest.xml │ │ ├── java │ │ └── com │ │ │ └── imuxuan │ │ │ └── art │ │ │ └── mvc │ │ │ ├── EnApplication.java │ │ │ ├── data │ │ │ ├── DiariesRepository.java │ │ │ ├── local │ │ │ │ └── DiariesLocalDataSource.java │ │ │ └── mock │ │ │ │ └── MockDiaries.java │ │ │ ├── main │ │ │ ├── DiariesAdapter.java │ │ │ ├── DiariesController.java │ │ │ ├── DiariesFragment.java │ │ │ ├── MainActivity.java │ │ │ └── holder │ │ │ │ ├── DiaryHolder.java │ │ │ │ └── RecyclerViewHolder.java │ │ │ ├── model │ │ │ └── Diary.java │ │ │ ├── source │ │ │ ├── DataCallback.java │ │ │ └── DataSource.java │ │ │ └── util │ │ │ ├── ActivityUtils.java │ │ │ ├── CollectionUtils.java │ │ │ ├── GsonUtils.java │ │ │ └── SharedPreferencesUtils.java │ │ └── res │ │ ├── drawable-xxhdpi │ │ └── add.png │ │ ├── layout │ │ ├── activity_diaries.xml │ │ ├── fragment_diaries.xml │ │ └── list_diary_item.xml │ │ ├── menu │ │ └── menu_write.xml │ │ ├── mipmap-hdpi │ │ └── ic_launcher.png │ │ ├── mipmap-ldpi │ │ └── ic_launcher.png │ │ ├── mipmap-mdpi │ │ └── ic_launcher.png │ │ ├── mipmap-xhdpi │ │ └── ic_launcher.png │ │ ├── mipmap-xxhdpi │ │ └── ic_launcher.png │ │ ├── mipmap-xxxhdpi │ │ └── ic_launcher.png │ │ ├── values-v21 │ │ └── styles.xml │ │ ├── values-w820dp │ │ └── dimens.xml │ │ └── values │ │ ├── colors.xml │ │ ├── dimens.xml │ │ ├── strings.xml │ │ └── styles.xml └── settings.gradle ├── Chapter5-MVP ├── .gitignore ├── .idea │ ├── checkstyle-idea.xml │ ├── gradle.xml │ ├── misc.xml │ ├── modules.xml │ ├── runConfigurations.xml │ └── vcs.xml ├── build.gradle ├── gradle.properties ├── gradle │ └── wrapper │ │ ├── gradle-wrapper.jar │ │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat ├── main │ ├── .gitignore │ ├── build.gradle │ ├── proguard-rules.pro │ ├── proguardTest-rules.pro │ └── src │ │ └── main │ │ ├── AndroidManifest.xml │ │ ├── java │ │ └── com │ │ │ └── imuxuan │ │ │ └── art │ │ │ ├── EnApplication.java │ │ │ ├── base │ │ │ ├── BasePresenter.java │ │ │ └── BaseView.java │ │ │ ├── data │ │ │ ├── DiariesRepository.java │ │ │ ├── local │ │ │ │ └── DiariesLocalDataSource.java │ │ │ └── mock │ │ │ │ └── MockDiaries.java │ │ │ ├── edit │ │ │ ├── DiaryEditActivity.java │ │ │ ├── DiaryEditContract.java │ │ │ ├── DiaryEditFragment.java │ │ │ └── DiaryEditPresenter.java │ │ │ ├── main │ │ │ ├── DiariesContract.java │ │ │ ├── DiariesFragment.java │ │ │ ├── DiariesPresenter.java │ │ │ ├── MainActivity.java │ │ │ └── list │ │ │ │ ├── DiariesAdapter.java │ │ │ │ └── holder │ │ │ │ ├── DiaryHolder.java │ │ │ │ └── RecyclerViewHolder.java │ │ │ ├── model │ │ │ └── Diary.java │ │ │ ├── source │ │ │ ├── DataCallback.java │ │ │ └── DataSource.java │ │ │ └── util │ │ │ ├── ActivityUtils.java │ │ │ ├── CollectionUtils.java │ │ │ ├── GsonUtils.java │ │ │ └── SharedPreferencesUtils.java │ │ └── res │ │ ├── drawable-xxhdpi │ │ ├── add.png │ │ └── yes.png │ │ ├── layout │ │ ├── activity_diaries.xml │ │ ├── activity_diary_edit.xml │ │ ├── fragment_diaries.xml │ │ ├── fragment_diary_edit.xml │ │ └── list_diary_item.xml │ │ ├── menu │ │ ├── menu_done.xml │ │ └── menu_write.xml │ │ ├── mipmap-hdpi │ │ └── ic_launcher.png │ │ ├── mipmap-ldpi │ │ └── ic_launcher.png │ │ ├── mipmap-mdpi │ │ └── ic_launcher.png │ │ ├── mipmap-xhdpi │ │ └── ic_launcher.png │ │ ├── mipmap-xxhdpi │ │ └── ic_launcher.png │ │ ├── mipmap-xxxhdpi │ │ └── ic_launcher.png │ │ ├── values-v21 │ │ └── styles.xml │ │ ├── values-w820dp │ │ └── dimens.xml │ │ └── values │ │ ├── colors.xml │ │ ├── dimens.xml │ │ ├── strings.xml │ │ └── styles.xml └── settings.gradle ├── Chapter7-MVVM ├── .gitignore ├── .idea │ ├── checkstyle-idea.xml │ ├── gradle.xml │ ├── markdown-exported-files.xml │ ├── markdown-navigator.xml │ ├── markdown-navigator │ │ └── profiles_settings.xml │ ├── misc.xml │ ├── modules.xml │ ├── runConfigurations.xml │ └── vcs.xml ├── build.gradle ├── gradle.properties ├── gradle │ └── wrapper │ │ ├── gradle-wrapper.jar │ │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat ├── main │ ├── .gitignore │ ├── build.gradle │ ├── proguard-rules.pro │ ├── proguardTest-rules.pro │ └── src │ │ └── main │ │ ├── AndroidManifest.xml │ │ ├── java │ │ └── com │ │ │ └── imuxuan │ │ │ └── art │ │ │ ├── EnApplication.java │ │ │ ├── data │ │ │ ├── DiariesRepository.java │ │ │ ├── local │ │ │ │ └── DiariesLocalDataSource.java │ │ │ └── mock │ │ │ │ └── MockDiaries.java │ │ │ ├── main │ │ │ ├── DiariesFragment.java │ │ │ ├── DiariesListBindings.java │ │ │ ├── DiariesViewModel.java │ │ │ ├── MainActivity.java │ │ │ └── list │ │ │ │ ├── DiariesAdapter.java │ │ │ │ └── holder │ │ │ │ ├── DiaryHolder.java │ │ │ │ └── RecyclerViewHolder.java │ │ │ ├── model │ │ │ └── Diary.java │ │ │ ├── source │ │ │ ├── DataCallback.java │ │ │ └── DataSource.java │ │ │ └── util │ │ │ ├── ActivityUtils.java │ │ │ ├── CollectionUtils.java │ │ │ ├── GsonUtils.java │ │ │ └── SharedPreferencesUtils.java │ │ └── res │ │ ├── drawable-xxhdpi │ │ ├── add.png │ │ └── yes.png │ │ ├── layout │ │ ├── activity_diaries.xml │ │ ├── activity_diary_edit.xml │ │ ├── fragment_diaries.xml │ │ ├── fragment_diary_edit.xml │ │ └── list_diary_item.xml │ │ ├── menu │ │ ├── menu_done.xml │ │ └── menu_write.xml │ │ ├── mipmap-hdpi │ │ └── ic_launcher.png │ │ ├── mipmap-ldpi │ │ └── ic_launcher.png │ │ ├── mipmap-mdpi │ │ └── ic_launcher.png │ │ ├── mipmap-xhdpi │ │ └── ic_launcher.png │ │ ├── mipmap-xxhdpi │ │ └── ic_launcher.png │ │ ├── mipmap-xxxhdpi │ │ └── ic_launcher.png │ │ ├── values-v21 │ │ └── styles.xml │ │ ├── values-w820dp │ │ └── dimens.xml │ │ └── values │ │ ├── colors.xml │ │ ├── dimens.xml │ │ ├── strings.xml │ │ └── styles.xml └── settings.gradle ├── Chapter8-Dagger2 ├── .gitignore ├── .idea │ ├── checkstyle-idea.xml │ ├── gradle.xml │ ├── markdown-exported-files.xml │ ├── markdown-navigator.xml │ ├── markdown-navigator │ │ └── profiles_settings.xml │ ├── misc.xml │ ├── modules.xml │ ├── runConfigurations.xml │ └── vcs.xml ├── build.gradle ├── gradle.properties ├── gradle │ └── wrapper │ │ ├── gradle-wrapper.jar │ │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat ├── main │ ├── .gitignore │ ├── build.gradle │ ├── proguard-rules.pro │ ├── proguardTest-rules.pro │ └── src │ │ └── main │ │ ├── AndroidManifest.xml │ │ ├── java │ │ └── com │ │ │ └── imuxuan │ │ │ └── art │ │ │ ├── EnApplication.java │ │ │ ├── base │ │ │ ├── BasePresenter.java │ │ │ └── BaseView.java │ │ │ ├── data │ │ │ ├── DiariesRepository.java │ │ │ ├── di │ │ │ │ ├── DiariesRepositoryComponent.java │ │ │ │ └── DiariesRepositoryModule.java │ │ │ ├── local │ │ │ │ └── DiariesLocalDataSource.java │ │ │ └── mock │ │ │ │ └── MockDiaries.java │ │ │ ├── main │ │ │ ├── DiariesContract.java │ │ │ ├── DiariesFragment.java │ │ │ ├── DiariesPresenter.java │ │ │ ├── MainActivity.java │ │ │ ├── di │ │ │ │ ├── DiariesComponent.java │ │ │ │ └── DiariesPresenterModule.java │ │ │ └── list │ │ │ │ ├── DiariesAdapter.java │ │ │ │ └── holder │ │ │ │ ├── DiaryHolder.java │ │ │ │ └── RecyclerViewHolder.java │ │ │ ├── model │ │ │ └── Diary.java │ │ │ ├── source │ │ │ ├── DataCallback.java │ │ │ └── DataSource.java │ │ │ └── util │ │ │ ├── ActivityUtils.java │ │ │ ├── CollectionUtils.java │ │ │ ├── FragmentScoped.java │ │ │ ├── GsonUtils.java │ │ │ └── SharedPreferencesUtils.java │ │ └── res │ │ ├── drawable-xxhdpi │ │ ├── add.png │ │ └── yes.png │ │ ├── layout │ │ ├── activity_diaries.xml │ │ ├── activity_diary_edit.xml │ │ ├── fragment_diaries.xml │ │ ├── fragment_diary_edit.xml │ │ └── list_diary_item.xml │ │ ├── menu │ │ ├── menu_done.xml │ │ └── menu_write.xml │ │ ├── mipmap-hdpi │ │ └── ic_launcher.png │ │ ├── mipmap-ldpi │ │ └── ic_launcher.png │ │ ├── mipmap-mdpi │ │ └── ic_launcher.png │ │ ├── mipmap-xhdpi │ │ └── ic_launcher.png │ │ ├── mipmap-xxhdpi │ │ └── ic_launcher.png │ │ ├── mipmap-xxxhdpi │ │ └── ic_launcher.png │ │ ├── values-v21 │ │ └── styles.xml │ │ ├── values-w820dp │ │ └── dimens.xml │ │ └── values │ │ ├── colors.xml │ │ ├── dimens.xml │ │ ├── strings.xml │ │ └── styles.xml └── settings.gradle ├── Chapter9-RxJava2 ├── .gitignore ├── .idea │ ├── checkstyle-idea.xml │ ├── gradle.xml │ ├── markdown-exported-files.xml │ ├── markdown-navigator.xml │ ├── markdown-navigator │ │ └── profiles_settings.xml │ ├── misc.xml │ ├── modules.xml │ ├── runConfigurations.xml │ └── vcs.xml ├── build.gradle ├── gradle.properties ├── gradle │ └── wrapper │ │ ├── gradle-wrapper.jar │ │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat ├── main │ ├── .gitignore │ ├── build.gradle │ ├── proguard-rules.pro │ ├── proguardTest-rules.pro │ └── src │ │ └── main │ │ ├── AndroidManifest.xml │ │ ├── java │ │ └── com │ │ │ └── imuxuan │ │ │ └── art │ │ │ ├── EnApplication.java │ │ │ ├── base │ │ │ ├── BasePresenter.java │ │ │ └── BaseView.java │ │ │ ├── data │ │ │ ├── DiariesRepository.java │ │ │ ├── local │ │ │ │ └── DiariesLocalDataSource.java │ │ │ └── mock │ │ │ │ └── MockDiaries.java │ │ │ ├── main │ │ │ ├── DiariesContract.java │ │ │ ├── DiariesFragment.java │ │ │ ├── DiariesPresenter.java │ │ │ ├── MainActivity.java │ │ │ └── list │ │ │ │ ├── DiariesAdapter.java │ │ │ │ └── holder │ │ │ │ ├── DiaryHolder.java │ │ │ │ └── RecyclerViewHolder.java │ │ │ ├── model │ │ │ └── Diary.java │ │ │ ├── source │ │ │ ├── DataCallback.java │ │ │ └── DataSource.java │ │ │ └── util │ │ │ ├── ActivityUtils.java │ │ │ ├── CollectionUtils.java │ │ │ ├── GsonUtils.java │ │ │ └── SharedPreferencesUtils.java │ │ └── res │ │ ├── drawable-xxhdpi │ │ ├── add.png │ │ └── yes.png │ │ ├── layout │ │ ├── activity_diaries.xml │ │ ├── activity_diary_edit.xml │ │ ├── fragment_diaries.xml │ │ ├── fragment_diary_edit.xml │ │ └── list_diary_item.xml │ │ ├── menu │ │ ├── menu_done.xml │ │ └── menu_write.xml │ │ ├── mipmap-hdpi │ │ └── ic_launcher.png │ │ ├── mipmap-ldpi │ │ └── ic_launcher.png │ │ ├── mipmap-mdpi │ │ └── ic_launcher.png │ │ ├── mipmap-xhdpi │ │ └── ic_launcher.png │ │ ├── mipmap-xxhdpi │ │ └── ic_launcher.png │ │ ├── mipmap-xxxhdpi │ │ └── ic_launcher.png │ │ ├── values-v21 │ │ └── styles.xml │ │ ├── values-w820dp │ │ └── dimens.xml │ │ └── values │ │ ├── colors.xml │ │ ├── dimens.xml │ │ ├── strings.xml │ │ └── styles.xml └── settings.gradle ├── README.md └── pic └── img1.jpg /.idea/.gitignore: -------------------------------------------------------------------------------- 1 | # Default ignored files 2 | /workspace.xml -------------------------------------------------------------------------------- /.idea/encodings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /.idea/modules.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /.idea/vcs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /.idea/源码.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /Chapter10-AAC/.gitignore: -------------------------------------------------------------------------------- 1 | *.iml 2 | .gradle 3 | /local.properties 4 | /.idea/workspace.xml 5 | /.idea/libraries 6 | .DS_Store 7 | /build 8 | /captures 9 | .externalNativeBuild 10 | -------------------------------------------------------------------------------- /Chapter10-AAC/.idea/checkstyle-idea.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 9 | 10 | -------------------------------------------------------------------------------- /Chapter10-AAC/.idea/gradle.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 17 | 18 | -------------------------------------------------------------------------------- /Chapter10-AAC/.idea/markdown-exported-files.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Chapter10-AAC/.idea/markdown-navigator/profiles_settings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /Chapter10-AAC/.idea/modules.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /Chapter10-AAC/.idea/runConfigurations.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 11 | 12 | -------------------------------------------------------------------------------- /Chapter10-AAC/.idea/vcs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /Chapter10-AAC/build.gradle: -------------------------------------------------------------------------------- 1 | buildscript { 2 | 3 | repositories { 4 | google() 5 | jcenter() 6 | } 7 | dependencies { 8 | classpath 'com.android.tools.build:gradle:3.0.0' 9 | } 10 | } 11 | 12 | allprojects { 13 | repositories { 14 | google() 15 | jcenter() 16 | } 17 | } 18 | 19 | task clean(type: Delete) { 20 | delete rootProject.buildDir 21 | } 22 | -------------------------------------------------------------------------------- /Chapter10-AAC/gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leotyndale/AppArchitecture/e4920110c5d1c8c0e6179b03fc85e4b9d4ee162e/Chapter10-AAC/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /Chapter10-AAC/gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | #Mon Dec 03 11:31:29 CST 2018 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-4.1-all.zip 7 | -------------------------------------------------------------------------------- /Chapter10-AAC/main/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | -------------------------------------------------------------------------------- /Chapter10-AAC/main/proguardTest-rules.pro: -------------------------------------------------------------------------------- 1 | # Proguard rules that are applied to your test apk/code. 2 | -ignorewarnings 3 | 4 | -keepattributes *Annotation* 5 | 6 | -dontnote junit.framework.** 7 | -dontnote junit.runner.** 8 | 9 | -dontwarn android.test.** 10 | -dontwarn android.support.test.** 11 | -dontwarn org.junit.** 12 | -dontwarn org.hamcrest.** 13 | -dontwarn com.squareup.javawriter.JavaWriter 14 | # Uncomment this if you use Mockito 15 | -dontwarn org.mockito.** -------------------------------------------------------------------------------- /Chapter10-AAC/main/src/main/java/com/imuxuan/art/EnApplication.java: -------------------------------------------------------------------------------- 1 | package com.imuxuan.art; 2 | 3 | import android.app.Application; 4 | 5 | public class EnApplication extends Application { 6 | 7 | private static EnApplication INSTANCE; 8 | 9 | @Override 10 | public void onCreate() { 11 | super.onCreate(); 12 | INSTANCE = this; 13 | } 14 | 15 | public static EnApplication get() { 16 | return INSTANCE; 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /Chapter10-AAC/main/src/main/java/com/imuxuan/art/source/DataCallback.java: -------------------------------------------------------------------------------- 1 | package com.imuxuan.art.source; 2 | 3 | /** 4 | * Created by Yunpeng Li on 2018/12/8. 5 | */ 6 | public interface DataCallback { // 数据操作回调 7 | 8 | void onSuccess(T data); // 通知成功 9 | 10 | void onError(); // 通知失败 11 | 12 | } 13 | -------------------------------------------------------------------------------- /Chapter10-AAC/main/src/main/java/com/imuxuan/art/source/DataSource.java: -------------------------------------------------------------------------------- 1 | package com.imuxuan.art.source; 2 | 3 | import android.support.annotation.NonNull; 4 | 5 | import java.util.List; 6 | 7 | 8 | public interface DataSource { 9 | 10 | // 获得所有数据T 11 | void getAll(@NonNull DataCallback> callback); 12 | 13 | // 获取某个数据T 14 | void get(@NonNull String id, @NonNull DataCallback callback); 15 | 16 | // 更新某个数据T 17 | void update(@NonNull T diary); 18 | 19 | // 清空所有数据T 20 | void clear(); 21 | 22 | // 删除某个数据T 23 | void delete(@NonNull String id); 24 | } 25 | -------------------------------------------------------------------------------- /Chapter10-AAC/main/src/main/java/com/imuxuan/art/util/ActivityUtils.java: -------------------------------------------------------------------------------- 1 | package com.imuxuan.art.util; 2 | 3 | import android.support.annotation.NonNull; 4 | import android.support.v4.app.Fragment; 5 | import android.support.v4.app.FragmentManager; 6 | import android.support.v4.app.FragmentTransaction; 7 | 8 | 9 | public class ActivityUtils { 10 | 11 | public static void addFragmentToActivity(@NonNull FragmentManager fragmentManager, 12 | @NonNull Fragment fragment, int frameId) { 13 | FragmentTransaction transaction = fragmentManager.beginTransaction(); // Fragment事务开始 14 | transaction.add(frameId, fragment); // 添加Fragment,frameId为fragment的id 15 | transaction.commit(); // 提交事务 16 | } 17 | 18 | } 19 | -------------------------------------------------------------------------------- /Chapter10-AAC/main/src/main/java/com/imuxuan/art/util/CollectionUtils.java: -------------------------------------------------------------------------------- 1 | package com.imuxuan.art.util; 2 | 3 | import java.util.Map; 4 | 5 | public class CollectionUtils { // 集合工具类 6 | 7 | public static boolean isEmpty(Map map) { 8 | return map == null || map.isEmpty(); 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /Chapter10-AAC/main/src/main/java/com/imuxuan/art/util/ThreadUtils.java: -------------------------------------------------------------------------------- 1 | package com.imuxuan.art.util; 2 | 3 | import android.os.Handler; 4 | import android.os.Looper; 5 | 6 | /** 7 | * Created by Yunpeng Li on 2019/1/16. 8 | */ 9 | public class ThreadUtils { // 线程操作工具类 10 | 11 | public static void runOnUI(Runnable runnable) { // 在主线程中执行Runnable 12 | if (runnable == null) { // runnable无效,返回 13 | return; 14 | } 15 | if (Looper.myLooper() != Looper.getMainLooper()) { // 判断是否是主线程 16 | new Handler(Looper.getMainLooper()).post(runnable); 17 | } else { 18 | runnable.run(); 19 | } 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /Chapter10-AAC/main/src/main/res/drawable-xxhdpi/add.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leotyndale/AppArchitecture/e4920110c5d1c8c0e6179b03fc85e4b9d4ee162e/Chapter10-AAC/main/src/main/res/drawable-xxhdpi/add.png -------------------------------------------------------------------------------- /Chapter10-AAC/main/src/main/res/drawable-xxhdpi/yes.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leotyndale/AppArchitecture/e4920110c5d1c8c0e6179b03fc85e4b9d4ee162e/Chapter10-AAC/main/src/main/res/drawable-xxhdpi/yes.png -------------------------------------------------------------------------------- /Chapter10-AAC/main/src/main/res/menu/menu_done.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 9 | -------------------------------------------------------------------------------- /Chapter10-AAC/main/src/main/res/menu/menu_write.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 9 | -------------------------------------------------------------------------------- /Chapter10-AAC/main/src/main/res/mipmap-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leotyndale/AppArchitecture/e4920110c5d1c8c0e6179b03fc85e4b9d4ee162e/Chapter10-AAC/main/src/main/res/mipmap-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /Chapter10-AAC/main/src/main/res/mipmap-ldpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leotyndale/AppArchitecture/e4920110c5d1c8c0e6179b03fc85e4b9d4ee162e/Chapter10-AAC/main/src/main/res/mipmap-ldpi/ic_launcher.png -------------------------------------------------------------------------------- /Chapter10-AAC/main/src/main/res/mipmap-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leotyndale/AppArchitecture/e4920110c5d1c8c0e6179b03fc85e4b9d4ee162e/Chapter10-AAC/main/src/main/res/mipmap-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /Chapter10-AAC/main/src/main/res/mipmap-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leotyndale/AppArchitecture/e4920110c5d1c8c0e6179b03fc85e4b9d4ee162e/Chapter10-AAC/main/src/main/res/mipmap-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /Chapter10-AAC/main/src/main/res/mipmap-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leotyndale/AppArchitecture/e4920110c5d1c8c0e6179b03fc85e4b9d4ee162e/Chapter10-AAC/main/src/main/res/mipmap-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /Chapter10-AAC/main/src/main/res/mipmap-xxxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leotyndale/AppArchitecture/e4920110c5d1c8c0e6179b03fc85e4b9d4ee162e/Chapter10-AAC/main/src/main/res/mipmap-xxxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /Chapter10-AAC/main/src/main/res/values/colors.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | #D50000 5 | #D50000 6 | #D50000 7 | 8 | 9 | -------------------------------------------------------------------------------- /Chapter10-AAC/main/src/main/res/values/dimens.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 16dp 4 | 16dp 5 | 16dp 6 | 7 | -------------------------------------------------------------------------------- /Chapter10-AAC/main/src/main/res/values/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 我的日记 4 | 5 | 写日记 6 | 修改日记 7 | 8 | Success! 9 | Error! 10 | 暂未开放! 11 | 12 | 完成 13 | 写日记 14 | 删除日记 15 | 修改日记 16 | 17 | 确定 18 | 取消 19 | 20 | 标题: 21 | 详情: 22 | 23 | -------------------------------------------------------------------------------- /Chapter10-AAC/settings.gradle: -------------------------------------------------------------------------------- 1 | include ':main' 2 | -------------------------------------------------------------------------------- /Chapter11-CBD/.gitignore: -------------------------------------------------------------------------------- 1 | *.iml 2 | .gradle 3 | /local.properties 4 | /.idea/workspace.xml 5 | /.idea/libraries 6 | .DS_Store 7 | /build 8 | /captures 9 | .externalNativeBuild 10 | -------------------------------------------------------------------------------- /Chapter11-CBD/.idea/checkstyle-idea.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 9 | 10 | -------------------------------------------------------------------------------- /Chapter11-CBD/.idea/gradle.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 14 | 15 | -------------------------------------------------------------------------------- /Chapter11-CBD/.idea/markdown-navigator/profiles_settings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /Chapter11-CBD/.idea/misc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /Chapter11-CBD/.idea/runConfigurations.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 11 | 12 | -------------------------------------------------------------------------------- /Chapter11-CBD/.idea/vcs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /Chapter11-CBD/build.gradle: -------------------------------------------------------------------------------- 1 | def libs = rootProject.ext.libs 2 | 3 | buildscript { 4 | apply from: "build_config/version.gradle" 5 | 6 | repositories { 7 | google() 8 | jcenter() 9 | } 10 | dependencies { 11 | classpath "com.android.tools.build:gradle:${libs.gradle}" 12 | } 13 | } 14 | 15 | allprojects { 16 | repositories { 17 | google() 18 | jcenter() 19 | } 20 | } 21 | 22 | task clean(type: Delete) { 23 | delete rootProject.buildDir 24 | } 25 | -------------------------------------------------------------------------------- /Chapter11-CBD/build_config/version.gradle: -------------------------------------------------------------------------------- 1 | ext { 2 | androidConfig = [ 3 | compileSdkVersion : 26, 4 | minSdkVersion : 14, 5 | targetSdkVersion : 28, 6 | versionCode : 1, 7 | versionName : '1.0', 8 | ] 9 | 10 | libs = [ 11 | gradle : '3.0.0', 12 | supportlibs : '26.1.0', 13 | gson : '2.8.5', 14 | arouterApi : '1.4.1', 15 | arouterCompiler : '1.2.2' 16 | ] 17 | } -------------------------------------------------------------------------------- /Chapter11-CBD/diary_edit/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | -------------------------------------------------------------------------------- /Chapter11-CBD/diary_edit/build.gradle: -------------------------------------------------------------------------------- 1 | apply from: "../build_config/common.gradle" -------------------------------------------------------------------------------- /Chapter11-CBD/diary_edit/src/main/debug/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 4 | 5 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /Chapter11-CBD/diary_edit/src/main/release/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /Chapter11-CBD/diary_edit/src/main/res/drawable-xxhdpi/yes.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leotyndale/AppArchitecture/e4920110c5d1c8c0e6179b03fc85e4b9d4ee162e/Chapter11-CBD/diary_edit/src/main/res/drawable-xxhdpi/yes.png -------------------------------------------------------------------------------- /Chapter11-CBD/diary_edit/src/main/res/menu/menu_done.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 9 | -------------------------------------------------------------------------------- /Chapter11-CBD/diary_list/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | -------------------------------------------------------------------------------- /Chapter11-CBD/diary_list/build.gradle: -------------------------------------------------------------------------------- 1 | apply from: "../build_config/common.gradle" -------------------------------------------------------------------------------- /Chapter11-CBD/diary_list/src/main/debug/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 4 | 5 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /Chapter11-CBD/diary_list/src/main/release/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /Chapter11-CBD/diary_list/src/main/res/drawable-xxhdpi/add.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leotyndale/AppArchitecture/e4920110c5d1c8c0e6179b03fc85e4b9d4ee162e/Chapter11-CBD/diary_list/src/main/res/drawable-xxhdpi/add.png -------------------------------------------------------------------------------- /Chapter11-CBD/diary_list/src/main/res/layout/fragment_diaries.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /Chapter11-CBD/diary_list/src/main/res/menu/menu_write.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 9 | -------------------------------------------------------------------------------- /Chapter11-CBD/en_base/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | -------------------------------------------------------------------------------- /Chapter11-CBD/en_base/build.gradle: -------------------------------------------------------------------------------- 1 | apply from: "../build_config/base.gradle" 2 | 3 | dependencies { 4 | api "com.android.support:appcompat-v7:${libs.supportlibs}" 5 | api "com.android.support:design:${libs.supportlibs}" 6 | api "com.google.code.gson:gson:${libs.gson}" 7 | } 8 | -------------------------------------------------------------------------------- /Chapter11-CBD/en_base/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 3 | -------------------------------------------------------------------------------- /Chapter11-CBD/en_base/src/main/java/com/imuxuan/art/base/base/BasePresenter.java: -------------------------------------------------------------------------------- 1 | package com.imuxuan.art.base.base; 2 | 3 | public interface BasePresenter { // Presenter基类 4 | 5 | void start(); // Presenter生命周期开始 6 | 7 | void destroy(); // Presenter生命周期结束 8 | 9 | } 10 | -------------------------------------------------------------------------------- /Chapter11-CBD/en_base/src/main/java/com/imuxuan/art/base/base/BaseView.java: -------------------------------------------------------------------------------- 1 | package com.imuxuan.art.base.base; 2 | 3 | public interface BaseView { // View基类 4 | 5 | void setPresenter(T presenter); // 传入Presenter 6 | 7 | } 8 | -------------------------------------------------------------------------------- /Chapter11-CBD/en_base/src/main/java/com/imuxuan/art/base/util/ActivityUtils.java: -------------------------------------------------------------------------------- 1 | package com.imuxuan.art.base.util; 2 | 3 | import android.support.annotation.NonNull; 4 | import android.support.v4.app.Fragment; 5 | import android.support.v4.app.FragmentManager; 6 | import android.support.v4.app.FragmentTransaction; 7 | 8 | 9 | public class ActivityUtils { 10 | 11 | public static void addFragmentToActivity(@NonNull FragmentManager fragmentManager, 12 | @NonNull Fragment fragment, int frameId) { 13 | FragmentTransaction transaction = fragmentManager.beginTransaction(); // Fragment事务开始 14 | transaction.add(frameId, fragment); // 添加Fragment,frameId为fragment的id 15 | transaction.commit(); // 提交事务 16 | } 17 | 18 | } 19 | -------------------------------------------------------------------------------- /Chapter11-CBD/en_base/src/main/java/com/imuxuan/art/base/util/CollectionUtils.java: -------------------------------------------------------------------------------- 1 | package com.imuxuan.art.base.util; 2 | 3 | import java.util.Map; 4 | 5 | public class CollectionUtils { // 集合工具类 6 | 7 | public static boolean isEmpty(Map map) { 8 | return map == null || map.isEmpty(); 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /Chapter11-CBD/en_common/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | -------------------------------------------------------------------------------- /Chapter11-CBD/en_common/build.gradle: -------------------------------------------------------------------------------- 1 | apply from: "../build_config/base.gradle" 2 | 3 | dependencies { 4 | api project(':en_res') 5 | 6 | api "com.alibaba:arouter-api:${libs.arouterApi}" 7 | } 8 | -------------------------------------------------------------------------------- /Chapter11-CBD/en_common/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 3 | 4 | 11 | -------------------------------------------------------------------------------- /Chapter11-CBD/en_common/src/main/java/com/imuxuan/art/common/EnApplication.java: -------------------------------------------------------------------------------- 1 | package com.imuxuan.art.common; 2 | 3 | import android.app.Application; 4 | 5 | import com.alibaba.android.arouter.launcher.ARouter; 6 | 7 | public class EnApplication extends Application{ 8 | 9 | private static EnApplication INSTANCE; 10 | 11 | @Override 12 | public void onCreate() { 13 | super.onCreate(); 14 | INSTANCE = this; 15 | ARouter.init(this); 16 | } 17 | 18 | public static EnApplication get() { 19 | return INSTANCE; 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /Chapter11-CBD/en_common/src/main/java/com/imuxuan/art/common/source/DataCallback.java: -------------------------------------------------------------------------------- 1 | package com.imuxuan.art.common.source; 2 | 3 | /** 4 | * Created by Yunpeng Li on 2018/12/8. 5 | */ 6 | public interface DataCallback { // 数据操作回调 7 | 8 | void onSuccess(T data); // 通知成功 9 | 10 | void onError(); // 通知失败 11 | 12 | } 13 | -------------------------------------------------------------------------------- /Chapter11-CBD/en_common/src/main/java/com/imuxuan/art/common/source/DataSource.java: -------------------------------------------------------------------------------- 1 | package com.imuxuan.art.common.source; 2 | 3 | import android.support.annotation.NonNull; 4 | 5 | import java.util.List; 6 | 7 | 8 | public interface DataSource { 9 | 10 | // 获得所有数据T 11 | void getAll(@NonNull DataCallback> callback); 12 | 13 | // 获取某个数据T 14 | void get(@NonNull String id, @NonNull DataCallback callback); 15 | 16 | // 更新某个数据T 17 | void update(@NonNull T diary); 18 | 19 | // 清空所有数据T 20 | void clear(); 21 | 22 | // 删除某个数据T 23 | void delete(@NonNull String id); 24 | } 25 | -------------------------------------------------------------------------------- /Chapter11-CBD/en_res/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | -------------------------------------------------------------------------------- /Chapter11-CBD/en_res/build.gradle: -------------------------------------------------------------------------------- 1 | apply from: "../build_config/base.gradle" 2 | 3 | dependencies { 4 | api project(':en_base') 5 | } 6 | -------------------------------------------------------------------------------- /Chapter11-CBD/en_res/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 3 | -------------------------------------------------------------------------------- /Chapter11-CBD/en_res/src/main/res/mipmap-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leotyndale/AppArchitecture/e4920110c5d1c8c0e6179b03fc85e4b9d4ee162e/Chapter11-CBD/en_res/src/main/res/mipmap-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /Chapter11-CBD/en_res/src/main/res/mipmap-ldpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leotyndale/AppArchitecture/e4920110c5d1c8c0e6179b03fc85e4b9d4ee162e/Chapter11-CBD/en_res/src/main/res/mipmap-ldpi/ic_launcher.png -------------------------------------------------------------------------------- /Chapter11-CBD/en_res/src/main/res/mipmap-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leotyndale/AppArchitecture/e4920110c5d1c8c0e6179b03fc85e4b9d4ee162e/Chapter11-CBD/en_res/src/main/res/mipmap-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /Chapter11-CBD/en_res/src/main/res/mipmap-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leotyndale/AppArchitecture/e4920110c5d1c8c0e6179b03fc85e4b9d4ee162e/Chapter11-CBD/en_res/src/main/res/mipmap-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /Chapter11-CBD/en_res/src/main/res/mipmap-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leotyndale/AppArchitecture/e4920110c5d1c8c0e6179b03fc85e4b9d4ee162e/Chapter11-CBD/en_res/src/main/res/mipmap-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /Chapter11-CBD/en_res/src/main/res/mipmap-xxxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leotyndale/AppArchitecture/e4920110c5d1c8c0e6179b03fc85e4b9d4ee162e/Chapter11-CBD/en_res/src/main/res/mipmap-xxxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /Chapter11-CBD/en_res/src/main/res/values/colors.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | #D50000 5 | #D50000 6 | #D50000 7 | 8 | 9 | -------------------------------------------------------------------------------- /Chapter11-CBD/en_res/src/main/res/values/dimens.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 16dp 4 | 16dp 5 | 16dp 6 | 7 | -------------------------------------------------------------------------------- /Chapter11-CBD/gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leotyndale/AppArchitecture/e4920110c5d1c8c0e6179b03fc85e4b9d4ee162e/Chapter11-CBD/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /Chapter11-CBD/gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | #Mon Dec 03 11:31:29 CST 2018 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-4.1-all.zip 7 | -------------------------------------------------------------------------------- /Chapter11-CBD/main/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | -------------------------------------------------------------------------------- /Chapter11-CBD/main/build.gradle: -------------------------------------------------------------------------------- 1 | apply plugin: 'com.android.application' 2 | 3 | apply from: "../build_config/base.gradle" 4 | 5 | dependencies { 6 | if (!isDebug.toBoolean()) { 7 | api project(":diary_list") 8 | api project(":diary_edit") 9 | } 10 | } -------------------------------------------------------------------------------- /Chapter11-CBD/main/proguardTest-rules.pro: -------------------------------------------------------------------------------- 1 | # Proguard rules that are applied to your test apk/code. 2 | -ignorewarnings 3 | 4 | -keepattributes *Annotation* 5 | 6 | -dontnote junit.framework.** 7 | -dontnote junit.runner.** 8 | 9 | -dontwarn android.test.** 10 | -dontwarn android.support.test.** 11 | -dontwarn org.junit.** 12 | -dontwarn org.hamcrest.** 13 | -dontwarn com.squareup.javawriter.JavaWriter 14 | # Uncomment this if you use Mockito 15 | -dontwarn org.mockito.** -------------------------------------------------------------------------------- /Chapter11-CBD/main/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /Chapter11-CBD/settings.gradle: -------------------------------------------------------------------------------- 1 | include ':main', ':en_base', ':en_common', ':en_res', ':diary_list', ':diary_edit' 2 | -------------------------------------------------------------------------------- /Chapter12-Clean/.gitignore: -------------------------------------------------------------------------------- 1 | *.iml 2 | .gradle 3 | /local.properties 4 | /.idea/workspace.xml 5 | /.idea/libraries 6 | .DS_Store 7 | /build 8 | /captures 9 | .externalNativeBuild 10 | -------------------------------------------------------------------------------- /Chapter12-Clean/.idea/checkstyle-idea.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 9 | 10 | -------------------------------------------------------------------------------- /Chapter12-Clean/.idea/encodings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /Chapter12-Clean/.idea/markdown-navigator/profiles_settings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /Chapter12-Clean/.idea/modules.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /Chapter12-Clean/.idea/runConfigurations.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 11 | 12 | -------------------------------------------------------------------------------- /Chapter12-Clean/.idea/vcs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /Chapter12-Clean/build.gradle: -------------------------------------------------------------------------------- 1 | buildscript { 2 | 3 | repositories { 4 | google() 5 | jcenter() 6 | } 7 | dependencies { 8 | classpath 'com.android.tools.build:gradle:3.0.0' 9 | } 10 | } 11 | 12 | allprojects { 13 | repositories { 14 | google() 15 | jcenter() 16 | } 17 | } 18 | 19 | task clean(type: Delete) { 20 | delete rootProject.buildDir 21 | } 22 | -------------------------------------------------------------------------------- /Chapter12-Clean/gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leotyndale/AppArchitecture/e4920110c5d1c8c0e6179b03fc85e4b9d4ee162e/Chapter12-Clean/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /Chapter12-Clean/gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | #Mon Dec 03 11:31:29 CST 2018 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-4.1-all.zip 7 | -------------------------------------------------------------------------------- /Chapter12-Clean/main/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | -------------------------------------------------------------------------------- /Chapter12-Clean/main/proguardTest-rules.pro: -------------------------------------------------------------------------------- 1 | # Proguard rules that are applied to your test apk/code. 2 | -ignorewarnings 3 | 4 | -keepattributes *Annotation* 5 | 6 | -dontnote junit.framework.** 7 | -dontnote junit.runner.** 8 | 9 | -dontwarn android.test.** 10 | -dontwarn android.support.test.** 11 | -dontwarn org.junit.** 12 | -dontwarn org.hamcrest.** 13 | -dontwarn com.squareup.javawriter.JavaWriter 14 | # Uncomment this if you use Mockito 15 | -dontwarn org.mockito.** -------------------------------------------------------------------------------- /Chapter12-Clean/main/src/main/java/com/imuxuan/art/EnApplication.java: -------------------------------------------------------------------------------- 1 | package com.imuxuan.art; 2 | 3 | import android.app.Application; 4 | 5 | public class EnApplication extends Application{ 6 | 7 | private static EnApplication INSTANCE; 8 | 9 | @Override 10 | public void onCreate() { 11 | super.onCreate(); 12 | INSTANCE = this; 13 | } 14 | 15 | public static EnApplication get() { 16 | return INSTANCE; 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /Chapter12-Clean/main/src/main/java/com/imuxuan/art/base/BasePresenter.java: -------------------------------------------------------------------------------- 1 | package com.imuxuan.art.base; 2 | 3 | public interface BasePresenter { // Presenter基类 4 | 5 | void start(); // Presenter生命周期开始 6 | 7 | void destroy(); // Presenter生命周期结束 8 | 9 | } 10 | -------------------------------------------------------------------------------- /Chapter12-Clean/main/src/main/java/com/imuxuan/art/base/BaseView.java: -------------------------------------------------------------------------------- 1 | package com.imuxuan.art.base; 2 | 3 | public interface BaseView { // View基类 4 | 5 | void setPresenter(T presenter); // 传入Presenter 6 | 7 | } 8 | -------------------------------------------------------------------------------- /Chapter12-Clean/main/src/main/java/com/imuxuan/art/source/DataCallback.java: -------------------------------------------------------------------------------- 1 | package com.imuxuan.art.source; 2 | 3 | /** 4 | * Created by Yunpeng Li on 2018/12/8. 5 | */ 6 | public interface DataCallback { // 数据操作回调 7 | 8 | void onSuccess(T data); // 通知成功 9 | 10 | void onError(); // 通知失败 11 | 12 | } 13 | -------------------------------------------------------------------------------- /Chapter12-Clean/main/src/main/java/com/imuxuan/art/source/DataSource.java: -------------------------------------------------------------------------------- 1 | package com.imuxuan.art.source; 2 | 3 | import android.support.annotation.NonNull; 4 | 5 | import java.util.List; 6 | 7 | 8 | public interface DataSource { 9 | 10 | // 获得所有数据T 11 | void getAll(@NonNull DataCallback> callback); 12 | 13 | // 获取某个数据T 14 | void get(@NonNull String id, @NonNull DataCallback callback); 15 | 16 | // 更新某个数据T 17 | void update(@NonNull T diary); 18 | 19 | // 清空所有数据T 20 | void clear(); 21 | 22 | // 删除某个数据T 23 | void delete(@NonNull String id); 24 | } 25 | -------------------------------------------------------------------------------- /Chapter12-Clean/main/src/main/java/com/imuxuan/art/util/ActivityUtils.java: -------------------------------------------------------------------------------- 1 | package com.imuxuan.art.util; 2 | 3 | import android.support.annotation.NonNull; 4 | import android.support.v4.app.Fragment; 5 | import android.support.v4.app.FragmentManager; 6 | import android.support.v4.app.FragmentTransaction; 7 | 8 | 9 | public class ActivityUtils { 10 | 11 | public static void addFragmentToActivity(@NonNull FragmentManager fragmentManager, 12 | @NonNull Fragment fragment, int frameId) { 13 | FragmentTransaction transaction = fragmentManager.beginTransaction(); // Fragment事务开始 14 | transaction.add(frameId, fragment); // 添加Fragment,frameId为fragment的id 15 | transaction.commit(); // 提交事务 16 | } 17 | 18 | } 19 | -------------------------------------------------------------------------------- /Chapter12-Clean/main/src/main/java/com/imuxuan/art/util/CollectionUtils.java: -------------------------------------------------------------------------------- 1 | package com.imuxuan.art.util; 2 | 3 | import java.util.Map; 4 | 5 | public class CollectionUtils { // 集合工具类 6 | 7 | public static boolean isEmpty(Map map) { 8 | return map == null || map.isEmpty(); 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /Chapter12-Clean/main/src/main/java/com/imuxuan/art/util/ThreadUtils.java: -------------------------------------------------------------------------------- 1 | package com.imuxuan.art.util; 2 | 3 | import android.os.Handler; 4 | import android.os.Looper; 5 | 6 | /** 7 | * Created by Yunpeng Li on 2019/1/25. 8 | */ 9 | public class ThreadUtils { // 线程操作工具类 10 | 11 | public static void runOnUI(Runnable runnable) { // 在主线程中执行Runnable 12 | if (runnable == null) { // runnable无效,返回 13 | return; 14 | } 15 | if (Looper.myLooper() != Looper.getMainLooper()) { // 判断是否是主线程 16 | new Handler(Looper.getMainLooper()).post(runnable); 17 | } else { 18 | runnable.run(); 19 | } 20 | } 21 | } -------------------------------------------------------------------------------- /Chapter12-Clean/main/src/main/res/drawable-xxhdpi/add.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leotyndale/AppArchitecture/e4920110c5d1c8c0e6179b03fc85e4b9d4ee162e/Chapter12-Clean/main/src/main/res/drawable-xxhdpi/add.png -------------------------------------------------------------------------------- /Chapter12-Clean/main/src/main/res/drawable-xxhdpi/yes.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leotyndale/AppArchitecture/e4920110c5d1c8c0e6179b03fc85e4b9d4ee162e/Chapter12-Clean/main/src/main/res/drawable-xxhdpi/yes.png -------------------------------------------------------------------------------- /Chapter12-Clean/main/src/main/res/layout/fragment_diaries.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /Chapter12-Clean/main/src/main/res/menu/menu_done.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 9 | -------------------------------------------------------------------------------- /Chapter12-Clean/main/src/main/res/menu/menu_write.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 9 | -------------------------------------------------------------------------------- /Chapter12-Clean/main/src/main/res/mipmap-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leotyndale/AppArchitecture/e4920110c5d1c8c0e6179b03fc85e4b9d4ee162e/Chapter12-Clean/main/src/main/res/mipmap-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /Chapter12-Clean/main/src/main/res/mipmap-ldpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leotyndale/AppArchitecture/e4920110c5d1c8c0e6179b03fc85e4b9d4ee162e/Chapter12-Clean/main/src/main/res/mipmap-ldpi/ic_launcher.png -------------------------------------------------------------------------------- /Chapter12-Clean/main/src/main/res/mipmap-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leotyndale/AppArchitecture/e4920110c5d1c8c0e6179b03fc85e4b9d4ee162e/Chapter12-Clean/main/src/main/res/mipmap-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /Chapter12-Clean/main/src/main/res/mipmap-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leotyndale/AppArchitecture/e4920110c5d1c8c0e6179b03fc85e4b9d4ee162e/Chapter12-Clean/main/src/main/res/mipmap-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /Chapter12-Clean/main/src/main/res/mipmap-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leotyndale/AppArchitecture/e4920110c5d1c8c0e6179b03fc85e4b9d4ee162e/Chapter12-Clean/main/src/main/res/mipmap-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /Chapter12-Clean/main/src/main/res/mipmap-xxxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leotyndale/AppArchitecture/e4920110c5d1c8c0e6179b03fc85e4b9d4ee162e/Chapter12-Clean/main/src/main/res/mipmap-xxxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /Chapter12-Clean/main/src/main/res/values/colors.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | #D50000 5 | #D50000 6 | #D50000 7 | 8 | 9 | -------------------------------------------------------------------------------- /Chapter12-Clean/main/src/main/res/values/dimens.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 16dp 4 | 16dp 5 | 16dp 6 | 7 | -------------------------------------------------------------------------------- /Chapter12-Clean/main/src/main/res/values/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 我的日记 4 | 5 | 写日记 6 | 修改日记 7 | 8 | Success! 9 | Error! 10 | 暂未开放! 11 | 12 | 完成 13 | 写日记 14 | 删除日记 15 | 修改日记 16 | 17 | 确定 18 | 取消 19 | 20 | 标题: 21 | 详情: 22 | 23 | -------------------------------------------------------------------------------- /Chapter12-Clean/settings.gradle: -------------------------------------------------------------------------------- 1 | include ':main' 2 | -------------------------------------------------------------------------------- /Chapter12-Viper/.gitignore: -------------------------------------------------------------------------------- 1 | *.iml 2 | .gradle 3 | /local.properties 4 | /.idea/workspace.xml 5 | /.idea/libraries 6 | .DS_Store 7 | /build 8 | /captures 9 | .externalNativeBuild 10 | -------------------------------------------------------------------------------- /Chapter12-Viper/.idea/encodings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /Chapter12-Viper/.idea/gradle.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 14 | 15 | -------------------------------------------------------------------------------- /Chapter12-Viper/.idea/markdown-navigator/profiles_settings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /Chapter12-Viper/.idea/modules.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /Chapter12-Viper/.idea/runConfigurations.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 11 | 12 | -------------------------------------------------------------------------------- /Chapter12-Viper/.idea/vcs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /Chapter12-Viper/build.gradle: -------------------------------------------------------------------------------- 1 | buildscript { 2 | 3 | repositories { 4 | google() 5 | jcenter() 6 | } 7 | dependencies { 8 | classpath 'com.android.tools.build:gradle:3.0.0' 9 | } 10 | } 11 | 12 | allprojects { 13 | repositories { 14 | google() 15 | jcenter() 16 | } 17 | } 18 | 19 | task clean(type: Delete) { 20 | delete rootProject.buildDir 21 | } 22 | -------------------------------------------------------------------------------- /Chapter12-Viper/gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leotyndale/AppArchitecture/e4920110c5d1c8c0e6179b03fc85e4b9d4ee162e/Chapter12-Viper/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /Chapter12-Viper/gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | #Mon Dec 03 11:31:29 CST 2018 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-4.1-all.zip 7 | -------------------------------------------------------------------------------- /Chapter12-Viper/main/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | -------------------------------------------------------------------------------- /Chapter12-Viper/main/proguardTest-rules.pro: -------------------------------------------------------------------------------- 1 | # Proguard rules that are applied to your test apk/code. 2 | -ignorewarnings 3 | 4 | -keepattributes *Annotation* 5 | 6 | -dontnote junit.framework.** 7 | -dontnote junit.runner.** 8 | 9 | -dontwarn android.test.** 10 | -dontwarn android.support.test.** 11 | -dontwarn org.junit.** 12 | -dontwarn org.hamcrest.** 13 | -dontwarn com.squareup.javawriter.JavaWriter 14 | # Uncomment this if you use Mockito 15 | -dontwarn org.mockito.** -------------------------------------------------------------------------------- /Chapter12-Viper/main/src/main/java/com/imuxuan/art/EnApplication.java: -------------------------------------------------------------------------------- 1 | package com.imuxuan.art; 2 | 3 | import android.app.Application; 4 | 5 | public class EnApplication extends Application{ 6 | 7 | private static EnApplication INSTANCE; 8 | 9 | @Override 10 | public void onCreate() { 11 | super.onCreate(); 12 | INSTANCE = this; 13 | } 14 | 15 | public static EnApplication get() { 16 | return INSTANCE; 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /Chapter12-Viper/main/src/main/java/com/imuxuan/art/base/BaseInteractor.java: -------------------------------------------------------------------------------- 1 | package com.imuxuan.art.base; 2 | 3 | public interface BaseInteractor { 4 | } 5 | -------------------------------------------------------------------------------- /Chapter12-Viper/main/src/main/java/com/imuxuan/art/base/BasePresenter.java: -------------------------------------------------------------------------------- 1 | package com.imuxuan.art.base; 2 | 3 | public interface BasePresenter { // Presenter基类 4 | 5 | void start(); // Presenter生命周期开始 6 | 7 | void destroy(); // Presenter生命周期结束 8 | 9 | } 10 | -------------------------------------------------------------------------------- /Chapter12-Viper/main/src/main/java/com/imuxuan/art/base/BaseRouter.java: -------------------------------------------------------------------------------- 1 | package com.imuxuan.art.base; 2 | 3 | public interface BaseRouter { 4 | } 5 | -------------------------------------------------------------------------------- /Chapter12-Viper/main/src/main/java/com/imuxuan/art/base/BaseView.java: -------------------------------------------------------------------------------- 1 | package com.imuxuan.art.base; 2 | 3 | public interface BaseView { // View基类 4 | 5 | void setPresenter(T presenter); // 传入Presenter 6 | 7 | } 8 | -------------------------------------------------------------------------------- /Chapter12-Viper/main/src/main/java/com/imuxuan/art/main/usecase/DiariesInteractor.java: -------------------------------------------------------------------------------- 1 | package com.imuxuan.art.main.usecase; 2 | 3 | import com.imuxuan.art.main.DiariesContract; 4 | 5 | public class DiariesInteractor implements DiariesContract.Interactor { 6 | 7 | private GetAllDiariesUseCase getAllDiariesUseCase; 8 | 9 | @Override 10 | public GetAllDiariesUseCase getAll() { 11 | if (getAllDiariesUseCase == null) { 12 | synchronized (this) { 13 | if (getAllDiariesUseCase == null) { 14 | getAllDiariesUseCase = new GetAllDiariesUseCase(); 15 | } 16 | } 17 | } 18 | return getAllDiariesUseCase; 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /Chapter12-Viper/main/src/main/java/com/imuxuan/art/source/DataCallback.java: -------------------------------------------------------------------------------- 1 | package com.imuxuan.art.source; 2 | 3 | /** 4 | * Created by Yunpeng Li on 2018/12/8. 5 | */ 6 | public interface DataCallback { // 数据操作回调 7 | 8 | void onSuccess(T data); // 通知成功 9 | 10 | void onError(); // 通知失败 11 | 12 | } 13 | -------------------------------------------------------------------------------- /Chapter12-Viper/main/src/main/java/com/imuxuan/art/source/DataSource.java: -------------------------------------------------------------------------------- 1 | package com.imuxuan.art.source; 2 | 3 | import android.support.annotation.NonNull; 4 | 5 | import java.util.List; 6 | 7 | 8 | public interface DataSource { 9 | 10 | // 获得所有数据T 11 | void getAll(@NonNull DataCallback> callback); 12 | 13 | // 获取某个数据T 14 | void get(@NonNull String id, @NonNull DataCallback callback); 15 | 16 | // 更新某个数据T 17 | void update(@NonNull T diary); 18 | 19 | // 清空所有数据T 20 | void clear(); 21 | 22 | // 删除某个数据T 23 | void delete(@NonNull String id); 24 | } 25 | -------------------------------------------------------------------------------- /Chapter12-Viper/main/src/main/java/com/imuxuan/art/util/ActivityUtils.java: -------------------------------------------------------------------------------- 1 | package com.imuxuan.art.util; 2 | 3 | import android.support.annotation.NonNull; 4 | import android.support.v4.app.Fragment; 5 | import android.support.v4.app.FragmentManager; 6 | import android.support.v4.app.FragmentTransaction; 7 | 8 | 9 | public class ActivityUtils { 10 | 11 | public static void addFragmentToActivity(@NonNull FragmentManager fragmentManager, 12 | @NonNull Fragment fragment, int frameId) { 13 | FragmentTransaction transaction = fragmentManager.beginTransaction(); // Fragment事务开始 14 | transaction.add(frameId, fragment); // 添加Fragment,frameId为fragment的id 15 | transaction.commit(); // 提交事务 16 | } 17 | 18 | } 19 | -------------------------------------------------------------------------------- /Chapter12-Viper/main/src/main/java/com/imuxuan/art/util/CollectionUtils.java: -------------------------------------------------------------------------------- 1 | package com.imuxuan.art.util; 2 | 3 | import java.util.Map; 4 | 5 | public class CollectionUtils { // 集合工具类 6 | 7 | public static boolean isEmpty(Map map) { 8 | return map == null || map.isEmpty(); 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /Chapter12-Viper/main/src/main/java/com/imuxuan/art/util/ThreadUtils.java: -------------------------------------------------------------------------------- 1 | package com.imuxuan.art.util; 2 | 3 | import android.os.Handler; 4 | import android.os.Looper; 5 | 6 | /** 7 | * Created by Yunpeng Li on 2019/1/25. 8 | */ 9 | public class ThreadUtils { // 线程操作工具类 10 | 11 | public static void runOnUI(Runnable runnable) { // 在主线程中执行Runnable 12 | if (runnable == null) { // runnable无效,返回 13 | return; 14 | } 15 | if (Looper.myLooper() != Looper.getMainLooper()) { // 判断是否是主线程 16 | new Handler(Looper.getMainLooper()).post(runnable); 17 | } else { 18 | runnable.run(); 19 | } 20 | } 21 | } -------------------------------------------------------------------------------- /Chapter12-Viper/main/src/main/res/drawable-xxhdpi/add.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leotyndale/AppArchitecture/e4920110c5d1c8c0e6179b03fc85e4b9d4ee162e/Chapter12-Viper/main/src/main/res/drawable-xxhdpi/add.png -------------------------------------------------------------------------------- /Chapter12-Viper/main/src/main/res/drawable-xxhdpi/yes.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leotyndale/AppArchitecture/e4920110c5d1c8c0e6179b03fc85e4b9d4ee162e/Chapter12-Viper/main/src/main/res/drawable-xxhdpi/yes.png -------------------------------------------------------------------------------- /Chapter12-Viper/main/src/main/res/layout/fragment_diaries.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /Chapter12-Viper/main/src/main/res/menu/menu_done.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 9 | -------------------------------------------------------------------------------- /Chapter12-Viper/main/src/main/res/menu/menu_write.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 9 | -------------------------------------------------------------------------------- /Chapter12-Viper/main/src/main/res/mipmap-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leotyndale/AppArchitecture/e4920110c5d1c8c0e6179b03fc85e4b9d4ee162e/Chapter12-Viper/main/src/main/res/mipmap-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /Chapter12-Viper/main/src/main/res/mipmap-ldpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leotyndale/AppArchitecture/e4920110c5d1c8c0e6179b03fc85e4b9d4ee162e/Chapter12-Viper/main/src/main/res/mipmap-ldpi/ic_launcher.png -------------------------------------------------------------------------------- /Chapter12-Viper/main/src/main/res/mipmap-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leotyndale/AppArchitecture/e4920110c5d1c8c0e6179b03fc85e4b9d4ee162e/Chapter12-Viper/main/src/main/res/mipmap-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /Chapter12-Viper/main/src/main/res/mipmap-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leotyndale/AppArchitecture/e4920110c5d1c8c0e6179b03fc85e4b9d4ee162e/Chapter12-Viper/main/src/main/res/mipmap-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /Chapter12-Viper/main/src/main/res/mipmap-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leotyndale/AppArchitecture/e4920110c5d1c8c0e6179b03fc85e4b9d4ee162e/Chapter12-Viper/main/src/main/res/mipmap-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /Chapter12-Viper/main/src/main/res/mipmap-xxxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leotyndale/AppArchitecture/e4920110c5d1c8c0e6179b03fc85e4b9d4ee162e/Chapter12-Viper/main/src/main/res/mipmap-xxxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /Chapter12-Viper/main/src/main/res/values/colors.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | #D50000 5 | #D50000 6 | #D50000 7 | 8 | 9 | -------------------------------------------------------------------------------- /Chapter12-Viper/main/src/main/res/values/dimens.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 16dp 4 | 16dp 5 | 16dp 6 | 7 | -------------------------------------------------------------------------------- /Chapter12-Viper/main/src/main/res/values/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 我的日记 4 | 5 | 写日记 6 | 修改日记 7 | 8 | Success! 9 | Error! 10 | 暂未开放! 11 | 12 | 完成 13 | 写日记 14 | 删除日记 15 | 修改日记 16 | 17 | 确定 18 | 取消 19 | 20 | 标题: 21 | 详情: 22 | 23 | -------------------------------------------------------------------------------- /Chapter12-Viper/settings.gradle: -------------------------------------------------------------------------------- 1 | include ':main' 2 | -------------------------------------------------------------------------------- /Chapter13-Fragmentless/.gitignore: -------------------------------------------------------------------------------- 1 | *.iml 2 | .gradle 3 | /local.properties 4 | /.idea/workspace.xml 5 | /.idea/libraries 6 | .DS_Store 7 | /build 8 | /captures 9 | .externalNativeBuild 10 | -------------------------------------------------------------------------------- /Chapter13-Fragmentless/.idea/checkstyle-idea.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 9 | 10 | -------------------------------------------------------------------------------- /Chapter13-Fragmentless/.idea/encodings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /Chapter13-Fragmentless/.idea/gradle.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 17 | 18 | -------------------------------------------------------------------------------- /Chapter13-Fragmentless/.idea/modules.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /Chapter13-Fragmentless/.idea/runConfigurations.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 11 | 12 | -------------------------------------------------------------------------------- /Chapter13-Fragmentless/.idea/vcs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /Chapter13-Fragmentless/build.gradle: -------------------------------------------------------------------------------- 1 | buildscript { 2 | 3 | repositories { 4 | google() 5 | jcenter() 6 | } 7 | dependencies { 8 | classpath 'com.android.tools.build:gradle:3.0.0' 9 | } 10 | } 11 | 12 | allprojects { 13 | repositories { 14 | google() 15 | jcenter() 16 | } 17 | } 18 | 19 | task clean(type: Delete) { 20 | delete rootProject.buildDir 21 | } 22 | -------------------------------------------------------------------------------- /Chapter13-Fragmentless/gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leotyndale/AppArchitecture/e4920110c5d1c8c0e6179b03fc85e4b9d4ee162e/Chapter13-Fragmentless/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /Chapter13-Fragmentless/gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | #Mon Dec 03 11:31:29 CST 2018 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-4.1-all.zip 7 | -------------------------------------------------------------------------------- /Chapter13-Fragmentless/main/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | -------------------------------------------------------------------------------- /Chapter13-Fragmentless/main/proguardTest-rules.pro: -------------------------------------------------------------------------------- 1 | # Proguard rules that are applied to your test apk/code. 2 | -ignorewarnings 3 | 4 | -keepattributes *Annotation* 5 | 6 | -dontnote junit.framework.** 7 | -dontnote junit.runner.** 8 | 9 | -dontwarn android.test.** 10 | -dontwarn android.support.test.** 11 | -dontwarn org.junit.** 12 | -dontwarn org.hamcrest.** 13 | -dontwarn com.squareup.javawriter.JavaWriter 14 | # Uncomment this if you use Mockito 15 | -dontwarn org.mockito.** -------------------------------------------------------------------------------- /Chapter13-Fragmentless/main/src/main/java/com/imuxuan/art/EnApplication.java: -------------------------------------------------------------------------------- 1 | package com.imuxuan.art; 2 | 3 | import android.app.Application; 4 | 5 | public class EnApplication extends Application{ 6 | 7 | private static EnApplication INSTANCE; 8 | 9 | @Override 10 | public void onCreate() { 11 | super.onCreate(); 12 | INSTANCE = this; 13 | } 14 | 15 | public static EnApplication get() { 16 | return INSTANCE; 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /Chapter13-Fragmentless/main/src/main/java/com/imuxuan/art/base/BasePresenter.java: -------------------------------------------------------------------------------- 1 | package com.imuxuan.art.base; 2 | 3 | public interface BasePresenter { // Presenter基类 4 | 5 | void start(); // Presenter生命周期开始 6 | 7 | void destroy(); // Presenter生命周期结束 8 | 9 | } 10 | -------------------------------------------------------------------------------- /Chapter13-Fragmentless/main/src/main/java/com/imuxuan/art/base/BaseView.java: -------------------------------------------------------------------------------- 1 | package com.imuxuan.art.base; 2 | 3 | public interface BaseView { // View基类 4 | 5 | void setPresenter(T presenter); // 传入Presenter 6 | 7 | } 8 | -------------------------------------------------------------------------------- /Chapter13-Fragmentless/main/src/main/java/com/imuxuan/art/source/DataCallback.java: -------------------------------------------------------------------------------- 1 | package com.imuxuan.art.source; 2 | 3 | /** 4 | * Created by Yunpeng Li on 2018/12/8. 5 | */ 6 | public interface DataCallback { // 数据操作回调 7 | 8 | void onSuccess(T data); // 通知成功 9 | 10 | void onError(); // 通知失败 11 | 12 | } 13 | -------------------------------------------------------------------------------- /Chapter13-Fragmentless/main/src/main/java/com/imuxuan/art/source/DataSource.java: -------------------------------------------------------------------------------- 1 | package com.imuxuan.art.source; 2 | 3 | import android.support.annotation.NonNull; 4 | 5 | import java.util.List; 6 | 7 | 8 | public interface DataSource { 9 | 10 | // 获得所有数据T 11 | void getAll(@NonNull DataCallback> callback); 12 | 13 | // 获取某个数据T 14 | void get(@NonNull String id, @NonNull DataCallback callback); 15 | 16 | // 更新某个数据T 17 | void update(@NonNull T diary); 18 | 19 | // 清空所有数据T 20 | void clear(); 21 | 22 | // 删除某个数据T 23 | void delete(@NonNull String id); 24 | } 25 | -------------------------------------------------------------------------------- /Chapter13-Fragmentless/main/src/main/java/com/imuxuan/art/util/ActivityUtils.java: -------------------------------------------------------------------------------- 1 | package com.imuxuan.art.util; 2 | 3 | import android.support.annotation.NonNull; 4 | import android.support.v4.app.Fragment; 5 | import android.support.v4.app.FragmentManager; 6 | import android.support.v4.app.FragmentTransaction; 7 | 8 | 9 | public class ActivityUtils { 10 | 11 | public static void addFragmentToActivity(@NonNull FragmentManager fragmentManager, 12 | @NonNull Fragment fragment, int frameId) { 13 | FragmentTransaction transaction = fragmentManager.beginTransaction(); // Fragment事务开始 14 | transaction.add(frameId, fragment); // 添加Fragment,frameId为fragment的id 15 | transaction.commit(); // 提交事务 16 | } 17 | 18 | } 19 | -------------------------------------------------------------------------------- /Chapter13-Fragmentless/main/src/main/java/com/imuxuan/art/util/CollectionUtils.java: -------------------------------------------------------------------------------- 1 | package com.imuxuan.art.util; 2 | 3 | import java.util.Map; 4 | 5 | public class CollectionUtils { // 集合工具类 6 | 7 | public static boolean isEmpty(Map map) { 8 | return map == null || map.isEmpty(); 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /Chapter13-Fragmentless/main/src/main/res/drawable-xxhdpi/add.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leotyndale/AppArchitecture/e4920110c5d1c8c0e6179b03fc85e4b9d4ee162e/Chapter13-Fragmentless/main/src/main/res/drawable-xxhdpi/add.png -------------------------------------------------------------------------------- /Chapter13-Fragmentless/main/src/main/res/drawable-xxhdpi/yes.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leotyndale/AppArchitecture/e4920110c5d1c8c0e6179b03fc85e4b9d4ee162e/Chapter13-Fragmentless/main/src/main/res/drawable-xxhdpi/yes.png -------------------------------------------------------------------------------- /Chapter13-Fragmentless/main/src/main/res/layout/fragment_diaries.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /Chapter13-Fragmentless/main/src/main/res/menu/menu_done.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 9 | -------------------------------------------------------------------------------- /Chapter13-Fragmentless/main/src/main/res/menu/menu_write.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 9 | -------------------------------------------------------------------------------- /Chapter13-Fragmentless/main/src/main/res/mipmap-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leotyndale/AppArchitecture/e4920110c5d1c8c0e6179b03fc85e4b9d4ee162e/Chapter13-Fragmentless/main/src/main/res/mipmap-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /Chapter13-Fragmentless/main/src/main/res/mipmap-ldpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leotyndale/AppArchitecture/e4920110c5d1c8c0e6179b03fc85e4b9d4ee162e/Chapter13-Fragmentless/main/src/main/res/mipmap-ldpi/ic_launcher.png -------------------------------------------------------------------------------- /Chapter13-Fragmentless/main/src/main/res/mipmap-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leotyndale/AppArchitecture/e4920110c5d1c8c0e6179b03fc85e4b9d4ee162e/Chapter13-Fragmentless/main/src/main/res/mipmap-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /Chapter13-Fragmentless/main/src/main/res/mipmap-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leotyndale/AppArchitecture/e4920110c5d1c8c0e6179b03fc85e4b9d4ee162e/Chapter13-Fragmentless/main/src/main/res/mipmap-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /Chapter13-Fragmentless/main/src/main/res/mipmap-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leotyndale/AppArchitecture/e4920110c5d1c8c0e6179b03fc85e4b9d4ee162e/Chapter13-Fragmentless/main/src/main/res/mipmap-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /Chapter13-Fragmentless/main/src/main/res/mipmap-xxxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leotyndale/AppArchitecture/e4920110c5d1c8c0e6179b03fc85e4b9d4ee162e/Chapter13-Fragmentless/main/src/main/res/mipmap-xxxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /Chapter13-Fragmentless/main/src/main/res/values/colors.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | #D50000 5 | #D50000 6 | #D50000 7 | 8 | 9 | -------------------------------------------------------------------------------- /Chapter13-Fragmentless/main/src/main/res/values/dimens.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 16dp 4 | 16dp 5 | 16dp 6 | 7 | -------------------------------------------------------------------------------- /Chapter13-Fragmentless/main/src/main/res/values/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 我的日记 4 | 5 | 写日记 6 | 修改日记 7 | 8 | Success! 9 | Error! 10 | 暂未开放! 11 | 12 | 完成 13 | 写日记 14 | 删除日记 15 | 修改日记 16 | 17 | 确定 18 | 取消 19 | 20 | 标题: 21 | 详情: 22 | 23 | -------------------------------------------------------------------------------- /Chapter13-Fragmentless/settings.gradle: -------------------------------------------------------------------------------- 1 | include ':main' 2 | -------------------------------------------------------------------------------- /Chapter14-Conductor/.gitignore: -------------------------------------------------------------------------------- 1 | *.iml 2 | .gradle 3 | /local.properties 4 | /.idea/workspace.xml 5 | /.idea/libraries 6 | .DS_Store 7 | /build 8 | /captures 9 | .externalNativeBuild 10 | -------------------------------------------------------------------------------- /Chapter14-Conductor/.idea/checkstyle-idea.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 9 | 10 | -------------------------------------------------------------------------------- /Chapter14-Conductor/.idea/encodings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /Chapter14-Conductor/.idea/modules.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /Chapter14-Conductor/.idea/runConfigurations.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 11 | 12 | -------------------------------------------------------------------------------- /Chapter14-Conductor/.idea/vcs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /Chapter14-Conductor/build.gradle: -------------------------------------------------------------------------------- 1 | buildscript { 2 | 3 | repositories { 4 | google() 5 | jcenter() 6 | } 7 | dependencies { 8 | classpath 'com.android.tools.build:gradle:3.0.0' 9 | } 10 | } 11 | 12 | allprojects { 13 | repositories { 14 | google() 15 | jcenter() 16 | } 17 | } 18 | 19 | task clean(type: Delete) { 20 | delete rootProject.buildDir 21 | } 22 | -------------------------------------------------------------------------------- /Chapter14-Conductor/gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leotyndale/AppArchitecture/e4920110c5d1c8c0e6179b03fc85e4b9d4ee162e/Chapter14-Conductor/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /Chapter14-Conductor/gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | #Mon Dec 03 11:31:29 CST 2018 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-4.1-all.zip 7 | -------------------------------------------------------------------------------- /Chapter14-Conductor/main/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | -------------------------------------------------------------------------------- /Chapter14-Conductor/main/proguardTest-rules.pro: -------------------------------------------------------------------------------- 1 | # Proguard rules that are applied to your test apk/code. 2 | -ignorewarnings 3 | 4 | -keepattributes *Annotation* 5 | 6 | -dontnote junit.framework.** 7 | -dontnote junit.runner.** 8 | 9 | -dontwarn android.test.** 10 | -dontwarn android.support.test.** 11 | -dontwarn org.junit.** 12 | -dontwarn org.hamcrest.** 13 | -dontwarn com.squareup.javawriter.JavaWriter 14 | # Uncomment this if you use Mockito 15 | -dontwarn org.mockito.** -------------------------------------------------------------------------------- /Chapter14-Conductor/main/src/main/java/com/imuxuan/art/EnApplication.java: -------------------------------------------------------------------------------- 1 | package com.imuxuan.art; 2 | 3 | import android.app.Application; 4 | 5 | public class EnApplication extends Application{ 6 | 7 | private static EnApplication INSTANCE; 8 | 9 | @Override 10 | public void onCreate() { 11 | super.onCreate(); 12 | INSTANCE = this; 13 | } 14 | 15 | public static EnApplication get() { 16 | return INSTANCE; 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /Chapter14-Conductor/main/src/main/java/com/imuxuan/art/base/BaseController.java: -------------------------------------------------------------------------------- 1 | package com.imuxuan.art.base; 2 | 3 | import android.view.View; 4 | 5 | import com.bluelinelabs.conductor.Controller; 6 | 7 | public abstract class BaseController extends Controller { 8 | 9 | private boolean isActive = false; 10 | 11 | 12 | @Override 13 | protected void onDestroyView(View view) { 14 | super.onDestroyView(view); 15 | setActive(false); 16 | } 17 | 18 | protected void setActive(boolean isActive) { 19 | this.isActive = isActive; 20 | } 21 | 22 | public boolean isActive() { 23 | return isActive; 24 | } 25 | 26 | } 27 | -------------------------------------------------------------------------------- /Chapter14-Conductor/main/src/main/java/com/imuxuan/art/base/BasePresenter.java: -------------------------------------------------------------------------------- 1 | package com.imuxuan.art.base; 2 | 3 | public interface BasePresenter { // Presenter基类 4 | 5 | void start(); // Presenter生命周期开始 6 | 7 | void destroy(); // Presenter生命周期结束 8 | 9 | } 10 | -------------------------------------------------------------------------------- /Chapter14-Conductor/main/src/main/java/com/imuxuan/art/base/BaseView.java: -------------------------------------------------------------------------------- 1 | package com.imuxuan.art.base; 2 | 3 | public interface BaseView { // View基类 4 | 5 | void setPresenter(T presenter); // 传入Presenter 6 | 7 | } 8 | -------------------------------------------------------------------------------- /Chapter14-Conductor/main/src/main/java/com/imuxuan/art/source/DataCallback.java: -------------------------------------------------------------------------------- 1 | package com.imuxuan.art.source; 2 | 3 | /** 4 | * Created by Yunpeng Li on 2018/12/8. 5 | */ 6 | public interface DataCallback { // 数据操作回调 7 | 8 | void onSuccess(T data); // 通知成功 9 | 10 | void onError(); // 通知失败 11 | 12 | } 13 | -------------------------------------------------------------------------------- /Chapter14-Conductor/main/src/main/java/com/imuxuan/art/source/DataSource.java: -------------------------------------------------------------------------------- 1 | package com.imuxuan.art.source; 2 | 3 | import android.support.annotation.NonNull; 4 | 5 | import java.util.List; 6 | 7 | 8 | public interface DataSource { 9 | 10 | // 获得所有数据T 11 | void getAll(@NonNull DataCallback> callback); 12 | 13 | // 获取某个数据T 14 | void get(@NonNull String id, @NonNull DataCallback callback); 15 | 16 | // 更新某个数据T 17 | void update(@NonNull T diary); 18 | 19 | // 清空所有数据T 20 | void clear(); 21 | 22 | // 删除某个数据T 23 | void delete(@NonNull String id); 24 | } 25 | -------------------------------------------------------------------------------- /Chapter14-Conductor/main/src/main/java/com/imuxuan/art/util/ActivityUtils.java: -------------------------------------------------------------------------------- 1 | package com.imuxuan.art.util; 2 | 3 | import android.support.annotation.NonNull; 4 | import android.support.v4.app.Fragment; 5 | import android.support.v4.app.FragmentManager; 6 | import android.support.v4.app.FragmentTransaction; 7 | 8 | 9 | public class ActivityUtils { 10 | 11 | public static void addFragmentToActivity(@NonNull FragmentManager fragmentManager, 12 | @NonNull Fragment fragment, int frameId) { 13 | FragmentTransaction transaction = fragmentManager.beginTransaction(); // Fragment事务开始 14 | transaction.add(frameId, fragment); // 添加Fragment,frameId为fragment的id 15 | transaction.commit(); // 提交事务 16 | } 17 | 18 | } 19 | -------------------------------------------------------------------------------- /Chapter14-Conductor/main/src/main/java/com/imuxuan/art/util/CollectionUtils.java: -------------------------------------------------------------------------------- 1 | package com.imuxuan.art.util; 2 | 3 | import java.util.Map; 4 | 5 | public class CollectionUtils { // 集合工具类 6 | 7 | public static boolean isEmpty(Map map) { 8 | return map == null || map.isEmpty(); 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /Chapter14-Conductor/main/src/main/res/drawable-xxhdpi/add.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leotyndale/AppArchitecture/e4920110c5d1c8c0e6179b03fc85e4b9d4ee162e/Chapter14-Conductor/main/src/main/res/drawable-xxhdpi/add.png -------------------------------------------------------------------------------- /Chapter14-Conductor/main/src/main/res/drawable-xxhdpi/yes.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leotyndale/AppArchitecture/e4920110c5d1c8c0e6179b03fc85e4b9d4ee162e/Chapter14-Conductor/main/src/main/res/drawable-xxhdpi/yes.png -------------------------------------------------------------------------------- /Chapter14-Conductor/main/src/main/res/layout/fragment_diaries.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /Chapter14-Conductor/main/src/main/res/menu/menu_done.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 9 | -------------------------------------------------------------------------------- /Chapter14-Conductor/main/src/main/res/menu/menu_write.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 9 | -------------------------------------------------------------------------------- /Chapter14-Conductor/main/src/main/res/mipmap-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leotyndale/AppArchitecture/e4920110c5d1c8c0e6179b03fc85e4b9d4ee162e/Chapter14-Conductor/main/src/main/res/mipmap-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /Chapter14-Conductor/main/src/main/res/mipmap-ldpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leotyndale/AppArchitecture/e4920110c5d1c8c0e6179b03fc85e4b9d4ee162e/Chapter14-Conductor/main/src/main/res/mipmap-ldpi/ic_launcher.png -------------------------------------------------------------------------------- /Chapter14-Conductor/main/src/main/res/mipmap-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leotyndale/AppArchitecture/e4920110c5d1c8c0e6179b03fc85e4b9d4ee162e/Chapter14-Conductor/main/src/main/res/mipmap-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /Chapter14-Conductor/main/src/main/res/mipmap-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leotyndale/AppArchitecture/e4920110c5d1c8c0e6179b03fc85e4b9d4ee162e/Chapter14-Conductor/main/src/main/res/mipmap-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /Chapter14-Conductor/main/src/main/res/mipmap-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leotyndale/AppArchitecture/e4920110c5d1c8c0e6179b03fc85e4b9d4ee162e/Chapter14-Conductor/main/src/main/res/mipmap-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /Chapter14-Conductor/main/src/main/res/mipmap-xxxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leotyndale/AppArchitecture/e4920110c5d1c8c0e6179b03fc85e4b9d4ee162e/Chapter14-Conductor/main/src/main/res/mipmap-xxxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /Chapter14-Conductor/main/src/main/res/values/colors.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | #D50000 5 | #D50000 6 | #D50000 7 | 8 | 9 | -------------------------------------------------------------------------------- /Chapter14-Conductor/main/src/main/res/values/dimens.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 16dp 4 | 16dp 5 | 16dp 6 | 7 | -------------------------------------------------------------------------------- /Chapter14-Conductor/main/src/main/res/values/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 我的日记 4 | 5 | 写日记 6 | 修改日记 7 | 8 | Success! 9 | Error! 10 | 暂未开放! 11 | 12 | 完成 13 | 写日记 14 | 删除日记 15 | 修改日记 16 | 17 | 确定 18 | 取消 19 | 20 | 标题: 21 | 详情: 22 | 23 | -------------------------------------------------------------------------------- /Chapter14-Conductor/settings.gradle: -------------------------------------------------------------------------------- 1 | include ':main' 2 | -------------------------------------------------------------------------------- /Chapter15-Plugin-Framework/.gitignore: -------------------------------------------------------------------------------- 1 | *.iml 2 | .gradle 3 | /local.properties 4 | /.idea/workspace.xml 5 | /.idea/libraries 6 | .DS_Store 7 | /build 8 | /captures 9 | .externalNativeBuild 10 | -------------------------------------------------------------------------------- /Chapter15-Plugin-Framework/.idea/checkstyle-idea.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 9 | 10 | -------------------------------------------------------------------------------- /Chapter15-Plugin-Framework/.idea/gradle.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 14 | 15 | -------------------------------------------------------------------------------- /Chapter15-Plugin-Framework/.idea/markdown-navigator/profiles_settings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /Chapter15-Plugin-Framework/.idea/runConfigurations.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 11 | 12 | -------------------------------------------------------------------------------- /Chapter15-Plugin-Framework/.idea/vcs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /Chapter15-Plugin-Framework/app/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | -------------------------------------------------------------------------------- /Chapter15-Plugin-Framework/app/build.gradle: -------------------------------------------------------------------------------- 1 | apply plugin: 'com.android.application' 2 | 3 | apply from: "../build_config/base.gradle" 4 | 5 | dependencies { 6 | compile project(':en_res') 7 | } -------------------------------------------------------------------------------- /Chapter15-Plugin-Framework/app/proguardTest-rules.pro: -------------------------------------------------------------------------------- 1 | # Proguard rules that are applied to your test apk/code. 2 | -ignorewarnings 3 | 4 | -keepattributes *Annotation* 5 | 6 | -dontnote junit.framework.** 7 | -dontnote junit.runner.** 8 | 9 | -dontwarn android.test.** 10 | -dontwarn android.support.test.** 11 | -dontwarn org.junit.** 12 | -dontwarn org.hamcrest.** 13 | -dontwarn com.squareup.javawriter.JavaWriter 14 | # Uncomment this if you use Mockito 15 | -dontwarn org.mockito.** -------------------------------------------------------------------------------- /Chapter15-Plugin-Framework/app/smallLibs/armeabi/libcom_imuxuan_art_common.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leotyndale/AppArchitecture/e4920110c5d1c8c0e6179b03fc85e4b9d4ee162e/Chapter15-Plugin-Framework/app/smallLibs/armeabi/libcom_imuxuan_art_common.so -------------------------------------------------------------------------------- /Chapter15-Plugin-Framework/app/smallLibs/armeabi/libcom_imuxuan_art_diary_edit.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leotyndale/AppArchitecture/e4920110c5d1c8c0e6179b03fc85e4b9d4ee162e/Chapter15-Plugin-Framework/app/smallLibs/armeabi/libcom_imuxuan_art_diary_edit.so -------------------------------------------------------------------------------- /Chapter15-Plugin-Framework/app/smallLibs/armeabi/libcom_imuxuan_art_diary_list.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leotyndale/AppArchitecture/e4920110c5d1c8c0e6179b03fc85e4b9d4ee162e/Chapter15-Plugin-Framework/app/smallLibs/armeabi/libcom_imuxuan_art_diary_list.so -------------------------------------------------------------------------------- /Chapter15-Plugin-Framework/app/src/main/assets/bundle.json: -------------------------------------------------------------------------------- 1 | { 2 | "version": "1.0.0", 3 | "bundles": [ 4 | { 5 | "uri": "main", 6 | "pkg": "com.imuxuan.art" 7 | }, 8 | { 9 | "uri": "diary_list", 10 | "pkg": "com.imuxuan.art.diary.list", 11 | "type": "app" 12 | }, 13 | { 14 | "uri": "diary_edit", 15 | "pkg": "com.imuxuan.art.diary.edit", 16 | "type": "app" 17 | }, 18 | { 19 | "uri": "en_common", 20 | "pkg": "com.imuxuan.art.common", 21 | "type": "lib" 22 | } 23 | ] 24 | } -------------------------------------------------------------------------------- /Chapter15-Plugin-Framework/app/src/main/java/com.imuxuan.art/EnApplication.java: -------------------------------------------------------------------------------- 1 | package com.imuxuan.art; 2 | 3 | import android.app.Application; 4 | 5 | import net.wequick.small.Small; 6 | 7 | public class EnApplication extends Application { 8 | 9 | private static EnApplication INSTANCE; 10 | 11 | public EnApplication() { 12 | Small.preSetUp(this); 13 | } 14 | 15 | @Override 16 | public void onCreate() { 17 | super.onCreate(); 18 | INSTANCE = this; 19 | } 20 | 21 | public static EnApplication get() { 22 | return INSTANCE; 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /Chapter15-Plugin-Framework/app/src/main/java/com.imuxuan.art/LaunchActivity.java: -------------------------------------------------------------------------------- 1 | package com.imuxuan.art; 2 | 3 | import android.support.v7.app.AppCompatActivity; 4 | 5 | import net.wequick.small.Small; 6 | 7 | /** 8 | * Created by Yunpeng Li on 2019/2/12. 9 | */ 10 | public class LaunchActivity extends AppCompatActivity { 11 | 12 | @Override 13 | protected void onStart() { 14 | super.onStart(); 15 | Small.setUp(LaunchActivity.this, new Small.OnCompleteListener() { 16 | @Override 17 | public void onComplete() { 18 | Small.openUri("diary_list", LaunchActivity.this); // 跳转到日记列表页面 19 | finish(); // 销毁当前页面 20 | } 21 | }); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /Chapter15-Plugin-Framework/build.gradle: -------------------------------------------------------------------------------- 1 | def libs = rootProject.ext.libs 2 | 3 | buildscript { 4 | apply from: "build_config/version.gradle" 5 | 6 | repositories { 7 | google() 8 | jcenter() 9 | } 10 | dependencies { 11 | classpath "com.android.tools.build:gradle:${libs.gradle}" 12 | classpath "net.wequick.tools.build:gradle-small:${libs.small}" 13 | } 14 | } 15 | 16 | allprojects { 17 | repositories { 18 | google() 19 | jcenter() 20 | } 21 | } 22 | 23 | task clean(type: Delete) { 24 | delete rootProject.buildDir 25 | } 26 | 27 | apply plugin: 'net.wequick.small' 28 | 29 | small { 30 | bundles 'app', ['diary_list', 'diary_edit'] 31 | bundles 'lib', 'en_common' 32 | } -------------------------------------------------------------------------------- /Chapter15-Plugin-Framework/build_config/common.gradle: -------------------------------------------------------------------------------- 1 | apply plugin: 'com.android.application' 2 | apply from: "../build_config/base.gradle" 3 | 4 | dependencies { 5 | compile project(':en_common') 6 | } -------------------------------------------------------------------------------- /Chapter15-Plugin-Framework/build_config/version.gradle: -------------------------------------------------------------------------------- 1 | ext { 2 | androidConfig = [ 3 | compileSdkVersion : 26, 4 | buildToolsVersion : '26.0.1', 5 | minSdkVersion : 14, 6 | targetSdkVersion : 28, 7 | versionCode : 1, 8 | versionName : '1.0' 9 | ] 10 | 11 | libs = [ 12 | gradle : '2.3.0', 13 | supportlibs : '26.1.0', 14 | gson : '2.8.5', 15 | arouterApi : '1.4.1', 16 | arouterCompiler : '1.2.2', 17 | small : '1.5.0-beta2' 18 | ] 19 | } -------------------------------------------------------------------------------- /Chapter15-Plugin-Framework/diary_edit/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | -------------------------------------------------------------------------------- /Chapter15-Plugin-Framework/diary_edit/build.gradle: -------------------------------------------------------------------------------- 1 | apply from: "../build_config/common.gradle" -------------------------------------------------------------------------------- /Chapter15-Plugin-Framework/diary_edit/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 4 | 5 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /Chapter15-Plugin-Framework/diary_edit/src/main/res/drawable-xxhdpi/yes.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leotyndale/AppArchitecture/e4920110c5d1c8c0e6179b03fc85e4b9d4ee162e/Chapter15-Plugin-Framework/diary_edit/src/main/res/drawable-xxhdpi/yes.png -------------------------------------------------------------------------------- /Chapter15-Plugin-Framework/diary_edit/src/main/res/menu/menu_done.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 9 | -------------------------------------------------------------------------------- /Chapter15-Plugin-Framework/diary_list/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | -------------------------------------------------------------------------------- /Chapter15-Plugin-Framework/diary_list/build.gradle: -------------------------------------------------------------------------------- 1 | apply from: "../build_config/common.gradle" -------------------------------------------------------------------------------- /Chapter15-Plugin-Framework/diary_list/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 4 | 5 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /Chapter15-Plugin-Framework/diary_list/src/main/res/drawable-xxhdpi/add.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leotyndale/AppArchitecture/e4920110c5d1c8c0e6179b03fc85e4b9d4ee162e/Chapter15-Plugin-Framework/diary_list/src/main/res/drawable-xxhdpi/add.png -------------------------------------------------------------------------------- /Chapter15-Plugin-Framework/diary_list/src/main/res/layout/fragment_diaries.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /Chapter15-Plugin-Framework/diary_list/src/main/res/menu/menu_write.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 9 | -------------------------------------------------------------------------------- /Chapter15-Plugin-Framework/en_base/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | -------------------------------------------------------------------------------- /Chapter15-Plugin-Framework/en_base/build.gradle: -------------------------------------------------------------------------------- 1 | apply plugin: 'com.android.library' 2 | apply from: "../build_config/base.gradle" 3 | 4 | dependencies { 5 | compile "com.android.support:appcompat-v7:${libs.supportlibs}" 6 | compile "com.android.support:design:${libs.supportlibs}" 7 | compile "com.google.code.gson:gson:${libs.gson}" 8 | } 9 | -------------------------------------------------------------------------------- /Chapter15-Plugin-Framework/en_base/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 3 | -------------------------------------------------------------------------------- /Chapter15-Plugin-Framework/en_base/src/main/java/com/imuxuan/art/base/base/BasePresenter.java: -------------------------------------------------------------------------------- 1 | package com.imuxuan.art.base.base; 2 | 3 | public interface BasePresenter { // Presenter基类 4 | 5 | void start(); // Presenter生命周期开始 6 | 7 | void destroy(); // Presenter生命周期结束 8 | 9 | } 10 | -------------------------------------------------------------------------------- /Chapter15-Plugin-Framework/en_base/src/main/java/com/imuxuan/art/base/base/BaseView.java: -------------------------------------------------------------------------------- 1 | package com.imuxuan.art.base.base; 2 | 3 | public interface BaseView { // View基类 4 | 5 | void setPresenter(T presenter); // 传入Presenter 6 | 7 | } 8 | -------------------------------------------------------------------------------- /Chapter15-Plugin-Framework/en_base/src/main/java/com/imuxuan/art/base/util/ActivityUtils.java: -------------------------------------------------------------------------------- 1 | package com.imuxuan.art.base.util; 2 | 3 | import android.support.annotation.NonNull; 4 | import android.support.v4.app.Fragment; 5 | import android.support.v4.app.FragmentManager; 6 | import android.support.v4.app.FragmentTransaction; 7 | 8 | 9 | public class ActivityUtils { 10 | 11 | public static void addFragmentToActivity(@NonNull FragmentManager fragmentManager, 12 | @NonNull Fragment fragment, int frameId) { 13 | FragmentTransaction transaction = fragmentManager.beginTransaction(); // Fragment事务开始 14 | transaction.add(frameId, fragment); // 添加Fragment,frameId为fragment的id 15 | transaction.commit(); // 提交事务 16 | } 17 | 18 | } 19 | -------------------------------------------------------------------------------- /Chapter15-Plugin-Framework/en_base/src/main/java/com/imuxuan/art/base/util/CollectionUtils.java: -------------------------------------------------------------------------------- 1 | package com.imuxuan.art.base.util; 2 | 3 | import java.util.Map; 4 | 5 | public class CollectionUtils { // 集合工具类 6 | 7 | public static boolean isEmpty(Map map) { 8 | return map == null || map.isEmpty(); 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /Chapter15-Plugin-Framework/en_common/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | -------------------------------------------------------------------------------- /Chapter15-Plugin-Framework/en_common/build.gradle: -------------------------------------------------------------------------------- 1 | apply plugin: 'com.android.library' 2 | apply from: "../build_config/base.gradle" 3 | 4 | dependencies { 5 | compile project(':en_res') 6 | } 7 | -------------------------------------------------------------------------------- /Chapter15-Plugin-Framework/en_common/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /Chapter15-Plugin-Framework/en_common/src/main/java/com/imuxuan/art/common/source/DataCallback.java: -------------------------------------------------------------------------------- 1 | package com.imuxuan.art.common.source; 2 | 3 | /** 4 | * Created by Yunpeng Li on 2018/12/8. 5 | */ 6 | public interface DataCallback { // 数据操作回调 7 | 8 | void onSuccess(T data); // 通知成功 9 | 10 | void onError(); // 通知失败 11 | 12 | } 13 | -------------------------------------------------------------------------------- /Chapter15-Plugin-Framework/en_common/src/main/java/com/imuxuan/art/common/source/DataSource.java: -------------------------------------------------------------------------------- 1 | package com.imuxuan.art.common.source; 2 | 3 | import android.support.annotation.NonNull; 4 | 5 | import java.util.List; 6 | 7 | 8 | public interface DataSource { 9 | 10 | // 获得所有数据T 11 | void getAll(@NonNull DataCallback> callback); 12 | 13 | // 获取某个数据T 14 | void get(@NonNull String id, @NonNull DataCallback callback); 15 | 16 | // 更新某个数据T 17 | void update(@NonNull T diary); 18 | 19 | // 清空所有数据T 20 | void clear(); 21 | 22 | // 删除某个数据T 23 | void delete(@NonNull String id); 24 | } 25 | -------------------------------------------------------------------------------- /Chapter15-Plugin-Framework/en_res/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | -------------------------------------------------------------------------------- /Chapter15-Plugin-Framework/en_res/build.gradle: -------------------------------------------------------------------------------- 1 | apply plugin: 'com.android.library' 2 | apply from: "../build_config/base.gradle" 3 | 4 | dependencies { 5 | compile project(':en_base') 6 | } 7 | -------------------------------------------------------------------------------- /Chapter15-Plugin-Framework/en_res/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 3 | -------------------------------------------------------------------------------- /Chapter15-Plugin-Framework/en_res/src/main/res/mipmap-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leotyndale/AppArchitecture/e4920110c5d1c8c0e6179b03fc85e4b9d4ee162e/Chapter15-Plugin-Framework/en_res/src/main/res/mipmap-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /Chapter15-Plugin-Framework/en_res/src/main/res/mipmap-ldpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leotyndale/AppArchitecture/e4920110c5d1c8c0e6179b03fc85e4b9d4ee162e/Chapter15-Plugin-Framework/en_res/src/main/res/mipmap-ldpi/ic_launcher.png -------------------------------------------------------------------------------- /Chapter15-Plugin-Framework/en_res/src/main/res/mipmap-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leotyndale/AppArchitecture/e4920110c5d1c8c0e6179b03fc85e4b9d4ee162e/Chapter15-Plugin-Framework/en_res/src/main/res/mipmap-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /Chapter15-Plugin-Framework/en_res/src/main/res/mipmap-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leotyndale/AppArchitecture/e4920110c5d1c8c0e6179b03fc85e4b9d4ee162e/Chapter15-Plugin-Framework/en_res/src/main/res/mipmap-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /Chapter15-Plugin-Framework/en_res/src/main/res/mipmap-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leotyndale/AppArchitecture/e4920110c5d1c8c0e6179b03fc85e4b9d4ee162e/Chapter15-Plugin-Framework/en_res/src/main/res/mipmap-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /Chapter15-Plugin-Framework/en_res/src/main/res/mipmap-xxxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leotyndale/AppArchitecture/e4920110c5d1c8c0e6179b03fc85e4b9d4ee162e/Chapter15-Plugin-Framework/en_res/src/main/res/mipmap-xxxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /Chapter15-Plugin-Framework/en_res/src/main/res/values/colors.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | #D50000 5 | #D50000 6 | #D50000 7 | 8 | 9 | -------------------------------------------------------------------------------- /Chapter15-Plugin-Framework/en_res/src/main/res/values/dimens.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 16dp 4 | 16dp 5 | 16dp 6 | 7 | -------------------------------------------------------------------------------- /Chapter15-Plugin-Framework/gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leotyndale/AppArchitecture/e4920110c5d1c8c0e6179b03fc85e4b9d4ee162e/Chapter15-Plugin-Framework/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /Chapter15-Plugin-Framework/gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | #Mon Dec 03 11:31:29 CST 2018 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-4.1-all.zip 7 | -------------------------------------------------------------------------------- /Chapter15-Plugin-Framework/settings.gradle: -------------------------------------------------------------------------------- 1 | include ':app', ':en_base', ':en_common', ':en_res', ':diary_list', ':diary_edit' 2 | -------------------------------------------------------------------------------- /Chapter3-MVC/.gitignore: -------------------------------------------------------------------------------- 1 | *.iml 2 | .gradle 3 | /local.properties 4 | /.idea/workspace.xml 5 | /.idea/libraries 6 | .DS_Store 7 | /build 8 | /captures 9 | .externalNativeBuild 10 | -------------------------------------------------------------------------------- /Chapter3-MVC/.idea/caches/build_file_checksums.ser: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leotyndale/AppArchitecture/e4920110c5d1c8c0e6179b03fc85e4b9d4ee162e/Chapter3-MVC/.idea/caches/build_file_checksums.ser -------------------------------------------------------------------------------- /Chapter3-MVC/.idea/checkstyle-idea.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 9 | 10 | -------------------------------------------------------------------------------- /Chapter3-MVC/.idea/encodings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /Chapter3-MVC/.idea/runConfigurations.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 11 | 12 | -------------------------------------------------------------------------------- /Chapter3-MVC/.idea/vcs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /Chapter3-MVC/build.gradle: -------------------------------------------------------------------------------- 1 | buildscript { 2 | 3 | repositories { 4 | google() 5 | jcenter() 6 | } 7 | dependencies { 8 | classpath 'com.android.tools.build:gradle:3.0.0' 9 | } 10 | } 11 | 12 | allprojects { 13 | repositories { 14 | google() 15 | jcenter() 16 | } 17 | } 18 | 19 | task clean(type: Delete) { 20 | delete rootProject.buildDir 21 | } 22 | -------------------------------------------------------------------------------- /Chapter3-MVC/gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leotyndale/AppArchitecture/e4920110c5d1c8c0e6179b03fc85e4b9d4ee162e/Chapter3-MVC/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /Chapter3-MVC/gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | #Mon Dec 03 11:31:29 CST 2018 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-4.1-all.zip 7 | -------------------------------------------------------------------------------- /Chapter3-MVC/mvc-active/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | -------------------------------------------------------------------------------- /Chapter3-MVC/mvc-active/build.gradle: -------------------------------------------------------------------------------- 1 | apply plugin: 'com.android.application' 2 | 3 | android { 4 | compileSdkVersion 26 5 | buildToolsVersion '26.0.2' 6 | 7 | defaultConfig { 8 | applicationId "com.imuxuan.art.mvc" 9 | minSdkVersion 14 10 | targetSdkVersion 26 11 | versionCode 1 12 | versionName "1.0" 13 | } 14 | 15 | buildTypes { 16 | release { 17 | minifyEnabled false 18 | proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 19 | } 20 | } 21 | 22 | } 23 | 24 | dependencies { 25 | compile "com.android.support:appcompat-v7:26.1.0" 26 | compile "com.android.support:design:26.1.0" 27 | implementation 'com.google.code.gson:gson:2.8.5' 28 | } 29 | -------------------------------------------------------------------------------- /Chapter3-MVC/mvc-active/proguardTest-rules.pro: -------------------------------------------------------------------------------- 1 | # Proguard rules that are applied to your test apk/code. 2 | -ignorewarnings 3 | 4 | -keepattributes *Annotation* 5 | 6 | -dontnote junit.framework.** 7 | -dontnote junit.runner.** 8 | 9 | -dontwarn android.test.** 10 | -dontwarn android.support.test.** 11 | -dontwarn org.junit.** 12 | -dontwarn org.hamcrest.** 13 | -dontwarn com.squareup.javawriter.JavaWriter 14 | # Uncomment this if you use Mockito 15 | -dontwarn org.mockito.** -------------------------------------------------------------------------------- /Chapter3-MVC/mvc-active/src/main/java/com/imuxuan/art/mvc/EnApplication.java: -------------------------------------------------------------------------------- 1 | package com.imuxuan.art.mvc; 2 | 3 | import android.app.Application; 4 | 5 | public class EnApplication extends Application{ 6 | 7 | private static EnApplication INSTANCE; 8 | 9 | @Override 10 | public void onCreate() { 11 | super.onCreate(); 12 | INSTANCE = this; 13 | } 14 | 15 | public static EnApplication get() { 16 | return INSTANCE; 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /Chapter3-MVC/mvc-active/src/main/java/com/imuxuan/art/mvc/observer/Observer.java: -------------------------------------------------------------------------------- 1 | package com.imuxuan.art.mvc.observer; 2 | 3 | /** 4 | * Created by Yunpeng Li on 2018/12/10. 5 | */ 6 | public interface Observer { 7 | 8 | void update(T data); 9 | 10 | } 11 | -------------------------------------------------------------------------------- /Chapter3-MVC/mvc-active/src/main/java/com/imuxuan/art/mvc/source/DataCallback.java: -------------------------------------------------------------------------------- 1 | package com.imuxuan.art.mvc.source; 2 | 3 | /** 4 | * Created by Yunpeng Li on 2018/12/8. 5 | */ 6 | public interface DataCallback { 7 | 8 | void onSuccess(T data); 9 | 10 | void onError(); 11 | 12 | } 13 | -------------------------------------------------------------------------------- /Chapter3-MVC/mvc-active/src/main/java/com/imuxuan/art/mvc/source/DataSource.java: -------------------------------------------------------------------------------- 1 | package com.imuxuan.art.mvc.source; 2 | 3 | import android.support.annotation.NonNull; 4 | 5 | import java.util.List; 6 | 7 | 8 | public interface DataSource { 9 | 10 | void getAll(@NonNull DataCallback> callback); 11 | 12 | void get(@NonNull String id, @NonNull DataCallback callback); 13 | 14 | void update(@NonNull T diary); 15 | 16 | void clear(); 17 | 18 | void delete(@NonNull String id); 19 | } 20 | -------------------------------------------------------------------------------- /Chapter3-MVC/mvc-active/src/main/java/com/imuxuan/art/mvc/util/ActivityUtils.java: -------------------------------------------------------------------------------- 1 | package com.imuxuan.art.mvc.util; 2 | 3 | import android.support.annotation.NonNull; 4 | import android.support.v4.app.Fragment; 5 | import android.support.v4.app.FragmentManager; 6 | import android.support.v4.app.FragmentTransaction; 7 | 8 | 9 | public class ActivityUtils { 10 | 11 | public static void addFragmentToActivity(@NonNull FragmentManager fragmentManager, 12 | @NonNull Fragment fragment, int frameId) { 13 | FragmentTransaction transaction = fragmentManager.beginTransaction(); 14 | transaction.add(frameId, fragment); 15 | transaction.commit(); 16 | } 17 | 18 | } 19 | -------------------------------------------------------------------------------- /Chapter3-MVC/mvc-active/src/main/java/com/imuxuan/art/mvc/util/CollectionUtils.java: -------------------------------------------------------------------------------- 1 | package com.imuxuan.art.mvc.util; 2 | 3 | import java.util.Map; 4 | 5 | /** 6 | * Created by Yunpeng Li on 2018/12/8. 7 | */ 8 | public class CollectionUtils { 9 | 10 | public static boolean isEmpty(Map map) { 11 | return map == null || map.isEmpty(); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /Chapter3-MVC/mvc-active/src/main/java/com/imuxuan/art/mvc/util/GsonUtils.java: -------------------------------------------------------------------------------- 1 | package com.imuxuan.art.mvc.util; 2 | 3 | import com.google.gson.Gson; 4 | import com.google.gson.GsonBuilder; 5 | 6 | import java.lang.reflect.Type; 7 | 8 | public final class GsonUtils { 9 | 10 | private static final Gson GSON = createGson(); 11 | 12 | public static String toJson(final Object object) { 13 | return GSON.toJson(object); 14 | } 15 | 16 | public static T fromJson(final String json, final Type type) { 17 | return GSON.fromJson(json, type); 18 | } 19 | 20 | private static Gson createGson() { 21 | final GsonBuilder builder = new GsonBuilder(); 22 | builder.serializeNulls(); 23 | return builder.create(); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /Chapter3-MVC/mvc-active/src/main/res/drawable-xxhdpi/add.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leotyndale/AppArchitecture/e4920110c5d1c8c0e6179b03fc85e4b9d4ee162e/Chapter3-MVC/mvc-active/src/main/res/drawable-xxhdpi/add.png -------------------------------------------------------------------------------- /Chapter3-MVC/mvc-active/src/main/res/layout/fragment_diaries.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /Chapter3-MVC/mvc-active/src/main/res/menu/menu_write.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 9 | -------------------------------------------------------------------------------- /Chapter3-MVC/mvc-active/src/main/res/mipmap-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leotyndale/AppArchitecture/e4920110c5d1c8c0e6179b03fc85e4b9d4ee162e/Chapter3-MVC/mvc-active/src/main/res/mipmap-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /Chapter3-MVC/mvc-active/src/main/res/mipmap-ldpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leotyndale/AppArchitecture/e4920110c5d1c8c0e6179b03fc85e4b9d4ee162e/Chapter3-MVC/mvc-active/src/main/res/mipmap-ldpi/ic_launcher.png -------------------------------------------------------------------------------- /Chapter3-MVC/mvc-active/src/main/res/mipmap-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leotyndale/AppArchitecture/e4920110c5d1c8c0e6179b03fc85e4b9d4ee162e/Chapter3-MVC/mvc-active/src/main/res/mipmap-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /Chapter3-MVC/mvc-active/src/main/res/mipmap-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leotyndale/AppArchitecture/e4920110c5d1c8c0e6179b03fc85e4b9d4ee162e/Chapter3-MVC/mvc-active/src/main/res/mipmap-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /Chapter3-MVC/mvc-active/src/main/res/mipmap-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leotyndale/AppArchitecture/e4920110c5d1c8c0e6179b03fc85e4b9d4ee162e/Chapter3-MVC/mvc-active/src/main/res/mipmap-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /Chapter3-MVC/mvc-active/src/main/res/mipmap-xxxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leotyndale/AppArchitecture/e4920110c5d1c8c0e6179b03fc85e4b9d4ee162e/Chapter3-MVC/mvc-active/src/main/res/mipmap-xxxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /Chapter3-MVC/mvc-active/src/main/res/values/colors.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | #D50000 5 | #D50000 6 | #D50000 7 | 8 | 9 | -------------------------------------------------------------------------------- /Chapter3-MVC/mvc-active/src/main/res/values/dimens.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 16dp 4 | 16dp 5 | 16dp 6 | 7 | -------------------------------------------------------------------------------- /Chapter3-MVC/mvc-active/src/main/res/values/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 我的日记 4 | 5 | 写日记 6 | 修改日记 7 | 8 | Success! 9 | Error! 10 | 暂未开放! 11 | 12 | 完成 13 | 写日记 14 | 删除日记 15 | 修改日记 16 | 17 | Title 18 | Desc. 19 | 20 | 确定 21 | 取消 22 | 23 | -------------------------------------------------------------------------------- /Chapter3-MVC/mvc-active/src/main/res/values/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 15 | 16 |