├── .gitignore ├── .idea ├── codeStyleSettings.xml ├── compiler.xml ├── copyright │ └── profiles_settings.xml ├── encodings.xml ├── gradle.xml ├── inspectionProfiles │ ├── Project_Default.xml │ └── profiles_settings.xml ├── misc.xml ├── modules.xml ├── runConfigurations.xml └── vcs.xml ├── README.md ├── animationlib ├── .gitignore ├── build.gradle ├── proguard-rules.pro └── src │ ├── androidTest │ └── java │ │ └── com │ │ └── jerey │ │ └── animationlib │ │ └── ExampleInstrumentedTest.java │ ├── main │ ├── AndroidManifest.xml │ ├── java │ │ └── com │ │ │ └── jerey │ │ │ └── animationlib │ │ │ ├── SherlockAnimationCallBack.java │ │ │ ├── SherlockFrame.java │ │ │ ├── SherlockLinearLayout.java │ │ │ ├── SherlockRelativeLayout.java │ │ │ └── SherlockScrollView.java │ └── res │ │ └── values │ │ ├── attrs.xml │ │ └── strings.xml │ └── test │ └── java │ └── com │ └── jerey │ └── animationlib │ └── ExampleUnitTest.java ├── app ├── .gitignore ├── build.gradle ├── proguard-rules.pro └── src │ ├── androidTest │ └── java │ │ └── com │ │ └── jerey │ │ └── keepgank │ │ └── ExampleInstrumentedTest.java │ ├── main │ ├── AndroidManifest.xml │ ├── assets │ │ ├── fonts │ │ │ └── WRYHZT.ttf │ │ ├── html │ │ │ └── license.html │ │ └── skin │ │ │ ├── theme-night.skin │ │ │ └── theme-ocean.skin │ ├── java │ │ └── com │ │ │ └── jerey │ │ │ └── keepgank │ │ │ ├── GankApp.java │ │ │ ├── api │ │ │ ├── Config.java │ │ │ ├── DoubanApi.java │ │ │ ├── GankApi.java │ │ │ ├── HttpDiskLruCacheInterceptor.java │ │ │ └── HttpInterceptor.java │ │ │ ├── data │ │ │ ├── Constants.java │ │ │ ├── IData.java │ │ │ ├── bean │ │ │ │ ├── BaseEntity.java │ │ │ │ ├── Bookmark.java │ │ │ │ ├── Data.java │ │ │ │ ├── GankDay.java │ │ │ │ ├── GankDayResults.java │ │ │ │ ├── Result.java │ │ │ │ ├── TitleBean.java │ │ │ │ └── Type.java │ │ │ ├── constant │ │ │ │ └── AppConstant.java │ │ │ └── realm │ │ │ │ ├── GankModule.java │ │ │ │ ├── RealmBookmark.java │ │ │ │ ├── RealmData.java │ │ │ │ └── RealmImage.java │ │ │ ├── modules │ │ │ ├── MainActivity.java │ │ │ ├── about │ │ │ │ ├── AboutActivity.java │ │ │ │ └── AboutFragment.java │ │ │ ├── base │ │ │ │ ├── AppSwipeBackActivity.java │ │ │ │ ├── BaseFragment.java │ │ │ │ └── SingleFragmentActivity.java │ │ │ ├── common │ │ │ │ ├── MyWebActivity.java │ │ │ │ ├── WebFragment.java │ │ │ │ └── WebView.java │ │ │ ├── douban │ │ │ │ ├── DoubanActivity.java │ │ │ │ ├── DoubanFragment.java │ │ │ │ ├── MovieActivity.java │ │ │ │ ├── MovieListActivity.java │ │ │ │ ├── bean │ │ │ │ │ ├── BannerBean.java │ │ │ │ │ ├── MovieInfoBean.java │ │ │ │ │ ├── SubjectsBean.java │ │ │ │ │ ├── TypeInfoBean.java │ │ │ │ │ └── USBean.java │ │ │ │ └── itembinder │ │ │ │ │ ├── BannerBinder.java │ │ │ │ │ ├── CastsBinder.java │ │ │ │ │ ├── SubjectsBinder.java │ │ │ │ │ └── TypeInfoBeanBinder.java │ │ │ ├── gank │ │ │ │ ├── HomeFragment.java │ │ │ │ ├── ListFragment.java │ │ │ │ ├── MeiziFragment.java │ │ │ │ ├── TodayFragment.java │ │ │ │ ├── adapter │ │ │ │ │ ├── HomeFragmentPagerAdapter.java │ │ │ │ │ └── MeiziAdapter.java │ │ │ │ └── binder │ │ │ │ │ ├── GankResultBinder.java │ │ │ │ │ └── TitleBeanBinder.java │ │ │ ├── photochoose │ │ │ │ ├── CustomViewPagerTransformer.java │ │ │ │ ├── PhotoChooseActivity.java │ │ │ │ ├── PolygonView.java │ │ │ │ └── ViewPagerAdapter.java │ │ │ ├── photopreview │ │ │ │ ├── PhotoActivity.java │ │ │ │ ├── PhotoBean.java │ │ │ │ ├── PhotoPreviewActivity.java │ │ │ │ └── PhotoPreviewFragment.java │ │ │ ├── splash │ │ │ │ └── SplashActivity.java │ │ │ ├── theme │ │ │ │ └── ThemeChooseActivity.java │ │ │ └── welcome │ │ │ │ └── WelcomeActivity.java │ │ │ ├── utils │ │ │ ├── AnimationHelper.java │ │ │ ├── ApplicationUtils.java │ │ │ ├── BlurImageUtils.java │ │ │ ├── ColorUtils.java │ │ │ ├── DisplayUtils.java │ │ │ ├── FastBlur.java │ │ │ ├── IconUtils.java │ │ │ ├── ImageSave.java │ │ │ ├── MD5Utils.java │ │ │ ├── MathUtils.java │ │ │ ├── MyDateUtils.java │ │ │ ├── NetworkManager.java │ │ │ ├── SPUtils.java │ │ │ ├── ShellUtils.java │ │ │ ├── StatusBarUtils.java │ │ │ └── SystemUtils.java │ │ │ └── widget │ │ │ ├── BaseItemAnimator.java │ │ │ ├── GankHeadItemDecoration.java │ │ │ ├── GlideRoundTransform.java │ │ │ ├── MyBottomItemDecoration.java │ │ │ ├── PinchImageView.java │ │ │ ├── SlideInOutRightItemAnimator.java │ │ │ ├── SwipeToRefreshLayout.java │ │ │ ├── behavior │ │ │ └── MyDetailBelowAppbarBehaviour.java │ │ │ └── imgpreview │ │ │ └── SmoothImageView.java │ └── res │ │ ├── anim │ │ ├── fade_in.xml │ │ ├── fade_out.xml │ │ ├── in_from_right.xml │ │ └── out_to_bottom.xml │ │ ├── animator │ │ └── anim_path.xml │ │ ├── drawable │ │ ├── about_bg.xml │ │ ├── astronaut.png │ │ ├── bg_blue.xml │ │ ├── bg_cyan.xml │ │ ├── bg_drawer_item.xml │ │ ├── bg_drawer_item_checked.xml │ │ ├── bg_green.xml │ │ ├── bg_grey.xml │ │ ├── bg_pink.xml │ │ ├── bg_progressbar_color.xml │ │ ├── bg_red.xml │ │ ├── bg_welcome.xml │ │ ├── bg_yellow.xml │ │ ├── big_dipper.png │ │ ├── btn_bg.xml │ │ ├── button_ok.png │ │ ├── button_ok_on.png │ │ ├── captain_android.jpg │ │ ├── choose.png │ │ ├── comet.png │ │ ├── fling_xiangshang.png │ │ ├── ic_arrow_back.png │ │ ├── ic_bookmark_grey600_24dp.png │ │ ├── ic_home_grey600_24dp.png │ │ ├── ic_launcher.png │ │ ├── ic_progress_large.xml │ │ ├── ic_search_white_24dp.xml │ │ ├── ic_settings_grey600_24dp.png │ │ ├── ic_star_grey600_24dp.png │ │ ├── ic_star_outline_grey600_24dp.png │ │ ├── ic_today_white_36dp.png │ │ ├── ic_type_csdn.xml │ │ ├── ic_type_csdn_white_24dp.png │ │ ├── ic_type_finalshares.xml │ │ ├── ic_type_finalshares_white_24dp.png │ │ ├── ic_type_github.xml │ │ ├── ic_type_github_circle_white_24dp.png │ │ ├── ic_type_jianshu.xml │ │ ├── ic_type_jianshu_white_24dp.png │ │ ├── ic_type_video.xml │ │ ├── ic_type_web.xml │ │ ├── ic_type_web_white_24dp.png │ │ ├── ic_type_zhihu.xml │ │ ├── ic_type_zhihu_white_24dp.png │ │ ├── ic_unfold_more_grey600_24dp.png │ │ ├── ic_video_library_white_24dp.png │ │ ├── icon_about.png │ │ ├── icon_more.png │ │ ├── icon_search.png │ │ ├── img_failed.xml │ │ ├── jay.png │ │ ├── list_divider_h.xml │ │ ├── meizi_grey_on.png │ │ ├── meteorites.png │ │ ├── moon.png │ │ ├── movie.png │ │ ├── path.xml │ │ ├── path_anim.xml │ │ ├── planet_earth_1.png │ │ ├── planet_univearse_telestial_space_mars.png │ │ ├── progress_large_white.xml │ │ ├── radar_1.png │ │ ├── rocket_1.png │ │ ├── selector_button.xml │ │ ├── space_station_1.png │ │ ├── splash.xml │ │ ├── theme_dark.png │ │ ├── theme_defalut.png │ │ ├── theme_ocean.png │ │ └── timg1.jpg │ │ ├── layout │ │ ├── activity_about.xml │ │ ├── activity_empty.xml │ │ ├── activity_main.xml │ │ ├── activity_movie.xml │ │ ├── activity_photo.xml │ │ ├── activity_photo_choose.xml │ │ ├── activity_photo_preview.xml │ │ ├── activity_splash.xml │ │ ├── activity_theme_choose.xml │ │ ├── activity_welcome.xml │ │ ├── fragment_day.xml │ │ ├── fragment_douban.xml │ │ ├── fragment_home.xml │ │ ├── fragment_meizi.xml │ │ ├── fragment_photo_preview.xml │ │ ├── fragment_recycler.xml │ │ ├── fragment_viewpager_item.xml │ │ ├── fragment_web.xml │ │ ├── fragment_webview.xml │ │ ├── include_appbar_layout.xml │ │ ├── include_splash_layout.xml │ │ ├── include_toolbar.xml │ │ ├── item_banner.xml │ │ ├── item_cast.xml │ │ ├── item_douban_type_item.xml │ │ ├── item_douban_typeinfo.xml │ │ ├── item_gank.xml │ │ ├── item_gank_header.xml │ │ ├── item_gank_title.xml │ │ ├── item_header.xml │ │ ├── item_list.xml │ │ ├── item_subject.xml │ │ ├── layout_navigation.xml │ │ ├── layout_navigation_head.xml │ │ └── meizi_fragment_item.xml │ │ ├── menu │ │ ├── menu_drawer.xml │ │ ├── menu_enter_firstin.xml │ │ ├── menu_search.xml │ │ └── menu_web.xml │ │ ├── mipmap-hdpi │ │ └── ic_launcher.png │ │ ├── mipmap-mdpi │ │ └── ic_launcher.png │ │ ├── mipmap-xhdpi │ │ └── ic_launcher.png │ │ ├── mipmap-xxhdpi │ │ ├── ic_launcher.png │ │ └── ic_menu.png │ │ ├── mipmap-xxxhdpi │ │ └── ic_launcher.png │ │ ├── values-en │ │ └── strings.xml │ │ ├── values-night │ │ ├── colors.xml │ │ └── styles.xml │ │ ├── values-w820dp │ │ └── dimens.xml │ │ ├── values │ │ ├── attrs.xml │ │ ├── colors.xml │ │ ├── dimens.xml │ │ ├── strings.xml │ │ └── styles.xml │ │ └── xml │ │ └── about_preference.xml │ └── test │ └── java │ └── com │ └── jerey │ └── keepgank │ └── ExampleUnitTest.java ├── build.gradle ├── downloadmanager ├── .gitignore ├── build.gradle ├── proguard-rules.pro └── src │ ├── androidTest │ └── java │ │ └── com │ │ └── jerey │ │ └── downloadmanager │ │ └── ExampleInstrumentedTest.java │ ├── main │ ├── AndroidManifest.xml │ ├── java │ │ └── com │ │ │ └── jerey │ │ │ └── downloadmanager │ │ │ ├── DefaultRetryPolicy.java │ │ │ ├── DownloadDispatcher.java │ │ │ ├── DownloadHelper.java │ │ │ ├── DownloadManager.java │ │ │ ├── DownloadRequest.java │ │ │ ├── DownloadRequestQueue.java │ │ │ ├── DownloadStatusListener.java │ │ │ ├── DownloadStatusListenerV1.java │ │ │ ├── Log.java │ │ │ ├── RetryError.java │ │ │ └── RetryPolicy.java │ └── res │ │ └── values │ │ └── strings.xml │ └── test │ └── java │ └── com │ └── jerey │ └── downloadmanager │ └── ExampleUnitTest.java ├── footerrecyclerview ├── .gitignore ├── build.gradle ├── proguard-rules.pro └── src │ ├── androidTest │ └── java │ │ └── com │ │ └── jerey │ │ └── footerrecyclerview │ │ └── ExampleInstrumentedTest.java │ ├── main │ ├── AndroidManifest.xml │ ├── java │ │ └── com │ │ │ └── jerey │ │ │ ├── animationadapter │ │ │ ├── AlphaInAnimationAdapter.java │ │ │ ├── AnimationAdapter.java │ │ │ ├── ScaleInAnimationAdapter.java │ │ │ ├── SlideInBottomAnimationAdapter.java │ │ │ ├── SlideInLeftAnimationAdapter.java │ │ │ ├── SlideInRightAnimationAdapter.java │ │ │ └── ViewHelper.java │ │ │ └── footerrecyclerview │ │ │ └── FooterRecyclerView.java │ └── res │ │ ├── layout │ │ └── footer_layout.xml │ │ └── values │ │ └── strings.xml │ └── test │ └── java │ └── com │ └── jerey │ └── footerrecyclerview │ └── ExampleUnitTest.java ├── gradle.properties ├── gradle └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat ├── lrucache ├── .gitignore ├── build.gradle ├── proguard-rules.pro └── src │ ├── androidTest │ └── java │ │ └── com │ │ └── jerey │ │ └── lruCache │ │ └── ExampleInstrumentedTest.java │ ├── main │ ├── AndroidManifest.xml │ ├── java │ │ └── com │ │ │ └── jerey │ │ │ └── lruCache │ │ │ ├── DiskLruCache.java │ │ │ ├── DiskLruCacheManager.java │ │ │ ├── StrictLineReader.java │ │ │ ├── Util.java │ │ │ └── Utils.java │ └── res │ │ └── values │ │ └── strings.xml │ └── test │ └── java │ └── com │ └── jerey │ └── lruCache │ └── ExampleUnitTest.java ├── mutiType ├── .gitignore ├── build.gradle ├── proguard-rules.pro └── src │ ├── androidTest │ └── java │ │ └── com │ │ └── jerey │ │ └── mutitype │ │ └── ExampleInstrumentedTest.java │ ├── main │ ├── AndroidManifest.xml │ ├── java │ │ └── com │ │ │ └── jerey │ │ │ └── mutitype │ │ │ ├── BinderNotFoundException.java │ │ │ ├── ClassLinker.java │ │ │ ├── ClassLinkerWrapper.java │ │ │ ├── DefaultLinker.java │ │ │ ├── ItemViewBinder.java │ │ │ ├── Items.java │ │ │ ├── Linker.java │ │ │ ├── MultiTypeAdapter.java │ │ │ ├── MultiTypeAsserts.java │ │ │ ├── MultiTypePool.java │ │ │ ├── OneToManyBuilder.java │ │ │ ├── OneToManyEndpoint.java │ │ │ ├── OneToManyFlow.java │ │ │ └── TypePool.java │ └── res │ │ └── values │ │ └── strings.xml │ └── test │ └── java │ └── com │ └── jerey │ └── mutitype │ └── ExampleUnitTest.java ├── pic ├── choose_head.gif ├── pic0.jpg ├── pic1.jpg ├── pic10.jpg ├── pic11.jpg ├── pic13.jpg ├── pic14.jpg ├── pic15.jpg ├── pic16.jpg ├── pic17.jpg ├── pic18.jpg ├── pic19.jpg ├── pic2.jpg ├── pic3.jpg ├── pic4.jpg ├── pic5.jpg ├── pic6.jpg ├── pic7.jpg ├── pic8.jpg └── pic9.jpg ├── searchview ├── .gitignore ├── build.gradle ├── proguard-rules.pro └── src │ ├── androidTest │ └── java │ │ └── com │ │ └── jerey │ │ └── searchview │ │ └── ExampleInstrumentedTest.java │ ├── main │ ├── AndroidManifest.xml │ ├── java │ │ └── com │ │ │ └── jerey │ │ │ └── searchview │ │ │ ├── HistoryBean.java │ │ │ ├── HistoryBeanBinder.java │ │ │ ├── KeyboardUtils.java │ │ │ ├── SearchView.java │ │ │ ├── SearchViewUtils.java │ │ │ └── data │ │ │ ├── HistoryDataBaseHelper.java │ │ │ └── HistoryHelper.java │ └── res │ │ ├── drawable │ │ ├── ic_arrow_back_black_24dp.xml │ │ ├── ic_clean_input.xml │ │ ├── ic_history_black_24dp.xml │ │ ├── ic_search_black_24dp.xml │ │ └── recycler_touch_bg.xml │ │ ├── layout │ │ ├── search_view.xml │ │ └── view_rv_item.xml │ │ └── values │ │ ├── attrs.xml │ │ ├── colors.xml │ │ └── strings.xml │ └── test │ └── java │ └── com │ └── jerey │ └── searchview │ └── ExampleUnitTest.java ├── settings.gradle ├── theme-night ├── .gitignore ├── build.gradle ├── proguard-rules.pro └── src │ ├── androidTest │ └── java │ │ └── com │ │ └── jerey │ │ └── theme_night │ │ └── ExampleInstrumentedTest.java │ ├── main │ ├── AndroidManifest.xml │ └── res │ │ ├── drawable │ │ ├── bg_green.xml │ │ ├── bg_grey.xml │ │ ├── bg_pink.xml │ │ ├── bg_progressbar_color.xml │ │ ├── bg_red.xml │ │ ├── bg_yellow.xml │ │ ├── ic_type_github.xml │ │ └── ic_type_github_circle_white_24dp.png │ │ ├── mipmap-xxhdpi │ │ └── ic_menu.png │ │ └── values │ │ ├── colors.xml │ │ └── dimens.xml │ └── test │ └── java │ └── com │ └── jerey │ └── theme_night │ └── ExampleUnitTest.java ├── theme-ocean ├── .gitignore ├── build.gradle ├── proguard-rules.pro └── src │ ├── androidTest │ └── java │ │ └── com │ │ └── jerey │ │ └── theme_ocean │ │ └── ExampleInstrumentedTest.java │ ├── main │ ├── AndroidManifest.xml │ └── res │ │ ├── drawable │ │ ├── bg_green.xml │ │ ├── bg_grey.xml │ │ ├── bg_pink.xml │ │ ├── bg_progressbar_color.xml │ │ ├── bg_red.xml │ │ ├── bg_yellow.xml │ │ ├── ic_type_github.xml │ │ └── ic_type_github_circle_white_24dp.png │ │ ├── mipmap-xxhdpi │ │ └── ic_menu.png │ │ └── values │ │ ├── colors.xml │ │ └── dimens.xml │ └── test │ └── java │ └── com │ └── jerey │ └── theme_ocean │ └── ExampleUnitTest.java └── themelib ├── .gitignore ├── build.gradle ├── proguard-rules.pro └── src ├── androidTest └── java │ └── com │ └── jerey │ └── themelib │ └── ExampleInstrumentedTest.java ├── main ├── AndroidManifest.xml ├── java │ └── com │ │ └── jerey │ │ └── themelib │ │ ├── IDynamicNewView.java │ │ ├── ISkinUpdate.java │ │ ├── SkinConfig.java │ │ ├── SkinItem.java │ │ ├── SkinLoaderListener.java │ │ ├── attr │ │ ├── BackgroundAttr.java │ │ ├── CardViewBackgroundAttr.java │ │ ├── ContentScrimColorAttr.java │ │ ├── ImageViewSrcAttr.java │ │ ├── NavigationIconAttr.java │ │ ├── TabLayoutIndicatorAttr.java │ │ ├── TextColorAttr.java │ │ └── base │ │ │ ├── AttrFactory.java │ │ │ ├── DynamicAttr.java │ │ │ └── SkinAttr.java │ │ ├── base │ │ ├── SkinBaseActivity.java │ │ ├── SkinBaseApplication.java │ │ └── SkinBaseFragment.java │ │ ├── loader │ │ ├── ISkinLoader.java │ │ ├── SkinInflaterFactory.java │ │ ├── SkinManager.java │ │ ├── TextViewRepository.java │ │ └── ViewProducer.java │ │ └── utils │ │ ├── SkinArrayUtils.java │ │ ├── SkinFileUtils.java │ │ ├── SkinL.java │ │ ├── SkinListUtils.java │ │ ├── SkinObjectUtils.java │ │ ├── SkinPreferencesUtils.java │ │ ├── SkinResourcesUtils.java │ │ └── TypefaceUtils.java └── res │ └── values │ └── strings.xml └── test └── java └── com └── jerey └── themelib └── ExampleUnitTest.java /.gitignore: -------------------------------------------------------------------------------- 1 | *.iml 2 | .gradle 3 | /local.properties 4 | /.idea/workspace.xml 5 | /.idea/libraries 6 | .DS_Store 7 | /build 8 | /captures 9 | .externalNativeBuild 10 | -------------------------------------------------------------------------------- /.idea/compiler.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /.idea/copyright/profiles_settings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /.idea/encodings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /.idea/gradle.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 26 | 27 | -------------------------------------------------------------------------------- /.idea/inspectionProfiles/Project_Default.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 11 | -------------------------------------------------------------------------------- /.idea/inspectionProfiles/profiles_settings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 7 | -------------------------------------------------------------------------------- /.idea/modules.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /.idea/runConfigurations.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 11 | 12 | -------------------------------------------------------------------------------- /.idea/vcs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /animationlib/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | -------------------------------------------------------------------------------- /animationlib/build.gradle: -------------------------------------------------------------------------------- 1 | apply plugin: 'com.android.library' 2 | 3 | android { 4 | compileSdkVersion COMPILE_SDK_VERSION 5 | buildToolsVersion BUILD_TOOLS_VERSION 6 | 7 | defaultConfig { 8 | minSdkVersion MIN_SDK_VERSION 9 | targetSdkVersion TARGET_SDK_VERSION 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 | androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', { 27 | exclude group: 'com.android.support', module: 'support-annotations' 28 | }) 29 | compile APPCOMPAT_VERSION 30 | testCompile JUNIT_VERSION 31 | } 32 | -------------------------------------------------------------------------------- /animationlib/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 F:\AndroidSDK/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 | 19 | # Uncomment this to preserve the line number information for 20 | # debugging stack traces. 21 | #-keepattributes SourceFile,LineNumberTable 22 | 23 | # If you keep the line number information, uncomment this to 24 | # hide the original source file name. 25 | #-renamesourcefileattribute SourceFile 26 | -------------------------------------------------------------------------------- /animationlib/src/androidTest/java/com/jerey/animationlib/ExampleInstrumentedTest.java: -------------------------------------------------------------------------------- 1 | package com.jerey.animationlib; 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 | * @see Testing documentation 15 | */ 16 | @RunWith(AndroidJUnit4.class) 17 | public class ExampleInstrumentedTest { 18 | @Test 19 | public void useAppContext() throws Exception { 20 | // Context of the app under test. 21 | Context appContext = InstrumentationRegistry.getTargetContext(); 22 | 23 | assertEquals("com.jerey.animationlib.test", appContext.getPackageName()); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /animationlib/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 3 | 4 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /animationlib/src/main/java/com/jerey/animationlib/SherlockAnimationCallBack.java: -------------------------------------------------------------------------------- 1 | package com.jerey.animationlib; 2 | 3 | /** 4 | * @Explain:执行动画回调,在MyFramelayout中实现; 5 | */ 6 | 7 | public interface SherlockAnimationCallBack { 8 | /** 9 | * 执行自定义动画方法; 10 | */ 11 | void excuteanimation(float moveRadio); 12 | 13 | /** 14 | * 恢复初始状态; 15 | */ 16 | void resetViewanimation(); 17 | } 18 | -------------------------------------------------------------------------------- /animationlib/src/main/res/values/attrs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | //是否支持透明度动画; 5 | //是否支持X轴缩放动画; 6 | //是否支持Y轴缩放动画; 7 | //背景渐变颜色的开始颜色值; 8 | //背景渐变颜色的结束颜色值,与bgColorStart成对出现; 9 | //移动动画,是一个枚举类型,支持上下左右四种值。 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /animationlib/src/main/res/values/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | animationlib 3 | 4 | -------------------------------------------------------------------------------- /animationlib/src/test/java/com/jerey/animationlib/ExampleUnitTest.java: -------------------------------------------------------------------------------- 1 | package com.jerey.animationlib; 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 | * @see Testing documentation 10 | */ 11 | public class ExampleUnitTest { 12 | @Test 13 | public void addition_isCorrect() throws Exception { 14 | assertEquals(4, 2 + 2); 15 | } 16 | } -------------------------------------------------------------------------------- /app/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | -------------------------------------------------------------------------------- /app/src/androidTest/java/com/jerey/keepgank/ExampleInstrumentedTest.java: -------------------------------------------------------------------------------- 1 | package com.jerey.keepgank; 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("com.jerey.keepgank", appContext.getPackageName()); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /app/src/main/assets/fonts/WRYHZT.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jerey-Jobs/KeepGank/776b35819f1e713514420d0ba0f5efedd95a2025/app/src/main/assets/fonts/WRYHZT.ttf -------------------------------------------------------------------------------- /app/src/main/assets/skin/theme-night.skin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jerey-Jobs/KeepGank/776b35819f1e713514420d0ba0f5efedd95a2025/app/src/main/assets/skin/theme-night.skin -------------------------------------------------------------------------------- /app/src/main/assets/skin/theme-ocean.skin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jerey-Jobs/KeepGank/776b35819f1e713514420d0ba0f5efedd95a2025/app/src/main/assets/skin/theme-ocean.skin -------------------------------------------------------------------------------- /app/src/main/java/com/jerey/keepgank/GankApp.java: -------------------------------------------------------------------------------- 1 | package com.jerey.keepgank; 2 | 3 | import com.alibaba.android.arouter.launcher.ARouter; 4 | import com.jerey.keepgank.utils.NetworkManager; 5 | import com.jerey.lruCache.DiskLruCacheManager; 6 | import com.jerey.themelib.SkinConfig; 7 | import com.jerey.themelib.base.SkinBaseApplication; 8 | 9 | import java.io.IOException; 10 | 11 | /** 12 | * Created by Xiamin on 2017/2/12. 13 | */ 14 | public class GankApp extends SkinBaseApplication { 15 | 16 | private static String mCachePath; 17 | private static DiskLruCacheManager diskLruCacheManager; 18 | 19 | @Override 20 | public void onCreate() { 21 | super.onCreate(); 22 | mCachePath = getExternalCacheDir().getPath(); 23 | try { 24 | diskLruCacheManager = new DiskLruCacheManager(this); 25 | } catch (IOException e) { 26 | e.printStackTrace(); 27 | } 28 | NetworkManager.init(this); 29 | SkinConfig.setCanChangeStatusColor(true); 30 | SkinConfig.setCanChangeFont(true); 31 | SkinConfig.setDebug(false); 32 | ARouter.openLog(); 33 | ARouter.openDebug(); 34 | ARouter.init(this); 35 | // LeakCanary.install(this); 36 | } 37 | 38 | public static String getmCachePath() { 39 | return mCachePath; 40 | } 41 | 42 | public static DiskLruCacheManager getDiskCacheManager() { 43 | return diskLruCacheManager; 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /app/src/main/java/com/jerey/keepgank/api/Config.java: -------------------------------------------------------------------------------- 1 | package com.jerey.keepgank.api; 2 | 3 | import android.support.annotation.StringDef; 4 | 5 | import java.lang.annotation.Retention; 6 | import java.lang.annotation.RetentionPolicy; 7 | 8 | 9 | public class Config { 10 | 11 | 12 | 13 | @StringDef({TYPE_ANDROID, TYPE_IOS,TYPE_FRONT_END,TYPE_RECOMMEND,TYPE_VIDEO,TYPE_GIRL,TYPE_RESOURCES}) 14 | @Retention(RetentionPolicy.SOURCE) 15 | public @interface TYPE {} 16 | 17 | public static final String TYPE_ANDROID = "Android"; 18 | public static final String TYPE_IOS = "iOS"; 19 | public static final String TYPE_FRONT_END = "前端"; 20 | public static final String TYPE_RECOMMEND = "瞎推荐"; 21 | public static final String TYPE_VIDEO = "休息视频"; 22 | public static final String TYPE_GIRL = "福利"; 23 | public static final String TYPE_RESOURCES = "拓展资源"; 24 | 25 | public static final String[] TYPES = {TYPE_ANDROID,TYPE_IOS,TYPE_FRONT_END,TYPE_RECOMMEND,TYPE_VIDEO,TYPE_RESOURCES}; 26 | } 27 | -------------------------------------------------------------------------------- /app/src/main/java/com/jerey/keepgank/api/HttpDiskLruCacheInterceptor.java: -------------------------------------------------------------------------------- 1 | package com.jerey.keepgank.api; 2 | 3 | import android.util.Log; 4 | 5 | import com.jerey.keepgank.utils.MD5Utils; 6 | import com.jerey.keepgank.utils.NetworkManager; 7 | 8 | import java.io.IOException; 9 | 10 | import okhttp3.Interceptor; 11 | import okhttp3.Request; 12 | import okhttp3.Response; 13 | 14 | /** 15 | * @author Xiamin 16 | * @date 2017/9/8 17 | */ 18 | public class HttpDiskLruCacheInterceptor implements Interceptor { 19 | public static final String TAG = HttpDiskLruCacheInterceptor.class.getSimpleName(); 20 | 21 | @Override 22 | public Response intercept(Chain chain) throws IOException { 23 | Request request = chain.request(); 24 | Log.i(TAG, "request" + request.url().toString()); 25 | 26 | if (!NetworkManager.isNetWorkConnect()) { 27 | Log.i(TAG, "isNetWorkConnect : " + NetworkManager.isNetWorkConnect() + " use cache"); 28 | 29 | String md5path = MD5Utils.toMD5(request.url().toString()); 30 | } 31 | 32 | Response response = chain.proceed(request); 33 | return response; 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /app/src/main/java/com/jerey/keepgank/data/Constants.java: -------------------------------------------------------------------------------- 1 | package com.jerey.keepgank.data; 2 | 3 | /** 4 | * Created by Xiamin on 2017/6/18. 5 | */ 6 | 7 | public class Constants { 8 | public static final String HEAD_URL = "head_url"; 9 | } 10 | -------------------------------------------------------------------------------- /app/src/main/java/com/jerey/keepgank/data/IData.java: -------------------------------------------------------------------------------- 1 | package com.jerey.keepgank.data; 2 | 3 | import com.jerey.keepgank.data.bean.Bookmark; 4 | 5 | import java.util.List; 6 | 7 | import rx.Observable; 8 | 9 | /** 10 | * Created by Xiamin on 2017/2/12. 11 | */ 12 | 13 | public interface IData { 14 | 15 | Observable addBookmark(Bookmark bookmark); 16 | 17 | Observable removeBookmark(String id); 18 | 19 | Observable findBookmarkById(String id); 20 | 21 | Observable> getBookmarkList(); 22 | 23 | Observable> getBookmarkList(String type); 24 | 25 | 26 | } 27 | -------------------------------------------------------------------------------- /app/src/main/java/com/jerey/keepgank/data/bean/BaseEntity.java: -------------------------------------------------------------------------------- 1 | package com.jerey.keepgank.data.bean; 2 | 3 | public class BaseEntity { 4 | 5 | public boolean error; 6 | 7 | } 8 | -------------------------------------------------------------------------------- /app/src/main/java/com/jerey/keepgank/data/bean/Bookmark.java: -------------------------------------------------------------------------------- 1 | package com.jerey.keepgank.data.bean; 2 | 3 | import io.realm.annotations.PrimaryKey; 4 | 5 | /** 6 | * Created by Xiamin on 2017/2/12. 7 | */ 8 | 9 | public class Bookmark { 10 | 11 | @PrimaryKey 12 | private String objectId; 13 | 14 | private long collectionAt; 15 | private String desc; 16 | private String type; 17 | private String url; 18 | private String who; 19 | 20 | public Bookmark(){ 21 | 22 | } 23 | public Bookmark(String objectId, long collectionAt, String desc, String type, String url,String who) { 24 | this.objectId = objectId; 25 | this.collectionAt = collectionAt; 26 | this.desc = desc; 27 | this.type = type; 28 | this.url = url; 29 | this.who = who; 30 | } 31 | 32 | 33 | public String getObjectId() { 34 | return objectId; 35 | } 36 | 37 | public void setObjectId(String objectId) { 38 | this.objectId = objectId; 39 | } 40 | 41 | public long getCollectionAt() { 42 | return collectionAt; 43 | } 44 | 45 | public void setCollectionAt(long collectionAt) { 46 | this.collectionAt = collectionAt; 47 | } 48 | 49 | public String getDesc() { 50 | return desc; 51 | } 52 | 53 | public void setDesc(String desc) { 54 | this.desc = desc; 55 | } 56 | 57 | public String getType() { 58 | return type; 59 | } 60 | 61 | public void setType(String type) { 62 | this.type = type; 63 | } 64 | 65 | public String getUrl() { 66 | return url; 67 | } 68 | 69 | public void setUrl(String url) { 70 | this.url = url; 71 | } 72 | 73 | public String getWho() { 74 | return who; 75 | } 76 | 77 | public void setWho(String who) { 78 | this.who = who; 79 | } 80 | } 81 | -------------------------------------------------------------------------------- /app/src/main/java/com/jerey/keepgank/data/bean/Data.java: -------------------------------------------------------------------------------- 1 | 2 | package com.jerey.keepgank.data.bean; 3 | 4 | import com.google.gson.annotations.Expose; 5 | import com.google.gson.annotations.SerializedName; 6 | 7 | import java.io.Serializable; 8 | import java.util.ArrayList; 9 | import java.util.List; 10 | 11 | public class Data implements Serializable{ 12 | 13 | @SerializedName("error") 14 | @Expose 15 | private boolean error; 16 | @SerializedName("results") 17 | @Expose 18 | private List results = new ArrayList(); 19 | 20 | /** 21 | * 22 | * @return 23 | * The error 24 | */ 25 | public boolean isError() { 26 | return error; 27 | } 28 | 29 | /** 30 | * 31 | * @param error 32 | * The error 33 | */ 34 | public void setError(boolean error) { 35 | this.error = error; 36 | } 37 | 38 | /** 39 | * 40 | * @return 41 | * The results 42 | */ 43 | public List getResults() { 44 | return results; 45 | } 46 | 47 | /** 48 | * 49 | * @param results 50 | * The results 51 | */ 52 | public void setResults(List results) { 53 | this.results = results; 54 | } 55 | 56 | @Override 57 | public String toString() { 58 | return results.toString(); 59 | } 60 | } 61 | -------------------------------------------------------------------------------- /app/src/main/java/com/jerey/keepgank/data/bean/GankDay.java: -------------------------------------------------------------------------------- 1 | package com.jerey.keepgank.data.bean; 2 | 3 | import java.io.Serializable; 4 | import java.util.List; 5 | 6 | public class GankDay extends BaseEntity implements Serializable{ 7 | 8 | public List category; 9 | public GankDayResults results; 10 | 11 | @Override 12 | public String toString() { 13 | return "GankDay{" + 14 | "category=" + category + 15 | ", results=" + results + 16 | '}'; 17 | } 18 | } -------------------------------------------------------------------------------- /app/src/main/java/com/jerey/keepgank/data/bean/GankDayResults.java: -------------------------------------------------------------------------------- 1 | package com.jerey.keepgank.data.bean; 2 | 3 | import java.io.Serializable; 4 | import java.util.List; 5 | 6 | /** 7 | * Created by sunfusheng on 2017/1/17. 8 | */ 9 | public class GankDayResults implements Serializable{ 10 | 11 | public List 福利; 12 | public List Android; 13 | public List iOS; 14 | public List App; 15 | public List 瞎推荐; 16 | public List 休息视频; 17 | 18 | @Override 19 | public String toString() { 20 | return "GankDayResults{" + 21 | "福利=" + 福利 + 22 | ", Android=" + Android + 23 | ", iOS=" + iOS + 24 | ", App=" + App + 25 | ", 瞎推荐=" + 瞎推荐 + 26 | ", 休息视频=" + 休息视频 + 27 | '}'; 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /app/src/main/java/com/jerey/keepgank/data/bean/TitleBean.java: -------------------------------------------------------------------------------- 1 | package com.jerey.keepgank.data.bean; 2 | 3 | /** 4 | * @author Xiamin 5 | * @date 2017/9/6 6 | */ 7 | public class TitleBean { 8 | private String titile = ""; 9 | 10 | public TitleBean(String titile) { 11 | this.titile = titile; 12 | } 13 | 14 | public String getTitile() { 15 | return titile; 16 | } 17 | 18 | public void setTitile(String titile) { 19 | this.titile = titile; 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /app/src/main/java/com/jerey/keepgank/data/bean/Type.java: -------------------------------------------------------------------------------- 1 | package com.jerey.keepgank.data.bean; 2 | 3 | /** 4 | * 供HomeFragment使用,记录每个分类的信息 5 | * Created by Xiamin on 2017/2/12. 6 | */ 7 | 8 | public class Type { 9 | private String mTitle; 10 | private int mSort; 11 | private boolean mVisibility; 12 | public Type() { 13 | mTitle = null; 14 | mSort = -1; 15 | mVisibility = false; 16 | } 17 | public Type(String title, int sort, boolean visibility) { 18 | mTitle = title; 19 | mSort = sort; 20 | mVisibility = visibility; 21 | } 22 | 23 | public String getTitle() { 24 | return mTitle; 25 | } 26 | 27 | public void setTitle(String mTitle) { 28 | this.mTitle = mTitle; 29 | } 30 | 31 | public int getSort() { 32 | return mSort; 33 | } 34 | 35 | public void setSort(int mSort) { 36 | this.mSort = mSort; 37 | } 38 | 39 | public boolean isVisibility() { 40 | return mVisibility; 41 | } 42 | 43 | public void setVisibility(boolean mVisibility) { 44 | this.mVisibility = mVisibility; 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /app/src/main/java/com/jerey/keepgank/data/constant/AppConstant.java: -------------------------------------------------------------------------------- 1 | package com.jerey.keepgank.data.constant; 2 | 3 | /** 4 | * Created by Xiamin on 2017/4/9. 5 | */ 6 | 7 | public class AppConstant { 8 | public static final String SP = "sp_setting"; 9 | public static final String Theme = "theme"; 10 | public static final String isFirstEnter = "is_first_enter"; 11 | } 12 | -------------------------------------------------------------------------------- /app/src/main/java/com/jerey/keepgank/data/realm/GankModule.java: -------------------------------------------------------------------------------- 1 | package com.jerey.keepgank.data.realm; 2 | 3 | 4 | import io.realm.annotations.RealmModule; 5 | 6 | 7 | @RealmModule(classes = {RealmBookmark.class, RealmImage.class}) 8 | public class GankModule { 9 | } 10 | -------------------------------------------------------------------------------- /app/src/main/java/com/jerey/keepgank/modules/base/SingleFragmentActivity.java: -------------------------------------------------------------------------------- 1 | package com.jerey.keepgank.modules.base; 2 | 3 | import android.os.Bundle; 4 | import android.support.v4.app.Fragment; 5 | 6 | import com.alibaba.android.arouter.launcher.ARouter; 7 | import com.jerey.keepgank.R; 8 | 9 | /** 10 | * Created by Xiamin on 2017/2/11. 11 | */ 12 | public abstract class SingleFragmentActivity extends AppSwipeBackActivity { 13 | 14 | @Override 15 | protected void onCreate(Bundle savedInstanceState) { 16 | super.onCreate(savedInstanceState); 17 | setContentView(R.layout.activity_empty); 18 | ARouter.getInstance().inject(this); 19 | Fragment fragment = getFragment(); 20 | fragment.setArguments(getArguments()); 21 | getSupportFragmentManager().beginTransaction().add(android.R.id.content, fragment).commit(); 22 | 23 | } 24 | 25 | protected abstract Fragment getFragment(); 26 | 27 | protected abstract Bundle getArguments() ; 28 | } 29 | -------------------------------------------------------------------------------- /app/src/main/java/com/jerey/keepgank/modules/douban/DoubanActivity.java: -------------------------------------------------------------------------------- 1 | package com.jerey.keepgank.modules.douban; 2 | 3 | import android.os.Bundle; 4 | import android.support.v4.app.Fragment; 5 | 6 | import com.alibaba.android.arouter.facade.annotation.Route; 7 | import com.jerey.keepgank.modules.base.SingleFragmentActivity; 8 | 9 | /** 10 | * @author Xiamin 11 | * @date 2017/8/17 12 | */ 13 | @Route(path = "/douban/DoubanActivity") 14 | public class DoubanActivity extends SingleFragmentActivity{ 15 | @Override 16 | protected Fragment getFragment() { 17 | return new DoubanFragment(); 18 | } 19 | 20 | @Override 21 | protected Bundle getArguments() { 22 | return null; 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /app/src/main/java/com/jerey/keepgank/modules/douban/bean/BannerBean.java: -------------------------------------------------------------------------------- 1 | package com.jerey.keepgank.modules.douban.bean; 2 | 3 | import java.util.List; 4 | 5 | /** 6 | * @author xiamin 7 | * @date 8/18/17. 8 | */ 9 | public class BannerBean { 10 | 11 | public List getSubjects() { 12 | return subjects; 13 | } 14 | 15 | public void setSubjects(List subjects) { 16 | this.subjects = subjects; 17 | } 18 | 19 | List subjects; 20 | 21 | public BannerBean(List subjects) { 22 | this.subjects = subjects; 23 | } 24 | 25 | } 26 | -------------------------------------------------------------------------------- /app/src/main/java/com/jerey/keepgank/modules/gank/adapter/HomeFragmentPagerAdapter.java: -------------------------------------------------------------------------------- 1 | package com.jerey.keepgank.modules.gank.adapter; 2 | 3 | import android.support.v4.app.Fragment; 4 | import android.support.v4.app.FragmentManager; 5 | import android.support.v4.app.FragmentPagerAdapter; 6 | 7 | import java.util.ArrayList; 8 | import java.util.List; 9 | 10 | /** 11 | * Created by Xiamin on 2017/2/12. 12 | */ 13 | 14 | public class HomeFragmentPagerAdapter extends FragmentPagerAdapter { 15 | private List mFragments = null; 16 | private List mFragmentTitles = null; 17 | private FragmentManager mFragmentManager; 18 | 19 | public HomeFragmentPagerAdapter(FragmentManager fm) { 20 | super(fm); 21 | mFragments = new ArrayList<>(); 22 | mFragmentTitles = new ArrayList<>(); 23 | mFragmentManager = fm; 24 | } 25 | 26 | public void addFragment(Fragment fragment, String title) { 27 | mFragments.add(fragment); 28 | mFragmentTitles.add(title); 29 | } 30 | 31 | @Override 32 | public Fragment getItem(int position) { 33 | return mFragments.get(position); 34 | } 35 | 36 | @Override 37 | public int getCount() { 38 | return mFragments.size(); 39 | } 40 | 41 | @Override 42 | public CharSequence getPageTitle(int position) { 43 | return mFragmentTitles.get(position); 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /app/src/main/java/com/jerey/keepgank/modules/gank/binder/TitleBeanBinder.java: -------------------------------------------------------------------------------- 1 | package com.jerey.keepgank.modules.gank.binder; 2 | 3 | import android.support.annotation.NonNull; 4 | import android.support.v7.widget.RecyclerView; 5 | import android.view.LayoutInflater; 6 | import android.view.View; 7 | import android.view.ViewGroup; 8 | import android.widget.TextView; 9 | 10 | import com.jerey.keepgank.R; 11 | import com.jerey.keepgank.data.bean.TitleBean; 12 | import com.jerey.mutitype.ItemViewBinder; 13 | 14 | /** 15 | * @author Xiamin 16 | * @date 2017/9/6 17 | */ 18 | public class TitleBeanBinder extends ItemViewBinder { 19 | 20 | @NonNull 21 | @Override 22 | protected TitleViewHolder onCreateViewHolder(@NonNull LayoutInflater inflater, @NonNull 23 | ViewGroup parent) { 24 | View view = inflater.inflate(R.layout.item_gank_title, parent, false); 25 | return new TitleViewHolder(view); 26 | } 27 | 28 | @Override 29 | protected void onBindViewHolder(@NonNull TitleViewHolder holder, @NonNull TitleBean item) { 30 | holder.textView.setText(item.getTitile()); 31 | } 32 | 33 | 34 | public class TitleViewHolder extends RecyclerView.ViewHolder { 35 | public TextView textView; 36 | 37 | public TitleViewHolder(View itemView) { 38 | super(itemView); 39 | textView = itemView.findViewById(R.id.tv_title); 40 | } 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /app/src/main/java/com/jerey/keepgank/modules/photochoose/CustomViewPagerTransformer.java: -------------------------------------------------------------------------------- 1 | package com.jerey.keepgank.modules.photochoose; 2 | 3 | import android.content.Context; 4 | import android.support.v4.view.ViewPager; 5 | import android.view.View; 6 | 7 | /** 8 | * ViewPager转场动画 9 | */ 10 | public class CustomViewPagerTransformer implements ViewPager.PageTransformer { 11 | private int maxTranslateOffsetX; 12 | private ViewPager viewPager; 13 | private static final float MIN_SCALE = 0.75f; 14 | 15 | 16 | public CustomViewPagerTransformer(Context context) { 17 | this.maxTranslateOffsetX = dp2px(context, 160); 18 | } 19 | 20 | public void transformPage(View view, float position) { 21 | // position的可能性的值有,其实从官方示例的注释就能看出: 22 | //[-Infinity,-1) 已经看不到了 23 | // (1,+Infinity] 已经看不到了 24 | // [-1,1] 25 | // 而我们从写PageTransformer,操作View动画的重点区间就在[-1,1] 26 | if (viewPager == null) { 27 | viewPager = (ViewPager) view.getParent(); 28 | } 29 | int leftInScreen = view.getLeft() - viewPager.getScrollX(); 30 | int centerXInViewPager = leftInScreen + view.getMeasuredWidth() / 2; 31 | int offsetX = centerXInViewPager - viewPager.getMeasuredWidth() / 2; 32 | float offsetRate = (float) offsetX * 0.38f / viewPager.getMeasuredWidth(); 33 | float scaleFactor = 1 - Math.abs(offsetRate); 34 | if (scaleFactor > 0) { 35 | view.setScaleX(scaleFactor); 36 | view.setScaleY(scaleFactor); 37 | view.setTranslationX(-maxTranslateOffsetX * offsetRate); 38 | } 39 | } 40 | 41 | /** 42 | * dp和像素转换 43 | */ 44 | private int dp2px(Context context, float dipValue) { 45 | float m = context.getResources().getDisplayMetrics().density; 46 | return (int) (dipValue * m + 0.5f); 47 | } 48 | } -------------------------------------------------------------------------------- /app/src/main/java/com/jerey/keepgank/modules/photochoose/ViewPagerAdapter.java: -------------------------------------------------------------------------------- 1 | package com.jerey.keepgank.modules.photochoose; 2 | 3 | import android.support.v4.app.Fragment; 4 | import android.support.v4.app.FragmentManager; 5 | import android.support.v4.app.FragmentPagerAdapter; 6 | 7 | import com.jerey.keepgank.data.bean.Result; 8 | 9 | import java.util.ArrayList; 10 | import java.util.List; 11 | 12 | class ViewPagerAdapter extends FragmentPagerAdapter { 13 | private List mDatas; 14 | 15 | public ViewPagerAdapter(FragmentManager fm) { 16 | super(fm); 17 | mDatas = new ArrayList<>(); 18 | } 19 | 20 | @Override 21 | public Fragment getItem(int position) { 22 | return PhotoChooseActivity.PhotoItemFragment.newInstance(mDatas.get(position).getUrl()); 23 | } 24 | 25 | @Override 26 | public int getCount() { 27 | return mDatas.size(); 28 | } 29 | 30 | public void addData(List datas) { 31 | this.mDatas.addAll(datas); 32 | notifyDataSetChanged(); 33 | } 34 | 35 | public void setData(List datas) { 36 | this.mDatas = datas; 37 | notifyDataSetChanged(); 38 | } 39 | 40 | public Result getItemData(int positon) { 41 | return mDatas.get(positon); 42 | } 43 | } -------------------------------------------------------------------------------- /app/src/main/java/com/jerey/keepgank/modules/photopreview/PhotoBean.java: -------------------------------------------------------------------------------- 1 | package com.jerey.keepgank.modules.photopreview; 2 | 3 | import android.graphics.Rect; 4 | import android.os.Parcel; 5 | import android.os.Parcelable; 6 | 7 | /** 8 | * @author Xiamin 9 | * @date 2017/9/17 10 | */ 11 | public class PhotoBean implements Parcelable { 12 | String url; 13 | Rect rect; 14 | 15 | public PhotoBean(String url) { 16 | this.url = url; 17 | } 18 | 19 | public PhotoBean(String url, Rect rect) { 20 | this.url = url; 21 | this.rect = rect; 22 | } 23 | 24 | protected PhotoBean(Parcel in) { 25 | url = in.readString(); 26 | rect = in.readParcelable(Rect.class.getClassLoader()); 27 | } 28 | 29 | public void setUrl(String url) { 30 | this.url = url; 31 | } 32 | 33 | public void setRect(Rect rect) { 34 | this.rect = rect; 35 | } 36 | 37 | @Override 38 | public void writeToParcel(Parcel dest, int flags) { 39 | dest.writeString(url); 40 | dest.writeParcelable(rect, flags); 41 | } 42 | 43 | @Override 44 | public int describeContents() { 45 | return 0; 46 | } 47 | 48 | public static final Creator CREATOR = new Creator() { 49 | @Override 50 | public PhotoBean createFromParcel(Parcel in) { 51 | return new PhotoBean(in); 52 | } 53 | 54 | @Override 55 | public PhotoBean[] newArray(int size) { 56 | return new PhotoBean[size]; 57 | } 58 | }; 59 | } 60 | -------------------------------------------------------------------------------- /app/src/main/java/com/jerey/keepgank/utils/ApplicationUtils.java: -------------------------------------------------------------------------------- 1 | package com.jerey.keepgank.utils; 2 | 3 | import android.app.ActivityManager; 4 | import android.content.ComponentName; 5 | import android.content.Context; 6 | import android.net.ConnectivityManager; 7 | import android.net.NetworkInfo; 8 | import android.text.TextUtils; 9 | 10 | 11 | /** 12 | * Application Utils class Used to determine whether the application in the 13 | * Background 14 | */ 15 | public class ApplicationUtils { 16 | 17 | public static boolean isRunningForeground(Context context) { 18 | ActivityManager activityManager = (ActivityManager) context 19 | .getSystemService(Context.ACTIVITY_SERVICE); 20 | ComponentName cn = activityManager.getRunningTasks(1).get(0).topActivity; 21 | String currentPackageName = cn.getPackageName(); 22 | if (!TextUtils.isEmpty(currentPackageName) 23 | && currentPackageName.equals(context.getPackageName())) { 24 | return true; 25 | } 26 | return false; 27 | } 28 | 29 | /** 30 | * @param context 31 | * @return true: wifi connected ; false: wifi is not connected 32 | */ 33 | public static boolean isNetworkAvailable(Context context) { 34 | ConnectivityManager connectivityManager = (ConnectivityManager) context 35 | .getSystemService(Context.CONNECTIVITY_SERVICE); 36 | if (connectivityManager != null) { 37 | NetworkInfo[] allNetworkInfo = connectivityManager.getAllNetworkInfo(); 38 | if (allNetworkInfo != null) { 39 | for (NetworkInfo networkInfo : allNetworkInfo) { 40 | if (networkInfo.getState() == NetworkInfo.State.CONNECTED) { 41 | return true; 42 | } 43 | } 44 | } 45 | } 46 | return false; 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /app/src/main/java/com/jerey/keepgank/utils/DisplayUtils.java: -------------------------------------------------------------------------------- 1 | package com.jerey.keepgank.utils; 2 | 3 | import android.content.Context; 4 | import android.content.res.Resources; 5 | import android.util.DisplayMetrics; 6 | import android.util.TypedValue; 7 | 8 | public class DisplayUtils { 9 | 10 | public static int dpToPx(Context context, float dip) { 11 | final float SCALE = context.getResources().getDisplayMetrics().density; 12 | float valueDips = dip; 13 | int valuePixels = (int) (valueDips * SCALE + 0.5f); 14 | return valuePixels; 15 | } 16 | 17 | 18 | public static int dpToPx(int dp) { 19 | return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dp, Resources.getSystem().getDisplayMetrics()); 20 | } 21 | 22 | public static int pxToDp(float px) { 23 | return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_PX, px, Resources.getSystem().getDisplayMetrics()); 24 | } 25 | 26 | /** 27 | * 获取屏幕宽 28 | * @param context 29 | * @return 30 | */ 31 | public static int getScreenWidth(Context context) { 32 | Resources resources = context.getResources(); 33 | DisplayMetrics dm = resources.getDisplayMetrics(); 34 | return dm.widthPixels; 35 | } 36 | 37 | public static int getScreenHeight(Context context) { 38 | Resources resources = context.getResources(); 39 | DisplayMetrics dm = resources.getDisplayMetrics(); 40 | return dm.heightPixels; 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /app/src/main/java/com/jerey/keepgank/utils/IconUtils.java: -------------------------------------------------------------------------------- 1 | package com.jerey.keepgank.utils; 2 | 3 | 4 | import com.jerey.keepgank.R; 5 | import com.jerey.keepgank.api.Config; 6 | 7 | public class IconUtils { 8 | 9 | public static final int getIconRes(String url, String type) { 10 | if (type.equals(Config.TYPE_VIDEO)) { 11 | return R.drawable.ic_type_video; 12 | } else if (url.startsWith("http://blog.csdn.net")) { 13 | return R.drawable.ic_type_csdn; 14 | } else if (url.startsWith("https://github.com")) { 15 | return R.drawable.ic_type_github; 16 | } else if (url.startsWith("http://finalshares.com")) { 17 | return R.drawable.ic_type_finalshares; 18 | } else if (url.startsWith("http://www.jianshu.com")) { 19 | return R.drawable.ic_type_jianshu; 20 | } else if (url.startsWith("https://www.zhihu.com")) { 21 | return R.drawable.ic_type_zhihu; 22 | } else { 23 | return R.drawable.ic_type_web; 24 | } 25 | } 26 | 27 | } 28 | -------------------------------------------------------------------------------- /app/src/main/java/com/jerey/keepgank/utils/MD5Utils.java: -------------------------------------------------------------------------------- 1 | package com.jerey.keepgank.utils; 2 | 3 | import android.util.Log; 4 | 5 | import java.security.MessageDigest; 6 | import java.security.NoSuchAlgorithmException; 7 | 8 | public class MD5Utils { 9 | 10 | private static MessageDigest digest; 11 | 12 | static { 13 | try { 14 | digest = MessageDigest.getInstance("MD5"); 15 | } catch (NoSuchAlgorithmException e) { 16 | e.printStackTrace(); 17 | Log.d("jason", "md5 算法不支持!"); 18 | } 19 | } 20 | 21 | /** 22 | * MD5加密 23 | * @param key 24 | * @return 25 | */ 26 | public static String toMD5(String key) { 27 | if (digest == null) { 28 | return String.valueOf(key.hashCode()); 29 | } 30 | //更新字节 31 | digest.update(key.getBytes()); 32 | //获取最终的摘要 十进制的 12345678/ABCD1245 33 | return convert2HexString(digest.digest()); 34 | } 35 | 36 | /** 37 | * 转为16进制字符串 38 | * @param bytes 39 | * @return 40 | */ 41 | private static String convert2HexString(byte[] bytes) { 42 | StringBuffer sb = new StringBuffer(); 43 | for (byte b : bytes) { 44 | //->8->08 45 | String hex = Integer.toHexString(0xFF & b); 46 | if (hex.length() == 1) { 47 | sb.append('0'); 48 | } 49 | sb.append(hex); 50 | } 51 | return sb.toString(); 52 | } 53 | 54 | } -------------------------------------------------------------------------------- /app/src/main/java/com/jerey/keepgank/utils/MathUtils.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2015 Google Inc. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.jerey.keepgank.utils; 18 | 19 | /** 20 | * Borrowed from github.com/romannurik/muzei 21 | */ 22 | public class MathUtils { 23 | 24 | private MathUtils() { } 25 | 26 | public static float constrain(float min, float max, float v) { 27 | return Math.max(min, Math.min(max, v)); 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /app/src/main/java/com/jerey/keepgank/utils/MyDateUtils.java: -------------------------------------------------------------------------------- 1 | package com.jerey.keepgank.utils; 2 | 3 | import android.text.TextUtils; 4 | import android.util.Log; 5 | 6 | import org.joda.time.DateTime; 7 | import org.joda.time.format.ISODateTimeFormat; 8 | 9 | import java.util.Date; 10 | 11 | 12 | public class MyDateUtils { 13 | public static DateTime formatDateFromStr(final String dateStr) { 14 | DateTime dateTime = new DateTime(); 15 | if(!TextUtils.isEmpty(dateStr)) { 16 | try { 17 | dateTime = DateTime.parse(dateStr, ISODateTimeFormat.dateTimeParser()); 18 | }catch (Exception e){ 19 | Log.i("Exception:", e.getMessage()); 20 | } 21 | } 22 | return dateTime; 23 | 24 | } 25 | 26 | public static boolean isSameDay(Date date1, Date date2) { 27 | return date1.getDay() == date2.getDay() && date1.getMonth() == date2.getMonth() && date1.getYear() == date2.getYear(); 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /app/src/main/java/com/jerey/keepgank/utils/SystemUtils.java: -------------------------------------------------------------------------------- 1 | package com.jerey.keepgank.utils; 2 | 3 | import android.content.Context; 4 | import android.content.Intent; 5 | import android.content.pm.PackageManager; 6 | import android.content.pm.ResolveInfo; 7 | import android.net.Uri; 8 | import android.text.ClipboardManager; 9 | 10 | import java.util.List; 11 | 12 | /** 13 | * Created by Xiamin on 2017/2/12. 14 | */ 15 | 16 | public class SystemUtils { 17 | private SystemUtils() { 18 | 19 | } 20 | 21 | public static void share(Context context, String text, String title) { 22 | Intent intent = new Intent(Intent.ACTION_SEND); 23 | intent.setType("text/plain"); 24 | intent.putExtra(Intent.EXTRA_TEXT, text); 25 | intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 26 | context.startActivity(Intent.createChooser(intent, title)); 27 | } 28 | 29 | public static void copyText(Context context, String text) { 30 | ClipboardManager c = (ClipboardManager) context.getSystemService(context.CLIPBOARD_SERVICE); 31 | c.setText(text); 32 | } 33 | public static void openUrlByBrowser(Context context,String url){ 34 | Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url)); 35 | context.startActivity(intent); 36 | } 37 | public static boolean isIntentAvailable(Context context, Intent intent) { 38 | final PackageManager packageManager = context.getPackageManager(); 39 | List list = 40 | packageManager.queryIntentActivities(intent, 41 | PackageManager.MATCH_DEFAULT_ONLY); 42 | return list.size() > 0; 43 | } 44 | } -------------------------------------------------------------------------------- /app/src/main/java/com/jerey/keepgank/widget/MyBottomItemDecoration.java: -------------------------------------------------------------------------------- 1 | package com.jerey.keepgank.widget; 2 | 3 | import android.content.Context; 4 | import android.graphics.Rect; 5 | import android.support.v7.widget.RecyclerView; 6 | import android.view.View; 7 | 8 | import com.jerey.keepgank.R; 9 | 10 | /** 11 | * @author Xiamin 12 | * @date 2017/9/6 13 | */ 14 | public class MyBottomItemDecoration extends RecyclerView.ItemDecoration { 15 | private int dividerHeight; 16 | 17 | 18 | public MyBottomItemDecoration(Context context) { 19 | dividerHeight = context.getResources().getDimensionPixelSize(R.dimen.space_normal); 20 | } 21 | 22 | @Override 23 | public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State 24 | state) { 25 | super.getItemOffsets(outRect, view, parent, state); 26 | outRect.bottom = dividerHeight; 27 | int pos = parent.getChildAdapterPosition(view); 28 | if (pos == 0) { 29 | outRect.top = dividerHeight; 30 | } 31 | } 32 | 33 | public MyBottomItemDecoration setDividerHeight(int dividerHeight) { 34 | this.dividerHeight = dividerHeight; 35 | return this; 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /app/src/main/java/com/jerey/keepgank/widget/SwipeToRefreshLayout.java: -------------------------------------------------------------------------------- 1 | package com.jerey.keepgank.widget; 2 | 3 | import android.content.Context; 4 | import android.support.v4.widget.SwipeRefreshLayout; 5 | import android.util.AttributeSet; 6 | 7 | /** 8 | * Created by Xiamin on 2017/2/12. 9 | */ 10 | 11 | public class SwipeToRefreshLayout extends SwipeRefreshLayout{ 12 | 13 | public SwipeToRefreshLayout(Context context) { 14 | super(context); 15 | } 16 | 17 | public SwipeToRefreshLayout(Context context, AttributeSet attrs) { 18 | super(context, attrs); 19 | } 20 | 21 | 22 | private boolean mMeasured = false; 23 | private boolean mPreMeasureRefreshing = false; 24 | 25 | @Override 26 | public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 27 | super.onMeasure(widthMeasureSpec, heightMeasureSpec); 28 | if (!mMeasured) { 29 | mMeasured = true; 30 | setRefreshing(mPreMeasureRefreshing); 31 | } 32 | } 33 | 34 | 35 | @Override 36 | public void setRefreshing(boolean refreshing) { 37 | if (mMeasured) { 38 | super.setRefreshing(refreshing); 39 | } else { 40 | mPreMeasureRefreshing = refreshing; 41 | } 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /app/src/main/java/com/jerey/keepgank/widget/behavior/MyDetailBelowAppbarBehaviour.java: -------------------------------------------------------------------------------- 1 | package com.jerey.keepgank.widget.behavior; 2 | 3 | import android.content.Context; 4 | import android.support.design.widget.CoordinatorLayout; 5 | import android.util.AttributeSet; 6 | import android.view.View; 7 | 8 | /** 9 | * @author xiamin 10 | * @date 8/30/17. 11 | */ 12 | public class MyDetailBelowAppbarBehaviour extends CoordinatorLayout.Behavior { 13 | 14 | public MyDetailBelowAppbarBehaviour(Context context, AttributeSet attrs) { 15 | super(context, attrs); 16 | } 17 | 18 | 19 | @Override 20 | public boolean onDependentViewChanged(CoordinatorLayout parent, View child, View dependency) { 21 | return super.onDependentViewChanged(parent, child, dependency); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /app/src/main/res/anim/fade_in.xml: -------------------------------------------------------------------------------- 1 | 16 | 17 | 18 | 23 | -------------------------------------------------------------------------------- /app/src/main/res/anim/fade_out.xml: -------------------------------------------------------------------------------- 1 | 16 | 17 | 18 | 23 | -------------------------------------------------------------------------------- /app/src/main/res/anim/in_from_right.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 8 | -------------------------------------------------------------------------------- /app/src/main/res/anim/out_to_bottom.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 8 | -------------------------------------------------------------------------------- /app/src/main/res/animator/anim_path.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 11 | 12 | 20 | 21 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/about_bg.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/astronaut.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jerey-Jobs/KeepGank/776b35819f1e713514420d0ba0f5efedd95a2025/app/src/main/res/drawable/astronaut.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/bg_blue.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/bg_cyan.xml: -------------------------------------------------------------------------------- 1 | 3 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/bg_drawer_item.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/bg_drawer_item_checked.xml: -------------------------------------------------------------------------------- 1 | 3 | 4 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/bg_green.xml: -------------------------------------------------------------------------------- 1 | 3 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/bg_grey.xml: -------------------------------------------------------------------------------- 1 | 3 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/bg_pink.xml: -------------------------------------------------------------------------------- 1 | 3 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/bg_progressbar_color.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/bg_red.xml: -------------------------------------------------------------------------------- 1 | 3 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/bg_welcome.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/bg_yellow.xml: -------------------------------------------------------------------------------- 1 | 3 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/big_dipper.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jerey-Jobs/KeepGank/776b35819f1e713514420d0ba0f5efedd95a2025/app/src/main/res/drawable/big_dipper.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/btn_bg.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 14 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/button_ok.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jerey-Jobs/KeepGank/776b35819f1e713514420d0ba0f5efedd95a2025/app/src/main/res/drawable/button_ok.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/button_ok_on.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jerey-Jobs/KeepGank/776b35819f1e713514420d0ba0f5efedd95a2025/app/src/main/res/drawable/button_ok_on.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/captain_android.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jerey-Jobs/KeepGank/776b35819f1e713514420d0ba0f5efedd95a2025/app/src/main/res/drawable/captain_android.jpg -------------------------------------------------------------------------------- /app/src/main/res/drawable/choose.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jerey-Jobs/KeepGank/776b35819f1e713514420d0ba0f5efedd95a2025/app/src/main/res/drawable/choose.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/comet.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jerey-Jobs/KeepGank/776b35819f1e713514420d0ba0f5efedd95a2025/app/src/main/res/drawable/comet.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/fling_xiangshang.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jerey-Jobs/KeepGank/776b35819f1e713514420d0ba0f5efedd95a2025/app/src/main/res/drawable/fling_xiangshang.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_arrow_back.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jerey-Jobs/KeepGank/776b35819f1e713514420d0ba0f5efedd95a2025/app/src/main/res/drawable/ic_arrow_back.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_bookmark_grey600_24dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jerey-Jobs/KeepGank/776b35819f1e713514420d0ba0f5efedd95a2025/app/src/main/res/drawable/ic_bookmark_grey600_24dp.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_home_grey600_24dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jerey-Jobs/KeepGank/776b35819f1e713514420d0ba0f5efedd95a2025/app/src/main/res/drawable/ic_home_grey600_24dp.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jerey-Jobs/KeepGank/776b35819f1e713514420d0ba0f5efedd95a2025/app/src/main/res/drawable/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_progress_large.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 12 | 15 | 18 | 21 | 24 | 27 | 30 | 31 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_search_white_24dp.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_settings_grey600_24dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jerey-Jobs/KeepGank/776b35819f1e713514420d0ba0f5efedd95a2025/app/src/main/res/drawable/ic_settings_grey600_24dp.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_star_grey600_24dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jerey-Jobs/KeepGank/776b35819f1e713514420d0ba0f5efedd95a2025/app/src/main/res/drawable/ic_star_grey600_24dp.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_star_outline_grey600_24dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jerey-Jobs/KeepGank/776b35819f1e713514420d0ba0f5efedd95a2025/app/src/main/res/drawable/ic_star_outline_grey600_24dp.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_today_white_36dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jerey-Jobs/KeepGank/776b35819f1e713514420d0ba0f5efedd95a2025/app/src/main/res/drawable/ic_today_white_36dp.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_type_csdn.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_type_csdn_white_24dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jerey-Jobs/KeepGank/776b35819f1e713514420d0ba0f5efedd95a2025/app/src/main/res/drawable/ic_type_csdn_white_24dp.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_type_finalshares.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_type_finalshares_white_24dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jerey-Jobs/KeepGank/776b35819f1e713514420d0ba0f5efedd95a2025/app/src/main/res/drawable/ic_type_finalshares_white_24dp.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_type_github.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_type_github_circle_white_24dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jerey-Jobs/KeepGank/776b35819f1e713514420d0ba0f5efedd95a2025/app/src/main/res/drawable/ic_type_github_circle_white_24dp.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_type_jianshu.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_type_jianshu_white_24dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jerey-Jobs/KeepGank/776b35819f1e713514420d0ba0f5efedd95a2025/app/src/main/res/drawable/ic_type_jianshu_white_24dp.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_type_video.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_type_web.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_type_web_white_24dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jerey-Jobs/KeepGank/776b35819f1e713514420d0ba0f5efedd95a2025/app/src/main/res/drawable/ic_type_web_white_24dp.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_type_zhihu.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_type_zhihu_white_24dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jerey-Jobs/KeepGank/776b35819f1e713514420d0ba0f5efedd95a2025/app/src/main/res/drawable/ic_type_zhihu_white_24dp.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_unfold_more_grey600_24dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jerey-Jobs/KeepGank/776b35819f1e713514420d0ba0f5efedd95a2025/app/src/main/res/drawable/ic_unfold_more_grey600_24dp.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_video_library_white_24dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jerey-Jobs/KeepGank/776b35819f1e713514420d0ba0f5efedd95a2025/app/src/main/res/drawable/ic_video_library_white_24dp.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/icon_about.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jerey-Jobs/KeepGank/776b35819f1e713514420d0ba0f5efedd95a2025/app/src/main/res/drawable/icon_about.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/icon_more.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jerey-Jobs/KeepGank/776b35819f1e713514420d0ba0f5efedd95a2025/app/src/main/res/drawable/icon_more.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/icon_search.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jerey-Jobs/KeepGank/776b35819f1e713514420d0ba0f5efedd95a2025/app/src/main/res/drawable/icon_search.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/jay.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jerey-Jobs/KeepGank/776b35819f1e713514420d0ba0f5efedd95a2025/app/src/main/res/drawable/jay.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/list_divider_h.xml: -------------------------------------------------------------------------------- 1 | 2 | 17 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/meizi_grey_on.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jerey-Jobs/KeepGank/776b35819f1e713514420d0ba0f5efedd95a2025/app/src/main/res/drawable/meizi_grey_on.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/meteorites.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jerey-Jobs/KeepGank/776b35819f1e713514420d0ba0f5efedd95a2025/app/src/main/res/drawable/meteorites.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/moon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jerey-Jobs/KeepGank/776b35819f1e713514420d0ba0f5efedd95a2025/app/src/main/res/drawable/moon.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/movie.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jerey-Jobs/KeepGank/776b35819f1e713514420d0ba0f5efedd95a2025/app/src/main/res/drawable/movie.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/path.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 10 | 15 | 16 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/path_anim.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/planet_earth_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jerey-Jobs/KeepGank/776b35819f1e713514420d0ba0f5efedd95a2025/app/src/main/res/drawable/planet_earth_1.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/planet_univearse_telestial_space_mars.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jerey-Jobs/KeepGank/776b35819f1e713514420d0ba0f5efedd95a2025/app/src/main/res/drawable/planet_univearse_telestial_space_mars.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/progress_large_white.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/radar_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jerey-Jobs/KeepGank/776b35819f1e713514420d0ba0f5efedd95a2025/app/src/main/res/drawable/radar_1.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/rocket_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jerey-Jobs/KeepGank/776b35819f1e713514420d0ba0f5efedd95a2025/app/src/main/res/drawable/rocket_1.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/selector_button.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/space_station_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jerey-Jobs/KeepGank/776b35819f1e713514420d0ba0f5efedd95a2025/app/src/main/res/drawable/space_station_1.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/splash.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/theme_dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jerey-Jobs/KeepGank/776b35819f1e713514420d0ba0f5efedd95a2025/app/src/main/res/drawable/theme_dark.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/theme_defalut.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jerey-Jobs/KeepGank/776b35819f1e713514420d0ba0f5efedd95a2025/app/src/main/res/drawable/theme_defalut.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/theme_ocean.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jerey-Jobs/KeepGank/776b35819f1e713514420d0ba0f5efedd95a2025/app/src/main/res/drawable/theme_ocean.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/timg1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jerey-Jobs/KeepGank/776b35819f1e713514420d0ba0f5efedd95a2025/app/src/main/res/drawable/timg1.jpg -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_empty.xml: -------------------------------------------------------------------------------- 1 | 7 | 8 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_main.xml: -------------------------------------------------------------------------------- 1 | 2 | 11 | 12 | 17 | 18 | 19 | 20 | 21 | 27 | 28 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_photo.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 9 | 14 | 15 | 23 | 24 | 36 | 37 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_photo_choose.xml: -------------------------------------------------------------------------------- 1 | 2 | 9 | 10 | 18 | 19 | 27 | 28 | 37 | 38 |