├── .gitignore ├── .idea ├── .gitignore ├── .name ├── compiler.xml ├── git_toolbox_prj.xml ├── gradle.xml ├── inspectionProfiles │ └── Project_Default.xml ├── misc.xml └── vcs.xml ├── LICENSE ├── README.md ├── app ├── .gitignore ├── bilihub.jks ├── build.gradle ├── proguard-rules.pro └── src │ ├── androidTest │ └── java │ │ └── com │ │ └── leon │ │ └── bilihub │ │ ├── ExampleInstrumentedTest.kt │ │ └── TestA.java │ ├── main │ ├── AndroidManifest.xml │ ├── app_logo-playstore.png │ ├── assets │ │ ├── index.css │ │ ├── partition.json │ │ ├── read-mobile-a.css │ │ └── read-mobile-b.css │ ├── java │ │ └── com │ │ │ └── leon │ │ │ └── bilihub │ │ │ ├── App.java │ │ │ ├── base │ │ │ ├── BindingInterface.java │ │ │ ├── baseActivity │ │ │ │ ├── ActivityManager.java │ │ │ │ ├── AsyncHttpActivity.java │ │ │ │ ├── AsyncResponseBodyActivity.java │ │ │ │ └── BaseActivity.java │ │ │ ├── baseAdapter │ │ │ │ ├── BaseAdapter.java │ │ │ │ ├── MultipleViewBindingAdapter.java │ │ │ │ └── ViewBindingAdapter.java │ │ │ └── baseFragment │ │ │ │ ├── BaseFragment.java │ │ │ │ └── BaseLazyFragment.java │ │ │ ├── http │ │ │ ├── ApiHelper.java │ │ │ ├── BaseUrl.java │ │ │ ├── BiliHost.java │ │ │ ├── DataStoreKey.java │ │ │ ├── HttpApi.java │ │ │ ├── PostApi.java │ │ │ ├── RequestData.java │ │ │ ├── RetrofitClient.java │ │ │ ├── SimpleRxJava.java │ │ │ └── WbiInterceptor.java │ │ │ ├── ui │ │ │ ├── activities │ │ │ │ ├── LoginActivity.java │ │ │ │ ├── MainActivity.java │ │ │ │ ├── ProfileActivity.java │ │ │ │ ├── drawerFunction │ │ │ │ │ ├── FavoriteActivity.java │ │ │ │ │ ├── HistoryActivity.java │ │ │ │ │ ├── OrderActivity.java │ │ │ │ │ ├── PopularActivity.java │ │ │ │ │ ├── RelationActivity.java │ │ │ │ │ ├── SettingActivity.java │ │ │ │ │ ├── WatchLaterActivity.java │ │ │ │ │ ├── channel │ │ │ │ │ │ ├── ChannelActivity.java │ │ │ │ │ │ └── ChannelDetailActivity.java │ │ │ │ │ ├── partition │ │ │ │ │ │ ├── PartitionActivity.java │ │ │ │ │ │ └── PartitionDetailActivity.java │ │ │ │ │ └── setting │ │ │ │ │ │ └── SettingQualityActivity.java │ │ │ │ ├── publicActivities │ │ │ │ │ ├── ArticleActivity.java │ │ │ │ │ ├── AudioActivity.java │ │ │ │ │ ├── DownloadActivity.java │ │ │ │ │ ├── FolderDetailActivity.java │ │ │ │ │ ├── LiveStreamActivity.java │ │ │ │ │ ├── PictureActivity.java │ │ │ │ │ ├── PictureViewerActivity.java │ │ │ │ │ ├── RelationDetailActivity.java │ │ │ │ │ ├── UserActivity.java │ │ │ │ │ ├── UserAudioActivity.java │ │ │ │ │ └── VideoActivity.java │ │ │ │ └── search │ │ │ │ │ ├── SearchActivity.java │ │ │ │ │ └── SearchResultActivity.java │ │ │ ├── adapters │ │ │ │ ├── HomeRecommendAdapter.java │ │ │ │ ├── HotSearchAdapter.java │ │ │ │ ├── SearchSuggestionAdapter.java │ │ │ │ ├── SeriesAdapter.java │ │ │ │ ├── ViewPager2Adapter.java │ │ │ │ ├── drawer │ │ │ │ │ ├── HistoryAdapter.java │ │ │ │ │ ├── UserOrderAdapter.java │ │ │ │ │ ├── WatchLaterAdapter.java │ │ │ │ │ ├── channel │ │ │ │ │ │ ├── ChannelAdapter.java │ │ │ │ │ │ ├── ChannelFeaturedAdapter.java │ │ │ │ │ │ ├── ChannelMultipleContentAdapter.java │ │ │ │ │ │ ├── ChannelMultipleTopAdapter.java │ │ │ │ │ │ └── UserChannelAdapter.java │ │ │ │ │ ├── favFolder │ │ │ │ │ │ ├── CollectAdapter.java │ │ │ │ │ │ ├── FolderAdapter.java │ │ │ │ │ │ └── FolderDetailMediaAdapter.java │ │ │ │ │ ├── partition │ │ │ │ │ │ ├── PartitionDataAdapter.java │ │ │ │ │ │ ├── PartitionHomeRecommendAdapter.java │ │ │ │ │ │ └── PartitionHomeRecommendChildAdapter.java │ │ │ │ │ ├── popular │ │ │ │ │ │ ├── PopularAdapter.java │ │ │ │ │ │ ├── PopularRankPartitionAdapter.java │ │ │ │ │ │ └── PopularRankViewBindingAdapter.java │ │ │ │ │ ├── relation │ │ │ │ │ │ ├── RelationDetailAdapter.java │ │ │ │ │ │ └── RelationGroupAdapter.java │ │ │ │ │ └── setting │ │ │ │ │ │ ├── SettingLiveQualityAdapter.java │ │ │ │ │ │ └── SettingVideoQualityAdapter.java │ │ │ │ ├── searchResult │ │ │ │ │ ├── SearchResultArticleAdapter.java │ │ │ │ │ ├── SearchResultBangumiAdapter.java │ │ │ │ │ ├── SearchResultLiveAdapter.java │ │ │ │ │ ├── SearchResultPgcAdapter.java │ │ │ │ │ ├── SearchResultUserAdapter.java │ │ │ │ │ └── SearchResultVideoAdapter.java │ │ │ │ ├── user │ │ │ │ │ ├── UserArticleAdapter.java │ │ │ │ │ ├── UserAudioAdapter.java │ │ │ │ │ ├── UserPictureAdapter.java │ │ │ │ │ ├── UserPictureDetailAdapter.java │ │ │ │ │ └── UserVideoAdapter.java │ │ │ │ └── video │ │ │ │ │ ├── MediaInfoRecommendAdapter.java │ │ │ │ │ ├── ReplyAdapter.java │ │ │ │ │ ├── VideoEpisodeAdapter.java │ │ │ │ │ ├── VideoQualityAdapter.java │ │ │ │ │ ├── VideoSectionAdapter.java │ │ │ │ │ ├── VideoSectionEpisodeAdapter.java │ │ │ │ │ ├── VideoSpeedAdapter.java │ │ │ │ │ ├── VideoSubtitleAdapter.java │ │ │ │ │ ├── live │ │ │ │ │ ├── LiveQualityAdapter.java │ │ │ │ │ └── LiveRoadAdapter.java │ │ │ │ │ └── pgc │ │ │ │ │ ├── PgcEpisodeAdapter.java │ │ │ │ │ ├── PgcRecommendAdapter.java │ │ │ │ │ ├── PgcSeasonAdapter.java │ │ │ │ │ ├── PgcSectionAdapter.java │ │ │ │ │ └── PgcSectionContentAdapter.java │ │ │ ├── dialogs │ │ │ │ ├── AboutDialog.java │ │ │ │ ├── DonationDialog.java │ │ │ │ ├── EditorDialog.java │ │ │ │ ├── LiveQualityDialog.java │ │ │ │ ├── PictureViewerDialog.java │ │ │ │ ├── QualityDialog.java │ │ │ │ ├── RecommendStyleDialog.java │ │ │ │ ├── RelationGroupDialog.java │ │ │ │ ├── ReplyDetailDialog.java │ │ │ │ ├── RoadDialog.java │ │ │ │ ├── SeriesPopupWindow.java │ │ │ │ ├── SpeedDialog.java │ │ │ │ ├── SubtitleDialog.java │ │ │ │ ├── TipDialog.java │ │ │ │ └── VideoPreferenceDialog.java │ │ │ ├── fragments │ │ │ │ ├── channelFragments │ │ │ │ │ ├── ChannelFeaturedFragment.java │ │ │ │ │ ├── ChannelFragment.java │ │ │ │ │ └── ChannelMultipleFragment.java │ │ │ │ ├── drawerFragments │ │ │ │ │ ├── OrderFragment.java │ │ │ │ │ ├── favorite │ │ │ │ │ │ ├── CollectListFragment.java │ │ │ │ │ │ └── FolderListFragment.java │ │ │ │ │ ├── partition │ │ │ │ │ │ ├── PartitionFragment.java │ │ │ │ │ │ └── PartitionHomeFragment.java │ │ │ │ │ └── popularFragments │ │ │ │ │ │ ├── HotFragment.java │ │ │ │ │ │ ├── PreciousFragment.java │ │ │ │ │ │ ├── RankFragment.java │ │ │ │ │ │ └── WeeklyFragment.java │ │ │ │ ├── searchResultFragments │ │ │ │ │ ├── SearchResultArticleFragment.java │ │ │ │ │ ├── SearchResultBangumiFragment.java │ │ │ │ │ ├── SearchResultComprehensiveFragment.java │ │ │ │ │ ├── SearchResultLiveFragment.java │ │ │ │ │ ├── SearchResultPgcFragment.java │ │ │ │ │ ├── SearchResultUserFragment.java │ │ │ │ │ └── SearchResultVideoFragment.java │ │ │ │ ├── userFragments │ │ │ │ │ ├── UserArticleFragment.java │ │ │ │ │ ├── UserMediaFragment.java │ │ │ │ │ └── UserPictureFragment.java │ │ │ │ └── videoFragments │ │ │ │ │ ├── MediaCommentsFragment.java │ │ │ │ │ ├── MediaPgcInfoFragment.java │ │ │ │ │ └── MediaVideoInfoFragment.java │ │ │ └── widget │ │ │ │ ├── BlurTransformation.java │ │ │ │ ├── HorizontalRecyclerView.java │ │ │ │ ├── TopBarWidget.java │ │ │ │ ├── decoration │ │ │ │ ├── GridItemDecoration.java │ │ │ │ └── LinearItemDecoration.java │ │ │ │ ├── loader │ │ │ │ ├── PaginationLoader.java │ │ │ │ └── RecyclerViewLoader.java │ │ │ │ └── player │ │ │ │ ├── BottomControlView.java │ │ │ │ ├── CompleteView.java │ │ │ │ ├── ErrorView.java │ │ │ │ ├── GestureView.java │ │ │ │ ├── LiveView.java │ │ │ │ ├── PlayerController.java │ │ │ │ ├── PrepareView.java │ │ │ │ ├── SubtitleView.java │ │ │ │ └── TopBarView.java │ │ │ ├── utils │ │ │ ├── AudioController.java │ │ │ ├── FileUtils.java │ │ │ ├── PreferenceUtils.java │ │ │ ├── Utils.java │ │ │ ├── ValueUtils.java │ │ │ ├── ViewUtils.java │ │ │ ├── converter │ │ │ │ ├── ConverterFactory.java │ │ │ │ ├── RequestBodyConverter.java │ │ │ │ └── ResponseBodyConverter.java │ │ │ ├── donation │ │ │ │ ├── AliDonation.java │ │ │ │ ├── DonationHelper.java │ │ │ │ └── WeChatDonation.java │ │ │ └── filter │ │ │ │ ├── FilterAdapter.java │ │ │ │ └── FilterUtils.java │ │ │ └── values │ │ │ └── SettingValueCreator.java │ ├── kotlin │ │ └── com │ │ │ └── leon │ │ │ └── bilihub │ │ │ ├── beans │ │ │ ├── Config.kt │ │ │ ├── account │ │ │ │ ├── AccountNav.kt │ │ │ │ ├── CollectFolder.kt │ │ │ │ ├── CollectFolderDetail.kt │ │ │ │ ├── FavoriteFolder.kt │ │ │ │ ├── FavoriteFolderDetail.kt │ │ │ │ ├── FolderDetailMedia.kt │ │ │ │ ├── History.kt │ │ │ │ ├── RelationDetail.kt │ │ │ │ ├── RelationTags.kt │ │ │ │ └── WatchLater.kt │ │ │ ├── home │ │ │ │ ├── AccountViewModel.kt │ │ │ │ ├── HomeRecommendApp.kt │ │ │ │ ├── HotSearch.kt │ │ │ │ ├── channel │ │ │ │ │ ├── ChannelCategory.kt │ │ │ │ │ ├── ChannelData.kt │ │ │ │ │ ├── ChannelDetail.kt │ │ │ │ │ ├── ChannelDetailFeatured.kt │ │ │ │ │ ├── ChannelDetailMultiple.kt │ │ │ │ │ └── UserChannelCategory.kt │ │ │ │ ├── drawerFunction │ │ │ │ │ ├── Series.kt │ │ │ │ │ └── popular │ │ │ │ │ │ ├── PopularData.kt │ │ │ │ │ │ ├── PopularHot.kt │ │ │ │ │ │ ├── PopularPrecious.kt │ │ │ │ │ │ ├── PopularRank.kt │ │ │ │ │ │ ├── PopularRankBangumi.kt │ │ │ │ │ │ ├── PopularRankPgc.kt │ │ │ │ │ │ └── PopularWeekly.kt │ │ │ │ └── searchResult │ │ │ │ │ ├── SearchResultArticle.kt │ │ │ │ │ ├── SearchResultLive.kt │ │ │ │ │ ├── SearchResultMedia.kt │ │ │ │ │ ├── SearchResultUser.kt │ │ │ │ │ └── SearchResultVideo.kt │ │ │ ├── partition │ │ │ │ ├── Partition.kt │ │ │ │ ├── PartitionData.kt │ │ │ │ ├── PartitionRecommend.kt │ │ │ │ └── PartitionTag.kt │ │ │ ├── post │ │ │ │ └── CreateGroup.kt │ │ │ ├── publicBeans │ │ │ │ ├── resources │ │ │ │ │ ├── Reply.kt │ │ │ │ │ ├── SubReply.kt │ │ │ │ │ ├── article │ │ │ │ │ │ ├── ArticleAuth.kt │ │ │ │ │ │ └── ArticleInfo.kt │ │ │ │ │ ├── audio │ │ │ │ │ │ ├── AudioInfo.kt │ │ │ │ │ │ └── AudioResources.kt │ │ │ │ │ ├── live │ │ │ │ │ │ ├── LiveInfo.kt │ │ │ │ │ │ └── LiveStream.kt │ │ │ │ │ ├── picture │ │ │ │ │ │ └── PictureInfo.kt │ │ │ │ │ └── video │ │ │ │ │ │ ├── PgcDetail.kt │ │ │ │ │ │ ├── PgcRecommend.kt │ │ │ │ │ │ ├── PgcRelation.kt │ │ │ │ │ │ ├── PgcStream.kt │ │ │ │ │ │ ├── VideoDetail.kt │ │ │ │ │ │ ├── VideoQuality.kt │ │ │ │ │ │ ├── VideoRelation.kt │ │ │ │ │ │ ├── VideoSpeed.kt │ │ │ │ │ │ ├── VideoStream.kt │ │ │ │ │ │ └── VideoSubtitle.kt │ │ │ │ └── user │ │ │ │ │ ├── UserArticle.kt │ │ │ │ │ ├── UserAudio.kt │ │ │ │ │ ├── UserInfo.kt │ │ │ │ │ ├── UserOrder.kt │ │ │ │ │ ├── UserPicture.kt │ │ │ │ │ ├── UserStat.kt │ │ │ │ │ └── UserVideo.kt │ │ │ └── search │ │ │ │ └── SearchSuggestion.kt │ │ │ ├── http │ │ │ ├── Condition.kt │ │ │ ├── Quality.kt │ │ │ ├── Rank.kt │ │ │ └── ReplyType.kt │ │ │ ├── model │ │ │ ├── AudioProgressModel.kt │ │ │ ├── LivePlayerModel.kt │ │ │ ├── SettingModel.kt │ │ │ └── VideoPlayerModel.kt │ │ │ ├── parser │ │ │ └── PartitionParser.kt │ │ │ ├── ui │ │ │ └── ViewPagerTouchMonitorListener.kt │ │ │ ├── utils │ │ │ └── DataStoreUtils.kt │ │ │ └── wraps │ │ │ ├── AudioProgressWrap.kt │ │ │ ├── LiveQualityWrap.kt │ │ │ ├── LiveRoadWrap.kt │ │ │ ├── VideoQualityWrap.kt │ │ │ ├── VideoResourceWrap.kt │ │ │ └── VideoSpeedWrap.kt │ └── res │ │ ├── anim │ │ ├── picture_viewer_enter.xml │ │ ├── picture_viewer_exit.xml │ │ ├── translate_enter_in.xml │ │ ├── translate_enter_out.xml │ │ ├── translate_exit_in.xml │ │ └── translate_exit_out.xml │ │ ├── drawable │ │ ├── about_app_gitee.xml │ │ ├── about_app_github.xml │ │ ├── app_logo.xml │ │ ├── app_logo_foreground.xml │ │ ├── audio_control_bg.xml │ │ ├── audio_download.xml │ │ ├── audio_pause.xml │ │ ├── audio_play.xml │ │ ├── audio_play_stat.xml │ │ ├── audio_play_video.xml │ │ ├── audio_progress_bar.xml │ │ ├── audio_thumb.xml │ │ ├── bg_article.xml │ │ ├── bg_drawer.xml │ │ ├── bg_drawer_face.xml │ │ ├── bg_drawer_function.xml │ │ ├── bg_drawer_navigation.xml │ │ ├── bg_editor_dialog_confirm.xml │ │ ├── bg_editor_dialog_edit.xml │ │ ├── bg_follow.xml │ │ ├── bili_logo.xml │ │ ├── bili_user_level_0.png │ │ ├── bili_user_level_1.png │ │ ├── bili_user_level_2.png │ │ ├── bili_user_level_3.png │ │ ├── bili_user_level_4.png │ │ ├── bili_user_level_5.png │ │ ├── bili_user_level_6.png │ │ ├── circle_bg.xml │ │ ├── dialog_action_cancel.xml │ │ ├── dialog_action_confirm.xml │ │ ├── donation_amount_alipay.xml │ │ ├── donation_amount_wechatpay.xml │ │ ├── drawer_function_channel.xml │ │ ├── drawer_function_download.xml │ │ ├── drawer_function_favorite.xml │ │ ├── drawer_function_follow.xml │ │ ├── drawer_function_history.xml │ │ ├── drawer_function_later.xml │ │ ├── drawer_function_order.xml │ │ ├── drawer_function_partition.xml │ │ ├── drawer_function_rank.xml │ │ ├── drawer_function_setting.xml │ │ ├── ic_add.xml │ │ ├── ic_arrow.xml │ │ ├── ic_audio_play.xml │ │ ├── ic_b_coin.xml │ │ ├── ic_back.xml │ │ ├── ic_check.xml │ │ ├── ic_check_false.xml │ │ ├── ic_check_true.xml │ │ ├── ic_clear.xml │ │ ├── ic_close.xml │ │ ├── ic_coin_a.xml │ │ ├── ic_confirm.xml │ │ ├── ic_danmaku.xml │ │ ├── ic_favorite.xml │ │ ├── ic_favorite_false.xml │ │ ├── ic_favorite_true.xml │ │ ├── ic_gender_man.xml │ │ ├── ic_gender_woman.xml │ │ ├── ic_history_progress.xml │ │ ├── ic_home_search.xml │ │ ├── ic_like.xml │ │ ├── ic_official_verify.xml │ │ ├── ic_person.xml │ │ ├── ic_person_verify.xml │ │ ├── ic_qq_group_chat.xml │ │ ├── ic_refresh.xml │ │ ├── ic_time.xml │ │ ├── ic_up_user.xml │ │ ├── ic_video_fav.xml │ │ ├── ic_video_play.xml │ │ ├── ic_view.xml │ │ ├── indicator.xml │ │ ├── item_collect_a.xml │ │ ├── item_collect_b.xml │ │ ├── item_media_type_bg.xml │ │ ├── item_pgc_badge_bg.xml │ │ ├── item_pgc_recommend_badge_bg.xml │ │ ├── item_popular_hot_bg.xml │ │ ├── item_popular_precious_bg.xml │ │ ├── item_popular_weekly_bg.xml │ │ ├── item_quality_vip_bg.xml │ │ ├── item_search_result_live_status_bg.xml │ │ ├── item_selection.xml │ │ ├── item_selection_false.xml │ │ ├── item_selection_true.xml │ │ ├── item_user_comment_reply.xml │ │ ├── item_video_badge_bg.xml │ │ ├── live_icon_popular.xml │ │ ├── live_icon_view.xml │ │ ├── logout.xml │ │ ├── lsp.jpg │ │ ├── more_vert.xml │ │ ├── partition_animal.xml │ │ ├── partition_car.xml │ │ ├── partition_cinephile.xml │ │ ├── partition_dance.xml │ │ ├── partition_douga.xml │ │ ├── partition_ent.xml │ │ ├── partition_fashion.xml │ │ ├── partition_food.xml │ │ ├── partition_game.xml │ │ ├── partition_information.xml │ │ ├── partition_kichiku.xml │ │ ├── partition_knowledge.xml │ │ ├── partition_life.xml │ │ ├── partition_music.xml │ │ ├── partition_sports.xml │ │ ├── partition_tech.xml │ │ ├── picture_viewer_item_bg.xml │ │ ├── player_battery.xml │ │ ├── player_battery_0.xml │ │ ├── player_battery_100.xml │ │ ├── player_battery_25.xml │ │ ├── player_battery_50.xml │ │ ├── player_battery_75.xml │ │ ├── player_battery_charging.xml │ │ ├── pointer.xml │ │ ├── reply_sort.xml │ │ ├── res_item_fade.xml │ │ ├── ripple_bg.xml │ │ ├── ripple_bg_a.xml │ │ ├── ripple_round_corners6dp_bg.xml │ │ ├── round_bg.xml │ │ ├── round_corners6dp_bg.xml │ │ ├── search_bar_bg.xml │ │ ├── search_result_top_bar_bg.xml │ │ ├── search_suggestion_item_bg.xml │ │ ├── setting_dialog_bg.xml │ │ ├── user_default_banner.png │ │ ├── user_face_default.jpg │ │ ├── user_level_progress_layer.xml │ │ ├── user_music_note.xml │ │ ├── user_works_comment.xml │ │ ├── user_works_like.xml │ │ ├── user_works_share.xml │ │ ├── video_brightness.xml │ │ ├── video_danmaku_close.xml │ │ ├── video_danmaku_open.xml │ │ ├── video_danmaku_status.xml │ │ ├── video_fast_forward.xml │ │ ├── video_fast_retreat.xml │ │ ├── video_full_screen.xml │ │ ├── video_item_extra_bg.xml │ │ ├── video_lock.xml │ │ ├── video_lock_false.xml │ │ ├── video_lock_true.xml │ │ ├── video_play.xml │ │ ├── video_play_false.xml │ │ ├── video_play_true.xml │ │ ├── video_player_bottom_control_bg.xml │ │ ├── video_player_title_video_bg.xml │ │ ├── video_progress_bar.xml │ │ ├── video_replay.xml │ │ ├── video_status_coin.xml │ │ ├── video_status_coin_false.xml │ │ ├── video_status_coin_true.xml │ │ ├── video_status_favorite.xml │ │ ├── video_status_favorite_false.xml │ │ ├── video_status_favorite_true.xml │ │ ├── video_status_like.xml │ │ ├── video_status_like_false.xml │ │ ├── video_status_like_true.xml │ │ ├── video_status_share.xml │ │ ├── video_thumb.xml │ │ ├── video_volume.xml │ │ ├── video_volume_off.xml │ │ ├── watch_later_clear.xml │ │ └── watch_later_remove.xml │ │ ├── layout │ │ ├── activity_article.xml │ │ ├── activity_audio.xml │ │ ├── activity_channel.xml │ │ ├── activity_channel_detail.xml │ │ ├── activity_download.xml │ │ ├── activity_favorite.xml │ │ ├── activity_folder_detail.xml │ │ ├── activity_history.xml │ │ ├── activity_live_stream.xml │ │ ├── activity_login.xml │ │ ├── activity_main.xml │ │ ├── activity_main_drawer.xml │ │ ├── activity_main_home.xml │ │ ├── activity_order.xml │ │ ├── activity_partition.xml │ │ ├── activity_partition_detail.xml │ │ ├── activity_picture.xml │ │ ├── activity_picture_viewer.xml │ │ ├── activity_popular.xml │ │ ├── activity_profile.xml │ │ ├── activity_relation.xml │ │ ├── activity_search.xml │ │ ├── activity_search_result.xml │ │ ├── activity_setting.xml │ │ ├── activity_setting_quality.xml │ │ ├── activity_user.xml │ │ ├── activity_user_audio.xml │ │ ├── activity_video.xml │ │ ├── activity_watch_later.xml │ │ ├── component_player_bottom_control.xml │ │ ├── component_player_complete.xml │ │ ├── component_player_controller.xml │ │ ├── component_player_error.xml │ │ ├── component_player_gesture.xml │ │ ├── component_player_live.xml │ │ ├── component_player_prepare.xml │ │ ├── component_player_top_bar.xml │ │ ├── compose_list.xml │ │ ├── compose_tab_vp.xml │ │ ├── dialog_about.xml │ │ ├── dialog_donation.xml │ │ ├── dialog_editor.xml │ │ ├── dialog_picture_viewer.xml │ │ ├── dialog_recommend_style.xml │ │ ├── dialog_relation_group.xml │ │ ├── dialog_reply_detail.xml │ │ ├── dialog_series.xml │ │ ├── dialog_tip.xml │ │ ├── dialog_video_parameter.xml │ │ ├── fragment_channel.xml │ │ ├── fragment_channel_multiple.xml │ │ ├── fragment_media_comments.xml │ │ ├── fragment_media_pgc_info.xml │ │ ├── fragment_media_video_info.xml │ │ ├── fragment_partition_home.xml │ │ ├── fragment_popular_weekly.xml │ │ ├── fragment_result_anime.xml │ │ ├── fragment_result_article.xml │ │ ├── fragment_result_cinephile.xml │ │ ├── fragment_result_live.xml │ │ ├── fragment_result_user.xml │ │ ├── fragment_user_media.xml │ │ ├── fragment_video_result.xml │ │ ├── item_channel.xml │ │ ├── item_collect.xml │ │ ├── item_filter.xml │ │ ├── item_folder.xml │ │ ├── item_folder_detail_media.xml │ │ ├── item_history_article.xml │ │ ├── item_history_live.xml │ │ ├── item_history_pgc.xml │ │ ├── item_history_video.xml │ │ ├── item_hot_search.xml │ │ ├── item_live_road.xml │ │ ├── item_partition_home_recommend.xml │ │ ├── item_partition_video.xml │ │ ├── item_pgc_episode.xml │ │ ├── item_pgc_recommend.xml │ │ ├── item_pgc_season.xml │ │ ├── item_pgc_section.xml │ │ ├── item_pgc_section_content.xml │ │ ├── item_picture.xml │ │ ├── item_popular.xml │ │ ├── item_rank_pgc.xml │ │ ├── item_reply.xml │ │ ├── item_search_result_bangumi.xml │ │ ├── item_search_result_ft.xml │ │ ├── item_search_result_live.xml │ │ ├── item_search_suggestion.xml │ │ ├── item_setting_dialog.xml │ │ ├── item_text.xml │ │ ├── item_user.xml │ │ ├── item_user_article.xml │ │ ├── item_user_audio.xml │ │ ├── item_user_order.xml │ │ ├── item_user_picture.xml │ │ ├── item_video.xml │ │ ├── item_video_b.xml │ │ ├── item_video_episode.xml │ │ ├── item_video_quality.xml │ │ ├── item_video_section.xml │ │ ├── item_video_speed.xml │ │ ├── page_filter_recycler.xml │ │ ├── page_filter_refresh.xml │ │ ├── page_pagination.xml │ │ ├── page_recycler.xml │ │ ├── page_sub_recycler.xml │ │ ├── refresh_container.xml │ │ ├── refresh_content.xml │ │ ├── refresh_empty.xml │ │ ├── refresh_loading.xml │ │ └── tab_layout_title.xml │ │ ├── mipmap-anydpi-v26 │ │ ├── app_logo.xml │ │ └── app_logo_round.xml │ │ ├── mipmap-hdpi │ │ ├── app_logo.png │ │ └── app_logo_round.png │ │ ├── mipmap-mdpi │ │ ├── app_logo.png │ │ └── app_logo_round.png │ │ ├── mipmap-xhdpi │ │ ├── app_logo.png │ │ └── app_logo_round.png │ │ ├── mipmap-xxhdpi │ │ ├── app_logo.png │ │ └── app_logo_round.png │ │ ├── mipmap-xxxhdpi │ │ ├── app_logo.png │ │ └── app_logo_round.png │ │ ├── raw │ │ └── we_chat_pay_qrcode.png │ │ ├── values-night │ │ ├── colors.xml │ │ └── themes.xml │ │ ├── values-v28 │ │ └── styles.xml │ │ └── values │ │ ├── app_logo_background.xml │ │ ├── attrs.xml │ │ ├── colors.xml │ │ ├── description.xml │ │ ├── dimens.xml │ │ ├── shapeable_styles.xml │ │ ├── strings.xml │ │ ├── styles.xml │ │ └── themes.xml │ └── test │ └── java │ └── com │ └── leon │ └── bilihub │ └── ExampleUnitTest.java ├── build.gradle ├── gradle.properties ├── gradle └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat └── settings.gradle /.gitignore: -------------------------------------------------------------------------------- 1 | *.iml 2 | .gradle 3 | /local.properties 4 | /.idea/caches 5 | /.idea/libraries 6 | /.idea/modules.xml 7 | /.idea/workspace.xml 8 | /.idea/navEditor.xml 9 | /.idea/assetWizardSettings.xml 10 | .DS_Store 11 | /build 12 | /captures 13 | .externalNativeBuild 14 | .cxx 15 | local.properties 16 | /.idea/ 17 | -------------------------------------------------------------------------------- /.idea/.gitignore: -------------------------------------------------------------------------------- 1 | # Default ignored files 2 | /shelf/ 3 | /workspace.xml 4 | -------------------------------------------------------------------------------- /.idea/.name: -------------------------------------------------------------------------------- 1 | BiliHub -------------------------------------------------------------------------------- /.idea/compiler.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /.idea/git_toolbox_prj.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 9 | 14 | 15 | -------------------------------------------------------------------------------- /.idea/gradle.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 18 | 19 | -------------------------------------------------------------------------------- /.idea/vcs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2020 Leon 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # BiliHub 2 | 3 | ## 📢公告 4 | 5 | - 原项目为[【BiuVideo】](https://github.com/LeonNOV/BiuVideo),由于之前的几个版本存在各种各样的缺陷,所以打算弃坑;以史为鉴,现又开了个新坑**BiliHub**。 6 | - 该项目的开发日志不采用Markdown形式更新,如要了解开发日志请查看提交历史 7 | 8 | ## 📄项目简介 9 | 10 | - 如标题所示,该项目为B站的第三方客户端。 -------------------------------------------------------------------------------- /app/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | src/main/java/com/leon/biuvideo/http/TestValue.java 3 | /release 4 | bilihub.jks -------------------------------------------------------------------------------- /app/bilihub.jks: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeonNOV/BiliHub/7f5432918dcefe14bb99301f1007fc78008efead/app/bilihub.jks -------------------------------------------------------------------------------- /app/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # You can control the set of applied configuration files using the 3 | # proguardFiles setting in build.gradle. 4 | # 5 | # For more details, see 6 | # http://developer.android.com/guide/developing/tools/proguard.html 7 | 8 | # If your project uses WebView with JS, uncomment the following 9 | # and specify the fully qualified class name to the JavaScript interface 10 | # class: 11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 12 | # public *; 13 | #} 14 | 15 | # Uncomment this to preserve the line number information for 16 | # debugging stack traces. 17 | #-keepattributes SourceFile,LineNumberTable 18 | 19 | # If you keep the line number information, uncomment this to 20 | # hide the original source file name. 21 | #-renamesourcefileattribute SourceFile -------------------------------------------------------------------------------- /app/src/androidTest/java/com/leon/bilihub/ExampleInstrumentedTest.kt: -------------------------------------------------------------------------------- 1 | package com.leon.bilihub 2 | 3 | import androidx.test.ext.junit.runners.AndroidJUnit4 4 | import androidx.test.platform.app.InstrumentationRegistry 5 | import org.junit.Assert.assertEquals 6 | import org.junit.Test 7 | import org.junit.runner.RunWith 8 | 9 | /** 10 | * Instrumented test, which will execute on an Android device. 11 | * 12 | * See [testing documentation](http://d.android.com/tools/testing). 13 | */ 14 | @RunWith(AndroidJUnit4::class) 15 | class ExampleInstrumentedTest { 16 | @Test 17 | fun useAppContext() { 18 | // Context of the app under test. 19 | val appContext = InstrumentationRegistry.getInstrumentation().targetContext 20 | assertEquals("com.leon.biuvideo", appContext.packageName) 21 | } 22 | } -------------------------------------------------------------------------------- /app/src/androidTest/java/com/leon/bilihub/TestA.java: -------------------------------------------------------------------------------- 1 | package com.leon.bilihub; 2 | 3 | import android.content.Context; 4 | 5 | import androidx.test.ext.junit.runners.AndroidJUnit4; 6 | import androidx.test.platform.app.InstrumentationRegistry; 7 | 8 | import org.junit.Test; 9 | import org.junit.runner.RunWith; 10 | 11 | /** 12 | * @Author Leon 13 | * @Time 2022/06/22 14 | * @Desc 15 | */ 16 | @RunWith(AndroidJUnit4.class) 17 | public class TestA { 18 | private static final String TAG = "WwwW"; 19 | 20 | @Test 21 | public void aaa() { 22 | Context appContext = InstrumentationRegistry.getInstrumentation().getTargetContext(); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /app/src/main/app_logo-playstore.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeonNOV/BiliHub/7f5432918dcefe14bb99301f1007fc78008efead/app/src/main/app_logo-playstore.png -------------------------------------------------------------------------------- /app/src/main/java/com/leon/bilihub/base/BindingInterface.java: -------------------------------------------------------------------------------- 1 | package com.leon.bilihub.base; 2 | 3 | import androidx.viewbinding.ViewBinding; 4 | 5 | /** 6 | * @Author Leon 7 | * @Time 2021/10/10 8 | * @Desc 9 | */ 10 | public interface BindingInterface { 11 | /** 12 | * 获取ViewBinding 13 | * 14 | * @return T extends ViewBinding 15 | */ 16 | T getViewBinding(); 17 | } 18 | -------------------------------------------------------------------------------- /app/src/main/java/com/leon/bilihub/base/baseFragment/BaseLazyFragment.java: -------------------------------------------------------------------------------- 1 | package com.leon.bilihub.base.baseFragment; 2 | 3 | import androidx.viewbinding.ViewBinding; 4 | 5 | /** 6 | * @Author Leon 7 | * @Time 2021/3/26 8 | * @Desc 懒加载Fragment,需要配合ViewPager2使用 9 | */ 10 | public abstract class BaseLazyFragment extends BaseFragment { 11 | protected static final String TAG = "WwwW"; 12 | 13 | /** 14 | * 数据读取标记 15 | */ 16 | protected boolean isLoaded = false; 17 | 18 | @Override 19 | public void onResume() { 20 | super.onResume(); 21 | if (!isLoaded) { 22 | onLazyLoad(); 23 | isLoaded = true; 24 | } 25 | } 26 | 27 | /** 28 | * 加载数据 29 | */ 30 | protected abstract void onLazyLoad (); 31 | } -------------------------------------------------------------------------------- /app/src/main/java/com/leon/bilihub/http/BaseUrl.java: -------------------------------------------------------------------------------- 1 | package com.leon.bilihub.http; 2 | 3 | import androidx.annotation.StringDef; 4 | 5 | import java.lang.annotation.RetentionPolicy; 6 | 7 | import java.lang.annotation.ElementType; 8 | import java.lang.annotation.Retention; 9 | import java.lang.annotation.Target; 10 | 11 | /** 12 | * @Author Leon 13 | * @Time 2022/06/30 14 | * @Desc 15 | */ 16 | @Retention(RetentionPolicy.SOURCE) 17 | @Target({ElementType.PARAMETER, ElementType.FIELD}) 18 | @StringDef(value = {BaseUrl.APP, BaseUrl.API, BaseUrl.VERSION_API, BaseUrl.SEARCH, BaseUrl.MAIN, BaseUrl.LIVE, BaseUrl.CONFIG}) 19 | public @interface BaseUrl { 20 | 21 | /** 22 | * default baseUrl 23 | */ 24 | String APP = "https://app.bilibili.com/"; 25 | String API = "https://api.bilibili.com/"; 26 | String VERSION_API = "https://gitcode.net/"; 27 | String SEARCH = "https://s.search.bilibili.com/"; 28 | String MAIN = "https://www.bilibili.com/"; 29 | String LIVE = "http://api.live.bilibili.com/"; 30 | String CONFIG = "https://gitee.com/leon_xf/bili-hub-proxy/raw/"; 31 | } 32 | -------------------------------------------------------------------------------- /app/src/main/java/com/leon/bilihub/http/BiliHost.java: -------------------------------------------------------------------------------- 1 | package com.leon.bilihub.http; 2 | 3 | /** 4 | * @Author Leon 5 | * @Time 2023/05/02 6 | * @Desc 7 | */ 8 | public interface BiliHost { 9 | String API = "api.bilibili.com"; 10 | } 11 | -------------------------------------------------------------------------------- /app/src/main/java/com/leon/bilihub/http/DataStoreKey.java: -------------------------------------------------------------------------------- 1 | package com.leon.bilihub.http; 2 | 3 | /** 4 | * @Author Leon 5 | * @Time 2022/07/30 6 | * @Desc 7 | */ 8 | public class DataStoreKey { 9 | public static final String UID = "uid"; 10 | public static final String CSRF = "csrf"; 11 | public static final String COOKIE = "Cookie"; 12 | public static final String LOGIN_STATUS = "loginStatus"; 13 | public static final String VIP_STATUS = "vipStatus"; 14 | 15 | public static final String VIDEO_QUALITY = "videoQuality"; 16 | public static final String VIDEO_QUALITY_DISPLAY = "videoQualityDisplay"; 17 | 18 | public static final String LIVE_QUALITY = "liveQuality"; 19 | public static final String LIVE_QUALITY_DISPLAY = "liveQualityDisplay"; 20 | 21 | public static final String RECOMMEND_STYLE = "recommendStyle"; 22 | public static final String IMG_MODE = "imgMode"; 23 | public static final String LIST_ANIM_STATUS = "listAnimStatus"; 24 | public static final String DARK_MODE = "darkMode"; 25 | public static final String PROXY = "proxy"; 26 | public static final String IMG_KEY = "imgKey"; 27 | public static final String SUB_KEY = "subKey"; 28 | } 29 | -------------------------------------------------------------------------------- /app/src/main/java/com/leon/bilihub/http/PostApi.java: -------------------------------------------------------------------------------- 1 | package com.leon.bilihub.http; 2 | 3 | import com.leon.bilihub.beans.post.CreateGroup; 4 | 5 | import io.reactivex.rxjava3.core.Observable; 6 | import retrofit2.http.Field; 7 | import retrofit2.http.FormUrlEncoded; 8 | import retrofit2.http.POST; 9 | 10 | /** 11 | * @Author Leon 12 | * @Time 2022/09/15 13 | * @Desc 14 | */ 15 | public interface PostApi { 16 | /** 17 | * 创建分组 18 | *

