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