├── app
├── .gitignore
├── src
│ ├── main
│ │ ├── res
│ │ │ ├── values
│ │ │ │ ├── strings.xml
│ │ │ │ ├── colors.xml
│ │ │ │ ├── bool.xml
│ │ │ │ └── themes.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
│ │ │ ├── values-night
│ │ │ │ ├── bool.xml
│ │ │ │ └── themes.xml
│ │ │ ├── mipmap-anydpi
│ │ │ │ ├── ic_launcher.xml
│ │ │ │ └── ic_launcher_round.xml
│ │ │ ├── values-v29
│ │ │ │ └── themes.xml
│ │ │ ├── values-night-v29
│ │ │ │ └── themes.xml
│ │ │ ├── layout
│ │ │ │ ├── layout_effect_bg.xml
│ │ │ │ └── activity_main.xml
│ │ │ ├── drawable
│ │ │ │ ├── ic_download.xml
│ │ │ │ ├── round_play_arrow_24.xml
│ │ │ │ ├── ic_arrow_back_24.xml
│ │ │ │ ├── round_pause_24.xml
│ │ │ │ ├── round_skip_next_24.xml
│ │ │ │ ├── round_skip_previous_24.xml
│ │ │ │ ├── outline_refresh_24.xml
│ │ │ │ ├── ic_baseline_favorite_24.xml
│ │ │ │ ├── ic_youtube.xml
│ │ │ │ ├── ic_github.xml
│ │ │ │ ├── ic_outline_favorite_24.xml
│ │ │ │ ├── ic_qq_music.xml
│ │ │ │ ├── ic_netease_cloud_music.xml
│ │ │ │ ├── ic_launcher_foreground.xml
│ │ │ │ ├── ic_bilibili.xml
│ │ │ │ └── ic_launcher_background.xml
│ │ │ ├── xml
│ │ │ │ ├── backup_rules.xml
│ │ │ │ ├── data_extraction_rules.xml
│ │ │ │ └── file_paths.xml
│ │ │ └── menu
│ │ │ │ └── menu_netease_web_login.xml
│ │ ├── java
│ │ │ └── moe
│ │ │ │ └── ouom
│ │ │ │ └── neriplayer
│ │ │ │ ├── util
│ │ │ │ ├── DynamicProxySelector.kt
│ │ │ │ ├── Ext.kt
│ │ │ │ ├── NightModeHelper.kt
│ │ │ │ ├── Utils.kt
│ │ │ │ ├── Formatters.kt
│ │ │ │ ├── JsonUtil.kt
│ │ │ │ └── SearchManager.kt
│ │ │ │ ├── core
│ │ │ │ ├── api
│ │ │ │ │ ├── netease
│ │ │ │ │ │ └── CryptoMode.kt
│ │ │ │ │ ├── search
│ │ │ │ │ │ ├── SearchApi.kt
│ │ │ │ │ │ └── SongData.kt
│ │ │ │ │ └── bili
│ │ │ │ │ │ └── BiliPlaybackRepository.kt
│ │ │ │ ├── player
│ │ │ │ │ ├── ReactiveRenderersFactory.kt
│ │ │ │ │ └── ConditionalHttpDataSourceFactory.kt
│ │ │ │ └── di
│ │ │ │ │ └── AppContainer.kt
│ │ │ │ ├── ui
│ │ │ │ ├── AppUiState.kt
│ │ │ │ ├── viewmodel
│ │ │ │ │ ├── DownloadManagerViewModel.kt
│ │ │ │ │ ├── auth
│ │ │ │ │ │ └── BiliAuthViewModel.kt
│ │ │ │ │ ├── playlist
│ │ │ │ │ │ ├── LocalPlaylistDetailViewModel.kt
│ │ │ │ │ │ └── BiliPlaylistDetailViewModel.kt
│ │ │ │ │ ├── NowPlayingViewModel.kt
│ │ │ │ │ └── debug
│ │ │ │ │ │ ├── SearchApiProbeViewModel.kt
│ │ │ │ │ │ └── NeteaseApiProbeViewModel.kt
│ │ │ │ ├── theme
│ │ │ │ │ └── NeriTheme.kt
│ │ │ │ ├── component
│ │ │ │ │ ├── NeriBottomBar.kt
│ │ │ │ │ ├── HsvPicker.kt
│ │ │ │ │ └── WaveformSlider.kt
│ │ │ │ ├── CustomBackground.kt
│ │ │ │ ├── screen
│ │ │ │ │ ├── host
│ │ │ │ │ │ └── ExploreHostScreen.kt
│ │ │ │ │ └── debug
│ │ │ │ │ │ └── SearchApiProbeScreen.kt
│ │ │ │ └── util
│ │ │ │ │ └── PlaylistSavers.kt
│ │ │ │ ├── NeriPlayerApplication.kt
│ │ │ │ ├── data
│ │ │ │ ├── PlaylistUsageRepository.kt
│ │ │ │ ├── BiliCookieRepository.kt
│ │ │ │ ├── BiliAudioSelector.kt
│ │ │ │ ├── PlayHistoryRepository.kt
│ │ │ │ └── NeteaseCookieRepository.kt
│ │ │ │ └── navigation
│ │ │ │ └── Destinations.kt
│ │ └── AndroidManifest.xml
│ ├── androidTest
│ │ └── java
│ │ │ └── moe
│ │ │ └── ouom
│ │ │ └── neriplayer
│ │ │ └── ExampleInstrumentedTest.kt
│ └── test
│ │ └── java
│ │ └── moe
│ │ └── ouom
│ │ └── neriplayer
│ │ └── ExampleUnitTest.kt
├── libs
│ └── lib-decoder-ffmpeg-release.aar
└── proguard-rules.pro
├── .idea
├── .gitignore
├── codeStyles
│ ├── codeStyleConfig.xml
│ └── Project.xml
├── compiler.xml
├── vcs.xml
├── dictionaries
│ └── project.xml
├── AndroidProjectSystem.xml
├── migrations.xml
├── misc.xml
├── deploymentTargetSelector.xml
├── gradle.xml
├── fileTemplates
│ └── includes
│ │ └── File Header.java
├── runConfigurations.xml
└── inspectionProfiles
│ └── Project_Default.xml
├── gradle
├── wrapper
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
└── libs.versions.toml
├── .gitignore
├── settings.gradle.kts
├── .github
├── PULL_REQUEST_TEMPLATE.md
├── ISSUE_TEMPLATE
│ ├── feature-request.yml
│ ├── bug-report.yml
│ └── suggestion-submission.yml
└── workflows
│ └── android_ci.yml
├── gradle.properties
├── gradlew.bat
├── README.md
└── CODE_OF_CONDUCT.md
/app/.gitignore:
--------------------------------------------------------------------------------
1 | /build
--------------------------------------------------------------------------------
/.idea/.gitignore:
--------------------------------------------------------------------------------
1 | # Default ignored files
2 | /shelf/
3 | /workspace.xml
4 |
--------------------------------------------------------------------------------
/app/src/main/res/values/strings.xml:
--------------------------------------------------------------------------------
1 |