├── .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 |
5 |
6 |
7 |
8 |
9 |
10 |
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 |
--------------------------------------------------------------------------------
/Chapter10-AAC/main/src/main/res/menu/menu_write.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/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 |
5 |
8 |
9 |
10 |
--------------------------------------------------------------------------------
/Chapter11-CBD/.idea/gradle.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
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 |
5 |
6 |
7 |
8 |
9 |
10 |
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 |
--------------------------------------------------------------------------------
/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 |
--------------------------------------------------------------------------------
/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 |
5 |
8 |
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 |
5 |
6 |
7 |
8 |
9 |
10 |
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 |
--------------------------------------------------------------------------------
/Chapter12-Clean/main/src/main/res/menu/menu_write.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/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 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
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 |
5 |
6 |
7 |
8 |
9 |
10 |
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 |
--------------------------------------------------------------------------------
/Chapter12-Viper/main/src/main/res/menu/menu_write.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/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 |
5 |
8 |
9 |
10 |
--------------------------------------------------------------------------------
/Chapter13-Fragmentless/.idea/encodings.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/Chapter13-Fragmentless/.idea/gradle.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
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 |
5 |
6 |
7 |
8 |
9 |
10 |
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 |
--------------------------------------------------------------------------------
/Chapter13-Fragmentless/main/src/main/res/menu/menu_write.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/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 |
5 |
8 |
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 |
5 |
6 |
7 |
8 |
9 |
10 |
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 |
--------------------------------------------------------------------------------
/Chapter14-Conductor/main/src/main/res/menu/menu_write.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/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 |
5 |
8 |
9 |
10 |
--------------------------------------------------------------------------------
/Chapter15-Plugin-Framework/.idea/gradle.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/Chapter15-Plugin-Framework/.idea/markdown-navigator/profiles_settings.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
--------------------------------------------------------------------------------
/Chapter15-Plugin-Framework/.idea/runConfigurations.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
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 |
--------------------------------------------------------------------------------
/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 |
--------------------------------------------------------------------------------
/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 |
5 |
8 |
9 |
10 |
--------------------------------------------------------------------------------
/Chapter3-MVC/.idea/encodings.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/Chapter3-MVC/.idea/runConfigurations.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
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 |
--------------------------------------------------------------------------------
/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 |
6 |
7 |
8 |
9 |
15 |
16 |
17 |
18 |
--------------------------------------------------------------------------------
/Chapter3-MVC/mvc/.gitignore:
--------------------------------------------------------------------------------
1 | /build
2 |
--------------------------------------------------------------------------------
/Chapter3-MVC/mvc/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/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/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/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 | // 获得所有数据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 |
--------------------------------------------------------------------------------
/Chapter3-MVC/mvc/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(); // Fragment事务开始
14 | transaction.add(frameId, fragment); // 添加Fragment,frameId为fragment的id
15 | transaction.commit(); // 提交事务
16 | }
17 |
18 | }
19 |
--------------------------------------------------------------------------------
/Chapter3-MVC/mvc/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 | public class CollectionUtils { // 集合工具类
6 |
7 | public static boolean isEmpty(Map map) {
8 | return map == null || map.isEmpty();
9 | }
10 | }
11 |
--------------------------------------------------------------------------------
/Chapter3-MVC/mvc/src/main/res/drawable-xxhdpi/add.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/leotyndale/AppArchitecture/e4920110c5d1c8c0e6179b03fc85e4b9d4ee162e/Chapter3-MVC/mvc/src/main/res/drawable-xxhdpi/add.png
--------------------------------------------------------------------------------
/Chapter3-MVC/mvc/src/main/res/layout/fragment_diaries.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/Chapter3-MVC/mvc/src/main/res/menu/menu_write.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/Chapter3-MVC/mvc/src/main/res/mipmap-hdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/leotyndale/AppArchitecture/e4920110c5d1c8c0e6179b03fc85e4b9d4ee162e/Chapter3-MVC/mvc/src/main/res/mipmap-hdpi/ic_launcher.png
--------------------------------------------------------------------------------
/Chapter3-MVC/mvc/src/main/res/mipmap-ldpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/leotyndale/AppArchitecture/e4920110c5d1c8c0e6179b03fc85e4b9d4ee162e/Chapter3-MVC/mvc/src/main/res/mipmap-ldpi/ic_launcher.png
--------------------------------------------------------------------------------
/Chapter3-MVC/mvc/src/main/res/mipmap-mdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/leotyndale/AppArchitecture/e4920110c5d1c8c0e6179b03fc85e4b9d4ee162e/Chapter3-MVC/mvc/src/main/res/mipmap-mdpi/ic_launcher.png
--------------------------------------------------------------------------------
/Chapter3-MVC/mvc/src/main/res/mipmap-xhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/leotyndale/AppArchitecture/e4920110c5d1c8c0e6179b03fc85e4b9d4ee162e/Chapter3-MVC/mvc/src/main/res/mipmap-xhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/Chapter3-MVC/mvc/src/main/res/mipmap-xxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/leotyndale/AppArchitecture/e4920110c5d1c8c0e6179b03fc85e4b9d4ee162e/Chapter3-MVC/mvc/src/main/res/mipmap-xxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/Chapter3-MVC/mvc/src/main/res/mipmap-xxxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/leotyndale/AppArchitecture/e4920110c5d1c8c0e6179b03fc85e4b9d4ee162e/Chapter3-MVC/mvc/src/main/res/mipmap-xxxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/Chapter3-MVC/mvc/src/main/res/values/colors.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | #D50000
5 | #D50000
6 | #D50000
7 |
8 |
9 |
--------------------------------------------------------------------------------
/Chapter3-MVC/mvc/src/main/res/values/dimens.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | 16dp
4 | 16dp
5 | 16dp
6 |
7 |
--------------------------------------------------------------------------------
/Chapter3-MVC/mvc/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/settings.gradle:
--------------------------------------------------------------------------------
1 | include ':mvc', ':mvc-active'
2 |
--------------------------------------------------------------------------------
/Chapter5-MVP/.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 |
--------------------------------------------------------------------------------
/Chapter5-MVP/.idea/checkstyle-idea.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
8 |
9 |
10 |
--------------------------------------------------------------------------------
/Chapter5-MVP/.idea/gradle.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
--------------------------------------------------------------------------------
/Chapter5-MVP/.idea/modules.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/Chapter5-MVP/.idea/runConfigurations.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/Chapter5-MVP/.idea/vcs.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/Chapter5-MVP/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 |
--------------------------------------------------------------------------------
/Chapter5-MVP/gradle/wrapper/gradle-wrapper.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/leotyndale/AppArchitecture/e4920110c5d1c8c0e6179b03fc85e4b9d4ee162e/Chapter5-MVP/gradle/wrapper/gradle-wrapper.jar
--------------------------------------------------------------------------------
/Chapter5-MVP/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 |
--------------------------------------------------------------------------------
/Chapter5-MVP/main/.gitignore:
--------------------------------------------------------------------------------
1 | /build
2 |
--------------------------------------------------------------------------------
/Chapter5-MVP/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.**
--------------------------------------------------------------------------------
/Chapter5-MVP/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 |
--------------------------------------------------------------------------------
/Chapter5-MVP/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 |
--------------------------------------------------------------------------------
/Chapter5-MVP/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 |
--------------------------------------------------------------------------------
/Chapter5-MVP/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 |
--------------------------------------------------------------------------------
/Chapter5-MVP/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 |
--------------------------------------------------------------------------------
/Chapter5-MVP/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 |
--------------------------------------------------------------------------------
/Chapter5-MVP/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 |
--------------------------------------------------------------------------------
/Chapter5-MVP/main/src/main/res/drawable-xxhdpi/add.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/leotyndale/AppArchitecture/e4920110c5d1c8c0e6179b03fc85e4b9d4ee162e/Chapter5-MVP/main/src/main/res/drawable-xxhdpi/add.png
--------------------------------------------------------------------------------
/Chapter5-MVP/main/src/main/res/drawable-xxhdpi/yes.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/leotyndale/AppArchitecture/e4920110c5d1c8c0e6179b03fc85e4b9d4ee162e/Chapter5-MVP/main/src/main/res/drawable-xxhdpi/yes.png
--------------------------------------------------------------------------------
/Chapter5-MVP/main/src/main/res/layout/fragment_diaries.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/Chapter5-MVP/main/src/main/res/menu/menu_done.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/Chapter5-MVP/main/src/main/res/menu/menu_write.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/Chapter5-MVP/main/src/main/res/mipmap-hdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/leotyndale/AppArchitecture/e4920110c5d1c8c0e6179b03fc85e4b9d4ee162e/Chapter5-MVP/main/src/main/res/mipmap-hdpi/ic_launcher.png
--------------------------------------------------------------------------------
/Chapter5-MVP/main/src/main/res/mipmap-ldpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/leotyndale/AppArchitecture/e4920110c5d1c8c0e6179b03fc85e4b9d4ee162e/Chapter5-MVP/main/src/main/res/mipmap-ldpi/ic_launcher.png
--------------------------------------------------------------------------------
/Chapter5-MVP/main/src/main/res/mipmap-mdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/leotyndale/AppArchitecture/e4920110c5d1c8c0e6179b03fc85e4b9d4ee162e/Chapter5-MVP/main/src/main/res/mipmap-mdpi/ic_launcher.png
--------------------------------------------------------------------------------
/Chapter5-MVP/main/src/main/res/mipmap-xhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/leotyndale/AppArchitecture/e4920110c5d1c8c0e6179b03fc85e4b9d4ee162e/Chapter5-MVP/main/src/main/res/mipmap-xhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/Chapter5-MVP/main/src/main/res/mipmap-xxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/leotyndale/AppArchitecture/e4920110c5d1c8c0e6179b03fc85e4b9d4ee162e/Chapter5-MVP/main/src/main/res/mipmap-xxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/Chapter5-MVP/main/src/main/res/mipmap-xxxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/leotyndale/AppArchitecture/e4920110c5d1c8c0e6179b03fc85e4b9d4ee162e/Chapter5-MVP/main/src/main/res/mipmap-xxxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/Chapter5-MVP/main/src/main/res/values/colors.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | #D50000
5 | #D50000
6 | #D50000
7 |
8 |
9 |
--------------------------------------------------------------------------------
/Chapter5-MVP/main/src/main/res/values/dimens.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | 16dp
4 | 16dp
5 | 16dp
6 |
7 |
--------------------------------------------------------------------------------
/Chapter5-MVP/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 |
--------------------------------------------------------------------------------
/Chapter5-MVP/settings.gradle:
--------------------------------------------------------------------------------
1 | include ':main'
2 |
--------------------------------------------------------------------------------
/Chapter7-MVVM/.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 |
--------------------------------------------------------------------------------
/Chapter7-MVVM/.idea/checkstyle-idea.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
8 |
9 |
10 |
--------------------------------------------------------------------------------
/Chapter7-MVVM/.idea/gradle.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
--------------------------------------------------------------------------------
/Chapter7-MVVM/.idea/markdown-exported-files.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/Chapter7-MVVM/.idea/markdown-navigator/profiles_settings.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
--------------------------------------------------------------------------------
/Chapter7-MVVM/.idea/modules.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/Chapter7-MVVM/.idea/runConfigurations.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/Chapter7-MVVM/.idea/vcs.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/Chapter7-MVVM/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 |
--------------------------------------------------------------------------------
/Chapter7-MVVM/gradle/wrapper/gradle-wrapper.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/leotyndale/AppArchitecture/e4920110c5d1c8c0e6179b03fc85e4b9d4ee162e/Chapter7-MVVM/gradle/wrapper/gradle-wrapper.jar
--------------------------------------------------------------------------------
/Chapter7-MVVM/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 |
--------------------------------------------------------------------------------
/Chapter7-MVVM/main/.gitignore:
--------------------------------------------------------------------------------
1 | /build
2 |
--------------------------------------------------------------------------------
/Chapter7-MVVM/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.**
--------------------------------------------------------------------------------
/Chapter7-MVVM/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 |
--------------------------------------------------------------------------------
/Chapter7-MVVM/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 |
--------------------------------------------------------------------------------
/Chapter7-MVVM/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 |
--------------------------------------------------------------------------------
/Chapter7-MVVM/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 |
--------------------------------------------------------------------------------
/Chapter7-MVVM/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 |
--------------------------------------------------------------------------------
/Chapter7-MVVM/main/src/main/res/drawable-xxhdpi/add.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/leotyndale/AppArchitecture/e4920110c5d1c8c0e6179b03fc85e4b9d4ee162e/Chapter7-MVVM/main/src/main/res/drawable-xxhdpi/add.png
--------------------------------------------------------------------------------
/Chapter7-MVVM/main/src/main/res/drawable-xxhdpi/yes.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/leotyndale/AppArchitecture/e4920110c5d1c8c0e6179b03fc85e4b9d4ee162e/Chapter7-MVVM/main/src/main/res/drawable-xxhdpi/yes.png
--------------------------------------------------------------------------------
/Chapter7-MVVM/main/src/main/res/menu/menu_done.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/Chapter7-MVVM/main/src/main/res/menu/menu_write.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/Chapter7-MVVM/main/src/main/res/mipmap-hdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/leotyndale/AppArchitecture/e4920110c5d1c8c0e6179b03fc85e4b9d4ee162e/Chapter7-MVVM/main/src/main/res/mipmap-hdpi/ic_launcher.png
--------------------------------------------------------------------------------
/Chapter7-MVVM/main/src/main/res/mipmap-ldpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/leotyndale/AppArchitecture/e4920110c5d1c8c0e6179b03fc85e4b9d4ee162e/Chapter7-MVVM/main/src/main/res/mipmap-ldpi/ic_launcher.png
--------------------------------------------------------------------------------
/Chapter7-MVVM/main/src/main/res/mipmap-mdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/leotyndale/AppArchitecture/e4920110c5d1c8c0e6179b03fc85e4b9d4ee162e/Chapter7-MVVM/main/src/main/res/mipmap-mdpi/ic_launcher.png
--------------------------------------------------------------------------------
/Chapter7-MVVM/main/src/main/res/mipmap-xhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/leotyndale/AppArchitecture/e4920110c5d1c8c0e6179b03fc85e4b9d4ee162e/Chapter7-MVVM/main/src/main/res/mipmap-xhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/Chapter7-MVVM/main/src/main/res/mipmap-xxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/leotyndale/AppArchitecture/e4920110c5d1c8c0e6179b03fc85e4b9d4ee162e/Chapter7-MVVM/main/src/main/res/mipmap-xxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/Chapter7-MVVM/main/src/main/res/mipmap-xxxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/leotyndale/AppArchitecture/e4920110c5d1c8c0e6179b03fc85e4b9d4ee162e/Chapter7-MVVM/main/src/main/res/mipmap-xxxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/Chapter7-MVVM/main/src/main/res/values/colors.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | #D50000
5 | #D50000
6 | #D50000
7 |
8 |
9 |
--------------------------------------------------------------------------------
/Chapter7-MVVM/main/src/main/res/values/dimens.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | 16dp
4 | 16dp
5 | 16dp
6 |
7 |
--------------------------------------------------------------------------------
/Chapter7-MVVM/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 |
--------------------------------------------------------------------------------
/Chapter7-MVVM/settings.gradle:
--------------------------------------------------------------------------------
1 | include ':main'
2 |
--------------------------------------------------------------------------------
/Chapter8-Dagger2/.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 |
--------------------------------------------------------------------------------
/Chapter8-Dagger2/.idea/checkstyle-idea.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
8 |
9 |
10 |
--------------------------------------------------------------------------------
/Chapter8-Dagger2/.idea/gradle.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
--------------------------------------------------------------------------------
/Chapter8-Dagger2/.idea/markdown-exported-files.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/Chapter8-Dagger2/.idea/markdown-navigator/profiles_settings.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
--------------------------------------------------------------------------------
/Chapter8-Dagger2/.idea/modules.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/Chapter8-Dagger2/.idea/runConfigurations.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/Chapter8-Dagger2/.idea/vcs.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/Chapter8-Dagger2/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 |
--------------------------------------------------------------------------------
/Chapter8-Dagger2/gradle/wrapper/gradle-wrapper.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/leotyndale/AppArchitecture/e4920110c5d1c8c0e6179b03fc85e4b9d4ee162e/Chapter8-Dagger2/gradle/wrapper/gradle-wrapper.jar
--------------------------------------------------------------------------------
/Chapter8-Dagger2/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 |
--------------------------------------------------------------------------------
/Chapter8-Dagger2/main/.gitignore:
--------------------------------------------------------------------------------
1 | /build
2 |
--------------------------------------------------------------------------------
/Chapter8-Dagger2/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.**
--------------------------------------------------------------------------------
/Chapter8-Dagger2/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 |
--------------------------------------------------------------------------------
/Chapter8-Dagger2/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 |
--------------------------------------------------------------------------------
/Chapter8-Dagger2/main/src/main/java/com/imuxuan/art/data/di/DiariesRepositoryComponent.java:
--------------------------------------------------------------------------------
1 | package com.imuxuan.art.data.di;
2 |
3 | import com.imuxuan.art.data.DiariesRepository;
4 |
5 | import javax.inject.Singleton;
6 |
7 | import dagger.Component;
8 |
9 | /**
10 | * Created by Yunpeng Li on 2018/12/30.
11 | */
12 | @Singleton
13 | @Component(modules = DiariesRepositoryModule.class)
14 | public interface DiariesRepositoryComponent {
15 |
16 | DiariesRepository getDiariesRepository();
17 | }
18 |
--------------------------------------------------------------------------------
/Chapter8-Dagger2/main/src/main/java/com/imuxuan/art/data/di/DiariesRepositoryModule.java:
--------------------------------------------------------------------------------
1 | package com.imuxuan.art.data.di;
2 |
3 | import com.imuxuan.art.data.local.DiariesLocalDataSource;
4 | import com.imuxuan.art.model.Diary;
5 | import com.imuxuan.art.source.DataSource;
6 |
7 | import javax.inject.Singleton;
8 |
9 | import dagger.Module;
10 | import dagger.Provides;
11 |
12 | /**
13 | * Created by Yunpeng Li on 2018/12/31.
14 | */
15 | @Module
16 | public class DiariesRepositoryModule {
17 |
18 | @Singleton // 单例注解
19 | @Provides // 标注提供依赖实例的方法
20 | DataSource provideDiariesLocalDataSource() {
21 | return new DiariesLocalDataSource();
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/Chapter8-Dagger2/main/src/main/java/com/imuxuan/art/main/di/DiariesComponent.java:
--------------------------------------------------------------------------------
1 | package com.imuxuan.art.main.di;
2 |
3 | import com.imuxuan.art.data.di.DiariesRepositoryComponent;
4 | import com.imuxuan.art.main.MainActivity;
5 | import com.imuxuan.art.util.FragmentScoped;
6 |
7 | import dagger.Component;
8 |
9 | /**
10 | * Created by Yunpeng Li on 2018/12/30.
11 | */
12 | @FragmentScoped
13 | @Component(dependencies = DiariesRepositoryComponent.class, modules = DiariesPresenterModule.class)
14 | public interface DiariesComponent {
15 |
16 | void inject(MainActivity activity);
17 |
18 | }
19 |
--------------------------------------------------------------------------------
/Chapter8-Dagger2/main/src/main/java/com/imuxuan/art/main/di/DiariesPresenterModule.java:
--------------------------------------------------------------------------------
1 | package com.imuxuan.art.main.di;
2 |
3 | import com.imuxuan.art.main.DiariesContract;
4 |
5 | import dagger.Module;
6 | import dagger.Provides;
7 |
8 | /**
9 | * Created by Yunpeng Li on 2018/12/30.
10 | */
11 | @Module
12 | public class DiariesPresenterModule {
13 |
14 | private final DiariesContract.View mView;
15 |
16 | public DiariesPresenterModule(DiariesContract.View view) {
17 | mView = view;
18 | }
19 |
20 | @Provides
21 | DiariesContract.View provideDiariesContractView() {
22 | return mView;
23 | }
24 | }
25 |
--------------------------------------------------------------------------------
/Chapter8-Dagger2/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 |
--------------------------------------------------------------------------------
/Chapter8-Dagger2/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 |
--------------------------------------------------------------------------------
/Chapter8-Dagger2/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 |
--------------------------------------------------------------------------------
/Chapter8-Dagger2/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 |
--------------------------------------------------------------------------------
/Chapter8-Dagger2/main/src/main/java/com/imuxuan/art/util/FragmentScoped.java:
--------------------------------------------------------------------------------
1 | package com.imuxuan.art.util;
2 |
3 | import java.lang.annotation.Documented;
4 | import java.lang.annotation.Retention;
5 | import java.lang.annotation.RetentionPolicy;
6 |
7 | import javax.inject.Scope;
8 |
9 | /**
10 | * Created by Yunpeng Li on 2018/12/30.
11 | */
12 | @Documented
13 | @Scope
14 | @Retention(RetentionPolicy.RUNTIME)
15 | public @interface FragmentScoped {
16 | }
17 |
--------------------------------------------------------------------------------
/Chapter8-Dagger2/main/src/main/res/drawable-xxhdpi/add.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/leotyndale/AppArchitecture/e4920110c5d1c8c0e6179b03fc85e4b9d4ee162e/Chapter8-Dagger2/main/src/main/res/drawable-xxhdpi/add.png
--------------------------------------------------------------------------------
/Chapter8-Dagger2/main/src/main/res/drawable-xxhdpi/yes.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/leotyndale/AppArchitecture/e4920110c5d1c8c0e6179b03fc85e4b9d4ee162e/Chapter8-Dagger2/main/src/main/res/drawable-xxhdpi/yes.png
--------------------------------------------------------------------------------
/Chapter8-Dagger2/main/src/main/res/layout/fragment_diaries.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/Chapter8-Dagger2/main/src/main/res/menu/menu_done.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/Chapter8-Dagger2/main/src/main/res/menu/menu_write.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/Chapter8-Dagger2/main/src/main/res/mipmap-hdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/leotyndale/AppArchitecture/e4920110c5d1c8c0e6179b03fc85e4b9d4ee162e/Chapter8-Dagger2/main/src/main/res/mipmap-hdpi/ic_launcher.png
--------------------------------------------------------------------------------
/Chapter8-Dagger2/main/src/main/res/mipmap-ldpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/leotyndale/AppArchitecture/e4920110c5d1c8c0e6179b03fc85e4b9d4ee162e/Chapter8-Dagger2/main/src/main/res/mipmap-ldpi/ic_launcher.png
--------------------------------------------------------------------------------
/Chapter8-Dagger2/main/src/main/res/mipmap-mdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/leotyndale/AppArchitecture/e4920110c5d1c8c0e6179b03fc85e4b9d4ee162e/Chapter8-Dagger2/main/src/main/res/mipmap-mdpi/ic_launcher.png
--------------------------------------------------------------------------------
/Chapter8-Dagger2/main/src/main/res/mipmap-xhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/leotyndale/AppArchitecture/e4920110c5d1c8c0e6179b03fc85e4b9d4ee162e/Chapter8-Dagger2/main/src/main/res/mipmap-xhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/Chapter8-Dagger2/main/src/main/res/mipmap-xxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/leotyndale/AppArchitecture/e4920110c5d1c8c0e6179b03fc85e4b9d4ee162e/Chapter8-Dagger2/main/src/main/res/mipmap-xxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/Chapter8-Dagger2/main/src/main/res/mipmap-xxxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/leotyndale/AppArchitecture/e4920110c5d1c8c0e6179b03fc85e4b9d4ee162e/Chapter8-Dagger2/main/src/main/res/mipmap-xxxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/Chapter8-Dagger2/main/src/main/res/values/colors.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | #D50000
5 | #D50000
6 | #D50000
7 |
8 |
9 |
--------------------------------------------------------------------------------
/Chapter8-Dagger2/main/src/main/res/values/dimens.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | 16dp
4 | 16dp
5 | 16dp
6 |
7 |
--------------------------------------------------------------------------------
/Chapter8-Dagger2/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 |
--------------------------------------------------------------------------------
/Chapter8-Dagger2/settings.gradle:
--------------------------------------------------------------------------------
1 | include ':main'
2 |
--------------------------------------------------------------------------------
/Chapter9-RxJava2/.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 |
--------------------------------------------------------------------------------
/Chapter9-RxJava2/.idea/checkstyle-idea.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
8 |
9 |
10 |
--------------------------------------------------------------------------------
/Chapter9-RxJava2/.idea/gradle.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
--------------------------------------------------------------------------------
/Chapter9-RxJava2/.idea/markdown-exported-files.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/Chapter9-RxJava2/.idea/markdown-navigator/profiles_settings.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
--------------------------------------------------------------------------------
/Chapter9-RxJava2/.idea/modules.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/Chapter9-RxJava2/.idea/runConfigurations.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/Chapter9-RxJava2/.idea/vcs.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/Chapter9-RxJava2/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 |
--------------------------------------------------------------------------------
/Chapter9-RxJava2/gradle/wrapper/gradle-wrapper.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/leotyndale/AppArchitecture/e4920110c5d1c8c0e6179b03fc85e4b9d4ee162e/Chapter9-RxJava2/gradle/wrapper/gradle-wrapper.jar
--------------------------------------------------------------------------------
/Chapter9-RxJava2/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 |
--------------------------------------------------------------------------------
/Chapter9-RxJava2/main/.gitignore:
--------------------------------------------------------------------------------
1 | /build
2 |
--------------------------------------------------------------------------------
/Chapter9-RxJava2/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.**
--------------------------------------------------------------------------------
/Chapter9-RxJava2/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 |
--------------------------------------------------------------------------------
/Chapter9-RxJava2/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 | void subscribe();
7 |
8 | // void destroy(); // Presenter生命周期结束
9 | void unSubscribe();
10 |
11 | }
12 |
--------------------------------------------------------------------------------
/Chapter9-RxJava2/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 |
--------------------------------------------------------------------------------
/Chapter9-RxJava2/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 |
--------------------------------------------------------------------------------
/Chapter9-RxJava2/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 |
--------------------------------------------------------------------------------
/Chapter9-RxJava2/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 |
--------------------------------------------------------------------------------
/Chapter9-RxJava2/main/src/main/res/drawable-xxhdpi/add.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/leotyndale/AppArchitecture/e4920110c5d1c8c0e6179b03fc85e4b9d4ee162e/Chapter9-RxJava2/main/src/main/res/drawable-xxhdpi/add.png
--------------------------------------------------------------------------------
/Chapter9-RxJava2/main/src/main/res/drawable-xxhdpi/yes.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/leotyndale/AppArchitecture/e4920110c5d1c8c0e6179b03fc85e4b9d4ee162e/Chapter9-RxJava2/main/src/main/res/drawable-xxhdpi/yes.png
--------------------------------------------------------------------------------
/Chapter9-RxJava2/main/src/main/res/layout/fragment_diaries.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/Chapter9-RxJava2/main/src/main/res/menu/menu_done.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/Chapter9-RxJava2/main/src/main/res/menu/menu_write.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/Chapter9-RxJava2/main/src/main/res/mipmap-hdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/leotyndale/AppArchitecture/e4920110c5d1c8c0e6179b03fc85e4b9d4ee162e/Chapter9-RxJava2/main/src/main/res/mipmap-hdpi/ic_launcher.png
--------------------------------------------------------------------------------
/Chapter9-RxJava2/main/src/main/res/mipmap-ldpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/leotyndale/AppArchitecture/e4920110c5d1c8c0e6179b03fc85e4b9d4ee162e/Chapter9-RxJava2/main/src/main/res/mipmap-ldpi/ic_launcher.png
--------------------------------------------------------------------------------
/Chapter9-RxJava2/main/src/main/res/mipmap-mdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/leotyndale/AppArchitecture/e4920110c5d1c8c0e6179b03fc85e4b9d4ee162e/Chapter9-RxJava2/main/src/main/res/mipmap-mdpi/ic_launcher.png
--------------------------------------------------------------------------------
/Chapter9-RxJava2/main/src/main/res/mipmap-xhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/leotyndale/AppArchitecture/e4920110c5d1c8c0e6179b03fc85e4b9d4ee162e/Chapter9-RxJava2/main/src/main/res/mipmap-xhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/Chapter9-RxJava2/main/src/main/res/mipmap-xxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/leotyndale/AppArchitecture/e4920110c5d1c8c0e6179b03fc85e4b9d4ee162e/Chapter9-RxJava2/main/src/main/res/mipmap-xxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/Chapter9-RxJava2/main/src/main/res/mipmap-xxxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/leotyndale/AppArchitecture/e4920110c5d1c8c0e6179b03fc85e4b9d4ee162e/Chapter9-RxJava2/main/src/main/res/mipmap-xxxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/Chapter9-RxJava2/main/src/main/res/values/colors.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | #D50000
5 | #D50000
6 | #D50000
7 |
8 |
9 |
--------------------------------------------------------------------------------
/Chapter9-RxJava2/main/src/main/res/values/dimens.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | 16dp
4 | 16dp
5 | 16dp
6 |
7 |
--------------------------------------------------------------------------------
/Chapter9-RxJava2/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 |
--------------------------------------------------------------------------------
/Chapter9-RxJava2/settings.gradle:
--------------------------------------------------------------------------------
1 | include ':main'
2 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # AppArchitecture
2 |
3 | 购买地址 [移动开发架构设计实战](https://item.jd.com/12730926.html)
4 |
5 | 豆瓣一下 [移动开发架构设计实战](https://book.douban.com/subject/34872142/)
6 |
7 | 
8 |
--------------------------------------------------------------------------------
/pic/img1.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/leotyndale/AppArchitecture/e4920110c5d1c8c0e6179b03fc85e4b9d4ee162e/pic/img1.jpg
--------------------------------------------------------------------------------