# Android App — Project Tree

> **Auto-generated.** This file is maintained by the `sync-project-tree` CI workflow in
> the [`RunicGateway/Android-app`](https://gitea.whitlocktech.com/RunicGateway/Android-app) repository, which
> opens a pull request here whenever the tracked file layout on `main` changes. Do not edit
> by hand — changes will be overwritten by the next sync.

A snapshot of the tracked files in the repository (build output, dependencies, and other
git-ignored paths are excluded).

```text
android-app/
├── .gitea/
│   ├── scripts/
│   │   └── gen_tree.py
│   └── workflows/
│       ├── pr-checks.yml
│       ├── release.yml
│       ├── sonarqube.yml
│       └── sync-project-tree.yml
├── app/
│   ├── licenses/
│   │   ├── Cinzel-OFL.txt
│   │   ├── EBGaramond-OFL.txt
│   │   ├── IMFellEnglish-OFL.txt
│   │   ├── Inter-OFL.txt
│   │   ├── Merriweather-OFL.txt
│   │   ├── PlayfairDisplay-OFL.txt
│   │   ├── SourceSans3-OFL.txt
│   │   └── WorkSans-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
│   │   │   │               │   │   │   ├── ShardContentDto.kt
│   │   │   │               │   │   │   ├── ShardDto.kt
│   │   │   │               │   │   │   ├── SsoDto.kt
│   │   │   │               │   │   │   └── WikiDto.kt
│   │   │   │               │   │   ├── AdminApi.kt
│   │   │   │               │   │   ├── AuthApi.kt
│   │   │   │               │   │   ├── AuthRefreshApi.kt
│   │   │   │               │   │   ├── MeApi.kt
│   │   │   │               │   │   ├── NotificationsApi.kt
│   │   │   │               │   │   ├── PlayerShardApi.kt
│   │   │   │               │   │   ├── PublicApi.kt
│   │   │   │               │   │   └── SsoApi.kt
│   │   │   │               │   ├── appearance/
│   │   │   │               │   │   ├── SettingsJson.kt
│   │   │   │               │   │   └── SiteAppearance.kt
│   │   │   │               │   └── repository/
│   │   │   │               │       ├── AccountRepository.kt
│   │   │   │               │       ├── AdminRepository.kt
│   │   │   │               │       ├── AuthRepository.kt
│   │   │   │               │       ├── ConnectionRepository.kt
│   │   │   │               │       ├── ContactRepository.kt
│   │   │   │               │       ├── ContentRepository.kt
│   │   │   │               │       ├── NotificationsRepository.kt
│   │   │   │               │       ├── PlayerShardRepository.kt
│   │   │   │               │       ├── SettingsRepository.kt
│   │   │   │               │       ├── ShardFeaturesRepository.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/
│   │   │   │               │   │   ├── BrandAssets.kt
│   │   │   │               │   │   ├── HtmlText.kt
│   │   │   │               │   │   ├── StateViews.kt
│   │   │   │               │   │   └── ThemeComponents.kt
│   │   │   │               │   ├── connect/
│   │   │   │               │   │   ├── ConnectScreen.kt
│   │   │   │               │   │   └── ConnectViewModel.kt
│   │   │   │               │   ├── contact/
│   │   │   │               │   │   ├── ContactScreen.kt
│   │   │   │               │   │   └── ContactViewModel.kt
│   │   │   │               │   ├── home/
│   │   │   │               │   │   ├── HomeScreen.kt
│   │   │   │               │   │   └── HomeViewModel.kt
│   │   │   │               │   ├── navigation/
│   │   │   │               │   │   ├── Menu.kt
│   │   │   │               │   │   ├── NavOverrides.kt
│   │   │   │               │   │   ├── NavPaths.kt
│   │   │   │               │   │   ├── NavTree.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/
│   │   │   │               │   │   ├── AtlasScreen.kt
│   │   │   │               │   │   ├── AtlasViewModel.kt
│   │   │   │               │   │   ├── ChampsScreen.kt
│   │   │   │               │   │   ├── ChampsViewModel.kt
│   │   │   │               │   │   ├── FrameFields.kt
│   │   │   │               │   │   ├── GovernorsScreen.kt
│   │   │   │               │   │   ├── GovernorsViewModel.kt
│   │   │   │               │   │   ├── GuildsScreen.kt
│   │   │   │               │   │   ├── GuildsViewModel.kt
│   │   │   │               │   │   ├── HousesScreen.kt
│   │   │   │               │   │   ├── HousesViewModel.kt
│   │   │   │               │   │   ├── LeaderboardsScreen.kt
│   │   │   │               │   │   ├── LeaderboardsViewModel.kt
│   │   │   │               │   │   ├── LiveBoard.kt
│   │   │   │               │   │   ├── MarketScreen.kt
│   │   │   │               │   │   ├── MarketViewModel.kt
│   │   │   │               │   │   ├── RulesScreen.kt
│   │   │   │               │   │   ├── RulesViewModel.kt
│   │   │   │               │   │   ├── ShardComponents.kt
│   │   │   │               │   │   ├── ShardEventText.kt
│   │   │   │               │   │   ├── ShardScreen.kt
│   │   │   │               │   │   └── ShardViewModel.kt
│   │   │   │               │   ├── theme/
│   │   │   │               │   │   ├── BrandColor.kt
│   │   │   │               │   │   ├── Color.kt
│   │   │   │               │   │   ├── Font.kt
│   │   │   │               │   │   ├── ShardPalette.kt
│   │   │   │               │   │   ├── ShardStructure.kt
│   │   │   │               │   │   ├── ShardTypeface.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
│   │   │   │   │   ├── eb_garamond_italic.ttf
│   │   │   │   │   ├── eb_garamond_variable.ttf
│   │   │   │   │   ├── im_fell_english_italic.ttf
│   │   │   │   │   ├── im_fell_english_regular.ttf
│   │   │   │   │   ├── inter_variable.ttf
│   │   │   │   │   ├── merriweather_italic.ttf
│   │   │   │   │   ├── merriweather_variable.ttf
│   │   │   │   │   ├── playfair_display_italic.ttf
│   │   │   │   │   ├── playfair_display_variable.ttf
│   │   │   │   │   ├── source_sans_3_variable.ttf
│   │   │   │   │   └── work_sans_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
│   │                       │   │   │   ├── ShardContentDtoTest.kt
│   │                       │   │   │   ├── ShardDtoTest.kt
│   │                       │   │   │   ├── SsoDtoTest.kt
│   │                       │   │   │   └── WikiDtoTest.kt
│   │                       │   │   └── fake/
│   │                       │   │       ├── FakeAdminApi.kt
│   │                       │   │       ├── FakePlayerShardApi.kt
│   │                       │   │       ├── FakePublicApi.kt
│   │                       │   │       └── FakeShardStream.kt
│   │                       │   ├── appearance/
│   │                       │   │   ├── SettingsJsonTest.kt
│   │                       │   │   └── SiteAppearanceTest.kt
│   │                       │   └── repository/
│   │                       │       ├── AccountTrustedDevicesTest.kt
│   │                       │       ├── ConnectionVersionGuardTest.kt
│   │                       │       └── ShardFeaturesRepositoryTest.kt
│   │                       ├── ui/
│   │                       │   ├── admin/
│   │                       │   │   ├── AdminContentViewModelTest.kt
│   │                       │   │   ├── AdminDashboardViewModelTest.kt
│   │                       │   │   ├── AdminModerationViewModelTest.kt
│   │                       │   │   └── AdminSupportViewModelTest.kt
│   │                       │   ├── components/
│   │                       │   │   └── BrandAssetsTest.kt
│   │                       │   ├── contact/
│   │                       │   │   └── ContactViewModelTest.kt
│   │                       │   ├── navigation/
│   │                       │   │   ├── MenuAccessTest.kt
│   │                       │   │   ├── MenuFeatureGatingTest.kt
│   │                       │   │   ├── NavOverridesTest.kt
│   │                       │   │   ├── NavPathsTest.kt
│   │                       │   │   └── NavTreeTest.kt
│   │                       │   ├── notifications/
│   │                       │   │   └── NotificationRoutingTest.kt
│   │                       │   ├── player/
│   │                       │   │   ├── CharacterSheetHelpersTest.kt
│   │                       │   │   ├── CharactersViewModelTest.kt
│   │                       │   │   └── PlayerViewModelTest.kt
│   │                       │   ├── shard/
│   │                       │   │   ├── FrameFieldsTest.kt
│   │                       │   │   ├── LiveBoardTest.kt
│   │                       │   │   ├── ShardBoardViewModelTest.kt
│   │                       │   │   ├── ShardContentHelpersTest.kt
│   │                       │   │   ├── ShardContentViewModelTest.kt
│   │                       │   │   └── ShardEventTextTest.kt
│   │                       │   ├── theme/
│   │                       │   │   ├── BrandColorTest.kt
│   │                       │   │   ├── ShardColorSchemeTest.kt
│   │                       │   │   ├── ShardPaletteTest.kt
│   │                       │   │   ├── ShardStructureTest.kt
│   │                       │   │   └── ShardTypefaceTest.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
```
