├── .gitignore ├── .travis.yml ├── JetGear ├── .gitignore ├── build.gradle ├── proguard-rules.pro └── src │ └── main │ ├── AndroidManifest.xml │ ├── java │ └── io │ │ └── mindjet │ │ └── jetgear │ │ ├── adapter │ │ └── ViewPagerAdapter.java │ │ ├── base │ │ ├── BaseBottomSheetDialog.java │ │ └── BaseDialog.java │ │ ├── mvvm │ │ ├── ILayoutId.java │ │ ├── adapter │ │ │ ├── ListAdapter.java │ │ │ ├── LoadMoreAdapter.java │ │ │ └── ViewModelAdapter.java │ │ ├── base │ │ │ ├── BaseActivity.java │ │ │ ├── BaseAdapter.java │ │ │ ├── BaseCompatActivity.java │ │ │ ├── BaseViewHolder.java │ │ │ └── BaseViewModel.java │ │ ├── bindingadapter │ │ │ ├── BaseBindingAdapter.java │ │ │ └── ImageBindingAdapter.java │ │ ├── listener │ │ │ ├── LifeCycleListener.java │ │ │ ├── LoadMoreListener.java │ │ │ ├── RcvItemClickListener.java │ │ │ ├── RefreshListener.java │ │ │ ├── ScrollLoadMoreListener.java │ │ │ └── ViewAttachedListener.java │ │ ├── viewinterface │ │ │ ├── ActivityCompatInterface.java │ │ │ ├── ActivityInterface.java │ │ │ ├── AdapterInterface.java │ │ │ ├── ViewInterface.java │ │ │ └── ViewInterfaceGen.java │ │ └── viewmodel │ │ │ ├── BannerViewModel.java │ │ │ ├── ViewModelBinder.java │ │ │ ├── activity │ │ │ ├── ViewModelActivity.java │ │ │ └── ViewModelCompatActivity.java │ │ │ ├── coordinator │ │ │ ├── CollapsingImageViewModel.java │ │ │ ├── CoordinatorCollapseLayoutViewModel.java │ │ │ └── CoordinatorLayoutViewModel.java │ │ │ ├── drawer │ │ │ ├── DrawerHeaderViewModel.java │ │ │ ├── DrawerItemViewModel.java │ │ │ ├── DrawerLayoutViewModel.java │ │ │ ├── DrawerViewModel.java │ │ │ └── NativeDrawerLayoutViewModel.java │ │ │ ├── header │ │ │ ├── HeaderItemViewModel.java │ │ │ ├── HeaderViewModel.java │ │ │ └── IHeaderItemCallback.java │ │ │ ├── integrated │ │ │ ├── DrawerCoordinatorLayoutViewModel.java │ │ │ ├── HeaderRecyclerViewModel.java │ │ │ └── HeaderSwipeLayoutViewModel.java │ │ │ ├── item │ │ │ ├── ButtonViewModel.java │ │ │ ├── ImageTextCardViewModel.java │ │ │ ├── ImageTextViewModel.java │ │ │ ├── LoadingViewModel.java │ │ │ ├── TabViewModel.java │ │ │ └── TextViewModel.java │ │ │ └── list │ │ │ ├── RecyclerViewModel.java │ │ │ └── SwipeRecyclerViewModel.java │ │ ├── network │ │ ├── JLoggerInterceptor.java │ │ └── ServiceGen.java │ │ └── reactivex │ │ ├── RxActions.java │ │ ├── RxTask.java │ │ └── rxbus │ │ ├── RxBus.java │ │ └── RxEvent.java │ └── res │ ├── drawable-hdpi │ └── ic_back.png │ ├── drawable-xhdpi │ └── ic_back.png │ ├── drawable-xxhdpi │ └── ic_back.png │ ├── layout │ ├── include_banner.xml │ ├── include_collapsing_image.xml │ ├── include_coordinator_collapse_layout.xml │ ├── include_coordinator_layout.xml │ ├── include_divider.xml │ ├── include_drawer.xml │ ├── include_drawer_coordinator_layout.xml │ ├── include_drawer_header.xml │ ├── include_drawer_layout.xml │ ├── include_header.xml │ ├── include_header_recycler.xml │ ├── include_header_swipe_layout.xml │ ├── include_height_25dp.xml │ ├── include_native_drawer_layout.xml │ ├── include_recycler_view.xml │ ├── include_swipe_recycler_view.xml │ ├── item_banner.xml │ ├── item_button.xml │ ├── item_drawer.xml │ ├── item_drawer_header.xml │ ├── item_header.xml │ ├── item_image_text.xml │ ├── item_image_text_cardview.xml │ ├── item_loading.xml │ ├── item_progress.xml │ ├── item_tab.xml │ └── item_text.xml │ ├── menu │ ├── menu_drawer.xml │ └── menu_option.xml │ └── values │ ├── attrs.xml │ ├── colors.xml │ ├── dimens.xml │ ├── integer.xml │ ├── strings.xml │ └── styles.xml ├── JetImage ├── .gitignore ├── build.gradle ├── proguard-rules.pro └── src │ └── main │ ├── AndroidManifest.xml │ ├── java │ └── io │ │ └── mindjet │ │ └── jetimage │ │ ├── loader │ │ └── ImageLoader.java │ │ └── picker │ │ ├── HiddenActivity.java │ │ └── ImagePicker.java │ └── res │ ├── drawable-hdpi │ └── ic_placeholder.png │ ├── drawable-xhdpi │ └── ic_placeholder.png │ └── values │ └── strings.xml ├── JetUtil ├── .gitignore ├── build.gradle ├── proguard-rules.pro └── src │ └── main │ ├── AndroidManifest.xml │ ├── java │ └── io │ │ └── mindjet │ │ └── jetutil │ │ ├── anim │ │ └── RevealUtil.java │ │ ├── file │ │ ├── FileUtil.java │ │ ├── RxFile.java │ │ └── SPUtil.java │ │ ├── hint │ │ └── Toaster.java │ │ ├── logger │ │ └── JLogger.java │ │ ├── manager │ │ ├── ActivityManager.java │ │ ├── ShareManager.java │ │ └── TransManager.java │ │ ├── task │ │ └── Task.java │ │ ├── version │ │ └── VersionUtil.java │ │ └── view │ │ └── ColorUtil.java │ └── res │ ├── anim │ ├── fade_in.xml │ └── fade_out.xml │ └── values │ └── strings.xml ├── JetWidget ├── .gitignore ├── build.gradle ├── proguard-rules.pro └── src │ └── main │ ├── AndroidManifest.xml │ ├── java │ └── io │ │ └── mindjet │ │ └── jetwidget │ │ ├── JToolBar.java │ │ └── LoadingView.java │ └── res │ ├── drawable-hdpi │ ├── ic_arrow_left.png │ ├── ic_arrow_up.png │ ├── ic_check.png │ ├── ic_code_gray.png │ ├── ic_cross_round.png │ ├── ic_draft_gray.png │ ├── ic_drawer.png │ ├── ic_drawer_gray.png │ ├── ic_earth_gray.png │ ├── ic_face.png │ ├── ic_face_gray.png │ ├── ic_favorite_gray.png │ ├── ic_inbox_gray.png │ ├── ic_location.png │ ├── ic_location_gray.png │ ├── ic_mail_gray.png │ ├── ic_more.png │ ├── ic_qq.png │ ├── ic_qzone.png │ ├── ic_refresh.png │ ├── ic_refresh_gray.png │ ├── ic_sent.png │ ├── ic_sent_gray.png │ ├── ic_setting.png │ ├── ic_setting_gray.png │ ├── ic_share.png │ ├── ic_share_gray.png │ ├── ic_star.png │ ├── ic_star_empty.png │ ├── ic_star_gray.png │ ├── ic_track_gray.png │ ├── ic_up.png │ ├── ic_up_gray.png │ ├── ic_wechat.png │ └── ic_weibo.png │ ├── drawable-v21 │ ├── ripple_borderless_default.xml │ ├── ripple_borderless_white.xml │ ├── ripple_default.xml │ ├── ripple_theme.xml │ └── ripple_white.xml │ ├── drawable-xhdpi │ ├── ic_arrow_left.png │ ├── ic_arrow_up.png │ ├── ic_check.png │ ├── ic_code_gray.png │ ├── ic_cross_round.png │ ├── ic_dislike.png │ ├── ic_draft_gray.png │ ├── ic_drawer.png │ ├── ic_drawer_gray.png │ ├── ic_earth_gray.png │ ├── ic_face.png │ ├── ic_face_gray.png │ ├── ic_favorite_gray.png │ ├── ic_inbox_gray.png │ ├── ic_like.png │ ├── ic_location.png │ ├── ic_location_gray.png │ ├── ic_mail_gray.png │ ├── ic_more.png │ ├── ic_qq.png │ ├── ic_qzone.png │ ├── ic_refresh.png │ ├── ic_refresh_gray.png │ ├── ic_sent.png │ ├── ic_sent_gray.png │ ├── ic_setting.png │ ├── ic_setting_gray.png │ ├── ic_share.png │ ├── ic_share_gray.png │ ├── ic_star.png │ ├── ic_star_empty.png │ ├── ic_star_gray.png │ ├── ic_track_gray.png │ ├── ic_up.png │ ├── ic_up_gray.png │ ├── ic_wechat.png │ └── ic_weibo.png │ ├── drawable-xxhdpi │ ├── ic_arrow_left.png │ ├── ic_arrow_up.png │ ├── ic_check.png │ ├── ic_code_gray.png │ ├── ic_cross_round.png │ ├── ic_dislike.png │ ├── ic_draft_gray.png │ ├── ic_drawer.png │ ├── ic_drawer_gray.png │ ├── ic_earth_gray.png │ ├── ic_face.png │ ├── ic_face_gray.png │ ├── ic_favorite_gray.png │ ├── ic_inbox_gray.png │ ├── ic_like.png │ ├── ic_location.png │ ├── ic_location_gray.png │ ├── ic_mail_gray.png │ ├── ic_more.png │ ├── ic_qq.png │ ├── ic_qzone.png │ ├── ic_refresh.png │ ├── ic_refresh_gray.png │ ├── ic_sent.png │ ├── ic_sent_gray.png │ ├── ic_setting.png │ ├── ic_setting_gray.png │ ├── ic_share.png │ ├── ic_share_gray.png │ ├── ic_star.png │ ├── ic_star_empty.png │ ├── ic_star_gray.png │ ├── ic_track_gray.png │ ├── ic_up.png │ ├── ic_up_gray.png │ ├── ic_wechat.png │ └── ic_weibo.png │ ├── drawable │ ├── ic_down_gray.xml │ ├── ripple_borderless_default.xml │ ├── ripple_borderless_white.xml │ ├── ripple_default.xml │ ├── ripple_theme.xml │ ├── ripple_white.xml │ ├── shape_cursor_normal.xml │ ├── shape_cursor_selected.xml │ ├── shape_gradient_gray.xml │ └── test_image.png │ ├── values-v19 │ └── styles.xml │ ├── values-v21 │ └── styles.xml │ └── values │ ├── color_universal.xml │ ├── colors.xml │ ├── dimens.xml │ ├── strings.xml │ └── styles.xml ├── LICENSE ├── README.md ├── Reader.postman_collection.json ├── app ├── .gitignore ├── build.gradle ├── deploy.gradle ├── jetpack_dev.jks ├── libs │ └── jsoup-1.9.2.jar ├── proguard-rules.pro └── src │ ├── androidTest │ └── java │ │ └── io │ │ └── mindjet │ │ └── jetpack │ │ └── ExampleInstrumentedTest.java │ ├── main │ ├── AndroidManifest.xml │ ├── assets │ │ ├── fonts │ │ │ ├── Courgette-Regular.ttf │ │ │ └── Pacifico-Regular.ttf │ │ └── me.json │ ├── java │ │ └── io │ │ │ └── mindjet │ │ │ └── litereader │ │ │ ├── BaseApp.java │ │ │ ├── BaseEnv.java │ │ │ ├── adapter │ │ │ ├── ColumnViewPagerAdapter.java │ │ │ └── ReviewViewPagerAdapter.java │ │ │ ├── database │ │ │ └── OpenDBHelper.java │ │ │ ├── entity │ │ │ ├── ChannelCode.java │ │ │ └── Constant.java │ │ │ ├── http │ │ │ ├── SimpleHttpSubscriber.java │ │ │ └── ThreadDispatcher.java │ │ │ ├── model │ │ │ ├── detail │ │ │ │ ├── DoubanMovieDetail.java │ │ │ │ └── ZhihuStoryDetail.java │ │ │ ├── item │ │ │ │ ├── DoubanMovieItem.java │ │ │ │ ├── ZhihuSectionItem.java │ │ │ │ ├── ZhihuStoryItem.java │ │ │ │ ├── ZhihuTopStoryItem.java │ │ │ │ ├── book │ │ │ │ │ ├── Book.java │ │ │ │ │ ├── BookList.java │ │ │ │ │ ├── Rating.java │ │ │ │ │ └── Tag.java │ │ │ │ ├── douban │ │ │ │ │ ├── Author.java │ │ │ │ │ ├── Comment.java │ │ │ │ │ ├── DetailStill.java │ │ │ │ │ ├── Images.java │ │ │ │ │ ├── Rating.java │ │ │ │ │ ├── Review.java │ │ │ │ │ ├── Staff.java │ │ │ │ │ ├── StaffDetail.java │ │ │ │ │ ├── Still.java │ │ │ │ │ ├── Trailer.java │ │ │ │ │ └── Work.java │ │ │ │ └── one │ │ │ │ │ ├── Article.java │ │ │ │ │ ├── ArticleDetail.java │ │ │ │ │ ├── Author.java │ │ │ │ │ ├── Review.java │ │ │ │ │ └── ShareInfo.java │ │ │ ├── list │ │ │ │ ├── DailyArticle.java │ │ │ │ ├── DoubanCommentList.java │ │ │ │ ├── DoubanMovieList.java │ │ │ │ ├── DoubanReviewList.java │ │ │ │ ├── DoubanStillList.java │ │ │ │ ├── OneData.java │ │ │ │ ├── OneDataList.java │ │ │ │ ├── ZhihuDailyList.java │ │ │ │ └── ZhihuSectionList.java │ │ │ └── other │ │ │ │ ├── DailyWallpaper.java │ │ │ │ ├── Imdb.java │ │ │ │ ├── Me.java │ │ │ │ └── RottenTomatoes.java │ │ │ ├── reactivex │ │ │ ├── ActionHttpError.java │ │ │ ├── RxAction.java │ │ │ ├── RxLoadingView.java │ │ │ └── RxToaster.java │ │ │ ├── service │ │ │ ├── DoubanService.java │ │ │ ├── OneService.java │ │ │ ├── OtherService.java │ │ │ ├── TimeMovieService.java │ │ │ └── ZhihuDailyService.java │ │ │ ├── ui │ │ │ ├── activity │ │ │ │ ├── AboutMeActivity.java │ │ │ │ ├── ChannelSubscribeActivity.java │ │ │ │ ├── CollectActivity.java │ │ │ │ ├── DoubanMovieDetailActivity.java │ │ │ │ ├── DoubanMovieMoreReviewActivity.java │ │ │ │ ├── DoubanMovieReviewActivity.java │ │ │ │ ├── DoubanMovieSearchActivity.java │ │ │ │ ├── DoubanStaffDetailActivity.java │ │ │ │ ├── DoubanStillListActivity.java │ │ │ │ ├── MainActivity.java │ │ │ │ ├── OneArticleDetailActivity.java │ │ │ │ ├── OneReviewDetailActivity.java │ │ │ │ ├── SettingActivity.java │ │ │ │ ├── SplashActivity.java │ │ │ │ ├── ZhihuSectionDetailActivity.java │ │ │ │ └── ZhihuStoryDetailActivity.java │ │ │ ├── dialog │ │ │ │ ├── MeDialog.java │ │ │ │ ├── MovieItemDialog.java │ │ │ │ ├── ShareDialog.java │ │ │ │ └── StillDialog.java │ │ │ └── widget │ │ │ │ └── RichTextView.java │ │ │ ├── util │ │ │ ├── CacheUtil.java │ │ │ ├── ChannelUtil.java │ │ │ ├── CollectionManager.java │ │ │ ├── DateUtil.java │ │ │ └── RottenTomatoUtil.java │ │ │ └── viewmodel │ │ │ ├── AboutMeViewModel.java │ │ │ ├── ICollection.java │ │ │ ├── MainViewModel.java │ │ │ ├── detail │ │ │ ├── DoubanBookDetailViewModel.java │ │ │ ├── DoubanMovieDetailViewModel.java │ │ │ ├── DoubanMovieMoreReviewViewModel.java │ │ │ ├── DoubanMovieReviewViewModel.java │ │ │ ├── DoubanMovieSearchViewModel.java │ │ │ ├── DoubanStaffDetailViewModel.java │ │ │ ├── IncludeSettingViewModel.java │ │ │ ├── OneArticleDetailViewModel.java │ │ │ ├── OneReviewDetailViewModel.java │ │ │ ├── ZhihuStoryDetailViewModel.java │ │ │ ├── book │ │ │ │ └── DoubanBookImageViewModel.java │ │ │ ├── douban │ │ │ │ ├── DetailImageViewModel.java │ │ │ │ ├── DetailReviewItemViewModel.java │ │ │ │ ├── DetailStaffItemViewModel.java │ │ │ │ ├── DetailStaffViewModel.java │ │ │ │ ├── DetailStillItemViewModel.java │ │ │ │ ├── DetailStillViewModel.java │ │ │ │ ├── DetailSummaryViewModel.java │ │ │ │ ├── StaffDetailSummaryViewModel.java │ │ │ │ ├── StaffDetailTopInfoViewModel.java │ │ │ │ ├── StaffDetailWorkItemViewModel.java │ │ │ │ └── StaffDetailWorkViewModel.java │ │ │ ├── one │ │ │ │ ├── OneArticleContentViewModel.java │ │ │ │ ├── OneCommonImageViewModel.java │ │ │ │ └── OneReviewContentViewModel.java │ │ │ └── zhihu │ │ │ │ ├── ZhihuStoryArticleViewModel.java │ │ │ │ └── ZhihuStoryImageViewModel.java │ │ │ ├── item │ │ │ ├── AboutInfoViewModel.java │ │ │ ├── BlankViewModel.java │ │ │ ├── ChannelItemViewModel.java │ │ │ ├── ChannelUsageItemViewModel.java │ │ │ ├── DailyArticleItemViewModel.java │ │ │ ├── DoubanBookItemViewModel.java │ │ │ ├── DoubanCommentItemViewModel.java │ │ │ ├── DoubanMovieItemViewModel.java │ │ │ ├── DoubanReviewItemViewModel.java │ │ │ ├── DoubanStillItemViewModel.java │ │ │ ├── IncludeDoubanMovieReviewViewModel.java │ │ │ ├── MovieCollectItemViewModel.java │ │ │ ├── MovieTypeViewModel.java │ │ │ ├── OneArticleItemViewModel.java │ │ │ ├── OneCommonCollectItemViewModel.java │ │ │ ├── OneReviewItemViewModel.java │ │ │ ├── StoryCollectItemViewModel.java │ │ │ ├── ZhihuBannerItemViewModel.java │ │ │ ├── ZhihuDateItemViewModel.java │ │ │ ├── ZhihuSectionItemViewModel.java │ │ │ └── ZhihuStoryItemViewModel.java │ │ │ └── list │ │ │ ├── ChannelSubscribeViewModel.java │ │ │ ├── CollectViewModel.java │ │ │ ├── DailyArticleListViewModel.java │ │ │ ├── DoubanBookListViewModel.java │ │ │ ├── DoubanCommentListViewModel.java │ │ │ ├── DoubanMovieListViewModel.java │ │ │ ├── DoubanReviewListViewModel.java │ │ │ ├── DoubanStillListViewModel.java │ │ │ ├── OneArticleListViewModel.java │ │ │ ├── OneReviewListViewModel.java │ │ │ ├── SettingViewModel.java │ │ │ ├── ZhihuDailyListViewModel.java │ │ │ └── ZhihuSectionDetailViewModel.java │ └── res │ │ ├── drawable-hdpi │ │ └── ic_launcher.png │ │ ├── drawable-xhdpi │ │ └── ic_launcher.png │ │ ├── drawable-xxhdpi │ │ └── ic_launcher.png │ │ ├── drawable │ │ ├── shape_corner_10dp.xml │ │ ├── shape_corner_5dp.xml │ │ ├── shape_oval_border.xml │ │ └── shape_text_cursor.xml │ │ ├── layout │ │ ├── activity_douban_movie_more_review.xml │ │ ├── activity_douban_movie_search.xml │ │ ├── activity_main.xml │ │ ├── activity_splash.xml │ │ ├── dialog_me.xml │ │ ├── dialog_movie_item.xml │ │ ├── dialog_share.xml │ │ ├── dialog_still.xml │ │ ├── include_douban_review.xml │ │ ├── include_setting.xml │ │ ├── item_about_info.xml │ │ ├── item_blank.xml │ │ ├── item_channel.xml │ │ ├── item_channel_usage.xml │ │ ├── item_daily_article.xml │ │ ├── item_douban_book.xml │ │ ├── item_douban_comment.xml │ │ ├── item_douban_detail_image.xml │ │ ├── item_douban_detail_review.xml │ │ ├── item_douban_detail_staff.xml │ │ ├── item_douban_detail_still.xml │ │ ├── item_douban_detail_summary.xml │ │ ├── item_douban_movie.xml │ │ ├── item_douban_review.xml │ │ ├── item_douban_staff_detail_summary.xml │ │ ├── item_douban_staff_detail_top_info.xml │ │ ├── item_douban_staff_work.xml │ │ ├── item_douban_still.xml │ │ ├── item_movie_collect.xml │ │ ├── item_movie_type.xml │ │ ├── item_one_article.xml │ │ ├── item_one_article_content.xml │ │ ├── item_one_review.xml │ │ ├── item_one_review_collect.xml │ │ ├── item_one_review_content.xml │ │ ├── item_one_review_image.xml │ │ ├── item_story_collect.xml │ │ ├── item_zhihu_banner.xml │ │ ├── item_zhihu_date.xml │ │ ├── item_zhihu_section.xml │ │ ├── item_zhihu_story.xml │ │ ├── item_zhihu_story_article.xml │ │ └── item_zhihu_story_image.xml │ │ ├── menu │ │ └── menu_common.xml │ │ ├── values-w820dp │ │ └── dimens.xml │ │ └── values │ │ ├── colors.xml │ │ ├── dimens.xml │ │ ├── strings.xml │ │ └── styles.xml │ └── test │ └── java │ └── io │ └── mindjet │ └── jetpack │ └── ExampleUnitTest.java ├── art ├── github-display-1.png ├── github-display-2.png ├── github-display-3.png └── github-icon.png ├── build.gradle ├── gradle.properties ├── gradle └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat └── settings.gradle /.gitignore: -------------------------------------------------------------------------------- 1 | #built application files 2 | *.apk 3 | *.ap_ 4 | 5 | # files for the dex VM 6 | *.dex 7 | 8 | # Java class files 9 | *.class 10 | 11 | # generated files 12 | bin/ 13 | gen/ 14 | 15 | # Local configuration file (sdk path, etc) 16 | local.properties 17 | 18 | # Windows thumbnail db 19 | Thumbs.db 20 | 21 | # OSX files 22 | .DS_Store 23 | 24 | # Eclipse project files 25 | .classpath 26 | .project 27 | 28 | # Android Studio 29 | *.iml 30 | build/ 31 | captures/ 32 | .idea/ 33 | 34 | # Gradle Files 35 | .gradle 36 | 37 | # Log Files 38 | *.log 39 | 40 | # FreeLine 41 | *.py 42 | freeline/ 43 | 44 | # Raw files 45 | raw/ 46 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: android 2 | cache: bundler 3 | 4 | android: 5 | components: 6 | - tools 7 | - build-tools-25.0.2 8 | - android-25 9 | - extra-android-m2repository 10 | - extra-android-support 11 | 12 | before_install: 13 | - chmod +x gradlew 14 | 15 | script: 16 | gradle build 17 | -------------------------------------------------------------------------------- /JetGear/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | -------------------------------------------------------------------------------- /JetGear/build.gradle: -------------------------------------------------------------------------------- 1 | apply plugin: 'com.android.library' 2 | 3 | android { 4 | compileSdkVersion 25 5 | buildToolsVersion "25.0.2" 6 | 7 | dataBinding { 8 | enabled true 9 | } 10 | 11 | defaultConfig { 12 | minSdkVersion 16 13 | targetSdkVersion 25 14 | versionCode 1 15 | versionName "1.0" 16 | testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" 17 | } 18 | buildTypes { 19 | release { 20 | minifyEnabled false 21 | proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 22 | } 23 | } 24 | } 25 | 26 | dependencies { 27 | compile fileTree(dir: 'libs', include: ['*.jar']) 28 | compile 'com.android.support:appcompat-v7:25.1.1' 29 | compile 'com.android.support:recyclerview-v7:25.1.1' 30 | compile 'com.android.support:cardview-v7:25.1.1' 31 | compile 'jp.wasabeef:recyclerview-animators:2.2.5' 32 | compile 'com.squareup.retrofit2:adapter-rxjava:2.0.2' 33 | compile 'com.squareup.retrofit2:converter-gson:2.0.0' 34 | compile 'com.squareup.retrofit2:retrofit:2.1.0' 35 | compile 'com.zhy:percent-support-extends:1.1.1' 36 | compile 'com.android.support:design:25.1.1' 37 | compile 'com.trello:rxlifecycle:1.0' 38 | 39 | compile project(':JetImage') 40 | compile project(':JetUtil') 41 | compile project(':JetWidget') 42 | } 43 | -------------------------------------------------------------------------------- /JetGear/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # By default, the flags in this file are appended to flags specified 3 | # in /Users/ganguo/Android/sdk/tools/proguard/proguard-android.txt 4 | # You can edit the include path and order by changing the proguardFiles 5 | # directive in build.gradle. 6 | # 7 | # For more details, see 8 | # http://developer.android.com/guide/developing/tools/proguard.html 9 | 10 | # Add any project specific keep options here: 11 | 12 | # If your project uses WebView with JS, uncomment the following 13 | # and specify the fully qualified class name to the JavaScript interface 14 | # class: 15 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 16 | # public *; 17 | #} 18 | -------------------------------------------------------------------------------- /JetGear/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /JetGear/src/main/java/io/mindjet/jetgear/base/BaseDialog.java: -------------------------------------------------------------------------------- 1 | package io.mindjet.jetgear.base; 2 | 3 | import android.content.Context; 4 | import android.os.Bundle; 5 | import android.support.annotation.NonNull; 6 | import android.support.v7.app.AppCompatDialog; 7 | 8 | import io.mindjet.jetutil.logger.JLogger; 9 | 10 | /** 11 | * Created by Jet on 3/20/17. 12 | */ 13 | 14 | public abstract class BaseDialog extends AppCompatDialog { 15 | 16 | protected JLogger jLogger = JLogger.get(getClass().getSimpleName()); 17 | 18 | public BaseDialog(@NonNull Context context) { 19 | super(context); 20 | } 21 | 22 | @Override 23 | protected void onCreate(Bundle savedInstanceState) { 24 | beforeInitView(); 25 | initView(); 26 | initData(); 27 | } 28 | 29 | protected abstract void beforeInitView(); 30 | 31 | protected abstract void initView(); 32 | 33 | protected abstract void initData(); 34 | 35 | } 36 | -------------------------------------------------------------------------------- /JetGear/src/main/java/io/mindjet/jetgear/mvvm/ILayoutId.java: -------------------------------------------------------------------------------- 1 | package io.mindjet.jetgear.mvvm; 2 | 3 | /** 4 | * Created by Mindjet on 2017/2/15. 5 | */ 6 | 7 | public interface ILayoutId { 8 | 9 | int getLayoutId(); 10 | 11 | } 12 | -------------------------------------------------------------------------------- /JetGear/src/main/java/io/mindjet/jetgear/mvvm/adapter/ViewModelAdapter.java: -------------------------------------------------------------------------------- 1 | package io.mindjet.jetgear.mvvm.adapter; 2 | 3 | import android.content.Context; 4 | import android.databinding.ViewDataBinding; 5 | 6 | import io.mindjet.jetgear.mvvm.base.BaseViewHolder; 7 | import io.mindjet.jetgear.mvvm.base.BaseViewModel; 8 | import io.mindjet.jetgear.mvvm.viewmodel.ViewModelBinder; 9 | 10 | /** 11 | * Adapter for RecyclerView for binding View Model. 12 | *

