├── .github ├── ISSUE_TEMPLATE │ ├── bug_report.yml │ ├── config.yml │ └── feature_request.yml └── workflows │ ├── alpha.yml │ ├── alpha_build_manually_without_sign.yml │ ├── auto_close_issues.yml │ ├── close_inactive_issues.yml │ ├── features.yml │ └── release.yml ├── .gitignore ├── .gitmodules ├── .idea ├── .gitignore ├── kotlinc.xml ├── runConfigurations │ ├── Run_mobile.xml │ ├── Run_tv.xml │ └── app.xml └── vcs.xml ├── LICENSE ├── README.md ├── app ├── .gitignore ├── build.gradle.kts ├── compose_compiler_config.conf ├── mobile │ ├── .gitignore │ ├── build.gradle.kts │ ├── consumer-rules.pro │ ├── proguard-rules.pro │ └── src │ │ └── main │ │ ├── AndroidManifest.xml │ │ ├── kotlin │ │ └── dev │ │ │ └── aaa1115910 │ │ │ └── bv │ │ │ └── mobile │ │ │ ├── activities │ │ │ ├── DynamicDetailActivity.kt │ │ │ ├── FavoriteActivity.kt │ │ │ ├── FollowingSeasonActivity.kt │ │ │ ├── FollowingUserActivity.kt │ │ │ ├── HistoryActivity.kt │ │ │ ├── LoginActivity.kt │ │ │ ├── MainActivity.kt │ │ │ ├── SettingsActivity.kt │ │ │ ├── UserSpaceActivity.kt │ │ │ └── VideoPlayerActivity.kt │ │ │ ├── component │ │ │ ├── home │ │ │ │ ├── SearchBar.kt │ │ │ │ ├── UserDialog.kt │ │ │ │ └── dynamic │ │ │ │ │ ├── DynamicItem.kt │ │ │ │ │ └── DynamicUserItem.kt │ │ │ ├── player │ │ │ │ └── VideoPlayerPages.kt │ │ │ ├── preferences │ │ │ │ ├── RadioPreferenceItem.kt │ │ │ │ ├── SwitchPreferenceItem.kt │ │ │ │ └── TextPreferenceItem.kt │ │ │ ├── reply │ │ │ │ ├── CommentItem.kt │ │ │ │ ├── Comments.kt │ │ │ │ ├── Replies.kt │ │ │ │ └── ReplySheetScaffold.kt │ │ │ ├── settings │ │ │ │ └── UpdateDialog.kt │ │ │ ├── user │ │ │ │ └── UserAvatar.kt │ │ │ └── videocard │ │ │ │ ├── RelatedVideoItem.kt │ │ │ │ ├── SeasonCard.kt │ │ │ │ ├── SmallVideoCard.kt │ │ │ │ ├── UpIcon.kt │ │ │ │ └── UpSpaceVideoItem.kt │ │ │ ├── screen │ │ │ ├── DynamicDetailScreen.kt │ │ │ ├── FavoriteScreen.kt │ │ │ ├── FollowingSeasonScreen.kt │ │ │ ├── FollowingUserScreen.kt │ │ │ ├── HistoryScreen.kt │ │ │ ├── LoginScreen.kt │ │ │ ├── MobileMainScreen.kt │ │ │ ├── UserSpaceScreen.kt │ │ │ ├── VideoPlayerScreen.kt │ │ │ ├── home │ │ │ │ ├── DynamicScreen.kt │ │ │ │ ├── HomeScreen.kt │ │ │ │ └── home │ │ │ │ │ ├── PopularPage.kt │ │ │ │ │ └── RcmdPage.kt │ │ │ └── settings │ │ │ │ ├── SettingsCategories.kt │ │ │ │ ├── SettingsDetails.kt │ │ │ │ ├── SettingsScreen.kt │ │ │ │ └── details │ │ │ │ ├── AboutContent.kt │ │ │ │ ├── AdvanceContent.kt │ │ │ │ ├── DebugContent.kt │ │ │ │ └── PlayContent.kt │ │ │ └── theme │ │ │ └── Theme.kt │ │ └── res │ │ └── values │ │ ├── strings.xml │ │ └── themes.xml ├── proguard-rules.pro ├── shared │ ├── .gitignore │ ├── build.gradle.kts │ ├── consumer-rules.pro │ ├── proguard-rules.pro │ ├── schemas │ │ └── dev.aaa1115910.bv.dao.AppDatabase │ │ │ ├── 1.json │ │ │ ├── 2.json │ │ │ └── 3.json │ └── src │ │ ├── debug │ │ ├── AndroidManifest.xml │ │ └── res │ │ │ └── values │ │ │ └── strings.xml │ │ ├── main │ │ ├── AndroidManifest.xml │ │ ├── ic_launcher-playstore.png │ │ ├── kotlin │ │ │ ├── coil │ │ │ │ └── transform │ │ │ │ │ └── BlurTransformation.kt │ │ │ ├── com │ │ │ │ └── origeek │ │ │ │ │ └── imageViewer │ │ │ │ │ ├── gallery │ │ │ │ │ ├── ImageGallery.kt │ │ │ │ │ └── ImagePager.kt │ │ │ │ │ ├── previewer │ │ │ │ │ ├── ImagePreviewer.kt │ │ │ │ │ ├── ImageTransform.kt │ │ │ │ │ ├── ImageViewerContainer.kt │ │ │ │ │ ├── PreviewerPagerState.kt │ │ │ │ │ ├── PreviewerTransformState.kt │ │ │ │ │ └── PreviewerVerticalDragState.kt │ │ │ │ │ ├── util │ │ │ │ │ └── Ticket.kt │ │ │ │ │ └── viewer │ │ │ │ │ ├── ImageComposeCanvas.kt │ │ │ │ │ ├── ImageComposeOrigin.kt │ │ │ │ │ └── ImageViewer.kt │ │ │ ├── de │ │ │ │ └── schnettler │ │ │ │ │ └── datastore │ │ │ │ │ └── manager │ │ │ │ │ ├── DataStoreManager.kt │ │ │ │ │ └── PreferenceRequest.kt │ │ │ └── dev │ │ │ │ └── aaa1115910 │ │ │ │ └── bv │ │ │ │ ├── BVApp.kt │ │ │ │ ├── component │ │ │ │ ├── BottomTip.kt │ │ │ │ ├── BvPlayerPreview.kt │ │ │ │ ├── Carousel.kt │ │ │ │ ├── DevelopingTip.kt │ │ │ │ ├── FocusGroup.kt │ │ │ │ ├── FpsMonitor.kt │ │ │ │ ├── LibVLCDownloaderDialog.kt │ │ │ │ ├── LoadingTip.kt │ │ │ │ ├── RemoteControlPanelDemo.kt │ │ │ │ ├── TopNav.kt │ │ │ │ ├── UpIcon.kt │ │ │ │ ├── UserPanel.kt │ │ │ │ ├── buttons │ │ │ │ │ ├── CoinButton.kt │ │ │ │ │ ├── FavoriteButton.kt │ │ │ │ │ ├── LikeButton.kt │ │ │ │ │ └── SeasonInfoButtons.kt │ │ │ │ ├── pgc │ │ │ │ │ └── IndexFilter.kt │ │ │ │ ├── search │ │ │ │ │ ├── SearchKeyword.kt │ │ │ │ │ └── SoftKeyboard.kt │ │ │ │ ├── settings │ │ │ │ │ ├── CookiesDialog.kt │ │ │ │ │ ├── SettingListItem.kt │ │ │ │ │ ├── SettingSwitchListItem.kt │ │ │ │ │ ├── SettingsMenuSelectItem.kt │ │ │ │ │ └── UpdateDialog.kt │ │ │ │ └── videocard │ │ │ │ │ ├── LargeVideoCard.kt │ │ │ │ │ ├── SeasonCard.kt │ │ │ │ │ ├── SmallVideoCard.kt │ │ │ │ │ └── VideosRow.kt │ │ │ │ ├── dao │ │ │ │ ├── AppDatabase.kt │ │ │ │ ├── SearchHistoryDao.kt │ │ │ │ └── UserDao.kt │ │ │ │ ├── entity │ │ │ │ ├── AuthData.kt │ │ │ │ ├── PlayerType.kt │ │ │ │ ├── ThemeType.kt │ │ │ │ ├── carddata │ │ │ │ │ ├── SeasonCardData.kt │ │ │ │ │ └── VideoCardData.kt │ │ │ │ ├── db │ │ │ │ │ ├── SearchHistoryDB.kt │ │ │ │ │ └── UserDB.kt │ │ │ │ └── proxy │ │ │ │ │ └── ProxyArea.kt │ │ │ │ ├── network │ │ │ │ ├── GithubApi.kt │ │ │ │ ├── HttpServer.kt │ │ │ │ ├── VlcLibsApi.kt │ │ │ │ └── entity │ │ │ │ │ └── GithubRelease.kt │ │ │ │ ├── repository │ │ │ │ ├── UserRepository.kt │ │ │ │ └── VideoInfoRepository.kt │ │ │ │ ├── ui │ │ │ │ └── theme │ │ │ │ │ ├── Theme.kt │ │ │ │ │ └── Typography.kt │ │ │ │ ├── util │ │ │ │ ├── AbiUtil.kt │ │ │ │ ├── BlacklistUtil.kt │ │ │ │ ├── CodecUtil.kt │ │ │ │ ├── EnumExtends.kt │ │ │ │ ├── Extends.kt │ │ │ │ ├── ImageExtends.kt │ │ │ │ ├── LogCatcherUtil.kt │ │ │ │ ├── ModifierExtends.kt │ │ │ │ ├── NetworkUtil.kt │ │ │ │ ├── NotYetImplemented.kt │ │ │ │ ├── PartitionUtil.kt │ │ │ │ ├── PgcIndexParamExtends.kt │ │ │ │ ├── PgcTypeExtends.kt │ │ │ │ ├── Prefs.kt │ │ │ │ ├── UgcTypeExtends.kt │ │ │ │ ├── UgcTypeV2Extends.kt │ │ │ │ └── calculateWindowSizeClassInPreview.kt │ │ │ │ └── viewmodel │ │ │ │ ├── CommentViewModel.kt │ │ │ │ ├── DynamicDetailViewModel.kt │ │ │ │ ├── SeasonViewModel.kt │ │ │ │ ├── TagViewModel.kt │ │ │ │ ├── UserSwitchViewModel.kt │ │ │ │ ├── UserViewModel.kt │ │ │ │ ├── VideoPlayerV3ViewModel.kt │ │ │ │ ├── home │ │ │ │ ├── DynamicViewModel.kt │ │ │ │ ├── PopularViewModel.kt │ │ │ │ └── RecommendViewModel.kt │ │ │ │ ├── index │ │ │ │ └── PgcIndexViewModel.kt │ │ │ │ ├── login │ │ │ │ ├── AppQrLoginViewModel.kt │ │ │ │ └── SmsLoginViewModel.kt │ │ │ │ ├── pgc │ │ │ │ ├── PgcAnimeViewModel.kt │ │ │ │ ├── PgcDocumentaryViewModel.kt │ │ │ │ ├── PgcGuoChuangViewModel.kt │ │ │ │ ├── PgcMovieViewModel.kt │ │ │ │ ├── PgcTvViewModel.kt │ │ │ │ ├── PgcVarietyViewModel.kt │ │ │ │ └── PgcViewModel.kt │ │ │ │ ├── search │ │ │ │ ├── SearchInputViewModel.kt │ │ │ │ └── SearchResultViewModel.kt │ │ │ │ ├── user │ │ │ │ ├── FavoriteViewModel.kt │ │ │ │ ├── FollowViewModel.kt │ │ │ │ ├── FollowingSeasonViewModel.kt │ │ │ │ ├── HistoryViewModel.kt │ │ │ │ ├── ToViewViewModel.kt │ │ │ │ └── UserSpaceViewModel.kt │ │ │ │ └── video │ │ │ │ └── VideoDetailViewModel.kt │ │ ├── proto │ │ │ └── blacklist.proto │ │ └── res │ │ │ ├── drawable │ │ │ ├── ic_banner.webp │ │ │ ├── ic_banner_foreground.xml │ │ │ ├── ic_danmaku_count.xml │ │ │ ├── ic_gamer_ani.xml │ │ │ ├── ic_launcher_foreground.xml │ │ │ ├── ic_play_count.xml │ │ │ └── ic_up.xml │ │ │ ├── font │ │ │ └── noto_sans_math_regular.ttf │ │ │ ├── mipmap-anydpi-v26 │ │ │ ├── ic_banner.xml │ │ │ ├── ic_launcher.xml │ │ │ └── ic_launcher_round.xml │ │ │ ├── mipmap-hdpi │ │ │ ├── ic_launcher.webp │ │ │ └── ic_launcher_round.webp │ │ │ ├── mipmap-mdpi │ │ │ ├── ic_launcher.webp │ │ │ └── ic_launcher_round.webp │ │ │ ├── mipmap-xhdpi │ │ │ ├── ic_launcher.webp │ │ │ └── ic_launcher_round.webp │ │ │ ├── mipmap-xxhdpi │ │ │ ├── ic_launcher.webp │ │ │ └── ic_launcher_round.webp │ │ │ ├── mipmap-xxxhdpi │ │ │ ├── ic_launcher.webp │ │ │ └── ic_launcher_round.webp │ │ │ ├── raw │ │ │ └── ic_playing.json │ │ │ ├── values │ │ │ ├── arrays.xml │ │ │ ├── colors.xml │ │ │ ├── dimens.xml │ │ │ ├── strings.xml │ │ │ └── themes.xml │ │ │ └── xml │ │ │ ├── network_security_config.xml │ │ │ └── provider_paths.xml │ │ ├── r8Test │ │ ├── AndroidManifest.xml │ │ └── res │ │ │ └── values │ │ │ └── strings.xml │ │ └── test │ │ └── kotlin │ │ ├── android │ │ └── util │ │ │ └── Log.kt │ │ └── dev │ │ └── aaa1115910 │ │ └── bv │ │ └── network │ │ └── GithubApiTest.kt ├── src │ └── main │ │ └── AndroidManifest.xml └── tv │ ├── .gitignore │ ├── build.gradle.kts │ ├── consumer-rules.pro │ ├── proguard-rules.pro │ └── src │ └── main │ ├── AndroidManifest.xml │ ├── kotlin │ └── dev │ │ └── aaa1115910 │ │ └── bv │ │ └── tv │ │ ├── activities │ │ ├── MainActivity.kt │ │ ├── pgc │ │ │ ├── PgcIndexActivity.kt │ │ │ └── anime │ │ │ │ └── AnimeTimelineActivity.kt │ │ ├── search │ │ │ ├── SearchInputActivity.kt │ │ │ └── SearchResultActivity.kt │ │ ├── settings │ │ │ ├── LogsActivity.kt │ │ │ ├── MediaCodecActivity.kt │ │ │ ├── SettingsActivity.kt │ │ │ └── SpeedTestActivity.kt │ │ ├── user │ │ │ ├── FavoriteActivity.kt │ │ │ ├── FollowActivity.kt │ │ │ ├── FollowingSeasonActivity.kt │ │ │ ├── HistoryActivity.kt │ │ │ ├── LoginActivity.kt │ │ │ ├── ToViewActivity.kt │ │ │ ├── UserInfoActivity.kt │ │ │ ├── UserLockSettingsActivity.kt │ │ │ └── UserSwitchActivity.kt │ │ └── video │ │ │ ├── RemoteControllerPanelDemoActivity.kt │ │ │ ├── SeasonInfoActivity.kt │ │ │ ├── TagActivity.kt │ │ │ ├── UpInfoActivity.kt │ │ │ ├── VideoInfoActivity.kt │ │ │ └── VideoPlayerV3Activity.kt │ │ ├── component │ │ └── settings │ │ │ └── UpdateDialog.kt │ │ ├── screens │ │ ├── HomeScreen.kt │ │ ├── MainScreen.kt │ │ ├── RegionBlockScreen.kt │ │ ├── SeasonInfoScreen.kt │ │ ├── TagScreen.kt │ │ ├── VideoInfoScreen.kt │ │ ├── VideoPlayerV3Screen.kt │ │ ├── home │ │ │ └── DynamicsScreen.kt │ │ ├── login │ │ │ ├── AppQRLoginContent.kt │ │ │ ├── LoginScreen.kt │ │ │ └── SmsLoginContent.kt │ │ ├── main │ │ │ ├── DrawerContent.kt │ │ │ ├── HomeContent.kt │ │ │ ├── PgcContent.kt │ │ │ ├── UgcContent.kt │ │ │ ├── home │ │ │ │ ├── DynamicsScreen.kt │ │ │ │ ├── PopularScreen.kt │ │ │ │ ├── RecommendScreen.kt │ │ │ │ └── UserScreen.kt │ │ │ ├── pgc │ │ │ │ ├── AnimeContent.kt │ │ │ │ ├── DocumentaryContent.kt │ │ │ │ ├── GuoChuangContent.kt │ │ │ │ ├── MovieContent.kt │ │ │ │ ├── PgcCommon.kt │ │ │ │ ├── PgcIndexScreen.kt │ │ │ │ ├── TvContent.kt │ │ │ │ ├── VarietyContent.kt │ │ │ │ └── anime │ │ │ │ │ └── AnimeTimelineScreen.kt │ │ │ └── ugc │ │ │ │ ├── AiContent.kt │ │ │ │ ├── AnimalContent.kt │ │ │ │ ├── CarContent.kt │ │ │ │ ├── CinephileContent.kt │ │ │ │ ├── DanceContent.kt │ │ │ │ ├── DougaContent.kt │ │ │ │ ├── EmotionContent.kt │ │ │ │ ├── EntContent.kt │ │ │ │ ├── FashionContent.kt │ │ │ │ ├── FoodContent.kt │ │ │ │ ├── GameContent.kt │ │ │ │ ├── GymContent.kt │ │ │ │ ├── HandmakeContent.kt │ │ │ │ ├── HomeContent.kt │ │ │ │ ├── InformationContent.kt │ │ │ │ ├── KichikuContent.kt │ │ │ │ ├── KnowledgeContent.kt │ │ │ │ ├── LifeExperienceContent.kt │ │ │ │ ├── LifeJoyContent.kt │ │ │ │ ├── MuiscContent.kt │ │ │ │ ├── MysticismContent.kt │ │ │ │ ├── OutdoorsContent.kt │ │ │ │ ├── PaintingContent.kt │ │ │ │ ├── ParentingContent.kt │ │ │ │ ├── RuralContent.kt │ │ │ │ ├── ShortPlayContent.kt │ │ │ │ ├── SportsContent.kt │ │ │ │ ├── TechContent.kt │ │ │ │ ├── TravelContent.kt │ │ │ │ ├── UgcChildRegionButtons.kt │ │ │ │ ├── UgcCommon.kt │ │ │ │ ├── VlogContent.kt │ │ │ │ └── healthContent.kt │ │ ├── search │ │ │ ├── SearchInputScreen.kt │ │ │ ├── SearchResultFilter.kt │ │ │ └── SearchResultScreen.kt │ │ ├── settings │ │ │ ├── LogsScreen.kt │ │ │ ├── MediaCodecScreen.kt │ │ │ ├── SettingsScreen.kt │ │ │ ├── SpeedTestScreen.kt │ │ │ └── content │ │ │ │ ├── AboutSetting.kt │ │ │ │ ├── ApiSetting.kt │ │ │ │ ├── AudioSetting.kt │ │ │ │ ├── InfoSetting.kt │ │ │ │ ├── NetworkSetting.kt │ │ │ │ ├── OtherSetting.kt │ │ │ │ ├── PlayerTypeSetting.kt │ │ │ │ ├── ResolutionSetting.kt │ │ │ │ ├── StorageSetting.kt │ │ │ │ ├── UISetting.kt │ │ │ │ └── VideoCodecSetting.kt │ │ └── user │ │ │ ├── FavoriteScreen.kt │ │ │ ├── FollowScreen.kt │ │ │ ├── FollowingSeasonFilter.kt │ │ │ ├── FollowingSeasonScreen.kt │ │ │ ├── HistoryScreen.kt │ │ │ ├── ToViewScreen.kt │ │ │ ├── UpInfoScreen.kt │ │ │ ├── UserInfoScreen.kt │ │ │ ├── UserSwitchScreen.kt │ │ │ └── lock │ │ │ ├── UnlockSwitchUserContent.kt │ │ │ ├── UnlockUserScreen.kt │ │ │ └── UserLockSettingsScreen.kt │ │ └── util │ │ └── PlayerActivityUtil.kt │ └── res │ └── values │ ├── strings.xml │ └── themes.xml ├── bili-api-grpc ├── .gitignore ├── build.gradle.kts └── proto │ ├── bilibili │ ├── account │ │ └── fission │ │ │ └── v1 │ │ │ └── fission.proto │ ├── ad │ │ └── v1 │ │ │ └── ad.proto │ ├── api │ │ ├── player │ │ │ └── v1 │ │ │ │ └── player.proto │ │ ├── probe │ │ │ └── v1 │ │ │ │ └── probe.proto │ │ └── ticket │ │ │ └── v1 │ │ │ └── ticket.proto │ ├── app │ │ ├── archive │ │ │ ├── middleware │ │ │ │ └── v1 │ │ │ │ │ └── preload.proto │ │ │ └── v1 │ │ │ │ └── archive.proto │ │ ├── card │ │ │ └── v1 │ │ │ │ ├── ad.proto │ │ │ │ ├── card.proto │ │ │ │ ├── common.proto │ │ │ │ ├── double.proto │ │ │ │ └── single.proto │ │ ├── click │ │ │ └── v1 │ │ │ │ └── heartbeat.proto │ │ ├── distribution │ │ │ ├── setting │ │ │ │ ├── download.proto │ │ │ │ ├── dynamic.proto │ │ │ │ ├── experimental.proto │ │ │ │ ├── internaldevice.proto │ │ │ │ ├── night.proto │ │ │ │ ├── other.proto │ │ │ │ ├── pegasus.proto │ │ │ │ ├── play.proto │ │ │ │ ├── privacy.proto │ │ │ │ └── search.proto │ │ │ └── v1 │ │ │ │ └── distribution.proto │ │ ├── dynamic │ │ │ ├── common │ │ │ │ └── dynamic.proto │ │ │ ├── v1 │ │ │ │ └── dynamic.proto │ │ │ └── v2 │ │ │ │ ├── campus.proto │ │ │ │ ├── dynamic.proto │ │ │ │ └── opus.proto │ │ ├── interfaces │ │ │ └── v1 │ │ │ │ ├── history.proto │ │ │ │ ├── media.proto │ │ │ │ ├── search.proto │ │ │ │ └── space.proto │ │ ├── listener │ │ │ └── v1 │ │ │ │ └── listener.proto │ │ ├── playeronline │ │ │ └── v1 │ │ │ │ └── playeronline.proto │ │ ├── playerunite │ │ │ ├── pgcanymodel │ │ │ │ └── PGCAnyModel.proto │ │ │ ├── ugcanymodel │ │ │ │ └── UGCAnyModel.proto │ │ │ └── v1 │ │ │ │ └── playerunite.proto │ │ ├── playurl │ │ │ └── v1 │ │ │ │ └── playurl.proto │ │ ├── resource │ │ │ ├── privacy │ │ │ │ └── v1 │ │ │ │ │ └── api.proto │ │ │ └── v1 │ │ │ │ └── module.proto │ │ ├── search │ │ │ └── v2 │ │ │ │ └── search.proto │ │ ├── show │ │ │ ├── gateway │ │ │ │ └── v1 │ │ │ │ │ └── service.proto │ │ │ ├── mixture │ │ │ │ └── v1 │ │ │ │ │ └── mixture.proto │ │ │ ├── popular │ │ │ │ └── v1 │ │ │ │ │ └── popular.proto │ │ │ ├── rank │ │ │ │ └── v1 │ │ │ │ │ └── rank.proto │ │ │ └── region │ │ │ │ └── v1 │ │ │ │ └── region.proto │ │ ├── space │ │ │ └── v1 │ │ │ │ └── space.proto │ │ ├── splash │ │ │ └── v1 │ │ │ │ └── splash.proto │ │ ├── topic │ │ │ └── v1 │ │ │ │ └── topic.proto │ │ ├── view │ │ │ └── v1 │ │ │ │ └── view.proto │ │ ├── viewunite │ │ │ ├── common.proto │ │ │ ├── pgcanymodel.proto │ │ │ ├── ugcanymodel.proto │ │ │ └── v1 │ │ │ │ └── viewunite.proto │ │ └── wall │ │ │ └── v1 │ │ │ └── wall.proto │ ├── broadcast │ │ ├── message │ │ │ ├── editor │ │ │ │ └── notify.proto │ │ │ ├── esports │ │ │ │ └── notify.proto │ │ │ ├── fission │ │ │ │ └── notify.proto │ │ │ ├── im │ │ │ │ └── notify.proto │ │ │ ├── main │ │ │ │ ├── dm.proto │ │ │ │ ├── native.proto │ │ │ │ ├── resource.proto │ │ │ │ └── search.proto │ │ │ ├── note │ │ │ │ └── sync.proto │ │ │ ├── ogv │ │ │ │ ├── freya.proto │ │ │ │ └── live.proto │ │ │ ├── ticket │ │ │ │ └── activitygame.proto │ │ │ └── tv │ │ │ │ └── proj.proto │ │ ├── v1 │ │ │ ├── broadcast.proto │ │ │ ├── laser.proto │ │ │ ├── mod.proto │ │ │ ├── push.proto │ │ │ ├── room.proto │ │ │ └── test.proto │ │ └── v2 │ │ │ └── laser.proto │ ├── cheese │ │ └── gateway │ │ │ └── player │ │ │ └── v1 │ │ │ └── playurl.proto │ ├── community │ │ └── service │ │ │ ├── dm │ │ │ └── v1 │ │ │ │ └── dm.proto │ │ │ └── govern │ │ │ └── v1 │ │ │ └── govern.proto │ ├── dagw │ │ └── component │ │ │ └── avatar │ │ │ ├── common │ │ │ └── common.proto │ │ │ └── v1 │ │ │ ├── avatar.proto │ │ │ └── plugin.proto │ ├── dynamic │ │ ├── common │ │ │ └── dynamic.proto │ │ ├── gw │ │ │ └── gateway.proto │ │ └── interfaces │ │ │ └── feed │ │ │ └── v1 │ │ │ └── api.proto │ ├── gaia │ │ └── gw │ │ │ └── gw_api.proto │ ├── im │ │ ├── interfaces │ │ │ ├── inner-interface │ │ │ │ └── v1 │ │ │ │ │ └── api.proto │ │ │ └── v1 │ │ │ │ └── im.proto │ │ └── type │ │ │ └── im.proto │ ├── live │ │ ├── app │ │ │ └── room │ │ │ │ └── v1 │ │ │ │ └── room.proto │ │ └── general │ │ │ └── interfaces │ │ │ └── v1 │ │ │ └── interfaces.proto │ ├── main │ │ ├── common │ │ │ └── arch │ │ │ │ └── doll │ │ │ │ └── v1 │ │ │ │ └── doll.proto │ │ └── community │ │ │ └── reply │ │ │ └── v1 │ │ │ └── reply.proto │ ├── metadata │ │ ├── device │ │ │ └── device.proto │ │ ├── fawkes │ │ │ └── fawkes.proto │ │ ├── locale │ │ │ └── locale.proto │ │ ├── metadata.proto │ │ ├── network │ │ │ └── network.proto │ │ ├── parabox │ │ │ └── parabox.proto │ │ └── restriction │ │ │ └── restriction.proto │ ├── pagination │ │ └── pagination.proto │ ├── pangu │ │ └── gallery │ │ │ └── v1 │ │ │ └── gallery.proto │ ├── pgc │ │ ├── gateway │ │ │ └── player │ │ │ │ ├── v1 │ │ │ │ └── playurl.proto │ │ │ │ └── v2 │ │ │ │ └── playurl.proto │ │ └── service │ │ │ └── premiere │ │ │ └── v1 │ │ │ └── premiere.proto │ ├── playershared │ │ └── playershared.proto │ ├── polymer │ │ ├── app │ │ │ └── search │ │ │ │ └── v1 │ │ │ │ └── search.proto │ │ ├── community │ │ │ └── govern │ │ │ │ └── v1 │ │ │ │ └── govern.proto │ │ ├── contract │ │ │ └── v1 │ │ │ │ └── contract.proto │ │ ├── demo │ │ │ └── demo.proto │ │ └── list │ │ │ └── v1 │ │ │ └── list.proto │ ├── relation │ │ └── interfaces │ │ │ └── api.proto │ ├── render │ │ └── render.proto │ ├── rpc │ │ └── status.proto │ ├── tv │ │ └── interfaces │ │ │ └── dm │ │ │ └── v1 │ │ │ └── dm.proto │ ├── vega │ │ └── deneb │ │ │ └── v1 │ │ │ └── deneb.proto │ └── web │ │ ├── interfaces │ │ └── v1 │ │ │ └── interfaces.proto │ │ └── space │ │ └── v1 │ │ └── space.proto │ ├── common │ └── ErrorProto.proto │ ├── datacenter │ └── hakase │ │ └── protobuf │ │ └── android_device_info.proto │ └── pgc │ ├── biz │ └── room.proto │ └── gateway │ └── vega │ └── v1 │ └── vega.proto ├── bili-api ├── .gitignore ├── build.gradle.kts ├── example-response │ └── live-event │ │ ├── COMBO_SEND.json5 │ │ ├── DANMU_MSG.json5 │ │ ├── ENTRY_EFFECT.json5 │ │ ├── GUARD_BUY.json5 │ │ ├── HOT_RANK_CHANGED.json5 │ │ ├── HOT_RANK_CHANGED_V2.json5 │ │ ├── HOT_RANK_SETTLEMENT.json5 │ │ ├── HOT_RANK_SETTLEMENT_V2.json5 │ │ ├── HOT_ROOM_NOTIFY.json5 │ │ ├── INTERACT_WORD.json5 │ │ ├── LIKE_INFO_V3_CLICK.json5 │ │ ├── LIKE_INFO_V3_UPDATE.json5 │ │ ├── LIVE_INTERACTIVE_GAME.json5 │ │ ├── LIVE_MULTI_VIEW_CHANGE.json5 │ │ ├── NOTICE_MSG.json5 │ │ ├── ONLINE_RANK_COUNT.json5 │ │ ├── ONLINE_RANK_TOP3.json5 │ │ ├── ONLINE_RANK_V2.json5 │ │ ├── PREPARING.json5 │ │ ├── ROOM_REAL_TIME_MESSAGE_UPDATE.json │ │ ├── SEND_GIFT.json │ │ ├── STOP_LIVE_ROOM_LIST.json5 │ │ ├── SUPER_CHAT_ENTRANCE.json5 │ │ ├── SUPER_CHAT_MESSAGE.json5 │ │ ├── SUPER_CHAT_MESSAGE_JPN.json5 │ │ ├── USER_TOAST_MSG.json5 │ │ ├── WATCHED_CHANGE.json5 │ │ └── WIDGET_BANNER.json5 └── src │ ├── main │ └── kotlin │ │ ├── com │ │ └── tfowl │ │ │ └── ktor │ │ │ └── client │ │ │ └── plugins │ │ │ └── JsoupPlugin.kt │ │ └── dev │ │ └── aaa1115910 │ │ └── biliapi │ │ ├── entity │ │ ├── ApiType.kt │ │ ├── CarouselData.kt │ │ ├── CodeType.kt │ │ ├── Favorite.kt │ │ ├── Picture.kt │ │ ├── PlayData.kt │ │ ├── danmaku │ │ │ └── DanmakuMask.kt │ │ ├── home │ │ │ └── RecommendData.kt │ │ ├── login │ │ │ ├── Captcha.kt │ │ │ ├── QR.kt │ │ │ └── Sms.kt │ │ ├── pgc │ │ │ ├── PgcFeedData.kt │ │ │ ├── PgcItem.kt │ │ │ ├── PgcType.kt │ │ │ └── index │ │ │ │ ├── IndexParams.kt │ │ │ │ └── PgcIndexData.kt │ │ ├── rank │ │ │ └── Popular.kt │ │ ├── reply │ │ │ ├── Comment.kt │ │ │ ├── CommentPage.kt │ │ │ ├── CommentRepliesData.kt │ │ │ └── CommentSort.kt │ │ ├── search │ │ │ └── Hotword.kt │ │ ├── season │ │ │ ├── FollowingSeasons.kt │ │ │ ├── IndexResult.kt │ │ │ └── Timeline.kt │ │ ├── ugc │ │ │ ├── UgcItem.kt │ │ │ ├── UgcType.kt │ │ │ ├── UgcTypeV2.kt │ │ │ └── region │ │ │ │ ├── UgcFeedData.kt │ │ │ │ ├── UgcFeedPage.kt │ │ │ │ ├── UgcRegionData.kt │ │ │ │ ├── UgcRegionListData.kt │ │ │ │ └── UgcRegionPage.kt │ │ ├── user │ │ │ ├── Author.kt │ │ │ ├── Dynamic.kt │ │ │ ├── FollowedUser.kt │ │ │ ├── History.kt │ │ │ ├── Space.kt │ │ │ └── ToView.kt │ │ └── video │ │ │ ├── Dimension.kt │ │ │ ├── Heartbeat.kt │ │ │ ├── RelatedVideo.kt │ │ │ ├── Subtitle.kt │ │ │ ├── Tag.kt │ │ │ ├── VideoDetail.kt │ │ │ ├── VideoPage.kt │ │ │ ├── VideoShot.kt │ │ │ └── season │ │ │ ├── Episode.kt │ │ │ ├── PgcSeason.kt │ │ │ ├── SeasonDetail.kt │ │ │ └── Section.kt │ │ ├── grpc │ │ └── utils │ │ │ ├── Channel.kt │ │ │ └── StatusExtends.kt │ │ ├── http │ │ ├── BiliHttpApi.kt │ │ ├── BiliHttpProxyApi.kt │ │ ├── BiliLiveHttpApi.kt │ │ ├── BiliPassportHttpApi.kt │ │ ├── BiliPlusHttpApi.kt │ │ ├── entity │ │ │ ├── BiliResponse.kt │ │ │ ├── biliplus │ │ │ │ └── View.kt │ │ │ ├── danmaku │ │ │ │ └── DanmakuResponse.kt │ │ │ ├── dynamic │ │ │ │ ├── DynamicDetailResponse.kt │ │ │ │ └── DynamicResponse.kt │ │ │ ├── history │ │ │ │ └── HistoryData.kt │ │ │ ├── home │ │ │ │ ├── RcmdIndexData.kt │ │ │ │ └── RcmdTopData.kt │ │ │ ├── index │ │ │ │ ├── IndexFilter.kt │ │ │ │ ├── IndexFilterArea.kt │ │ │ │ ├── IndexFilterProducerId.kt │ │ │ │ ├── IndexFilterStyle.kt │ │ │ │ ├── IndexOrder.kt │ │ │ │ └── IndexResult.kt │ │ │ ├── live │ │ │ │ ├── HistoryDanmaku.kt │ │ │ │ ├── LiveDanmuInfoResponse.kt │ │ │ │ ├── LiveEvent.kt │ │ │ │ ├── LiveFrame.kt │ │ │ │ └── LiveRoomPlayInfoResponse.kt │ │ │ ├── login │ │ │ │ ├── Captcha.kt │ │ │ │ ├── qr │ │ │ │ │ ├── AppQR.kt │ │ │ │ │ └── WebQR.kt │ │ │ │ └── sms │ │ │ │ │ ├── SendSmsResponse.kt │ │ │ │ │ └── SmsLoginResponse.kt │ │ │ ├── pgc │ │ │ │ ├── PgcFeed.kt │ │ │ │ ├── PgcFeedV3.kt │ │ │ │ └── PgcWebInitialStateData.kt │ │ │ ├── proxy │ │ │ │ └── PlayUrl.kt │ │ │ ├── region │ │ │ │ ├── RegionBanner.kt │ │ │ │ ├── RegionDynamic.kt │ │ │ │ ├── RegionDynamicList.kt │ │ │ │ ├── RegionFeedRcmd.kt │ │ │ │ └── RegionLocs.kt │ │ │ ├── reply │ │ │ │ ├── Comment.kt │ │ │ │ ├── CommentReplyData.kt │ │ │ │ └── Layers.kt │ │ │ ├── search │ │ │ │ ├── KeywordSuggest.kt │ │ │ │ ├── SearchCost.kt │ │ │ │ ├── SearchResult.kt │ │ │ │ ├── SearchResultItem.kt │ │ │ │ └── SearchSquare.kt │ │ │ ├── season │ │ │ │ ├── AppSeasonData.kt │ │ │ │ ├── Episode.kt │ │ │ │ ├── Follow.kt │ │ │ │ ├── SeasonSection.kt │ │ │ │ ├── WebFollowingSeason.kt │ │ │ │ └── WebSeasonData.kt │ │ │ ├── subtitle │ │ │ │ └── Subtitle.kt │ │ │ ├── toview │ │ │ │ └── ToViewData.kt │ │ │ ├── user │ │ │ │ ├── Follow.kt │ │ │ │ ├── LevelInfo.kt │ │ │ │ ├── Nameplate.kt │ │ │ │ ├── Official.kt │ │ │ │ ├── Pendant.kt │ │ │ │ ├── Profession.kt │ │ │ │ ├── Relation.kt │ │ │ │ ├── SpaceVideoData.kt │ │ │ │ ├── Staff.kt │ │ │ │ ├── UserCardInfoResponse.kt │ │ │ │ ├── UserGarb.kt │ │ │ │ ├── UserHonours.kt │ │ │ │ ├── UserInfoResponse.kt │ │ │ │ ├── UserSelfInfoResponse.kt │ │ │ │ ├── Vip.kt │ │ │ │ ├── favorite │ │ │ │ │ ├── CntInfo.kt │ │ │ │ │ ├── FavoriteFolderInfo.kt │ │ │ │ │ ├── FavoriteFolderInfoListData.kt │ │ │ │ │ ├── FavoriteItem.kt │ │ │ │ │ ├── Upper.kt │ │ │ │ │ └── UserFavoriteFoldersData.kt │ │ │ │ └── garb │ │ │ │ │ ├── CardBg.kt │ │ │ │ │ ├── Equip.kt │ │ │ │ │ └── Item.kt │ │ │ ├── video │ │ │ │ ├── AddCoin.kt │ │ │ │ ├── OneClickTripleAction.kt │ │ │ │ ├── PlayUrlResponse.kt │ │ │ │ ├── PopularVideosResponse.kt │ │ │ │ ├── RelatedVideosResponse.kt │ │ │ │ ├── SetVideoFavorite.kt │ │ │ │ ├── Tag.kt │ │ │ │ ├── Timeline.kt │ │ │ │ ├── UgcSeason.kt │ │ │ │ ├── VideoDetail.kt │ │ │ │ ├── VideoInfo.kt │ │ │ │ ├── VideoMoreInfo.kt │ │ │ │ └── VideoShot.kt │ │ │ └── web │ │ │ │ ├── Hover.kt │ │ │ │ └── Nav.kt │ │ └── util │ │ │ ├── ApiSign.kt │ │ │ ├── BiliAppConf.kt │ │ │ ├── Buvid.kt │ │ │ ├── CommonEnumIntSerializer.kt │ │ │ └── Zlib.kt │ │ ├── repositories │ │ ├── AuthRepository.kt │ │ ├── ChannelRepository.kt │ │ ├── CoinRepository.kt │ │ ├── CommentRepository.kt │ │ ├── FavoriteRepository.kt │ │ ├── HistoryRepository.kt │ │ ├── LikeRepository.kt │ │ ├── LoginRepository.kt │ │ ├── OneClickTripleActionRepository.kt │ │ ├── PgcRepository.kt │ │ ├── RecommendVideoRepository.kt │ │ ├── SearchRepository.kt │ │ ├── SeasonRepository.kt │ │ ├── ToViewRepository.kt │ │ ├── UgcRepository.kt │ │ ├── UserRepository.kt │ │ ├── VideoDetailRepository.kt │ │ └── VideoPlayRepository.kt │ │ ├── util │ │ ├── AvBvConverter.kt │ │ ├── Extends.kt │ │ └── UrlUtil.kt │ │ └── websocket │ │ └── LiveDataWebSocket.kt │ └── test │ ├── kotlin │ └── dev │ │ └── aaa1115910 │ │ └── biliapi │ │ ├── BvLoginRepositoryTest.kt │ │ ├── entity │ │ └── DanmakuMaskTest.kt │ │ ├── http │ │ ├── BiliHttpApiTest.kt │ │ ├── BiliLiveHttpApiTest.kt │ │ ├── BiliPassportHttpApiTest.kt │ │ └── BiliPlusHttpApiTest.kt │ │ ├── repositories │ │ ├── CommentRepositoryTest.kt │ │ ├── FavoriteRepositoryTest.kt │ │ ├── HistoryRepositoryTest.kt │ │ ├── PgcRepositoryTest.kt │ │ ├── RecommendVideoRepositoryTest.kt │ │ ├── SearchRepositoryTest.kt │ │ ├── SeasonRepositoryTest.kt │ │ ├── UgcRepositoryTest.kt │ │ ├── UserRepositoryTest.kt │ │ ├── VideoDetailRepositoryTest.kt │ │ └── VideoPlayRepositoryTest.kt │ │ └── websocket │ │ └── LiveDataWebSocketTest.kt │ └── resources │ ├── 3540266_25_2.exp.mobmask │ └── 3540266_25_2.exp.webmask ├── bili-subtitle ├── .gitignore ├── build.gradle.kts └── src │ ├── main │ └── kotlin │ │ └── dev │ │ └── aaa1115910 │ │ └── bilisubtitle │ │ ├── SubtitleEncoder.kt │ │ ├── SubtitleParser.kt │ │ └── entity │ │ ├── BiliSubtitle.kt │ │ ├── SrtSubtitle.kt │ │ ├── SubtitleItem.kt │ │ └── Timestamp.kt │ └── test │ ├── kotlin │ └── dev │ │ └── aaa1115910 │ │ └── bilisubtitle │ │ ├── SubtitleEncoderTest.kt │ │ ├── SubtitleParserTest.kt │ │ └── entity │ │ └── TimestampTest.kt │ └── resources │ ├── example.bcc │ └── example.srt ├── build.gradle.kts ├── buildSrc ├── .gitignore ├── build.gradle.kts └── src │ └── main │ └── kotlin │ ├── AppConfiguration.kt │ └── ProtobufConfiguration.kt ├── gradle.properties ├── gradle ├── androidx.versions.toml ├── gradle.versions.toml ├── libs.versions.toml └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat ├── player ├── .gitignore ├── build.gradle.kts ├── core │ ├── .gitignore │ ├── build.gradle.kts │ ├── consumer-rules.pro │ ├── proguard-rules.pro │ └── src │ │ └── main │ │ ├── AndroidManifest.xml │ │ ├── assets │ │ └── GlobalSign ECC Root CA R5.crt │ │ └── kotlin │ │ └── dev │ │ └── aaa1115910 │ │ └── bv │ │ └── player │ │ ├── AbstractVideoPlayer.kt │ │ ├── BvVideoPlayer.kt │ │ ├── OkHttpUtil.kt │ │ ├── VideoPlayerListener.kt │ │ ├── VideoPlayerOptions.kt │ │ ├── factory │ │ └── PlayerFactory.kt │ │ └── impl │ │ └── exo │ │ ├── ExoMediaPlayer.kt │ │ └── ExoPlayerFactory.kt ├── mobile │ ├── .gitignore │ ├── build.gradle.kts │ ├── consumer-rules.pro │ ├── proguard-rules.pro │ └── src │ │ └── main │ │ ├── AndroidManifest.xml │ │ └── kotlin │ │ └── dev │ │ └── aaa1115910 │ │ └── bv │ │ └── player │ │ └── mobile │ │ ├── BvPlayer.kt │ │ ├── MaterialDarkTheme.kt │ │ ├── Media3VideoPlayer.kt │ │ ├── NoRippleClickable.kt │ │ ├── SeekBar.kt │ │ └── controller │ │ ├── BvPlayerController.kt │ │ ├── FullscreenControllers.kt │ │ ├── MiniControllers.kt │ │ ├── PlayPauseButton.kt │ │ ├── Tips.kt │ │ └── menu │ │ ├── DanmakuMenu.kt │ │ ├── DashMenu.kt │ │ ├── MoreMenu.kt │ │ ├── SpeedMenu.kt │ │ └── VideoListMenu.kt ├── shared │ ├── .gitignore │ ├── build.gradle.kts │ ├── consumer-rules.pro │ ├── proguard-rules.pro │ └── src │ │ └── main │ │ ├── AndroidManifest.xml │ │ ├── kotlin │ │ └── dev │ │ │ └── aaa1115910 │ │ │ └── bv │ │ │ └── player │ │ │ ├── AkDanmakuPlayer.kt │ │ │ ├── entity │ │ │ ├── Audio.kt │ │ │ ├── DanmakuSize.kt │ │ │ ├── DanmakuTransparency.kt │ │ │ ├── DanmakuType.kt │ │ │ ├── RequestState.kt │ │ │ ├── Resolution.kt │ │ │ ├── VideoAspectRatio.kt │ │ │ ├── VideoCodec.kt │ │ │ ├── VideoListItem.kt │ │ │ ├── VideoPlayerClosedCaptionMenuItem.kt │ │ │ ├── VideoPlayerDanmakuMenuItem.kt │ │ │ ├── VideoPlayerData.kt │ │ │ ├── VideoPlayerMenuNavItem.kt │ │ │ └── VideoPlayerPictureMenuItem.kt │ │ │ ├── seekbar │ │ │ ├── SeekBar.kt │ │ │ ├── SeekBarThumb.kt │ │ │ └── SeekMoveState.kt │ │ │ └── util │ │ │ ├── DanmakuMaskModifiers.kt │ │ │ └── VideoShotExtends.kt │ │ └── res │ │ └── values │ │ └── strings.xml └── tv │ ├── .gitignore │ ├── build.gradle.kts │ ├── consumer-rules.pro │ ├── proguard-rules.pro │ └── src │ └── main │ ├── AndroidManifest.xml │ └── kotlin │ └── dev │ └── aaa1115910 │ └── bv │ └── player │ └── tv │ ├── BvPlayer.kt │ ├── SeekBar.kt │ └── controller │ ├── BottomSubtitle.kt │ ├── ControllerVideoInfo.kt │ ├── MenuController.kt │ ├── PlayStateTips.kt │ ├── SeekController.kt │ ├── SkipTip.kt │ ├── VideoBottomController.kt │ ├── VideoListController.kt │ ├── VideoPlayerController.kt │ ├── VideoShot.kt │ └── playermenu │ ├── ClosedCaptionMenu.kt │ ├── DanmakuMenu.kt │ ├── MenuNav.kt │ ├── PictureMenu.kt │ └── component │ ├── CheckBoxMenuList.kt │ ├── MenuListItem.kt │ ├── RadioMenuList.kt │ └── StepLessMenuItem.kt ├── screenshots.webp ├── screenshots1.webp ├── screenshots2.webp ├── settings.gradle.kts └── utils ├── .gitignore ├── build.gradle.kts ├── consumer-rules.pro ├── proguard-rules.pro └── src └── main ├── AndroidManifest.xml └── kotlin └── dev └── aaa1115910 └── bv └── util ├── FirebaseUtil.kt ├── FocusRequesterExtends.kt ├── KLoggerExtends.kt ├── LongExtends.kt ├── SnapshotStateListExtends.kt ├── Timer.kt ├── ToastExtends.kt ├── createCustomInitialFocusRestorerModifiers.kt └── ifElse.kt /.github/ISSUE_TEMPLATE/config.yml: -------------------------------------------------------------------------------- 1 | blank_issues_enabled: false -------------------------------------------------------------------------------- /.github/workflows/auto_close_issues.yml: -------------------------------------------------------------------------------- 1 | name: Check Issues 2 | 3 | on: 4 | issues: 5 | types: [opened] 6 | jobs: 7 | check: 8 | runs-on: ubuntu-latest 9 | steps: 10 | - if: contains(github.event.issue.body, '我正在使用旧版本' ) 11 | id: close-old-version 12 | name: Close Issue(template) 13 | uses: peter-evans/close-issue@v3 14 | with: 15 | comment: 请先尝试使用最新版本,如果问题依然存在再提交 issue -------------------------------------------------------------------------------- /.github/workflows/close_inactive_issues.yml: -------------------------------------------------------------------------------- 1 | name: Close inactive issues 2 | on: 3 | schedule: 4 | - cron: "30 1 * * *" 5 | 6 | jobs: 7 | close-issues: 8 | name: Close inactive issues 9 | runs-on: ubuntu-latest 10 | if: github.repository == 'Leelion96/bv' 11 | permissions: 12 | issues: write 13 | steps: 14 | - uses: actions/stale@v5 15 | with: 16 | days-before-issue-stale: 60 17 | days-before-issue-close: 14 18 | days-before-pr-stale: -1 19 | stale-issue-label: "过时" 20 | stale-issue-message: "该 issue 已过时,因为它已经超过 60 天没有任何活动" 21 | close-issue-message: "该 issue 已关闭,因为它在被标记为过时后 14 天依旧没有任何活动" 22 | repo-token: ${{ secrets.GITHUB_TOKEN }} 23 | exempt-issue-labels: "bug,新功能,优化,有待讨论,疑难杂症" -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | *.iml 2 | .gradle 3 | /local.properties 4 | .DS_Store 5 | /build 6 | /captures 7 | .externalNativeBuild 8 | .cxx 9 | /signing.properties 10 | /.idea/jarRepositories.xml 11 | /.idea/migrations.xml 12 | /.idea/codeStyles/ 13 | -------------------------------------------------------------------------------- /.gitmodules: -------------------------------------------------------------------------------- 1 | [submodule "libs"] 2 | path = libs 3 | url = https://github.com/aaa1115910/bv-libs.git 4 | -------------------------------------------------------------------------------- /.idea/.gitignore: -------------------------------------------------------------------------------- 1 | /shelf/ 2 | /workspace.xml 3 | /deploymentTargetDropDown.xml 4 | /gradle.xml 5 | /caches 6 | /libraries 7 | /modules.xml 8 | /navEditor.xml 9 | /assetWizardSettings.xml 10 | /misc.xml 11 | /compiler.xml 12 | /inspectionProfiles/Project_Default.xml 13 | /CamelCaseConfigNew.xml 14 | # GitHub Copilot persisted chat sessions 15 | /copilot/chatSessions 16 | -------------------------------------------------------------------------------- /.idea/kotlinc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | -------------------------------------------------------------------------------- /.idea/vcs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2022 aaa1115910 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. -------------------------------------------------------------------------------- /app/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | /google-services.json 3 | /release 4 | /r8Test 5 | /debug -------------------------------------------------------------------------------- /app/compose_compiler_config.conf: -------------------------------------------------------------------------------- 1 | kotlin.collections.* 2 | kotlin.time.Duration 3 | 4 | kotlinx.coroutines.CoroutineScope 5 | 6 | androidx.paging.compose.LazyPagingItems -------------------------------------------------------------------------------- /app/mobile/.gitignore: -------------------------------------------------------------------------------- 1 | /build -------------------------------------------------------------------------------- /app/mobile/consumer-rules.pro: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Leelion96/bv/70ad3d8a784e78bdec28d084fbb5ceee2c4a1f17/app/mobile/consumer-rules.pro -------------------------------------------------------------------------------- /app/mobile/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/mobile/src/main/kotlin/dev/aaa1115910/bv/mobile/activities/FavoriteActivity.kt: -------------------------------------------------------------------------------- 1 | package dev.aaa1115910.bv.mobile.activities 2 | 3 | import android.os.Bundle 4 | import androidx.activity.ComponentActivity 5 | import androidx.activity.compose.setContent 6 | import androidx.compose.material3.windowsizeclass.ExperimentalMaterial3WindowSizeClassApi 7 | import androidx.compose.material3.windowsizeclass.calculateWindowSizeClass 8 | import dev.aaa1115910.bv.mobile.screen.FavoriteScreen 9 | import dev.aaa1115910.bv.mobile.theme.BVMobileTheme 10 | 11 | class FavoriteActivity : ComponentActivity() { 12 | @OptIn(ExperimentalMaterial3WindowSizeClassApi::class) 13 | override fun onCreate(savedInstanceState: Bundle?) { 14 | super.onCreate(savedInstanceState) 15 | setContent { 16 | val windowSize = calculateWindowSizeClass(this) 17 | BVMobileTheme { 18 | FavoriteScreen( 19 | windowSize = windowSize 20 | ) 21 | } 22 | } 23 | } 24 | } -------------------------------------------------------------------------------- /app/mobile/src/main/kotlin/dev/aaa1115910/bv/mobile/activities/FollowingSeasonActivity.kt: -------------------------------------------------------------------------------- 1 | package dev.aaa1115910.bv.mobile.activities 2 | 3 | import android.os.Bundle 4 | import androidx.activity.ComponentActivity 5 | import androidx.activity.compose.setContent 6 | import androidx.compose.material3.windowsizeclass.ExperimentalMaterial3WindowSizeClassApi 7 | import androidx.compose.material3.windowsizeclass.calculateWindowSizeClass 8 | import dev.aaa1115910.bv.mobile.screen.FollowingSeasonScreen 9 | import dev.aaa1115910.bv.mobile.theme.BVMobileTheme 10 | 11 | class FollowingSeasonActivity : ComponentActivity() { 12 | @OptIn(ExperimentalMaterial3WindowSizeClassApi::class) 13 | override fun onCreate(savedInstanceState: Bundle?) { 14 | super.onCreate(savedInstanceState) 15 | setContent { 16 | val windowSize = calculateWindowSizeClass(this) 17 | BVMobileTheme { 18 | FollowingSeasonScreen( 19 | windowSize = windowSize 20 | ) 21 | } 22 | } 23 | } 24 | } -------------------------------------------------------------------------------- /app/mobile/src/main/kotlin/dev/aaa1115910/bv/mobile/activities/FollowingUserActivity.kt: -------------------------------------------------------------------------------- 1 | package dev.aaa1115910.bv.mobile.activities 2 | 3 | import android.os.Bundle 4 | import androidx.activity.ComponentActivity 5 | import androidx.activity.compose.setContent 6 | import dev.aaa1115910.bv.mobile.screen.FollowingUserScreen 7 | import dev.aaa1115910.bv.mobile.theme.BVMobileTheme 8 | 9 | class FollowingUserActivity : ComponentActivity() { 10 | override fun onCreate(savedInstanceState: Bundle?) { 11 | super.onCreate(savedInstanceState) 12 | setContent { 13 | BVMobileTheme { 14 | FollowingUserScreen() 15 | } 16 | } 17 | } 18 | } -------------------------------------------------------------------------------- /app/mobile/src/main/kotlin/dev/aaa1115910/bv/mobile/activities/HistoryActivity.kt: -------------------------------------------------------------------------------- 1 | package dev.aaa1115910.bv.mobile.activities 2 | 3 | import android.os.Bundle 4 | import androidx.activity.ComponentActivity 5 | import androidx.activity.compose.setContent 6 | import androidx.compose.material3.windowsizeclass.ExperimentalMaterial3WindowSizeClassApi 7 | import androidx.compose.material3.windowsizeclass.calculateWindowSizeClass 8 | import dev.aaa1115910.bv.mobile.screen.HistoryScreen 9 | import dev.aaa1115910.bv.mobile.theme.BVMobileTheme 10 | 11 | class HistoryActivity : ComponentActivity() { 12 | @OptIn(ExperimentalMaterial3WindowSizeClassApi::class) 13 | override fun onCreate(savedInstanceState: Bundle?) { 14 | super.onCreate(savedInstanceState) 15 | setContent { 16 | val windowSize = calculateWindowSizeClass(this) 17 | BVMobileTheme { 18 | HistoryScreen( 19 | windowSize = windowSize 20 | ) 21 | } 22 | } 23 | } 24 | } -------------------------------------------------------------------------------- /app/mobile/src/main/kotlin/dev/aaa1115910/bv/mobile/activities/LoginActivity.kt: -------------------------------------------------------------------------------- 1 | package dev.aaa1115910.bv.mobile.activities 2 | 3 | import android.os.Bundle 4 | import androidx.activity.ComponentActivity 5 | import androidx.activity.compose.setContent 6 | import dev.aaa1115910.bv.mobile.screen.LoginScreen 7 | import dev.aaa1115910.bv.mobile.theme.BVMobileTheme 8 | 9 | class LoginActivity : ComponentActivity() { 10 | override fun onCreate(savedInstanceState: Bundle?) { 11 | super.onCreate(savedInstanceState) 12 | setContent { 13 | BVMobileTheme { 14 | LoginScreen() 15 | } 16 | } 17 | } 18 | } -------------------------------------------------------------------------------- /app/mobile/src/main/kotlin/dev/aaa1115910/bv/mobile/activities/MainActivity.kt: -------------------------------------------------------------------------------- 1 | package dev.aaa1115910.bv.mobile.activities 2 | 3 | import android.os.Bundle 4 | import androidx.activity.ComponentActivity 5 | import androidx.activity.compose.setContent 6 | import androidx.core.splashscreen.SplashScreen.Companion.installSplashScreen 7 | import dev.aaa1115910.bv.mobile.screen.MobileMainScreen 8 | import dev.aaa1115910.bv.mobile.theme.BVMobileTheme 9 | 10 | class MainActivity : ComponentActivity() { 11 | override fun onCreate(savedInstanceState: Bundle?) { 12 | installSplashScreen() 13 | super.onCreate(savedInstanceState) 14 | setContent { 15 | BVMobileTheme { 16 | MobileMainScreen() 17 | } 18 | } 19 | } 20 | } -------------------------------------------------------------------------------- /app/mobile/src/main/kotlin/dev/aaa1115910/bv/mobile/activities/UserSpaceActivity.kt: -------------------------------------------------------------------------------- 1 | package dev.aaa1115910.bv.mobile.activities 2 | 3 | import android.content.Context 4 | import android.content.Intent 5 | import android.os.Bundle 6 | import androidx.activity.ComponentActivity 7 | import androidx.activity.compose.setContent 8 | import dev.aaa1115910.bv.mobile.screen.UserSpaceScreen 9 | import dev.aaa1115910.bv.mobile.theme.BVMobileTheme 10 | 11 | class UserSpaceActivity : ComponentActivity() { 12 | companion object { 13 | fun actionStart(context: Context, mid: Long, name: String) { 14 | context.startActivity( 15 | Intent(context, UserSpaceActivity::class.java).apply { 16 | putExtra("mid", mid) 17 | putExtra("name", name) 18 | } 19 | ) 20 | } 21 | } 22 | 23 | override fun onCreate(savedInstanceState: Bundle?) { 24 | super.onCreate(savedInstanceState) 25 | setContent { 26 | BVMobileTheme { 27 | UserSpaceScreen() 28 | } 29 | } 30 | } 31 | } -------------------------------------------------------------------------------- /app/mobile/src/main/kotlin/dev/aaa1115910/bv/mobile/screen/settings/details/DebugContent.kt: -------------------------------------------------------------------------------- 1 | package dev.aaa1115910.bv.mobile.screen.settings.details 2 | 3 | import androidx.compose.runtime.Composable 4 | import androidx.compose.ui.Modifier 5 | 6 | @Composable 7 | fun DebugContent( 8 | modifier: Modifier = Modifier 9 | ) { 10 | 11 | } -------------------------------------------------------------------------------- /app/mobile/src/main/res/values/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 动态详情 4 | 我的收藏 5 | 我的追番 6 | 我的关注 7 | 历史记录 8 | 用户登录 9 | 设置 10 | 用户空间 11 | 视频播放 12 | -------------------------------------------------------------------------------- /app/mobile/src/main/res/values/themes.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 7 | 8 | 8 | 9 |