19 | * https://api.bilibili.com/x/relation/tag/create 20 | * 21 | * @param groupName 新建组名称 22 | * @param csrf csrf 23 | * @return {@link CreateGroup} 24 | */ 25 | @POST("x/relation/tag/create") 26 | @FormUrlEncoded 27 | Observable createRelationGroup(@Field("tag") String groupName, @Field("csrf") String csrf); 28 | } 29 | -------------------------------------------------------------------------------- /app/src/main/java/com/leon/bilihub/http/RequestData.java: -------------------------------------------------------------------------------- 1 | package com.leon.bilihub.http; 2 | 3 | import android.content.Context; 4 | 5 | import com.leon.bilihub.utils.PreferenceUtils; 6 | 7 | import java.util.Map; 8 | 9 | /** 10 | * @Author Leon 11 | * @Time 2022/07/06 12 | * @Desc 13 | */ 14 | public class RequestData { 15 | public static final String USER_AGENT = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36 Edg/105.0.1343.50"; 16 | 17 | private final @BaseUrl String baseUrl; 18 | private Map headers; 19 | 20 | public RequestData(@BaseUrl String baseUrl) { 21 | this.baseUrl = baseUrl; 22 | } 23 | 24 | public RequestData(@BaseUrl String baseUrl, Map headers) { 25 | this.baseUrl = baseUrl; 26 | this.headers = headers; 27 | } 28 | 29 | public RequestData(@BaseUrl String baseUrl, Context context) { 30 | this.baseUrl = baseUrl; 31 | headers = Map.of(HttpApi.COOKIE, PreferenceUtils.getCookie(context), 32 | "Origin", "https://www.bilibili.com/", 33 | "User-Agent", USER_AGENT); 34 | } 35 | 36 | public String getBaseUrl() { 37 | return baseUrl; 38 | } 39 | 40 | public Map getHeaders() { 41 | return headers; 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /app/src/main/java/com/leon/bilihub/ui/activities/ProfileActivity.java: -------------------------------------------------------------------------------- 1 | package com.leon.bilihub.ui.activities; 2 | 3 | import android.view.View; 4 | import android.widget.Toast; 5 | 6 | import com.leon.bilihub.base.baseActivity.BaseActivity; 7 | import com.leon.bilihub.databinding.ActivityProfileBinding; 8 | 9 | /** 10 | * @Author Leon 11 | * @Time 2022/07/15 12 | * @Desc todo 后期版本加入 13 | */ 14 | public class ProfileActivity extends BaseActivity { 15 | @Override 16 | public ActivityProfileBinding getViewBinding() { 17 | return ActivityProfileBinding.inflate(getLayoutInflater()); 18 | } 19 | 20 | @Override 21 | protected void init() { 22 | binding.more.setOnClickListener(v -> binding.detailInfo.setVisibility(binding.detailInfo.getVisibility() == View.GONE ? View.VISIBLE : View.INVISIBLE)); 23 | binding.edit.setOnClickListener(v -> Toast.makeText(context, "开发中…", Toast.LENGTH_SHORT).show()); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /app/src/main/java/com/leon/bilihub/ui/activities/drawerFunction/PopularActivity.java: -------------------------------------------------------------------------------- 1 | package com.leon.bilihub.ui.activities.drawerFunction; 2 | 3 | import com.leon.bilihub.base.baseActivity.BaseActivity; 4 | import com.leon.bilihub.databinding.ActivityPopularBinding; 5 | import com.leon.bilihub.ui.fragments.drawerFragments.popularFragments.HotFragment; 6 | import com.leon.bilihub.ui.fragments.drawerFragments.popularFragments.PreciousFragment; 7 | import com.leon.bilihub.ui.fragments.drawerFragments.popularFragments.RankFragment; 8 | import com.leon.bilihub.ui.fragments.drawerFragments.popularFragments.WeeklyFragment; 9 | import com.leon.bilihub.utils.ViewUtils; 10 | 11 | import java.util.List; 12 | 13 | /** 14 | * @Author Leon 15 | * @Time 2022/7/3 16 | * @Desc 17 | */ 18 | public class PopularActivity extends BaseActivity { 19 | 20 | @Override 21 | public ActivityPopularBinding getViewBinding() { 22 | return ActivityPopularBinding.inflate(getLayoutInflater()); 23 | } 24 | 25 | @Override 26 | protected void init() { 27 | ViewUtils.initTabLayout(this, binding.content.tabLayout, binding.content.viewPager, 28 | List.of(new HotFragment(), new WeeklyFragment(), new PreciousFragment(), new RankFragment()), 29 | "综合热门", "每周必看", "入站必刷", "全站排行榜"); 30 | } 31 | } -------------------------------------------------------------------------------- /app/src/main/java/com/leon/bilihub/ui/activities/publicActivities/DownloadActivity.java: -------------------------------------------------------------------------------- 1 | package com.leon.bilihub.ui.activities.publicActivities; 2 | 3 | import com.leon.bilihub.base.baseActivity.BaseActivity; 4 | import com.leon.bilihub.databinding.ActivityDownloadBinding; 5 | 6 | /** 7 | * @Author Leon 8 | * @Time 2022/7/12 9 | * @Desc 10 | */ 11 | public class DownloadActivity extends BaseActivity { 12 | 13 | @Override 14 | public ActivityDownloadBinding getViewBinding() { 15 | return ActivityDownloadBinding.inflate(getLayoutInflater()); 16 | } 17 | 18 | @Override 19 | protected void init() { 20 | 21 | } 22 | } -------------------------------------------------------------------------------- /app/src/main/java/com/leon/bilihub/ui/adapters/ViewPager2Adapter.java: -------------------------------------------------------------------------------- 1 | package com.leon.bilihub.ui.adapters; 2 | 3 | import androidx.annotation.NonNull; 4 | import androidx.fragment.app.Fragment; 5 | import androidx.recyclerview.widget.RecyclerView; 6 | import androidx.viewpager2.adapter.FragmentStateAdapter; 7 | 8 | import com.leon.bilihub.base.baseActivity.BaseActivity; 9 | 10 | import java.util.List; 11 | 12 | /** 13 | * @Author Leon 14 | * @Time 2021/03/20 15 | * @Desc ViewPager2适配器 16 | */ 17 | public class ViewPager2Adapter extends FragmentStateAdapter { 18 | private final List fragments; 19 | 20 | public ViewPager2Adapter(BaseActivity fragmentActivity, List fragments) { 21 | super(fragmentActivity); 22 | 23 | this.fragments = fragments; 24 | } 25 | 26 | @NonNull 27 | @Override 28 | public Fragment createFragment(int position) { 29 | return fragments.get(position); 30 | } 31 | 32 | @Override 33 | public int getItemCount() { 34 | return fragments.size(); 35 | } 36 | 37 | @Override 38 | public void onAttachedToRecyclerView(@NonNull RecyclerView recyclerView) { 39 | super.onAttachedToRecyclerView(recyclerView); 40 | recyclerView.setItemViewCacheSize(getItemCount()); 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /app/src/main/java/com/leon/bilihub/ui/adapters/video/pgc/PgcSectionAdapter.java: -------------------------------------------------------------------------------- 1 | package com.leon.bilihub.ui.adapters.video.pgc; 2 | 3 | import android.content.Context; 4 | import android.view.LayoutInflater; 5 | import android.view.ViewGroup; 6 | 7 | import com.leon.bilihub.R; 8 | import com.leon.bilihub.base.baseAdapter.ViewBindingAdapter; 9 | import com.leon.bilihub.beans.publicBeans.resources.video.PgcDetail; 10 | import com.leon.bilihub.databinding.ItemPgcSectionBinding; 11 | import com.leon.bilihub.utils.ViewUtils; 12 | 13 | /** 14 | * @Author Leon 15 | * @Time 2022/08/21 16 | * @Desc 17 | */ 18 | public class PgcSectionAdapter extends ViewBindingAdapter { 19 | public PgcSectionAdapter(Context context) { 20 | super(context); 21 | } 22 | 23 | @Override 24 | protected ItemPgcSectionBinding getItemViewBinding(Context context, ViewGroup parent) { 25 | return ItemPgcSectionBinding.bind(LayoutInflater.from(context).inflate(R.layout.item_pgc_section, parent, false)); 26 | } 27 | 28 | @Override 29 | protected void onBindViewHolder(PgcDetail.Result.Section data, ItemPgcSectionBinding binding, int position) { 30 | binding.title.setText(data.getTitle()); 31 | 32 | PgcSectionContentAdapter adapter = new PgcSectionContentAdapter(context); 33 | adapter.appendHead(data.getEpisodes()); 34 | ViewUtils.listInitializer(binding.subContent, adapter); 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /app/src/main/java/com/leon/bilihub/ui/fragments/searchResultFragments/SearchResultComprehensiveFragment.java: -------------------------------------------------------------------------------- 1 | package com.leon.bilihub.ui.fragments.searchResultFragments; 2 | 3 | import com.leon.bilihub.base.baseFragment.BaseLazyFragment; 4 | import com.leon.bilihub.databinding.PageFilterRefreshBinding; 5 | 6 | /** 7 | * @Author Leon 8 | * @Time 2022/06/23 9 | * @Desc 10 | */ 11 | public class SearchResultComprehensiveFragment extends BaseLazyFragment { 12 | private final String keyword; 13 | 14 | public SearchResultComprehensiveFragment(String keyword) { 15 | this.keyword = keyword; 16 | } 17 | 18 | @Override 19 | public PageFilterRefreshBinding getViewBinding() { 20 | return PageFilterRefreshBinding.inflate(getLayoutInflater()); 21 | } 22 | 23 | @Override 24 | protected void initView() { 25 | 26 | } 27 | 28 | @Override 29 | protected void onLazyLoad() { 30 | 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /app/src/main/java/com/leon/bilihub/utils/converter/ResponseBodyConverter.java: -------------------------------------------------------------------------------- 1 | package com.leon.bilihub.utils.converter; 2 | 3 | import com.google.gson.JsonObject; 4 | import com.google.gson.JsonParser; 5 | import com.google.gson.TypeAdapter; 6 | 7 | import java.io.IOException; 8 | 9 | import okhttp3.ResponseBody; 10 | import retrofit2.Converter; 11 | 12 | /** 13 | * @Author Leon 14 | * @Time 2023/05/03 15 | * @Desc 16 | */ 17 | public class ResponseBodyConverter implements Converter { 18 | private final TypeAdapter adapter; 19 | private final ConverterFactory.ConverterMiddleware converterMiddleware; 20 | 21 | public ResponseBodyConverter(TypeAdapter adapter, ConverterFactory.ConverterMiddleware converterMiddleware) { 22 | this.adapter = adapter; 23 | this.converterMiddleware = converterMiddleware; 24 | } 25 | 26 | @Override 27 | public T convert(ResponseBody value) throws IOException { 28 | JsonObject jsonObject = JsonParser.parseString(value.string()).getAsJsonObject(); 29 | return adapter.fromJsonTree(converterMiddleware.process(jsonObject)); 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /app/src/main/kotlin/com/leon/bilihub/beans/Config.kt: -------------------------------------------------------------------------------- 1 | package com.leon.bilihub.beans 2 | 3 | 4 | import com.google.gson.annotations.SerializedName 5 | import kotlinx.parcelize.Parcelize 6 | import android.os.Parcelable 7 | 8 | @Parcelize 9 | data class Config( 10 | @SerializedName("proxy") 11 | val proxy: Proxy, 12 | @SerializedName("version") 13 | val version: Version 14 | ) : Parcelable { 15 | @Parcelize 16 | data class Proxy( 17 | @SerializedName("url") 18 | val url: String 19 | ) : Parcelable 20 | 21 | @Parcelize 22 | data class Version( 23 | @SerializedName("versionCode") 24 | val versionCode: Int, 25 | @SerializedName("versionName") 26 | val versionName: String, 27 | @SerializedName("desc") 28 | val desc: String, 29 | @SerializedName("apkList") 30 | val apkList: String, 31 | @SerializedName("apk") 32 | val apk: String 33 | ) : Parcelable 34 | } -------------------------------------------------------------------------------- /app/src/main/kotlin/com/leon/bilihub/beans/account/FavoriteFolder.kt: -------------------------------------------------------------------------------- 1 | package com.leon.bilihub.beans.account 2 | 3 | import com.google.gson.annotations.SerializedName 4 | import android.os.Parcelable 5 | import kotlinx.parcelize.Parcelize 6 | 7 | @Parcelize 8 | data class FavoriteFolder( 9 | @SerializedName("code") 10 | val code: Int, 11 | @SerializedName("data") 12 | val `data`: Data, 13 | @SerializedName("message") 14 | val message: String, 15 | @SerializedName("ttl") 16 | val ttl: Int 17 | ) : Parcelable { 18 | @Parcelize 19 | data class Data( 20 | @SerializedName("count") 21 | val count: Int, 22 | @SerializedName("list") 23 | val list: List 24 | ) : Parcelable { 25 | @Parcelize 26 | data class Folder( 27 | @SerializedName("attr") 28 | val attr: Int, 29 | @SerializedName("fav_state") 30 | val favState: Int, 31 | @SerializedName("fid") 32 | val fid: Int, 33 | @SerializedName("id") 34 | val id: String, 35 | @SerializedName("media_count") 36 | val mediaCount: Int, 37 | @SerializedName("mid") 38 | val mid: String, 39 | @SerializedName("title") 40 | val title: String 41 | ) : Parcelable 42 | } 43 | } -------------------------------------------------------------------------------- /app/src/main/kotlin/com/leon/bilihub/beans/account/FolderDetailMedia.kt: -------------------------------------------------------------------------------- 1 | package com.leon.bilihub.beans.account 2 | 3 | import android.os.Parcelable 4 | import kotlinx.parcelize.Parcelize 5 | 6 | /** 7 | * @Author Leon 8 | * @Time 2022/08/03 9 | * @Desc 10 | */ 11 | @Parcelize 12 | class FolderDetailMedia( 13 | val Bvid: String, 14 | val Cover: String, 15 | val Duration: Int, 16 | val Title: String, 17 | val author: String, 18 | val Play: Int, 19 | val Collect: Int 20 | ) : Parcelable -------------------------------------------------------------------------------- /app/src/main/kotlin/com/leon/bilihub/beans/account/RelationTags.kt: -------------------------------------------------------------------------------- 1 | package com.leon.bilihub.beans.account 2 | 3 | import com.google.gson.annotations.SerializedName 4 | import android.os.Parcelable 5 | import kotlinx.parcelize.Parcelize 6 | 7 | @Parcelize 8 | data class RelationTags( 9 | @SerializedName("code") 10 | val code: Int, 11 | @SerializedName("data") 12 | val `data`: List, 13 | @SerializedName("message") 14 | val message: String, 15 | @SerializedName("ttl") 16 | val ttl: Int 17 | ) : Parcelable { 18 | @Parcelize 19 | data class Data( 20 | @SerializedName("count") 21 | val count: Int, 22 | @SerializedName("name") 23 | val name: String, 24 | @SerializedName("tagid") 25 | val tagid: String, 26 | @SerializedName("tip") 27 | val tip: String, 28 | var isSelected: Boolean 29 | ) : Parcelable 30 | } -------------------------------------------------------------------------------- /app/src/main/kotlin/com/leon/bilihub/beans/home/AccountViewModel.kt: -------------------------------------------------------------------------------- 1 | package com.leon.bilihub.beans.home 2 | 3 | import androidx.lifecycle.MutableLiveData 4 | import androidx.lifecycle.ViewModel 5 | 6 | /** 7 | * @Author Leon 8 | * @Time 2022/07/30 9 | * @Desc 10 | */ 11 | class AccountViewModel : ViewModel() { 12 | val loginStatus: MutableLiveData by lazy { 13 | MutableLiveData() 14 | } 15 | } -------------------------------------------------------------------------------- /app/src/main/kotlin/com/leon/bilihub/beans/home/channel/ChannelCategory.kt: -------------------------------------------------------------------------------- 1 | package com.leon.bilihub.beans.home.channel 2 | 3 | import com.google.gson.annotations.SerializedName 4 | import android.os.Parcelable 5 | import kotlinx.parcelize.Parcelize 6 | 7 | @Parcelize 8 | data class ChannelCategory( 9 | @SerializedName("code") 10 | val code: Int, 11 | @SerializedName("data") 12 | val `data`: Data, 13 | @SerializedName("message") 14 | val message: String, 15 | @SerializedName("ttl") 16 | val ttl: Int 17 | ) : Parcelable { 18 | @Parcelize 19 | data class Data( 20 | @SerializedName("categories") 21 | val categories: List 22 | ) : Parcelable { 23 | @Parcelize 24 | data class Category( 25 | @SerializedName("channel_count") 26 | val channelCount: String, 27 | @SerializedName("id") 28 | val id: Int, 29 | @SerializedName("name") 30 | val name: String 31 | ) : Parcelable 32 | } 33 | } -------------------------------------------------------------------------------- /app/src/main/kotlin/com/leon/bilihub/beans/home/drawerFunction/Series.kt: -------------------------------------------------------------------------------- 1 | package com.leon.bilihub.beans.home.drawerFunction 2 | 3 | 4 | import com.google.gson.annotations.SerializedName 5 | import android.os.Parcelable 6 | import kotlinx.parcelize.Parcelize 7 | 8 | @Parcelize 9 | data class Series( 10 | @SerializedName("code") 11 | val code: Int, 12 | @SerializedName("data") 13 | val `data`: Data, 14 | @SerializedName("message") 15 | val message: String, 16 | @SerializedName("ttl") 17 | val ttl: Int 18 | ) : Parcelable { 19 | @Parcelize 20 | data class Data( 21 | @SerializedName("list") 22 | val list: List 23 | ) : Parcelable { 24 | 25 | @Parcelize 26 | data class Item( 27 | @SerializedName("name") 28 | val name: String, 29 | @SerializedName("number") 30 | val number: Int, 31 | @SerializedName("status") 32 | val status: Int, 33 | @SerializedName("subject") 34 | val subject: String 35 | ) : Parcelable 36 | } 37 | } -------------------------------------------------------------------------------- /app/src/main/kotlin/com/leon/bilihub/beans/home/drawerFunction/popular/PopularData.kt: -------------------------------------------------------------------------------- 1 | package com.leon.bilihub.beans.home.drawerFunction.popular 2 | 3 | import android.os.Parcelable 4 | import com.leon.bilihub.ui.adapters.drawer.popular.PopularAdapter 5 | import kotlinx.parcelize.Parcelize 6 | 7 | /** 8 | * @Author Leon 9 | * @Time 2022/08/03 10 | * @Desc 11 | */ 12 | @Parcelize 13 | data class PopularData( 14 | val type: PopularAdapter.PopularType, 15 | val cover: String, 16 | val duration: Int, 17 | val title: String, 18 | val author: String, 19 | val play: Int, 20 | val danmaku: Int, 21 | val reason: String, 22 | val id: String 23 | ) : Parcelable 24 | -------------------------------------------------------------------------------- /app/src/main/kotlin/com/leon/bilihub/beans/partition/Partition.kt: -------------------------------------------------------------------------------- 1 | package com.leon.bilihub.beans.partition 2 | 3 | import com.google.gson.annotations.SerializedName 4 | import android.os.Parcelable 5 | import kotlinx.parcelize.Parcelize 6 | 7 | @Parcelize 8 | data class Partition( 9 | @SerializedName("channelId") 10 | val channelId: Int, 11 | @SerializedName("icon") 12 | val icon: String, 13 | @SerializedName("name") 14 | val name: String, 15 | @SerializedName("route") 16 | val route: String, 17 | @SerializedName("sub") 18 | val subs: ArrayList, 19 | @SerializedName("tid") 20 | val tid: Int, 21 | @SerializedName("url") 22 | val url: String 23 | ) : Parcelable { 24 | @Parcelize 25 | data class Sub( 26 | @SerializedName("desc") 27 | val desc: String, 28 | @SerializedName("name") 29 | val name: String, 30 | @SerializedName("route") 31 | val route: String, 32 | @SerializedName("subChannelId") 33 | val subChannelId: Int, 34 | @SerializedName("tid") 35 | val tid: Int?, 36 | @SerializedName("url") 37 | val url: String 38 | ) : Parcelable 39 | } -------------------------------------------------------------------------------- /app/src/main/kotlin/com/leon/bilihub/beans/partition/PartitionTag.kt: -------------------------------------------------------------------------------- 1 | package com.leon.bilihub.beans.partition 2 | 3 | import com.google.gson.annotations.SerializedName 4 | import android.os.Parcelable 5 | import kotlinx.parcelize.Parcelize 6 | 7 | @Parcelize 8 | data class PartitionTag( 9 | @SerializedName("code") 10 | val code: Int, 11 | @SerializedName("data") 12 | val `data`: List, 13 | @SerializedName("message") 14 | val message: String, 15 | @SerializedName("ttl") 16 | val ttl: Int 17 | ) : Parcelable { 18 | @Parcelize 19 | data class Data( 20 | @SerializedName("rid") 21 | val rid: Int, 22 | @SerializedName("tags") 23 | val tags: List 24 | ) : Parcelable { 25 | @Parcelize 26 | data class Tag( 27 | @SerializedName("highlight") 28 | val highlight: Int, 29 | @SerializedName("is_atten") 30 | val isAtten: Int, 31 | @SerializedName("tag_id") 32 | val tagId: Int, 33 | @SerializedName("tag_name") 34 | val tagName: String 35 | ) : Parcelable 36 | } 37 | } -------------------------------------------------------------------------------- /app/src/main/kotlin/com/leon/bilihub/beans/post/CreateGroup.kt: -------------------------------------------------------------------------------- 1 | package com.leon.bilihub.beans.post 2 | 3 | 4 | import com.google.gson.annotations.SerializedName 5 | import kotlinx.parcelize.Parcelize 6 | import android.os.Parcelable 7 | 8 | @Parcelize 9 | data class CreateGroup( 10 | @SerializedName("code") 11 | val code: Int, 12 | @SerializedName("data") 13 | val `data`: Data?, 14 | @SerializedName("message") 15 | val message: String, 16 | @SerializedName("ttl") 17 | val ttl: Int 18 | ) : Parcelable { 19 | @Parcelize 20 | data class Data( 21 | @SerializedName("tagid") 22 | val tagid: String 23 | ) : Parcelable 24 | } -------------------------------------------------------------------------------- /app/src/main/kotlin/com/leon/bilihub/beans/publicBeans/resources/audio/AudioResources.kt: -------------------------------------------------------------------------------- 1 | package com.leon.bilihub.beans.publicBeans.resources.audio 2 | 3 | import com.google.gson.annotations.SerializedName 4 | import android.os.Parcelable 5 | import kotlinx.parcelize.Parcelize 6 | 7 | @Parcelize 8 | data class AudioResources( 9 | @SerializedName("code") 10 | val code: Int, 11 | @SerializedName("data") 12 | val `data`: Data, 13 | @SerializedName("msg") 14 | val msg: String 15 | ) : Parcelable { 16 | @Parcelize 17 | data class Data( 18 | @SerializedName("cdns") 19 | val cdns: List, 20 | @SerializedName("info") 21 | val info: String, 22 | @SerializedName("sid") 23 | val sid: Int, 24 | @SerializedName("size") 25 | val size: Int, 26 | @SerializedName("timeout") 27 | val timeout: Int, 28 | @SerializedName("type") 29 | val type: Int 30 | ) : Parcelable 31 | } -------------------------------------------------------------------------------- /app/src/main/kotlin/com/leon/bilihub/beans/publicBeans/resources/video/VideoQuality.kt: -------------------------------------------------------------------------------- 1 | package com.leon.bilihub.beans.publicBeans.resources.video 2 | 3 | import android.os.Parcelable 4 | import com.leon.bilihub.http.Quality 5 | import kotlinx.parcelize.Parcelize 6 | 7 | /** 8 | * @Author Leon 9 | * @Time 2022/08/19 10 | * @Desc 11 | */ 12 | @Parcelize 13 | data class VideoQuality( 14 | val extra: String?, 15 | 16 | /** 17 | * 是否为普通画质,即不需要会员 18 | */ 19 | val isOrdinary: Boolean, 20 | var selected: Boolean, 21 | val quality: Quality, 22 | val qualityInt: Int, 23 | val qualityStr: String 24 | ) : Parcelable 25 | -------------------------------------------------------------------------------- /app/src/main/kotlin/com/leon/bilihub/beans/publicBeans/resources/video/VideoRelation.kt: -------------------------------------------------------------------------------- 1 | package com.leon.bilihub.beans.publicBeans.resources.video 2 | 3 | import com.google.gson.annotations.SerializedName 4 | import android.os.Parcelable 5 | import kotlinx.parcelize.Parcelize 6 | 7 | @Parcelize 8 | data class VideoRelation( 9 | @SerializedName("code") 10 | val code: Int, 11 | @SerializedName("data") 12 | val `data`: Data, 13 | @SerializedName("message") 14 | val message: String, 15 | @SerializedName("ttl") 16 | val ttl: Int 17 | ) : Parcelable { 18 | @Parcelize 19 | data class Data( 20 | @SerializedName("attention") 21 | val attention: Boolean, 22 | @SerializedName("coin") 23 | val coin: Int, 24 | @SerializedName("dislike") 25 | val dislike: Boolean, 26 | @SerializedName("favorite") 27 | val favorite: Boolean, 28 | @SerializedName("like") 29 | val like: Boolean, 30 | @SerializedName("season_fav") 31 | val seasonFav: Boolean 32 | ) : Parcelable 33 | } -------------------------------------------------------------------------------- /app/src/main/kotlin/com/leon/bilihub/beans/publicBeans/resources/video/VideoSpeed.kt: -------------------------------------------------------------------------------- 1 | package com.leon.bilihub.beans.publicBeans.resources.video 2 | 3 | import android.os.Parcelable 4 | import kotlinx.parcelize.Parcelize 5 | 6 | /** 7 | * @Author Leon 8 | * @Time 2022/08/20 9 | * @Desc 10 | */ 11 | @Parcelize 12 | data class VideoSpeed(val speed: Float, val speedStr: String, var selected: Boolean) : Parcelable 13 | -------------------------------------------------------------------------------- /app/src/main/kotlin/com/leon/bilihub/beans/publicBeans/resources/video/VideoSubtitle.kt: -------------------------------------------------------------------------------- 1 | package com.leon.bilihub.beans.publicBeans.resources.video 2 | 3 | 4 | import com.google.gson.annotations.SerializedName 5 | import kotlinx.parcelize.Parcelize 6 | import android.os.Parcelable 7 | 8 | @Parcelize 9 | data class VideoSubtitle( 10 | @SerializedName("background_alpha") 11 | val backgroundAlpha: Double, 12 | @SerializedName("background_color") 13 | val backgroundColor: String, 14 | @SerializedName("body") 15 | val body: List, 16 | @SerializedName("font_color") 17 | val fontColor: String, 18 | @SerializedName("font_size") 19 | val fontSize: Double, 20 | @SerializedName("Stroke") 21 | val stroke: String 22 | ) : Parcelable { 23 | @Parcelize 24 | data class Body( 25 | @SerializedName("content") 26 | val content: String, 27 | @SerializedName("from") 28 | val from: Double, 29 | @SerializedName("location") 30 | val location: Int, 31 | @SerializedName("to") 32 | val to: Double 33 | ) : Parcelable 34 | } -------------------------------------------------------------------------------- /app/src/main/kotlin/com/leon/bilihub/beans/publicBeans/user/UserStat.kt: -------------------------------------------------------------------------------- 1 | package com.leon.bilihub.beans.publicBeans.user 2 | 3 | 4 | import com.google.gson.annotations.SerializedName 5 | import android.os.Parcelable 6 | import kotlinx.parcelize.Parcelize 7 | 8 | @Parcelize 9 | data class UserStat( 10 | @SerializedName("code") 11 | val code: Int, 12 | @SerializedName("data") 13 | val `data`: Data, 14 | @SerializedName("message") 15 | val message: String, 16 | @SerializedName("ttl") 17 | val ttl: Int 18 | ) : Parcelable { 19 | @Parcelize 20 | data class Data( 21 | @SerializedName("follower") 22 | val follower: Int, 23 | @SerializedName("following") 24 | val following: Int, 25 | @SerializedName("mid") 26 | val mid: String 27 | ) : Parcelable 28 | } -------------------------------------------------------------------------------- /app/src/main/kotlin/com/leon/bilihub/beans/search/SearchSuggestion.kt: -------------------------------------------------------------------------------- 1 | package com.leon.bilihub.beans.search 2 | 3 | 4 | import android.os.Parcelable 5 | import com.google.gson.annotations.SerializedName 6 | import kotlinx.parcelize.Parcelize 7 | 8 | @Parcelize 9 | data class SearchSuggestion( 10 | @SerializedName("result") 11 | val result: Result 12 | ) : Parcelable { 13 | @Parcelize 14 | data class Result( 15 | @SerializedName("tag") 16 | val tag: List 17 | ) : Parcelable { 18 | @Parcelize 19 | data class Tag( 20 | @SerializedName("name") 21 | val name: String, 22 | @SerializedName("ref") 23 | val ref: Int, 24 | @SerializedName("spid") 25 | val spid: Int, 26 | @SerializedName("term") 27 | val term: String, 28 | @SerializedName("value") 29 | val value: String 30 | ) : Parcelable 31 | } 32 | } -------------------------------------------------------------------------------- /app/src/main/kotlin/com/leon/bilihub/http/Rank.kt: -------------------------------------------------------------------------------- 1 | package com.leon.bilihub.http 2 | 3 | import io.reactivex.rxjava3.core.Observable 4 | 5 | /** 6 | * @Author Leon 7 | * @Time 2022/08/06 8 | * @Desc 9 | */ 10 | data class Rank(val name: String, val observer: Observable, val type: Int) 11 | -------------------------------------------------------------------------------- /app/src/main/kotlin/com/leon/bilihub/http/ReplyType.kt: -------------------------------------------------------------------------------- 1 | package com.leon.bilihub.http 2 | 3 | /** 4 | * @Author Leon 5 | * @Time 2022/08/13 6 | * @Desc 7 | */ 8 | enum class ReplyType { 9 | /** 10 | * 视频 11 | */ 12 | Video { 13 | override fun toString(): String { 14 | return "1" 15 | } 16 | }, 17 | 18 | /** 19 | * 相簿 20 | */ 21 | Picture { 22 | override fun toString(): String { 23 | return "11" 24 | } 25 | }, 26 | 27 | /** 28 | * 专栏 29 | */ 30 | Article { 31 | override fun toString(): String { 32 | return "12" 33 | } 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /app/src/main/kotlin/com/leon/bilihub/model/AudioProgressModel.kt: -------------------------------------------------------------------------------- 1 | package com.leon.bilihub.model 2 | 3 | import androidx.lifecycle.MutableLiveData 4 | import androidx.lifecycle.ViewModel 5 | import com.leon.bilihub.wraps.AudioProgressWrap 6 | 7 | /** 8 | * @Author Leon 9 | * @Time 2022/08/29 10 | * @Desc 11 | */ 12 | class AudioProgressModel : ViewModel() { 13 | /** 14 | * 音频 播放进度/缓冲进度/长度 15 | */ 16 | val audioProgress: MutableLiveData by lazy { 17 | MutableLiveData() 18 | } 19 | 20 | } -------------------------------------------------------------------------------- /app/src/main/kotlin/com/leon/bilihub/model/LivePlayerModel.kt: -------------------------------------------------------------------------------- 1 | package com.leon.bilihub.model 2 | 3 | import androidx.lifecycle.MutableLiveData 4 | import androidx.lifecycle.ViewModel 5 | import com.leon.bilihub.beans.publicBeans.resources.live.LiveStream 6 | 7 | /** 8 | * @Author Leon 9 | * @Time 2022/08/25 10 | * @Desc 11 | */ 12 | class LivePlayerModel : ViewModel() { 13 | /** 14 | * 当前已选画质 15 | */ 16 | val liveQuality: MutableLiveData by lazy { 17 | MutableLiveData() 18 | } 19 | 20 | /** 21 | * 可选画质列表 22 | */ 23 | val liveQualityList: MutableLiveData> by lazy { 24 | MutableLiveData>() 25 | } 26 | 27 | /** 28 | * 当前已选路线 29 | */ 30 | val liveRoad: MutableLiveData by lazy { 31 | MutableLiveData() 32 | } 33 | 34 | /** 35 | * 直播线路 36 | */ 37 | val liveRoadList: MutableLiveData> by lazy { 38 | MutableLiveData>() 39 | } 40 | } -------------------------------------------------------------------------------- /app/src/main/kotlin/com/leon/bilihub/model/SettingModel.kt: -------------------------------------------------------------------------------- 1 | package com.leon.bilihub.model 2 | 3 | import androidx.lifecycle.MutableLiveData 4 | import androidx.lifecycle.ViewModel 5 | 6 | /** 7 | * @Author Leon 8 | * @Time 2022/08/25 9 | * @Desc 10 | */ 11 | class SettingModel : ViewModel() { 12 | /** 13 | * 已选默认视频画质 14 | */ 15 | val videoQualityDisplay: MutableLiveData by lazy { 16 | MutableLiveData() 17 | } 18 | 19 | /** 20 | * 已选默认直播画质 21 | */ 22 | val liveQualityDisplay: MutableLiveData by lazy { 23 | MutableLiveData() 24 | } 25 | 26 | /** 27 | * 已选样式 28 | */ 29 | val recommendStyle: MutableLiveData by lazy { 30 | MutableLiveData() 31 | } 32 | } -------------------------------------------------------------------------------- /app/src/main/kotlin/com/leon/bilihub/ui/ViewPagerTouchMonitorListener.kt: -------------------------------------------------------------------------------- 1 | package com.leon.bilihub.ui 2 | 3 | import android.view.MotionEvent 4 | 5 | /** 6 | * @Author Leon 7 | * @Time 2021/10/29 8 | * @Desc 9 | */ 10 | interface ViewPagerTouchMonitorListener { 11 | 12 | /** 13 | * 触摸监听,防止在ViewPager中上下滑动时出现切换页面的情况 14 | * 15 | * @param event event 16 | */ 17 | fun onTouchEvent(event: MotionEvent?) 18 | } -------------------------------------------------------------------------------- /app/src/main/kotlin/com/leon/bilihub/wraps/AudioProgressWrap.kt: -------------------------------------------------------------------------------- 1 | package com.leon.bilihub.wraps 2 | 3 | /** 4 | * @Author Leon 5 | * @Time 2022/08/29 6 | * @Desc 7 | */ 8 | data class AudioProgressWrap(val currentPosition: Int, val bufferPosition: Int, val duration: Int) 9 | -------------------------------------------------------------------------------- /app/src/main/kotlin/com/leon/bilihub/wraps/LiveQualityWrap.kt: -------------------------------------------------------------------------------- 1 | package com.leon.bilihub.wraps 2 | 3 | /** 4 | * @Author Leon 5 | * @Time 2022/08/25 6 | * @Desc 7 | */ 8 | data class LiveQualityWrap(var quality: Int, var position: Int) 9 | -------------------------------------------------------------------------------- /app/src/main/kotlin/com/leon/bilihub/wraps/LiveRoadWrap.kt: -------------------------------------------------------------------------------- 1 | package com.leon.bilihub.wraps 2 | 3 | /** 4 | * @Author Leon 5 | * @Time 2022/08/25 6 | * @Desc 7 | */ 8 | data class LiveRoadWrap(var road: String, var position: Int) 9 | -------------------------------------------------------------------------------- /app/src/main/kotlin/com/leon/bilihub/wraps/VideoQualityWrap.kt: -------------------------------------------------------------------------------- 1 | package com.leon.bilihub.wraps 2 | 3 | import com.leon.bilihub.http.Quality 4 | 5 | /** 6 | * @Author Leon 7 | * @Time 2022/08/20 8 | * @Desc 9 | */ 10 | data class VideoQualityWrap(val quality: Quality, val position: Int) 11 | -------------------------------------------------------------------------------- /app/src/main/kotlin/com/leon/bilihub/wraps/VideoResourceWrap.kt: -------------------------------------------------------------------------------- 1 | package com.leon.bilihub.wraps 2 | 3 | import com.leon.bilihub.http.Quality 4 | 5 | /** 6 | * @Author Leon 7 | * @Time 2022/08/22 8 | * @Desc 9 | */ 10 | data class VideoResourceWrap(var bvid: String?, var cid: String, var quality: Quality) 11 | -------------------------------------------------------------------------------- /app/src/main/kotlin/com/leon/bilihub/wraps/VideoSpeedWrap.kt: -------------------------------------------------------------------------------- 1 | package com.leon.bilihub.wraps 2 | 3 | /** 4 | * @Author Leon 5 | * @Time 2022/08/20 6 | * @Desc 7 | */ 8 | data class VideoSpeedWrap(val speed: Float,val position: Int) 9 | -------------------------------------------------------------------------------- /app/src/main/res/anim/picture_viewer_enter.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 7 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/anim/picture_viewer_exit.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 7 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/anim/translate_enter_in.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /app/src/main/res/anim/translate_enter_out.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /app/src/main/res/anim/translate_exit_in.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /app/src/main/res/anim/translate_exit_out.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/about_app_gitee.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 12 | 13 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/app_logo.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 12 | 13 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/app_logo_foreground.xml: -------------------------------------------------------------------------------- 1 | 6 | 10 | 13 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/audio_control_bg.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/audio_download.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 12 | 13 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/audio_pause.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/audio_play.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/audio_play_stat.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/audio_play_video.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 12 | 13 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/audio_progress_bar.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 | 29 | 30 | 31 | 32 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/audio_thumb.xml: -------------------------------------------------------------------------------- 1 | 6 | 11 | 14 | 15 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/bg_article.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 7 | 8 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/bg_drawer.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/bg_drawer_face.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/bg_drawer_function.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | 8 | 13 | 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/bg_drawer_navigation.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/bg_editor_dialog_confirm.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/bg_editor_dialog_edit.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/bg_follow.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 7 | 8 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/bili_logo.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/bili_user_level_0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeonNOV/BiliHub/7f5432918dcefe14bb99301f1007fc78008efead/app/src/main/res/drawable/bili_user_level_0.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/bili_user_level_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeonNOV/BiliHub/7f5432918dcefe14bb99301f1007fc78008efead/app/src/main/res/drawable/bili_user_level_1.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/bili_user_level_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeonNOV/BiliHub/7f5432918dcefe14bb99301f1007fc78008efead/app/src/main/res/drawable/bili_user_level_2.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/bili_user_level_3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeonNOV/BiliHub/7f5432918dcefe14bb99301f1007fc78008efead/app/src/main/res/drawable/bili_user_level_3.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/bili_user_level_4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeonNOV/BiliHub/7f5432918dcefe14bb99301f1007fc78008efead/app/src/main/res/drawable/bili_user_level_4.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/bili_user_level_5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeonNOV/BiliHub/7f5432918dcefe14bb99301f1007fc78008efead/app/src/main/res/drawable/bili_user_level_5.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/bili_user_level_6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeonNOV/BiliHub/7f5432918dcefe14bb99301f1007fc78008efead/app/src/main/res/drawable/bili_user_level_6.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/circle_bg.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/dialog_action_cancel.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/dialog_action_confirm.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/donation_amount_wechatpay.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/drawer_function_channel.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/drawer_function_download.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 12 | 13 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/drawer_function_history.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/drawer_function_later.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/drawer_function_order.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/drawer_function_partition.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/drawer_function_rank.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/drawer_function_setting.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 12 | 13 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_add.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_arrow.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_audio_play.xml: -------------------------------------------------------------------------------- 1 | 6 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_b_coin.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_back.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_check.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_check_false.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_check_true.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_clear.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_close.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_coin_a.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_confirm.xml: -------------------------------------------------------------------------------- 1 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_favorite.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_favorite_false.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_favorite_true.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_gender_man.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_gender_woman.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_history_progress.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_home_search.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_like.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_official_verify.xml: -------------------------------------------------------------------------------- 1 | 6 | 11 | 14 | 15 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_person.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_person_verify.xml: -------------------------------------------------------------------------------- 1 | 6 | 11 | 14 | 15 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_refresh.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_time.xml: -------------------------------------------------------------------------------- 1 | 6 | 10 | 16 | 17 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_video_fav.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_view.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/indicator.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 7 | 8 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/item_collect_a.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 12 | 13 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/item_collect_b.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/item_media_type_bg.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 8 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/item_pgc_badge_bg.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 8 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/item_pgc_recommend_badge_bg.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 8 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/item_popular_hot_bg.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 8 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/item_popular_precious_bg.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 8 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/item_popular_weekly_bg.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 8 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/item_quality_vip_bg.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 8 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/item_search_result_live_status_bg.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/item_selection.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/item_selection_false.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | 8 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/item_selection_true.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 9 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/item_user_comment_reply.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 12 | 15 | 18 | 19 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/item_video_badge_bg.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 7 | 8 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/live_icon_popular.xml: -------------------------------------------------------------------------------- 1 | 6 | 13 | 20 | 27 | 28 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/live_icon_view.xml: -------------------------------------------------------------------------------- 1 | 6 | 13 | 20 | 21 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/logout.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/lsp.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeonNOV/BiliHub/7f5432918dcefe14bb99301f1007fc78008efead/app/src/main/res/drawable/lsp.jpg -------------------------------------------------------------------------------- /app/src/main/res/drawable/more_vert.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/partition_dance.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 12 | 15 | 18 | 24 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/partition_game.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 13 | 16 | 20 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/partition_information.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 12 | 15 | 18 | 19 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/partition_life.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 20 | 25 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/partition_sports.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 12 | 13 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/partition_tech.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 12 | 15 | 18 | 19 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/picture_viewer_item_bg.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/player_battery.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 7 | 11 | 15 | 19 | 23 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/player_battery_0.xml: -------------------------------------------------------------------------------- 1 | 6 | 12 | 15 | 21 | 22 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/player_battery_100.xml: -------------------------------------------------------------------------------- 1 | 6 | 12 | 18 | 24 | 25 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/player_battery_25.xml: -------------------------------------------------------------------------------- 1 | 6 | 12 | 15 | 21 | 22 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/player_battery_50.xml: -------------------------------------------------------------------------------- 1 | 6 | 12 | 15 | 21 | 22 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/player_battery_75.xml: -------------------------------------------------------------------------------- 1 | 6 | 12 | 15 | 21 | 22 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/pointer.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/reply_sort.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/res_item_fade.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 10 | 13 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ripple_bg.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ripple_bg_a.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ripple_round_corners6dp_bg.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/round_bg.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/round_corners6dp_bg.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/search_bar_bg.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/search_result_top_bar_bg.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | 8 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/search_suggestion_item_bg.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/setting_dialog_bg.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 7 | 8 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/user_default_banner.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeonNOV/BiliHub/7f5432918dcefe14bb99301f1007fc78008efead/app/src/main/res/drawable/user_default_banner.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/user_face_default.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeonNOV/BiliHub/7f5432918dcefe14bb99301f1007fc78008efead/app/src/main/res/drawable/user_face_default.jpg -------------------------------------------------------------------------------- /app/src/main/res/drawable/user_level_progress_layer.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/user_music_note.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/user_works_comment.xml: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/user_works_like.xml: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/user_works_share.xml: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/video_danmaku_close.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 12 | 15 | 16 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/video_danmaku_status.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/video_fast_forward.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 12 | 13 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/video_fast_retreat.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 12 | 13 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/video_full_screen.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/video_item_extra_bg.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/video_lock.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/video_lock_false.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/video_lock_true.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/video_play.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/video_play_false.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/video_play_true.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 12 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/video_player_bottom_control_bg.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/video_player_title_video_bg.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/video_progress_bar.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 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/video_replay.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/video_status_coin.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/video_status_coin_false.xml: -------------------------------------------------------------------------------- 1 | 6 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/video_status_coin_true.xml: -------------------------------------------------------------------------------- 1 | 6 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/video_status_favorite.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/video_status_favorite_false.xml: -------------------------------------------------------------------------------- 1 | 6 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/video_status_favorite_true.xml: -------------------------------------------------------------------------------- 1 | 6 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/video_status_like.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/video_status_like_false.xml: -------------------------------------------------------------------------------- 1 | 6 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/video_status_like_true.xml: -------------------------------------------------------------------------------- 1 | 6 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/video_status_share.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/video_thumb.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 12 | 13 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/video_volume.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 12 | 15 | 16 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/video_volume_off.xml: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/watch_later_clear.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/watch_later_remove.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_channel.xml: -------------------------------------------------------------------------------- 1 | 2 | 10 | 11 | 15 | 16 | 19 | 20 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_favorite.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 12 | 13 | 16 | 17 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_history.xml: -------------------------------------------------------------------------------- 1 | 2 | 9 | 10 | 14 | 15 | 18 | 19 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_main.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 11 | 12 | 15 | 16 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_order.xml: -------------------------------------------------------------------------------- 1 | 2 | 9 | 10 | 14 | 15 | 20 | 21 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_partition_detail.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 13 | 14 | 17 | 18 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_picture_viewer.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 13 | 14 | 23 | 24 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_popular.xml: -------------------------------------------------------------------------------- 1 | 2 | 9 | 10 | 14 | 15 | 18 | 19 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_setting_quality.xml: -------------------------------------------------------------------------------- 1 | 2 | 9 | 10 | 14 | 15 | 20 | 21 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_user_audio.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 12 | 13 | 16 | 17 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_video.xml: -------------------------------------------------------------------------------- 1 | 2 | 9 | 10 | 14 | 15 | 19 | 20 | 21 | 22 | 28 | 29 | -------------------------------------------------------------------------------- /app/src/main/res/layout/component_player_complete.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 19 | 20 | -------------------------------------------------------------------------------- /app/src/main/res/layout/component_player_controller.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 19 | 20 | 28 | 29 | -------------------------------------------------------------------------------- /app/src/main/res/layout/compose_list.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /app/src/main/res/layout/compose_tab_vp.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 11 | 12 | 19 | 20 | -------------------------------------------------------------------------------- /app/src/main/res/layout/dialog_series.xml: -------------------------------------------------------------------------------- 1 | 2 | 10 | 11 | 18 | 19 | -------------------------------------------------------------------------------- /app/src/main/res/layout/dialog_video_parameter.xml: -------------------------------------------------------------------------------- 1 | 2 | 9 | 10 | 19 | 20 | -------------------------------------------------------------------------------- /app/src/main/res/layout/fragment_channel.xml: -------------------------------------------------------------------------------- 1 | 2 | 9 | 10 | 19 | 20 | 26 | 27 | 30 | 31 | -------------------------------------------------------------------------------- /app/src/main/res/layout/fragment_partition_home.xml: -------------------------------------------------------------------------------- 1 | 2 | 14 | 15 | -------------------------------------------------------------------------------- /app/src/main/res/layout/fragment_popular_weekly.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 19 | 20 | 23 | 24 | -------------------------------------------------------------------------------- /app/src/main/res/layout/fragment_result_article.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/layout/fragment_result_cinephile.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/layout/fragment_result_live.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/layout/fragment_result_user.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/layout/fragment_user_media.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 11 | 12 | 23 | 24 | -------------------------------------------------------------------------------- /app/src/main/res/layout/fragment_video_result.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/layout/item_filter.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /app/src/main/res/layout/item_live_road.xml: -------------------------------------------------------------------------------- 1 | 2 | 11 | 12 | 20 | 21 | -------------------------------------------------------------------------------- /app/src/main/res/layout/item_pgc_section.xml: -------------------------------------------------------------------------------- 1 | 2 | 9 | 10 | 18 | 19 | 25 | 26 | -------------------------------------------------------------------------------- /app/src/main/res/layout/item_picture.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /app/src/main/res/layout/item_search_suggestion.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /app/src/main/res/layout/item_setting_dialog.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /app/src/main/res/layout/item_text.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /app/src/main/res/layout/item_video_episode.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 19 | 20 | 29 | 30 | -------------------------------------------------------------------------------- /app/src/main/res/layout/item_video_speed.xml: -------------------------------------------------------------------------------- 1 | 2 | 11 | 12 | 20 | 21 | -------------------------------------------------------------------------------- /app/src/main/res/layout/page_filter_recycler.xml: -------------------------------------------------------------------------------- 1 | 2 | 10 | 11 | 19 | 20 | 25 | 26 | -------------------------------------------------------------------------------- /app/src/main/res/layout/page_filter_refresh.xml: -------------------------------------------------------------------------------- 1 | 2 | 10 | 11 | 19 | 20 | 23 | 24 | -------------------------------------------------------------------------------- /app/src/main/res/layout/page_pagination.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 11 | 12 | 15 | 16 | -------------------------------------------------------------------------------- /app/src/main/res/layout/page_recycler.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 13 | 14 | 19 | 20 | -------------------------------------------------------------------------------- /app/src/main/res/layout/page_sub_recycler.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/layout/refresh_container.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 12 | 13 | 19 | 20 | 23 | 24 | -------------------------------------------------------------------------------- /app/src/main/res/layout/refresh_content.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 10 | 11 | 14 | 15 | 19 | 20 | -------------------------------------------------------------------------------- /app/src/main/res/layout/refresh_empty.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 13 | 14 | 21 | 22 | -------------------------------------------------------------------------------- /app/src/main/res/layout/refresh_loading.xml: -------------------------------------------------------------------------------- 1 | 2 | 9 | 10 | 17 | 18 | 25 | 26 | -------------------------------------------------------------------------------- /app/src/main/res/layout/tab_layout_title.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /app/src/main/res/mipmap-anydpi-v26/app_logo.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/mipmap-anydpi-v26/app_logo_round.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/app_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeonNOV/BiliHub/7f5432918dcefe14bb99301f1007fc78008efead/app/src/main/res/mipmap-hdpi/app_logo.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/app_logo_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeonNOV/BiliHub/7f5432918dcefe14bb99301f1007fc78008efead/app/src/main/res/mipmap-hdpi/app_logo_round.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/app_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeonNOV/BiliHub/7f5432918dcefe14bb99301f1007fc78008efead/app/src/main/res/mipmap-mdpi/app_logo.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/app_logo_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeonNOV/BiliHub/7f5432918dcefe14bb99301f1007fc78008efead/app/src/main/res/mipmap-mdpi/app_logo_round.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/app_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeonNOV/BiliHub/7f5432918dcefe14bb99301f1007fc78008efead/app/src/main/res/mipmap-xhdpi/app_logo.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/app_logo_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeonNOV/BiliHub/7f5432918dcefe14bb99301f1007fc78008efead/app/src/main/res/mipmap-xhdpi/app_logo_round.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/app_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeonNOV/BiliHub/7f5432918dcefe14bb99301f1007fc78008efead/app/src/main/res/mipmap-xxhdpi/app_logo.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/app_logo_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeonNOV/BiliHub/7f5432918dcefe14bb99301f1007fc78008efead/app/src/main/res/mipmap-xxhdpi/app_logo_round.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/app_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeonNOV/BiliHub/7f5432918dcefe14bb99301f1007fc78008efead/app/src/main/res/mipmap-xxxhdpi/app_logo.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/app_logo_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeonNOV/BiliHub/7f5432918dcefe14bb99301f1007fc78008efead/app/src/main/res/mipmap-xxxhdpi/app_logo_round.png -------------------------------------------------------------------------------- /app/src/main/res/raw/we_chat_pay_qrcode.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeonNOV/BiliHub/7f5432918dcefe14bb99301f1007fc78008efead/app/src/main/res/raw/we_chat_pay_qrcode.png -------------------------------------------------------------------------------- /app/src/main/res/values-night/colors.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | #878787 4 | -------------------------------------------------------------------------------- /app/src/main/res/values-night/themes.xml: -------------------------------------------------------------------------------- 1 | 2 | @color/black 3 | @color/white 4 | 5 | #686868 6 | #757575 7 | 8 | #CCCCCC 9 | #888888 10 | #80E5E5E5 11 | 12 | #5E5E5E 13 | @color/primary 14 | 15 | #878787 16 | #B3424242 17 | -------------------------------------------------------------------------------- /app/src/main/res/values-v28/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 8 | -------------------------------------------------------------------------------- /app/src/main/res/values/app_logo_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | #FFEC15 4 | -------------------------------------------------------------------------------- /app/src/main/res/values/attrs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /app/src/main/res/values/description.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /app/src/main/res/values/shapeable_styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 8 | 9 | 16 | 17 | 22 | 23 | 28 | 29 | 34 | 38 | -------------------------------------------------------------------------------- /build.gradle: -------------------------------------------------------------------------------- 1 | // Top-level build file where you can add configuration options common to all sub-projects/modules. 2 | buildscript { 3 | repositories { 4 | maven { url 'https://jitpack.io' } 5 | maven { url 'https://maven.aliyun.com/repository/public/' } 6 | maven { url 'https://maven.aliyun.com/repository/google' } 7 | maven { url 'https://repo1.maven.org/maven2/' } 8 | 9 | google() 10 | mavenCentral() 11 | } 12 | dependencies { 13 | classpath 'com.android.tools.build:gradle:7.2.1' 14 | classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.7.20" 15 | 16 | // NOTE: Do not place your application dependencies here; they belong 17 | // in the individual module build.gradle files 18 | } 19 | } 20 | 21 | task clean(type: Delete) { 22 | delete rootProject.buildDir 23 | } -------------------------------------------------------------------------------- /gradle.properties: -------------------------------------------------------------------------------- 1 | # Project-wide Gradle settings. 2 | # IDE (e.g. Android Studio) users: 3 | # Gradle settings configured through the IDE *will override* 4 | # any settings specified in this file. 5 | # For more details on how to configure your build environment visit 6 | # http://www.gradle.org/docs/current/userguide/build_environment.html 7 | # Specifies the JVM arguments used for the daemon process. 8 | # The setting is particularly useful for tweaking memory settings. 9 | org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8 10 | # When configured, Gradle will run in incubating parallel mode. 11 | # This option should only be used with decoupled projects. More details, visit 12 | # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects 13 | # org.gradle.parallel=true 14 | # AndroidX package structure to make it clearer which packages are bundled with the 15 | # Android operating system, and which are packaged with your app"s APK 16 | # https://developer.android.com/topic/libraries/support-library/androidx-rn 17 | android.useAndroidX=true 18 | # Automatically convert third-party libraries to use AndroidX 19 | android.enableJetifier=true 20 | # Kotlin code style for this project: "official" or "obsolete": 21 | kotlin.code.style=official -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeonNOV/BiliHub/7f5432918dcefe14bb99301f1007fc78008efead/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | #Wed Jul 27 11:20:32 CST 2022 2 | distributionBase=GRADLE_USER_HOME 3 | distributionUrl=https\://services.gradle.org/distributions/gradle-7.5-bin.zip 4 | distributionPath=wrapper/dists 5 | zipStorePath=wrapper/dists 6 | zipStoreBase=GRADLE_USER_HOME 7 | -------------------------------------------------------------------------------- /settings.gradle: -------------------------------------------------------------------------------- 1 | dependencyResolutionManagement { 2 | repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS) 3 | repositories { 4 | maven { url 'https://jitpack.io' } 5 | maven { 6 | url 'https://maven.aliyun.com/repository/public/' 7 | } 8 | maven{ 9 | url 'https://maven.aliyun.com/repository/google' 10 | } 11 | 12 | google() 13 | mavenCentral() 14 | } 15 | } 16 | rootProject.name = "BiliHub" 17 | include ':app' 18 | --------------------------------------------------------------------------------