docs(tree): sync android/PROJECT_TREE.md #43

Merged
whitlocktech merged 1 commits from chore/sync-android-tree into main 2026-07-22 21:27:02 +00:00

View File

@@ -9,308 +9,340 @@ A snapshot of the tracked files in the repository (build output, dependencies, a
git-ignored paths are excluded). git-ignored paths are excluded).
```text ```text
Android-app-main/ android-app/
── android-app/ ── .gitea/
├── .gitea/ ├── scripts/
│ └── workflows/ │ └── gen_tree.py
│ ├── pr-checks.yml │ └── workflows/
│ ├── release.yml │ ├── pr-checks.yml
── sonarqube.yml ── release.yml
├── app/ ├── sonarqube.yml
── licenses/ ── sync-project-tree.yml
│ │ └── Cinzel-OFL.txt ├── app/
│ ├── src/ │ ├── licenses/
│ │ ── debug/ │ │ ── Cinzel-OFL.txt
│ │ │ └── res/ │ ├── src/
│ │ │ └── xml/ │ │ ├── debug/
│ │ │ └── network_security_config.xml │ │ │ └── res/
│ │ ├── main/ │ │ └── xml/
── java/ ── network_security_config.xml
│ │ │ │ └── com/ │ │ ├── main/
│ │ │ │ └── runicgateway/ │ │ │ ├── java/
│ │ │ │ └── app/ │ │ │ │ └── com/
│ │ │ │ ├── core/ │ │ │ │ └── runicgateway/
│ │ │ │ │ ├── auth/ │ │ │ │ ── app/
│ │ │ │ │ │ ├── sso/ │ │ │ │ ├── core/
│ │ │ │ │ │ │ ├── EncryptedPendingSsoStore.kt │ │ │ │ │ ├── auth/
│ │ │ │ │ │ │ ├── PendingSsoStore.kt │ │ │ │ │ │ ├── sso/
│ │ │ │ │ │ │ ├── Pkce.kt │ │ │ │ │ │ │ ├── EncryptedPendingSsoStore.kt
│ │ │ │ │ │ │ ── SsoAuthManager.kt │ │ │ │ │ │ │ ── PendingSsoStore.kt
│ │ │ │ │ │ ├── DeviceNameProvider.kt │ │ │ │ │ │ │ ├── Pkce.kt
│ │ │ │ │ │ ├── EncryptedTokenStore.kt │ │ │ │ │ │ │ └── SsoAuthManager.kt
│ │ │ │ │ │ ├── EncryptedTrustTokenStore.kt │ │ │ │ │ │ ├── DeviceNameProvider.kt
│ │ │ │ │ │ ├── Session.kt │ │ │ │ │ │ ├── EncryptedTokenStore.kt
│ │ │ │ │ │ ├── SessionManager.kt │ │ │ │ │ │ ├── EncryptedTrustTokenStore.kt
│ │ │ │ │ │ ├── TokenStore.kt │ │ │ │ │ │ ├── Session.kt
│ │ │ │ │ │ ── TrustTokenStore.kt │ │ │ │ │ │ ── SessionManager.kt
│ │ │ │ │ ├── net/ │ │ │ │ │ │ ├── TokenStore.kt
│ │ │ │ │ │ ── AuthInterceptor.kt │ │ │ │ │ │ ── TrustTokenStore.kt
│ │ │ │ │ │ ├── BaseUrlHolder.kt │ │ │ │ │ ├── net/
│ │ │ │ │ │ ├── HostSelectionInterceptor.kt │ │ │ │ │ │ ├── AuthInterceptor.kt
│ │ │ │ │ │ ├── Http.kt │ │ │ │ │ │ ├── BaseUrlHolder.kt
│ │ │ │ │ │ ├── ServerUrl.kt │ │ │ │ │ │ ├── HostSelectionInterceptor.kt
│ │ │ │ │ │ ├── ShardStreamClient.kt │ │ │ │ │ │ ├── Http.kt
│ │ │ │ │ │ ├── ShardStreamEvent.kt │ │ │ │ │ │ ├── ServerUrl.kt
│ │ │ │ │ │ ├── TokenAuthenticator.kt │ │ │ │ │ │ ├── ShardStream.kt
│ │ │ │ │ │ ── UserAgentInterceptor.kt │ │ │ │ │ │ ── ShardStreamClient.kt
│ │ │ │ │ ├── prefs/ │ │ │ │ │ │ ├── ShardStreamEvent.kt
│ │ │ │ │ │ ── ServerPreferences.kt │ │ │ │ │ │ ── TokenAuthenticator.kt
│ │ │ │ │ ├── push/ │ │ │ │ │ │ └── UserAgentInterceptor.kt
│ │ │ │ │ │ ├── NtfyStreamClient.kt │ │ │ │ │ ├── prefs/
│ │ │ │ │ │ ── NtfyTopic.kt │ │ │ │ │ │ ── ServerPreferences.kt
│ │ │ │ │ ├── PushManager.kt │ │ │ │ │ ├── push/
│ │ │ │ │ │ ├── PushNotifier.kt │ │ │ │ │ │ ├── NtfyStreamClient.kt
│ │ │ │ │ │ ├── PushPreferences.kt │ │ │ │ │ │ ├── NtfyTopic.kt
│ │ │ │ │ │ ├── PushService.kt │ │ │ │ │ │ ├── PushManager.kt
│ │ │ │ │ │ ├── PushStreams.kt │ │ │ │ │ │ ├── PushNotifier.kt
│ │ │ │ │ │ ── PushTickle.kt │ │ │ │ │ │ ── PushPreferences.kt
│ │ │ │ │ ├── result/ │ │ │ │ │ │ ├── PushService.kt
│ │ │ │ │ │ ── ApiResult.kt │ │ │ │ │ │ ── PushStreams.kt
│ │ │ │ │ ├── web/ │ │ │ │ │ │ └── PushTickle.kt
│ │ │ │ │ │ ├── WebHandoff.kt │ │ │ │ │ ├── result/
│ │ │ │ │ │ └── WebsiteUrls.kt │ │ │ │ │ │ └── ApiResult.kt
│ │ │ │ │ ── AppConfig.kt │ │ │ │ │ ── web/
│ │ │ │ ├── data/ │ │ │ │ │ │ ├── WebHandoff.kt
│ │ │ │ │ ├── api/ │ │ │ │ │ │ └── WebsiteUrls.kt
│ │ │ │ │ │ ├── dto/ │ │ │ │ │ └── AppConfig.kt
│ │ │ │ │ │ │ ├── AccountDto.kt │ │ │ │ ├── data/
│ │ │ │ │ │ │ ├── AdminDto.kt │ │ │ │ │ ├── api/
│ │ │ │ │ │ │ ├── AuthDto.kt │ │ │ │ │ │ ├── dto/
│ │ │ │ │ │ │ ├── ContactDto.kt │ │ │ │ │ │ │ ├── AccountDto.kt
│ │ │ │ │ │ │ ├── NotificationsDto.kt │ │ │ │ │ │ │ ├── AdminDto.kt
│ │ │ │ │ │ │ ├── PageDto.kt │ │ │ │ │ │ │ ├── AuthDto.kt
│ │ │ │ │ │ │ ├── PlayerShardDto.kt │ │ │ │ │ │ │ ├── ContactDto.kt
│ │ │ │ │ │ │ ├── PostDto.kt │ │ │ │ │ │ │ ├── NotificationsDto.kt
│ │ │ │ │ │ │ ├── PublicDto.kt │ │ │ │ │ │ │ ├── PageDto.kt
│ │ │ │ │ │ │ ├── ShardDto.kt │ │ │ │ │ │ │ ├── PlayerShardDto.kt
│ │ │ │ │ │ │ ├── SsoDto.kt │ │ │ │ │ │ │ ├── PostDto.kt
│ │ │ │ │ │ │ ── WikiDto.kt │ │ │ │ │ │ │ ── PublicDto.kt
│ │ │ │ │ │ ├── AdminApi.kt │ │ │ │ │ │ │ ├── ShardDto.kt
│ │ │ │ │ │ ├── AuthApi.kt │ │ │ │ │ │ │ ├── SsoDto.kt
│ │ │ │ │ │ ├── AuthRefreshApi.kt │ │ │ │ │ │ │ └── WikiDto.kt
│ │ │ │ │ │ ├── MeApi.kt │ │ │ │ │ │ ├── AdminApi.kt
│ │ │ │ │ │ ├── NotificationsApi.kt │ │ │ │ │ │ ├── AuthApi.kt
│ │ │ │ │ │ ├── PlayerShardApi.kt │ │ │ │ │ │ ├── AuthRefreshApi.kt
│ │ │ │ │ │ ├── PublicApi.kt │ │ │ │ │ │ ├── MeApi.kt
│ │ │ │ │ │ ── SsoApi.kt │ │ │ │ │ │ ── NotificationsApi.kt
│ │ │ │ │ └── repository/ │ │ │ │ │ │ ├── PlayerShardApi.kt
│ │ │ │ │ ├── AccountRepository.kt │ │ │ │ │ ├── PublicApi.kt
│ │ │ │ │ ── AdminRepository.kt │ │ │ │ │ ── SsoApi.kt
│ │ │ │ │ ├── AuthRepository.kt │ │ │ │ │ └── repository/
│ │ │ │ │ ├── ConnectionRepository.kt │ │ │ │ │ ├── AccountRepository.kt
│ │ │ │ │ ├── ContactRepository.kt │ │ │ │ │ ├── AdminRepository.kt
│ │ │ │ │ ├── ContentRepository.kt │ │ │ │ │ ├── AuthRepository.kt
│ │ │ │ │ ├── NotificationsRepository.kt │ │ │ │ │ ├── ConnectionRepository.kt
│ │ │ │ │ ├── PlayerShardRepository.kt │ │ │ │ │ ├── ContactRepository.kt
│ │ │ │ │ ├── SettingsRepository.kt │ │ │ │ │ ├── ContentRepository.kt
│ │ │ │ │ ├── ShardRepository.kt │ │ │ │ │ ├── NotificationsRepository.kt
│ │ │ │ │ ── WikiRepository.kt │ │ │ │ │ ── PlayerShardRepository.kt
│ │ │ │ ├── di/ │ │ │ │ │ ├── SettingsRepository.kt
│ │ │ │ │ ├── AppModule.kt │ │ │ │ │ ├── ShardRepository.kt
│ │ │ │ │ ├── NetworkModule.kt │ │ │ │ │ └── WikiRepository.kt
│ │ │ │ │ └── StorageModule.kt │ │ │ │ ├── di/
│ │ │ │ ├── ui/ │ │ │ │ │ ├── AppModule.kt
│ │ │ │ │ ├── admin/ │ │ │ │ │ ├── NetworkModule.kt
│ │ │ │ │ │ ├── AdminContentScreen.kt │ │ │ │ │ └── StorageModule.kt
│ │ │ │ │ │ ├── AdminContentViewModel.kt │ │ │ │ ├── ui/
│ │ │ │ │ ├── AdminDashboardScreen.kt │ │ │ │ │ ├── admin/
│ │ │ │ │ │ ├── AdminDashboardViewModel.kt │ │ │ │ │ │ ├── AdminContentScreen.kt
│ │ │ │ │ │ ├── AdminModerationScreen.kt │ │ │ │ │ │ ├── AdminContentViewModel.kt
│ │ │ │ │ │ ├── AdminModerationViewModel.kt │ │ │ │ │ │ ├── AdminDashboardScreen.kt
│ │ │ │ │ │ ├── AdminSupportScreen.kt │ │ │ │ │ │ ├── AdminDashboardViewModel.kt
│ │ │ │ │ │ ── AdminSupportViewModel.kt │ │ │ │ │ │ ── AdminModerationScreen.kt
│ │ │ │ │ ├── auth/ │ │ │ │ │ │ ├── AdminModerationViewModel.kt
│ │ │ │ │ │ ├── AccountScreen.kt │ │ │ │ │ │ ├── AdminSupportScreen.kt
│ │ │ │ │ │ ── AccountViewModel.kt │ │ │ │ │ │ ── AdminSupportViewModel.kt
│ │ │ │ │ │ ├── LoginScreen.kt │ │ │ │ │ ├── auth/
│ │ │ │ │ │ ├── LoginViewModel.kt │ │ │ │ │ │ ├── AccountScreen.kt
│ │ │ │ │ │ ├── RecoveryCodesScreen.kt │ │ │ │ │ │ ├── AccountViewModel.kt
│ │ │ │ │ │ ├── RecoveryCodesViewModel.kt │ │ │ │ │ │ ├── LoginScreen.kt
│ │ │ │ │ │ ├── TrustedDevicesScreen.kt │ │ │ │ │ │ ├── LoginViewModel.kt
│ │ │ │ │ │ ── TrustedDevicesViewModel.kt │ │ │ │ │ │ ── RecoveryCodesScreen.kt
│ │ │ │ │ ├── components/ │ │ │ │ │ │ ├── RecoveryCodesViewModel.kt
│ │ │ │ │ │ ├── HtmlText.kt │ │ │ │ │ │ ├── TrustedDevicesScreen.kt
│ │ │ │ │ │ ── StateViews.kt │ │ │ │ │ │ ── TrustedDevicesViewModel.kt
│ │ │ │ │ │ └── ThemeComponents.kt │ │ │ │ │ ├── components/
│ │ │ │ │ ├── connect/ │ │ │ │ │ │ ├── HtmlText.kt
│ │ │ │ │ │ ├── ConnectScreen.kt │ │ │ │ │ │ ├── StateViews.kt
│ │ │ │ │ │ └── ConnectViewModel.kt │ │ │ │ │ │ └── ThemeComponents.kt
│ │ │ │ │ ├── contact/ │ │ │ │ │ ├── connect/
│ │ │ │ │ │ ├── ContactScreen.kt │ │ │ │ │ │ ├── ConnectScreen.kt
│ │ │ │ │ │ └── ContactViewModel.kt │ │ │ │ │ │ └── ConnectViewModel.kt
│ │ │ │ │ ├── home/ │ │ │ │ │ ├── contact/
│ │ │ │ │ │ ├── HomeScreen.kt │ │ │ │ │ │ ├── ContactScreen.kt
│ │ │ │ │ │ └── HomeViewModel.kt │ │ │ │ │ │ └── ContactViewModel.kt
│ │ │ │ │ ├── navigation/ │ │ │ │ │ ├── home/
│ │ │ │ │ │ ├── Menu.kt │ │ │ │ │ │ ├── HomeScreen.kt
│ │ │ │ │ │ └── Routes.kt │ │ │ │ │ │ └── HomeViewModel.kt
│ │ │ │ │ ├── news/ │ │ │ │ │ ├── navigation/
│ │ │ │ │ │ ├── NewsScreen.kt │ │ │ │ │ │ ├── Menu.kt
│ │ │ │ │ │ ── NewsViewModel.kt │ │ │ │ │ │ ── Routes.kt
│ │ │ │ │ │ ├── PostScreen.kt │ │ │ │ │ ├── news/
│ │ │ │ │ │ ── PostViewModel.kt │ │ │ │ │ │ ── NewsScreen.kt
│ │ │ │ │ ├── notifications/ │ │ │ │ │ │ ├── NewsViewModel.kt
│ │ │ │ │ │ ├── NotificationsScreen.kt │ │ │ │ │ │ ├── PostScreen.kt
│ │ │ │ │ │ └── NotificationsViewModel.kt │ │ │ │ │ │ └── PostViewModel.kt
│ │ │ │ │ ├── page/ │ │ │ │ │ ├── notifications/
│ │ │ │ │ │ ├── BlockRenderer.kt │ │ │ │ │ │ ├── NotificationsScreen.kt
│ │ │ │ │ │ ── PageScreen.kt │ │ │ │ │ │ ── NotificationsViewModel.kt
│ │ │ │ │ │ └── PageViewModel.kt │ │ │ │ │ ── page/
│ │ │ │ │ ├── player/ │ │ │ │ │ │ ├── BlockRenderer.kt
│ │ │ │ │ │ ├── CharacterSheetScreen.kt │ │ │ │ │ │ ├── PageScreen.kt
│ │ │ │ │ │ ── CharactersScreen.kt │ │ │ │ │ │ ── PageViewModel.kt
│ │ │ │ │ │ ├── CharactersViewModel.kt │ │ │ │ │ ├── player/
│ │ │ │ │ │ ├── CharacterViewModel.kt │ │ │ │ │ │ ├── CharacterSheetScreen.kt
│ │ │ │ │ │ ├── MyHousesScreen.kt │ │ │ │ │ │ ├── CharactersScreen.kt
│ │ │ │ │ │ ├── MyHousesViewModel.kt │ │ │ │ │ │ ├── CharactersViewModel.kt
│ │ │ │ │ │ ├── VendorsScreen.kt │ │ │ │ │ │ ├── CharacterViewModel.kt
│ │ │ │ │ │ ── VendorsViewModel.kt │ │ │ │ │ │ ── MyHousesScreen.kt
│ │ │ │ │ ├── session/ │ │ │ │ │ │ ├── MyHousesViewModel.kt
│ │ │ │ │ │ ── SessionViewModel.kt │ │ │ │ │ │ ── VendorsScreen.kt
│ │ │ │ │ ├── shard/ │ │ │ │ │ │ └── VendorsViewModel.kt
│ │ │ │ │ │ ├── ChampsScreen.kt │ │ │ │ │ ├── session/
│ │ │ │ │ │ ── ChampsViewModel.kt │ │ │ │ │ │ ── SessionViewModel.kt
│ │ │ │ │ │ ├── FrameFields.kt │ │ │ │ │ ├── shard/
│ │ │ │ │ │ ├── GovernorsScreen.kt │ │ │ │ │ │ ├── ChampsScreen.kt
│ │ │ │ │ │ ├── GovernorsViewModel.kt │ │ │ │ │ │ ├── ChampsViewModel.kt
│ │ │ │ │ │ ├── GuildsScreen.kt │ │ │ │ │ │ ├── FrameFields.kt
│ │ │ │ │ │ ├── GuildsViewModel.kt │ │ │ │ │ │ ├── GovernorsScreen.kt
│ │ │ │ │ │ ├── HousesScreen.kt │ │ │ │ │ │ ├── GovernorsViewModel.kt
│ │ │ │ │ │ ├── HousesViewModel.kt │ │ │ │ │ │ ├── GuildsScreen.kt
│ │ │ │ │ │ ├── LiveBoard.kt │ │ │ │ │ │ ├── GuildsViewModel.kt
│ │ │ │ │ │ ├── ShardComponents.kt │ │ │ │ │ │ ├── HousesScreen.kt
│ │ │ │ │ │ ├── ShardEventText.kt │ │ │ │ │ │ ├── HousesViewModel.kt
│ │ │ │ │ │ ├── ShardScreen.kt │ │ │ │ │ │ ├── LiveBoard.kt
│ │ │ │ │ │ ── ShardViewModel.kt │ │ │ │ │ │ ── ShardComponents.kt
│ │ │ │ │ ├── theme/ │ │ │ │ │ │ ├── ShardEventText.kt
│ │ │ │ │ │ ├── BrandColor.kt │ │ │ │ │ │ ├── ShardScreen.kt
│ │ │ │ │ │ ── Color.kt │ │ │ │ │ │ ── ShardViewModel.kt
│ │ │ │ │ │ ├── Font.kt │ │ │ │ │ ├── theme/
│ │ │ │ │ │ ├── Theme.kt │ │ │ │ │ │ ├── BrandColor.kt
│ │ │ │ │ │ ── Type.kt │ │ │ │ │ │ ── Color.kt
│ │ │ │ │ ├── wiki/ │ │ │ │ │ │ ├── Font.kt
│ │ │ │ │ │ ├── WikiPageScreen.kt │ │ │ │ │ │ ├── Theme.kt
│ │ │ │ │ │ ── WikiPageViewModel.kt │ │ │ │ │ │ ── Type.kt
│ │ │ │ │ ├── WikiScreen.kt │ │ │ │ │ ├── wiki/
│ │ │ │ │ │ ── WikiViewModel.kt │ │ │ │ │ │ ── WikiPageScreen.kt
│ │ │ │ │ ├── AppViewModel.kt │ │ │ │ │ │ ├── WikiPageViewModel.kt
│ │ │ │ │ ├── LocalAssetResolver.kt │ │ │ │ │ │ ├── WikiScreen.kt
│ │ │ │ │ ├── RunicApp.kt │ │ │ │ │ │ └── WikiViewModel.kt
│ │ │ │ │ ── UiState.kt │ │ │ │ │ ── AppViewModel.kt
│ │ │ │ ├── MainActivity.kt │ │ │ │ │ ├── LocalAssetResolver.kt
│ │ │ │ ── RunicGatewayApp.kt │ │ │ │ │ ├── RunicApp.kt
│ │ │ ── res/ │ │ │ │ ── UiState.kt
│ │ ├── drawable/ │ │ │ │ ├── MainActivity.kt
│ │ └── ic_launcher_background.xml │ │ │ │ └── RunicGatewayApp.kt
│ │ │ ├── drawable-anydpi/ │ │ │ ├── res/
│ │ │ │ ── ic_stat_name.xml │ │ │ │ ── drawable/
│ │ │ │ ── drawable-hdpi/ │ │ │ │ ── ic_launcher_background.xml
│ │ │ │ ── ic_stat_name.png │ │ │ │ ── drawable-anydpi/
│ │ │ │ ── drawable-mdpi/ │ │ │ │ ── ic_stat_name.xml
│ │ │ │ ── ic_stat_name.png │ │ │ │ ── drawable-hdpi/
│ │ │ │ ── drawable-xhdpi/ │ │ │ │ ── ic_stat_name.png
│ │ │ │ ── ic_stat_name.png │ │ │ │ ── drawable-mdpi/
│ │ │ │ ── drawable-xxhdpi/ │ │ │ │ ── ic_stat_name.png
│ │ │ │ ── ic_stat_name.png │ │ │ │ ── drawable-xhdpi/
│ │ │ │ ── font/ │ │ │ │ ── ic_stat_name.png
│ │ │ │ │ └── cinzel_variable.ttf │ │ │ │ ├── drawable-xxhdpi/
│ │ │ │ ── mipmap-anydpi-v26/ │ │ │ │ ── ic_stat_name.png
│ │ │ │ ├── ic_launcher_round.xml │ │ │ │ ├── font/
│ │ │ │ │ └── ic_launcher.xml │ │ │ │ │ └── cinzel_variable.ttf
│ │ │ │ ├── mipmap-hdpi/ │ │ │ │ ├── mipmap-anydpi-v26/
│ │ │ │ │ ├── ic_launcher_foreground.webp │ │ │ │ │ ├── ic_launcher.xml
│ │ │ │ │ ── ic_launcher_round.webp │ │ │ │ │ ── ic_launcher_round.xml
│ │ │ │ ── ic_launcher.webp │ │ │ │ ── mipmap-hdpi/
│ │ │ │ ├── mipmap-mdpi/ │ │ │ │ ├── ic_launcher.webp
│ │ │ │ │ ├── ic_launcher_foreground.webp │ │ │ │ │ ├── ic_launcher_foreground.webp
│ │ │ │ │ ── ic_launcher_round.webp │ │ │ │ │ ── ic_launcher_round.webp
│ │ │ │ ── ic_launcher.webp │ │ │ │ ── mipmap-mdpi/
│ │ │ │ ├── mipmap-xhdpi/ │ │ │ │ ├── ic_launcher.webp
│ │ │ │ │ ├── ic_launcher_foreground.webp │ │ │ │ │ ├── ic_launcher_foreground.webp
│ │ │ │ │ ── ic_launcher_round.webp │ │ │ │ │ ── ic_launcher_round.webp
│ │ │ │ ── ic_launcher.webp │ │ │ │ ── mipmap-xhdpi/
│ │ │ │ ├── mipmap-xxhdpi/ │ │ │ │ ├── ic_launcher.webp
│ │ │ │ │ ├── ic_launcher_foreground.webp │ │ │ │ │ ├── ic_launcher_foreground.webp
│ │ │ │ │ ── ic_launcher_round.webp │ │ │ │ │ ── ic_launcher_round.webp
│ │ │ │ ── ic_launcher.webp │ │ │ │ ── mipmap-xxhdpi/
│ │ │ │ ├── mipmap-xxxhdpi/ │ │ │ │ ├── ic_launcher.webp
│ │ │ │ │ ├── ic_launcher_foreground.webp │ │ │ │ │ ├── ic_launcher_foreground.webp
│ │ │ │ │ ── ic_launcher_round.webp │ │ │ │ │ ── ic_launcher_round.webp
│ │ │ │ ── ic_launcher.webp │ │ │ │ ── mipmap-xxxhdpi/
│ │ │ │ ├── values/ │ │ │ │ ├── ic_launcher.webp
│ │ │ │ │ ├── colors.xml │ │ │ │ │ ├── ic_launcher_foreground.webp
│ │ │ │ │ ── strings.xml │ │ │ │ │ ── ic_launcher_round.webp
│ │ │ │ ── themes.xml │ │ │ │ ── values/
│ │ │ │ ── xml/ │ │ │ │ ── colors.xml
│ │ │ │ ├── backup_rules.xml │ │ │ │ ├── strings.xml
│ │ │ │ ├── data_extraction_rules.xml │ │ │ │ └── themes.xml
│ │ │ │ └── network_security_config.xml │ │ │ │ └── xml/
│ │ │ ├── AndroidManifest.xml │ │ │ ├── backup_rules.xml
│ │ │ └── ic_launcher-playstore.png │ │ │ ├── data_extraction_rules.xml
│ │ └── test/ │ │ │ │ └── network_security_config.xml
│ │ └── java/ │ │ ├── AndroidManifest.xml
│ │ └── com/ │ │ └── ic_launcher-playstore.png
│ │ └── runicgateway/ │ │ └── test/
│ │ └── app/ │ │ └── java/
│ │ ── core/ │ │ ── com/
│ │ │ ├── auth/ │ │ └── runicgateway/
│ │ │ │ ├── sso/ │ │ └── app/
│ │ │ │ │ ├── PkceTest.kt │ │ ├── core/
│ │ │ │ │ └── SsoAuthManagerTest.kt │ │ │ ├── auth/
│ │ │ │ ── SessionManagerTest.kt │ │ │ │ ── sso/
│ │ │ ├── net/ │ │ │ │ │ ├── PkceTest.kt
│ │ │ │ ├── HostRewriteTest.kt │ │ │ │ │ └── SsoAuthManagerTest.kt
│ │ │ │ ── ServerUrlTest.kt │ │ │ │ ── SessionManagerTest.kt
│ │ │ │ └── ShardStreamClientTest.kt │ │ │ ├── net/
│ │ │ ├── push/ │ │ │ │ ├── HostRewriteTest.kt
│ │ │ │ ├── NtfyTopicTest.kt │ │ │ │ ├── ServerUrlTest.kt
│ │ │ │ └── PushTickleTest.kt │ │ │ │ └── ShardStreamClientTest.kt
│ │ │ ── result/ │ │ │ ── push/
│ │ │ ── ApiResultTest.kt │ │ │ ── NtfyTopicTest.kt
│ │ ├── data/ │ │ │ │ └── PushTickleTest.kt
│ │ │ ── api/ │ │ │ ── result/
│ │ │ ── dto/ │ │ │ ── ApiResultExtrasTest.kt
│ │ │ ├── AccountDtoTest.kt │ │ │ └── ApiResultTest.kt
│ │ │ │ ├── AuthDtoTest.kt │ │ ├── data/
│ │ │ │ ├── NotificationsDtoTest.kt │ │ │ ├── api/
│ │ │ │ ├── PlayerShardDtoTest.kt │ │ │ │ ├── dto/
│ │ │ │ ── ShardDtoTest.kt │ │ │ │ ── AccountDtoTest.kt
│ │ │ └── repository/ │ │ │ │ │ ├── AdminDtoTest.kt
│ │ │ ├── AccountTrustedDevicesTest.kt │ │ │ │ │ ├── AuthDtoTest.kt
│ │ │ └── ConnectionVersionGuardTest.kt │ │ │ │ ├── AuthRequestDtoTest.kt
│ │ ├── ui/ │ │ │ │ │ ├── ContentDtoTest.kt
│ │ │ ├── navigation/ │ │ │ │ │ ├── NotificationsDtoTest.kt
│ │ │ │ └── MenuAccessTest.kt │ │ │ │ │ ├── PlayerGameDataDtoTest.kt
│ │ │ ├── notifications/ │ │ │ │ │ ├── PlayerShardDtoTest.kt
│ │ │ │ └── NotificationRoutingTest.kt │ │ │ │ │ ├── PublicDtoTest.kt
│ │ │ ├── player/ │ │ │ │ │ ├── ShardBoardDtoTest.kt
│ │ │ │ ── CharacterSheetHelpersTest.kt │ │ │ │ │ ├── ShardDtoTest.kt
│ │ │ ├── shard/ │ │ │ │ │ ├── SsoDtoTest.kt
│ │ │ │ ├── LiveBoardTest.kt │ │ │ │ │ └── WikiDtoTest.kt
│ │ │ │ └── ShardEventTextTest.kt │ │ │ │ └── fake/
│ │ │ ├── theme/ │ │ │ │ ├── FakeAdminApi.kt
│ │ │ │ └── BrandColorTest.kt │ │ │ │ ├── FakePlayerShardApi.kt
│ │ │ └── UiStateTest.kt │ │ │ │ ├── FakePublicApi.kt
│ │ └── ScaffoldSanityTest.kt │ │ │ │ └── FakeShardStream.kt
── build.gradle.kts │ │ ── repository/
│ └── proguard-rules.pro │ │ │ ├── AccountTrustedDevicesTest.kt
├── gradle/ │ │ │ └── ConnectionVersionGuardTest.kt
│ ├── wrapper/ │ │ ├── ui/
│ ├── gradle-wrapper.jar │ │ │ ├── admin/
│ │ ── gradle-wrapper.properties │ │ │ │ ── AdminContentViewModelTest.kt
│ └── libs.versions.toml │ │ │ │ ├── AdminDashboardViewModelTest.kt
├── .gitattributes │ │ │ │ ├── AdminModerationViewModelTest.kt
├── .gitignore │ │ │ │ └── AdminSupportViewModelTest.kt
├── build.gradle.kts │ │ │ ├── contact/
├── CODE_OF_CONDUCT.md │ │ │ │ └── ContactViewModelTest.kt
├── CONTRIBUTING.md │ │ ├── navigation/
├── CONTRIBUTORS.md │ │ │ │ └── MenuAccessTest.kt
├── gradle.properties │ │ ├── notifications/
── gradlew │ │ │ │ ── NotificationRoutingTest.kt
├── gradlew.bat │ │ │ ├── player/
├── LICENSE.md │ │ │ │ ├── CharacterSheetHelpersTest.kt
├── README.md │ │ │ │ ├── CharactersViewModelTest.kt
── SECURITY.md │ │ │ │ ── PlayerViewModelTest.kt
├── settings.gradle.kts │ │ │ ├── shard/
└── sonar-project.properties │ │ │ │ ├── FrameFieldsTest.kt
│ │ │ │ ├── LiveBoardTest.kt
│ │ │ │ ├── ShardBoardViewModelTest.kt
│ │ │ │ └── ShardEventTextTest.kt
│ │ │ ├── theme/
│ │ │ │ └── BrandColorTest.kt
│ │ │ ├── ContentViewModelTest.kt
│ │ │ └── UiStateTest.kt
│ │ ├── util/
│ │ │ ├── FakeApiSupport.kt
│ │ │ └── MainDispatcherRule.kt
│ │ └── ScaffoldSanityTest.kt
│ ├── build.gradle.kts
│ └── proguard-rules.pro
├── gradle/
│ ├── wrapper/
│ │ ├── gradle-wrapper.jar
│ │ └── gradle-wrapper.properties
│ └── libs.versions.toml
├── .gitattributes
├── .gitignore
├── build.gradle.kts
├── CODE_OF_CONDUCT.md
├── CONTRIBUTING.md
├── CONTRIBUTORS.md
├── gradle.properties
├── gradlew
├── gradlew.bat
├── LICENSE.md
├── README.md
├── SECURITY.md
├── settings.gradle.kts
└── sonar-project.properties
``` ```