13 | * Created by Mindjet on 2/17/17. 14 | */ 15 | 16 | public class ViewModelAdapter extends LoadMoreAdapter { 17 | 18 | private Context context; 19 | 20 | public ViewModelAdapter(Context context) { 21 | super(context); 22 | this.context = context; 23 | } 24 | 25 | @Override 26 | public void onBindVH(BaseViewHolder holder, int position) { 27 | ViewModelBinder.bind(this, get(position), holder); 28 | } 29 | 30 | @Override 31 | public int getItemLayoutId(int position) { 32 | return get(position).getLayoutId(); 33 | } 34 | 35 | public Context getContext() { 36 | return context; 37 | } 38 | } 39 | 40 | -------------------------------------------------------------------------------- /JetGear/src/main/java/io/mindjet/jetgear/mvvm/base/BaseActivity.java: -------------------------------------------------------------------------------- 1 | package io.mindjet.jetgear.mvvm.base; 2 | 3 | import android.app.Activity; 4 | import android.os.Bundle; 5 | import android.support.annotation.Nullable; 6 | 7 | import io.mindjet.jetutil.logger.JLogger; 8 | import io.mindjet.jetutil.manager.ActivityManager; 9 | 10 | /** 11 | * Created by Jet on 2/15/17. 12 | */ 13 | 14 | public abstract class BaseActivity extends Activity { 15 | 16 | public JLogger jLogger = JLogger.get(getClass().getSimpleName()); 17 | 18 | @Override 19 | protected void onCreate(@Nullable Bundle savedInstanceState) { 20 | super.onCreate(savedInstanceState); 21 | ActivityManager.addActivity(this); 22 | } 23 | 24 | @Override 25 | protected void onDestroy() { 26 | super.onDestroy(); 27 | ActivityManager.finishActivity(this); 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /JetGear/src/main/java/io/mindjet/jetgear/mvvm/base/BaseCompatActivity.java: -------------------------------------------------------------------------------- 1 | package io.mindjet.jetgear.mvvm.base; 2 | 3 | import android.os.Bundle; 4 | import android.os.PersistableBundle; 5 | import android.support.v7.app.AppCompatActivity; 6 | 7 | import io.mindjet.jetutil.manager.ActivityManager; 8 | 9 | /** 10 | * Created by Jet on 2/28/17. 11 | */ 12 | 13 | public class BaseCompatActivity extends AppCompatActivity { 14 | 15 | @Override 16 | public void onCreate(Bundle savedInstanceState, PersistableBundle persistentState) { 17 | super.onCreate(savedInstanceState, persistentState); 18 | ActivityManager.addActivity(this); 19 | } 20 | 21 | @Override 22 | protected void onDestroy() { 23 | super.onDestroy(); 24 | ActivityManager.finishActivity(this); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /JetGear/src/main/java/io/mindjet/jetgear/mvvm/base/BaseViewHolder.java: -------------------------------------------------------------------------------- 1 | package io.mindjet.jetgear.mvvm.base; 2 | 3 | import android.databinding.ViewDataBinding; 4 | import android.support.v7.widget.RecyclerView; 5 | import android.view.View; 6 | 7 | import io.mindjet.jetgear.BR; 8 | import io.mindjet.jetgear.mvvm.viewinterface.ViewInterface; 9 | 10 | /** 11 | * Created by Jet on 2/10/17. 12 | */ 13 | 14 | public class BaseViewHolder extends RecyclerView.ViewHolder { 15 | 16 | private V binding; 17 | private BaseViewModel> viewModel; 18 | 19 | public BaseViewHolder(View itemView) { 20 | super(itemView); 21 | } 22 | 23 | public BaseViewHolder(V binding) { 24 | super(binding.getRoot()); 25 | this.binding = binding; 26 | } 27 | 28 | public void bind(Object o) { 29 | binding.setVariable(BR.data, o); 30 | binding.executePendingBindings(); 31 | } 32 | 33 | public V getBinding() { 34 | return binding; 35 | } 36 | 37 | } 38 | -------------------------------------------------------------------------------- /JetGear/src/main/java/io/mindjet/jetgear/mvvm/listener/LifeCycleListener.java: -------------------------------------------------------------------------------- 1 | package io.mindjet.jetgear.mvvm.listener; 2 | 3 | import android.view.Menu; 4 | 5 | /** 6 | * Created by Jet on 2/22/17. 7 | */ 8 | 9 | public interface LifeCycleListener { 10 | 11 | void onDestroy(); 12 | 13 | void onStop(); 14 | 15 | void onResume(); 16 | 17 | /** 18 | * @return Whether the event is consumed or not. 19 | *

20 | * If the event has been consumed, please return true, so that the default callback will not be invoked. 21 | */ 22 | boolean onBackPressed(); 23 | 24 | boolean onCreateOptionMenu(Menu menu); 25 | 26 | } 27 | -------------------------------------------------------------------------------- /JetGear/src/main/java/io/mindjet/jetgear/mvvm/listener/LoadMoreListener.java: -------------------------------------------------------------------------------- 1 | package io.mindjet.jetgear.mvvm.listener; 2 | 3 | /** 4 | * Created by Jet on 2/16/17. 5 | */ 6 | 7 | public interface LoadMoreListener { 8 | void onLoadMore(); 9 | } 10 | -------------------------------------------------------------------------------- /JetGear/src/main/java/io/mindjet/jetgear/mvvm/listener/RcvItemClickListener.java: -------------------------------------------------------------------------------- 1 | package io.mindjet.jetgear.mvvm.listener; 2 | 3 | import android.databinding.ViewDataBinding; 4 | 5 | /** 6 | * Created by Jet on 2/17/17. 7 | */ 8 | 9 | public interface RcvItemClickListener { 10 | void onItemClick(ViewDataBinding binding, int position); 11 | 12 | void onItemLongClick(ViewDataBinding binding, int position); 13 | } 14 | -------------------------------------------------------------------------------- /JetGear/src/main/java/io/mindjet/jetgear/mvvm/listener/RefreshListener.java: -------------------------------------------------------------------------------- 1 | package io.mindjet.jetgear.mvvm.listener; 2 | 3 | /** 4 | * Created by Jet on 2/16/17. 5 | */ 6 | 7 | public interface RefreshListener { 8 | void onRefresh(); 9 | } 10 | -------------------------------------------------------------------------------- /JetGear/src/main/java/io/mindjet/jetgear/mvvm/listener/ViewAttachedListener.java: -------------------------------------------------------------------------------- 1 | package io.mindjet.jetgear.mvvm.listener; 2 | 3 | import io.mindjet.jetgear.mvvm.base.BaseViewModel; 4 | 5 | /** 6 | * Created by Jet on 2/22/17. 7 | */ 8 | 9 | public interface ViewAttachedListener { 10 | void onViewAttached(T viewModel); 11 | } 12 | -------------------------------------------------------------------------------- /JetGear/src/main/java/io/mindjet/jetgear/mvvm/viewinterface/ActivityCompatInterface.java: -------------------------------------------------------------------------------- 1 | package io.mindjet.jetgear.mvvm.viewinterface; 2 | 3 | import android.databinding.ViewDataBinding; 4 | import android.support.v7.app.AppCompatActivity; 5 | 6 | /** 7 | * Created by Jet on 3/6/17. 8 | */ 9 | 10 | public interface ActivityCompatInterface extends ViewInterface { 11 | 12 | AppCompatActivity getCompatActivity(); 13 | 14 | } 15 | -------------------------------------------------------------------------------- /JetGear/src/main/java/io/mindjet/jetgear/mvvm/viewinterface/ActivityInterface.java: -------------------------------------------------------------------------------- 1 | package io.mindjet.jetgear.mvvm.viewinterface; 2 | 3 | import android.app.Activity; 4 | import android.databinding.ViewDataBinding; 5 | 6 | /** 7 | * Created by Jet on 2/17/17. 8 | */ 9 | 10 | public interface ActivityInterface extends ViewInterface { 11 | 12 | Activity getActivity(); 13 | 14 | } 15 | -------------------------------------------------------------------------------- /JetGear/src/main/java/io/mindjet/jetgear/mvvm/viewinterface/AdapterInterface.java: -------------------------------------------------------------------------------- 1 | package io.mindjet.jetgear.mvvm.viewinterface; 2 | 3 | import android.databinding.ViewDataBinding; 4 | 5 | import io.mindjet.jetgear.mvvm.adapter.ViewModelAdapter; 6 | import io.mindjet.jetgear.mvvm.base.BaseViewHolder; 7 | 8 | /** 9 | * Created by Jet on 2/17/17. 10 | */ 11 | 12 | public interface AdapterInterface extends ViewInterface { 13 | 14 | ViewModelAdapter getAdapter(); 15 | 16 | BaseViewHolder getViewHolder(); 17 | 18 | } 19 | -------------------------------------------------------------------------------- /JetGear/src/main/java/io/mindjet/jetgear/mvvm/viewinterface/ViewInterface.java: -------------------------------------------------------------------------------- 1 | package io.mindjet.jetgear.mvvm.viewinterface; 2 | 3 | import android.content.Context; 4 | import android.databinding.ViewDataBinding; 5 | 6 | /** 7 | * Created by Jet on 2/17/17. 8 | */ 9 | 10 | public interface ViewInterface { 11 | 12 | Context getContext(); 13 | 14 | V getBinding(); 15 | 16 | } 17 | -------------------------------------------------------------------------------- /JetGear/src/main/java/io/mindjet/jetgear/mvvm/viewmodel/coordinator/CollapsingImageViewModel.java: -------------------------------------------------------------------------------- 1 | package io.mindjet.jetgear.mvvm.viewmodel.coordinator; 2 | 3 | import android.support.annotation.DrawableRes; 4 | import android.view.View; 5 | import android.widget.ImageView; 6 | 7 | import io.mindjet.jetgear.R; 8 | import io.mindjet.jetgear.databinding.IncludeCollapsingImageBinding; 9 | import io.mindjet.jetgear.mvvm.base.BaseViewModel; 10 | import io.mindjet.jetgear.mvvm.viewinterface.ViewInterface; 11 | import io.mindjet.jetimage.loader.ImageLoader; 12 | 13 | /** 14 | * Created by Jet on 3/6/17. 15 | */ 16 | 17 | public class CollapsingImageViewModel extends BaseViewModel> { 18 | 19 | @DrawableRes 20 | private int drawableRes; 21 | private String imageUrl = ""; 22 | 23 | public CollapsingImageViewModel(@DrawableRes int drawableRes) { 24 | this.drawableRes = drawableRes; 25 | } 26 | 27 | public CollapsingImageViewModel(String imageUrl) { 28 | this.imageUrl = imageUrl; 29 | } 30 | 31 | @Override 32 | public void onViewAttached(View view) { 33 | initImage(getSelfView().getBinding().image); 34 | } 35 | 36 | private void initImage(ImageView imageView) { 37 | if (drawableRes != 0) { 38 | imageView.setImageResource(drawableRes); 39 | } else { 40 | ImageLoader.load(imageView, imageUrl); 41 | } 42 | } 43 | 44 | @Override 45 | public int getLayoutId() { 46 | return R.layout.include_collapsing_image; 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /JetGear/src/main/java/io/mindjet/jetgear/mvvm/viewmodel/header/IHeaderItemCallback.java: -------------------------------------------------------------------------------- 1 | package io.mindjet.jetgear.mvvm.viewmodel.header; 2 | 3 | /** 4 | * Created by Jet on 2/21/17. 5 | */ 6 | 7 | public interface IHeaderItemCallback { 8 | void call(); 9 | } 10 | -------------------------------------------------------------------------------- /JetGear/src/main/java/io/mindjet/jetgear/mvvm/viewmodel/item/ImageTextViewModel.java: -------------------------------------------------------------------------------- 1 | package io.mindjet.jetgear.mvvm.viewmodel.item; 2 | 3 | import android.view.View; 4 | 5 | import java.util.UUID; 6 | 7 | import io.mindjet.jetgear.R; 8 | import io.mindjet.jetgear.databinding.ItemImageTextBinding; 9 | import io.mindjet.jetgear.mvvm.base.BaseViewModel; 10 | import io.mindjet.jetgear.mvvm.viewinterface.ViewInterface; 11 | 12 | /** 13 | * Created by Mindjet on 2017/2/15. 14 | */ 15 | 16 | public class ImageTextViewModel extends BaseViewModel> { 17 | 18 | private String imageUrl = "https://imgsa.baidu.com/forum/w%3D580/sign=9a8f6a0f9545d688a302b2ac94c27dab/ca67d5a20cf431ad929de0054c36acaf2fdd988b.jpg"; 19 | private String title = "Mindjet"; 20 | private String content = UUID.randomUUID().toString(); 21 | 22 | public String getImageUrl() { 23 | return imageUrl; 24 | } 25 | 26 | public String getTitle() { 27 | return title; 28 | } 29 | 30 | public String getContent() { 31 | return content; 32 | } 33 | 34 | public void setImageUrl(String imageUrl) { 35 | this.imageUrl = imageUrl; 36 | } 37 | 38 | public void setTitle(String title) { 39 | this.title = title; 40 | } 41 | 42 | public void setContent(String content) { 43 | this.content = content; 44 | } 45 | 46 | @Override 47 | public int getLayoutId() { 48 | return R.layout.item_image_text; 49 | } 50 | 51 | @Override 52 | public void onViewAttached(View view) { 53 | 54 | } 55 | } 56 | -------------------------------------------------------------------------------- /JetGear/src/main/java/io/mindjet/jetgear/mvvm/viewmodel/item/LoadingViewModel.java: -------------------------------------------------------------------------------- 1 | package io.mindjet.jetgear.mvvm.viewmodel.item; 2 | 3 | import android.view.View; 4 | 5 | import io.mindjet.jetgear.R; 6 | import io.mindjet.jetgear.databinding.ItemLoadingBinding; 7 | import io.mindjet.jetgear.mvvm.base.BaseViewModel; 8 | import io.mindjet.jetgear.mvvm.viewinterface.ViewInterface; 9 | 10 | /** 11 | * Common loading view model. 12 | *

13 | * Created by Mindjet on 2017/4/16. 14 | */ 15 | 16 | public class LoadingViewModel extends BaseViewModel> { 17 | 18 | @Override 19 | public int getLayoutId() { 20 | return R.layout.item_loading; 21 | } 22 | 23 | @Override 24 | public void onViewAttached(View view) { 25 | 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /JetGear/src/main/java/io/mindjet/jetgear/mvvm/viewmodel/item/TextViewModel.java: -------------------------------------------------------------------------------- 1 | package io.mindjet.jetgear.mvvm.viewmodel.item; 2 | 3 | import android.view.View; 4 | import android.view.ViewGroup; 5 | 6 | import io.mindjet.jetgear.R; 7 | import io.mindjet.jetgear.databinding.ItemTextBinding; 8 | import io.mindjet.jetgear.mvvm.base.BaseViewModel; 9 | import io.mindjet.jetgear.mvvm.viewinterface.ViewInterface; 10 | 11 | /** 12 | * Created by Mindjet on 2017/2/15. 13 | */ 14 | 15 | public class TextViewModel extends BaseViewModel> { 16 | 17 | private String text; 18 | 19 | public TextViewModel(String text) { 20 | this.text = text; 21 | } 22 | 23 | public String getText() { 24 | return text; 25 | } 26 | 27 | @Override 28 | public int getLayoutId() { 29 | return R.layout.item_text; 30 | } 31 | 32 | @Override 33 | public void onViewAttached(View view) { 34 | 35 | } 36 | 37 | } 38 | -------------------------------------------------------------------------------- /JetGear/src/main/java/io/mindjet/jetgear/reactivex/RxActions.java: -------------------------------------------------------------------------------- 1 | package io.mindjet.jetgear.reactivex; 2 | 3 | import io.mindjet.jetutil.logger.JLogger; 4 | import rx.functions.Action1; 5 | 6 | /** 7 | * Simple actions for RxJava. 8 | *

9 | * Created by Mindjet on 2017/4/11. 10 | */ 11 | 12 | public class RxActions { 13 | 14 | private static JLogger jLogger = JLogger.get("RxActions"); 15 | 16 | public static Action1 onError() { 17 | return new Action1() { 18 | @Override 19 | public void call(Throwable throwable) { 20 | jLogger.e(throwable); 21 | } 22 | }; 23 | } 24 | 25 | } 26 | -------------------------------------------------------------------------------- /JetGear/src/main/java/io/mindjet/jetgear/reactivex/rxbus/RxEvent.java: -------------------------------------------------------------------------------- 1 | package io.mindjet.jetgear.reactivex.rxbus; 2 | 3 | import android.support.v4.util.Pair; 4 | 5 | /** 6 | * Created by Mindjet on 2017/4/11. 7 | */ 8 | 9 | public class RxEvent extends Pair { 10 | /** 11 | * Constructor for a Pair. 12 | * 13 | * @param first the first object in the Pair 14 | * @param second the second object in the pair 15 | */ 16 | public RxEvent(String first, Object second) { 17 | super(first, second); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /JetGear/src/main/res/drawable-hdpi/ic_back.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mindjet/LiteReader/202e6e83e18e4bf77755dc1ed6579f696000c35a/JetGear/src/main/res/drawable-hdpi/ic_back.png -------------------------------------------------------------------------------- /JetGear/src/main/res/drawable-xhdpi/ic_back.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mindjet/LiteReader/202e6e83e18e4bf77755dc1ed6579f696000c35a/JetGear/src/main/res/drawable-xhdpi/ic_back.png -------------------------------------------------------------------------------- /JetGear/src/main/res/drawable-xxhdpi/ic_back.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mindjet/LiteReader/202e6e83e18e4bf77755dc1ed6579f696000c35a/JetGear/src/main/res/drawable-xxhdpi/ic_back.png -------------------------------------------------------------------------------- /JetGear/src/main/res/layout/include_collapsing_image.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 9 | 10 | 11 | 15 | 16 | 21 | 22 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /JetGear/src/main/res/layout/include_divider.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 11 | 12 | -------------------------------------------------------------------------------- /JetGear/src/main/res/layout/include_drawer.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 9 | 10 | 11 | 17 | 18 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /JetGear/src/main/res/layout/include_drawer_layout.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | 10 | 11 | 12 | 17 | 18 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /JetGear/src/main/res/layout/include_header_recycler.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 9 | 10 | 11 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /JetGear/src/main/res/layout/include_header_swipe_layout.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 9 | 10 | 11 | 16 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /JetGear/src/main/res/layout/include_height_25dp.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | -------------------------------------------------------------------------------- /JetGear/src/main/res/layout/include_native_drawer_layout.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 9 | 10 | 11 | 16 | 17 | 23 | 24 | 25 | 26 | 33 | 34 | 35 | 36 | -------------------------------------------------------------------------------- /JetGear/src/main/res/layout/include_recycler_view.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 9 | 10 | 11 | 16 | 17 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /JetGear/src/main/res/layout/include_swipe_recycler_view.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 9 | 10 | 11 | 15 | 16 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /JetGear/src/main/res/layout/item_banner.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 9 | 10 | 11 | 15 | 16 | 20 | 21 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | -------------------------------------------------------------------------------- /JetGear/src/main/res/layout/item_button.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 9 | 10 | 11 | 23 | 24 | 32 | 33 | 34 | 35 | -------------------------------------------------------------------------------- /JetGear/src/main/res/layout/item_drawer.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 9 | 10 | 11 | 21 | 22 | 28 | 29 | 36 | 37 | 38 | 39 | -------------------------------------------------------------------------------- /JetGear/src/main/res/layout/item_drawer_header.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | -------------------------------------------------------------------------------- /JetGear/src/main/res/layout/item_header.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 9 | 10 | 11 | 19 | 20 | 26 | 27 | 35 | 36 | 37 | 38 | -------------------------------------------------------------------------------- /JetGear/src/main/res/layout/item_loading.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 9 | 10 | 11 | 17 | 18 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /JetGear/src/main/res/layout/item_progress.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 16 | 17 | 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /JetGear/src/main/res/layout/item_tab.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 9 | 10 | 11 | 12 | 13 | 20 | 21 | 25 | 26 | 31 | 32 | 33 | 34 | -------------------------------------------------------------------------------- /JetGear/src/main/res/layout/item_text.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 9 | 10 | 11 | 16 | 17 | 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /JetGear/src/main/res/menu/menu_drawer.xml: -------------------------------------------------------------------------------- 1 | 2 |

3 | 4 | 7 | 8 | 13 | 17 | 21 | 25 | 26 | 27 | 28 | 31 | 32 | 36 | 40 | 41 | 42 | 43 | -------------------------------------------------------------------------------- /JetGear/src/main/res/menu/menu_option.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 11 | 12 | 18 | 19 | -------------------------------------------------------------------------------- /JetGear/src/main/res/values/attrs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /JetGear/src/main/res/values/colors.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | #3F51B5 4 | #303F9F 5 | #FF4081 6 | 7 | #e7e7e7 8 | #cccccc 9 | #999999 10 | 11 | 12 | -------------------------------------------------------------------------------- /JetGear/src/main/res/values/integer.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 10 4 | -------------------------------------------------------------------------------- /JetGear/src/main/res/values/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | transition_name_image 4 | transition_name_text 5 | 6 | JetGear 7 | Inbox 8 | starred 9 | sent mails 10 | draft 11 | 12 | -------------------------------------------------------------------------------- /JetGear/src/main/res/values/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /JetImage/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | -------------------------------------------------------------------------------- /JetImage/build.gradle: -------------------------------------------------------------------------------- 1 | apply plugin: 'com.android.library' 2 | 3 | android { 4 | compileSdkVersion 25 5 | buildToolsVersion "25.0.2" 6 | 7 | defaultConfig { 8 | minSdkVersion 16 9 | targetSdkVersion 25 10 | versionCode 1 11 | versionName "1.0" 12 | } 13 | buildTypes { 14 | release { 15 | minifyEnabled false 16 | proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 17 | } 18 | } 19 | } 20 | 21 | dependencies { 22 | compile fileTree(dir: '.libs', include: ['*.jar']) 23 | compile 'com.android.support:appcompat-v7:25.1.0' 24 | compile 'io.reactivex:rxjava:1.2.6' 25 | compile 'io.reactivex:rxandroid:1.2.1' 26 | compile 'com.github.bumptech.glide:glide:3.7.0' 27 | compile 'jp.wasabeef:glide-transformations:2.0.1' 28 | } 29 | -------------------------------------------------------------------------------- /JetImage/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # By default, the flags in this file are appended to flags specified 3 | # in /Users/ganguo/Android/sdk/tools/proguard/proguard-android.txt 4 | # You can edit the include path and order by changing the proguardFiles 5 | # directive in build.gradle. 6 | # 7 | # For more details, see 8 | # http://developer.android.com/guide/developing/tools/proguard.html 9 | 10 | # Add any project specific keep options here: 11 | 12 | # If your project uses WebView with JS, uncomment the following 13 | # and specify the fully qualified class name to the JavaScript interface 14 | # class: 15 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 16 | # public *; 17 | #} 18 | -------------------------------------------------------------------------------- /JetImage/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | 6 | 7 | 8 | 12 | 13 | 16 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /JetImage/src/main/res/drawable-hdpi/ic_placeholder.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mindjet/LiteReader/202e6e83e18e4bf77755dc1ed6579f696000c35a/JetImage/src/main/res/drawable-hdpi/ic_placeholder.png -------------------------------------------------------------------------------- /JetImage/src/main/res/drawable-xhdpi/ic_placeholder.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mindjet/LiteReader/202e6e83e18e4bf77755dc1ed6579f696000c35a/JetImage/src/main/res/drawable-xhdpi/ic_placeholder.png -------------------------------------------------------------------------------- /JetImage/src/main/res/values/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | JetImage 3 | 4 | -------------------------------------------------------------------------------- /JetUtil/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | -------------------------------------------------------------------------------- /JetUtil/build.gradle: -------------------------------------------------------------------------------- 1 | apply plugin: 'com.android.library' 2 | 3 | android { 4 | compileSdkVersion 25 5 | buildToolsVersion "25.0.2" 6 | 7 | defaultConfig { 8 | minSdkVersion 16 9 | targetSdkVersion 25 10 | versionCode 1 11 | versionName "1.0" 12 | 13 | testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" 14 | 15 | } 16 | buildTypes { 17 | release { 18 | minifyEnabled false 19 | proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 20 | } 21 | } 22 | } 23 | 24 | dependencies { 25 | compile fileTree(dir: 'libs', include: ['*.jar']) 26 | compile 'com.android.support:appcompat-v7:25.1.1' 27 | compile 'io.reactivex:rxjava:1.2.6' 28 | compile 'io.reactivex:rxandroid:1.2.1' 29 | compile 'com.android.support:design:25.1.1' 30 | 31 | } 32 | -------------------------------------------------------------------------------- /JetUtil/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # By default, the flags in this file are appended to flags specified 3 | # in /Users/ganguo/Android/sdk/tools/proguard/proguard-android.txt 4 | # You can edit the include path and order by changing the proguardFiles 5 | # directive in build.gradle. 6 | # 7 | # For more details, see 8 | # http://developer.android.com/guide/developing/tools/proguard.html 9 | 10 | # Add any project specific keep options here: 11 | 12 | # If your project uses WebView with JS, uncomment the following 13 | # and specify the fully qualified class name to the JavaScript interface 14 | # class: 15 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 16 | # public *; 17 | #} 18 | -------------------------------------------------------------------------------- /JetUtil/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 3 | 4 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /JetUtil/src/main/java/io/mindjet/jetutil/file/RxFile.java: -------------------------------------------------------------------------------- 1 | package io.mindjet.jetutil.file; 2 | 3 | import android.graphics.Bitmap; 4 | 5 | import java.io.File; 6 | import java.io.IOException; 7 | 8 | import rx.subjects.ReplaySubject; 9 | 10 | /** 11 | * Created by Jet on 2/9/17. 12 | */ 13 | 14 | public class RxFile { 15 | 16 | private volatile static RxFile rxFile; 17 | 18 | public static RxFile get() { 19 | if (rxFile == null) { 20 | synchronized (RxFile.class) { 21 | if (rxFile == null) { 22 | rxFile = new RxFile(); 23 | } 24 | } 25 | } 26 | return rxFile; 27 | } 28 | 29 | private ReplaySubject bitmapSubject; 30 | 31 | public ReplaySubject saveBitmap(final Bitmap bitmap, final File folder, final String name) { 32 | bitmapSubject = ReplaySubject.create(); 33 | try { 34 | String path = FileUtil.savePhoto(bitmap, folder, name); 35 | onSuccess(path); 36 | } catch (IOException e) { 37 | e.printStackTrace(); 38 | onFail(e); 39 | } 40 | return bitmapSubject; 41 | } 42 | 43 | private void onSuccess(String path) { 44 | if (bitmapSubject != null) { 45 | bitmapSubject.onNext(path); 46 | bitmapSubject.onCompleted(); 47 | } 48 | } 49 | 50 | private void onFail(Throwable t) { 51 | bitmapSubject.onError(t); 52 | } 53 | 54 | } 55 | -------------------------------------------------------------------------------- /JetUtil/src/main/java/io/mindjet/jetutil/hint/Toaster.java: -------------------------------------------------------------------------------- 1 | package io.mindjet.jetutil.hint; 2 | 3 | import android.content.Context; 4 | import android.support.annotation.StringRes; 5 | import android.widget.Toast; 6 | 7 | /** 8 | * Toast helper. 9 | *

10 | * Created by Mindjet on 2/9/17. 11 | */ 12 | 13 | public class Toaster { 14 | 15 | private static Toast toast; 16 | 17 | public static void toast(Context context, @StringRes int stringRes) { 18 | toast(context, context.getResources().getString(stringRes), Toast.LENGTH_SHORT); 19 | } 20 | 21 | public static void toast(Context context, @StringRes int stringRes, int duration) { 22 | toast(context, context.getResources().getString(stringRes), duration); 23 | } 24 | 25 | public static void toast(Context context, String message) { 26 | toast(context, message, Toast.LENGTH_SHORT); 27 | } 28 | 29 | public static void toast(Context context, String message, int duration) { 30 | if (toast == null) { 31 | toast = Toast.makeText(context, message, duration); 32 | } else { 33 | toast.setText(message); 34 | } 35 | toast.show(); 36 | } 37 | 38 | } 39 | -------------------------------------------------------------------------------- /JetUtil/src/main/java/io/mindjet/jetutil/task/Task.java: -------------------------------------------------------------------------------- 1 | package io.mindjet.jetutil.task; 2 | 3 | import android.os.Handler; 4 | import android.os.Looper; 5 | 6 | /** 7 | * Created by Jet on 2/17/17. 8 | */ 9 | 10 | public class Task { 11 | 12 | private static Handler handler = new Handler(Looper.getMainLooper()); 13 | 14 | public static void runOnUiThread(Runnable r) { 15 | handler.post(r); 16 | } 17 | 18 | public static void runOnUiThread(Runnable r, long time) { 19 | handler.postDelayed(r, time); 20 | } 21 | 22 | } 23 | -------------------------------------------------------------------------------- /JetUtil/src/main/java/io/mindjet/jetutil/version/VersionUtil.java: -------------------------------------------------------------------------------- 1 | package io.mindjet.jetutil.version; 2 | 3 | import android.os.Build; 4 | 5 | /** 6 | * Created by Jet on 3/7/17. 7 | */ 8 | 9 | public class VersionUtil { 10 | 11 | private static int _version = Build.VERSION.SDK_INT; 12 | 13 | public static boolean afterLollipop() { 14 | return _version >= Build.VERSION_CODES.LOLLIPOP; 15 | } 16 | 17 | public static boolean afterAPI(int version) { 18 | return _version >= version; 19 | } 20 | 21 | public static boolean afterKitKat() { 22 | return _version >= Build.VERSION_CODES.KITKAT; 23 | } 24 | 25 | } 26 | -------------------------------------------------------------------------------- /JetUtil/src/main/java/io/mindjet/jetutil/view/ColorUtil.java: -------------------------------------------------------------------------------- 1 | package io.mindjet.jetutil.view; 2 | 3 | import android.content.Context; 4 | import android.content.res.ColorStateList; 5 | import android.view.View; 6 | 7 | import io.mindjet.jetutil.logger.JLogger; 8 | 9 | /** 10 | * Created by Jet on 3/2/17. 11 | */ 12 | 13 | public class ColorUtil extends View { 14 | 15 | private static JLogger jLogger = JLogger.get("ColorUtil"); 16 | 17 | public ColorUtil(Context context) { 18 | super(context); 19 | } 20 | 21 | public static ColorStateList createColorStateList(int normalColor, int selectedColor) { 22 | final int[][] states = new int[2][]; 23 | final int[] colors = new int[2]; 24 | 25 | states[0] = View.SELECTED_STATE_SET; 26 | colors[0] = selectedColor; 27 | 28 | // Default enabled state 29 | states[1] = EMPTY_STATE_SET; 30 | colors[1] = normalColor; 31 | 32 | return new ColorStateList(states, colors); 33 | } 34 | 35 | } 36 | -------------------------------------------------------------------------------- /JetUtil/src/main/res/anim/fade_in.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | -------------------------------------------------------------------------------- /JetUtil/src/main/res/anim/fade_out.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /JetUtil/src/main/res/values/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | JetUtil 3 | 4 | -------------------------------------------------------------------------------- /JetWidget/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | -------------------------------------------------------------------------------- /JetWidget/build.gradle: -------------------------------------------------------------------------------- 1 | apply plugin: 'com.android.library' 2 | 3 | android { 4 | compileSdkVersion 25 5 | buildToolsVersion "25.0.2" 6 | 7 | defaultConfig { 8 | minSdkVersion 16 9 | targetSdkVersion 25 10 | versionCode 1 11 | versionName "1.0" 12 | 13 | testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" 14 | 15 | } 16 | buildTypes { 17 | release { 18 | minifyEnabled false 19 | proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 20 | } 21 | } 22 | } 23 | 24 | dependencies { 25 | compile fileTree(dir: 'libs', include: ['*.jar']) 26 | compile 'com.android.support:appcompat-v7:25.1.1' 27 | compile 'com.android.support:design:25.1.1' 28 | 29 | compile 'com.afollestad.material-dialogs:core:0.9.3.0' 30 | } 31 | -------------------------------------------------------------------------------- /JetWidget/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # By default, the flags in this file are appended to flags specified 3 | # in /Users/ganguo/Android/sdk/tools/proguard/proguard-android.txt 4 | # You can edit the include path and order by changing the proguardFiles 5 | # directive in build.gradle. 6 | # 7 | # For more details, see 8 | # http://developer.android.com/guide/developing/tools/proguard.html 9 | 10 | # Add any project specific keep options here: 11 | 12 | # If your project uses WebView with JS, uncomment the following 13 | # and specify the fully qualified class name to the JavaScript interface 14 | # class: 15 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 16 | # public *; 17 | #} 18 | -------------------------------------------------------------------------------- /JetWidget/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 10 | 11 | -------------------------------------------------------------------------------- /JetWidget/src/main/res/drawable-hdpi/ic_arrow_left.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mindjet/LiteReader/202e6e83e18e4bf77755dc1ed6579f696000c35a/JetWidget/src/main/res/drawable-hdpi/ic_arrow_left.png -------------------------------------------------------------------------------- /JetWidget/src/main/res/drawable-hdpi/ic_arrow_up.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mindjet/LiteReader/202e6e83e18e4bf77755dc1ed6579f696000c35a/JetWidget/src/main/res/drawable-hdpi/ic_arrow_up.png -------------------------------------------------------------------------------- /JetWidget/src/main/res/drawable-hdpi/ic_check.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mindjet/LiteReader/202e6e83e18e4bf77755dc1ed6579f696000c35a/JetWidget/src/main/res/drawable-hdpi/ic_check.png -------------------------------------------------------------------------------- /JetWidget/src/main/res/drawable-hdpi/ic_code_gray.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mindjet/LiteReader/202e6e83e18e4bf77755dc1ed6579f696000c35a/JetWidget/src/main/res/drawable-hdpi/ic_code_gray.png -------------------------------------------------------------------------------- /JetWidget/src/main/res/drawable-hdpi/ic_cross_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mindjet/LiteReader/202e6e83e18e4bf77755dc1ed6579f696000c35a/JetWidget/src/main/res/drawable-hdpi/ic_cross_round.png -------------------------------------------------------------------------------- /JetWidget/src/main/res/drawable-hdpi/ic_draft_gray.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mindjet/LiteReader/202e6e83e18e4bf77755dc1ed6579f696000c35a/JetWidget/src/main/res/drawable-hdpi/ic_draft_gray.png -------------------------------------------------------------------------------- /JetWidget/src/main/res/drawable-hdpi/ic_drawer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mindjet/LiteReader/202e6e83e18e4bf77755dc1ed6579f696000c35a/JetWidget/src/main/res/drawable-hdpi/ic_drawer.png -------------------------------------------------------------------------------- /JetWidget/src/main/res/drawable-hdpi/ic_drawer_gray.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mindjet/LiteReader/202e6e83e18e4bf77755dc1ed6579f696000c35a/JetWidget/src/main/res/drawable-hdpi/ic_drawer_gray.png -------------------------------------------------------------------------------- /JetWidget/src/main/res/drawable-hdpi/ic_earth_gray.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mindjet/LiteReader/202e6e83e18e4bf77755dc1ed6579f696000c35a/JetWidget/src/main/res/drawable-hdpi/ic_earth_gray.png -------------------------------------------------------------------------------- /JetWidget/src/main/res/drawable-hdpi/ic_face.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mindjet/LiteReader/202e6e83e18e4bf77755dc1ed6579f696000c35a/JetWidget/src/main/res/drawable-hdpi/ic_face.png -------------------------------------------------------------------------------- /JetWidget/src/main/res/drawable-hdpi/ic_face_gray.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mindjet/LiteReader/202e6e83e18e4bf77755dc1ed6579f696000c35a/JetWidget/src/main/res/drawable-hdpi/ic_face_gray.png -------------------------------------------------------------------------------- /JetWidget/src/main/res/drawable-hdpi/ic_favorite_gray.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mindjet/LiteReader/202e6e83e18e4bf77755dc1ed6579f696000c35a/JetWidget/src/main/res/drawable-hdpi/ic_favorite_gray.png -------------------------------------------------------------------------------- /JetWidget/src/main/res/drawable-hdpi/ic_inbox_gray.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mindjet/LiteReader/202e6e83e18e4bf77755dc1ed6579f696000c35a/JetWidget/src/main/res/drawable-hdpi/ic_inbox_gray.png -------------------------------------------------------------------------------- /JetWidget/src/main/res/drawable-hdpi/ic_location.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mindjet/LiteReader/202e6e83e18e4bf77755dc1ed6579f696000c35a/JetWidget/src/main/res/drawable-hdpi/ic_location.png -------------------------------------------------------------------------------- /JetWidget/src/main/res/drawable-hdpi/ic_location_gray.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mindjet/LiteReader/202e6e83e18e4bf77755dc1ed6579f696000c35a/JetWidget/src/main/res/drawable-hdpi/ic_location_gray.png -------------------------------------------------------------------------------- /JetWidget/src/main/res/drawable-hdpi/ic_mail_gray.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mindjet/LiteReader/202e6e83e18e4bf77755dc1ed6579f696000c35a/JetWidget/src/main/res/drawable-hdpi/ic_mail_gray.png -------------------------------------------------------------------------------- /JetWidget/src/main/res/drawable-hdpi/ic_more.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mindjet/LiteReader/202e6e83e18e4bf77755dc1ed6579f696000c35a/JetWidget/src/main/res/drawable-hdpi/ic_more.png -------------------------------------------------------------------------------- /JetWidget/src/main/res/drawable-hdpi/ic_qq.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mindjet/LiteReader/202e6e83e18e4bf77755dc1ed6579f696000c35a/JetWidget/src/main/res/drawable-hdpi/ic_qq.png -------------------------------------------------------------------------------- /JetWidget/src/main/res/drawable-hdpi/ic_qzone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mindjet/LiteReader/202e6e83e18e4bf77755dc1ed6579f696000c35a/JetWidget/src/main/res/drawable-hdpi/ic_qzone.png -------------------------------------------------------------------------------- /JetWidget/src/main/res/drawable-hdpi/ic_refresh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mindjet/LiteReader/202e6e83e18e4bf77755dc1ed6579f696000c35a/JetWidget/src/main/res/drawable-hdpi/ic_refresh.png -------------------------------------------------------------------------------- /JetWidget/src/main/res/drawable-hdpi/ic_refresh_gray.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mindjet/LiteReader/202e6e83e18e4bf77755dc1ed6579f696000c35a/JetWidget/src/main/res/drawable-hdpi/ic_refresh_gray.png -------------------------------------------------------------------------------- /JetWidget/src/main/res/drawable-hdpi/ic_sent.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mindjet/LiteReader/202e6e83e18e4bf77755dc1ed6579f696000c35a/JetWidget/src/main/res/drawable-hdpi/ic_sent.png -------------------------------------------------------------------------------- /JetWidget/src/main/res/drawable-hdpi/ic_sent_gray.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mindjet/LiteReader/202e6e83e18e4bf77755dc1ed6579f696000c35a/JetWidget/src/main/res/drawable-hdpi/ic_sent_gray.png -------------------------------------------------------------------------------- /JetWidget/src/main/res/drawable-hdpi/ic_setting.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mindjet/LiteReader/202e6e83e18e4bf77755dc1ed6579f696000c35a/JetWidget/src/main/res/drawable-hdpi/ic_setting.png -------------------------------------------------------------------------------- /JetWidget/src/main/res/drawable-hdpi/ic_setting_gray.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mindjet/LiteReader/202e6e83e18e4bf77755dc1ed6579f696000c35a/JetWidget/src/main/res/drawable-hdpi/ic_setting_gray.png -------------------------------------------------------------------------------- /JetWidget/src/main/res/drawable-hdpi/ic_share.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mindjet/LiteReader/202e6e83e18e4bf77755dc1ed6579f696000c35a/JetWidget/src/main/res/drawable-hdpi/ic_share.png -------------------------------------------------------------------------------- /JetWidget/src/main/res/drawable-hdpi/ic_share_gray.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mindjet/LiteReader/202e6e83e18e4bf77755dc1ed6579f696000c35a/JetWidget/src/main/res/drawable-hdpi/ic_share_gray.png -------------------------------------------------------------------------------- /JetWidget/src/main/res/drawable-hdpi/ic_star.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mindjet/LiteReader/202e6e83e18e4bf77755dc1ed6579f696000c35a/JetWidget/src/main/res/drawable-hdpi/ic_star.png -------------------------------------------------------------------------------- /JetWidget/src/main/res/drawable-hdpi/ic_star_empty.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mindjet/LiteReader/202e6e83e18e4bf77755dc1ed6579f696000c35a/JetWidget/src/main/res/drawable-hdpi/ic_star_empty.png -------------------------------------------------------------------------------- /JetWidget/src/main/res/drawable-hdpi/ic_star_gray.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mindjet/LiteReader/202e6e83e18e4bf77755dc1ed6579f696000c35a/JetWidget/src/main/res/drawable-hdpi/ic_star_gray.png -------------------------------------------------------------------------------- /JetWidget/src/main/res/drawable-hdpi/ic_track_gray.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mindjet/LiteReader/202e6e83e18e4bf77755dc1ed6579f696000c35a/JetWidget/src/main/res/drawable-hdpi/ic_track_gray.png -------------------------------------------------------------------------------- /JetWidget/src/main/res/drawable-hdpi/ic_up.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mindjet/LiteReader/202e6e83e18e4bf77755dc1ed6579f696000c35a/JetWidget/src/main/res/drawable-hdpi/ic_up.png -------------------------------------------------------------------------------- /JetWidget/src/main/res/drawable-hdpi/ic_up_gray.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mindjet/LiteReader/202e6e83e18e4bf77755dc1ed6579f696000c35a/JetWidget/src/main/res/drawable-hdpi/ic_up_gray.png -------------------------------------------------------------------------------- /JetWidget/src/main/res/drawable-hdpi/ic_wechat.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mindjet/LiteReader/202e6e83e18e4bf77755dc1ed6579f696000c35a/JetWidget/src/main/res/drawable-hdpi/ic_wechat.png -------------------------------------------------------------------------------- /JetWidget/src/main/res/drawable-hdpi/ic_weibo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mindjet/LiteReader/202e6e83e18e4bf77755dc1ed6579f696000c35a/JetWidget/src/main/res/drawable-hdpi/ic_weibo.png -------------------------------------------------------------------------------- /JetWidget/src/main/res/drawable-v21/ripple_borderless_default.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | -------------------------------------------------------------------------------- /JetWidget/src/main/res/drawable-v21/ripple_borderless_white.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | -------------------------------------------------------------------------------- /JetWidget/src/main/res/drawable-v21/ripple_default.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 8 | 9 | -------------------------------------------------------------------------------- /JetWidget/src/main/res/drawable-v21/ripple_theme.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /JetWidget/src/main/res/drawable-v21/ripple_white.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /JetWidget/src/main/res/drawable-xhdpi/ic_arrow_left.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mindjet/LiteReader/202e6e83e18e4bf77755dc1ed6579f696000c35a/JetWidget/src/main/res/drawable-xhdpi/ic_arrow_left.png -------------------------------------------------------------------------------- /JetWidget/src/main/res/drawable-xhdpi/ic_arrow_up.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mindjet/LiteReader/202e6e83e18e4bf77755dc1ed6579f696000c35a/JetWidget/src/main/res/drawable-xhdpi/ic_arrow_up.png -------------------------------------------------------------------------------- /JetWidget/src/main/res/drawable-xhdpi/ic_check.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mindjet/LiteReader/202e6e83e18e4bf77755dc1ed6579f696000c35a/JetWidget/src/main/res/drawable-xhdpi/ic_check.png -------------------------------------------------------------------------------- /JetWidget/src/main/res/drawable-xhdpi/ic_code_gray.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mindjet/LiteReader/202e6e83e18e4bf77755dc1ed6579f696000c35a/JetWidget/src/main/res/drawable-xhdpi/ic_code_gray.png -------------------------------------------------------------------------------- /JetWidget/src/main/res/drawable-xhdpi/ic_cross_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mindjet/LiteReader/202e6e83e18e4bf77755dc1ed6579f696000c35a/JetWidget/src/main/res/drawable-xhdpi/ic_cross_round.png -------------------------------------------------------------------------------- /JetWidget/src/main/res/drawable-xhdpi/ic_dislike.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mindjet/LiteReader/202e6e83e18e4bf77755dc1ed6579f696000c35a/JetWidget/src/main/res/drawable-xhdpi/ic_dislike.png -------------------------------------------------------------------------------- /JetWidget/src/main/res/drawable-xhdpi/ic_draft_gray.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mindjet/LiteReader/202e6e83e18e4bf77755dc1ed6579f696000c35a/JetWidget/src/main/res/drawable-xhdpi/ic_draft_gray.png -------------------------------------------------------------------------------- /JetWidget/src/main/res/drawable-xhdpi/ic_drawer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mindjet/LiteReader/202e6e83e18e4bf77755dc1ed6579f696000c35a/JetWidget/src/main/res/drawable-xhdpi/ic_drawer.png -------------------------------------------------------------------------------- /JetWidget/src/main/res/drawable-xhdpi/ic_drawer_gray.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mindjet/LiteReader/202e6e83e18e4bf77755dc1ed6579f696000c35a/JetWidget/src/main/res/drawable-xhdpi/ic_drawer_gray.png -------------------------------------------------------------------------------- /JetWidget/src/main/res/drawable-xhdpi/ic_earth_gray.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mindjet/LiteReader/202e6e83e18e4bf77755dc1ed6579f696000c35a/JetWidget/src/main/res/drawable-xhdpi/ic_earth_gray.png -------------------------------------------------------------------------------- /JetWidget/src/main/res/drawable-xhdpi/ic_face.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mindjet/LiteReader/202e6e83e18e4bf77755dc1ed6579f696000c35a/JetWidget/src/main/res/drawable-xhdpi/ic_face.png -------------------------------------------------------------------------------- /JetWidget/src/main/res/drawable-xhdpi/ic_face_gray.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mindjet/LiteReader/202e6e83e18e4bf77755dc1ed6579f696000c35a/JetWidget/src/main/res/drawable-xhdpi/ic_face_gray.png -------------------------------------------------------------------------------- /JetWidget/src/main/res/drawable-xhdpi/ic_favorite_gray.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mindjet/LiteReader/202e6e83e18e4bf77755dc1ed6579f696000c35a/JetWidget/src/main/res/drawable-xhdpi/ic_favorite_gray.png -------------------------------------------------------------------------------- /JetWidget/src/main/res/drawable-xhdpi/ic_inbox_gray.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mindjet/LiteReader/202e6e83e18e4bf77755dc1ed6579f696000c35a/JetWidget/src/main/res/drawable-xhdpi/ic_inbox_gray.png -------------------------------------------------------------------------------- /JetWidget/src/main/res/drawable-xhdpi/ic_like.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mindjet/LiteReader/202e6e83e18e4bf77755dc1ed6579f696000c35a/JetWidget/src/main/res/drawable-xhdpi/ic_like.png -------------------------------------------------------------------------------- /JetWidget/src/main/res/drawable-xhdpi/ic_location.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mindjet/LiteReader/202e6e83e18e4bf77755dc1ed6579f696000c35a/JetWidget/src/main/res/drawable-xhdpi/ic_location.png -------------------------------------------------------------------------------- /JetWidget/src/main/res/drawable-xhdpi/ic_location_gray.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mindjet/LiteReader/202e6e83e18e4bf77755dc1ed6579f696000c35a/JetWidget/src/main/res/drawable-xhdpi/ic_location_gray.png -------------------------------------------------------------------------------- /JetWidget/src/main/res/drawable-xhdpi/ic_mail_gray.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mindjet/LiteReader/202e6e83e18e4bf77755dc1ed6579f696000c35a/JetWidget/src/main/res/drawable-xhdpi/ic_mail_gray.png -------------------------------------------------------------------------------- /JetWidget/src/main/res/drawable-xhdpi/ic_more.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mindjet/LiteReader/202e6e83e18e4bf77755dc1ed6579f696000c35a/JetWidget/src/main/res/drawable-xhdpi/ic_more.png -------------------------------------------------------------------------------- /JetWidget/src/main/res/drawable-xhdpi/ic_qq.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mindjet/LiteReader/202e6e83e18e4bf77755dc1ed6579f696000c35a/JetWidget/src/main/res/drawable-xhdpi/ic_qq.png -------------------------------------------------------------------------------- /JetWidget/src/main/res/drawable-xhdpi/ic_qzone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mindjet/LiteReader/202e6e83e18e4bf77755dc1ed6579f696000c35a/JetWidget/src/main/res/drawable-xhdpi/ic_qzone.png -------------------------------------------------------------------------------- /JetWidget/src/main/res/drawable-xhdpi/ic_refresh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mindjet/LiteReader/202e6e83e18e4bf77755dc1ed6579f696000c35a/JetWidget/src/main/res/drawable-xhdpi/ic_refresh.png -------------------------------------------------------------------------------- /JetWidget/src/main/res/drawable-xhdpi/ic_refresh_gray.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mindjet/LiteReader/202e6e83e18e4bf77755dc1ed6579f696000c35a/JetWidget/src/main/res/drawable-xhdpi/ic_refresh_gray.png -------------------------------------------------------------------------------- /JetWidget/src/main/res/drawable-xhdpi/ic_sent.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mindjet/LiteReader/202e6e83e18e4bf77755dc1ed6579f696000c35a/JetWidget/src/main/res/drawable-xhdpi/ic_sent.png -------------------------------------------------------------------------------- /JetWidget/src/main/res/drawable-xhdpi/ic_sent_gray.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mindjet/LiteReader/202e6e83e18e4bf77755dc1ed6579f696000c35a/JetWidget/src/main/res/drawable-xhdpi/ic_sent_gray.png -------------------------------------------------------------------------------- /JetWidget/src/main/res/drawable-xhdpi/ic_setting.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mindjet/LiteReader/202e6e83e18e4bf77755dc1ed6579f696000c35a/JetWidget/src/main/res/drawable-xhdpi/ic_setting.png -------------------------------------------------------------------------------- /JetWidget/src/main/res/drawable-xhdpi/ic_setting_gray.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mindjet/LiteReader/202e6e83e18e4bf77755dc1ed6579f696000c35a/JetWidget/src/main/res/drawable-xhdpi/ic_setting_gray.png -------------------------------------------------------------------------------- /JetWidget/src/main/res/drawable-xhdpi/ic_share.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mindjet/LiteReader/202e6e83e18e4bf77755dc1ed6579f696000c35a/JetWidget/src/main/res/drawable-xhdpi/ic_share.png -------------------------------------------------------------------------------- /JetWidget/src/main/res/drawable-xhdpi/ic_share_gray.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mindjet/LiteReader/202e6e83e18e4bf77755dc1ed6579f696000c35a/JetWidget/src/main/res/drawable-xhdpi/ic_share_gray.png -------------------------------------------------------------------------------- /JetWidget/src/main/res/drawable-xhdpi/ic_star.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mindjet/LiteReader/202e6e83e18e4bf77755dc1ed6579f696000c35a/JetWidget/src/main/res/drawable-xhdpi/ic_star.png -------------------------------------------------------------------------------- /JetWidget/src/main/res/drawable-xhdpi/ic_star_empty.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mindjet/LiteReader/202e6e83e18e4bf77755dc1ed6579f696000c35a/JetWidget/src/main/res/drawable-xhdpi/ic_star_empty.png -------------------------------------------------------------------------------- /JetWidget/src/main/res/drawable-xhdpi/ic_star_gray.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mindjet/LiteReader/202e6e83e18e4bf77755dc1ed6579f696000c35a/JetWidget/src/main/res/drawable-xhdpi/ic_star_gray.png -------------------------------------------------------------------------------- /JetWidget/src/main/res/drawable-xhdpi/ic_track_gray.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mindjet/LiteReader/202e6e83e18e4bf77755dc1ed6579f696000c35a/JetWidget/src/main/res/drawable-xhdpi/ic_track_gray.png -------------------------------------------------------------------------------- /JetWidget/src/main/res/drawable-xhdpi/ic_up.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mindjet/LiteReader/202e6e83e18e4bf77755dc1ed6579f696000c35a/JetWidget/src/main/res/drawable-xhdpi/ic_up.png -------------------------------------------------------------------------------- /JetWidget/src/main/res/drawable-xhdpi/ic_up_gray.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mindjet/LiteReader/202e6e83e18e4bf77755dc1ed6579f696000c35a/JetWidget/src/main/res/drawable-xhdpi/ic_up_gray.png -------------------------------------------------------------------------------- /JetWidget/src/main/res/drawable-xhdpi/ic_wechat.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mindjet/LiteReader/202e6e83e18e4bf77755dc1ed6579f696000c35a/JetWidget/src/main/res/drawable-xhdpi/ic_wechat.png -------------------------------------------------------------------------------- /JetWidget/src/main/res/drawable-xhdpi/ic_weibo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mindjet/LiteReader/202e6e83e18e4bf77755dc1ed6579f696000c35a/JetWidget/src/main/res/drawable-xhdpi/ic_weibo.png -------------------------------------------------------------------------------- /JetWidget/src/main/res/drawable-xxhdpi/ic_arrow_left.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mindjet/LiteReader/202e6e83e18e4bf77755dc1ed6579f696000c35a/JetWidget/src/main/res/drawable-xxhdpi/ic_arrow_left.png -------------------------------------------------------------------------------- /JetWidget/src/main/res/drawable-xxhdpi/ic_arrow_up.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mindjet/LiteReader/202e6e83e18e4bf77755dc1ed6579f696000c35a/JetWidget/src/main/res/drawable-xxhdpi/ic_arrow_up.png -------------------------------------------------------------------------------- /JetWidget/src/main/res/drawable-xxhdpi/ic_check.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mindjet/LiteReader/202e6e83e18e4bf77755dc1ed6579f696000c35a/JetWidget/src/main/res/drawable-xxhdpi/ic_check.png -------------------------------------------------------------------------------- /JetWidget/src/main/res/drawable-xxhdpi/ic_code_gray.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mindjet/LiteReader/202e6e83e18e4bf77755dc1ed6579f696000c35a/JetWidget/src/main/res/drawable-xxhdpi/ic_code_gray.png -------------------------------------------------------------------------------- /JetWidget/src/main/res/drawable-xxhdpi/ic_cross_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mindjet/LiteReader/202e6e83e18e4bf77755dc1ed6579f696000c35a/JetWidget/src/main/res/drawable-xxhdpi/ic_cross_round.png -------------------------------------------------------------------------------- /JetWidget/src/main/res/drawable-xxhdpi/ic_dislike.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mindjet/LiteReader/202e6e83e18e4bf77755dc1ed6579f696000c35a/JetWidget/src/main/res/drawable-xxhdpi/ic_dislike.png -------------------------------------------------------------------------------- /JetWidget/src/main/res/drawable-xxhdpi/ic_draft_gray.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mindjet/LiteReader/202e6e83e18e4bf77755dc1ed6579f696000c35a/JetWidget/src/main/res/drawable-xxhdpi/ic_draft_gray.png -------------------------------------------------------------------------------- /JetWidget/src/main/res/drawable-xxhdpi/ic_drawer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mindjet/LiteReader/202e6e83e18e4bf77755dc1ed6579f696000c35a/JetWidget/src/main/res/drawable-xxhdpi/ic_drawer.png -------------------------------------------------------------------------------- /JetWidget/src/main/res/drawable-xxhdpi/ic_drawer_gray.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mindjet/LiteReader/202e6e83e18e4bf77755dc1ed6579f696000c35a/JetWidget/src/main/res/drawable-xxhdpi/ic_drawer_gray.png -------------------------------------------------------------------------------- /JetWidget/src/main/res/drawable-xxhdpi/ic_earth_gray.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mindjet/LiteReader/202e6e83e18e4bf77755dc1ed6579f696000c35a/JetWidget/src/main/res/drawable-xxhdpi/ic_earth_gray.png -------------------------------------------------------------------------------- /JetWidget/src/main/res/drawable-xxhdpi/ic_face.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mindjet/LiteReader/202e6e83e18e4bf77755dc1ed6579f696000c35a/JetWidget/src/main/res/drawable-xxhdpi/ic_face.png -------------------------------------------------------------------------------- /JetWidget/src/main/res/drawable-xxhdpi/ic_face_gray.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mindjet/LiteReader/202e6e83e18e4bf77755dc1ed6579f696000c35a/JetWidget/src/main/res/drawable-xxhdpi/ic_face_gray.png -------------------------------------------------------------------------------- /JetWidget/src/main/res/drawable-xxhdpi/ic_favorite_gray.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mindjet/LiteReader/202e6e83e18e4bf77755dc1ed6579f696000c35a/JetWidget/src/main/res/drawable-xxhdpi/ic_favorite_gray.png -------------------------------------------------------------------------------- /JetWidget/src/main/res/drawable-xxhdpi/ic_inbox_gray.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mindjet/LiteReader/202e6e83e18e4bf77755dc1ed6579f696000c35a/JetWidget/src/main/res/drawable-xxhdpi/ic_inbox_gray.png -------------------------------------------------------------------------------- /JetWidget/src/main/res/drawable-xxhdpi/ic_like.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mindjet/LiteReader/202e6e83e18e4bf77755dc1ed6579f696000c35a/JetWidget/src/main/res/drawable-xxhdpi/ic_like.png -------------------------------------------------------------------------------- /JetWidget/src/main/res/drawable-xxhdpi/ic_location.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mindjet/LiteReader/202e6e83e18e4bf77755dc1ed6579f696000c35a/JetWidget/src/main/res/drawable-xxhdpi/ic_location.png -------------------------------------------------------------------------------- /JetWidget/src/main/res/drawable-xxhdpi/ic_location_gray.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mindjet/LiteReader/202e6e83e18e4bf77755dc1ed6579f696000c35a/JetWidget/src/main/res/drawable-xxhdpi/ic_location_gray.png -------------------------------------------------------------------------------- /JetWidget/src/main/res/drawable-xxhdpi/ic_mail_gray.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mindjet/LiteReader/202e6e83e18e4bf77755dc1ed6579f696000c35a/JetWidget/src/main/res/drawable-xxhdpi/ic_mail_gray.png -------------------------------------------------------------------------------- /JetWidget/src/main/res/drawable-xxhdpi/ic_more.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mindjet/LiteReader/202e6e83e18e4bf77755dc1ed6579f696000c35a/JetWidget/src/main/res/drawable-xxhdpi/ic_more.png -------------------------------------------------------------------------------- /JetWidget/src/main/res/drawable-xxhdpi/ic_qq.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mindjet/LiteReader/202e6e83e18e4bf77755dc1ed6579f696000c35a/JetWidget/src/main/res/drawable-xxhdpi/ic_qq.png -------------------------------------------------------------------------------- /JetWidget/src/main/res/drawable-xxhdpi/ic_qzone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mindjet/LiteReader/202e6e83e18e4bf77755dc1ed6579f696000c35a/JetWidget/src/main/res/drawable-xxhdpi/ic_qzone.png -------------------------------------------------------------------------------- /JetWidget/src/main/res/drawable-xxhdpi/ic_refresh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mindjet/LiteReader/202e6e83e18e4bf77755dc1ed6579f696000c35a/JetWidget/src/main/res/drawable-xxhdpi/ic_refresh.png -------------------------------------------------------------------------------- /JetWidget/src/main/res/drawable-xxhdpi/ic_refresh_gray.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mindjet/LiteReader/202e6e83e18e4bf77755dc1ed6579f696000c35a/JetWidget/src/main/res/drawable-xxhdpi/ic_refresh_gray.png -------------------------------------------------------------------------------- /JetWidget/src/main/res/drawable-xxhdpi/ic_sent.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mindjet/LiteReader/202e6e83e18e4bf77755dc1ed6579f696000c35a/JetWidget/src/main/res/drawable-xxhdpi/ic_sent.png -------------------------------------------------------------------------------- /JetWidget/src/main/res/drawable-xxhdpi/ic_sent_gray.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mindjet/LiteReader/202e6e83e18e4bf77755dc1ed6579f696000c35a/JetWidget/src/main/res/drawable-xxhdpi/ic_sent_gray.png -------------------------------------------------------------------------------- /JetWidget/src/main/res/drawable-xxhdpi/ic_setting.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mindjet/LiteReader/202e6e83e18e4bf77755dc1ed6579f696000c35a/JetWidget/src/main/res/drawable-xxhdpi/ic_setting.png -------------------------------------------------------------------------------- /JetWidget/src/main/res/drawable-xxhdpi/ic_setting_gray.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mindjet/LiteReader/202e6e83e18e4bf77755dc1ed6579f696000c35a/JetWidget/src/main/res/drawable-xxhdpi/ic_setting_gray.png -------------------------------------------------------------------------------- /JetWidget/src/main/res/drawable-xxhdpi/ic_share.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mindjet/LiteReader/202e6e83e18e4bf77755dc1ed6579f696000c35a/JetWidget/src/main/res/drawable-xxhdpi/ic_share.png -------------------------------------------------------------------------------- /JetWidget/src/main/res/drawable-xxhdpi/ic_share_gray.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mindjet/LiteReader/202e6e83e18e4bf77755dc1ed6579f696000c35a/JetWidget/src/main/res/drawable-xxhdpi/ic_share_gray.png -------------------------------------------------------------------------------- /JetWidget/src/main/res/drawable-xxhdpi/ic_star.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mindjet/LiteReader/202e6e83e18e4bf77755dc1ed6579f696000c35a/JetWidget/src/main/res/drawable-xxhdpi/ic_star.png -------------------------------------------------------------------------------- /JetWidget/src/main/res/drawable-xxhdpi/ic_star_empty.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mindjet/LiteReader/202e6e83e18e4bf77755dc1ed6579f696000c35a/JetWidget/src/main/res/drawable-xxhdpi/ic_star_empty.png -------------------------------------------------------------------------------- /JetWidget/src/main/res/drawable-xxhdpi/ic_star_gray.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mindjet/LiteReader/202e6e83e18e4bf77755dc1ed6579f696000c35a/JetWidget/src/main/res/drawable-xxhdpi/ic_star_gray.png -------------------------------------------------------------------------------- /JetWidget/src/main/res/drawable-xxhdpi/ic_track_gray.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mindjet/LiteReader/202e6e83e18e4bf77755dc1ed6579f696000c35a/JetWidget/src/main/res/drawable-xxhdpi/ic_track_gray.png -------------------------------------------------------------------------------- /JetWidget/src/main/res/drawable-xxhdpi/ic_up.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mindjet/LiteReader/202e6e83e18e4bf77755dc1ed6579f696000c35a/JetWidget/src/main/res/drawable-xxhdpi/ic_up.png -------------------------------------------------------------------------------- /JetWidget/src/main/res/drawable-xxhdpi/ic_up_gray.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mindjet/LiteReader/202e6e83e18e4bf77755dc1ed6579f696000c35a/JetWidget/src/main/res/drawable-xxhdpi/ic_up_gray.png -------------------------------------------------------------------------------- /JetWidget/src/main/res/drawable-xxhdpi/ic_wechat.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mindjet/LiteReader/202e6e83e18e4bf77755dc1ed6579f696000c35a/JetWidget/src/main/res/drawable-xxhdpi/ic_wechat.png -------------------------------------------------------------------------------- /JetWidget/src/main/res/drawable-xxhdpi/ic_weibo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mindjet/LiteReader/202e6e83e18e4bf77755dc1ed6579f696000c35a/JetWidget/src/main/res/drawable-xxhdpi/ic_weibo.png -------------------------------------------------------------------------------- /JetWidget/src/main/res/drawable/ic_down_gray.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /JetWidget/src/main/res/drawable/ripple_borderless_default.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /JetWidget/src/main/res/drawable/ripple_borderless_white.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /JetWidget/src/main/res/drawable/ripple_default.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /JetWidget/src/main/res/drawable/ripple_theme.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /JetWidget/src/main/res/drawable/ripple_white.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /JetWidget/src/main/res/drawable/shape_cursor_normal.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /JetWidget/src/main/res/drawable/shape_cursor_selected.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /JetWidget/src/main/res/drawable/shape_gradient_gray.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 9 | 10 | -------------------------------------------------------------------------------- /JetWidget/src/main/res/drawable/test_image.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mindjet/LiteReader/202e6e83e18e4bf77755dc1ed6579f696000c35a/JetWidget/src/main/res/drawable/test_image.png -------------------------------------------------------------------------------- /JetWidget/src/main/res/values-v19/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 10 | 11 | -------------------------------------------------------------------------------- /JetWidget/src/main/res/values-v21/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 11 | 12 | -------------------------------------------------------------------------------- /JetWidget/src/main/res/values/colors.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | #3F51B5 4 | #303F9F 5 | #FF4081 6 | 7 | -------------------------------------------------------------------------------- /JetWidget/src/main/res/values/dimens.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 16dp 4 | 16dp 5 | 6 | 25dp 7 | 8 | 15sp 9 | 12sp 10 | 18sp 11 | 20sp 12 | 25sp 13 | 14 | 15dp 15 | 10dp 16 | 25dp 17 | 5dp 18 | 2dp 19 | 20 | 21 | -------------------------------------------------------------------------------- /JetWidget/src/main/res/values/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | JetWidget 3 | 4 | -------------------------------------------------------------------------------- /JetWidget/src/main/res/values/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 10 | 11 | 12 | 13 | 17 | 18 | 22 | 23 | 26 | 27 | 31 | 32 | 33 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2017 郑颖铎 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /app/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | 3 | -------------------------------------------------------------------------------- /app/build.gradle: -------------------------------------------------------------------------------- 1 | apply plugin: 'com.android.application' 2 | apply from: 'deploy.gradle' 3 | 4 | dependencies { 5 | compile fileTree(dir: 'libs', include: ['*.jar']) 6 | androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', { 7 | exclude group: 'com.android.support', module: 'support-annotations' 8 | exclude group: 'com.google.code.findbugs' 9 | }) 10 | compile 'com.android.support:appcompat-v7:25.1.1' 11 | testCompile 'junit:junit:4.12' 12 | 13 | compile project(':JetUtil') 14 | compile project(':JetImage') 15 | compile(project(':JetGear')) { 16 | exclude module: ':JetUtil' 17 | exclude module: ':JetImage' 18 | } 19 | compile 'com.makeramen:roundedimageview:2.3.0' 20 | } 21 | -------------------------------------------------------------------------------- /app/jetpack_dev.jks: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mindjet/LiteReader/202e6e83e18e4bf77755dc1ed6579f696000c35a/app/jetpack_dev.jks -------------------------------------------------------------------------------- /app/libs/jsoup-1.9.2.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mindjet/LiteReader/202e6e83e18e4bf77755dc1ed6579f696000c35a/app/libs/jsoup-1.9.2.jar -------------------------------------------------------------------------------- /app/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # By default, the flags in this file are appended to flags specified 3 | # in /Users/ganguo/Android/sdk/tools/proguard/proguard-android.txt 4 | # You can edit the include path and order by changing the proguardFiles 5 | # directive in build.gradle. 6 | # 7 | # For more details, see 8 | # http://developer.android.com/guide/developing/tools/proguard.html 9 | 10 | # Add any project specific keep options here: 11 | 12 | # If your project uses WebView with JS, uncomment the following 13 | # and specify the fully qualified class name to the JavaScript interface 14 | # class: 15 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 16 | # public *; 17 | #} 18 | -------------------------------------------------------------------------------- /app/src/androidTest/java/io/mindjet/jetpack/ExampleInstrumentedTest.java: -------------------------------------------------------------------------------- 1 | package io.mindjet.litereader; 2 | 3 | import android.content.Context; 4 | import android.support.test.InstrumentationRegistry; 5 | import android.support.test.runner.AndroidJUnit4; 6 | 7 | import org.junit.Test; 8 | import org.junit.runner.RunWith; 9 | 10 | import static org.junit.Assert.*; 11 | 12 | /** 13 | * Instrumentation test, which will execute on an Android device. 14 | * 15 | * @see Testing documentation 16 | */ 17 | @RunWith(AndroidJUnit4.class) 18 | public class ExampleInstrumentedTest { 19 | @Test 20 | public void useAppContext() throws Exception { 21 | // Context of the app under test. 22 | Context appContext = InstrumentationRegistry.getTargetContext(); 23 | 24 | assertEquals("io.mindjet.litereader", appContext.getPackageName()); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /app/src/main/assets/fonts/Courgette-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mindjet/LiteReader/202e6e83e18e4bf77755dc1ed6579f696000c35a/app/src/main/assets/fonts/Courgette-Regular.ttf -------------------------------------------------------------------------------- /app/src/main/assets/fonts/Pacifico-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mindjet/LiteReader/202e6e83e18e4bf77755dc1ed6579f696000c35a/app/src/main/assets/fonts/Pacifico-Regular.ttf -------------------------------------------------------------------------------- /app/src/main/assets/me.json: -------------------------------------------------------------------------------- 1 | { 2 | "intro":"我是一个年轻的Android开发工程师,毕业于中山大学,这个app是我的毕业设计。", 3 | "mail":"pearl920@outlook.com", 4 | "website":"mindjet.github.io", 5 | "github":"www.github.com/Mindjet" 6 | } -------------------------------------------------------------------------------- /app/src/main/java/io/mindjet/litereader/BaseApp.java: -------------------------------------------------------------------------------- 1 | package io.mindjet.litereader; 2 | 3 | import android.app.Application; 4 | import android.os.Environment; 5 | 6 | import java.io.File; 7 | 8 | import io.mindjet.jetgear.network.ServiceGen; 9 | import io.mindjet.jetimage.picker.ImagePicker; 10 | import io.mindjet.litereader.BuildConfig; 11 | 12 | /** 13 | * Created by Jet on 2/8/17. 14 | */ 15 | 16 | public class BaseApp extends Application { 17 | 18 | private static BaseApp baseApp; 19 | private File appDir; 20 | 21 | @Override 22 | public void onCreate() { 23 | super.onCreate(); 24 | baseApp = this; 25 | BaseEnv.init(this); 26 | ServiceGen.init(BuildConfig.BASE_URL, BuildConfig.BUILD_TYPE); 27 | makeAppDir(); 28 | ImagePicker.setImagePath(Environment.getExternalStorageDirectory() + "/" + BuildConfig.DATA_PATH); 29 | } 30 | 31 | /** 32 | * Make a directory for this application. 33 | */ 34 | private void makeAppDir() { 35 | appDir = new File(Environment.getExternalStorageDirectory() + "/" + BuildConfig.DATA_PATH); 36 | if (!appDir.exists()) 37 | appDir.mkdir(); 38 | } 39 | 40 | public static BaseApp me() { 41 | return baseApp; 42 | } 43 | 44 | } 45 | -------------------------------------------------------------------------------- /app/src/main/java/io/mindjet/litereader/BaseEnv.java: -------------------------------------------------------------------------------- 1 | package io.mindjet.litereader; 2 | 3 | import android.content.Context; 4 | import android.os.Build; 5 | 6 | import io.mindjet.litereader.BuildConfig; 7 | import io.mindjet.jetutil.logger.JLogger; 8 | 9 | 10 | /** 11 | * Created by Jet on 2/17/17. 12 | */ 13 | 14 | public class BaseEnv { 15 | 16 | private static JLogger jLogger = JLogger.get(BaseEnv.class.getSimpleName()); 17 | 18 | public static void init(Context context) { 19 | jLogger.i("************************************"); 20 | jLogger.i("APPLICATION ID: " + BuildConfig.APPLICATION_ID); 21 | jLogger.i("BUILD TYPE: " + BuildConfig.BUILD_TYPE); 22 | jLogger.i("PRODUCT FLAVOR: " + BuildConfig.FLAVOR); 23 | jLogger.i("SYSTEM API: API " + Build.VERSION.SDK_INT); 24 | jLogger.i("VERSION CODE: " + BuildConfig.VERSION_CODE); 25 | jLogger.i("VERSION NAME: " + BuildConfig.VERSION_NAME); 26 | jLogger.i("BASE URL: " + BuildConfig.BASE_URL); 27 | jLogger.i("SCREEN SIZE: " + context.getResources().getDisplayMetrics().heightPixels + "x" + context.getResources().getDisplayMetrics().widthPixels); 28 | jLogger.i("************************************"); 29 | } 30 | 31 | } 32 | -------------------------------------------------------------------------------- /app/src/main/java/io/mindjet/litereader/adapter/ColumnViewPagerAdapter.java: -------------------------------------------------------------------------------- 1 | package io.mindjet.litereader.adapter; 2 | 3 | import android.databinding.ViewDataBinding; 4 | import android.view.ViewGroup; 5 | 6 | import io.mindjet.jetgear.adapter.ViewPagerAdapter; 7 | import io.mindjet.jetgear.mvvm.viewmodel.ViewModelBinder; 8 | import io.mindjet.jetgear.mvvm.viewmodel.list.SwipeRecyclerViewModel; 9 | 10 | /** 11 | * Created by Jet on 3/13/17. 12 | */ 13 | 14 | public class ColumnViewPagerAdapter extends ViewPagerAdapter { 15 | 16 | @Override 17 | protected Object initItem(ViewGroup container, SwipeRecyclerViewModel item, String title, int position) { 18 | ViewDataBinding binding = ViewModelBinder.bind(container, item); 19 | return binding.getRoot(); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /app/src/main/java/io/mindjet/litereader/adapter/ReviewViewPagerAdapter.java: -------------------------------------------------------------------------------- 1 | package io.mindjet.litereader.adapter; 2 | 3 | import android.databinding.ViewDataBinding; 4 | import android.view.ViewGroup; 5 | 6 | import io.mindjet.jetgear.adapter.ViewPagerAdapter; 7 | import io.mindjet.jetgear.mvvm.viewmodel.ViewModelBinder; 8 | import io.mindjet.jetgear.mvvm.viewmodel.list.SwipeRecyclerViewModel; 9 | 10 | /** 11 | * Created by Jet on 3/21/17. 12 | */ 13 | 14 | public class ReviewViewPagerAdapter extends ViewPagerAdapter { 15 | 16 | @Override 17 | protected Object initItem(ViewGroup container, SwipeRecyclerViewModel item, String title, int position) { 18 | ViewDataBinding binding = ViewModelBinder.bind(container, item); 19 | return binding.getRoot(); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /app/src/main/java/io/mindjet/litereader/entity/ChannelCode.java: -------------------------------------------------------------------------------- 1 | package io.mindjet.litereader.entity; 2 | 3 | /** 4 | * 频道代码 5 | *

6 | * Created by Mindjet on 2017/4/13. 7 | */ 8 | 9 | public class ChannelCode { 10 | 11 | //TODO 注意后期更新频道数目 12 | 13 | public final static String ZHIHU = "ZHIHU"; 14 | public final static String DAILY = "DAILY"; 15 | public final static String DOUBAN_MOVIE = "DOUBAN_MOVIE"; 16 | public final static String ONE_REVIEW = "ONE_REVIEW"; 17 | public final static String ONE_ARTICLE = "ONE_ARTICLE"; 18 | public final static String DOUBAN_BOOK = "DOUBAN_BOOK"; 19 | 20 | } 21 | -------------------------------------------------------------------------------- /app/src/main/java/io/mindjet/litereader/http/SimpleHttpSubscriber.java: -------------------------------------------------------------------------------- 1 | package io.mindjet.litereader.http; 2 | 3 | import java.net.SocketTimeoutException; 4 | import java.net.UnknownHostException; 5 | 6 | import io.mindjet.jetutil.hint.Toaster; 7 | import io.mindjet.jetutil.logger.JLogger; 8 | import io.mindjet.litereader.BaseApp; 9 | import rx.Subscriber; 10 | 11 | /** 12 | * 统一处理 error 信息 13 | *

14 | * Created by Mindjet on 2017/4/19. 15 | */ 16 | 17 | public abstract class SimpleHttpSubscriber extends Subscriber { 18 | 19 | private JLogger jLogger = JLogger.get(getClass().getSimpleName()); 20 | 21 | @Override 22 | public void onError(Throwable throwable) { 23 | if (throwable instanceof UnknownHostException) { 24 | Toaster.toast(BaseApp.me(), "无法连接至服务器,请检查您的网络连接或者稍后再试。"); 25 | } else if (throwable instanceof SocketTimeoutException) { 26 | Toaster.toast(BaseApp.me(), "连接服务器超时,请重试。"); 27 | } else { 28 | Toaster.toast(BaseApp.me(), throwable.getMessage()); 29 | } 30 | throwable.printStackTrace(); 31 | onFailed(); 32 | onCompleted(); //默认情况下,跑入error后不会执行onComplete 33 | } 34 | 35 | protected void onFailed() { 36 | 37 | } 38 | 39 | @Override 40 | public void onCompleted() { 41 | 42 | } 43 | 44 | @Override 45 | public abstract void onNext(T t); 46 | 47 | } 48 | -------------------------------------------------------------------------------- /app/src/main/java/io/mindjet/litereader/http/ThreadDispatcher.java: -------------------------------------------------------------------------------- 1 | package io.mindjet.litereader.http; 2 | 3 | import rx.Observable; 4 | import rx.android.schedulers.AndroidSchedulers; 5 | import rx.schedulers.Schedulers; 6 | 7 | /** 8 | * 统一切换线程 9 | *

10 | * Created by Mindjet on 2017/4/16. 11 | */ 12 | 13 | public class ThreadDispatcher implements Observable.Transformer { 14 | 15 | @Override 16 | public Observable call(Observable observable) { 17 | return observable.subscribeOn(Schedulers.io()) 18 | .observeOn(AndroidSchedulers.mainThread()); 19 | } 20 | 21 | } 22 | -------------------------------------------------------------------------------- /app/src/main/java/io/mindjet/litereader/model/item/DoubanMovieItem.java: -------------------------------------------------------------------------------- 1 | package io.mindjet.litereader.model.item; 2 | 3 | import com.google.gson.annotations.SerializedName; 4 | 5 | import java.util.List; 6 | 7 | import io.mindjet.litereader.model.item.douban.Images; 8 | import io.mindjet.litereader.model.item.douban.Rating; 9 | import io.mindjet.litereader.model.item.douban.Staff; 10 | 11 | /** 12 | * Created by Jet on 3/16/17. 13 | */ 14 | 15 | public class DoubanMovieItem { 16 | 17 | @SerializedName("rating") 18 | public Rating rating; 19 | @SerializedName("genres") 20 | public List genres; 21 | @SerializedName("title") 22 | public String title; 23 | @SerializedName("casts") 24 | public List actors; 25 | @SerializedName("duration") 26 | public List duration; 27 | @SerializedName("collect_count") 28 | public String collectCount; 29 | @SerializedName("mainland_pubdate") 30 | public String mainlandPubdate; 31 | @SerializedName("has_video") 32 | public boolean hasVideo; 33 | @SerializedName("original_title") 34 | public String originalTitle; 35 | @SerializedName("directors") 36 | public List directors; 37 | @SerializedName("pubdates") 38 | public List pubdates; 39 | @SerializedName("year") 40 | public String year; 41 | @SerializedName("images") 42 | public Images images; 43 | @SerializedName("alt") 44 | public String alt; 45 | @SerializedName("id") 46 | public String id; 47 | 48 | } 49 | -------------------------------------------------------------------------------- /app/src/main/java/io/mindjet/litereader/model/item/ZhihuSectionItem.java: -------------------------------------------------------------------------------- 1 | package io.mindjet.litereader.model.item; 2 | 3 | import com.google.gson.annotations.SerializedName; 4 | 5 | /** 6 | * Created by Jet on 3/15/17. 7 | */ 8 | 9 | public class ZhihuSectionItem { 10 | 11 | /* 12 | "description": "看别人的经历,理解自己的生活", 13 | "id": 1, 14 | "name": "深夜惊奇", 15 | "thumbnail": "http://pic3.zhimg.com/91125c9aebcab1c84f58ce4f8779551e.jpg" 16 | */ 17 | @SerializedName("description") 18 | public String description; 19 | @SerializedName("id") 20 | public String id; 21 | @SerializedName("name") 22 | public String name; 23 | @SerializedName("thumbnail") 24 | public String thumbnail; 25 | 26 | } 27 | 28 | -------------------------------------------------------------------------------- /app/src/main/java/io/mindjet/litereader/model/item/ZhihuStoryItem.java: -------------------------------------------------------------------------------- 1 | package io.mindjet.litereader.model.item; 2 | 3 | import com.google.gson.annotations.SerializedName; 4 | 5 | import java.util.List; 6 | 7 | /** 8 | * Created by Jet on 3/13/17. 9 | */ 10 | 11 | public class ZhihuStoryItem { 12 | /* 13 | "title": "人工智能又来抢人类的饭碗了,这次是插画师", 14 | "ga_prefix": "031316", 15 | "images": [ 16 | "http://pic3.zhimg.com/ae7d3c30accadbec5b7e6b561e025a6e.jpg" 17 | ], 18 | "multipic": true, 19 | "type": 0, 20 | "id": 9284316 21 | */ 22 | @SerializedName("title") 23 | public String title; 24 | @SerializedName("ga_prefix") 25 | public String gaPrefix; 26 | @SerializedName("images") 27 | public List images; 28 | @SerializedName("multipic") 29 | public boolean multiPic; 30 | @SerializedName("type") 31 | public String type; 32 | @SerializedName("id") 33 | public String id; 34 | 35 | } 36 | -------------------------------------------------------------------------------- /app/src/main/java/io/mindjet/litereader/model/item/ZhihuTopStoryItem.java: -------------------------------------------------------------------------------- 1 | package io.mindjet.litereader.model.item; 2 | 3 | import com.google.gson.annotations.SerializedName; 4 | 5 | /** 6 | * Created by Jet on 3/13/17. 7 | */ 8 | 9 | public class ZhihuTopStoryItem { 10 | 11 | /* 12 | "image": "http://pic4.zhimg.com/53ed0d4314ca415bd8108cd82be1e6a7.jpg", 13 | "type": 0, 14 | "id": 9284277, 15 | "ga_prefix": "031314", 16 | "title": "咪蒙:网红,病人,潮水的一种方向" 17 | */ 18 | 19 | @SerializedName("image") 20 | public String image; 21 | @SerializedName("type") 22 | public String type; 23 | @SerializedName("id") 24 | public String id; 25 | @SerializedName("ga_prefix") 26 | public String gaPrefix; 27 | @SerializedName("title") 28 | public String title; 29 | 30 | } 31 | -------------------------------------------------------------------------------- /app/src/main/java/io/mindjet/litereader/model/item/book/Book.java: -------------------------------------------------------------------------------- 1 | package io.mindjet.litereader.model.item.book; 2 | 3 | import io.mindjet.litereader.model.item.douban.Images; 4 | 5 | /** 6 | * 图书实体 7 | *

8 | * Created by Jet on 5/5/17. 9 | */ 10 | 11 | public class Book { 12 | 13 | public String id; 14 | public String title; 15 | public String subtitle; 16 | public Images images; 17 | 18 | } 19 | -------------------------------------------------------------------------------- /app/src/main/java/io/mindjet/litereader/model/item/book/BookList.java: -------------------------------------------------------------------------------- 1 | package io.mindjet.litereader.model.item.book; 2 | 3 | import java.util.List; 4 | 5 | /** 6 | * 图书列表 实体 7 | *

8 | * Created by Jet on 5/5/17. 9 | */ 10 | 11 | public class BookList { 12 | 13 | public String count; 14 | public String start; 15 | public String total; 16 | public List books; 17 | 18 | } 19 | -------------------------------------------------------------------------------- /app/src/main/java/io/mindjet/litereader/model/item/book/Rating.java: -------------------------------------------------------------------------------- 1 | package io.mindjet.litereader.model.item.book; 2 | 3 | /** 4 | * 图书评价 实体 5 | *

6 | * Created by Mindjet on 5/5/17. 7 | */ 8 | 9 | public class Rating { 10 | 11 | 12 | /** 13 | * max : 10 14 | * numRaters : 13123 15 | * average : 7.7 16 | * min : 0 17 | */ 18 | 19 | public int max; 20 | public int numRaters; 21 | public String average; 22 | public int min; 23 | 24 | } 25 | -------------------------------------------------------------------------------- /app/src/main/java/io/mindjet/litereader/model/item/book/Tag.java: -------------------------------------------------------------------------------- 1 | package io.mindjet.litereader.model.item.book; 2 | 3 | /** 4 | * 图书标签 5 | *

6 | * Created by Jet on 5/5/17. 7 | */ 8 | 9 | public class Tag { 10 | public String count; 11 | public String name; 12 | public String title; 13 | } 14 | -------------------------------------------------------------------------------- /app/src/main/java/io/mindjet/litereader/model/item/douban/Author.java: -------------------------------------------------------------------------------- 1 | package io.mindjet.litereader.model.item.douban; 2 | 3 | import com.google.gson.annotations.SerializedName; 4 | 5 | import java.io.Serializable; 6 | 7 | /** 8 | * Created by Jet on 3/16/17. 9 | */ 10 | 11 | // 用户实体 12 | public class Author implements Serializable { 13 | 14 | @SerializedName("uid") 15 | public String uid; 16 | @SerializedName("avatar") 17 | public String avatar; 18 | @SerializedName("signature") 19 | public String signature; 20 | @SerializedName("alt") 21 | public String alt; 22 | @SerializedName("id") 23 | public String id; 24 | @SerializedName("name") 25 | public String name; 26 | 27 | } 28 | -------------------------------------------------------------------------------- /app/src/main/java/io/mindjet/litereader/model/item/douban/Comment.java: -------------------------------------------------------------------------------- 1 | package io.mindjet.litereader.model.item.douban; 2 | 3 | import com.google.gson.annotations.SerializedName; 4 | 5 | import java.io.Serializable; 6 | 7 | /** 8 | * Created by Jet on 3/16/17. 9 | */ 10 | 11 | /** 12 | * 短影评实体,长影评实体为 {@link Review} 13 | */ 14 | 15 | public class Comment implements Serializable { 16 | 17 | @SerializedName("rating") 18 | public Rating rating; 19 | @SerializedName("useful_count") 20 | public String usefulCount; 21 | @SerializedName("author") 22 | public Author author; 23 | @SerializedName("subject_id") //被评论电影的id 24 | public String subjectId; 25 | @SerializedName("content") 26 | public String content; 27 | @SerializedName("created_at") 28 | public String createdAt; 29 | @SerializedName("id") 30 | public String id; 31 | 32 | public class Rating implements Serializable { 33 | @SerializedName("max") 34 | public String max; 35 | @SerializedName("value") 36 | public String value; 37 | @SerializedName("min") 38 | public String min; 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /app/src/main/java/io/mindjet/litereader/model/item/douban/DetailStill.java: -------------------------------------------------------------------------------- 1 | package io.mindjet.litereader.model.item.douban; 2 | 3 | import com.google.gson.annotations.SerializedName; 4 | 5 | /** 6 | * 详细剧照 实体 7 | *

8 | * Created by Jet on 3/16/17. 9 | */ 10 | 11 | public class DetailStill { 12 | 13 | @SerializedName("thumb") //中图 14 | public String thumb; 15 | @SerializedName("icon") //小图 16 | public String icon; 17 | @SerializedName("author") 18 | public Author author; 19 | @SerializedName("created_at") 20 | public String createdAt; 21 | @SerializedName("album_id") 22 | public String albumId; 23 | @SerializedName("cover") 24 | public String cover; //方图 25 | @SerializedName("id") 26 | public String id; 27 | @SerializedName("comments_count") 28 | public String commentsCount; 29 | @SerializedName("image") //大图 30 | public String image; 31 | @SerializedName("alt") 32 | public String alt; 33 | @SerializedName("album_title") 34 | public String albumTitle; 35 | @SerializedName("subject_id") 36 | public String subjectId; 37 | } 38 | -------------------------------------------------------------------------------- /app/src/main/java/io/mindjet/litereader/model/item/douban/Images.java: -------------------------------------------------------------------------------- 1 | package io.mindjet.litereader.model.item.douban; 2 | 3 | import com.google.gson.annotations.SerializedName; 4 | 5 | /** 6 | * Created by Jet on 3/16/17. 7 | */ 8 | 9 | // 演职员头像、电影海报实体 10 | public class Images { 11 | @SerializedName("small") 12 | public String small; 13 | @SerializedName("large") 14 | public String large; 15 | @SerializedName("medium") 16 | public String medium; 17 | } -------------------------------------------------------------------------------- /app/src/main/java/io/mindjet/litereader/model/item/douban/Rating.java: -------------------------------------------------------------------------------- 1 | package io.mindjet.litereader.model.item.douban; 2 | 3 | import com.google.gson.annotations.SerializedName; 4 | 5 | import java.io.Serializable; 6 | 7 | /** 8 | * Created by Jet on 3/16/17. 9 | */ 10 | 11 | public class Rating implements Serializable { 12 | 13 | @SerializedName("max") 14 | public String max; 15 | @SerializedName("average") 16 | public String average; 17 | @SerializedName("stars") 18 | public String stars; 19 | 20 | } -------------------------------------------------------------------------------- /app/src/main/java/io/mindjet/litereader/model/item/douban/Review.java: -------------------------------------------------------------------------------- 1 | package io.mindjet.litereader.model.item.douban; 2 | 3 | import com.google.gson.annotations.SerializedName; 4 | 5 | import java.io.Serializable; 6 | 7 | /** 8 | * Created by Jet on 3/16/17. 9 | */ 10 | 11 | /** 12 | * 长影评实体,短影评实体为 {@link Comment} 13 | */ 14 | 15 | public class Review implements Serializable { 16 | 17 | @SerializedName("rating") 18 | public Rating rating; 19 | @SerializedName("useful_count") 20 | public String usefulCount; 21 | @SerializedName("author") 22 | public Author author; 23 | @SerializedName("subject_id") //被评论电影的id 24 | public String subjectId; 25 | @SerializedName("content") 26 | public String content; 27 | @SerializedName("created_at") 28 | public String createdAt; 29 | @SerializedName("title") 30 | public String title; 31 | @SerializedName("updated_at") 32 | public String updatedAt; 33 | @SerializedName("summary") 34 | public String summary; 35 | @SerializedName("id") 36 | public String id; 37 | @SerializedName("useless_count") 38 | public String uselessCount; 39 | @SerializedName("share_url") 40 | public String shareUrl; 41 | @SerializedName("alt") 42 | public String alt; 43 | 44 | public class Rating implements Serializable { 45 | @SerializedName("max") 46 | public String max; 47 | @SerializedName("value") 48 | public String value; 49 | @SerializedName("min") 50 | public String min; 51 | } 52 | 53 | } 54 | -------------------------------------------------------------------------------- /app/src/main/java/io/mindjet/litereader/model/item/douban/Staff.java: -------------------------------------------------------------------------------- 1 | package io.mindjet.litereader.model.item.douban; 2 | 3 | import com.google.gson.annotations.SerializedName; 4 | 5 | import java.io.Serializable; 6 | 7 | /** 8 | * Created by Jet on 3/16/17. 9 | */ 10 | 11 | // 演职人员实体,可为演员、导演或者作者 12 | public class Staff implements Serializable { 13 | @SerializedName("avatars") 14 | public Images avatars; 15 | @SerializedName("name_en") 16 | public String nameEn; 17 | @SerializedName("name") 18 | public String name; 19 | @SerializedName("alt") 20 | public String alt; 21 | @SerializedName("id") 22 | public String id; 23 | } 24 | -------------------------------------------------------------------------------- /app/src/main/java/io/mindjet/litereader/model/item/douban/StaffDetail.java: -------------------------------------------------------------------------------- 1 | package io.mindjet.litereader.model.item.douban; 2 | 3 | import com.google.gson.annotations.SerializedName; 4 | 5 | import java.util.List; 6 | 7 | /** 8 | * 演职员详情 9 | *

10 | * Created by Mindjet on 2017/4/17. 11 | */ 12 | 13 | public class StaffDetail { 14 | 15 | @SerializedName("name") 16 | public String name; 17 | @SerializedName("works") 18 | public List works; 19 | @SerializedName("name_en") 20 | public String nameEn; 21 | @SerializedName("born_place") 22 | public String bornPlace; 23 | @SerializedName("gender") 24 | public String gender; 25 | @SerializedName("mobile_url") 26 | public String mobileUrl; 27 | @SerializedName("avatars") 28 | public Images avatars; 29 | 30 | } 31 | -------------------------------------------------------------------------------- /app/src/main/java/io/mindjet/litereader/model/item/douban/Still.java: -------------------------------------------------------------------------------- 1 | package io.mindjet.litereader.model.item.douban; 2 | 3 | import com.google.gson.annotations.SerializedName; 4 | 5 | import java.io.Serializable; 6 | 7 | /** 8 | * 剧照实体,在获取影片详情时一并获得。 9 | *

10 | * 专门获得的剧照实体是 {@link DetailStill} 11 | * Created by Jet on 3/16/17. 12 | */ 13 | 14 | public class Still implements Serializable { 15 | @SerializedName("thumb") //中图 16 | public String thumb; 17 | @SerializedName("image") //大图 18 | public String image; 19 | @SerializedName("cover") //方形 20 | public String cover; 21 | @SerializedName("alt") 22 | public String alt; 23 | @SerializedName("id") 24 | public String id; 25 | @SerializedName("icon") //小图 26 | public String icon; 27 | } 28 | -------------------------------------------------------------------------------- /app/src/main/java/io/mindjet/litereader/model/item/douban/Trailer.java: -------------------------------------------------------------------------------- 1 | package io.mindjet.litereader.model.item.douban; 2 | 3 | import com.google.gson.annotations.SerializedName; 4 | 5 | import java.io.Serializable; 6 | 7 | /** 8 | * Created by Jet on 3/16/17. 9 | */ 10 | 11 | //预告片或者花絮实体 12 | public class Trailer implements Serializable { 13 | 14 | @SerializedName("medium") 15 | public String medium; 16 | @SerializedName("title") 17 | public String title; 18 | @SerializedName("subject_id") 19 | public String subjectId; 20 | @SerializedName("alt") 21 | public String alt; 22 | @SerializedName("small") 23 | public String small; 24 | @SerializedName("resource_url") 25 | public String resourceUrl; 26 | @SerializedName("id") 27 | public String id; 28 | 29 | } 30 | -------------------------------------------------------------------------------- /app/src/main/java/io/mindjet/litereader/model/item/douban/Work.java: -------------------------------------------------------------------------------- 1 | package io.mindjet.litereader.model.item.douban; 2 | 3 | import com.google.gson.annotations.SerializedName; 4 | 5 | import java.util.List; 6 | 7 | import io.mindjet.litereader.model.item.DoubanMovieItem; 8 | 9 | /** 10 | * 演职员作品 11 | *

12 | * Created by Mindjet on 2017/4/17. 13 | */ 14 | 15 | public class Work { 16 | 17 | @SerializedName("roles") 18 | public List roles; 19 | @SerializedName("subject") 20 | public DoubanMovieItem subject; 21 | 22 | } 23 | -------------------------------------------------------------------------------- /app/src/main/java/io/mindjet/litereader/model/item/one/Article.java: -------------------------------------------------------------------------------- 1 | package io.mindjet.litereader.model.item.one; 2 | 3 | import com.google.gson.annotations.SerializedName; 4 | 5 | /** 6 | * ONE文章 实体 7 | *

8 | * Created by Jet on 5/5/17. 9 | */ 10 | 11 | public class Article { 12 | @SerializedName("item_id") 13 | public String id; 14 | public String title; 15 | public String forward; 16 | @SerializedName("img_url") 17 | public String imgUrl; 18 | @SerializedName("like_count") 19 | public String likeCount; 20 | @SerializedName("post_date") 21 | public String postDate; 22 | public Author author; 23 | @SerializedName("share_info") 24 | public ShareInfo shareInfo; 25 | @SerializedName("share_url") 26 | public String shareUrl; 27 | } 28 | -------------------------------------------------------------------------------- /app/src/main/java/io/mindjet/litereader/model/item/one/ArticleDetail.java: -------------------------------------------------------------------------------- 1 | package io.mindjet.litereader.model.item.one; 2 | 3 | import com.google.gson.annotations.SerializedName; 4 | 5 | import java.util.List; 6 | 7 | /** 8 | * ONE文章 详情 实体 9 | *

10 | * Created by Mindjet on 5/5/17. 11 | */ 12 | 13 | public class ArticleDetail { 14 | 15 | @SerializedName("content_id") 16 | public String id; 17 | @SerializedName("hp_title") 18 | public String title; 19 | @SerializedName("hp_content") 20 | public String content; 21 | @SerializedName("last_update_date") 22 | public String updateDate; 23 | @SerializedName("guide_word") 24 | public String guideWord; 25 | public List author; 26 | @SerializedName("web_url") 27 | public String webUrl; 28 | @SerializedName("hp_author_introduce") 29 | public String authorIntroduce; 30 | @SerializedName("praisenum") 31 | public String praiseNum; 32 | 33 | } 34 | -------------------------------------------------------------------------------- /app/src/main/java/io/mindjet/litereader/model/item/one/Author.java: -------------------------------------------------------------------------------- 1 | package io.mindjet.litereader.model.item.one; 2 | 3 | import com.google.gson.annotations.SerializedName; 4 | 5 | import java.io.Serializable; 6 | 7 | /** 8 | * 作者 实体 9 | *

10 | * Created by Mindjet on 5/4/17. 11 | */ 12 | 13 | public class Author implements Serializable { 14 | 15 | /** 16 | * user_id : 6080525 17 | * user_name : 丹丹扬 18 | * desc : 她和时间跳华尔兹。 19 | * wb_name : 20 | * is_settled : 0 21 | * settled_type : 0 22 | * summary : 她和时间跳华尔兹。 23 | * fanNum : 835 24 | * web_url : http://image.wufazhuce.com/FhqPpjWkOEWCtqK3tPCAVpkAtALp 25 | */ 26 | 27 | @SerializedName("user_id") 28 | public String id; 29 | @SerializedName("user_name") 30 | public String name; 31 | @SerializedName("desc") 32 | public String signature; 33 | @SerializedName("web_url") 34 | public String avatar; 35 | @SerializedName("fans_total") 36 | public String fanNum; 37 | @SerializedName("wb_name") 38 | public String WbName; 39 | } 40 | -------------------------------------------------------------------------------- /app/src/main/java/io/mindjet/litereader/model/item/one/Review.java: -------------------------------------------------------------------------------- 1 | package io.mindjet.litereader.model.item.one; 2 | 3 | import com.google.gson.annotations.SerializedName; 4 | 5 | import java.io.Serializable; 6 | 7 | /** 8 | * 影评实体 9 | *

10 | * Created by Jet on 5/4/17. 11 | */ 12 | 13 | public class Review implements Serializable { 14 | 15 | @SerializedName("item_id") 16 | public String id; 17 | public String title; 18 | public String forward; 19 | @SerializedName("img_url") 20 | public String imgUrl; 21 | @SerializedName("like_count") 22 | public String likeCount; 23 | @SerializedName("post_date") 24 | public String postDate; 25 | public Author author; 26 | public String subtitle; //影片名 27 | @SerializedName("share_url") 28 | public String shareUrl; 29 | @SerializedName("share_info") 30 | public ShareInfo shareInfo; 31 | 32 | } 33 | -------------------------------------------------------------------------------- /app/src/main/java/io/mindjet/litereader/model/item/one/ShareInfo.java: -------------------------------------------------------------------------------- 1 | package io.mindjet.litereader.model.item.one; 2 | 3 | import java.io.Serializable; 4 | 5 | /** 6 | * 分享内容 实体 7 | *

8 | * Created by Jet on 5/4/17. 9 | */ 10 | 11 | public class ShareInfo implements Serializable { 12 | 13 | public String image; 14 | public String title; 15 | public String content; 16 | 17 | } 18 | -------------------------------------------------------------------------------- /app/src/main/java/io/mindjet/litereader/model/list/DailyArticle.java: -------------------------------------------------------------------------------- 1 | package io.mindjet.litereader.model.list; 2 | 3 | import com.google.gson.annotations.SerializedName; 4 | 5 | /** 6 | * Created by Jet on 3/16/17. 7 | */ 8 | 9 | public class DailyArticle { 10 | 11 | @SerializedName("data") 12 | public Data data; 13 | 14 | public class Data { 15 | 16 | @SerializedName("author") 17 | public String author; 18 | @SerializedName("title") 19 | public String title; 20 | @SerializedName("digest") 21 | public String digest; 22 | @SerializedName("content") 23 | public String content; 24 | @SerializedName("wc") 25 | public String wordCount; 26 | 27 | } 28 | 29 | } 30 | -------------------------------------------------------------------------------- /app/src/main/java/io/mindjet/litereader/model/list/DoubanCommentList.java: -------------------------------------------------------------------------------- 1 | package io.mindjet.litereader.model.list; 2 | 3 | import com.google.gson.annotations.SerializedName; 4 | 5 | import java.util.List; 6 | 7 | import io.mindjet.litereader.model.item.douban.Comment; 8 | 9 | /** 10 | * Created by Jet on 3/16/17. 11 | */ 12 | 13 | public class DoubanCommentList { 14 | 15 | @SerializedName("count") 16 | public String count; 17 | @SerializedName("comments") 18 | public List comments; 19 | @SerializedName("total") 20 | public String total; 21 | @SerializedName("next_start") 22 | public String nextStart; 23 | 24 | } 25 | -------------------------------------------------------------------------------- /app/src/main/java/io/mindjet/litereader/model/list/DoubanMovieList.java: -------------------------------------------------------------------------------- 1 | package io.mindjet.litereader.model.list; 2 | 3 | import com.google.gson.annotations.SerializedName; 4 | 5 | import java.util.List; 6 | 7 | import io.mindjet.litereader.model.item.DoubanMovieItem; 8 | 9 | /** 10 | * Created by Jet on 3/16/17. 11 | */ 12 | 13 | public class DoubanMovieList { 14 | 15 | @SerializedName("count") 16 | public String count; 17 | @SerializedName("start") 18 | public String start; 19 | @SerializedName("total") 20 | public String total; 21 | @SerializedName("subjects") 22 | public List movies; 23 | @SerializedName("title") 24 | public String title; 25 | 26 | } 27 | -------------------------------------------------------------------------------- /app/src/main/java/io/mindjet/litereader/model/list/DoubanReviewList.java: -------------------------------------------------------------------------------- 1 | package io.mindjet.litereader.model.list; 2 | 3 | import com.google.gson.annotations.SerializedName; 4 | 5 | import java.util.List; 6 | 7 | import io.mindjet.litereader.model.item.douban.Review; 8 | 9 | /** 10 | * Created by Jet on 3/16/17. 11 | */ 12 | 13 | public class DoubanReviewList { 14 | 15 | @SerializedName("count") 16 | public String count; 17 | @SerializedName("reviews") 18 | public List reviews; 19 | @SerializedName("total") 20 | public String total; 21 | @SerializedName("next_start") 22 | public String nextStart; 23 | 24 | } 25 | -------------------------------------------------------------------------------- /app/src/main/java/io/mindjet/litereader/model/list/DoubanStillList.java: -------------------------------------------------------------------------------- 1 | package io.mindjet.litereader.model.list; 2 | 3 | import com.google.gson.annotations.SerializedName; 4 | 5 | import java.util.List; 6 | 7 | import io.mindjet.litereader.model.item.douban.DetailStill; 8 | 9 | /** 10 | * Created by Jet on 3/16/17. 11 | */ 12 | 13 | public class DoubanStillList { 14 | @SerializedName("count") 15 | public String count; 16 | @SerializedName("photos") 17 | public List photos; 18 | } 19 | -------------------------------------------------------------------------------- /app/src/main/java/io/mindjet/litereader/model/list/OneData.java: -------------------------------------------------------------------------------- 1 | package io.mindjet.litereader.model.list; 2 | 3 | /** 4 | * ONE数据 通用 实体 5 | *

6 | * Created by Mindjet on 5/5/17. 7 | */ 8 | 9 | public class OneData { 10 | 11 | public int res; 12 | public T data; 13 | 14 | } 15 | -------------------------------------------------------------------------------- /app/src/main/java/io/mindjet/litereader/model/list/OneDataList.java: -------------------------------------------------------------------------------- 1 | package io.mindjet.litereader.model.list; 2 | 3 | import java.util.List; 4 | 5 | /** 6 | * ONE数据列表通用 实体 7 | *

8 | * Created by Mindjet on 5/4/17. 9 | */ 10 | 11 | public class OneDataList { 12 | 13 | public String res; 14 | public List data; 15 | 16 | } 17 | -------------------------------------------------------------------------------- /app/src/main/java/io/mindjet/litereader/model/list/ZhihuDailyList.java: -------------------------------------------------------------------------------- 1 | package io.mindjet.litereader.model.list; 2 | 3 | import com.google.gson.annotations.SerializedName; 4 | 5 | import java.util.List; 6 | 7 | import io.mindjet.litereader.model.item.ZhihuStoryItem; 8 | import io.mindjet.litereader.model.item.ZhihuTopStoryItem; 9 | 10 | /** 11 | * Created by Jet on 3/13/17. 12 | */ 13 | 14 | public class ZhihuDailyList { 15 | 16 | @SerializedName("date") 17 | public String date; 18 | @SerializedName("stories") 19 | public List stories; 20 | @SerializedName("top_stories") 21 | public List topStories; 22 | 23 | } 24 | -------------------------------------------------------------------------------- /app/src/main/java/io/mindjet/litereader/model/list/ZhihuSectionList.java: -------------------------------------------------------------------------------- 1 | package io.mindjet.litereader.model.list; 2 | 3 | import com.google.gson.annotations.SerializedName; 4 | 5 | import java.util.List; 6 | 7 | import io.mindjet.litereader.model.item.ZhihuSectionItem; 8 | 9 | /** 10 | * Created by Jet on 3/15/17. 11 | */ 12 | 13 | public class ZhihuSectionList { 14 | @SerializedName("data") 15 | public List data; 16 | } 17 | -------------------------------------------------------------------------------- /app/src/main/java/io/mindjet/litereader/model/other/DailyWallpaper.java: -------------------------------------------------------------------------------- 1 | package io.mindjet.litereader.model.other; 2 | 3 | import com.google.gson.annotations.SerializedName; 4 | 5 | import java.util.List; 6 | 7 | /** 8 | * Created by Jet on 3/15/17. 9 | */ 10 | 11 | public class DailyWallpaper { 12 | 13 | @SerializedName("images") 14 | public List data; 15 | 16 | public class Data { 17 | @SerializedName("url") 18 | public String url; 19 | @SerializedName("copyright") 20 | public String copyright; 21 | } 22 | 23 | } 24 | -------------------------------------------------------------------------------- /app/src/main/java/io/mindjet/litereader/model/other/Imdb.java: -------------------------------------------------------------------------------- 1 | package io.mindjet.litereader.model.other; 2 | 3 | import com.google.gson.annotations.SerializedName; 4 | 5 | /** 6 | * Created by Jet on 3/17/17. 7 | */ 8 | 9 | public class Imdb { 10 | 11 | @SerializedName("Rated") //评级 12 | private String rated; 13 | @SerializedName("Metascore") // Metacritic 网站评分, Metascores 范围从0-100,数值越高,越受欢迎 14 | public String metascore; 15 | @SerializedName("imdbRating") 16 | public String imdbRating; 17 | @SerializedName("imdbVotes") 18 | public String imdbVotes; 19 | @SerializedName("imdbID") 20 | public String imdbId; 21 | 22 | } -------------------------------------------------------------------------------- /app/src/main/java/io/mindjet/litereader/model/other/Me.java: -------------------------------------------------------------------------------- 1 | package io.mindjet.litereader.model.other; 2 | 3 | /** 4 | * 关于我 实体 5 | *

6 | * Created by Jet on 5/2/17. 7 | */ 8 | 9 | public class Me { 10 | 11 | private String intro; 12 | private String website; 13 | private String mail; 14 | private String github; 15 | 16 | public String getIntro() { 17 | return intro; 18 | } 19 | 20 | public void setIntro(String intro) { 21 | this.intro = intro; 22 | } 23 | 24 | public String getWebsite() { 25 | return website; 26 | } 27 | 28 | public void setWebsite(String website) { 29 | this.website = website; 30 | } 31 | 32 | public String getMail() { 33 | return mail; 34 | } 35 | 36 | public void setMail(String mail) { 37 | this.mail = mail; 38 | } 39 | 40 | public String getGithub() { 41 | return github; 42 | } 43 | 44 | public void setGithub(String github) { 45 | this.github = github; 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /app/src/main/java/io/mindjet/litereader/model/other/RottenTomatoes.java: -------------------------------------------------------------------------------- 1 | package io.mindjet.litereader.model.other; 2 | 3 | /** 4 | * Created by Jet on 3/17/17. 5 | */ 6 | 7 | public class RottenTomatoes { 8 | 9 | private String tomatoMeter; //烂番茄新鲜度 10 | private String audienceScore; //爆米花指数 11 | 12 | public String getTomatoMeter() { 13 | return tomatoMeter; 14 | } 15 | 16 | public void setTomatoMeter(String tomatoMeter) { 17 | this.tomatoMeter = tomatoMeter; 18 | } 19 | 20 | public String getAudienceScore() { 21 | return audienceScore; 22 | } 23 | 24 | public void setAudienceScore(String audienceScore) { 25 | this.audienceScore = audienceScore; 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /app/src/main/java/io/mindjet/litereader/reactivex/ActionHttpError.java: -------------------------------------------------------------------------------- 1 | package io.mindjet.litereader.reactivex; 2 | 3 | import java.net.SocketTimeoutException; 4 | import java.net.UnknownHostException; 5 | 6 | import io.mindjet.jetutil.hint.Toaster; 7 | import io.mindjet.litereader.BaseApp; 8 | import rx.functions.Action1; 9 | 10 | /** 11 | * Created by Jet on 3/16/17. 12 | */ 13 | 14 | public abstract class ActionHttpError implements Action1 { 15 | 16 | @Override 17 | public void call(Throwable throwable) { 18 | Toaster.toast(BaseApp.me(), resolveThrowable(throwable), 1500); 19 | onError(); 20 | } 21 | 22 | private static String resolveThrowable(Throwable throwable) { 23 | if (throwable instanceof UnknownHostException) { 24 | return "无法连接至服务器,请检查您的网络连接或者稍后再试。"; 25 | } else if (throwable instanceof SocketTimeoutException) { 26 | return "连接服务器超时,请重试。"; 27 | } else { 28 | return throwable.getMessage(); 29 | } 30 | } 31 | 32 | protected abstract void onError(); 33 | 34 | } 35 | -------------------------------------------------------------------------------- /app/src/main/java/io/mindjet/litereader/reactivex/RxAction.java: -------------------------------------------------------------------------------- 1 | package io.mindjet.litereader.reactivex; 2 | 3 | import java.net.SocketTimeoutException; 4 | import java.net.UnknownHostException; 5 | 6 | import io.mindjet.jetutil.hint.Toaster; 7 | import io.mindjet.litereader.BaseApp; 8 | import rx.functions.Action1; 9 | 10 | /** 11 | * Created by Jet on 3/14/17. 12 | */ 13 | 14 | public class RxAction { 15 | 16 | public static Action1 onError() { 17 | return new Action1() { 18 | @Override 19 | public void call(Throwable throwable) { 20 | Toaster.toast(BaseApp.me(), resolveThrowable(throwable), 1500); 21 | } 22 | }; 23 | } 24 | 25 | public static String resolveThrowable(Throwable throwable) { 26 | if (throwable instanceof UnknownHostException) { 27 | return "无法连接至服务器,请检查您的网络连接或者稍后再试。"; 28 | } else if (throwable instanceof SocketTimeoutException) { 29 | return "连接服务器超时,请重试。"; 30 | } else { 31 | return throwable.getMessage(); 32 | } 33 | } 34 | 35 | } 36 | -------------------------------------------------------------------------------- /app/src/main/java/io/mindjet/litereader/reactivex/RxLoadingView.java: -------------------------------------------------------------------------------- 1 | package io.mindjet.litereader.reactivex; 2 | 3 | import android.content.Context; 4 | import android.support.annotation.StringRes; 5 | 6 | import io.mindjet.jetwidget.LoadingView; 7 | import rx.functions.Action0; 8 | import rx.functions.Action1; 9 | import rx.functions.Actions; 10 | 11 | /** 12 | * {@link io.mindjet.jetwidget.LoadingView} for RxJava. 13 | *

14 | * Created by Mindjet on 2017/4/26. 15 | */ 16 | 17 | public class RxLoadingView { 18 | 19 | public static Action0 show(final Context context, @StringRes final int stringRes) { 20 | return new Action0() { 21 | @Override 22 | public void call() { 23 | LoadingView.show(context, stringRes); 24 | } 25 | }; 26 | } 27 | 28 | public static Action0 dismiss() { 29 | return new Action0() { 30 | @Override 31 | public void call() { 32 | LoadingView.dismiss(); 33 | } 34 | }; 35 | } 36 | 37 | public static Action1 showAction1(Context context, @StringRes int stringRes) { 38 | return Actions.toAction1(show(context, stringRes)); 39 | } 40 | 41 | } 42 | -------------------------------------------------------------------------------- /app/src/main/java/io/mindjet/litereader/reactivex/RxToaster.java: -------------------------------------------------------------------------------- 1 | package io.mindjet.litereader.reactivex; 2 | 3 | import android.content.Context; 4 | import android.support.annotation.StringRes; 5 | 6 | import io.mindjet.jetutil.hint.Toaster; 7 | import io.mindjet.jetutil.logger.JLogger; 8 | import rx.functions.Action0; 9 | import rx.functions.Action1; 10 | import rx.functions.Actions; 11 | 12 | /** 13 | * {@link io.mindjet.jetutil.hint.Toaster} for RxJava. 14 | *

15 | * Created by Mindjet on 2017/4/27. 16 | */ 17 | 18 | public class RxToaster { 19 | 20 | private static JLogger jLogger = JLogger.get(RxToaster.class.getClass().getSimpleName()); 21 | 22 | public static Action0 showAction0(final Context context, @StringRes final int stringRes) { 23 | return new Action0() { 24 | @Override 25 | public void call() { 26 | Toaster.toast(context, context.getResources().getString(stringRes)); 27 | } 28 | }; 29 | } 30 | 31 | 32 | public static Action1 showAction1(final Context context, @StringRes final int stringRes) { 33 | return Actions.toAction1(showAction0(context, stringRes)); 34 | } 35 | 36 | } 37 | -------------------------------------------------------------------------------- /app/src/main/java/io/mindjet/litereader/service/OneService.java: -------------------------------------------------------------------------------- 1 | package io.mindjet.litereader.service; 2 | 3 | import io.mindjet.litereader.model.item.one.Article; 4 | import io.mindjet.litereader.model.item.one.ArticleDetail; 5 | import io.mindjet.litereader.model.item.one.Review; 6 | import io.mindjet.litereader.model.list.OneData; 7 | import io.mindjet.litereader.model.list.OneDataList; 8 | import retrofit2.http.GET; 9 | import retrofit2.http.Path; 10 | import rx.Observable; 11 | 12 | /** 13 | * ONE 接口 14 | *

15 | * Created by Mindjet on 3/13/17. 16 | */ 17 | 18 | public interface OneService { 19 | 20 | @GET("http://v3.wufazhuce.com:8000/api/channel/movie/more/0") 21 | Observable> getReviewList(); 22 | 23 | @GET("http://v3.wufazhuce.com:8000/api/channel/reading/more/0") 24 | Observable> getArticleList(); 25 | 26 | @GET("http://v3.wufazhuce.com:8000/api/essay/{id}") 27 | Observable> getArticleDetail(@Path("id") String articleId); 28 | 29 | } 30 | -------------------------------------------------------------------------------- /app/src/main/java/io/mindjet/litereader/service/TimeMovieService.java: -------------------------------------------------------------------------------- 1 | package io.mindjet.litereader.service; 2 | 3 | /** 4 | * Created by Jet on 3/13/17. 5 | */ 6 | 7 | public interface TimeMovieService { 8 | } 9 | -------------------------------------------------------------------------------- /app/src/main/java/io/mindjet/litereader/service/ZhihuDailyService.java: -------------------------------------------------------------------------------- 1 | package io.mindjet.litereader.service; 2 | 3 | import io.mindjet.litereader.model.detail.ZhihuStoryDetail; 4 | import io.mindjet.litereader.model.list.ZhihuDailyList; 5 | import io.mindjet.litereader.model.list.ZhihuSectionList; 6 | import retrofit2.http.GET; 7 | import retrofit2.http.Path; 8 | import rx.Observable; 9 | 10 | /** 11 | * Created by Jet on 3/13/17. 12 | */ 13 | 14 | public interface ZhihuDailyService { 15 | 16 | @GET("http://news-at.zhihu.com/api/4/news/latest") 17 | Observable getLatest(); 18 | 19 | /** 20 | * 获取某一天的前一天的日报,比如要获取9.20的日报,则应传入9.21 21 | * 22 | * @param date 日期,格式为yyyyMMdd 23 | */ 24 | @GET("http://news-at.zhihu.com/api/4/news/before/{date}") 25 | Observable getBefore(@Path("date") String date); 26 | 27 | @GET("http://news-at.zhihu.com/api/4/news/{id}") 28 | Observable getStoryDetail(@Path("id") String id); 29 | 30 | @GET("http://news-at.zhihu.com/api/4/sections") 31 | Observable getSections(); 32 | 33 | @GET("http://news-at.zhihu.com/api/4/section/{id}") 34 | Observable getSectionDetail(@Path("id") String id); 35 | 36 | 37 | } 38 | -------------------------------------------------------------------------------- /app/src/main/java/io/mindjet/litereader/ui/activity/AboutMeActivity.java: -------------------------------------------------------------------------------- 1 | package io.mindjet.litereader.ui.activity; 2 | 3 | import android.content.Context; 4 | import android.content.Intent; 5 | 6 | import io.mindjet.jetgear.mvvm.viewmodel.activity.ViewModelCompatActivity; 7 | import io.mindjet.litereader.viewmodel.AboutMeViewModel; 8 | 9 | public class AboutMeActivity extends ViewModelCompatActivity { 10 | 11 | public static Intent intentFor(Context from) { 12 | return new Intent(from, AboutMeActivity.class); 13 | } 14 | 15 | @Override 16 | public AboutMeViewModel giveMeViewModel() { 17 | return new AboutMeViewModel(); 18 | } 19 | 20 | @Override 21 | public void onViewAttached(AboutMeViewModel viewModel) { 22 | 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /app/src/main/java/io/mindjet/litereader/ui/activity/ChannelSubscribeActivity.java: -------------------------------------------------------------------------------- 1 | package io.mindjet.litereader.ui.activity; 2 | 3 | import android.content.Context; 4 | import android.content.Intent; 5 | 6 | import io.mindjet.jetgear.mvvm.viewmodel.activity.ViewModelCompatActivity; 7 | import io.mindjet.litereader.viewmodel.list.ChannelSubscribeViewModel; 8 | 9 | /** 10 | * 订阅频道 activity 11 | *

12 | * Created by Mindjet on 2017/4/13. 13 | */ 14 | 15 | public class ChannelSubscribeActivity extends ViewModelCompatActivity { 16 | 17 | public static Intent intentFor(Context context) { 18 | return new Intent(context, ChannelSubscribeActivity.class); 19 | } 20 | 21 | @Override 22 | public void onViewAttached(ChannelSubscribeViewModel viewModel) { 23 | 24 | } 25 | 26 | @Override 27 | public ChannelSubscribeViewModel giveMeViewModel() { 28 | return new ChannelSubscribeViewModel(); 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /app/src/main/java/io/mindjet/litereader/ui/activity/CollectActivity.java: -------------------------------------------------------------------------------- 1 | package io.mindjet.litereader.ui.activity; 2 | 3 | import android.content.Context; 4 | import android.content.Intent; 5 | 6 | import io.mindjet.jetgear.mvvm.viewmodel.activity.ViewModelCompatActivity; 7 | import io.mindjet.litereader.viewmodel.list.CollectViewModel; 8 | 9 | /** 10 | * Created by Mindjet on 2017/4/26. 11 | */ 12 | 13 | public class CollectActivity extends ViewModelCompatActivity { 14 | 15 | public static Intent intentFor(Context context){ 16 | return new Intent(context, CollectActivity.class); 17 | } 18 | 19 | @Override 20 | public void onViewAttached(CollectViewModel viewModel) { 21 | 22 | } 23 | 24 | @Override 25 | public CollectViewModel giveMeViewModel() { 26 | return new CollectViewModel(); 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /app/src/main/java/io/mindjet/litereader/ui/activity/DoubanMovieDetailActivity.java: -------------------------------------------------------------------------------- 1 | package io.mindjet.litereader.ui.activity; 2 | 3 | import android.content.Context; 4 | import android.content.Intent; 5 | 6 | import io.mindjet.jetgear.mvvm.viewmodel.activity.ViewModelCompatActivity; 7 | import io.mindjet.litereader.viewmodel.detail.DoubanMovieDetailViewModel; 8 | 9 | /** 10 | * Created by Jet on 3/17/17. 11 | */ 12 | 13 | public class DoubanMovieDetailActivity extends ViewModelCompatActivity { 14 | 15 | public static Intent intentFor(Context context) { 16 | return new Intent(context, DoubanMovieDetailActivity.class); 17 | } 18 | 19 | @Override 20 | public void onViewAttached(DoubanMovieDetailViewModel viewModel) { 21 | 22 | } 23 | 24 | @Override 25 | public DoubanMovieDetailViewModel giveMeViewModel() { 26 | return new DoubanMovieDetailViewModel(); 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /app/src/main/java/io/mindjet/litereader/ui/activity/DoubanMovieMoreReviewActivity.java: -------------------------------------------------------------------------------- 1 | package io.mindjet.litereader.ui.activity; 2 | 3 | import android.content.Context; 4 | import android.content.Intent; 5 | 6 | import io.mindjet.jetgear.mvvm.viewmodel.activity.ViewModelCompatActivity; 7 | import io.mindjet.litereader.entity.Constant; 8 | import io.mindjet.litereader.viewmodel.detail.DoubanMovieMoreReviewViewModel; 9 | 10 | /** 11 | * Created by Jet on 3/21/17. 12 | */ 13 | 14 | public class DoubanMovieMoreReviewActivity extends ViewModelCompatActivity { 15 | 16 | public static Intent intentFor(Context context) { 17 | return new Intent(context, DoubanMovieMoreReviewActivity.class); 18 | } 19 | 20 | @Override 21 | public void onViewAttached(DoubanMovieMoreReviewViewModel viewModel) { 22 | 23 | } 24 | 25 | @Override 26 | public DoubanMovieMoreReviewViewModel giveMeViewModel() { 27 | String id = getIntent().getStringExtra(Constant.EXTRA_DOUBAN_MOVIE_ID); 28 | String title = getIntent().getStringExtra(Constant.EXTRA_DOUBAN_MOVIE_TITLE); 29 | return new DoubanMovieMoreReviewViewModel(id, title); 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /app/src/main/java/io/mindjet/litereader/ui/activity/DoubanMovieReviewActivity.java: -------------------------------------------------------------------------------- 1 | package io.mindjet.litereader.ui.activity; 2 | 3 | import android.content.Context; 4 | import android.content.Intent; 5 | 6 | import io.mindjet.jetgear.mvvm.viewmodel.activity.ViewModelCompatActivity; 7 | import io.mindjet.litereader.entity.Constant; 8 | import io.mindjet.litereader.model.item.douban.Review; 9 | import io.mindjet.litereader.viewmodel.detail.DoubanMovieReviewViewModel; 10 | 11 | /** 12 | * Created by Mindjet on 2017/4/6. 13 | */ 14 | 15 | public class DoubanMovieReviewActivity extends ViewModelCompatActivity { 16 | 17 | public static Intent intentFor(Context context) { 18 | return new Intent(context, DoubanMovieReviewActivity.class); 19 | } 20 | 21 | @Override 22 | public void onViewAttached(DoubanMovieReviewViewModel viewModel) { 23 | 24 | } 25 | 26 | @Override 27 | public DoubanMovieReviewViewModel giveMeViewModel() { 28 | Review review = (Review) getIntent().getExtras().get(Constant.EXTRA_DOUBAN_MOVIE_REVIEW); 29 | String title = getIntent().getStringExtra(Constant.EXTRA_DOUBAN_MOVIE_TITLE); 30 | return new DoubanMovieReviewViewModel(review, title); 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /app/src/main/java/io/mindjet/litereader/ui/activity/DoubanMovieSearchActivity.java: -------------------------------------------------------------------------------- 1 | package io.mindjet.litereader.ui.activity; 2 | 3 | import android.app.Activity; 4 | import android.content.Context; 5 | import android.content.Intent; 6 | 7 | import io.mindjet.jetgear.mvvm.viewmodel.activity.ViewModelActivity; 8 | import io.mindjet.litereader.viewmodel.detail.DoubanMovieSearchViewModel; 9 | 10 | /** 11 | * Created by Mindjet on 2018/3/12. 12 | */ 13 | 14 | public class DoubanMovieSearchActivity extends ViewModelActivity { 15 | 16 | public static Intent intentFor(Context from) { 17 | return new Intent(from, DoubanMovieSearchActivity.class); 18 | } 19 | 20 | @Override 21 | public void onViewAttached(DoubanMovieSearchViewModel viewModel) { 22 | 23 | } 24 | 25 | @Override 26 | public DoubanMovieSearchViewModel giveMeViewModel() { 27 | return new DoubanMovieSearchViewModel(); 28 | } 29 | 30 | } 31 | -------------------------------------------------------------------------------- /app/src/main/java/io/mindjet/litereader/ui/activity/DoubanStaffDetailActivity.java: -------------------------------------------------------------------------------- 1 | package io.mindjet.litereader.ui.activity; 2 | 3 | import android.content.Context; 4 | import android.content.Intent; 5 | 6 | import io.mindjet.jetgear.mvvm.viewmodel.activity.ViewModelCompatActivity; 7 | import io.mindjet.litereader.entity.Constant; 8 | import io.mindjet.litereader.viewmodel.detail.DoubanStaffDetailViewModel; 9 | 10 | /** 11 | * Created by Mindjet on 2017/4/17. 12 | */ 13 | 14 | public class DoubanStaffDetailActivity extends ViewModelCompatActivity { 15 | 16 | public static Intent intentFor(Context context) { 17 | return new Intent(context, DoubanStaffDetailActivity.class); 18 | } 19 | 20 | @Override 21 | public void onViewAttached(DoubanStaffDetailViewModel viewModel) { 22 | 23 | } 24 | 25 | @Override 26 | public DoubanStaffDetailViewModel giveMeViewModel() { 27 | String id = getIntent().getStringExtra(Constant.EXTRA_DOUBAN_STAFF_ID); 28 | String title = getIntent().getStringExtra(Constant.EXTRA_DOUBAN_MOVIE_TITLE); 29 | return new DoubanStaffDetailViewModel(id, title); 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /app/src/main/java/io/mindjet/litereader/ui/activity/DoubanStillListActivity.java: -------------------------------------------------------------------------------- 1 | package io.mindjet.litereader.ui.activity; 2 | 3 | import android.content.Context; 4 | import android.content.Intent; 5 | 6 | import io.mindjet.jetgear.mvvm.viewmodel.activity.ViewModelCompatActivity; 7 | import io.mindjet.litereader.entity.Constant; 8 | import io.mindjet.litereader.viewmodel.list.DoubanStillListViewModel; 9 | 10 | /** 11 | * 豆瓣剧照列表 activity 12 | *

13 | * Created by Jet on 5/3/17. 14 | */ 15 | 16 | public class DoubanStillListActivity extends ViewModelCompatActivity { 17 | 18 | public static Intent intentFor(Context context, String movieId, String title) { 19 | Intent intent = new Intent(context, DoubanStillListActivity.class); 20 | intent.putExtra(Constant.EXTRA_DOUBAN_MOVIE_ID, movieId); 21 | intent.putExtra(Constant.EXTRA_DOUBAN_MOVIE_TITLE, title); 22 | return intent; 23 | } 24 | 25 | @Override 26 | public void onViewAttached(DoubanStillListViewModel viewModel) { 27 | 28 | } 29 | 30 | @Override 31 | public DoubanStillListViewModel giveMeViewModel() { 32 | String movieId = getIntent().getStringExtra(Constant.EXTRA_DOUBAN_MOVIE_ID); 33 | String title = getIntent().getStringExtra(Constant.EXTRA_DOUBAN_MOVIE_TITLE); 34 | return new DoubanStillListViewModel(movieId, title); 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /app/src/main/java/io/mindjet/litereader/ui/activity/MainActivity.java: -------------------------------------------------------------------------------- 1 | package io.mindjet.litereader.ui.activity; 2 | 3 | import android.content.Context; 4 | import android.content.Intent; 5 | 6 | import io.mindjet.jetgear.mvvm.viewmodel.activity.ViewModelCompatActivity; 7 | import io.mindjet.jetutil.manager.ActivityManager; 8 | import io.mindjet.litereader.viewmodel.MainViewModel; 9 | 10 | public class MainActivity extends ViewModelCompatActivity { 11 | 12 | public static Intent intentFor(Context context) { 13 | return new Intent(context, MainActivity.class); 14 | } 15 | 16 | @Override 17 | public MainViewModel giveMeViewModel() { 18 | return new MainViewModel(); 19 | } 20 | 21 | @Override 22 | public void onViewAttached(MainViewModel viewModel) { 23 | ActivityManager.finishActivity(SplashActivity.class); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /app/src/main/java/io/mindjet/litereader/ui/activity/OneArticleDetailActivity.java: -------------------------------------------------------------------------------- 1 | package io.mindjet.litereader.ui.activity; 2 | 3 | import android.content.Context; 4 | import android.content.Intent; 5 | 6 | import io.mindjet.jetgear.mvvm.viewmodel.activity.ViewModelCompatActivity; 7 | import io.mindjet.litereader.entity.Constant; 8 | import io.mindjet.litereader.viewmodel.detail.OneArticleDetailViewModel; 9 | 10 | /** 11 | * ONE 文章详情 activity 12 | *

13 | * Created by Mindjet on 5/5/17. 14 | */ 15 | 16 | public class OneArticleDetailActivity extends ViewModelCompatActivity { 17 | 18 | public static Intent intentFor(Context context, String articleId, String image) { 19 | Intent intent = new Intent(context, OneArticleDetailActivity.class); 20 | intent.putExtra(Constant.EXTRA_ONE_ARTICLE_ID, articleId); 21 | intent.putExtra(Constant.EXTRA_ONE_ARTICLE_IMAGE, image); 22 | return intent; 23 | } 24 | 25 | @Override 26 | public void onViewAttached(OneArticleDetailViewModel viewModel) { 27 | 28 | } 29 | 30 | @Override 31 | public OneArticleDetailViewModel giveMeViewModel() { 32 | String articleId = getIntent().getStringExtra(Constant.EXTRA_ONE_ARTICLE_ID); 33 | String image = getIntent().getStringExtra(Constant.EXTRA_ONE_ARTICLE_IMAGE); 34 | return new OneArticleDetailViewModel(articleId, image); 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /app/src/main/java/io/mindjet/litereader/ui/activity/OneReviewDetailActivity.java: -------------------------------------------------------------------------------- 1 | package io.mindjet.litereader.ui.activity; 2 | 3 | import android.content.Context; 4 | import android.content.Intent; 5 | 6 | import io.mindjet.jetgear.mvvm.viewmodel.activity.ViewModelCompatActivity; 7 | import io.mindjet.litereader.entity.Constant; 8 | import io.mindjet.litereader.model.item.one.Review; 9 | import io.mindjet.litereader.viewmodel.detail.OneReviewDetailViewModel; 10 | 11 | /** 12 | * ONE 影评详情 activity 13 | *

14 | * Created by Jet on 5/4/17. 15 | */ 16 | 17 | public class OneReviewDetailActivity extends ViewModelCompatActivity { 18 | 19 | public static Intent intentFor(Context context, Review review) { 20 | Intent intent = new Intent(context, OneReviewDetailActivity.class); 21 | intent.putExtra(Constant.EXTRA_ONE_REVIEW, review); 22 | return intent; 23 | } 24 | 25 | @Override 26 | public void onViewAttached(OneReviewDetailViewModel viewModel) { 27 | 28 | } 29 | 30 | @Override 31 | public OneReviewDetailViewModel giveMeViewModel() { 32 | Review review = (Review) getIntent().getSerializableExtra(Constant.EXTRA_ONE_REVIEW); 33 | return new OneReviewDetailViewModel(review); 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /app/src/main/java/io/mindjet/litereader/ui/activity/SettingActivity.java: -------------------------------------------------------------------------------- 1 | package io.mindjet.litereader.ui.activity; 2 | 3 | import android.content.Context; 4 | import android.content.Intent; 5 | 6 | import io.mindjet.jetgear.mvvm.viewmodel.activity.ViewModelCompatActivity; 7 | import io.mindjet.litereader.viewmodel.list.SettingViewModel; 8 | 9 | /** 10 | * 设置 activity 11 | *

12 | * Created by Mindjet on 2017/4/19. 13 | */ 14 | 15 | public class SettingActivity extends ViewModelCompatActivity { 16 | 17 | public static Intent intentFor(Context context) { 18 | return new Intent(context, SettingActivity.class); 19 | } 20 | 21 | @Override 22 | public void onViewAttached(SettingViewModel viewModel) { 23 | 24 | } 25 | 26 | @Override 27 | public SettingViewModel giveMeViewModel() { 28 | return new SettingViewModel(); 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /app/src/main/java/io/mindjet/litereader/ui/activity/ZhihuSectionDetailActivity.java: -------------------------------------------------------------------------------- 1 | package io.mindjet.litereader.ui.activity; 2 | 3 | import android.content.Context; 4 | import android.content.Intent; 5 | 6 | import io.mindjet.jetgear.mvvm.viewmodel.activity.ViewModelCompatActivity; 7 | import io.mindjet.litereader.viewmodel.list.ZhihuSectionDetailViewModel; 8 | 9 | /** 10 | * Created by Jet on 3/15/17. 11 | */ 12 | 13 | public class ZhihuSectionDetailActivity extends ViewModelCompatActivity { 14 | 15 | public static Intent intentFor(Context context) { 16 | return new Intent(context, ZhihuSectionDetailActivity.class); 17 | } 18 | 19 | @Override 20 | public void onViewAttached(ZhihuSectionDetailViewModel viewModel) { 21 | 22 | } 23 | 24 | @Override 25 | public ZhihuSectionDetailViewModel giveMeViewModel() { 26 | return new ZhihuSectionDetailViewModel(); 27 | } 28 | 29 | } 30 | -------------------------------------------------------------------------------- /app/src/main/java/io/mindjet/litereader/ui/activity/ZhihuStoryDetailActivity.java: -------------------------------------------------------------------------------- 1 | package io.mindjet.litereader.ui.activity; 2 | 3 | import android.content.Context; 4 | import android.content.Intent; 5 | 6 | import io.mindjet.jetgear.mvvm.viewmodel.activity.ViewModelCompatActivity; 7 | import io.mindjet.litereader.viewmodel.detail.ZhihuStoryDetailViewModel; 8 | 9 | /** 10 | * Created by Jet on 3/14/17. 11 | */ 12 | 13 | public class ZhihuStoryDetailActivity extends ViewModelCompatActivity { 14 | 15 | public static Intent intentFor(Context context) { 16 | return new Intent(context, ZhihuStoryDetailActivity.class); 17 | } 18 | 19 | @Override 20 | public void onViewAttached(ZhihuStoryDetailViewModel viewModel) { 21 | 22 | } 23 | 24 | @Override 25 | public ZhihuStoryDetailViewModel giveMeViewModel() { 26 | return new ZhihuStoryDetailViewModel(); 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /app/src/main/java/io/mindjet/litereader/viewmodel/AboutMeViewModel.java: -------------------------------------------------------------------------------- 1 | package io.mindjet.litereader.viewmodel; 2 | 3 | import android.view.ViewGroup; 4 | 5 | import io.mindjet.jetgear.databinding.IncludeHeaderRecyclerBinding; 6 | import io.mindjet.jetgear.mvvm.viewinterface.ActivityCompatInterface; 7 | import io.mindjet.jetgear.mvvm.viewmodel.ViewModelBinder; 8 | import io.mindjet.jetgear.mvvm.viewmodel.header.HeaderItemViewModel; 9 | import io.mindjet.jetgear.mvvm.viewmodel.header.HeaderViewModel; 10 | import io.mindjet.jetgear.mvvm.viewmodel.integrated.HeaderRecyclerViewModel; 11 | import io.mindjet.litereader.R; 12 | import io.mindjet.litereader.viewmodel.item.AboutInfoViewModel; 13 | 14 | public class AboutMeViewModel extends HeaderRecyclerViewModel> { 15 | 16 | @Override 17 | protected void initHeader(ViewGroup container) { 18 | HeaderViewModel header = new HeaderViewModel.Builder() 19 | .sink(true) 20 | .leftViewModel(new HeaderItemViewModel.BackItemViewModel(getSelfView().getCompatActivity()).icon(R.drawable.ic_arrow_left)) 21 | .centerViewModel(new HeaderItemViewModel.TitleItemViewModel(getString(R.string.about_me))) 22 | .build(); 23 | ViewModelBinder.bind(container, header); 24 | } 25 | 26 | @Override 27 | protected void afterComponentBound() { 28 | getAdapter().add(new AboutInfoViewModel()); 29 | getAdapter().notifyDataSetChanged(); 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /app/src/main/java/io/mindjet/litereader/viewmodel/ICollection.java: -------------------------------------------------------------------------------- 1 | package io.mindjet.litereader.viewmodel; 2 | 3 | /** 4 | * 收藏接口 5 | *

6 | * Created by Mindjet on 5/5/17. 7 | */ 8 | 9 | public interface ICollection { 10 | 11 | void initCollect(); 12 | 13 | void updateCollectIcon(boolean isCollect); 14 | 15 | void manipulateCollect(); 16 | 17 | void disCollect(); 18 | 19 | void collect(); 20 | } 21 | -------------------------------------------------------------------------------- /app/src/main/java/io/mindjet/litereader/viewmodel/detail/book/DoubanBookImageViewModel.java: -------------------------------------------------------------------------------- 1 | package io.mindjet.litereader.viewmodel.detail.book; 2 | 3 | /** 4 | * 豆瓣图书详情 图片 view model 5 | *

6 | * Created by Mindjet on 5/5/17. 7 | */ 8 | 9 | public class DoubanBookImageViewModel { 10 | 11 | } 12 | -------------------------------------------------------------------------------- /app/src/main/java/io/mindjet/litereader/viewmodel/detail/douban/DetailImageViewModel.java: -------------------------------------------------------------------------------- 1 | package io.mindjet.litereader.viewmodel.detail.douban; 2 | 3 | import android.view.View; 4 | 5 | import io.mindjet.jetgear.mvvm.base.BaseViewModel; 6 | import io.mindjet.jetgear.mvvm.viewinterface.ViewInterface; 7 | import io.mindjet.litereader.R; 8 | import io.mindjet.litereader.databinding.ItemDoubanDetailImageBinding; 9 | 10 | /** 11 | * 电影详情中 顶部图片 view model 12 | *

13 | * Created by Jet on 3/20/17. 14 | */ 15 | 16 | public class DetailImageViewModel extends BaseViewModel> { 17 | 18 | private String poster; 19 | private String mainlandPubdate; 20 | private String rating; 21 | 22 | public DetailImageViewModel(String poster, String mainlandPubdate, String rating) { 23 | this.poster = poster; 24 | this.mainlandPubdate = mainlandPubdate; 25 | this.rating = rating; 26 | } 27 | 28 | @Override 29 | public int getLayoutId() { 30 | return R.layout.item_douban_detail_image; 31 | } 32 | 33 | public String getPoster() { 34 | return poster; 35 | } 36 | 37 | public String getMainlandPubdate() { 38 | return "上映时间:" + mainlandPubdate; 39 | } 40 | 41 | public String getRating() { 42 | return "评分:" + rating; 43 | } 44 | 45 | @Override 46 | public void onViewAttached(View view) { 47 | 48 | } 49 | 50 | 51 | } 52 | -------------------------------------------------------------------------------- /app/src/main/java/io/mindjet/litereader/viewmodel/detail/douban/StaffDetailTopInfoViewModel.java: -------------------------------------------------------------------------------- 1 | package io.mindjet.litereader.viewmodel.detail.douban; 2 | 3 | import android.view.View; 4 | 5 | import io.mindjet.jetgear.mvvm.base.BaseViewModel; 6 | import io.mindjet.jetgear.mvvm.viewinterface.ViewInterface; 7 | import io.mindjet.litereader.R; 8 | import io.mindjet.litereader.databinding.ItemDoubanStaffDetailTopInfoBinding; 9 | import io.mindjet.litereader.model.item.douban.StaffDetail; 10 | 11 | /** 12 | * 演职员详情顶部 view model 13 | *

14 | * Created by Mindjet on 2017/4/17. 15 | */ 16 | 17 | public class StaffDetailTopInfoViewModel extends BaseViewModel> { 18 | 19 | private StaffDetail detail; 20 | 21 | public StaffDetailTopInfoViewModel(StaffDetail detail) { 22 | this.detail = detail; 23 | } 24 | 25 | @Override 26 | public int getLayoutId() { 27 | return R.layout.item_douban_staff_detail_top_info; 28 | } 29 | 30 | public StaffDetail getDetail() { 31 | return detail; 32 | } 33 | 34 | public String getEnglishName() { 35 | return getContext().getResources().getString(R.string.douban_staff_english_name, detail.nameEn); 36 | } 37 | 38 | public String getBornPlace() { 39 | return getContext().getResources().getString(R.string.douban_staff_born_place, detail.bornPlace); 40 | } 41 | 42 | @Override 43 | public void onViewAttached(View view) { 44 | 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /app/src/main/java/io/mindjet/litereader/viewmodel/detail/one/OneCommonImageViewModel.java: -------------------------------------------------------------------------------- 1 | package io.mindjet.litereader.viewmodel.detail.one; 2 | 3 | import android.databinding.Bindable; 4 | import android.view.View; 5 | 6 | import io.mindjet.jetgear.mvvm.base.BaseViewModel; 7 | import io.mindjet.jetgear.mvvm.viewinterface.ViewInterface; 8 | import io.mindjet.litereader.BR; 9 | import io.mindjet.litereader.R; 10 | import io.mindjet.litereader.databinding.ItemOneReviewImageBinding; 11 | 12 | /** 13 | * ONE 影评/文章详情 顶部图片 view model 14 | *

15 | * Created by Mindjet on 5/4/17. 16 | */ 17 | 18 | public class OneCommonImageViewModel extends BaseViewModel> { 19 | 20 | private String content; 21 | private String imgUrl; 22 | 23 | public OneCommonImageViewModel(String content, String imgUrl) { 24 | this.content = content; 25 | this.imgUrl = imgUrl; 26 | } 27 | 28 | @Bindable 29 | public String getContent() { 30 | return content; 31 | } 32 | 33 | public String getImgUrl() { 34 | return imgUrl; 35 | } 36 | 37 | public void update(String content) { 38 | this.content = content; 39 | notifyPropertyChanged(BR.content); 40 | } 41 | 42 | @Override 43 | public int getLayoutId() { 44 | return R.layout.item_one_review_image; 45 | } 46 | 47 | @Override 48 | public void onViewAttached(View view) { 49 | 50 | } 51 | } 52 | -------------------------------------------------------------------------------- /app/src/main/java/io/mindjet/litereader/viewmodel/detail/zhihu/ZhihuStoryArticleViewModel.java: -------------------------------------------------------------------------------- 1 | package io.mindjet.litereader.viewmodel.detail.zhihu; 2 | 3 | import android.view.View; 4 | 5 | import io.mindjet.jetgear.mvvm.base.BaseViewModel; 6 | import io.mindjet.jetgear.mvvm.viewinterface.ViewInterface; 7 | import io.mindjet.litereader.R; 8 | import io.mindjet.litereader.databinding.ItemZhihuStoryArticleBinding; 9 | 10 | /** 11 | * 知乎日报文章 正文 view model 12 | *

13 | * Created by Jet on 3/14/17. 14 | */ 15 | 16 | public class ZhihuStoryArticleViewModel extends BaseViewModel> { 17 | 18 | private String content; 19 | private String title; 20 | 21 | public ZhihuStoryArticleViewModel(String title, String content) { 22 | this.title = title; 23 | this.content = content; 24 | } 25 | 26 | @Override 27 | public int getLayoutId() { 28 | return R.layout.item_zhihu_story_article; 29 | } 30 | 31 | public String getContent() { 32 | return content; 33 | } 34 | 35 | public String getTitle() { 36 | return title; 37 | } 38 | 39 | @Override 40 | public void onViewAttached(View view) { 41 | 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /app/src/main/java/io/mindjet/litereader/viewmodel/detail/zhihu/ZhihuStoryImageViewModel.java: -------------------------------------------------------------------------------- 1 | package io.mindjet.litereader.viewmodel.detail.zhihu; 2 | 3 | import android.databinding.ObservableField; 4 | import android.view.View; 5 | 6 | import io.mindjet.jetgear.mvvm.base.BaseViewModel; 7 | import io.mindjet.jetgear.mvvm.viewinterface.ViewInterface; 8 | import io.mindjet.litereader.R; 9 | import io.mindjet.litereader.databinding.ItemZhihuStoryImageBinding; 10 | 11 | /** 12 | * 知乎日报文章 头部图片 view model 13 | *

14 | * Created by Jet on 3/14/17. 15 | */ 16 | 17 | public class ZhihuStoryImageViewModel extends BaseViewModel> { 18 | 19 | public ObservableField imageSource; 20 | public ObservableField imageUrl; 21 | 22 | public ZhihuStoryImageViewModel(String imageSource, String imageUrl) { 23 | this.imageSource = new ObservableField<>(imageSource); 24 | this.imageUrl = new ObservableField<>(imageUrl); 25 | } 26 | 27 | public void setImageSource(String imageSource) { 28 | this.imageSource.set(imageSource); 29 | } 30 | 31 | public void setImageUrl(String imageUrl) { 32 | this.imageUrl.set(imageUrl); 33 | } 34 | 35 | @Override 36 | public int getLayoutId() { 37 | return R.layout.item_zhihu_story_image; 38 | } 39 | 40 | @Override 41 | public void onViewAttached(View view) { 42 | 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /app/src/main/java/io/mindjet/litereader/viewmodel/item/AboutInfoViewModel.java: -------------------------------------------------------------------------------- 1 | package io.mindjet.litereader.viewmodel.item; 2 | 3 | import android.view.View; 4 | 5 | import com.bumptech.glide.Glide; 6 | 7 | import io.mindjet.jetgear.mvvm.base.BaseViewModel; 8 | import io.mindjet.jetgear.mvvm.viewinterface.ViewInterface; 9 | import io.mindjet.jetutil.hint.Toaster; 10 | import io.mindjet.litereader.BuildConfig; 11 | import io.mindjet.litereader.R; 12 | import io.mindjet.litereader.databinding.ItemAboutInfoBinding; 13 | import jp.wasabeef.glide.transformations.RoundedCornersTransformation; 14 | 15 | public class AboutInfoViewModel extends BaseViewModel> { 16 | 17 | @Override 18 | public void onViewAttached(View view) { 19 | Glide.with(getContext()) 20 | .load(R.drawable.ic_launcher) 21 | .bitmapTransform(new RoundedCornersTransformation(getContext(), 100, 0)) 22 | .into(getSelfView().getBinding().ivAppIcon); 23 | } 24 | 25 | @Override 26 | public int getLayoutId() { 27 | return R.layout.item_about_info; 28 | } 29 | 30 | public String getVersion() { 31 | return BuildConfig.VERSION_NAME; 32 | } 33 | 34 | public void onVersionClick(View v) { 35 | Toaster.toast(getContext(), "checking version"); 36 | } 37 | 38 | } 39 | -------------------------------------------------------------------------------- /app/src/main/java/io/mindjet/litereader/viewmodel/item/BlankViewModel.java: -------------------------------------------------------------------------------- 1 | package io.mindjet.litereader.viewmodel.item; 2 | 3 | import android.support.annotation.DimenRes; 4 | import android.view.View; 5 | 6 | import io.mindjet.jetgear.mvvm.base.BaseViewModel; 7 | import io.mindjet.jetgear.mvvm.viewinterface.ViewInterface; 8 | import io.mindjet.litereader.R; 9 | import io.mindjet.litereader.databinding.ItemBlankBinding; 10 | 11 | /** 12 | * 占位 view model 13 | *

14 | * Created by Mindjet on 3/14/17. 15 | */ 16 | 17 | public class BlankViewModel extends BaseViewModel> { 18 | 19 | @DimenRes 20 | private int height; 21 | 22 | public BlankViewModel(@DimenRes int height) { 23 | this.height = height; 24 | } 25 | 26 | public int getHeight() { 27 | return (int) getContext().getResources().getDimension(height); 28 | } 29 | 30 | @Override 31 | public int getLayoutId() { 32 | return R.layout.item_blank; 33 | } 34 | 35 | @Override 36 | public void onViewAttached(View view) { 37 | 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /app/src/main/java/io/mindjet/litereader/viewmodel/item/ChannelUsageItemViewModel.java: -------------------------------------------------------------------------------- 1 | package io.mindjet.litereader.viewmodel.item; 2 | 3 | import android.view.View; 4 | 5 | import io.mindjet.jetgear.mvvm.base.BaseViewModel; 6 | import io.mindjet.jetgear.mvvm.viewinterface.ViewInterface; 7 | import io.mindjet.litereader.R; 8 | import io.mindjet.litereader.databinding.ItemChannelUsageBinding; 9 | 10 | /** 11 | * 频道订阅说明 item view model 12 | *

13 | * Created by Mindjet on 2017/4/16. 14 | */ 15 | 16 | public class ChannelUsageItemViewModel extends BaseViewModel> { 17 | @Override 18 | public int getLayoutId() { 19 | return R.layout.item_channel_usage; 20 | } 21 | 22 | @Override 23 | public void onViewAttached(View view) { 24 | 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /app/src/main/java/io/mindjet/litereader/viewmodel/item/DoubanBookItemViewModel.java: -------------------------------------------------------------------------------- 1 | package io.mindjet.litereader.viewmodel.item; 2 | 3 | import android.view.View; 4 | 5 | import io.mindjet.jetgear.mvvm.base.BaseViewModel; 6 | import io.mindjet.jetgear.mvvm.viewinterface.ViewInterface; 7 | import io.mindjet.litereader.R; 8 | import io.mindjet.litereader.databinding.ItemDoubanBookBinding; 9 | import io.mindjet.litereader.model.item.book.Book; 10 | 11 | /** 12 | * 豆瓣图书 item view model 13 | *

14 | * Created by Mindjet on 5/5/17. 15 | */ 16 | 17 | public class DoubanBookItemViewModel extends BaseViewModel> { 18 | 19 | private Book book; 20 | 21 | public DoubanBookItemViewModel(Book book) { 22 | this.book = book; 23 | } 24 | 25 | public Book getBook() { 26 | return book; 27 | } 28 | 29 | @Override 30 | public int getLayoutId() { 31 | return R.layout.item_douban_book; 32 | } 33 | 34 | @Override 35 | public void onViewAttached(View view) { 36 | 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /app/src/main/java/io/mindjet/litereader/viewmodel/item/DoubanCommentItemViewModel.java: -------------------------------------------------------------------------------- 1 | package io.mindjet.litereader.viewmodel.item; 2 | 3 | import android.view.View; 4 | 5 | import io.mindjet.jetgear.mvvm.base.BaseViewModel; 6 | import io.mindjet.jetgear.mvvm.viewinterface.ViewInterface; 7 | import io.mindjet.litereader.R; 8 | import io.mindjet.litereader.databinding.ItemDoubanCommentBinding; 9 | import io.mindjet.litereader.model.item.douban.Comment; 10 | 11 | /** 12 | * 豆瓣电影 短影评 item view model 13 | *

14 | * Created by Mindjet on 3/22/17. 15 | */ 16 | 17 | public class DoubanCommentItemViewModel extends BaseViewModel> { 18 | 19 | private Comment comment; 20 | 21 | public DoubanCommentItemViewModel(Comment comment) { 22 | this.comment = comment; 23 | } 24 | 25 | @Override 26 | public int getLayoutId() { 27 | return R.layout.item_douban_comment; 28 | } 29 | 30 | public Comment getComment() { 31 | return comment; 32 | } 33 | 34 | @Override 35 | public void onViewAttached(View view) { 36 | 37 | } 38 | 39 | public int getRating() { 40 | String rating = comment.rating.value; 41 | return (int) Float.valueOf(rating).floatValue(); 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /app/src/main/java/io/mindjet/litereader/viewmodel/item/DoubanReviewItemViewModel.java: -------------------------------------------------------------------------------- 1 | package io.mindjet.litereader.viewmodel.item; 2 | 3 | import android.view.View; 4 | 5 | import io.mindjet.jetgear.mvvm.base.BaseViewModel; 6 | import io.mindjet.jetgear.mvvm.viewinterface.ViewInterface; 7 | import io.mindjet.litereader.R; 8 | import io.mindjet.litereader.databinding.ItemDoubanReviewBinding; 9 | import io.mindjet.litereader.model.item.douban.Review; 10 | import rx.functions.Action1; 11 | 12 | /** 13 | * 豆瓣电影 长影评 view model 14 | *

15 | * Created by Mindjet on 3/22/17. 16 | */ 17 | 18 | public class DoubanReviewItemViewModel extends BaseViewModel> { 19 | 20 | private Review review; 21 | private Action1 onItemClick; 22 | 23 | public DoubanReviewItemViewModel(Review review, Action1 onItemClick) { 24 | this.review = review; 25 | this.onItemClick = onItemClick; 26 | } 27 | 28 | @Override 29 | public int getLayoutId() { 30 | return R.layout.item_douban_review; 31 | } 32 | 33 | public Review getReview() { 34 | return review; 35 | } 36 | 37 | public void onClick() { 38 | if (onItemClick != null) 39 | onItemClick.call(review); 40 | } 41 | 42 | @Override 43 | public void onViewAttached(View view) { 44 | 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /app/src/main/java/io/mindjet/litereader/viewmodel/item/DoubanStillItemViewModel.java: -------------------------------------------------------------------------------- 1 | package io.mindjet.litereader.viewmodel.item; 2 | 3 | import android.view.View; 4 | 5 | import io.mindjet.jetgear.mvvm.base.BaseViewModel; 6 | import io.mindjet.jetgear.mvvm.viewinterface.ViewInterface; 7 | import io.mindjet.litereader.R; 8 | import io.mindjet.litereader.databinding.ItemDoubanStillBinding; 9 | import io.mindjet.litereader.model.item.douban.DetailStill; 10 | import io.mindjet.litereader.ui.dialog.StillDialog; 11 | 12 | /** 13 | * 剧照列表 item view model 14 | *

15 | * Created by Jet on 5/3/17. 16 | */ 17 | 18 | public class DoubanStillItemViewModel extends BaseViewModel> { 19 | 20 | private DetailStill detailStill; 21 | 22 | public DoubanStillItemViewModel(DetailStill detailStill) { 23 | this.detailStill = detailStill; 24 | } 25 | 26 | public DetailStill getStill() { 27 | return detailStill; 28 | } 29 | 30 | @Override 31 | public int getLayoutId() { 32 | return R.layout.item_douban_still; 33 | } 34 | 35 | @Override 36 | public void onViewAttached(View view) { 37 | 38 | } 39 | 40 | public void onClick() { 41 | new StillDialog(getContext(), detailStill).show(); 42 | } 43 | 44 | } 45 | -------------------------------------------------------------------------------- /app/src/main/java/io/mindjet/litereader/viewmodel/item/MovieTypeViewModel.java: -------------------------------------------------------------------------------- 1 | package io.mindjet.litereader.viewmodel.item; 2 | 3 | import android.view.View; 4 | 5 | import io.mindjet.jetgear.mvvm.base.BaseViewModel; 6 | import io.mindjet.jetgear.mvvm.viewinterface.ViewInterface; 7 | import io.mindjet.litereader.R; 8 | import io.mindjet.litereader.databinding.ItemMovieTypeBinding; 9 | 10 | /** 11 | * 电影类型(标签) view model 12 | *

13 | * Created by Mindjet on 3/20/17. 14 | */ 15 | 16 | public class MovieTypeViewModel extends BaseViewModel> { 17 | 18 | private String content; 19 | 20 | public MovieTypeViewModel(String content) { 21 | this.content = content; 22 | } 23 | 24 | @Override 25 | public int getLayoutId() { 26 | return R.layout.item_movie_type; 27 | } 28 | 29 | public String getContent() { 30 | return content; 31 | } 32 | 33 | @Override 34 | public void onViewAttached(View view) { 35 | 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /app/src/main/java/io/mindjet/litereader/viewmodel/item/OneArticleItemViewModel.java: -------------------------------------------------------------------------------- 1 | package io.mindjet.litereader.viewmodel.item; 2 | 3 | import android.view.View; 4 | 5 | import io.mindjet.jetgear.mvvm.base.BaseViewModel; 6 | import io.mindjet.jetgear.mvvm.viewinterface.ViewInterface; 7 | import io.mindjet.litereader.R; 8 | import io.mindjet.litereader.databinding.ItemOneArticleBinding; 9 | import io.mindjet.litereader.model.item.one.Article; 10 | import io.mindjet.litereader.ui.activity.OneArticleDetailActivity; 11 | 12 | /** 13 | * ONE文章 item view model 14 | *

15 | * Created by Mindjet on 5/5/17. 16 | */ 17 | 18 | public class OneArticleItemViewModel extends BaseViewModel> { 19 | 20 | private Article article; 21 | 22 | public OneArticleItemViewModel(Article article) { 23 | this.article = article; 24 | } 25 | 26 | public Article getArticle() { 27 | return article; 28 | } 29 | 30 | @Override 31 | public int getLayoutId() { 32 | return R.layout.item_one_article; 33 | } 34 | 35 | @Override 36 | public void onViewAttached(View view) { 37 | 38 | } 39 | 40 | public void onClick() { 41 | getContext().startActivity(OneArticleDetailActivity.intentFor(getContext(), article.id, article.imgUrl)); 42 | } 43 | 44 | } 45 | -------------------------------------------------------------------------------- /app/src/main/java/io/mindjet/litereader/viewmodel/item/OneReviewItemViewModel.java: -------------------------------------------------------------------------------- 1 | package io.mindjet.litereader.viewmodel.item; 2 | 3 | import android.view.View; 4 | 5 | import io.mindjet.jetgear.mvvm.base.BaseViewModel; 6 | import io.mindjet.jetgear.mvvm.viewinterface.ViewInterface; 7 | import io.mindjet.litereader.R; 8 | import io.mindjet.litereader.databinding.ItemOneReviewBinding; 9 | import io.mindjet.litereader.model.item.one.Review; 10 | import io.mindjet.litereader.ui.activity.OneReviewDetailActivity; 11 | 12 | /** 13 | * ONE 影评 item view model 14 | *

15 | * Created by Jet on 5/4/17. 16 | */ 17 | 18 | public class OneReviewItemViewModel extends BaseViewModel> { 19 | 20 | private Review review; 21 | 22 | public OneReviewItemViewModel(Review review) { 23 | this.review = review; 24 | } 25 | 26 | public Review getReview() { 27 | return review; 28 | } 29 | 30 | @Override 31 | public int getLayoutId() { 32 | return R.layout.item_one_review; 33 | } 34 | 35 | @Override 36 | public void onViewAttached(View view) { 37 | 38 | } 39 | 40 | public void onClick() { 41 | getContext().startActivity(OneReviewDetailActivity.intentFor(getContext(), review)); 42 | } 43 | 44 | } 45 | -------------------------------------------------------------------------------- /app/src/main/java/io/mindjet/litereader/viewmodel/item/ZhihuBannerItemViewModel.java: -------------------------------------------------------------------------------- 1 | package io.mindjet.litereader.viewmodel.item; 2 | 3 | import android.view.View; 4 | 5 | import io.mindjet.jetgear.mvvm.base.BaseViewModel; 6 | import io.mindjet.jetgear.mvvm.viewinterface.ViewInterface; 7 | import io.mindjet.litereader.R; 8 | import io.mindjet.litereader.databinding.ItemZhihuBannerBinding; 9 | import io.mindjet.litereader.model.item.ZhihuTopStoryItem; 10 | import rx.functions.Action3; 11 | 12 | /** 13 | * 知乎日报首页 banner item view model 14 | *

15 | * Created by Mindjet on 3/14/17. 16 | */ 17 | 18 | public class ZhihuBannerItemViewModel extends BaseViewModel> { 19 | 20 | private ZhihuTopStoryItem item; 21 | private Action3 onAction; 22 | 23 | public ZhihuBannerItemViewModel(ZhihuTopStoryItem item) { 24 | this.item = item; 25 | } 26 | 27 | public ZhihuBannerItemViewModel onAction(Action3 onAction) { 28 | this.onAction = onAction; 29 | return this; 30 | } 31 | 32 | public String getImageUrl() { 33 | return item.image; 34 | } 35 | 36 | public String getTitle() { 37 | return item.title; 38 | } 39 | 40 | @Override 41 | public int getLayoutId() { 42 | return R.layout.item_zhihu_banner; 43 | } 44 | 45 | @Override 46 | public void onViewAttached(View view) { 47 | 48 | } 49 | 50 | public void onClick(){ 51 | if (onAction != null) 52 | onAction.call(item.id, 0, 0); 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /app/src/main/java/io/mindjet/litereader/viewmodel/item/ZhihuDateItemViewModel.java: -------------------------------------------------------------------------------- 1 | package io.mindjet.litereader.viewmodel.item; 2 | 3 | import android.support.annotation.StringRes; 4 | import android.view.View; 5 | 6 | import java.util.Date; 7 | 8 | import io.mindjet.jetgear.mvvm.base.BaseViewModel; 9 | import io.mindjet.jetgear.mvvm.viewinterface.ViewInterface; 10 | import io.mindjet.litereader.R; 11 | import io.mindjet.litereader.databinding.ItemZhihuDateBinding; 12 | import io.mindjet.litereader.util.DateUtil; 13 | 14 | /** 15 | * 知乎日报首页 时间 item view model 16 | *

17 | * Created by Mindjet on 3/14/17. 18 | */ 19 | 20 | public class ZhihuDateItemViewModel extends BaseViewModel> { 21 | 22 | @StringRes 23 | private int text; 24 | private Date date; 25 | 26 | public ZhihuDateItemViewModel(Date date) { 27 | this.date = date; 28 | } 29 | 30 | public ZhihuDateItemViewModel(@StringRes int text) { 31 | this.text = text; 32 | } 33 | 34 | public String getDate() { 35 | if (text != 0) 36 | return getContext().getResources().getString(text); 37 | return DateUtil.toFriendlyFormat(date); 38 | } 39 | 40 | @Override 41 | public int getLayoutId() { 42 | return R.layout.item_zhihu_date; 43 | } 44 | 45 | @Override 46 | public void onViewAttached(View view) { 47 | 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mindjet/LiteReader/202e6e83e18e4bf77755dc1ed6579f696000c35a/app/src/main/res/drawable-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mindjet/LiteReader/202e6e83e18e4bf77755dc1ed6579f696000c35a/app/src/main/res/drawable-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mindjet/LiteReader/202e6e83e18e4bf77755dc1ed6579f696000c35a/app/src/main/res/drawable-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/shape_corner_10dp.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/shape_corner_5dp.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/shape_oval_border.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 8 | 9 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/shape_text_cursor.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_main.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /app/src/main/res/layout/item_blank.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | 10 | 11 | 12 | 16 | 17 | -------------------------------------------------------------------------------- /app/src/main/res/layout/item_channel_usage.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 9 | 10 | 11 | 16 | 17 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /app/src/main/res/layout/item_douban_still.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | 10 | 11 | 12 | 17 | 18 | 26 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /app/src/main/res/layout/item_movie_type.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 9 | 10 | 11 | 24 | 25 | -------------------------------------------------------------------------------- /app/src/main/res/layout/item_zhihu_banner.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | 10 | 11 | 12 | 17 | 18 | 24 | 25 | 29 | 30 | 39 | 40 | 41 | 42 | -------------------------------------------------------------------------------- /app/src/main/res/layout/item_zhihu_date.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 9 | 10 | 11 | 17 | 18 | 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /app/src/main/res/layout/item_zhihu_story_image.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | 10 | 11 | 12 | 15 | 16 | 21 | 22 | 26 | 27 | 35 | 36 | 37 | 38 | -------------------------------------------------------------------------------- /app/src/main/res/menu/menu_common.xml: -------------------------------------------------------------------------------- 1 | 2 |

4 | 9 | 14 | 19 | -------------------------------------------------------------------------------- /app/src/main/res/values-w820dp/dimens.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 64dp 6 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/values/colors.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | #42a5da 4 | #303F9F 5 | #FF4081 6 | 7 | #aa000000 8 | #262626 9 | #333333 10 | 11 | 12 | -------------------------------------------------------------------------------- /app/src/main/res/values/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 10 | 11 | 12 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /app/src/test/java/io/mindjet/jetpack/ExampleUnitTest.java: -------------------------------------------------------------------------------- 1 | package io.mindjet.litereader; 2 | 3 | import org.junit.Test; 4 | 5 | import static org.junit.Assert.*; 6 | 7 | /** 8 | * Example local unit test, which will execute on the development machine (host). 9 | * 10 | * @see Testing documentation 11 | */ 12 | public class ExampleUnitTest { 13 | @Test 14 | public void addition_isCorrect() throws Exception { 15 | assertEquals(4, 2 + 2); 16 | } 17 | } -------------------------------------------------------------------------------- /art/github-display-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mindjet/LiteReader/202e6e83e18e4bf77755dc1ed6579f696000c35a/art/github-display-1.png -------------------------------------------------------------------------------- /art/github-display-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mindjet/LiteReader/202e6e83e18e4bf77755dc1ed6579f696000c35a/art/github-display-2.png -------------------------------------------------------------------------------- /art/github-display-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mindjet/LiteReader/202e6e83e18e4bf77755dc1ed6579f696000c35a/art/github-display-3.png -------------------------------------------------------------------------------- /art/github-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mindjet/LiteReader/202e6e83e18e4bf77755dc1ed6579f696000c35a/art/github-icon.png -------------------------------------------------------------------------------- /build.gradle: -------------------------------------------------------------------------------- 1 | // Top-level build file where you can add configuration options common to all sub-projects/modules. 2 | 3 | Properties properties = new Properties() 4 | properties.load(project.rootProject.file('local.properties').newDataInputStream()) 5 | 6 | buildscript { 7 | repositories { 8 | maven { url 'http://maven.aliyun.com/nexus/content/groups/public/' } 9 | maven { url 'https://jitpack.io' } 10 | mavenCentral() 11 | jcenter() 12 | } 13 | dependencies { 14 | classpath 'com.android.tools.build:gradle:2.3.1' 15 | 16 | // NOTE: Do not place your application dependencies here; they belong 17 | // in the individual module build.gradle files 18 | } 19 | } 20 | 21 | allprojects { 22 | repositories { 23 | // maven { url 'http://maven.aliyun.com/nexus/content/groups/public/' } 24 | maven { url properties.getProperty("sdk.dir") + "/extras/android/m2repository/" } 25 | maven { url properties.getProperty("sdk.dir") + "/extras/google/m2repository/" } 26 | maven { url 'https://jitpack.io' } 27 | mavenCentral() 28 | jcenter() 29 | } 30 | } 31 | 32 | task clean(type: Delete) { 33 | delete rootProject.buildDir 34 | } 35 | -------------------------------------------------------------------------------- /gradle.properties: -------------------------------------------------------------------------------- 1 | # Project-wide Gradle settings. 2 | # IDE (e.g. Android Studio) users: 3 | # Gradle settings configured through the IDE *will override* 4 | # any settings specified in this file. 5 | # For more details on how to configure your build environment visit 6 | # http://www.gradle.org/docs/current/userguide/build_environment.html 7 | # Specifies the JVM arguments used for the daemon process. 8 | # The setting is particularly useful for tweaking memory settings. 9 | # When configured, Gradle will run in incubating parallel mode. 10 | # This option should only be used with decoupled projects. More details, visit 11 | # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects 12 | # org.gradle.parallel=true 13 | org.gradle.daemon=true 14 | org.gradle.parallel=true 15 | org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m 16 | -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mindjet/LiteReader/202e6e83e18e4bf77755dc1ed6579f696000c35a/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | #Sun Mar 12 21:39:58 CST 2017 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-3.3-all.zip 7 | -------------------------------------------------------------------------------- /settings.gradle: -------------------------------------------------------------------------------- 1 | include ':app', ':JetGear', ':JetUtil', ':JetImage',':JetWidget' 2 | --------------------------------------------------------------------------------