gitextract_fcqp1f9p/ ├── .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 ├── CHANGELOG.md ├── 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/ │ │ │ ├── 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 │ │ │ └── dev/ │ │ │ └── aaa1115910/ │ │ │ └── bv/ │ │ │ └── mobile/ │ │ │ ├── activities/ │ │ │ │ ├── DynamicDetailActivity.kt │ │ │ │ ├── FavoriteActivity.kt │ │ │ │ ├── FollowingSeasonActivity.kt │ │ │ │ ├── FollowingUserActivity.kt │ │ │ │ ├── HistoryActivity.kt │ │ │ │ ├── IntentHandlerActivity.kt │ │ │ │ ├── LoginActivity.kt │ │ │ │ ├── MainActivity.kt │ │ │ │ ├── QrTokenResultActivity.kt │ │ │ │ ├── SettingsActivity.kt │ │ │ │ ├── UserSpaceActivity.kt │ │ │ │ └── VideoPlayerActivity.kt │ │ │ ├── component/ │ │ │ │ ├── home/ │ │ │ │ │ ├── SearchBar.kt │ │ │ │ │ ├── UserDialog.kt │ │ │ │ │ └── dynamic/ │ │ │ │ │ ├── DynamicItem.kt │ │ │ │ │ └── DynamicUserItem.kt │ │ │ │ ├── player/ │ │ │ │ │ └── VideoPlayerPages.kt │ │ │ │ ├── preferences/ │ │ │ │ │ ├── PreferenceGroup.kt │ │ │ │ │ ├── PreferencesPreview.kt │ │ │ │ │ └── items/ │ │ │ │ │ ├── BaseListItem.kt │ │ │ │ │ ├── ListItemPreference.kt │ │ │ │ │ ├── RadioPreference.kt │ │ │ │ │ ├── SwitchPreference.kt │ │ │ │ │ └── TextPreference.kt │ │ │ │ ├── reply/ │ │ │ │ │ ├── CommentItem.kt │ │ │ │ │ ├── Comments.kt │ │ │ │ │ ├── Replies.kt │ │ │ │ │ └── ReplySheetScaffold.kt │ │ │ │ ├── search/ │ │ │ │ │ ├── PgcCard.kt │ │ │ │ │ ├── UgcCard.kt │ │ │ │ │ └── UserCard.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 │ │ │ │ ├── QrTokenResultScreen.kt │ │ │ │ ├── RegionBlockScreen.kt │ │ │ │ ├── UserSpaceScreen.kt │ │ │ │ ├── VideoPlayerScreen.kt │ │ │ │ ├── home/ │ │ │ │ │ ├── DynamicScreen.kt │ │ │ │ │ ├── HomeScreen.kt │ │ │ │ │ ├── SearchScreen.kt │ │ │ │ │ ├── home/ │ │ │ │ │ │ ├── PopularPage.kt │ │ │ │ │ │ └── RcmdPage.kt │ │ │ │ │ └── search/ │ │ │ │ │ ├── SearchInput.kt │ │ │ │ │ └── SearchResult.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 │ │ │ ├── kotlin/ │ │ │ │ ├── coil/ │ │ │ │ │ └── transform/ │ │ │ │ │ └── BlurTransformation.kt │ │ │ │ ├── de/ │ │ │ │ │ └── schnettler/ │ │ │ │ │ └── datastore/ │ │ │ │ │ └── manager/ │ │ │ │ │ ├── DataStoreManager.kt │ │ │ │ │ └── PreferenceRequest.kt │ │ │ │ └── dev/ │ │ │ │ └── aaa1115910/ │ │ │ │ ├── bv/ │ │ │ │ │ ├── BVApp.kt │ │ │ │ │ ├── activities/ │ │ │ │ │ │ └── LauncherActivity.kt │ │ │ │ │ ├── component/ │ │ │ │ │ │ ├── BvPlayerPreview.kt │ │ │ │ │ │ ├── DevelopingTip.kt │ │ │ │ │ │ ├── FpsMonitor.kt │ │ │ │ │ │ ├── QrImage.kt │ │ │ │ │ │ └── settings/ │ │ │ │ │ │ └── UpdateDialog.kt │ │ │ │ │ ├── dao/ │ │ │ │ │ │ ├── AppDatabase.kt │ │ │ │ │ │ ├── SearchHistoryDao.kt │ │ │ │ │ │ └── UserDao.kt │ │ │ │ │ ├── entity/ │ │ │ │ │ │ ├── AuthData.kt │ │ │ │ │ │ ├── BvScheme.kt │ │ │ │ │ │ ├── InterfaceMode.kt │ │ │ │ │ │ ├── NavSwitchMode.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 │ │ │ │ │ ├── player/ │ │ │ │ │ │ └── entity/ │ │ │ │ │ │ ├── DefaultSubtitle.kt │ │ │ │ │ │ ├── NextVideoStrategy.kt │ │ │ │ │ │ ├── PlayerDefaultStartPosition.kt │ │ │ │ │ │ └── PlayerLoadNextAction.kt │ │ │ │ │ ├── repository/ │ │ │ │ │ │ ├── UserRepository.kt │ │ │ │ │ │ └── VideoInfoRepository.kt │ │ │ │ │ ├── ui/ │ │ │ │ │ │ └── theme/ │ │ │ │ │ │ ├── Theme.kt │ │ │ │ │ │ └── Typography.kt │ │ │ │ │ ├── util/ │ │ │ │ │ │ ├── AbiUtil.kt │ │ │ │ │ │ ├── BlacklistUtil.kt │ │ │ │ │ │ ├── CodecUtil.kt │ │ │ │ │ │ ├── CoilConfig.kt │ │ │ │ │ │ ├── DanmakuRateLimiter.kt │ │ │ │ │ │ ├── DeviceUtil.kt │ │ │ │ │ │ ├── EnumExtends.kt │ │ │ │ │ │ ├── Extends.kt │ │ │ │ │ │ ├── LiveStreamUrlFetcher.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 │ │ │ │ │ ├── live/ │ │ │ │ │ │ └── LiveViewModel.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 │ │ │ │ │ ├── ugc/ │ │ │ │ │ │ ├── UgcAiViewModel.kt │ │ │ │ │ │ ├── UgcAnimalViewModel.kt │ │ │ │ │ │ ├── UgcCarViewModel.kt │ │ │ │ │ │ ├── UgcCinephileViewModel.kt │ │ │ │ │ │ ├── UgcDanceViewModel.kt │ │ │ │ │ │ ├── UgcDougaViewModel.kt │ │ │ │ │ │ ├── UgcEmotionViewModel.kt │ │ │ │ │ │ ├── UgcEntViewModel.kt │ │ │ │ │ │ ├── UgcFashionViewModel.kt │ │ │ │ │ │ ├── UgcFoodViewModel.kt │ │ │ │ │ │ ├── UgcGameViewModel.kt │ │ │ │ │ │ ├── UgcGymViewModel.kt │ │ │ │ │ │ ├── UgcHandmakeViewModel.kt │ │ │ │ │ │ ├── UgcHealthViewModel.kt │ │ │ │ │ │ ├── UgcHomeViewModel.kt │ │ │ │ │ │ ├── UgcInformationViewModel.kt │ │ │ │ │ │ ├── UgcKichikuViewModel.kt │ │ │ │ │ │ ├── UgcKnowledgeViewModel.kt │ │ │ │ │ │ ├── UgcLifeExperienceViewModel.kt │ │ │ │ │ │ ├── UgcLifeJoyViewModel.kt │ │ │ │ │ │ ├── UgcMusicViewModel.kt │ │ │ │ │ │ ├── UgcMysticismViewModel.kt │ │ │ │ │ │ ├── UgcOutdoorsViewModel.kt │ │ │ │ │ │ ├── UgcPaintingViewModel.kt │ │ │ │ │ │ ├── UgcParentingViewModel.kt │ │ │ │ │ │ ├── UgcRuralViewModel.kt │ │ │ │ │ │ ├── UgcShortplayViewModel.kt │ │ │ │ │ │ ├── UgcSportsViewModel.kt │ │ │ │ │ │ ├── UgcTechViewModel.kt │ │ │ │ │ │ ├── UgcTravelViewModel.kt │ │ │ │ │ │ ├── UgcViewModel.kt │ │ │ │ │ │ └── UgcVlogViewModel.kt │ │ │ │ │ ├── user/ │ │ │ │ │ │ ├── FavoriteViewModel.kt │ │ │ │ │ │ ├── FollowViewModel.kt │ │ │ │ │ │ ├── FollowingSeasonViewModel.kt │ │ │ │ │ │ ├── HistoryViewModel.kt │ │ │ │ │ │ ├── ToViewViewModel.kt │ │ │ │ │ │ └── UserSpaceViewModel.kt │ │ │ │ │ └── video/ │ │ │ │ │ └── VideoDetailViewModel.kt │ │ │ │ └── m3qrcode/ │ │ │ │ ├── DampedString.kt │ │ │ │ ├── EmphasizedInterpolator.kt │ │ │ │ ├── EntryAnimationStyle.kt │ │ │ │ ├── MaterialShapeQr.kt │ │ │ │ ├── MaterialShapeQrErrorCorrectionLevel.kt │ │ │ │ ├── MaterialShapeQrState.kt │ │ │ │ └── MaterialShapeRenderer.kt │ │ │ ├── proto/ │ │ │ │ └── blacklist.proto │ │ │ └── res/ │ │ │ ├── drawable/ │ │ │ │ ├── ic_banner_foreground.xml │ │ │ │ ├── ic_banner_foreground_2.xml │ │ │ │ ├── ic_danmaku_count.xml │ │ │ │ ├── ic_gamer_ani.xml │ │ │ │ ├── ic_launcher_foreground.xml │ │ │ │ ├── ic_launcher_foreground_2.xml │ │ │ │ ├── ic_play_count.xml │ │ │ │ ├── ic_up.xml │ │ │ │ ├── qrcode_hor_bar_s2_capsule.xml │ │ │ │ ├── qrcode_hor_bar_s2_half_capsule.xml │ │ │ │ ├── qrcode_hor_bar_s3_capsule.xml │ │ │ │ ├── qrcode_hor_bar_s3_half_capsule.xml │ │ │ │ ├── qrcode_square_s1_circle.xml │ │ │ │ ├── qrcode_square_s1_drop.xml │ │ │ │ ├── qrcode_square_s1_semi_circle.xml │ │ │ │ ├── qrcode_square_s1_square.xml │ │ │ │ ├── qrcode_square_s2_circle.xml │ │ │ │ ├── qrcode_square_s2_clover.xml │ │ │ │ ├── qrcode_square_s2_hexagonal.xml │ │ │ │ ├── qrcode_square_s2_meteroid.xml │ │ │ │ ├── qrcode_square_s2_wiggle_star.xml │ │ │ │ ├── qrcode_square_s3_circle.xml │ │ │ │ ├── qrcode_square_s3_clover.xml │ │ │ │ ├── qrcode_square_s3_hexagonal.xml │ │ │ │ ├── qrcode_square_s3_meteroid.xml │ │ │ │ ├── qrcode_square_s3_wiggle_star.xml │ │ │ │ ├── qrcode_square_s7_ring.xml │ │ │ │ ├── qrcode_ver_bar_s2_capsule.xml │ │ │ │ └── qrcode_ver_bar_s3_capsule.xml │ │ │ ├── mipmap-anydpi-v26/ │ │ │ │ ├── ic_launcher.xml │ │ │ │ └── ic_launcher_round.xml │ │ │ ├── raw/ │ │ │ │ ├── ic_playing.json │ │ │ │ └── lottie_qrcode_background.json │ │ │ ├── values/ │ │ │ │ ├── arrays.xml │ │ │ │ ├── colors.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/ │ │ │ ├── Carousel.kt │ │ │ ├── CommentItem.kt │ │ │ ├── CommentPanel.kt │ │ │ ├── DescriptionPanel.kt │ │ │ ├── FullscreenImageViewer.kt │ │ │ ├── GeetestTvVerifyDialog.kt │ │ │ ├── LibVLCDownloaderDialog.kt │ │ │ ├── LoadingTip.kt │ │ │ ├── RemoteControlPanelDemo.kt │ │ │ ├── SubCommentItem.kt │ │ │ ├── SubCommentPanel.kt │ │ │ ├── TopNav.kt │ │ │ ├── TvAlertDialog.kt │ │ │ ├── UpIcon.kt │ │ │ ├── UserPanel.kt │ │ │ ├── buttons/ │ │ │ │ ├── CoinButton.kt │ │ │ │ ├── FavoriteButton.kt │ │ │ │ ├── LikeButton.kt │ │ │ │ ├── SeasonInfoButtons.kt │ │ │ │ └── ToViewButton.kt │ │ │ ├── live/ │ │ │ │ └── LiveRoomCard.kt │ │ │ ├── pgc/ │ │ │ │ └── IndexFilter.kt │ │ │ ├── search/ │ │ │ │ ├── SearchKeyword.kt │ │ │ │ └── SoftKeyboard.kt │ │ │ ├── settings/ │ │ │ │ ├── SettingListItem.kt │ │ │ │ ├── SettingNumberListItem.kt │ │ │ │ ├── SettingSwitchListItem.kt │ │ │ │ ├── SettingsMenuSelectItem.kt │ │ │ │ └── UpdateDialog.kt │ │ │ └── videocard/ │ │ │ ├── LargeVideoCard.kt │ │ │ ├── SeasonCard.kt │ │ │ ├── SmallVideoCard.kt │ │ │ ├── TabbedVideosPanel.kt │ │ │ └── VideosRow.kt │ │ ├── manager/ │ │ │ ├── FollowStateManager.kt │ │ │ ├── PlayedAidsCache.kt │ │ │ └── VideoUserActionManager.kt │ │ ├── screens/ │ │ │ ├── MainScreen.kt │ │ │ ├── RegionBlockScreen.kt │ │ │ ├── SeasonInfoScreen.kt │ │ │ ├── TagScreen.kt │ │ │ ├── VideoInfoScreen.kt │ │ │ ├── VideoPlayerV3Screen.kt │ │ │ ├── login/ │ │ │ │ ├── AppQRLoginContent.kt │ │ │ │ ├── LoginScreen.kt │ │ │ │ └── SmsLoginContent.kt │ │ │ ├── main/ │ │ │ │ ├── DrawerContent.kt │ │ │ │ ├── HomeContent.kt │ │ │ │ ├── LiveContent.kt │ │ │ │ ├── PgcContent.kt │ │ │ │ ├── UgcContent.kt │ │ │ │ ├── home/ │ │ │ │ │ ├── DynamicsScreen.kt │ │ │ │ │ ├── PopularScreen.kt │ │ │ │ │ └── RecommendScreen.kt │ │ │ │ ├── pgc/ │ │ │ │ │ ├── AnimeContent.kt │ │ │ │ │ ├── DocumentaryContent.kt │ │ │ │ │ ├── GuoChuangContent.kt │ │ │ │ │ ├── MovieContent.kt │ │ │ │ │ ├── PgcCommon.kt │ │ │ │ │ ├── PgcIndexScreen.kt │ │ │ │ │ ├── TvContent.kt │ │ │ │ │ ├── VarietyContent.kt │ │ │ │ │ └── anime/ │ │ │ │ │ └── AnimeTimelineScreen.kt │ │ │ │ └── ugc/ │ │ │ │ ├── UgcChildRegionButtons.kt │ │ │ │ ├── UgcCommon.kt │ │ │ │ ├── UgcContentFactory.kt │ │ │ │ └── UgcStateManager.kt │ │ │ ├── search/ │ │ │ │ ├── SearchInputScreen.kt │ │ │ │ ├── SearchResultFilter.kt │ │ │ │ └── SearchResultScreen.kt │ │ │ ├── settings/ │ │ │ │ ├── LogsScreen.kt │ │ │ │ ├── MediaCodecScreen.kt │ │ │ │ ├── SettingsScreen.kt │ │ │ │ ├── SpeedTestScreen.kt │ │ │ │ └── content/ │ │ │ │ ├── AboutSetting.kt │ │ │ │ ├── InfoSetting.kt │ │ │ │ ├── NetworkSetting.kt │ │ │ │ ├── OtherSetting.kt │ │ │ │ ├── PlayerSetting.kt │ │ │ │ ├── PlayerTypeSetting.kt │ │ │ │ ├── StorageSetting.kt │ │ │ │ └── UISetting.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/ │ │ ├── NavItemsExtensions.kt │ │ ├── PlayerActivityUtil.kt │ │ ├── ProvideListBringIntoViewSpec.kt │ │ └── TvLazyListFocusRestorer.kt │ └── res/ │ └── values/ │ ├── dimens.xml │ ├── strings.xml │ └── themes.xml ├── 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 │ ├── 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 │ └── src/ │ ├── main/ │ │ └── kotlin/ │ │ ├── com/ │ │ │ └── tfowl/ │ │ │ └── ktor/ │ │ │ └── client/ │ │ │ └── plugins/ │ │ │ └── JsoupPlugin.kt │ │ └── dev/ │ │ └── aaa1115910/ │ │ └── biliapi/ │ │ ├── BiliApiConstants.kt │ │ ├── entity/ │ │ │ ├── ApiType.kt │ │ │ ├── CarouselData.kt │ │ │ ├── CodeType.kt │ │ │ ├── Favorite.kt │ │ │ ├── Picture.kt │ │ │ ├── PlayData.kt │ │ │ ├── danmaku/ │ │ │ │ └── DanmakuMask.kt │ │ │ ├── home/ │ │ │ │ └── RecommendData.kt │ │ │ ├── live/ │ │ │ │ ├── LiveArea.kt │ │ │ │ ├── LiveFollowing.kt │ │ │ │ ├── LiveRecommend.kt │ │ │ │ ├── LiveRoom.kt │ │ │ │ └── LiveRoomPlayInfo.kt │ │ │ ├── login/ │ │ │ │ ├── Captcha.kt │ │ │ │ ├── QR.kt │ │ │ │ └── Sms.kt │ │ │ ├── pgc/ │ │ │ │ ├── PgcFeedData.kt │ │ │ │ ├── PgcItem.kt │ │ │ │ ├── PgcType.kt │ │ │ │ └── index/ │ │ │ │ ├── IndexParams.kt │ │ │ │ ├── PgcIndexCondition.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 │ │ │ ├── BiliHttpConstants.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 │ │ │ │ │ ├── ArchiveRelation.kt │ │ │ │ │ ├── GaiaVgateData.kt │ │ │ │ │ ├── PlayUrlResponse.kt │ │ │ │ │ ├── PopularVideosResponse.kt │ │ │ │ │ ├── RelatedVideosResponse.kt │ │ │ │ │ ├── SetVideoFavorite.kt │ │ │ │ │ ├── Tag.kt │ │ │ │ │ ├── Timeline.kt │ │ │ │ │ ├── UgcSeason.kt │ │ │ │ │ ├── VideoDetail.kt │ │ │ │ │ ├── VideoInfo.kt │ │ │ │ │ ├── VideoMoreInfo.kt │ │ │ │ │ ├── VideoOnlineTotal.kt │ │ │ │ │ └── VideoShot.kt │ │ │ │ └── web/ │ │ │ │ ├── Hover.kt │ │ │ │ └── Nav.kt │ │ │ ├── plugins/ │ │ │ │ └── BiliUserAgent.kt │ │ │ └── util/ │ │ │ ├── ApiSign.kt │ │ │ ├── BiliAppConf.kt │ │ │ ├── BiliDns.kt │ │ │ ├── BiliWebConf.kt │ │ │ ├── Brotli.kt │ │ │ ├── Buvid.kt │ │ │ ├── CommonEnumIntSerializer.kt │ │ │ └── Zlib.kt │ │ ├── repositories/ │ │ │ ├── AuthRepository.kt │ │ │ ├── BiliApiModule.kt │ │ │ ├── ChannelRepository.kt │ │ │ ├── CoinRepository.kt │ │ │ ├── CommentRepository.kt │ │ │ ├── FavoriteRepository.kt │ │ │ ├── HistoryRepository.kt │ │ │ ├── LikeRepository.kt │ │ │ ├── LiveRepository.kt │ │ │ ├── LoginRepository.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 ├── doc/ │ └── 弹幕/ │ ├── calc_danmaku_averages.js │ ├── 弹幕code review 报告.md │ ├── 弹幕库优化.md │ ├── 弹幕重构需求.md │ └── 重构后.txt ├── gradle/ │ ├── androidx.versions.toml │ ├── gradle.versions.toml │ ├── libs.versions.toml │ └── wrapper/ │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradle.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 │ │ ├── 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/ │ │ │ ├── danmaku/ │ │ │ │ ├── CacheManager.kt │ │ │ │ ├── DanmakuConfig.kt │ │ │ │ ├── DanmakuEngine.kt │ │ │ │ ├── DanmakuLogStats.kt │ │ │ │ ├── DanmakuPlayer.kt │ │ │ │ ├── DanmakuTimer.kt │ │ │ │ ├── DanmakuView.kt │ │ │ │ └── model/ │ │ │ │ ├── Danmaku.kt │ │ │ │ ├── DanmakuItem.kt │ │ │ │ ├── DanmakuKind.kt │ │ │ │ └── RenderSnapshot.kt │ │ │ ├── entity/ │ │ │ │ ├── Audio.kt │ │ │ │ ├── ControllerButtonConfig.kt │ │ │ │ ├── DanmakuSize.kt │ │ │ │ ├── DanmakuTransparency.kt │ │ │ │ ├── DanmakuType.kt │ │ │ │ ├── DefaultStartPosition.kt │ │ │ │ ├── LiveCodec.kt │ │ │ │ ├── PlayMode.kt │ │ │ │ ├── PortraitVideoFixMode.kt │ │ │ │ ├── RequestState.kt │ │ │ │ ├── Resolution.kt │ │ │ │ ├── VideoAspectRatio.kt │ │ │ │ ├── VideoCodec.kt │ │ │ │ ├── VideoListItem.kt │ │ │ │ ├── VideoPlayerClosedCaptionMenuItem.kt │ │ │ │ ├── VideoPlayerDanmakuMenuItem.kt │ │ │ │ ├── VideoPlayerData.kt │ │ │ │ ├── VideoPlayerMenuNavItem.kt │ │ │ │ ├── VideoPlayerOthersMenuItem.kt │ │ │ │ ├── VideoPlayerPictureMenuItem.kt │ │ │ │ └── VideoRotation.kt │ │ │ ├── seekbar/ │ │ │ │ ├── SeekBar.kt │ │ │ │ ├── SeekBarThumb.kt │ │ │ │ └── SeekMoveState.kt │ │ │ └── util/ │ │ │ ├── DanmakuMaskFinder.kt │ │ │ ├── DanmakuMaskModifiers.kt │ │ │ └── VideoShotExtends.kt │ │ └── res/ │ │ ├── drawable/ │ │ │ ├── ic_danmaku_hide.xml │ │ │ ├── ic_danmaku_on.xml │ │ │ ├── ic_play_mode_custom.xml │ │ │ ├── ic_play_mode_list_order.xml │ │ │ ├── ic_play_mode_list_order_reverse.xml │ │ │ ├── ic_play_mode_part_and_episode.xml │ │ │ ├── ic_play_mode_part_and_episode_reverse.xml │ │ │ ├── ic_play_mode_related_video.xml │ │ │ ├── ic_play_mode_single.xml │ │ │ ├── ic_play_mode_single_loop.xml │ │ │ ├── ic_subtitle_off.xml │ │ │ ├── ic_subtitle_on.xml │ │ │ ├── next_play_fill.xml │ │ │ ├── person.xml │ │ │ └── person_following.xml │ │ └── 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 │ ├── LiveViewerCountTip.kt │ ├── MenuController.kt │ ├── OnlineViewerCountTip.kt │ ├── PlayStateTips.kt │ ├── SeekController.kt │ ├── SkipTip.kt │ ├── UserActionContent.kt │ ├── VideoListController.kt │ ├── VideoPlayerController.kt │ ├── VideoShot.kt │ └── playermenu/ │ ├── ClosedCaptionMenu.kt │ ├── DanmakuMenu.kt │ ├── MenuNav.kt │ ├── OthersMenu.kt │ ├── PictureMenu.kt │ └── component/ │ ├── CheckBoxMenuList.kt │ ├── MenuListItem.kt │ ├── RadioMenuList.kt │ └── StepLessMenuItem.kt ├── settings.gradle.kts ├── symbols/ │ ├── .gitignore │ ├── build.gradle.kts │ └── src/ │ └── main/ │ └── kotlin/ │ └── dev/ │ └── aaa1115910/ │ └── symbols/ │ └── Symbols.kt └── utils/ ├── .gitignore ├── build.gradle.kts ├── consumer-rules.pro ├── proguard-rules.pro └── src/ └── main/ ├── AndroidManifest.xml └── kotlin/ └── dev/ └── aaa1115910/ └── bv/ └── util/ ├── DateExtends.kt ├── Debounce.kt ├── FirebaseUtil.kt ├── FocusRequesterExtends.kt ├── ImageExtends.kt ├── KLoggerExtends.kt ├── KeyEventExtends.kt ├── LongExtends.kt ├── SnapshotStateListExtends.kt ├── Timer.kt ├── ToastExtends.kt ├── createCustomInitialFocusRestorerModifiers.kt └── ifElse.kt