├── .gitignore ├── README.md ├── app ├── .gitignore ├── build.gradle ├── proguard-rules.pro └── src │ └── main │ ├── AndroidManifest.xml │ ├── java │ └── com │ │ └── logex │ │ └── headlinenews │ │ ├── Extension.kt │ │ ├── NewsApplication.kt │ │ ├── adapter │ │ ├── HomeNewsPagerAdapter.kt │ │ ├── MicroNewsAdapter.kt │ │ ├── NewsCommentAdapter.kt │ │ ├── NewsListAdapter.kt │ │ ├── NewsMultiImageAdapter.kt │ │ ├── VideoListAdapter.kt │ │ └── VideoPagerAdapter.kt │ │ ├── base │ │ ├── BaseViewModel.java │ │ ├── LiveData.java │ │ ├── MVVMFragment.kt │ │ ├── Observer.java │ │ ├── RxBus.java │ │ ├── RxBusManage.java │ │ ├── RxBusObserver.java │ │ └── RxSchedulers.kt │ │ ├── cache │ │ ├── CacheManager.java │ │ ├── DiskLruCache.java │ │ └── RxCache.kt │ │ ├── http │ │ ├── HttpApi.kt │ │ ├── HttpFactory.kt │ │ ├── HttpInterceptor.kt │ │ └── HttpObserver.kt │ │ ├── model │ │ ├── DynamicEntity.kt │ │ ├── HomeNewsSubscribed.kt │ │ ├── HomeSearchSuggest.kt │ │ ├── HttpResult.kt │ │ ├── NewsCommentEntity.kt │ │ ├── NewsDetailEntity.kt │ │ ├── NewsListEntity.kt │ │ ├── SubscribedEntity.kt │ │ ├── SubscribedRecommend.kt │ │ ├── VideoCategoryEntity.kt │ │ ├── VideoPathEntity.kt │ │ └── event │ │ │ └── StartBrotherEvent.java │ │ ├── ui │ │ ├── MainActivity.kt │ │ ├── SplashActivity.kt │ │ ├── home │ │ │ ├── HomeFragment.kt │ │ │ ├── HomeViewModel.kt │ │ │ ├── MicroNewsFragment.kt │ │ │ ├── MicroNewsViewModel.kt │ │ │ ├── MineFragment.kt │ │ │ └── VideoFragment.kt │ │ ├── main │ │ │ └── MainFragment.kt │ │ ├── news │ │ │ ├── NewsDetailFragment.kt │ │ │ ├── NewsListFragment.kt │ │ │ └── NewsViewModel.kt │ │ ├── persion │ │ │ └── MyFollowFragment.kt │ │ └── video │ │ │ ├── VideoDetailFragment.kt │ │ │ ├── VideoListFragment.kt │ │ │ └── VideoViewModel.kt │ │ └── widget │ │ ├── MainTabView.kt │ │ └── VideoListPlayer.kt │ └── res │ ├── color │ └── main_bottom_text_color.xml │ ├── drawable-hdpi │ ├── add_channel_titlbar_follow_normal.png │ ├── add_video.png │ ├── add_video_press.png │ ├── bg_mine_top.png │ ├── btn_login_phone.png │ ├── btn_login_qq.png │ ├── btn_login_wechat.png │ ├── comment_feed_ugc.png │ ├── download_ad_details.png │ ├── ic_home_news_search.png │ ├── ic_launcher.png │ ├── ic_mine_collect_normal.png │ ├── ic_mine_collect_press.png │ ├── ic_mine_history_normal.png │ ├── ic_mine_history_press.png │ ├── ic_setting_night_style_normal.png │ ├── ic_setting_night_style_press.png │ ├── ic_splash_logo.png │ ├── like_old_feed.png │ ├── new_author_video_comment_count.png │ ├── new_author_video_comment_count_press.png │ ├── new_love_tabbar.png │ ├── new_more.png │ ├── new_more_press.png │ ├── new_more_titlebar.png │ ├── new_more_titlebar_press.png │ ├── share_black_tipic_details_normal.png │ ├── share_black_tipic_details_pressed.png │ ├── share_feed.png │ ├── tab_comment.png │ ├── tab_index_normal.png │ ├── tab_index_selected.png │ ├── tab_micro_normal.png │ ├── tab_micro_selected.png │ ├── tab_mine_normal.png │ ├── tab_mine_selected.png │ ├── tab_nologin_normal.png │ ├── tab_nologin_selected.png │ ├── tab_video_normal.png │ ├── tab_video_selected.png │ ├── toutiaoquan_release_image.png │ ├── toutiaoquan_release_text.png │ ├── toutiaoquan_release_video.png │ ├── video_search.png │ └── wei_friend.png │ ├── drawable-mdpi │ ├── add_channel_titlbar_follow_normal.png │ ├── add_video.png │ ├── add_video_press.png │ ├── bg_mine_top.png │ ├── btn_login_phone.png │ ├── btn_login_qq.png │ ├── btn_login_wechat.png │ ├── comment_feed_ugc.png │ ├── download_ad_details.png │ ├── ic_home_news_search.png │ ├── ic_launcher.png │ ├── ic_mine_collect_normal.png │ ├── ic_mine_collect_press.png │ ├── ic_mine_history_normal.png │ ├── ic_mine_history_press.png │ ├── ic_setting_night_style_normal.png │ ├── ic_setting_night_style_press.png │ ├── ic_splash_logo.png │ ├── like_old_feed.png │ ├── new_author_video_comment_count.png │ ├── new_author_video_comment_count_press.png │ ├── new_love_tabbar.png │ ├── new_more.png │ ├── new_more_press.png │ ├── new_more_titlebar.png │ ├── new_more_titlebar_press.png │ ├── share_black_tipic_details_normal.png │ ├── share_black_tipic_details_pressed.png │ ├── share_feed.png │ ├── tab_comment.png │ ├── tab_index_normal.png │ ├── tab_index_selected.png │ ├── tab_micro_normal.png │ ├── tab_micro_selected.png │ ├── tab_mine_normal.png │ ├── tab_mine_selected.png │ ├── tab_nologin_normal.png │ ├── tab_nologin_selected.png │ ├── tab_video_normal.png │ ├── tab_video_selected.png │ ├── toutiaoquan_release_image.png │ ├── toutiaoquan_release_text.png │ ├── toutiaoquan_release_video.png │ ├── video_search.png │ └── wei_friend.png │ ├── drawable-xhdpi │ ├── add_channel_titlbar_follow_normal.png │ ├── add_video.png │ ├── add_video_press.png │ ├── bg_mine_top.png │ ├── btn_login_phone.png │ ├── btn_login_qq.png │ ├── btn_login_wechat.png │ ├── comment_feed_ugc.png │ ├── comment_like_icon.png │ ├── comment_like_icon_press.png │ ├── download_ad_details.png │ ├── ic_home_news_search.png │ ├── ic_home_top_logo.png │ ├── ic_launcher.png │ ├── ic_mine_collect_normal.png │ ├── ic_mine_collect_press.png │ ├── ic_mine_history_normal.png │ ├── ic_mine_history_press.png │ ├── ic_setting_night_style_normal.png │ ├── ic_setting_night_style_press.png │ ├── ic_splash_logo.png │ ├── like_old_feed.png │ ├── new_author_video_comment_count.png │ ├── new_author_video_comment_count_press.png │ ├── new_love_tabbar.png │ ├── new_more.png │ ├── new_more_press.png │ ├── new_more_titlebar.png │ ├── new_more_titlebar_press.png │ ├── replay_press.png │ ├── replay_video.png │ ├── share_black_tipic_details_normal.png │ ├── share_black_tipic_details_pressed.png │ ├── share_feed.png │ ├── share_press.png │ ├── tab_comment.png │ ├── tab_index_normal.png │ ├── tab_index_selected.png │ ├── tab_micro_normal.png │ ├── tab_micro_selected.png │ ├── tab_mine_normal.png │ ├── tab_mine_selected.png │ ├── tab_nologin_normal.png │ ├── tab_nologin_selected.png │ ├── tab_video_normal.png │ ├── tab_video_selected.png │ ├── toutiaoquan_release_image.png │ ├── toutiaoquan_release_text.png │ ├── toutiaoquan_release_video.png │ ├── video_search.png │ ├── video_share.png │ └── wei_friend.png │ ├── drawable-xxhdpi │ ├── add_channel_titlbar_follow_normal.png │ ├── add_video.png │ ├── add_video_press.png │ ├── bg_mine_top.png │ ├── btn_login_phone.png │ ├── btn_login_qq.png │ ├── btn_login_wechat.png │ ├── comment_feed_ugc.png │ ├── comment_like_icon.png │ ├── comment_like_icon_press.png │ ├── download_ad_details.png │ ├── ic_home_news_search.png │ ├── ic_home_top_logo.png │ ├── ic_mine_collect_normal.png │ ├── ic_mine_collect_press.png │ ├── ic_mine_history_normal.png │ ├── ic_mine_history_press.png │ ├── ic_setting_night_style_normal.png │ ├── ic_setting_night_style_press.png │ ├── ic_splash_logo.png │ ├── like_old_feed.png │ ├── list_item_place_photo.png │ ├── new_author_video_comment_count.png │ ├── new_author_video_comment_count_press.png │ ├── new_love_tabbar.png │ ├── new_more.png │ ├── new_more_press.png │ ├── new_more_titlebar.png │ ├── new_more_titlebar_press.png │ ├── replay_press.png │ ├── replay_video.png │ ├── share_black_tipic_details_normal.png │ ├── share_black_tipic_details_pressed.png │ ├── share_feed.png │ ├── share_press.png │ ├── tab_comment.png │ ├── tab_index_normal.png │ ├── tab_index_selected.png │ ├── tab_micro_normal.png │ ├── tab_micro_selected.png │ ├── tab_mine_normal.png │ ├── tab_mine_selected.png │ ├── tab_nologin_normal.png │ ├── tab_nologin_selected.png │ ├── tab_video_normal.png │ ├── tab_video_selected.png │ ├── thr_shadow_video.9.png │ ├── toutiaoquan_release_image.png │ ├── toutiaoquan_release_text.png │ ├── toutiaoquan_release_video.png │ ├── video_search.png │ ├── video_share.png │ └── wei_friend.png │ ├── drawable │ ├── add_channel_titlbar_follow.xml │ ├── bg_home_top_search.xml │ ├── bg_login_style_more.xml │ ├── bg_new_list_image.xml │ ├── bg_news_comment_reply_count.xml │ ├── bg_news_detail_comment.xml │ ├── bg_news_image_count.xml │ ├── bg_news_list_ad_label.xml │ ├── bg_video_list_duration.xml │ ├── btn_add_video_selector.xml │ ├── btn_new_more_selector.xml │ ├── btn_video_comment_count_selector.xml │ ├── btn_video_replay_selector.xml │ ├── btn_video_share_selector.xml │ ├── comment_like_selector.xml │ ├── frame_news_label.xml │ ├── mine_collect_selector.xml │ ├── mine_history_selector.xml │ ├── setting_night_style_selector.xml │ ├── share_black_tipic_details_selector.xml │ ├── tab_index_bg.xml │ ├── tab_micro_bg.xml │ ├── tab_mine_bg.xml │ ├── tab_nologin_bg.xml │ ├── tab_video_bg.xml │ └── title_bar_more_selector.xml │ ├── layout │ ├── activity_main.xml │ ├── activity_splash.xml │ ├── fragment_home.xml │ ├── fragment_main.xml │ ├── fragment_micro_news.xml │ ├── fragment_mine.xml │ ├── fragment_my_follow.xml │ ├── fragment_news_detail.xml │ ├── fragment_news_list.xml │ ├── fragment_video.xml │ ├── fragment_video_detail.xml │ ├── fragment_video_list.xml │ ├── header_news_detail.xml │ ├── layout_main_bottom.xml │ ├── layout_main_tab_view.xml │ ├── recycler_item_micro_news.xml │ ├── recycler_item_news_ad_big_image.xml │ ├── recycler_item_news_ad_big_image_app.xml │ ├── recycler_item_news_ad_multiple_image.xml │ ├── recycler_item_news_ad_multiple_image_app.xml │ ├── recycler_item_news_ad_video_app.xml │ ├── recycler_item_news_comment.xml │ ├── recycler_item_news_empty_image.xml │ ├── recycler_item_news_multiple_image.xml │ ├── recycler_item_news_picture_list.xml │ ├── recycler_item_news_single_big_image.xml │ ├── recycler_item_news_single_image.xml │ ├── recycler_item_news_video_big_image.xml │ ├── recycler_item_news_video_single_image.xml │ ├── recycler_item_video_big_image.xml │ └── video_list_plyer.xml │ ├── values-zh-rCN │ └── strings.xml │ └── values │ ├── attrs.xml │ ├── colors.xml │ ├── strings.xml │ └── styles.xml ├── art ├── device-2019-05-03-203837.png ├── device-2019-05-03-203929.png ├── device-2019-05-03-204006.png └── device-2019-05-03-204036.png ├── build.gradle ├── common ├── .gitignore ├── build.gradle └── src │ └── main │ ├── AndroidManifest.xml │ ├── java │ ├── android │ │ └── support │ │ │ └── v4 │ │ │ └── app │ │ │ └── FragmentTransactionBugFixHack.java │ └── com │ │ └── logex │ │ ├── AppConfig.java │ │ ├── adapter │ │ ├── abslistview │ │ │ ├── CommonAdapter.java │ │ │ ├── MultiItemTypeAdapter.java │ │ │ └── base │ │ │ │ ├── ItemViewDelegate.java │ │ │ │ ├── ItemViewDelegateManager.java │ │ │ │ └── ViewHolder.java │ │ └── recyclerview │ │ │ ├── CommonAdapter.java │ │ │ ├── MultiItemTypeAdapter.java │ │ │ ├── base │ │ │ ├── ItemViewDelegate.java │ │ │ ├── ItemViewDelegateManager.java │ │ │ └── ViewHolder.java │ │ │ ├── utils │ │ │ └── WrapperUtils.java │ │ │ └── wrapper │ │ │ ├── EmptyWrapper.java │ │ │ ├── HeaderFooterWrapper.java │ │ │ └── LoadMoreWrapper.java │ │ ├── fragmentation │ │ ├── BaseActivity.java │ │ ├── BaseFragment.java │ │ ├── Fragmentation.java │ │ ├── FragmentationDelegate.java │ │ ├── ISupport.java │ │ ├── ISupportFragment.java │ │ ├── SupportTransaction.java │ │ ├── anim │ │ │ ├── DefaultHorizontalAnimator.java │ │ │ ├── DefaultNoAnimator.java │ │ │ ├── DefaultVerticalAnimator.java │ │ │ └── FragmentAnimator.java │ │ ├── debug │ │ │ ├── DebugFragmentRecord.java │ │ │ └── DebugHierarchyViewContainer.java │ │ └── helper │ │ │ ├── ExceptionHandler.java │ │ │ ├── FragmentLifecycleCallbacks.java │ │ │ └── internal │ │ │ ├── AnimatorHelper.java │ │ │ ├── InstanceException.java │ │ │ ├── LifecycleHelper.java │ │ │ ├── OnFragmentDestroyViewListener.java │ │ │ ├── ResultRecord.java │ │ │ ├── TransactionRecord.java │ │ │ └── VisibleDelegate.java │ │ ├── pullrefresh │ │ ├── PullRefreshLayout.java │ │ ├── calculator │ │ │ ├── CenterRefreshOffsetCalculator.java │ │ │ ├── DefaultRefreshOffsetCalculator.java │ │ │ └── FixedRefreshOffsetCalculator.java │ │ ├── header │ │ │ └── DefaultRefreshView.java │ │ └── listener │ │ │ ├── OnPullListener.java │ │ │ └── PullRefreshListener.java │ │ ├── utils │ │ ├── AppInfoUtil.java │ │ ├── AutoUtils.java │ │ ├── BaseSPUtil.java │ │ ├── DensityUtil.java │ │ ├── GlideCircleTransform.java │ │ ├── GlideRoundTransform.java │ │ ├── GsonUtil.java │ │ ├── LogUtil.java │ │ ├── NetworkUtil.java │ │ ├── RomUtil.java │ │ ├── ScreenUtils.java │ │ ├── StatusBarUtil.java │ │ ├── StringUtil.java │ │ ├── UIUtils.java │ │ └── ValidateUtil.java │ │ └── widget │ │ ├── AppTitleBar.java │ │ ├── CustomDialog.java │ │ ├── DividerLine.java │ │ ├── IosAlertDialog.java │ │ └── LoadingView.java │ └── res │ ├── anim │ ├── actionsheet_dialog_in.xml │ ├── actionsheet_dialog_out.xml │ ├── h_fragment_enter.xml │ ├── h_fragment_exit.xml │ ├── h_fragment_pop_enter.xml │ ├── h_fragment_pop_exit.xml │ ├── no_anim.xml │ ├── pop_exit_no_anim.xml │ ├── v_fragment_enter.xml │ ├── v_fragment_exit.xml │ ├── v_fragment_pop_enter.xml │ └── v_fragment_pop_exit.xml │ ├── drawable-hdpi │ ├── asy.png │ ├── ic_arrow_next_dark.png │ ├── ic_titlebar_dark_normal.png │ ├── ic_titlebar_dark_pressed.png │ ├── ic_titlebar_light_normal.png │ └── ic_titlebar_light_pressed.png │ ├── drawable-mdpi │ ├── asy.png │ ├── ic_arrow_next_dark.png │ ├── ic_titlebar_dark_normal.png │ ├── ic_titlebar_dark_pressed.png │ ├── ic_titlebar_light_normal.png │ └── ic_titlebar_light_pressed.png │ ├── drawable-xhdpi │ ├── asy.png │ ├── ic_arrow_next_dark.png │ ├── ic_titlebar_dark_normal.png │ ├── ic_titlebar_dark_pressed.png │ ├── ic_titlebar_light_normal.png │ └── ic_titlebar_light_pressed.png │ ├── drawable-xxhdpi │ ├── asy.png │ ├── ic_arrow_next_dark.png │ ├── ic_expandable.png │ ├── ic_right.png │ ├── ic_titlebar_dark_normal.png │ ├── ic_titlebar_dark_pressed.png │ ├── ic_titlebar_light_normal.png │ └── ic_titlebar_light_pressed.png │ ├── drawable │ ├── alert_bg.xml │ ├── alert_btn_left_pressed.xml │ ├── alert_btn_right_pressed.xml │ ├── alert_btn_single_pressed.xml │ ├── alertdialog_left_selector.xml │ ├── alertdialog_right_selector.xml │ ├── alertdialog_single_selector.xml │ ├── custom_toast_bg.xml │ ├── dot_message_unread_red.xml │ └── titlebar_back_dark_selector.xml │ ├── layout │ ├── layout_custom_toast_view.xml │ ├── layout_widget_title_bar.xml │ ├── view_alertdialog.xml │ ├── view_empty_more_footer.xml │ ├── view_load_failed_footer.xml │ ├── view_load_more_footer.xml │ └── view_pull_refresh_header.xml │ ├── values-zh-rCN │ └── strings.xml │ └── values │ ├── attrs.xml │ ├── colors.xml │ ├── dimens.xml │ ├── ids.xml │ ├── strings.xml │ └── styles.xml ├── gradlew ├── gradlew.bat ├── jcplayer ├── .gitignore ├── build.gradle └── src │ └── main │ ├── AndroidManifest.xml │ ├── java │ └── com │ │ └── logex │ │ └── videoplayer │ │ ├── JCBuriedPoint.java │ │ ├── JCBuriedPointStandard.java │ │ ├── JCMediaManager.java │ │ ├── JCMediaPlayerListener.java │ │ ├── JCTextureView.java │ │ ├── JCUtils.java │ │ ├── JCVideoPlayer.java │ │ ├── JCVideoPlayerManager.java │ │ └── JCVideoPlayerStandard.java │ └── res │ ├── drawable-xhdpi │ ├── jc_add_volume.png │ ├── jc_back.png │ ├── jc_back_tiny_normal.png │ ├── jc_back_tiny_pressed.png │ ├── jc_backward_icon.png │ ├── jc_close_volume.png │ ├── jc_enlarge.png │ ├── jc_error_normal.png │ ├── jc_error_pressed.png │ ├── jc_forward_icon.png │ ├── jc_loading_bg.png │ ├── jc_pause_normal.png │ ├── jc_pause_pressed.png │ ├── jc_play_normal.png │ ├── jc_play_pressed.png │ ├── jc_replay_press.png │ ├── jc_replay_video.png │ ├── jc_shrink.png │ └── jc_volume_icon.png │ ├── drawable-xxhdpi │ ├── jc_back.png │ ├── jc_play_normal.png │ ├── jc_play_pressed.png │ ├── jc_replay_press.png │ └── jc_replay_video.png │ ├── drawable │ ├── jc_click_error_selector.xml │ ├── jc_click_pause_selector.xml │ ├── jc_click_play_selector.xml │ ├── jc_click_replay_selector.xml │ ├── jc_dialog_progress.xml │ ├── jc_dialog_progress_bg.xml │ ├── jc_loading.xml │ ├── jc_progress.xml │ ├── jc_seek_progress.xml │ ├── jc_seek_thumb.xml │ ├── jc_seek_thumb_normal.xml │ ├── jc_seek_thumb_pressed.xml │ ├── jc_title_bg.xml │ └── jc_volume_progress_bg.xml │ ├── layout │ ├── jc_dialog_progress.xml │ ├── jc_dialog_volume.xml │ └── jc_layout_standard.xml │ ├── values-zh-rCN │ └── strings.xml │ └── values │ ├── ids.xml │ ├── strings.xml │ └── styles.xml └── settings.gradle /.gitignore: -------------------------------------------------------------------------------- 1 | *.iml 2 | .gradle 3 | gradle 4 | .idea 5 | /local.properties 6 | .DS_Store 7 | /build 8 | /captures 9 | .externalNativeBuild 10 | .gradlew 11 | .gradlew.bat 12 | 13 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Headline_News_Kotlin_App 2 | 高仿今日头条app 一个kotlin项目 3 | 4 | --- 5 | 6 | ##无图无真相下面是截图 7 | --- 8 | ![新闻列表](art/device-2019-05-03-203837.png) 9 | ![视频](art/device-2019-05-03-203929.png) 10 | ![新闻内容](art/device-2019-05-03-204006.png) 11 | ![评论](art/device-2019-05-03-204036.png) 12 | 13 | --- 14 | 15 | #####抓取了今日头条部分api 如有侵权请联系本人 16 | 17 | --- 18 | 19 | ###app整体架构基于自创的MVVM(欢迎留言探讨) 20 | ###做这个app的目的呢让初学者可以快速开发出一个安卓app 21 | 22 | #####用到的第三方库 23 | 1. glide 一款强大的图片加载库,谷歌推荐。 24 | 2. retrofit2。 25 | 3. RxJava2 26 | 4. rxbinding 27 | 5. fragmentation(可构建单activity多fragment app) 28 | 6. RxBus 29 | 30 | --- 31 | 32 | ###本app纯属娱乐 功能不定期更新 -------------------------------------------------------------------------------- /app/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | -------------------------------------------------------------------------------- /app/build.gradle: -------------------------------------------------------------------------------- 1 | apply plugin: 'com.android.application' 2 | apply plugin: 'kotlin-android' 3 | apply plugin:'kotlin-android-extensions' 4 | 5 | androidExtensions { 6 | // kotlin支持Parcelable序列化 7 | experimental = true 8 | } 9 | 10 | android { 11 | compileSdkVersion 26 12 | buildToolsVersion "26.0.3" 13 | defaultConfig { 14 | applicationId "com.logex.headlinenews" 15 | minSdkVersion 15 16 | targetSdkVersion 23 17 | 18 | multiDexEnabled true 19 | 20 | versionCode 1 21 | versionName "1.0" 22 | } 23 | lintOptions { 24 | checkReleaseBuilds false 25 | abortOnError false 26 | // 防止发布时出现因MissingTranslation导致打包失败 27 | disable 'MissingTranslation' 28 | } 29 | 30 | buildTypes { 31 | release { 32 | minifyEnabled false 33 | //zipalign优化 34 | zipAlignEnabled true 35 | proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 36 | } 37 | } 38 | } 39 | 40 | dependencies { 41 | compile project(':jcplayer') 42 | compile 'com.android.support:multidex:1.0.1' 43 | compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" 44 | } 45 | -------------------------------------------------------------------------------- /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/liguangxi/android/android-sdk-macosx/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 | -------------------------------------------------------------------------------- /app/src/main/java/com/logex/headlinenews/Extension.kt: -------------------------------------------------------------------------------- 1 | package com.logex.headlinenews 2 | 3 | import java.text.SimpleDateFormat 4 | import java.util.* 5 | 6 | /** 7 | * 创建人: liguangxi 8 | * 日期: 2019/5/3 9 | * 邮箱: 15679158128@163.com 10 | * 版本: 1.0 11 | * 定义扩展 12 | **/ 13 | 14 | /** 15 | * 获取新闻发布时间 16 | * @param time 发布时间戳/1000 17 | */ 18 | fun getPublishTime(time: Long?): String { 19 | if (time == null) return "未知" 20 | 21 | val currentTime: Long = System.currentTimeMillis() / 1000 22 | val newTime = currentTime - time 23 | 24 | return when { 25 | newTime < 60 -> "刚刚" 26 | newTime < 3600 -> "${newTime / 60}分钟前" 27 | newTime < 86400 -> "${newTime / 3600}小时前" 28 | newTime in 86400..259200 -> "${newTime / 86400}天前" 29 | else -> { 30 | val format = SimpleDateFormat("yyyy-MM-dd HH:mm", Locale.getDefault()) 31 | format.format(Date(time)) 32 | } 33 | } 34 | } 35 | 36 | /** 37 | * 获取视频时长 38 | */ 39 | fun getVideoDuration(duration: Int): String { 40 | if (duration <= 0) return "00:00" 41 | return when { 42 | duration < 10 -> "00:0$duration" 43 | duration < 60 -> "00:$duration" 44 | duration < 600 -> { 45 | val remainder = duration % 60 46 | if (remainder < 10) { 47 | "0${duration / 60}:0$remainder" 48 | } else { 49 | "0${duration / 60}:$remainder" 50 | } 51 | } 52 | else -> { 53 | val remainder = duration % 60 54 | if (remainder < 10) { 55 | "${duration / 60}:0$remainder" 56 | } else { 57 | "${duration / 60}:$remainder" 58 | } 59 | } 60 | } 61 | } 62 | 63 | class NewsConstant { 64 | 65 | companion object { 66 | const val BASE_URL = "https://is.snssdk.com/" 67 | } 68 | } -------------------------------------------------------------------------------- /app/src/main/java/com/logex/headlinenews/NewsApplication.kt: -------------------------------------------------------------------------------- 1 | package com.logex.headlinenews 2 | 3 | import android.app.Application 4 | 5 | /** 6 | * 创建人: liguangxi 7 | * 日期: 2018/2/22 8 | * 邮箱: 956328710@qq.com 9 | * 版本: 1.0 10 | * NewsApplication 11 | */ 12 | class NewsApplication : Application() { 13 | 14 | override fun onCreate() { 15 | super.onCreate() 16 | instance = this 17 | } 18 | 19 | companion object { 20 | var instance: NewsApplication? = null 21 | } 22 | } -------------------------------------------------------------------------------- /app/src/main/java/com/logex/headlinenews/adapter/HomeNewsPagerAdapter.kt: -------------------------------------------------------------------------------- 1 | package com.logex.headlinenews.adapter 2 | 3 | import android.os.Bundle 4 | import android.support.v4.app.Fragment 5 | import android.support.v4.app.FragmentManager 6 | import android.support.v4.app.FragmentStatePagerAdapter 7 | import com.logex.headlinenews.model.SubscribedEntity 8 | import com.logex.headlinenews.ui.news.NewsListFragment 9 | 10 | 11 | /** 12 | * 创建人: liguangxi 13 | * 日期: 2018/2/23 14 | * 邮箱: 956328710@qq.com 15 | * 版本: 1.0 16 | * 首页新闻PagerAdapter 17 | */ 18 | class HomeNewsPagerAdapter(fm: FragmentManager, private var mTabs: List) : FragmentStatePagerAdapter(fm) { 19 | 20 | override fun getItem(position: Int): Fragment { 21 | val bundle = Bundle() 22 | bundle.putParcelable("tab", mTabs[position]) 23 | return NewsListFragment.newInstance(bundle) 24 | } 25 | 26 | override fun getCount(): Int = mTabs.size 27 | 28 | override fun getPageTitle(position: Int): CharSequence? = mTabs[position].name 29 | } -------------------------------------------------------------------------------- /app/src/main/java/com/logex/headlinenews/adapter/MicroNewsAdapter.kt: -------------------------------------------------------------------------------- 1 | package com.logex.headlinenews.adapter 2 | 3 | import android.content.Context 4 | import com.logex.adapter.recyclerview.CommonAdapter 5 | import com.logex.adapter.recyclerview.base.ViewHolder 6 | import com.logex.headlinenews.R 7 | import com.logex.headlinenews.model.NewsListEntity 8 | 9 | /** 10 | * 创建人: liguangxi 11 | * 日期: 2018/8/2 12 | * 邮箱 956328710@qq.com 13 | * 版本 1.0 14 | * 微头条列表适配器 15 | */ 16 | class MicroNewsAdapter(context: Context, list: List, layoutResId: Int) : 17 | CommonAdapter(context, list, layoutResId) { 18 | 19 | override fun convertView(viewHolder: ViewHolder, item: NewsListEntity, position: Int) { 20 | // 显示用户头像 21 | viewHolder.setCircleImageResourcesUrl(R.id.iv_user_avatar, item.media_info?.avatar_url, -1) 22 | viewHolder.setText(R.id.tv_news_content, item.abstract) 23 | } 24 | } -------------------------------------------------------------------------------- /app/src/main/java/com/logex/headlinenews/adapter/NewsMultiImageAdapter.kt: -------------------------------------------------------------------------------- 1 | package com.logex.headlinenews.adapter 2 | 3 | import android.content.Context 4 | import com.logex.adapter.recyclerview.CommonAdapter 5 | import com.logex.adapter.recyclerview.base.ViewHolder 6 | import com.logex.headlinenews.R 7 | import com.logex.headlinenews.model.NewsListEntity 8 | 9 | /** 10 | * 创建人: liguangxi 11 | * 日期: 2018/2/23 12 | * 邮箱: 956328710@qq.com 13 | * 版本: 1.0 14 | * 新闻列表多图适配器 15 | */ 16 | class NewsMultiImageAdapter(context: Context, list: List, layoutResId: Int) : 17 | CommonAdapter(context, list, layoutResId) { 18 | var imageSize: Int = 0 19 | 20 | override fun convertView(viewHolder: ViewHolder, item: NewsListEntity.Image, position: Int) { 21 | viewHolder.setImageResourcesUrl(R.id.iv_news_img, item.url, R.drawable.bg_new_list_image) 22 | 23 | viewHolder.setVisible(R.id.tv_news_image_size, imageSize > 3 && position == 2) 24 | viewHolder.setText(R.id.tv_news_image_size, "${imageSize}图") 25 | } 26 | } -------------------------------------------------------------------------------- /app/src/main/java/com/logex/headlinenews/adapter/VideoListAdapter.kt: -------------------------------------------------------------------------------- 1 | package com.logex.headlinenews.adapter 2 | 3 | import android.content.Context 4 | import com.logex.adapter.recyclerview.CommonAdapter 5 | import com.logex.adapter.recyclerview.base.ViewHolder 6 | import com.logex.headlinenews.R 7 | import com.logex.headlinenews.getVideoDuration 8 | import com.logex.headlinenews.model.NewsListEntity 9 | import com.logex.headlinenews.widget.VideoListPlayer 10 | import com.logex.videoplayer.JCVideoPlayer 11 | 12 | /** 13 | * 创建人: liguangxi 14 | * 日期: 2018/2/25 15 | * 邮箱: 956328710@qq.com 16 | * 版本: 1.0 17 | * 视频列表适配器 18 | */ 19 | class VideoListAdapter(context: Context, list: List, layoutResId: Int) : 20 | CommonAdapter(context, list, layoutResId) { 21 | 22 | override fun convertView(viewHolder: ViewHolder, item: NewsListEntity, position: Int) { 23 | // 处理视频播放 24 | val mVideoPlayer = viewHolder.getView(R.id.mVideoPlayer) 25 | 26 | mVideoPlayer.videoId = item.video_id 27 | 28 | mVideoPlayer.setUp("", JCVideoPlayer.SCREEN_WINDOW_LIST, item.title) 29 | mVideoPlayer.showVideoThumbnail(item.middle_image?.url) 30 | .showVideoPlayCount("${item.read_count}次播放") 31 | .showVideoDuration(getVideoDuration(item.video_duration)) 32 | 33 | val user = item.user_info 34 | viewHolder.setCircleImageResourcesUrl(R.id.iv_user_avatar, user?.avatar_url, -1) 35 | viewHolder.setText(R.id.tv_user_name, item.media_name) 36 | viewHolder.setText(R.id.tv_comment_count, item.comment_count?.toString()) 37 | } 38 | } -------------------------------------------------------------------------------- /app/src/main/java/com/logex/headlinenews/adapter/VideoPagerAdapter.kt: -------------------------------------------------------------------------------- 1 | package com.logex.headlinenews.adapter 2 | 3 | import android.os.Bundle 4 | import android.support.v4.app.Fragment 5 | import android.support.v4.app.FragmentManager 6 | import android.support.v4.app.FragmentStatePagerAdapter 7 | import com.logex.headlinenews.model.VideoCategoryEntity 8 | import com.logex.headlinenews.ui.video.VideoListFragment 9 | 10 | 11 | /** 12 | * 创建人: liguangxi 13 | * 日期: 2018/2/23 14 | * 邮箱: 956328710@qq.com 15 | * 版本: 1.0 16 | * 首页新闻PagerAdapter 17 | */ 18 | class VideoPagerAdapter(fm: FragmentManager) : FragmentStatePagerAdapter(fm) { 19 | var mTabs: List? = null 20 | 21 | override fun getItem(position: Int): Fragment { 22 | val bundle = Bundle() 23 | bundle.putParcelable("tab", mTabs?.get(position)) 24 | return VideoListFragment.newInstance(bundle) 25 | } 26 | 27 | override fun getCount(): Int = mTabs?.size ?: 0 28 | 29 | override fun getPageTitle(position: Int): CharSequence? = mTabs?.get(position)?.name ?: "tab" 30 | } -------------------------------------------------------------------------------- /app/src/main/java/com/logex/headlinenews/base/BaseViewModel.java: -------------------------------------------------------------------------------- 1 | package com.logex.headlinenews.base; 2 | 3 | import android.content.Context; 4 | 5 | import java.util.ArrayList; 6 | import java.util.List; 7 | 8 | import io.reactivex.disposables.CompositeDisposable; 9 | import io.reactivex.disposables.Disposable; 10 | 11 | /** 12 | * 创建人: Administrator 13 | * 日期: 2019/4/28 14 | * 邮箱: 15679158128@163.com 15 | * 版本: 1.0 16 | * BaseViewModel 17 | */ 18 | public abstract class BaseViewModel { 19 | protected Context context; 20 | 21 | private CompositeDisposable compositeDisposable = null;// 管理订阅者者 22 | 23 | // LiveData 24 | private List mLiveDataList = new ArrayList<>(); 25 | // 提交成功LiveData 26 | public LiveData successData = new LiveData<>(); 27 | // 通用错误LiveData 28 | public LiveData errorData = new LiveData<>(); 29 | 30 | public BaseViewModel(Context context) { 31 | this.context = context; 32 | } 33 | 34 | protected void observe(LiveData liveData, Observer observer) { 35 | mLiveDataList.add(liveData); 36 | liveData.setObserver(observer); 37 | } 38 | 39 | /** 40 | * 添加订阅 41 | * 42 | * @param disposable disposable 43 | */ 44 | protected void addSubscribe(Disposable disposable) { 45 | if (disposable == null) return; 46 | if (compositeDisposable == null) { 47 | compositeDisposable = new CompositeDisposable(); 48 | } 49 | compositeDisposable.add(disposable); 50 | } 51 | 52 | /** 53 | * 销毁view 54 | */ 55 | protected void detachView() { 56 | // 销毁Disposable 57 | if (compositeDisposable != null) { 58 | compositeDisposable.dispose(); 59 | compositeDisposable.clear(); 60 | } 61 | compositeDisposable = null; 62 | 63 | // 销毁LiveData 64 | for (LiveData liveData : mLiveDataList) { 65 | liveData.detach(); 66 | } 67 | mLiveDataList.clear(); 68 | mLiveDataList = null; 69 | } 70 | } 71 | -------------------------------------------------------------------------------- /app/src/main/java/com/logex/headlinenews/base/LiveData.java: -------------------------------------------------------------------------------- 1 | package com.logex.headlinenews.base; 2 | 3 | /** 4 | * 创建人: Administrator 5 | * 日期: 2019/5/6 6 | * 邮箱: 15679158128@163.com 7 | * 版本: 1.0 8 | * LiveData 9 | */ 10 | public class LiveData { 11 | private Observer observer; 12 | 13 | protected void setObserver(Observer observer) { 14 | this.observer = observer; 15 | } 16 | 17 | public void setValue(T t) { 18 | if (observer != null) { 19 | observer.onChange(t); 20 | } 21 | } 22 | 23 | protected void detach() { 24 | observer = null; 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /app/src/main/java/com/logex/headlinenews/base/Observer.java: -------------------------------------------------------------------------------- 1 | package com.logex.headlinenews.base; 2 | 3 | /** 4 | * 创建人: Administrator 5 | * 日期: 2019/4/29 6 | * 邮箱: 15679158128@163.com 7 | * 版本: 1.0 8 | * 观察者 9 | */ 10 | public interface Observer { 11 | 12 | void onChange(T t); 13 | } 14 | -------------------------------------------------------------------------------- /app/src/main/java/com/logex/headlinenews/base/RxBusManage.java: -------------------------------------------------------------------------------- 1 | package com.logex.headlinenews.base; 2 | 3 | import android.util.SparseArray; 4 | 5 | import java.util.ArrayList; 6 | import java.util.List; 7 | 8 | import io.reactivex.disposables.Disposable; 9 | 10 | /** 11 | * 创建人: Administrator 12 | * 日期: 2019/4/25 13 | * 邮箱: 15679158128@163.com 14 | * 版本: 1.0 15 | * RxBusManage 16 | */ 17 | public class RxBusManage { 18 | private static volatile RxBusManage instance; 19 | private SparseArray> mBusDisposable = new SparseArray<>(); 20 | 21 | public static RxBusManage getInstance() { 22 | if (instance == null) { 23 | synchronized (RxBus.class) { 24 | if (instance == null) { 25 | instance = new RxBusManage(); 26 | } 27 | } 28 | } 29 | return instance; 30 | } 31 | 32 | /** 33 | * 添加订阅 34 | * 35 | * @param key key 36 | * @param disposable disposable 37 | */ 38 | public void addSubscribe(int key, Disposable disposable) { 39 | if (disposable.isDisposed()) return; 40 | 41 | List resources = mBusDisposable.get(key); 42 | if (resources == null) { 43 | resources = new ArrayList<>(); 44 | resources.add(disposable); 45 | mBusDisposable.put(key, resources); 46 | } else { 47 | resources.add(disposable); 48 | } 49 | } 50 | 51 | /** 52 | * 解除订阅 53 | * 54 | * @param key key 55 | */ 56 | public void unSubscribe(int key) { 57 | List resources = mBusDisposable.get(key); 58 | if (resources != null) { 59 | for (Disposable d : resources) { 60 | if (!d.isDisposed()) { 61 | d.dispose(); 62 | } 63 | } 64 | mBusDisposable.remove(key); 65 | } 66 | } 67 | } 68 | -------------------------------------------------------------------------------- /app/src/main/java/com/logex/headlinenews/base/RxBusObserver.java: -------------------------------------------------------------------------------- 1 | package com.logex.headlinenews.base; 2 | 3 | import io.reactivex.Observer; 4 | import io.reactivex.disposables.Disposable; 5 | 6 | /** 7 | * 创建人: liguangxi 8 | * 日期: 18-3-13 9 | * 邮箱: 956328710@qq.com 10 | * 版本: 1.0 11 | * 为RxBus使用的Observer, 主要提供next事件的try,catch 12 | */ 13 | public abstract class RxBusObserver implements Observer, Disposable { 14 | protected Disposable disposable; 15 | 16 | @Override 17 | public void onSubscribe(Disposable d) { 18 | this.disposable = d; 19 | } 20 | 21 | @Override 22 | public void onNext(T t) { 23 | try { 24 | onEvent(t); 25 | } catch (Exception e) { 26 | onError(e); 27 | } 28 | } 29 | 30 | @Override 31 | public void onComplete() { 32 | 33 | } 34 | 35 | @Override 36 | public void onError(Throwable e) { 37 | e.printStackTrace(); 38 | } 39 | 40 | @Override 41 | public final boolean isDisposed() { 42 | return disposable.isDisposed(); 43 | } 44 | 45 | @Override 46 | public final void dispose() { 47 | disposable.dispose(); 48 | } 49 | 50 | public abstract void onEvent(T t); 51 | } 52 | -------------------------------------------------------------------------------- /app/src/main/java/com/logex/headlinenews/base/RxSchedulers.kt: -------------------------------------------------------------------------------- 1 | package com.logex.headlinenews.base 2 | 3 | import io.reactivex.FlowableTransformer 4 | import io.reactivex.ObservableTransformer 5 | import io.reactivex.android.schedulers.AndroidSchedulers 6 | import io.reactivex.schedulers.Schedulers 7 | 8 | 9 | /** 10 | * 创建人: liguangxi 11 | * 日期: 2018/2/23 12 | * 邮箱: 956328710@qq.com 13 | * 版本: 1.0 14 | * rxjava控制 15 | */ 16 | class RxSchedulers { 17 | 18 | companion object { 19 | 20 | /** 21 | * 线程切换 22 | */ 23 | fun io_main(): ObservableTransformer = 24 | ObservableTransformer { 25 | it.subscribeOn(Schedulers.io()) 26 | .observeOn(AndroidSchedulers.mainThread()) 27 | } 28 | 29 | fun io_main2(): FlowableTransformer = 30 | FlowableTransformer { 31 | it.subscribeOn(Schedulers.io()) 32 | .observeOn(AndroidSchedulers.mainThread()) 33 | } 34 | 35 | fun computation_main(): ObservableTransformer = 36 | ObservableTransformer { 37 | it.subscribeOn(Schedulers.computation()) 38 | .observeOn(AndroidSchedulers.mainThread()) 39 | } 40 | } 41 | } -------------------------------------------------------------------------------- /app/src/main/java/com/logex/headlinenews/cache/RxCache.kt: -------------------------------------------------------------------------------- 1 | package com.logex.headlinenews.cache 2 | 3 | import com.logex.headlinenews.base.RxSchedulers 4 | import com.logex.headlinenews.model.HttpResult 5 | import com.logex.utils.GsonUtil 6 | import com.logex.utils.LogUtil 7 | import io.reactivex.Observable 8 | import java.lang.reflect.Type 9 | 10 | /** 11 | * Created by liguangxi on 17-5-23. 12 | * Rx缓存(缓存机制,先加载磁盘再请求网络刷新数据保存在磁盘) 13 | */ 14 | class RxCache { 15 | 16 | companion object { 17 | 18 | fun load(key: String, type: Type, fromNetwork: Observable>?): Observable> = 19 | Observable.concat(loadFromDisk(key, type), fromNetwork?.compose(RxSchedulers.io_main())) 20 | 21 | private fun loadFromDisk(key: String, type: Type): Observable> = 22 | Observable.create> { e -> 23 | val cache = CacheManager.getInstance().getCache(key) 24 | val t = jsonToObj(cache, type) 25 | if (e.isDisposed) return@create 26 | if (t != null) { 27 | t.isCache = true 28 | e.onNext(t) 29 | } 30 | e.onComplete() 31 | }.compose(RxSchedulers.io_main()) 32 | 33 | private fun jsonToObj(json: String?, type: Type): HttpResult? { 34 | LogUtil.i("缓存转对象>>>>>>>$json") 35 | try { 36 | return GsonUtil.getInstance().fromJson>(json, type) 37 | } catch (e: Exception) { 38 | e.printStackTrace() 39 | } 40 | return null 41 | } 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /app/src/main/java/com/logex/headlinenews/http/HttpFactory.kt: -------------------------------------------------------------------------------- 1 | package com.logex.headlinenews.http 2 | 3 | import com.logex.headlinenews.NewsConstant 4 | import okhttp3.OkHttpClient 5 | import retrofit2.Retrofit 6 | import retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory 7 | import retrofit2.converter.gson.GsonConverterFactory 8 | import java.util.concurrent.TimeUnit 9 | 10 | /** 11 | * 创建人: liguangxi 12 | * 日期: 2018/2/23 13 | * 邮箱: 956328710@qq.com 14 | * 版本: 1.0 15 | * http请求工厂 16 | */ 17 | class HttpFactory { 18 | 19 | companion object { 20 | private var retrofit: Retrofit? = null 21 | private var httpApi: HttpApi? = null 22 | private val client = OkHttpClient.Builder() 23 | .addInterceptor(HttpInterceptor()) 24 | .readTimeout(20, TimeUnit.SECONDS) 25 | .connectTimeout(20, TimeUnit.SECONDS) 26 | .writeTimeout(20, TimeUnit.SECONDS) 27 | .build() 28 | 29 | fun create(): HttpApi? = synchronized(HttpFactory::class.java) { 30 | if (retrofit == null) { 31 | retrofit = Retrofit.Builder() 32 | .baseUrl(NewsConstant.BASE_URL) 33 | .addConverterFactory(GsonConverterFactory.create()) 34 | .addCallAdapterFactory(RxJava2CallAdapterFactory.create()) 35 | .client(client) 36 | .build() 37 | 38 | httpApi = retrofit?.create(HttpApi::class.java) 39 | } 40 | return httpApi 41 | } 42 | } 43 | } -------------------------------------------------------------------------------- /app/src/main/java/com/logex/headlinenews/http/HttpInterceptor.kt: -------------------------------------------------------------------------------- 1 | package com.logex.headlinenews.http 2 | 3 | import okhttp3.Interceptor 4 | import okhttp3.Response 5 | 6 | 7 | /** 8 | * 创建人: liguangxi 9 | * 日期: 2018/2/23 10 | * 邮箱: 956328710@qq.com 11 | * 版本: 1.0 12 | * 拦截请求封装公共参数 13 | */ 14 | class HttpInterceptor : Interceptor { 15 | 16 | override fun intercept(chain: Interceptor.Chain): Response { 17 | val oldRequest = chain.request() 18 | 19 | // 添加新的参数 20 | val authorizedUrlBuilder = oldRequest.url() 21 | .newBuilder() 22 | .scheme(oldRequest.url().scheme()) 23 | .host(oldRequest.url().host()) 24 | .addQueryParameter("device_id", "48656086608") 25 | .addQueryParameter("iid", "26838363774") 26 | .addQueryParameter("version_code", "617") 27 | .addQueryParameter("version_name", "6.1.7") 28 | .addQueryParameter("device_platform", "android") 29 | .addQueryParameter("manifest_version_code", "617") 30 | .addQueryParameter("update_version_code", "6170") 31 | 32 | // 新的请求 33 | val newRequest = oldRequest.newBuilder() 34 | .addHeader("User-Agent", "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.186 Safari/537.36") 35 | .addHeader("Cache-Control", "max-age=0") 36 | .addHeader("Upgrade-Insecure-Requests", "1") 37 | .addHeader("Cookie", "_ga=GA1.2.1825124681.1519540561; qh[360]=1") 38 | .method(oldRequest.method(), oldRequest.body()) 39 | .url(authorizedUrlBuilder.build()) 40 | .build() 41 | 42 | return chain.proceed(newRequest) 43 | } 44 | } -------------------------------------------------------------------------------- /app/src/main/java/com/logex/headlinenews/model/DynamicEntity.kt: -------------------------------------------------------------------------------- 1 | package com.logex.headlinenews.model 2 | 3 | /** 4 | * 创建人: liguangxi 5 | * 日期: 2018/8/2 6 | * 邮箱 956328710@qq.com 7 | * 版本 1.0 8 | * 动态实体 9 | */ 10 | data class DynamicEntity( 11 | val has_more: Boolean?, 12 | val data: ArrayList? 13 | ) { 14 | 15 | data class Content( 16 | val comment_visible_count: Int, 17 | val comment_type: Int, 18 | val open_url: String?, 19 | val share_url: String?, 20 | val comment_count: Int, 21 | val content: String?, 22 | val user: User? 23 | ) { 24 | 25 | data class User( 26 | val verified_reason: String?, 27 | val is_blocking: Int, 28 | val schema: String?, 29 | val avatar_url: String?, 30 | val user_id: String?, 31 | val screen_name: String?, 32 | val is_friend: Int, 33 | val is_blocked: Int, 34 | val user_verified: Boolean, 35 | val description: String? 36 | ) 37 | } 38 | } -------------------------------------------------------------------------------- /app/src/main/java/com/logex/headlinenews/model/HomeNewsSubscribed.kt: -------------------------------------------------------------------------------- 1 | package com.logex.headlinenews.model 2 | 3 | /** 4 | * 创建人: liguangxi 5 | * 日期: 2018/2/23 6 | * 邮箱: 956328710@qq.com 7 | * 版本: 1.0 8 | * 首页我的频道 9 | */ 10 | data class HomeNewsSubscribed( 11 | val version: String?, 12 | val data: ArrayList? 13 | ) -------------------------------------------------------------------------------- /app/src/main/java/com/logex/headlinenews/model/HomeSearchSuggest.kt: -------------------------------------------------------------------------------- 1 | package com.logex.headlinenews.model 2 | 3 | /** 4 | * 创建人: liguangxi 5 | * 日期: 2018/2/23 6 | * 邮箱: 956328710@qq.com 7 | * 版本: 1.0 8 | * 首页搜索建议实体 9 | */ 10 | data class HomeSearchSuggest( 11 | val call_per_refresh: Int, 12 | val homepage_search_suggest: String, 13 | val suggest_words: List 14 | ) { 15 | 16 | data class SuggestWord( 17 | val id: Long, 18 | val word: String 19 | ) 20 | } -------------------------------------------------------------------------------- /app/src/main/java/com/logex/headlinenews/model/HttpResult.kt: -------------------------------------------------------------------------------- 1 | package com.logex.headlinenews.model 2 | 3 | /** 4 | * 创建人: liguangxi 5 | * 日期: 2018/2/23 6 | * 邮箱: 956328710@qq.com 7 | * 版本: 1.0 8 | * 通用请求结果模型 9 | */ 10 | data class HttpResult( 11 | var message: String?, 12 | var success: Boolean, 13 | var data: T?, 14 | var isCache: Boolean, 15 | val tips: Tips? 16 | ) { 17 | 18 | data class Tips( 19 | val type: String, 20 | val display_duration: Int, 21 | val display_info: String, 22 | val display_template: String, 23 | val open_url: String, 24 | val web_url: String, 25 | val download_url: String, 26 | val app_name: String, 27 | val package_name: String 28 | ) 29 | 30 | fun isSuccess(): Boolean = "success" == message || success 31 | 32 | } -------------------------------------------------------------------------------- /app/src/main/java/com/logex/headlinenews/model/NewsDetailEntity.kt: -------------------------------------------------------------------------------- 1 | package com.logex.headlinenews.model 2 | 3 | /** 4 | * 创建人: liguangxi 5 | * 日期: 2018/3/2 6 | * 邮箱: 956328710@qq.com 7 | * 版本: 1.0 8 | * 新闻详情 9 | */ 10 | data class NewsDetailEntity( 11 | val detail_source: String?, 12 | val media_user: MediaUser?, 13 | val publish_time: Long?, 14 | val title: String?, 15 | val url: String?, 16 | val is_original: Boolean?, 17 | val is_pgc_article: Boolean?, 18 | val content: String?, 19 | val source: String?, 20 | val video_play_count: Int, 21 | val comment_count: Int?, 22 | val creator_uid: Long? 23 | ) { 24 | 25 | data class MediaUser( 26 | val no_display_pgc_icon: Boolean, 27 | val avatar_url: String?, 28 | val id: String?, 29 | val screen_name: String?) 30 | } -------------------------------------------------------------------------------- /app/src/main/java/com/logex/headlinenews/model/SubscribedEntity.kt: -------------------------------------------------------------------------------- 1 | package com.logex.headlinenews.model 2 | 3 | import android.os.Parcelable 4 | import kotlinx.android.parcel.Parcelize 5 | 6 | /** 7 | * 创建人: liguangxi 8 | * 日期: 2018/8/1 9 | * 邮箱 956328710@qq.com 10 | * 版本 1.0 11 | * 频道实体 12 | */ 13 | @Parcelize 14 | data class SubscribedEntity( 15 | val category: String?, 16 | val web_url: String?, 17 | val flags: Int?, 18 | val name: String?, 19 | val tip_new: Int?, 20 | val default_add: Int?, 21 | val concern_id: String?, 22 | val type: Int?, 23 | val icon_url: String? 24 | ) : Parcelable -------------------------------------------------------------------------------- /app/src/main/java/com/logex/headlinenews/model/SubscribedRecommend.kt: -------------------------------------------------------------------------------- 1 | package com.logex.headlinenews.model 2 | 3 | /** 4 | * 创建人: liguangxi 5 | * 日期: 2018/8/1 6 | * 邮箱 956328710@qq.com 7 | * 版本 1.0 8 | * 首页频道推荐 9 | */ 10 | data class SubscribedRecommend( 11 | val version: String?, 12 | val data: ArrayList? 13 | ) -------------------------------------------------------------------------------- /app/src/main/java/com/logex/headlinenews/model/VideoCategoryEntity.kt: -------------------------------------------------------------------------------- 1 | package com.logex.headlinenews.model 2 | 3 | import android.os.Parcel 4 | import android.os.Parcelable 5 | import kotlinx.android.parcel.Parcelize 6 | 7 | /** 8 | * 创建人: liguangxi 9 | * 日期: 2018/2/23 10 | * 邮箱: 956328710@qq.com 11 | * 版本: 1.0 12 | * 视频分类实体 13 | */ 14 | @Parcelize 15 | data class VideoCategoryEntity( 16 | val category: String?, 17 | val category_type: Int?, 18 | val flags: Int?, 19 | val icon_url: String?, 20 | val name: String?, 21 | val tip_new: Int?, 22 | val type: Int?, 23 | val web_url: String? 24 | ) : Parcelable -------------------------------------------------------------------------------- /app/src/main/java/com/logex/headlinenews/model/VideoPathEntity.kt: -------------------------------------------------------------------------------- 1 | package com.logex.headlinenews.model 2 | 3 | /** 4 | * 创建人: liguangxi 5 | * 时间: 18-8-20 6 | * 邮箱: 956328710@qq.com 7 | * 版本: 1.0 8 | * 视频解析内容 9 | */ 10 | data class VideoPathEntity( 11 | val status: Int, 12 | val user_id: String, 13 | val video_id: String, 14 | val validate: String, 15 | val enable_ssl: Boolean, 16 | val poster_url: String, 17 | val video_duration: Double, 18 | val media_type: String, 19 | val auto_definition: String, 20 | val video_list: VideoList?, 21 | val dynamic_video: Any? 22 | ) { 23 | 24 | data class VideoList( 25 | val video_1: Video1? 26 | ) 27 | 28 | data class Video1( 29 | val definition: String, 30 | val vtype: String, 31 | val vwidth: Int, 32 | val vheight: Int, 33 | val bitrate: Int, 34 | val size: Int, 35 | val quality: String, 36 | val codec_type: String, 37 | val logo_type: String, 38 | val encrypt: Boolean, 39 | val file_hash: String, 40 | val main_url: String?, 41 | val backup_url_1: String, 42 | val user_video_proxy: Int, 43 | val socket_buffer: Int, 44 | val preload_size: Int, 45 | val preload_interval: Int, 46 | val preload_min_step: Int, 47 | val preload_max_step: Int, 48 | val spade_a: String 49 | ) 50 | } -------------------------------------------------------------------------------- /app/src/main/java/com/logex/headlinenews/model/event/StartBrotherEvent.java: -------------------------------------------------------------------------------- 1 | package com.logex.headlinenews.model.event; 2 | 3 | import com.logex.fragmentation.BaseFragment; 4 | 5 | /** 6 | * Created by liguangxi on 17-2-1. 7 | * 打开兄弟fragment 8 | */ 9 | public class StartBrotherEvent { 10 | public BaseFragment targetFragment; 11 | public int launchMode = -1; 12 | public int requestCode = -1; 13 | 14 | public StartBrotherEvent(BaseFragment targetFragment) { 15 | this.targetFragment = targetFragment; 16 | } 17 | 18 | public StartBrotherEvent(BaseFragment targetFragment, int launchMode) { 19 | this.targetFragment = targetFragment; 20 | this.launchMode = launchMode; 21 | } 22 | 23 | public StartBrotherEvent(int requestCode, BaseFragment targetFragment) { 24 | this.requestCode = requestCode; 25 | this.targetFragment = targetFragment; 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /app/src/main/java/com/logex/headlinenews/ui/MainActivity.kt: -------------------------------------------------------------------------------- 1 | package com.logex.headlinenews.ui 2 | 3 | import android.os.Bundle 4 | import com.logex.fragmentation.BaseActivity 5 | import com.logex.fragmentation.anim.DefaultHorizontalAnimator 6 | import com.logex.fragmentation.anim.FragmentAnimator 7 | import com.logex.headlinenews.R 8 | import com.logex.headlinenews.ui.main.MainFragment 9 | import com.logex.utils.AutoUtils 10 | import com.logex.utils.StatusBarUtil 11 | 12 | /** 13 | * 创建人: liguangxi 14 | * 日期: 2018/2/22 15 | * 邮箱: 956328710@qq.com 16 | * 版本: 1.0 17 | * MainActivity 18 | */ 19 | class MainActivity : BaseActivity() { 20 | 21 | override fun getLayoutId(): Int = R.layout.activity_main 22 | 23 | override fun initCreate(savedInstanceState: Bundle?) { 24 | AutoUtils.auto(this) 25 | StatusBarUtil.setTranslucentStatusBar(this) 26 | isUseDarkMode = StatusBarUtil.setStatusBarDarkMode(this,false) 27 | 28 | if (savedInstanceState == null) { 29 | // 加载入口fragment(主页面) 30 | loadRootFragment(R.id.fl_content, MainFragment.newInstance()) 31 | } 32 | } 33 | 34 | override fun onBackPressedSupport() { 35 | // 对于 4个类别的主Fragment内的回退back逻辑,已经在其onBackPressedSupport里各自处理了 36 | super.onBackPressedSupport() 37 | } 38 | 39 | public override fun onCreateFragmentAnimator(): FragmentAnimator { 40 | // 设置横向(和安卓4.x动画相同) 41 | return DefaultHorizontalAnimator() 42 | } 43 | } -------------------------------------------------------------------------------- /app/src/main/java/com/logex/headlinenews/ui/SplashActivity.kt: -------------------------------------------------------------------------------- 1 | package com.logex.headlinenews.ui 2 | 3 | import android.app.Activity 4 | import android.content.Intent 5 | import android.os.Bundle 6 | import android.os.Handler 7 | import com.logex.headlinenews.R 8 | 9 | /** 10 | * 创建人: liguangxi 11 | * 日期: 2018/2/22 12 | * 邮箱: 956328710@qq.com 13 | * 版本: 1.0 14 | * 启动页 15 | */ 16 | class SplashActivity : Activity() { 17 | private val handler = Handler() 18 | 19 | public override fun onCreate(savedInstanceState: Bundle?) { 20 | super.onCreate(savedInstanceState) 21 | setContentView(R.layout.activity_splash) 22 | 23 | handler.postDelayed({ 24 | // 打开主页面 25 | startActivity(Intent(this, MainActivity::class.java)) 26 | finish() 27 | }, 1500) 28 | } 29 | 30 | override fun onDestroy() { 31 | super.onDestroy() 32 | handler.removeCallbacksAndMessages(null) 33 | } 34 | 35 | override fun onBackPressed() { 36 | // 不重写该方法 37 | } 38 | } -------------------------------------------------------------------------------- /app/src/main/java/com/logex/headlinenews/ui/home/MineFragment.kt: -------------------------------------------------------------------------------- 1 | package com.logex.headlinenews.ui.home 2 | 3 | import android.os.Build 4 | import android.os.Bundle 5 | import android.view.View 6 | import android.widget.LinearLayout 7 | import com.logex.fragmentation.BaseFragment 8 | import com.logex.headlinenews.R 9 | import com.logex.headlinenews.base.RxBus 10 | import com.logex.headlinenews.model.event.StartBrotherEvent 11 | import com.logex.headlinenews.ui.persion.MyFollowFragment 12 | import com.logex.utils.StatusBarUtil 13 | import kotlinx.android.synthetic.main.fragment_mine.* 14 | 15 | /** 16 | * 创建人: liguangxi 17 | * 日期: 2018/2/22 18 | * 邮箱: 956328710@qq.com 19 | * 版本: 1.0 20 | * 我的页面 21 | */ 22 | class MineFragment : BaseFragment(), View.OnClickListener { 23 | 24 | companion object { 25 | 26 | fun newInstance(): MineFragment { 27 | val args = Bundle() 28 | val fragment = MineFragment() 29 | fragment.arguments = args 30 | return fragment 31 | } 32 | } 33 | 34 | override fun getLayoutId(): Int = R.layout.fragment_mine 35 | 36 | override fun viewCreate(savedInstanceState: Bundle?) { 37 | // 设置间距 38 | val statusBarHeight = StatusBarUtil.getStatusBarHeight(context) 39 | val llMineTopLP = ll_mine_top.layoutParams as LinearLayout.LayoutParams 40 | val flMineLoginLP = fl_mine_login.layoutParams as LinearLayout.LayoutParams 41 | if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { 42 | llMineTopLP.height = llMineTopLP.height + statusBarHeight 43 | flMineLoginLP.topMargin = flMineLoginLP.topMargin + statusBarHeight 44 | } 45 | 46 | ll_my_follow.setOnClickListener(this) 47 | ll_my_history.setOnClickListener(this) 48 | } 49 | 50 | override fun onClick(v: View) { 51 | when (v.id) { 52 | // 打开我的关注页面 53 | R.id.ll_my_follow -> RxBus.getDefault().post(StartBrotherEvent(MyFollowFragment())) 54 | } 55 | } 56 | } -------------------------------------------------------------------------------- /app/src/main/java/com/logex/headlinenews/ui/persion/MyFollowFragment.kt: -------------------------------------------------------------------------------- 1 | package com.logex.headlinenews.ui.persion 2 | 3 | import android.content.Context 4 | import android.os.Bundle 5 | import com.logex.adapter.recyclerview.CommonAdapter 6 | import com.logex.adapter.recyclerview.base.ViewHolder 7 | import com.logex.adapter.recyclerview.wrapper.LoadMoreWrapper 8 | import com.logex.fragmentation.BaseFragment 9 | import com.logex.headlinenews.R 10 | 11 | /** 12 | * 创建人: liguangxi 13 | * 日期: 2018/8/2 14 | * 邮箱 956328710@qq.com 15 | * 版本 1.0 16 | * 我的关注页面 17 | */ 18 | class MyFollowFragment : BaseFragment() { 19 | private val list = arrayListOf() 20 | 21 | private var mLoadMoreWrapper: LoadMoreWrapper? = null 22 | 23 | override fun getLayoutId(): Int { 24 | return R.layout.fragment_my_follow 25 | } 26 | 27 | override fun viewCreate(savedInstanceState: Bundle?) { 28 | 29 | } 30 | 31 | override fun onEnterAnimationEnd(savedInstanceState: Bundle?) { 32 | super.onEnterAnimationEnd(savedInstanceState) 33 | } 34 | 35 | private fun loadData() { 36 | list.add("1") 37 | list.add("2") 38 | list.add("3") 39 | list.add("4") 40 | list.add("5") 41 | list.add("6") 42 | list.add("7") 43 | list.add("8") 44 | list.add("9") 45 | list.add("10") 46 | 47 | list.add("1") 48 | list.add("2") 49 | list.add("3") 50 | list.add("4") 51 | list.add("5") 52 | list.add("6") 53 | list.add("7") 54 | list.add("8") 55 | list.add("9") 56 | list.add("10") 57 | } 58 | 59 | private class TestAdapter(context: Context, list: ArrayList, layoutResId: Int) : CommonAdapter(context, list, layoutResId) { 60 | 61 | override fun convertView(viewHolder: ViewHolder, item: String?, position: Int) { 62 | 63 | viewHolder.setText(android.R.id.text1, item) 64 | } 65 | 66 | } 67 | } -------------------------------------------------------------------------------- /app/src/main/res/color/main_bottom_text_color.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/add_channel_titlbar_follow_normal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/app/src/main/res/drawable-hdpi/add_channel_titlbar_follow_normal.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/add_video.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/app/src/main/res/drawable-hdpi/add_video.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/add_video_press.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/app/src/main/res/drawable-hdpi/add_video_press.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/bg_mine_top.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/app/src/main/res/drawable-hdpi/bg_mine_top.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/btn_login_phone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/app/src/main/res/drawable-hdpi/btn_login_phone.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/btn_login_qq.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/app/src/main/res/drawable-hdpi/btn_login_qq.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/btn_login_wechat.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/app/src/main/res/drawable-hdpi/btn_login_wechat.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/comment_feed_ugc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/app/src/main/res/drawable-hdpi/comment_feed_ugc.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/download_ad_details.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/app/src/main/res/drawable-hdpi/download_ad_details.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/ic_home_news_search.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/app/src/main/res/drawable-hdpi/ic_home_news_search.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/app/src/main/res/drawable-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/ic_mine_collect_normal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/app/src/main/res/drawable-hdpi/ic_mine_collect_normal.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/ic_mine_collect_press.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/app/src/main/res/drawable-hdpi/ic_mine_collect_press.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/ic_mine_history_normal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/app/src/main/res/drawable-hdpi/ic_mine_history_normal.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/ic_mine_history_press.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/app/src/main/res/drawable-hdpi/ic_mine_history_press.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/ic_setting_night_style_normal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/app/src/main/res/drawable-hdpi/ic_setting_night_style_normal.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/ic_setting_night_style_press.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/app/src/main/res/drawable-hdpi/ic_setting_night_style_press.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/ic_splash_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/app/src/main/res/drawable-hdpi/ic_splash_logo.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/like_old_feed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/app/src/main/res/drawable-hdpi/like_old_feed.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/new_author_video_comment_count.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/app/src/main/res/drawable-hdpi/new_author_video_comment_count.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/new_author_video_comment_count_press.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/app/src/main/res/drawable-hdpi/new_author_video_comment_count_press.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/new_love_tabbar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/app/src/main/res/drawable-hdpi/new_love_tabbar.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/new_more.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/app/src/main/res/drawable-hdpi/new_more.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/new_more_press.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/app/src/main/res/drawable-hdpi/new_more_press.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/new_more_titlebar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/app/src/main/res/drawable-hdpi/new_more_titlebar.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/new_more_titlebar_press.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/app/src/main/res/drawable-hdpi/new_more_titlebar_press.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/share_black_tipic_details_normal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/app/src/main/res/drawable-hdpi/share_black_tipic_details_normal.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/share_black_tipic_details_pressed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/app/src/main/res/drawable-hdpi/share_black_tipic_details_pressed.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/share_feed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/app/src/main/res/drawable-hdpi/share_feed.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/tab_comment.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/app/src/main/res/drawable-hdpi/tab_comment.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/tab_index_normal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/app/src/main/res/drawable-hdpi/tab_index_normal.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/tab_index_selected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/app/src/main/res/drawable-hdpi/tab_index_selected.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/tab_micro_normal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/app/src/main/res/drawable-hdpi/tab_micro_normal.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/tab_micro_selected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/app/src/main/res/drawable-hdpi/tab_micro_selected.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/tab_mine_normal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/app/src/main/res/drawable-hdpi/tab_mine_normal.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/tab_mine_selected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/app/src/main/res/drawable-hdpi/tab_mine_selected.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/tab_nologin_normal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/app/src/main/res/drawable-hdpi/tab_nologin_normal.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/tab_nologin_selected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/app/src/main/res/drawable-hdpi/tab_nologin_selected.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/tab_video_normal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/app/src/main/res/drawable-hdpi/tab_video_normal.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/tab_video_selected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/app/src/main/res/drawable-hdpi/tab_video_selected.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/toutiaoquan_release_image.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/app/src/main/res/drawable-hdpi/toutiaoquan_release_image.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/toutiaoquan_release_text.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/app/src/main/res/drawable-hdpi/toutiaoquan_release_text.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/toutiaoquan_release_video.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/app/src/main/res/drawable-hdpi/toutiaoquan_release_video.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/video_search.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/app/src/main/res/drawable-hdpi/video_search.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/wei_friend.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/app/src/main/res/drawable-hdpi/wei_friend.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/add_channel_titlbar_follow_normal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/app/src/main/res/drawable-mdpi/add_channel_titlbar_follow_normal.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/add_video.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/app/src/main/res/drawable-mdpi/add_video.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/add_video_press.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/app/src/main/res/drawable-mdpi/add_video_press.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/bg_mine_top.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/app/src/main/res/drawable-mdpi/bg_mine_top.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/btn_login_phone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/app/src/main/res/drawable-mdpi/btn_login_phone.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/btn_login_qq.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/app/src/main/res/drawable-mdpi/btn_login_qq.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/btn_login_wechat.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/app/src/main/res/drawable-mdpi/btn_login_wechat.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/comment_feed_ugc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/app/src/main/res/drawable-mdpi/comment_feed_ugc.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/download_ad_details.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/app/src/main/res/drawable-mdpi/download_ad_details.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/ic_home_news_search.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/app/src/main/res/drawable-mdpi/ic_home_news_search.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/app/src/main/res/drawable-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/ic_mine_collect_normal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/app/src/main/res/drawable-mdpi/ic_mine_collect_normal.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/ic_mine_collect_press.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/app/src/main/res/drawable-mdpi/ic_mine_collect_press.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/ic_mine_history_normal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/app/src/main/res/drawable-mdpi/ic_mine_history_normal.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/ic_mine_history_press.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/app/src/main/res/drawable-mdpi/ic_mine_history_press.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/ic_setting_night_style_normal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/app/src/main/res/drawable-mdpi/ic_setting_night_style_normal.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/ic_setting_night_style_press.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/app/src/main/res/drawable-mdpi/ic_setting_night_style_press.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/ic_splash_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/app/src/main/res/drawable-mdpi/ic_splash_logo.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/like_old_feed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/app/src/main/res/drawable-mdpi/like_old_feed.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/new_author_video_comment_count.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/app/src/main/res/drawable-mdpi/new_author_video_comment_count.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/new_author_video_comment_count_press.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/app/src/main/res/drawable-mdpi/new_author_video_comment_count_press.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/new_love_tabbar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/app/src/main/res/drawable-mdpi/new_love_tabbar.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/new_more.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/app/src/main/res/drawable-mdpi/new_more.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/new_more_press.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/app/src/main/res/drawable-mdpi/new_more_press.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/new_more_titlebar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/app/src/main/res/drawable-mdpi/new_more_titlebar.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/new_more_titlebar_press.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/app/src/main/res/drawable-mdpi/new_more_titlebar_press.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/share_black_tipic_details_normal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/app/src/main/res/drawable-mdpi/share_black_tipic_details_normal.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/share_black_tipic_details_pressed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/app/src/main/res/drawable-mdpi/share_black_tipic_details_pressed.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/share_feed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/app/src/main/res/drawable-mdpi/share_feed.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/tab_comment.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/app/src/main/res/drawable-mdpi/tab_comment.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/tab_index_normal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/app/src/main/res/drawable-mdpi/tab_index_normal.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/tab_index_selected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/app/src/main/res/drawable-mdpi/tab_index_selected.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/tab_micro_normal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/app/src/main/res/drawable-mdpi/tab_micro_normal.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/tab_micro_selected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/app/src/main/res/drawable-mdpi/tab_micro_selected.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/tab_mine_normal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/app/src/main/res/drawable-mdpi/tab_mine_normal.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/tab_mine_selected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/app/src/main/res/drawable-mdpi/tab_mine_selected.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/tab_nologin_normal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/app/src/main/res/drawable-mdpi/tab_nologin_normal.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/tab_nologin_selected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/app/src/main/res/drawable-mdpi/tab_nologin_selected.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/tab_video_normal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/app/src/main/res/drawable-mdpi/tab_video_normal.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/tab_video_selected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/app/src/main/res/drawable-mdpi/tab_video_selected.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/toutiaoquan_release_image.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/app/src/main/res/drawable-mdpi/toutiaoquan_release_image.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/toutiaoquan_release_text.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/app/src/main/res/drawable-mdpi/toutiaoquan_release_text.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/toutiaoquan_release_video.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/app/src/main/res/drawable-mdpi/toutiaoquan_release_video.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/video_search.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/app/src/main/res/drawable-mdpi/video_search.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/wei_friend.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/app/src/main/res/drawable-mdpi/wei_friend.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/add_channel_titlbar_follow_normal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/app/src/main/res/drawable-xhdpi/add_channel_titlbar_follow_normal.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/add_video.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/app/src/main/res/drawable-xhdpi/add_video.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/add_video_press.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/app/src/main/res/drawable-xhdpi/add_video_press.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/bg_mine_top.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/app/src/main/res/drawable-xhdpi/bg_mine_top.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/btn_login_phone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/app/src/main/res/drawable-xhdpi/btn_login_phone.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/btn_login_qq.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/app/src/main/res/drawable-xhdpi/btn_login_qq.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/btn_login_wechat.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/app/src/main/res/drawable-xhdpi/btn_login_wechat.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/comment_feed_ugc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/app/src/main/res/drawable-xhdpi/comment_feed_ugc.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/comment_like_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/app/src/main/res/drawable-xhdpi/comment_like_icon.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/comment_like_icon_press.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/app/src/main/res/drawable-xhdpi/comment_like_icon_press.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/download_ad_details.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/app/src/main/res/drawable-xhdpi/download_ad_details.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_home_news_search.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/app/src/main/res/drawable-xhdpi/ic_home_news_search.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_home_top_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/app/src/main/res/drawable-xhdpi/ic_home_top_logo.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/app/src/main/res/drawable-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_mine_collect_normal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/app/src/main/res/drawable-xhdpi/ic_mine_collect_normal.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_mine_collect_press.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/app/src/main/res/drawable-xhdpi/ic_mine_collect_press.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_mine_history_normal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/app/src/main/res/drawable-xhdpi/ic_mine_history_normal.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_mine_history_press.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/app/src/main/res/drawable-xhdpi/ic_mine_history_press.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_setting_night_style_normal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/app/src/main/res/drawable-xhdpi/ic_setting_night_style_normal.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_setting_night_style_press.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/app/src/main/res/drawable-xhdpi/ic_setting_night_style_press.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_splash_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/app/src/main/res/drawable-xhdpi/ic_splash_logo.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/like_old_feed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/app/src/main/res/drawable-xhdpi/like_old_feed.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/new_author_video_comment_count.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/app/src/main/res/drawable-xhdpi/new_author_video_comment_count.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/new_author_video_comment_count_press.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/app/src/main/res/drawable-xhdpi/new_author_video_comment_count_press.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/new_love_tabbar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/app/src/main/res/drawable-xhdpi/new_love_tabbar.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/new_more.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/app/src/main/res/drawable-xhdpi/new_more.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/new_more_press.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/app/src/main/res/drawable-xhdpi/new_more_press.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/new_more_titlebar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/app/src/main/res/drawable-xhdpi/new_more_titlebar.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/new_more_titlebar_press.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/app/src/main/res/drawable-xhdpi/new_more_titlebar_press.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/replay_press.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/app/src/main/res/drawable-xhdpi/replay_press.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/replay_video.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/app/src/main/res/drawable-xhdpi/replay_video.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/share_black_tipic_details_normal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/app/src/main/res/drawable-xhdpi/share_black_tipic_details_normal.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/share_black_tipic_details_pressed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/app/src/main/res/drawable-xhdpi/share_black_tipic_details_pressed.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/share_feed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/app/src/main/res/drawable-xhdpi/share_feed.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/share_press.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/app/src/main/res/drawable-xhdpi/share_press.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/tab_comment.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/app/src/main/res/drawable-xhdpi/tab_comment.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/tab_index_normal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/app/src/main/res/drawable-xhdpi/tab_index_normal.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/tab_index_selected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/app/src/main/res/drawable-xhdpi/tab_index_selected.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/tab_micro_normal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/app/src/main/res/drawable-xhdpi/tab_micro_normal.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/tab_micro_selected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/app/src/main/res/drawable-xhdpi/tab_micro_selected.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/tab_mine_normal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/app/src/main/res/drawable-xhdpi/tab_mine_normal.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/tab_mine_selected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/app/src/main/res/drawable-xhdpi/tab_mine_selected.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/tab_nologin_normal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/app/src/main/res/drawable-xhdpi/tab_nologin_normal.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/tab_nologin_selected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/app/src/main/res/drawable-xhdpi/tab_nologin_selected.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/tab_video_normal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/app/src/main/res/drawable-xhdpi/tab_video_normal.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/tab_video_selected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/app/src/main/res/drawable-xhdpi/tab_video_selected.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/toutiaoquan_release_image.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/app/src/main/res/drawable-xhdpi/toutiaoquan_release_image.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/toutiaoquan_release_text.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/app/src/main/res/drawable-xhdpi/toutiaoquan_release_text.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/toutiaoquan_release_video.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/app/src/main/res/drawable-xhdpi/toutiaoquan_release_video.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/video_search.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/app/src/main/res/drawable-xhdpi/video_search.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/video_share.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/app/src/main/res/drawable-xhdpi/video_share.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/wei_friend.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/app/src/main/res/drawable-xhdpi/wei_friend.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/add_channel_titlbar_follow_normal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/app/src/main/res/drawable-xxhdpi/add_channel_titlbar_follow_normal.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/add_video.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/app/src/main/res/drawable-xxhdpi/add_video.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/add_video_press.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/app/src/main/res/drawable-xxhdpi/add_video_press.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/bg_mine_top.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/app/src/main/res/drawable-xxhdpi/bg_mine_top.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/btn_login_phone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/app/src/main/res/drawable-xxhdpi/btn_login_phone.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/btn_login_qq.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/app/src/main/res/drawable-xxhdpi/btn_login_qq.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/btn_login_wechat.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/app/src/main/res/drawable-xxhdpi/btn_login_wechat.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/comment_feed_ugc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/app/src/main/res/drawable-xxhdpi/comment_feed_ugc.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/comment_like_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/app/src/main/res/drawable-xxhdpi/comment_like_icon.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/comment_like_icon_press.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/app/src/main/res/drawable-xxhdpi/comment_like_icon_press.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/download_ad_details.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/app/src/main/res/drawable-xxhdpi/download_ad_details.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_home_news_search.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/app/src/main/res/drawable-xxhdpi/ic_home_news_search.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_home_top_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/app/src/main/res/drawable-xxhdpi/ic_home_top_logo.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_mine_collect_normal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/app/src/main/res/drawable-xxhdpi/ic_mine_collect_normal.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_mine_collect_press.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/app/src/main/res/drawable-xxhdpi/ic_mine_collect_press.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_mine_history_normal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/app/src/main/res/drawable-xxhdpi/ic_mine_history_normal.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_mine_history_press.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/app/src/main/res/drawable-xxhdpi/ic_mine_history_press.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_setting_night_style_normal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/app/src/main/res/drawable-xxhdpi/ic_setting_night_style_normal.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_setting_night_style_press.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/app/src/main/res/drawable-xxhdpi/ic_setting_night_style_press.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_splash_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/app/src/main/res/drawable-xxhdpi/ic_splash_logo.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/like_old_feed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/app/src/main/res/drawable-xxhdpi/like_old_feed.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/list_item_place_photo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/app/src/main/res/drawable-xxhdpi/list_item_place_photo.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/new_author_video_comment_count.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/app/src/main/res/drawable-xxhdpi/new_author_video_comment_count.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/new_author_video_comment_count_press.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/app/src/main/res/drawable-xxhdpi/new_author_video_comment_count_press.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/new_love_tabbar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/app/src/main/res/drawable-xxhdpi/new_love_tabbar.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/new_more.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/app/src/main/res/drawable-xxhdpi/new_more.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/new_more_press.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/app/src/main/res/drawable-xxhdpi/new_more_press.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/new_more_titlebar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/app/src/main/res/drawable-xxhdpi/new_more_titlebar.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/new_more_titlebar_press.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/app/src/main/res/drawable-xxhdpi/new_more_titlebar_press.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/replay_press.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/app/src/main/res/drawable-xxhdpi/replay_press.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/replay_video.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/app/src/main/res/drawable-xxhdpi/replay_video.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/share_black_tipic_details_normal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/app/src/main/res/drawable-xxhdpi/share_black_tipic_details_normal.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/share_black_tipic_details_pressed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/app/src/main/res/drawable-xxhdpi/share_black_tipic_details_pressed.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/share_feed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/app/src/main/res/drawable-xxhdpi/share_feed.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/share_press.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/app/src/main/res/drawable-xxhdpi/share_press.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/tab_comment.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/app/src/main/res/drawable-xxhdpi/tab_comment.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/tab_index_normal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/app/src/main/res/drawable-xxhdpi/tab_index_normal.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/tab_index_selected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/app/src/main/res/drawable-xxhdpi/tab_index_selected.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/tab_micro_normal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/app/src/main/res/drawable-xxhdpi/tab_micro_normal.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/tab_micro_selected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/app/src/main/res/drawable-xxhdpi/tab_micro_selected.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/tab_mine_normal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/app/src/main/res/drawable-xxhdpi/tab_mine_normal.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/tab_mine_selected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/app/src/main/res/drawable-xxhdpi/tab_mine_selected.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/tab_nologin_normal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/app/src/main/res/drawable-xxhdpi/tab_nologin_normal.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/tab_nologin_selected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/app/src/main/res/drawable-xxhdpi/tab_nologin_selected.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/tab_video_normal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/app/src/main/res/drawable-xxhdpi/tab_video_normal.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/tab_video_selected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/app/src/main/res/drawable-xxhdpi/tab_video_selected.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/thr_shadow_video.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/app/src/main/res/drawable-xxhdpi/thr_shadow_video.9.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/toutiaoquan_release_image.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/app/src/main/res/drawable-xxhdpi/toutiaoquan_release_image.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/toutiaoquan_release_text.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/app/src/main/res/drawable-xxhdpi/toutiaoquan_release_text.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/toutiaoquan_release_video.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/app/src/main/res/drawable-xxhdpi/toutiaoquan_release_video.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/video_search.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/app/src/main/res/drawable-xxhdpi/video_search.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/video_share.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/app/src/main/res/drawable-xxhdpi/video_share.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/wei_friend.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/app/src/main/res/drawable-xxhdpi/wei_friend.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/add_channel_titlbar_follow.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/bg_home_top_search.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/bg_login_style_more.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/bg_new_list_image.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/bg_news_comment_reply_count.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/bg_news_detail_comment.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/bg_news_image_count.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/bg_news_list_ad_label.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 8 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/bg_video_list_duration.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/btn_add_video_selector.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/btn_new_more_selector.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/btn_video_comment_count_selector.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/btn_video_replay_selector.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/btn_video_share_selector.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/comment_like_selector.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/frame_news_label.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/mine_collect_selector.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/mine_history_selector.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/setting_night_style_selector.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/share_black_tipic_details_selector.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/tab_index_bg.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/tab_micro_bg.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/tab_mine_bg.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/tab_nologin_bg.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/tab_video_bg.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/title_bar_more_selector.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_main.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_splash.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 14 | 15 | -------------------------------------------------------------------------------- /app/src/main/res/layout/fragment_main.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 12 | 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /app/src/main/res/layout/fragment_my_follow.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /app/src/main/res/layout/fragment_news_list.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 12 | 13 | 18 | 19 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /app/src/main/res/layout/fragment_video.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 11 | 12 | 24 | 25 | 33 | 34 | 35 | 36 | 40 | 41 | 42 | 43 | -------------------------------------------------------------------------------- /app/src/main/res/layout/fragment_video_detail.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /app/src/main/res/layout/fragment_video_list.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /app/src/main/res/layout/layout_main_tab_view.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 12 | 13 | 20 | 21 | -------------------------------------------------------------------------------- /app/src/main/res/layout/recycler_item_news_picture_list.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 11 | 12 | 18 | 19 | 34 | 35 | 36 | 37 | -------------------------------------------------------------------------------- /app/src/main/res/values-zh-rCN/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 头条新闻 4 | 首页 5 | 我的 6 | 微头条 7 | 视频 8 | -------------------------------------------------------------------------------- /app/src/main/res/values/attrs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/values/colors.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | #505050 4 | @color/colorPrimary 5 | #cacaca 6 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/values/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | Headline News 3 | Home 4 | Mine 5 | Micro News 6 | Video 7 | 8 | -------------------------------------------------------------------------------- /app/src/main/res/values/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 7 | 8 | 9 | 12 | 13 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /art/device-2019-05-03-203837.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/art/device-2019-05-03-203837.png -------------------------------------------------------------------------------- /art/device-2019-05-03-203929.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/art/device-2019-05-03-203929.png -------------------------------------------------------------------------------- /art/device-2019-05-03-204006.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/art/device-2019-05-03-204006.png -------------------------------------------------------------------------------- /art/device-2019-05-03-204036.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/art/device-2019-05-03-204036.png -------------------------------------------------------------------------------- /build.gradle: -------------------------------------------------------------------------------- 1 | // Top-level build file where you can add configuration options common to all sub-projects/modules. 2 | 3 | buildscript { 4 | ext.kotlin_version = '1.2.30' 5 | repositories { 6 | google() 7 | jcenter() 8 | } 9 | dependencies { 10 | classpath 'com.android.tools.build:gradle:3.0.0' 11 | classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" 12 | } 13 | } 14 | 15 | allprojects { 16 | repositories { 17 | google() 18 | jcenter() 19 | } 20 | } 21 | 22 | task clean(type: Delete) { 23 | delete rootProject.buildDir 24 | } 25 | -------------------------------------------------------------------------------- /common/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | -------------------------------------------------------------------------------- /common/build.gradle: -------------------------------------------------------------------------------- 1 | apply plugin: 'com.android.library' 2 | 3 | android { 4 | compileSdkVersion 26 5 | buildToolsVersion "26.0.3" 6 | 7 | defaultConfig { 8 | minSdkVersion 15 9 | targetSdkVersion 23 10 | 11 | } 12 | buildTypes { 13 | release { 14 | minifyEnabled false 15 | proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt' 16 | } 17 | } 18 | } 19 | 20 | def supportLibVersion = "25.3.0" 21 | 22 | dependencies { 23 | // 基本项目使用到的库 24 | compile "com.android.support:appcompat-v7:${supportLibVersion}" 25 | compile "com.android.support:recyclerview-v7:${supportLibVersion}" 26 | compile "com.android.support:design:${supportLibVersion}" 27 | compile "com.android.support:cardview-v7:${supportLibVersion}" 28 | compile 'com.github.bumptech.glide:glide:3.7.0' 29 | // 网络请求库 30 | compile 'com.squareup.okhttp3:okhttp:3.2.0' 31 | compile 'com.squareup.retrofit2:retrofit:2.0.2' 32 | compile 'com.squareup.retrofit2:converter-gson:2.0.2' 33 | compile 'com.google.code.gson:gson:2.6.1' 34 | // RxJava和RxAndroid支持库 35 | compile 'io.reactivex.rxjava2:rxjava:2.0.8' 36 | compile 'io.reactivex.rxjava2:rxandroid:2.0.1' 37 | compile 'com.squareup.retrofit2:adapter-rxjava2:2.2.0' 38 | // rxbinding 39 | compile 'com.jakewharton.rxbinding2:rxbinding:2.0.0' 40 | compile 'com.jakewharton.rxbinding2:rxbinding-recyclerview-v7:2.0.0' 41 | } 42 | -------------------------------------------------------------------------------- /common/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /common/src/main/java/android/support/v4/app/FragmentTransactionBugFixHack.java: -------------------------------------------------------------------------------- 1 | package android.support.v4.app; 2 | 3 | import java.util.Collections; 4 | 5 | /** 6 | * http://stackoverflow.com/questions/23504790/android-multiple-fragment-transaction-ordering 7 | */ 8 | public class FragmentTransactionBugFixHack { 9 | 10 | public static void reorderIndices(FragmentManager fragmentManager) { 11 | if (!(fragmentManager instanceof FragmentManagerImpl)) 12 | return; 13 | try { 14 | FragmentManagerImpl fragmentManagerImpl = (FragmentManagerImpl) fragmentManager; 15 | if (fragmentManagerImpl.mAvailIndices != null && fragmentManagerImpl.mAvailIndices.size() > 1) { 16 | // System.out.println("排序前-->" + fragmentManagerImpl.mAvailIndices); 17 | Collections.sort(fragmentManagerImpl.mAvailIndices, Collections.reverseOrder()); 18 | // System.out.println("排序后-->" + fragmentManagerImpl.mAvailIndices); 19 | } 20 | } catch (Exception e) { 21 | e.printStackTrace(); 22 | } 23 | } 24 | 25 | public static boolean isStateSaved(FragmentManager fragmentManager) { 26 | if (!(fragmentManager instanceof FragmentManagerImpl)) 27 | return false; 28 | try { 29 | FragmentManagerImpl fragmentManagerImpl = (FragmentManagerImpl) fragmentManager; 30 | // 从5年前一直到当前的Support-25.0.1,该字段没有变化过 31 | return fragmentManagerImpl.mStateSaved; 32 | } catch (Exception e) { 33 | e.printStackTrace(); 34 | } 35 | return false; 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /common/src/main/java/com/logex/AppConfig.java: -------------------------------------------------------------------------------- 1 | package com.logex; 2 | 3 | /** 4 | * 创建人: Administrator 5 | * 日期: 2019/4/9 6 | * 邮箱: 15679158128@163.com 7 | * 版本: 1.0 8 | * app配置类 9 | */ 10 | public interface AppConfig { 11 | /** 12 | * 临时文件夹 13 | */ 14 | String TEMP_DIR = "Headline/temp"; 15 | /** 16 | * 图片存放文件夹 17 | */ 18 | String PICTURE_DIR = "Headline/picture"; 19 | } 20 | -------------------------------------------------------------------------------- /common/src/main/java/com/logex/adapter/abslistview/base/ItemViewDelegate.java: -------------------------------------------------------------------------------- 1 | package com.logex.adapter.abslistview.base; 2 | 3 | /** 4 | * 创建人: liguangxi 5 | * 日期: 2018/8/2 6 | * 邮箱 956328710@qq.com 7 | * 版本 1.0 8 | * ItemViewDelegate 9 | */ 10 | public interface ItemViewDelegate { 11 | 12 | int getItemViewLayoutId(); 13 | 14 | boolean isForViewType(T item, int position); 15 | 16 | void convert(ViewHolder holder, T t, int position); 17 | } 18 | -------------------------------------------------------------------------------- /common/src/main/java/com/logex/adapter/recyclerview/CommonAdapter.java: -------------------------------------------------------------------------------- 1 | package com.logex.adapter.recyclerview; 2 | 3 | import android.content.Context; 4 | import android.support.annotation.StringRes; 5 | 6 | import com.logex.adapter.recyclerview.base.ItemViewDelegate; 7 | import com.logex.adapter.recyclerview.base.ViewHolder; 8 | 9 | import java.util.List; 10 | 11 | /** 12 | * 创建人: liguangxi 13 | * 日期: 2018/8/2 14 | * 邮箱 956328710@qq.com 15 | * 版本 1.0 16 | * RecyclerView通用adapter 17 | */ 18 | public abstract class CommonAdapter extends MultiItemTypeAdapter { 19 | 20 | public CommonAdapter(final Context context, List data, int layoutId) { 21 | super(context, data, layoutId); 22 | 23 | addItemViewDelegate(new ItemViewDelegate() { 24 | @Override 25 | public int getItemViewLayoutId() { 26 | return mLayoutId; 27 | } 28 | 29 | @Override 30 | public boolean isForViewType(T item, int position) { 31 | return true; 32 | } 33 | 34 | @Override 35 | public void convert(ViewHolder holder, T t, int position) { 36 | convertView(holder, t, position); 37 | } 38 | }); 39 | } 40 | 41 | protected abstract void convertView(ViewHolder viewHolder, T item, int position); 42 | 43 | public String getString(@StringRes int string) { 44 | return mContext.getResources().getString(string); 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /common/src/main/java/com/logex/adapter/recyclerview/base/ItemViewDelegate.java: -------------------------------------------------------------------------------- 1 | package com.logex.adapter.recyclerview.base; 2 | 3 | /** 4 | * 创建人: liguangxi 5 | * 日期: 2018/8/2 6 | * 邮箱 956328710@qq.com 7 | * 版本 1.0 8 | * ItemViewDelegate 9 | */ 10 | public interface ItemViewDelegate { 11 | 12 | /** 13 | * 获取该条目布局id 14 | * 15 | * @return 布局id 16 | */ 17 | int getItemViewLayoutId(); 18 | 19 | /** 20 | * 约束条件 21 | * 22 | * @param item 条目数据 23 | * @param position 位置 24 | * @return true显示该条目 false不显示 25 | */ 26 | boolean isForViewType(T item, int position); 27 | 28 | void convert(ViewHolder holder, T t, int position); 29 | } 30 | -------------------------------------------------------------------------------- /common/src/main/java/com/logex/adapter/recyclerview/utils/WrapperUtils.java: -------------------------------------------------------------------------------- 1 | package com.logex.adapter.recyclerview.utils; 2 | 3 | import android.support.v7.widget.GridLayoutManager; 4 | import android.support.v7.widget.RecyclerView; 5 | import android.support.v7.widget.StaggeredGridLayoutManager; 6 | import android.view.ViewGroup; 7 | 8 | /** 9 | * 创建人: Administrator 10 | * 日期: 2018/9/14 11 | * 邮箱: 15679158128@163.com 12 | * 版本: 1.0 13 | * WrapperUtils 14 | */ 15 | public class WrapperUtils { 16 | 17 | public interface SpanSizeCallback { 18 | 19 | int getSpanSize(GridLayoutManager layoutManager, int position); 20 | } 21 | 22 | public static void onAttachedToRecyclerView(RecyclerView recyclerView, final SpanSizeCallback callback) { 23 | 24 | RecyclerView.LayoutManager layoutManager = recyclerView.getLayoutManager(); 25 | if (layoutManager instanceof GridLayoutManager) { 26 | final GridLayoutManager gridLayoutManager = (GridLayoutManager) layoutManager; 27 | 28 | gridLayoutManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() { 29 | @Override 30 | public int getSpanSize(int position) { 31 | return callback.getSpanSize(gridLayoutManager, position); 32 | } 33 | }); 34 | } 35 | } 36 | 37 | public static void setFullSpan(RecyclerView.ViewHolder holder) { 38 | ViewGroup.LayoutParams lp = holder.itemView.getLayoutParams(); 39 | 40 | if (lp != null && lp instanceof StaggeredGridLayoutManager.LayoutParams) { 41 | 42 | StaggeredGridLayoutManager.LayoutParams p = (StaggeredGridLayoutManager.LayoutParams) lp; 43 | 44 | p.setFullSpan(true); 45 | } 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /common/src/main/java/com/logex/fragmentation/ISupportFragment.java: -------------------------------------------------------------------------------- 1 | package com.logex.fragmentation; 2 | 3 | /** 4 | * Created by liguangxi on 16-12-18. 5 | * ISupportFragment 6 | */ 7 | interface ISupportFragment extends ISupport { 8 | 9 | /** 10 | * replace目标Fragment, 主要用于Fragment之间的replace 11 | * 12 | * @param toFragment 目标Fragment 13 | * @param addToBack 是否添加到回退栈 14 | */ 15 | void replaceFragment(BaseFragment toFragment, boolean addToBack); 16 | 17 | /** 18 | * @return 位于栈顶的子Fragment 19 | */ 20 | BaseFragment getTopChildFragment(); 21 | 22 | /** 23 | * @return 当前Fragment的前一个Fragment 24 | */ 25 | BaseFragment getPreFragment(); 26 | 27 | /** 28 | * @param fragmentClass 目标子Fragment的Class 29 | * @param 继承自SupportFragment的Fragment 30 | * @return 目标子Fragment 31 | */ 32 | T findChildFragment(Class fragmentClass); 33 | 34 | T findChildFragment(String fragmentTag); 35 | 36 | /** 37 | * 子栈内 出栈 38 | */ 39 | void popChild(); 40 | 41 | /** 42 | * 子栈内 出栈到目标Fragment 43 | * 44 | * @param targetFragmentClass 目标Fragment的Class 45 | * @param includeTargetFragment 是否包含目标Fragment 46 | */ 47 | void popToChild(Class targetFragmentClass, boolean includeTargetFragment); 48 | 49 | void popToChild(String targetFragmentTag, boolean includeTargetFragment); 50 | 51 | /** 52 | * 子栈内 出栈到目标Fragment,并在出栈后立即进行Fragment事务(可以防止出栈后,直接进行Fragment事务的异常) 53 | * 54 | * @param targetFragmentClass 目标Fragment的Class 55 | * @param includeTargetFragment 是否包含目标Fragment 56 | * @param afterPopTransactionRunnable 出栈后紧接着的Fragment事务 57 | */ 58 | void popToChild(Class targetFragmentClass, boolean includeTargetFragment, Runnable afterPopTransactionRunnable); 59 | 60 | void popToChild(String targetFragmentTag, boolean includeTargetFragment, Runnable afterPopTransactionRunnable); 61 | } 62 | -------------------------------------------------------------------------------- /common/src/main/java/com/logex/fragmentation/anim/DefaultHorizontalAnimator.java: -------------------------------------------------------------------------------- 1 | package com.logex.fragmentation.anim; 2 | 3 | import com.logex.common.R; 4 | 5 | 6 | /** 7 | * Created by liguangxi on 16-12-18. 8 | * 默认水平动画 9 | */ 10 | public class DefaultHorizontalAnimator extends FragmentAnimator { 11 | 12 | public DefaultHorizontalAnimator() { 13 | enter = R.anim.h_fragment_enter; 14 | exit = R.anim.h_fragment_exit; 15 | popEnter = R.anim.h_fragment_pop_enter; 16 | popExit = R.anim.h_fragment_pop_exit; 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /common/src/main/java/com/logex/fragmentation/anim/DefaultNoAnimator.java: -------------------------------------------------------------------------------- 1 | package com.logex.fragmentation.anim; 2 | 3 | /** 4 | * Created by liguangxi on 16-12-18. 5 | * 默认没有动画 6 | */ 7 | public class DefaultNoAnimator extends FragmentAnimator { 8 | 9 | public DefaultNoAnimator() { 10 | enter = 0; 11 | exit = 0; 12 | popEnter = 0; 13 | popExit = 0; 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /common/src/main/java/com/logex/fragmentation/anim/DefaultVerticalAnimator.java: -------------------------------------------------------------------------------- 1 | package com.logex.fragmentation.anim; 2 | 3 | import com.logex.common.R; 4 | 5 | /** 6 | * Created by liguangxi on 16-12-18. 7 | * 默认垂直动画(5.0系统动画) 8 | */ 9 | public class DefaultVerticalAnimator extends FragmentAnimator { 10 | 11 | public DefaultVerticalAnimator() { 12 | enter = R.anim.v_fragment_enter; 13 | exit = R.anim.v_fragment_exit; 14 | popEnter = R.anim.v_fragment_pop_enter; 15 | popExit = R.anim.v_fragment_pop_exit; 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /common/src/main/java/com/logex/fragmentation/debug/DebugFragmentRecord.java: -------------------------------------------------------------------------------- 1 | package com.logex.fragmentation.debug; 2 | 3 | import java.util.List; 4 | 5 | /** 6 | * 为了调试时 查看栈视图 7 | * Created by liguangxi on 16-12-18. 8 | */ 9 | public class DebugFragmentRecord { 10 | public String fragmentName; 11 | public List childFragmentRecord; 12 | 13 | public DebugFragmentRecord(String fragmentName, List childFragmentRecord) { 14 | this.fragmentName = fragmentName; 15 | this.childFragmentRecord = childFragmentRecord; 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /common/src/main/java/com/logex/fragmentation/helper/ExceptionHandler.java: -------------------------------------------------------------------------------- 1 | package com.logex.fragmentation.helper; 2 | 3 | /** 4 | * Created by YoKey on 17/2/5. 5 | * ExceptionHandler 6 | */ 7 | public interface ExceptionHandler { 8 | void onException(Exception e); 9 | } 10 | -------------------------------------------------------------------------------- /common/src/main/java/com/logex/fragmentation/helper/internal/InstanceException.java: -------------------------------------------------------------------------------- 1 | package com.logex.fragmentation.helper.internal; 2 | 3 | /** 4 | * An {@link RuntimeException} thrown in cases something went wrong inside Tower. 5 | *

6 | * Created by YoKey on 17/2/5. 7 | */ 8 | public class InstanceException extends RuntimeException { 9 | public InstanceException(String detailMessage) { 10 | super(detailMessage); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /common/src/main/java/com/logex/fragmentation/helper/internal/OnFragmentDestroyViewListener.java: -------------------------------------------------------------------------------- 1 | package com.logex.fragmentation.helper.internal; 2 | 3 | /** 4 | * Hide 5 | * 在5.0之前的设备, popTo(Class fragmentClass, boolean includeSelf, Runnable afterPopTransactionRunnable) 6 | * 在出栈多个Fragment并随后立即执行start操作时,会出现一瞬间的闪屏. 7 | * 该Listener是为了解决该问题. 8 | * Created by liguangxi on 16-12-18. 9 | */ 10 | public interface OnFragmentDestroyViewListener { 11 | void onDestroyView(); 12 | } 13 | -------------------------------------------------------------------------------- /common/src/main/java/com/logex/fragmentation/helper/internal/ResultRecord.java: -------------------------------------------------------------------------------- 1 | package com.logex.fragmentation.helper.internal; 2 | 3 | import android.os.Bundle; 4 | import android.os.Parcel; 5 | import android.os.Parcelable; 6 | 7 | /** 8 | * Hide 9 | * Result 记录 10 | * Created by liguangxi on 16-12-18. 11 | */ 12 | public final class ResultRecord implements Parcelable { 13 | public int requestCode; 14 | public int resultCode = 0; 15 | public Bundle resultBundle; 16 | 17 | public ResultRecord() { 18 | } 19 | 20 | protected ResultRecord(Parcel in) { 21 | requestCode = in.readInt(); 22 | resultCode = in.readInt(); 23 | resultBundle = in.readBundle(); 24 | } 25 | 26 | public static final Creator CREATOR = new Creator() { 27 | @Override 28 | public ResultRecord createFromParcel(Parcel in) { 29 | return new ResultRecord(in); 30 | } 31 | 32 | @Override 33 | public ResultRecord[] newArray(int size) { 34 | return new ResultRecord[size]; 35 | } 36 | }; 37 | 38 | @Override 39 | public int describeContents() { 40 | return 0; 41 | } 42 | 43 | @Override 44 | public void writeToParcel(Parcel dest, int flags) { 45 | dest.writeInt(requestCode); 46 | dest.writeInt(resultCode); 47 | dest.writeBundle(resultBundle); 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /common/src/main/java/com/logex/fragmentation/helper/internal/TransactionRecord.java: -------------------------------------------------------------------------------- 1 | package com.logex.fragmentation.helper.internal; 2 | 3 | import android.view.View; 4 | 5 | import java.util.ArrayList; 6 | 7 | /** 8 | * Hide 9 | * Created by liguangxi on 16-12-18. 10 | */ 11 | public final class TransactionRecord { 12 | public String tag; 13 | public Integer requestCode; 14 | public Integer launchMode; 15 | public Boolean withPop; 16 | public ArrayList sharedElementList; 17 | 18 | public static class SharedElement { 19 | public View sharedElement; 20 | public String sharedName; 21 | 22 | public SharedElement(View sharedElement, String sharedName) { 23 | this.sharedElement = sharedElement; 24 | this.sharedName = sharedName; 25 | } 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /common/src/main/java/com/logex/pullrefresh/calculator/CenterRefreshOffsetCalculator.java: -------------------------------------------------------------------------------- 1 | package com.logex.pullrefresh.calculator; 2 | 3 | import com.logex.pullrefresh.PullRefreshLayout; 4 | 5 | /** 6 | * 创建人: liguangxi 7 | * 日期: 2018/8/1 8 | * 邮箱 956328710@qq.com 9 | * 版本 1.0 10 | * 效果下拉头处于下拉区域中间的效果 11 | * 当targetCurrentOffset < refreshViewHeight, refreshView跟随targetView,其距离为0 12 | * 当targetCurrentOffset >= targetRefreshOffset RefreshView垂直方向永远居中于在[0, targetCurrentOffset] 13 | */ 14 | 15 | public class CenterRefreshOffsetCalculator implements PullRefreshLayout.RefreshOffsetCalculator { 16 | 17 | @Override 18 | public int calculateRefreshOffset(int refreshInitOffset, int refreshEndOffset, int refreshViewHeight, int targetCurrentOffset, int targetInitOffset, int targetRefreshOffset) { 19 | if (targetCurrentOffset < refreshViewHeight) { 20 | return targetCurrentOffset - refreshViewHeight; 21 | } 22 | return (targetCurrentOffset - refreshViewHeight) / 2; 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /common/src/main/java/com/logex/pullrefresh/calculator/DefaultRefreshOffsetCalculator.java: -------------------------------------------------------------------------------- 1 | package com.logex.pullrefresh.calculator; 2 | 3 | import com.logex.pullrefresh.PullRefreshLayout; 4 | 5 | /** 6 | * 创建人: liguangxi 7 | * 日期: 2018/8/1 8 | * 邮箱 956328710@qq.com 9 | * 版本 1.0 10 | * 默认效果 一直跟随targetView下拉效果 11 | */ 12 | public class DefaultRefreshOffsetCalculator implements PullRefreshLayout.RefreshOffsetCalculator { 13 | 14 | @Override 15 | public int calculateRefreshOffset(int refreshInitOffset, int refreshEndOffset, int refreshViewHeight, int targetCurrentOffset, int targetInitOffset, int targetRefreshOffset) { 16 | int distance = targetRefreshOffset / 2 + refreshViewHeight / 2; 17 | int max = targetCurrentOffset - refreshViewHeight; 18 | return Math.min(max, targetCurrentOffset - distance); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /common/src/main/java/com/logex/pullrefresh/calculator/FixedRefreshOffsetCalculator.java: -------------------------------------------------------------------------------- 1 | package com.logex.pullrefresh.calculator; 2 | 3 | import com.logex.pullrefresh.PullRefreshLayout; 4 | 5 | /** 6 | * 创建人: liguangxi 7 | * 时间: 18-8-14 8 | * 邮箱: 956328710@qq.com 9 | * 版本: 1.0 10 | * 效果下拉头下拉到一定距离不动 11 | * 偏移范围限定在[refreshInitOffset, refreshEndOffset] 12 | */ 13 | public class FixedRefreshOffsetCalculator implements PullRefreshLayout.RefreshOffsetCalculator { 14 | 15 | @Override 16 | public int calculateRefreshOffset(int refreshInitOffset, int refreshEndOffset, int refreshViewHeight, int targetCurrentOffset, int targetInitOffset, int targetRefreshOffset) { 17 | int refreshOffset; 18 | if (targetCurrentOffset >= targetRefreshOffset) { 19 | refreshOffset = refreshEndOffset; 20 | } else if (targetCurrentOffset <= targetInitOffset) { 21 | refreshOffset = refreshInitOffset; 22 | } else { 23 | float percent = (targetCurrentOffset - targetInitOffset) * 1.0f / (targetRefreshOffset - targetInitOffset); 24 | refreshOffset = (int) (refreshInitOffset + percent * (refreshEndOffset - refreshInitOffset)); 25 | } 26 | return refreshOffset; 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /common/src/main/java/com/logex/pullrefresh/listener/OnPullListener.java: -------------------------------------------------------------------------------- 1 | package com.logex.pullrefresh.listener; 2 | 3 | /** 4 | * 创建人: liguangxi 5 | * 日期: 2018/8/1 6 | * 邮箱 956328710@qq.com 7 | * 版本 1.0 8 | * OnPullListener 9 | */ 10 | public interface OnPullListener { 11 | 12 | void onMoveTarget(int offset); 13 | 14 | void onMoveRefreshView(int offset); 15 | 16 | /** 17 | * 刷新中... 18 | */ 19 | void onRefresh(); 20 | } 21 | -------------------------------------------------------------------------------- /common/src/main/java/com/logex/pullrefresh/listener/PullRefreshListener.java: -------------------------------------------------------------------------------- 1 | package com.logex.pullrefresh.listener; 2 | 3 | /** 4 | * 创建人: liguangxi 5 | * 日期: 2018/8/4 6 | * 邮箱 956328710@qq.com 7 | * 版本 1.0 8 | * 下拉刷新监听实现类 9 | */ 10 | public abstract class PullRefreshListener implements OnPullListener { 11 | 12 | @Override 13 | public void onMoveTarget(int offset) { 14 | 15 | } 16 | 17 | @Override 18 | public void onMoveRefreshView(int offset) { 19 | 20 | } 21 | 22 | @Override 23 | public void onRefresh() { 24 | 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /common/src/main/java/com/logex/utils/DensityUtil.java: -------------------------------------------------------------------------------- 1 | package com.logex.utils; 2 | 3 | import android.content.Context; 4 | 5 | /** 6 | * 创建人: liguangxi 7 | * 日期: 17/7/18 8 | * 邮箱 956328710@qq.com 9 | * 版本 1.0 10 | */ 11 | public class DensityUtil { 12 | 13 | public static int dip2px(Context var0, float var1) { 14 | float var2 = var0.getResources().getDisplayMetrics().density; 15 | return (int)(var1 * var2 + 0.5F); 16 | } 17 | 18 | public static int px2dip(Context var0, float var1) { 19 | float var2 = var0.getResources().getDisplayMetrics().density; 20 | return (int)(var1 / var2 + 0.5F); 21 | } 22 | 23 | public static int sp2px(Context var0, float var1) { 24 | float var2 = var0.getResources().getDisplayMetrics().scaledDensity; 25 | return (int)(var1 * var2 + 0.5F); 26 | } 27 | 28 | public static int px2sp(Context var0, float var1) { 29 | float var2 = var0.getResources().getDisplayMetrics().scaledDensity; 30 | return (int)(var1 / var2 + 0.5F); 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /common/src/main/java/com/logex/utils/GlideRoundTransform.java: -------------------------------------------------------------------------------- 1 | package com.logex.utils; 2 | 3 | import android.content.Context; 4 | import android.graphics.Bitmap; 5 | import android.graphics.BitmapShader; 6 | import android.graphics.Canvas; 7 | import android.graphics.Paint; 8 | import android.graphics.RectF; 9 | 10 | import com.bumptech.glide.load.engine.bitmap_recycle.BitmapPool; 11 | import com.bumptech.glide.load.resource.bitmap.BitmapTransformation; 12 | 13 | /** 14 | * 创建人: liguangxi 15 | * 日期: 2017/8/25 16 | * 邮箱: 956328710@qq.com 17 | * 版本: 1.0 18 | * glide圆角图片 19 | */ 20 | public class GlideRoundTransform extends BitmapTransformation { 21 | private float radius; 22 | 23 | public GlideRoundTransform(Context context, int size) { 24 | super(context); 25 | radius = AutoUtils.getViewSizeValue(size); 26 | } 27 | 28 | @Override 29 | protected Bitmap transform(BitmapPool pool, Bitmap toTransform, int outWidth, int outHeight) { 30 | return roundCrop(pool, toTransform); 31 | } 32 | 33 | private Bitmap roundCrop(BitmapPool pool, Bitmap source) { 34 | if (source == null) return null; 35 | 36 | Bitmap result = pool.get(source.getWidth(), source.getHeight(), Bitmap.Config.ARGB_8888); 37 | if (result == null) { 38 | result = Bitmap.createBitmap(source.getWidth(), source.getHeight(), Bitmap.Config.ARGB_8888); 39 | } 40 | 41 | Canvas canvas = new Canvas(result); 42 | Paint paint = new Paint(); 43 | paint.setShader(new BitmapShader(source, BitmapShader.TileMode.CLAMP, BitmapShader.TileMode.CLAMP)); 44 | paint.setAntiAlias(true); 45 | RectF rectF = new RectF(0f, 0f, source.getWidth(), source.getHeight()); 46 | canvas.drawRoundRect(rectF, radius, radius, paint); 47 | return result; 48 | } 49 | 50 | @Override 51 | public String getId() { 52 | return "GlideRound.com.bumptech.glide.load.resource.bitmap"; 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /common/src/main/java/com/logex/utils/GsonUtil.java: -------------------------------------------------------------------------------- 1 | package com.logex.utils; 2 | 3 | import com.google.gson.Gson; 4 | 5 | /** 6 | * 创建人: liguangxi 7 | * 日期: 17-7-27 8 | * 邮箱: 956328710@qq.com 9 | * 版本: 1.0 10 | * json工具类 11 | */ 12 | public class GsonUtil { 13 | private static Gson gson; 14 | 15 | public static Gson getInstance() { 16 | synchronized (GsonUtil.class) { 17 | if (gson == null) { 18 | gson = new Gson(); 19 | } 20 | return gson; 21 | } 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /common/src/main/java/com/logex/utils/LogUtil.java: -------------------------------------------------------------------------------- 1 | package com.logex.utils; 2 | 3 | import android.text.TextUtils; 4 | import android.util.Log; 5 | 6 | /** 7 | * 强大的日志产生工具类 8 | */ 9 | public class LogUtil { 10 | public static int LOG_LEVEL = 6; //开发时测试设为6,应用发布时改为0 11 | private final static int ERROR = 1; 12 | private final static int WARN = 2; 13 | private final static int INFO = 3; 14 | private final static int DEBUG = 4; 15 | private final static int VERBOSE = 5; 16 | private final static String customTagPrefix = "x_log"; 17 | 18 | private static String generateTag() { 19 | StackTraceElement caller = new Throwable().getStackTrace()[2]; 20 | String tag = "%s.%s(L:%d)"; 21 | String callerClazzName = caller.getClassName(); 22 | callerClazzName = callerClazzName.substring(callerClazzName.lastIndexOf(".") + 1); 23 | tag = String.format(tag, callerClazzName, caller.getMethodName(), caller.getLineNumber()); 24 | tag = TextUtils.isEmpty(customTagPrefix) ? tag : customTagPrefix + ":" + tag; 25 | return tag; 26 | } 27 | 28 | public static void e(String msg) { 29 | String tag = generateTag(); 30 | if (LOG_LEVEL > ERROR) 31 | Log.e(tag, msg); 32 | } 33 | 34 | public static void w(String msg) { 35 | String tag = generateTag(); 36 | if (LOG_LEVEL > WARN) 37 | Log.w(tag, msg); 38 | } 39 | 40 | public static void i(String msg) { 41 | String tag = generateTag(); 42 | if (LOG_LEVEL > INFO) 43 | Log.i(tag, msg); 44 | } 45 | 46 | public static void d(String msg) { 47 | String tag = generateTag(); 48 | if (LOG_LEVEL > DEBUG) 49 | Log.d(tag, msg); 50 | } 51 | 52 | public static void v(String msg) { 53 | String tag = generateTag(); 54 | if (LOG_LEVEL > VERBOSE) 55 | Log.v(tag, msg); 56 | } 57 | } 58 | -------------------------------------------------------------------------------- /common/src/main/java/com/logex/utils/StringUtil.java: -------------------------------------------------------------------------------- 1 | package com.logex.utils; 2 | 3 | /** 4 | * 创建人: liguangxi 5 | * 日期: 2018/2/28 6 | * 邮箱: 956328710@qq.com 7 | * 版本: 1.0 8 | * 字符串工具类 9 | */ 10 | public class StringUtil { 11 | 12 | /** 13 | * 字符串判空 包含 null 和 "" 14 | * 15 | * @param str 字符串 16 | * @return true false 17 | */ 18 | public static boolean isEmpty(CharSequence str) { 19 | return str == null || str.length() == 0; 20 | } 21 | 22 | /** 23 | * 字符串非空 24 | * 25 | * @param str 字符串 26 | * @return true false 27 | */ 28 | public static boolean isNotEmpty(CharSequence str) { 29 | return str != null && str.length() > 0; 30 | } 31 | 32 | /** 33 | * 空安全的 equals 34 | */ 35 | public static boolean equals(CharSequence a, CharSequence b) { 36 | if (a == b) return true; 37 | int length; 38 | if (a != null && b != null && (length = a.length()) == b.length()) { 39 | if (a instanceof String && b instanceof String) { 40 | return a.equals(b); 41 | } else { 42 | for (int i = 0; i < length; i++) { 43 | if (a.charAt(i) != b.charAt(i)) return false; 44 | } 45 | return true; 46 | } 47 | } 48 | return false; 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /common/src/main/java/com/logex/widget/CustomDialog.java: -------------------------------------------------------------------------------- 1 | package com.logex.widget; 2 | 3 | import android.app.Dialog; 4 | import android.content.Context; 5 | import android.content.DialogInterface; 6 | import android.view.LayoutInflater; 7 | import android.view.View; 8 | 9 | import com.logex.utils.AutoUtils; 10 | 11 | /** 12 | * 创建人: Administrator 13 | * 日期: 2018/9/29 14 | * 邮箱: 15679158128@163.com 15 | * 版本: 1.0 16 | * 定制Dialog基类 17 | */ 18 | public abstract class CustomDialog { 19 | protected Context context; 20 | protected View view; 21 | protected Dialog dialog; 22 | 23 | public CustomDialog(Context context) { 24 | this.context = context; 25 | createView(); 26 | } 27 | 28 | private CustomDialog createView() { 29 | // 获取Dialog布局 30 | view = LayoutInflater.from(context).inflate(getLayoutId(), null); 31 | AutoUtils.auto(view); 32 | return this; 33 | } 34 | 35 | public CustomDialog setCancelable(boolean cancel) { 36 | dialog.setCancelable(cancel); 37 | return this; 38 | } 39 | 40 | public CustomDialog setCanceledOnTouchOutside(boolean cancel) { 41 | dialog.setCanceledOnTouchOutside(cancel); 42 | return this; 43 | } 44 | 45 | public CustomDialog setOnDismissListener(final DialogInterface.OnDismissListener listener) { 46 | dialog.setOnDismissListener(new DialogInterface.OnDismissListener() { 47 | @Override 48 | public void onDismiss(DialogInterface dialog) { 49 | if (listener != null) listener.onDismiss(dialog); 50 | } 51 | }); 52 | return this; 53 | } 54 | 55 | public void dismiss() { 56 | if (dialog != null) { 57 | dialog.dismiss(); 58 | } 59 | } 60 | 61 | public void show() { 62 | dialog.show(); 63 | } 64 | 65 | public boolean isShowing() { 66 | return dialog != null && dialog.isShowing(); 67 | } 68 | 69 | /** 70 | * 得到布局 71 | * 72 | * @return 布局id 73 | */ 74 | protected abstract int getLayoutId(); 75 | } 76 | -------------------------------------------------------------------------------- /common/src/main/java/com/logex/widget/DividerLine.java: -------------------------------------------------------------------------------- 1 | package com.logex.widget; 2 | 3 | import android.content.Context; 4 | import android.util.AttributeSet; 5 | import android.view.View; 6 | 7 | /** 8 | * Created by liguangxi on 17-2-15. 9 | * 分割线 10 | */ 11 | public class DividerLine extends View { 12 | public DividerLine(Context context) { 13 | this(context, null); 14 | } 15 | 16 | public DividerLine(Context context, AttributeSet attrs) { 17 | this(context, attrs, 0); 18 | } 19 | 20 | public DividerLine(Context context, AttributeSet attrs, int defStyleAttr) { 21 | super(context, attrs, defStyleAttr); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /common/src/main/res/anim/actionsheet_dialog_in.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | -------------------------------------------------------------------------------- /common/src/main/res/anim/actionsheet_dialog_out.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | -------------------------------------------------------------------------------- /common/src/main/res/anim/h_fragment_enter.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 8 | -------------------------------------------------------------------------------- /common/src/main/res/anim/h_fragment_exit.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 8 | -------------------------------------------------------------------------------- /common/src/main/res/anim/h_fragment_pop_enter.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 8 | 9 | 12 | -------------------------------------------------------------------------------- /common/src/main/res/anim/h_fragment_pop_exit.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 8 | 9 | 12 | -------------------------------------------------------------------------------- /common/src/main/res/anim/no_anim.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | -------------------------------------------------------------------------------- /common/src/main/res/anim/pop_exit_no_anim.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 7 | -------------------------------------------------------------------------------- /common/src/main/res/anim/v_fragment_enter.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 9 | 10 | 13 | 14 | -------------------------------------------------------------------------------- /common/src/main/res/anim/v_fragment_exit.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 9 | 10 | 13 | 14 | -------------------------------------------------------------------------------- /common/src/main/res/anim/v_fragment_pop_enter.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /common/src/main/res/anim/v_fragment_pop_exit.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /common/src/main/res/drawable-hdpi/asy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/common/src/main/res/drawable-hdpi/asy.png -------------------------------------------------------------------------------- /common/src/main/res/drawable-hdpi/ic_arrow_next_dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/common/src/main/res/drawable-hdpi/ic_arrow_next_dark.png -------------------------------------------------------------------------------- /common/src/main/res/drawable-hdpi/ic_titlebar_dark_normal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/common/src/main/res/drawable-hdpi/ic_titlebar_dark_normal.png -------------------------------------------------------------------------------- /common/src/main/res/drawable-hdpi/ic_titlebar_dark_pressed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/common/src/main/res/drawable-hdpi/ic_titlebar_dark_pressed.png -------------------------------------------------------------------------------- /common/src/main/res/drawable-hdpi/ic_titlebar_light_normal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/common/src/main/res/drawable-hdpi/ic_titlebar_light_normal.png -------------------------------------------------------------------------------- /common/src/main/res/drawable-hdpi/ic_titlebar_light_pressed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/common/src/main/res/drawable-hdpi/ic_titlebar_light_pressed.png -------------------------------------------------------------------------------- /common/src/main/res/drawable-mdpi/asy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/common/src/main/res/drawable-mdpi/asy.png -------------------------------------------------------------------------------- /common/src/main/res/drawable-mdpi/ic_arrow_next_dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/common/src/main/res/drawable-mdpi/ic_arrow_next_dark.png -------------------------------------------------------------------------------- /common/src/main/res/drawable-mdpi/ic_titlebar_dark_normal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/common/src/main/res/drawable-mdpi/ic_titlebar_dark_normal.png -------------------------------------------------------------------------------- /common/src/main/res/drawable-mdpi/ic_titlebar_dark_pressed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/common/src/main/res/drawable-mdpi/ic_titlebar_dark_pressed.png -------------------------------------------------------------------------------- /common/src/main/res/drawable-mdpi/ic_titlebar_light_normal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/common/src/main/res/drawable-mdpi/ic_titlebar_light_normal.png -------------------------------------------------------------------------------- /common/src/main/res/drawable-mdpi/ic_titlebar_light_pressed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/common/src/main/res/drawable-mdpi/ic_titlebar_light_pressed.png -------------------------------------------------------------------------------- /common/src/main/res/drawable-xhdpi/asy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/common/src/main/res/drawable-xhdpi/asy.png -------------------------------------------------------------------------------- /common/src/main/res/drawable-xhdpi/ic_arrow_next_dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/common/src/main/res/drawable-xhdpi/ic_arrow_next_dark.png -------------------------------------------------------------------------------- /common/src/main/res/drawable-xhdpi/ic_titlebar_dark_normal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/common/src/main/res/drawable-xhdpi/ic_titlebar_dark_normal.png -------------------------------------------------------------------------------- /common/src/main/res/drawable-xhdpi/ic_titlebar_dark_pressed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/common/src/main/res/drawable-xhdpi/ic_titlebar_dark_pressed.png -------------------------------------------------------------------------------- /common/src/main/res/drawable-xhdpi/ic_titlebar_light_normal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/common/src/main/res/drawable-xhdpi/ic_titlebar_light_normal.png -------------------------------------------------------------------------------- /common/src/main/res/drawable-xhdpi/ic_titlebar_light_pressed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/common/src/main/res/drawable-xhdpi/ic_titlebar_light_pressed.png -------------------------------------------------------------------------------- /common/src/main/res/drawable-xxhdpi/asy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/common/src/main/res/drawable-xxhdpi/asy.png -------------------------------------------------------------------------------- /common/src/main/res/drawable-xxhdpi/ic_arrow_next_dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/common/src/main/res/drawable-xxhdpi/ic_arrow_next_dark.png -------------------------------------------------------------------------------- /common/src/main/res/drawable-xxhdpi/ic_expandable.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/common/src/main/res/drawable-xxhdpi/ic_expandable.png -------------------------------------------------------------------------------- /common/src/main/res/drawable-xxhdpi/ic_right.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/common/src/main/res/drawable-xxhdpi/ic_right.png -------------------------------------------------------------------------------- /common/src/main/res/drawable-xxhdpi/ic_titlebar_dark_normal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/common/src/main/res/drawable-xxhdpi/ic_titlebar_dark_normal.png -------------------------------------------------------------------------------- /common/src/main/res/drawable-xxhdpi/ic_titlebar_dark_pressed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/common/src/main/res/drawable-xxhdpi/ic_titlebar_dark_pressed.png -------------------------------------------------------------------------------- /common/src/main/res/drawable-xxhdpi/ic_titlebar_light_normal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/common/src/main/res/drawable-xxhdpi/ic_titlebar_light_normal.png -------------------------------------------------------------------------------- /common/src/main/res/drawable-xxhdpi/ic_titlebar_light_pressed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/common/src/main/res/drawable-xxhdpi/ic_titlebar_light_pressed.png -------------------------------------------------------------------------------- /common/src/main/res/drawable/alert_bg.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /common/src/main/res/drawable/alert_btn_left_pressed.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /common/src/main/res/drawable/alert_btn_right_pressed.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /common/src/main/res/drawable/alert_btn_single_pressed.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | 7 | -------------------------------------------------------------------------------- /common/src/main/res/drawable/alertdialog_left_selector.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /common/src/main/res/drawable/alertdialog_right_selector.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /common/src/main/res/drawable/alertdialog_single_selector.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /common/src/main/res/drawable/custom_toast_bg.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /common/src/main/res/drawable/dot_message_unread_red.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /common/src/main/res/drawable/titlebar_back_dark_selector.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /common/src/main/res/layout/layout_custom_toast_view.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 19 | 20 | -------------------------------------------------------------------------------- /common/src/main/res/layout/view_empty_more_footer.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 15 | 16 | -------------------------------------------------------------------------------- /common/src/main/res/layout/view_load_failed_footer.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 15 | 16 | -------------------------------------------------------------------------------- /common/src/main/res/layout/view_load_more_footer.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 12 | 13 | 20 | 21 | -------------------------------------------------------------------------------- /common/src/main/res/layout/view_pull_refresh_header.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 16 | 17 | 26 | 27 | -------------------------------------------------------------------------------- /common/src/main/res/values-zh-rCN/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 所有照片 4 | 没有系统相机 5 | 已经达到最高选择数量! 6 | 版本号错误 7 | 确定 8 | 取消 9 | -------------------------------------------------------------------------------- /common/src/main/res/values/colors.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | #d43d3d 4 | #fcfcfc 5 | #f4f4f4 6 | #2240320d 7 | @color/common_bg 8 | #e7e7e7 9 | #ffffff 10 | #999999 11 | #000000 12 | #ff0000 13 | #00000000 14 | #222222 15 | #4d94d9 16 | #39bdff 17 | 18 | #019fe8 19 | #c2daf5 20 | #f5f5f5 21 | #000000 22 | #999999 23 | #3e3e3e 24 | #d5d5d5 25 | 26 | #c6c6c6 27 | #509a9a9a 28 | #d8d8d8 29 | #414141 30 | #414141 31 | -------------------------------------------------------------------------------- /common/src/main/res/values/ids.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /jcplayer/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | -------------------------------------------------------------------------------- /jcplayer/build.gradle: -------------------------------------------------------------------------------- 1 | apply plugin: 'com.android.library' 2 | 3 | android { 4 | compileSdkVersion 26 5 | buildToolsVersion "26.0.3" 6 | 7 | defaultConfig { 8 | minSdkVersion 15 9 | targetSdkVersion 23 10 | 11 | } 12 | buildTypes { 13 | release { 14 | minifyEnabled false 15 | proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt' 16 | } 17 | } 18 | } 19 | 20 | dependencies { 21 | compile project(':common') 22 | // 播放器相关 23 | //required, enough for most devices. 24 | compile 'tv.danmaku.ijk.media:ijkplayer-java:0.6.0' 25 | compile 'tv.danmaku.ijk.media:ijkplayer-armv7a:0.6.0' 26 | } 27 | -------------------------------------------------------------------------------- /jcplayer/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /jcplayer/src/main/java/com/logex/videoplayer/JCBuriedPoint.java: -------------------------------------------------------------------------------- 1 | package com.logex.videoplayer; 2 | 3 | /** 4 | * Created by liguangxi 5 | * On 2016/04/04 22:13 6 | * 提供打点功能 7 | */ 8 | public interface JCBuriedPoint { 9 | 10 | /** 11 | * 点击播放按钮 12 | */ 13 | int ON_CLICK_START_ICON = 0; 14 | int ON_CLICK_START_ERROR = 1; 15 | int ON_CLICK_START_COMPLETE = 2; 16 | int ON_CLICK_PAUSE = 3; 17 | int ON_CLICK_RESUME = 4; 18 | 19 | int ON_SEEK_POSITION = 5; 20 | int ON_PLAY_PAUSE = 6; 21 | int ON_PLAY_COMPLETE = 7; 22 | 23 | int ON_ENTER_FULLSCREEN = 8; 24 | int ON_QUIT_FULLSCREEN = 9; 25 | 26 | 27 | int ON_TOUCH_SCREEN_SEEK_VOLUME = 10; 28 | int ON_TOUCH_SCREEN_SEEK_POSITION = 11; 29 | 30 | void onEvent(int type, String url, int screen, Object... objects); 31 | 32 | } 33 | -------------------------------------------------------------------------------- /jcplayer/src/main/java/com/logex/videoplayer/JCBuriedPointStandard.java: -------------------------------------------------------------------------------- 1 | package com.logex.videoplayer; 2 | 3 | /** 4 | * Created by liguangxi 5 | * On 2016/04/26 20:53 6 | */ 7 | public interface JCBuriedPointStandard extends JCBuriedPoint { 8 | 9 | int ON_CLICK_START_THUMB = 101; 10 | /** 11 | * 点击空白区域 12 | */ 13 | int ON_CLICK_BLANK = 102; 14 | int ON_CLICK_START_WIFIDIALOG = 103; 15 | 16 | } 17 | -------------------------------------------------------------------------------- /jcplayer/src/main/java/com/logex/videoplayer/JCMediaPlayerListener.java: -------------------------------------------------------------------------------- 1 | package com.logex.videoplayer; 2 | 3 | /** 4 | * Created by liguangxi 5 | * on 16/7/26. 6 | * JCMediaPlayerListener 7 | */ 8 | public interface JCMediaPlayerListener { 9 | 10 | /** 11 | * 播放准备中 12 | */ 13 | void onPrepared(); 14 | 15 | /** 16 | * 接收流信息 17 | * 18 | * @param what 接收流状态 19 | * @param extra 额外信息 20 | */ 21 | void onInfo(int what, int extra); 22 | 23 | /** 24 | * 缓冲区更新 25 | * 26 | * @param percent 下载百分进度 27 | */ 28 | void onBufferingUpdate(int percent); 29 | 30 | /** 31 | * 跳转进度完成 32 | */ 33 | void onSeekComplete(); 34 | 35 | /** 36 | * 视频大小改变 37 | */ 38 | void onVideoSizeChanged(); 39 | 40 | /** 41 | * 暂停播放 用于点击了下一个视频播放 42 | */ 43 | void onVideoPause(); 44 | 45 | /** 46 | * 播放完成 47 | */ 48 | void onCompletion(); 49 | 50 | /** 51 | * 播放返回 52 | * 53 | * @return true 消费事件 54 | */ 55 | boolean onBackPress(); 56 | 57 | /** 58 | * 播放错误 59 | * 60 | * @param what 错误码 61 | * @param extra 额外信息 62 | */ 63 | void onError(int what, int extra); 64 | 65 | } 66 | -------------------------------------------------------------------------------- /jcplayer/src/main/java/com/logex/videoplayer/JCTextureView.java: -------------------------------------------------------------------------------- 1 | package com.logex.videoplayer; 2 | 3 | import android.content.Context; 4 | import android.util.AttributeSet; 5 | import android.view.TextureView; 6 | 7 | /** 8 | * JCResizeTextureView 9 | * Created by liguangxi 10 | * On 2016/06/02 00:01 11 | */ 12 | public class JCTextureView extends TextureView { 13 | public JCTextureView(Context context) { 14 | super(context); 15 | } 16 | 17 | public JCTextureView(Context context, AttributeSet attrs) { 18 | super(context, attrs); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /jcplayer/src/main/java/com/logex/videoplayer/JCVideoPlayerManager.java: -------------------------------------------------------------------------------- 1 | package com.logex.videoplayer; 2 | 3 | import java.lang.ref.WeakReference; 4 | 5 | /** 6 | * Put JCVideoPlayer into layout 7 | * From a JCVideoPlayer to another JCVideoPlayer 8 | * Created by liguangxi on 16/7/26. 9 | */ 10 | public class JCVideoPlayerManager { 11 | private static WeakReference LISTENER; 12 | private static WeakReference LAST_LISTENER; 13 | 14 | /** 15 | * 设置当前播放器监听事件 16 | * 17 | * @param listener 播放事件 18 | */ 19 | public static void setListener(JCMediaPlayerListener listener) { 20 | if (listener != null) { 21 | LISTENER = new WeakReference<>(listener); 22 | } 23 | } 24 | 25 | /** 26 | * 设置最后播放器监听事件 27 | * 28 | * @param listener 播放事件 29 | */ 30 | public static void setLastListener(JCMediaPlayerListener listener) { 31 | if (listener != null) { 32 | LAST_LISTENER = new WeakReference<>(listener); 33 | } 34 | } 35 | 36 | /** 37 | * 获取当前播放器监听事件 38 | * 39 | * @return 当前播放器事件 40 | */ 41 | public static JCMediaPlayerListener listener() { 42 | if (LISTENER != null) { 43 | return LISTENER.get(); 44 | } 45 | return null; 46 | } 47 | 48 | /** 49 | * 获取最后播放器监听事件 50 | * 51 | * @return 最后播放器事件 52 | */ 53 | public static JCMediaPlayerListener lastListener() { 54 | if (LAST_LISTENER != null) { 55 | return LAST_LISTENER.get(); 56 | } 57 | return null; 58 | } 59 | 60 | /** 61 | * 暂停全部视频 62 | */ 63 | public static void onVideoPauseAll() { 64 | if (LISTENER != null) { 65 | LISTENER.get().onVideoPause(); 66 | } 67 | if (LAST_LISTENER != null) { 68 | LAST_LISTENER.get().onVideoPause(); 69 | } 70 | } 71 | } 72 | -------------------------------------------------------------------------------- /jcplayer/src/main/res/drawable-xhdpi/jc_add_volume.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/jcplayer/src/main/res/drawable-xhdpi/jc_add_volume.png -------------------------------------------------------------------------------- /jcplayer/src/main/res/drawable-xhdpi/jc_back.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/jcplayer/src/main/res/drawable-xhdpi/jc_back.png -------------------------------------------------------------------------------- /jcplayer/src/main/res/drawable-xhdpi/jc_back_tiny_normal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/jcplayer/src/main/res/drawable-xhdpi/jc_back_tiny_normal.png -------------------------------------------------------------------------------- /jcplayer/src/main/res/drawable-xhdpi/jc_back_tiny_pressed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/jcplayer/src/main/res/drawable-xhdpi/jc_back_tiny_pressed.png -------------------------------------------------------------------------------- /jcplayer/src/main/res/drawable-xhdpi/jc_backward_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/jcplayer/src/main/res/drawable-xhdpi/jc_backward_icon.png -------------------------------------------------------------------------------- /jcplayer/src/main/res/drawable-xhdpi/jc_close_volume.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/jcplayer/src/main/res/drawable-xhdpi/jc_close_volume.png -------------------------------------------------------------------------------- /jcplayer/src/main/res/drawable-xhdpi/jc_enlarge.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/jcplayer/src/main/res/drawable-xhdpi/jc_enlarge.png -------------------------------------------------------------------------------- /jcplayer/src/main/res/drawable-xhdpi/jc_error_normal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/jcplayer/src/main/res/drawable-xhdpi/jc_error_normal.png -------------------------------------------------------------------------------- /jcplayer/src/main/res/drawable-xhdpi/jc_error_pressed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/jcplayer/src/main/res/drawable-xhdpi/jc_error_pressed.png -------------------------------------------------------------------------------- /jcplayer/src/main/res/drawable-xhdpi/jc_forward_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/jcplayer/src/main/res/drawable-xhdpi/jc_forward_icon.png -------------------------------------------------------------------------------- /jcplayer/src/main/res/drawable-xhdpi/jc_loading_bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/jcplayer/src/main/res/drawable-xhdpi/jc_loading_bg.png -------------------------------------------------------------------------------- /jcplayer/src/main/res/drawable-xhdpi/jc_pause_normal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/jcplayer/src/main/res/drawable-xhdpi/jc_pause_normal.png -------------------------------------------------------------------------------- /jcplayer/src/main/res/drawable-xhdpi/jc_pause_pressed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/jcplayer/src/main/res/drawable-xhdpi/jc_pause_pressed.png -------------------------------------------------------------------------------- /jcplayer/src/main/res/drawable-xhdpi/jc_play_normal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/jcplayer/src/main/res/drawable-xhdpi/jc_play_normal.png -------------------------------------------------------------------------------- /jcplayer/src/main/res/drawable-xhdpi/jc_play_pressed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/jcplayer/src/main/res/drawable-xhdpi/jc_play_pressed.png -------------------------------------------------------------------------------- /jcplayer/src/main/res/drawable-xhdpi/jc_replay_press.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/jcplayer/src/main/res/drawable-xhdpi/jc_replay_press.png -------------------------------------------------------------------------------- /jcplayer/src/main/res/drawable-xhdpi/jc_replay_video.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/jcplayer/src/main/res/drawable-xhdpi/jc_replay_video.png -------------------------------------------------------------------------------- /jcplayer/src/main/res/drawable-xhdpi/jc_shrink.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/jcplayer/src/main/res/drawable-xhdpi/jc_shrink.png -------------------------------------------------------------------------------- /jcplayer/src/main/res/drawable-xhdpi/jc_volume_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/jcplayer/src/main/res/drawable-xhdpi/jc_volume_icon.png -------------------------------------------------------------------------------- /jcplayer/src/main/res/drawable-xxhdpi/jc_back.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/jcplayer/src/main/res/drawable-xxhdpi/jc_back.png -------------------------------------------------------------------------------- /jcplayer/src/main/res/drawable-xxhdpi/jc_play_normal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/jcplayer/src/main/res/drawable-xxhdpi/jc_play_normal.png -------------------------------------------------------------------------------- /jcplayer/src/main/res/drawable-xxhdpi/jc_play_pressed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/jcplayer/src/main/res/drawable-xxhdpi/jc_play_pressed.png -------------------------------------------------------------------------------- /jcplayer/src/main/res/drawable-xxhdpi/jc_replay_press.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/jcplayer/src/main/res/drawable-xxhdpi/jc_replay_press.png -------------------------------------------------------------------------------- /jcplayer/src/main/res/drawable-xxhdpi/jc_replay_video.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/logex-code/Headline_News_Kotlin_App/c4d207b9ca8ae757251550bf368fef30d6c78195/jcplayer/src/main/res/drawable-xxhdpi/jc_replay_video.png -------------------------------------------------------------------------------- /jcplayer/src/main/res/drawable/jc_click_error_selector.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /jcplayer/src/main/res/drawable/jc_click_pause_selector.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /jcplayer/src/main/res/drawable/jc_click_play_selector.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /jcplayer/src/main/res/drawable/jc_click_replay_selector.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /jcplayer/src/main/res/drawable/jc_dialog_progress.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /jcplayer/src/main/res/drawable/jc_dialog_progress_bg.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | -------------------------------------------------------------------------------- /jcplayer/src/main/res/drawable/jc_loading.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | -------------------------------------------------------------------------------- /jcplayer/src/main/res/drawable/jc_progress.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /jcplayer/src/main/res/drawable/jc_seek_progress.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /jcplayer/src/main/res/drawable/jc_seek_thumb.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /jcplayer/src/main/res/drawable/jc_seek_thumb_normal.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 8 | 9 | -------------------------------------------------------------------------------- /jcplayer/src/main/res/drawable/jc_seek_thumb_pressed.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 8 | 9 | -------------------------------------------------------------------------------- /jcplayer/src/main/res/drawable/jc_title_bg.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 7 | 8 | -------------------------------------------------------------------------------- /jcplayer/src/main/res/drawable/jc_volume_progress_bg.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /jcplayer/src/main/res/layout/jc_dialog_volume.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 13 | 14 | 21 | 22 | 32 | 33 | 45 | 46 | 47 | 48 | 49 | -------------------------------------------------------------------------------- /jcplayer/src/main/res/values-zh-rCN/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 您当前正在使用移动网络,继续播放将消耗流量 4 | 继续播放 5 | 停止播放 6 | 播放地址无效 7 | -------------------------------------------------------------------------------- /jcplayer/src/main/res/values/ids.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /jcplayer/src/main/res/values/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | You are currently using the mobile network, the player will continue to consume traffic 3 | Resume 4 | Stop play 5 | No mUrl 6 | 7 | -------------------------------------------------------------------------------- /jcplayer/src/main/res/values/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 9 | 10 | 14 | 15 | -------------------------------------------------------------------------------- /settings.gradle: -------------------------------------------------------------------------------- 1 | include ':common', ':jcplayer' 2 | include ':app' 3 | --------------------------------------------------------------------------------