├── .aiexclude ├── .editorconfig ├── .github ├── CODEOWNERS ├── ci-gradle.properties └── workflows │ ├── pr.yml │ ├── staging.yml │ ├── unused-resources.yml │ └── upload-to-play-store.yml ├── .gitignore ├── .idea ├── .gitignore ├── codeInsightSettings.xml ├── codeStyles │ ├── Project.xml │ └── codeStyleConfig.xml └── runConfigurations │ └── Run_all_unit_tests.xml ├── LICENSE ├── README.md ├── app ├── apollo │ ├── README.md │ ├── apollo-auth-listeners │ │ ├── build.gradle.kts │ │ └── src │ │ │ └── main │ │ │ └── kotlin │ │ │ └── com │ │ │ └── hedvig │ │ │ └── android │ │ │ └── apollo │ │ │ └── auth │ │ │ └── listeners │ │ │ ├── di │ │ │ └── ApolloAuthListenersModule.kt │ │ │ └── normalizedcache │ │ │ └── ApolloNormalizedCacheAuthEventListener.kt │ ├── apollo-core │ │ ├── build.gradle.kts │ │ └── src │ │ │ └── main │ │ │ ├── AndroidManifest.xml │ │ │ └── kotlin │ │ │ └── com │ │ │ └── hedvig │ │ │ └── android │ │ │ └── apollo │ │ │ ├── ApolloCallExt.kt │ │ │ └── OperationResult.kt │ ├── apollo-network-cache-manager │ │ ├── build.gradle.kts │ │ └── src │ │ │ └── main │ │ │ └── kotlin │ │ │ └── com │ │ │ └── hedvig │ │ │ └── android │ │ │ └── apollo │ │ │ ├── NetworkCacheManager.kt │ │ │ └── di │ │ │ └── NetworkCacheManagerModule.kt │ ├── apollo-octopus-public │ │ ├── build.gradle.kts │ │ └── src │ │ │ └── main │ │ │ ├── AndroidManifest.xml │ │ │ ├── graphql │ │ │ └── com │ │ │ │ └── hedvig │ │ │ │ └── android │ │ │ │ └── apollo │ │ │ │ └── octopus │ │ │ │ ├── extra.graphqls │ │ │ │ └── graphql │ │ │ │ ├── AddonVariantFragment.graphql │ │ │ │ ├── FragmentClaimFragment.graphql │ │ │ │ ├── FragmentMoneyFragment.graphql │ │ │ │ └── FragmentProductVariantFragment.graphql │ │ │ └── kotlin │ │ │ └── com │ │ │ └── hedvig │ │ │ └── android │ │ │ └── apollo │ │ │ └── octopus │ │ │ └── MarkdownAdapter.kt │ ├── apollo-octopus-test │ │ ├── build.gradle.kts │ │ └── src │ │ │ └── main │ │ │ └── kotlin │ │ │ └── com │ │ │ └── hedvig │ │ │ └── android │ │ │ └── apollo │ │ │ └── octopus │ │ │ └── test │ │ │ └── OctopusFakeResolver.kt │ └── apollo-test │ │ ├── build.gradle.kts │ │ └── src │ │ └── main │ │ └── kotlin │ │ └── com │ │ └── hedvig │ │ └── android │ │ └── apollo │ │ └── test │ │ └── TestApolloClientRule.kt ├── app │ ├── build.gradle.kts │ ├── proguard-rules.pro │ └── src │ │ ├── debug │ │ ├── AndroidManifest.xml │ │ ├── google-services.json │ │ └── res │ │ │ └── values │ │ │ └── strings.xml │ │ ├── main │ │ ├── AndroidManifest.xml │ │ ├── ic_launcher-playstore.png │ │ ├── kotlin │ │ │ └── com │ │ │ │ └── hedvig │ │ │ │ └── android │ │ │ │ └── app │ │ │ │ ├── AppInitializers.kt │ │ │ │ ├── HedvigApplication.kt │ │ │ │ ├── MainActivity.kt │ │ │ │ ├── apollo │ │ │ │ ├── DeviceIdInterceptor.kt │ │ │ │ └── LoggingInterceptor.kt │ │ │ │ ├── di │ │ │ │ ├── AppModule.kt │ │ │ │ ├── ApplicationModule.kt │ │ │ │ └── KoinInitializer.kt │ │ │ │ ├── externalnavigator │ │ │ │ └── ExternalNavigatorImpl.kt │ │ │ │ ├── firebase │ │ │ │ ├── FirebaseBreadcrumbTimberTree.kt │ │ │ │ └── FirebaseCrashlyticsLogExceptionTree.kt │ │ │ │ ├── logginginterceptor │ │ │ │ └── HedvigHttpLoggingInterceptor.kt │ │ │ │ ├── navigation │ │ │ │ ├── HedvigNavHost.kt │ │ │ │ ├── RememberNavigator.kt │ │ │ │ └── RootGraph.kt │ │ │ │ ├── notification │ │ │ │ ├── Util.kt │ │ │ │ └── senders │ │ │ │ │ ├── ChatNotificationSender.kt │ │ │ │ │ ├── ClaimClosedNotificationSender.kt │ │ │ │ │ ├── ContactInfoSender.kt │ │ │ │ │ ├── CrossSellNotificationSender.kt │ │ │ │ │ ├── GenericNotificationSender.kt │ │ │ │ │ ├── InsuranceEvidenceNotificationSender.kt │ │ │ │ │ ├── InsuranceTabNotificationSender.kt │ │ │ │ │ ├── NotificationSendersExt.kt │ │ │ │ │ ├── PaymentNotificationSender.kt │ │ │ │ │ ├── ReferralsNotificationSender.kt │ │ │ │ │ └── TravelAddonSender.kt │ │ │ │ ├── startup │ │ │ │ ├── DatadogInitializerImpl.kt │ │ │ │ └── TimberInitializer.kt │ │ │ │ ├── ui │ │ │ │ ├── HedvigApp.kt │ │ │ │ ├── HedvigAppState.kt │ │ │ │ ├── HedvigAppUi.kt │ │ │ │ ├── IsTopLevelGraphInHierarchy.kt │ │ │ │ └── NavigationSuite.kt │ │ │ │ └── urihandler │ │ │ │ ├── DeepLinkFirstUriHandler.kt │ │ │ │ └── SafeAndroidUriHandler.kt │ │ └── res │ │ │ ├── drawable │ │ │ ├── ic_launcher_background.xml │ │ │ ├── ic_launcher_foreground.xml │ │ │ └── ic_splash.xml │ │ │ ├── mipmap-anydpi-v26 │ │ │ ├── ic_launcher.xml │ │ │ └── ic_launcher_round.xml │ │ │ ├── mipmap-hdpi │ │ │ ├── ic_launcher.png │ │ │ └── ic_launcher_round.png │ │ │ ├── mipmap-mdpi │ │ │ ├── ic_launcher.png │ │ │ └── ic_launcher_round.png │ │ │ ├── mipmap-xhdpi │ │ │ ├── ic_launcher.png │ │ │ └── ic_launcher_round.png │ │ │ ├── mipmap-xxhdpi │ │ │ ├── ic_launcher.png │ │ │ └── ic_launcher_round.png │ │ │ ├── mipmap-xxxhdpi │ │ │ ├── ic_launcher.png │ │ │ └── ic_launcher_round.png │ │ │ ├── values-night │ │ │ ├── colors.xml │ │ │ └── themes.xml │ │ │ ├── values │ │ │ ├── colors.xml │ │ │ ├── strings.xml │ │ │ └── themes.xml │ │ │ └── xml │ │ │ └── provider_paths.xml │ │ ├── release │ │ ├── google-services.json │ │ └── res │ │ │ ├── values │ │ │ └── strings.xml │ │ │ └── xml │ │ │ └── file_paths.xml │ │ └── staging │ │ ├── google-services.json │ │ └── res │ │ ├── values │ │ └── strings.xml │ │ └── xml │ │ └── file_paths.xml ├── audio-player-data │ ├── build.gradle.kts │ └── src │ │ ├── main │ │ └── kotlin │ │ │ └── com │ │ │ └── hedvig │ │ │ └── audio │ │ │ └── player │ │ │ └── data │ │ │ ├── AudioPlayer.kt │ │ │ ├── AudioPlayerState.kt │ │ │ ├── ProgressPercentage.kt │ │ │ └── SIgnedAudioUrl.kt │ │ └── test │ │ └── kotlin │ │ └── com │ │ └── hedvig │ │ └── audio │ │ └── player │ │ └── data │ │ └── SignedAudioUrlTest.kt ├── audio-player-ui │ ├── build.gradle.kts │ └── src │ │ └── main │ │ ├── AndroidManifest.xml │ │ └── kotlin │ │ └── com │ │ └── hedvig │ │ └── android │ │ └── audio │ │ └── player │ │ ├── HedvigAudioPlayer.kt │ │ ├── audioplayer │ │ └── AudioPlayerImpl.kt │ │ └── internal │ │ ├── FakeAudioWaves.kt │ │ ├── FakeWaveAudioPlayerCard.kt │ │ ├── MediaPlayerExt.kt │ │ └── WaveInteraction.kt ├── auth │ ├── auth-core-public │ │ ├── build.gradle.kts │ │ └── src │ │ │ ├── main │ │ │ └── kotlin │ │ │ │ └── com │ │ │ │ └── hedvig │ │ │ │ └── android │ │ │ │ └── auth │ │ │ │ ├── AccessTokenProvider.kt │ │ │ │ ├── AndroidAccessTokenProvider.kt │ │ │ │ ├── AuthStatus.kt │ │ │ │ ├── AuthTokenService.kt │ │ │ │ ├── AuthTokenServiceImpl.kt │ │ │ │ ├── LogoutUseCase.kt │ │ │ │ ├── MemberIdService.kt │ │ │ │ ├── di │ │ │ │ └── AuthModule.kt │ │ │ │ ├── event │ │ │ │ ├── AuthEvent.kt │ │ │ │ ├── AuthEventBroadcaster.kt │ │ │ │ └── AuthEventStorage.kt │ │ │ │ ├── interceptor │ │ │ │ └── AuthTokenRefreshingInterceptor.kt │ │ │ │ ├── storage │ │ │ │ └── AuthTokenStorage.kt │ │ │ │ └── token │ │ │ │ ├── AuthTokens.kt │ │ │ │ ├── LocalAccessToken.kt │ │ │ │ └── LocalRefreshToken.kt │ │ │ └── test │ │ │ └── kotlin │ │ │ └── com │ │ │ └── hedvig │ │ │ └── android │ │ │ └── auth │ │ │ ├── interceptor │ │ │ └── AuthTokenRefreshingInterceptorTest.kt │ │ │ └── storage │ │ │ └── AuthTokenStorageTest.kt │ ├── auth-core-test │ │ ├── build.gradle.kts │ │ └── src │ │ │ └── main │ │ │ └── kotlin │ │ │ └── com │ │ │ └── hedvig │ │ │ └── android │ │ │ └── auth │ │ │ └── test │ │ │ ├── FakeAuthRepository.kt │ │ │ └── TestAuthTokenService.kt │ ├── auth-event-core │ │ ├── README.md │ │ ├── build.gradle.kts │ │ └── src │ │ │ └── main │ │ │ └── kotlin │ │ │ └── com │ │ │ └── hedvig │ │ │ └── android │ │ │ └── auth │ │ │ └── event │ │ │ └── AuthEventListener.kt │ └── auth-event-fake │ │ ├── build.gradle.kts │ │ └── src │ │ └── main │ │ └── kotlin │ │ └── com │ │ └── hedvig │ │ └── android │ │ └── auth │ │ └── event │ │ └── AuthEventListener.kt ├── compose │ ├── compose-pager-indicator │ │ ├── build.gradle.kts │ │ └── src │ │ │ └── main │ │ │ ├── AndroidManifest.xml │ │ │ └── kotlin │ │ │ └── com │ │ │ └── hedvig │ │ │ └── android │ │ │ └── compose │ │ │ └── pager │ │ │ └── indicator │ │ │ └── PagerIndicator.kt │ ├── compose-photo-capture-state │ │ ├── build.gradle.kts │ │ └── src │ │ │ └── main │ │ │ ├── AndroidManifest.xml │ │ │ └── kotlin │ │ │ └── com │ │ │ └── hedvig │ │ │ └── android │ │ │ └── compose │ │ │ └── photo │ │ │ └── capture │ │ │ └── state │ │ │ └── PhotoCaptureState.kt │ └── compose-ui │ │ ├── build.gradle.kts │ │ └── src │ │ └── main │ │ ├── AndroidManifest.xml │ │ └── kotlin │ │ └── com │ │ └── hedvig │ │ └── android │ │ └── compose │ │ └── ui │ │ ├── EmptyContentDescription.kt │ │ ├── LayoutWithoutPlacement.kt │ │ ├── PaddingValuesExt.kt │ │ ├── SharedElements.kt │ │ ├── StringWithShiftedLabel.kt │ │ ├── animateContentHeight.kt │ │ ├── dropUnlessResumed.kt │ │ └── preview │ │ └── ConvenienceCollectionPreviewParameterProvider.kt ├── core │ ├── core-app-review │ │ ├── build.gradle.kts │ │ └── src │ │ │ └── main │ │ │ ├── AndroidManifest.xml │ │ │ └── kotlin │ │ │ └── com │ │ │ └── hedvig │ │ │ └── android │ │ │ └── core │ │ │ └── appreview │ │ │ ├── SelfServiceCompletedAuthEventListener.kt │ │ │ ├── SelfServiceCompletedEventManager.kt │ │ │ ├── SelfServiceCompletedEventStore.kt │ │ │ ├── WaitUntilAppReviewDialogShouldBeOpenedUseCase.kt │ │ │ └── di │ │ │ └── CoreAppReviewModule.kt │ ├── core-build-constants │ │ ├── build.gradle.kts │ │ └── src │ │ │ └── main │ │ │ └── kotlin │ │ │ └── com │ │ │ └── hedvig │ │ │ └── android │ │ │ └── core │ │ │ └── buildconstants │ │ │ └── HedvigBuildConstants.kt │ ├── core-common-android-public │ │ ├── .gitignore │ │ ├── build.gradle.kts │ │ └── src │ │ │ └── main │ │ │ ├── AndroidManifest.xml │ │ │ └── kotlin │ │ │ └── com │ │ │ └── hedvig │ │ │ └── android │ │ │ └── core │ │ │ └── common │ │ │ └── android │ │ │ ├── SharePdf.kt │ │ │ └── validation │ │ │ ├── ValidateEmail.kt │ │ │ └── ValidationResult.kt │ ├── core-common-public │ │ ├── build.gradle.kts │ │ └── src │ │ │ └── main │ │ │ └── kotlin │ │ │ └── com │ │ │ └── hedvig │ │ │ └── android │ │ │ └── core │ │ │ └── common │ │ │ ├── ApplicationScope.kt │ │ │ ├── Await.kt │ │ │ ├── Cast.kt │ │ │ ├── ErrorMessage.kt │ │ │ ├── PersonalInfoStringBuilders.kt │ │ │ ├── RetryChannel.kt │ │ │ ├── daysUntil.kt │ │ │ └── di │ │ │ ├── CoreCommonModule.kt │ │ │ └── Qualifier.kt │ ├── core-common-test │ │ ├── build.gradle.kts │ │ └── src │ │ │ └── main │ │ │ └── kotlin │ │ │ └── com │ │ │ └── hedvig │ │ │ └── android │ │ │ └── core │ │ │ └── common │ │ │ └── test │ │ │ ├── ArrowAssertExt.kt │ │ │ └── MainCoroutineRule.kt │ ├── core-datastore-public │ │ ├── build.gradle.kts │ │ └── src │ │ │ └── main │ │ │ └── kotlin │ │ │ └── com │ │ │ └── hedvig │ │ │ └── android │ │ │ └── core │ │ │ └── datastore │ │ │ ├── DeviceIdDataStore.kt │ │ │ └── di │ │ │ └── DataStoreModule.kt │ ├── core-datastore-test │ │ ├── build.gradle.kts │ │ └── src │ │ │ └── main │ │ │ └── kotlin │ │ │ └── com │ │ │ └── hedvig │ │ │ └── android │ │ │ └── core │ │ │ └── datastore │ │ │ └── TestPreferencesDataStore.kt │ ├── core-demo-mode │ │ ├── build.gradle.kts │ │ └── src │ │ │ └── main │ │ │ └── kotlin │ │ │ └── com │ │ │ └── hedvig │ │ │ └── android │ │ │ └── core │ │ │ └── demomode │ │ │ ├── DemoAuthEventListener.kt │ │ │ ├── DemoManager.kt │ │ │ ├── ProdOrDemoProvider.kt │ │ │ ├── Provider.kt │ │ │ └── di │ │ │ └── DemoModule.kt │ ├── core-file-upload │ │ ├── build.gradle.kts │ │ └── src │ │ │ └── main │ │ │ ├── AndroidManifest.xml │ │ │ └── kotlin │ │ │ └── com │ │ │ └── hedvig │ │ │ └── android │ │ │ └── core │ │ │ └── fileupload │ │ │ ├── DownloadPdfUseCase.kt │ │ │ ├── FileService.kt │ │ │ ├── FileUploadModule.kt │ │ │ ├── UploadFileUseCase.kt │ │ │ └── ui │ │ │ └── FilePickerBottomSheet.kt │ ├── core-icons │ │ ├── README.md │ │ ├── build.gradle.kts │ │ └── src │ │ │ └── main │ │ │ ├── AndroidManifest.xml │ │ │ └── kotlin │ │ │ └── com │ │ │ └── hedvig │ │ │ └── android │ │ │ └── core │ │ │ └── icons │ │ │ ├── HedvigIcons.kt │ │ │ └── hedvig │ │ │ ├── compose │ │ │ ├── NotificationCircle.kt │ │ │ └── NotificationCircleWithSubtractingPadding.kt │ │ │ ├── flag │ │ │ ├── FlagDenmark.kt │ │ │ ├── FlagNorway.kt │ │ │ ├── FlagSweden.kt │ │ │ └── FlagUk.kt │ │ │ ├── logo │ │ │ └── HedvigLogotype.kt │ │ │ ├── nav │ │ │ ├── Forever.kt │ │ │ ├── ForeverFilled.kt │ │ │ ├── Home.kt │ │ │ ├── HomeFilled.kt │ │ │ ├── Insurance.kt │ │ │ ├── InsuranceFilled.kt │ │ │ ├── Payments.kt │ │ │ ├── PaymentsFilled.kt │ │ │ ├── Profile.kt │ │ │ └── ProfileFilled.kt │ │ │ ├── normal │ │ │ ├── AndroidLogo.kt │ │ │ ├── Apartment.kt │ │ │ ├── AppleLogo.kt │ │ │ ├── ArrowBack.kt │ │ │ ├── ArrowDown.kt │ │ │ ├── ArrowForward.kt │ │ │ ├── ArrowUp.kt │ │ │ ├── Basketball.kt │ │ │ ├── Calendar.kt │ │ │ ├── Camera.kt │ │ │ ├── Certificate.kt │ │ │ ├── CheckmarkInCircle.kt │ │ │ ├── CheckmarkInCircleFilled.kt │ │ │ ├── Chevron right.kt │ │ │ ├── ChevronDown.kt │ │ │ ├── ChevronLeft.kt │ │ │ ├── ChevronUp.kt │ │ │ ├── ContactInformation.kt │ │ │ ├── Copy.kt │ │ │ ├── CreditCard.kt │ │ │ ├── Deductible.kt │ │ │ ├── Document.kt │ │ │ ├── Edit.kt │ │ │ ├── Eurobonus.kt │ │ │ ├── Heart.kt │ │ │ ├── Hedvig.kt │ │ │ ├── House.kt │ │ │ ├── Info.kt │ │ │ ├── InfoFilled.kt │ │ │ ├── Language.kt │ │ │ ├── Logout.kt │ │ │ ├── Mail.kt │ │ │ ├── MinusInCircle.kt │ │ │ ├── MoreIos.kt │ │ │ ├── MultipleDocuments.kt │ │ │ ├── Other.kt │ │ │ ├── Pause.kt │ │ │ ├── Pictures.kt │ │ │ ├── Play.kt │ │ │ ├── PlusInCircle.kt │ │ │ ├── Reciept.kt │ │ │ ├── RestartOneArrow.kt │ │ │ ├── RestartTwoArrows.kt │ │ │ ├── Search.kt │ │ │ ├── Settings.kt │ │ │ ├── StopSign.kt │ │ │ ├── StopSignFilled.kt │ │ │ ├── Waiting.kt │ │ │ ├── Warning.kt │ │ │ ├── WarningFilled.kt │ │ │ ├── Watch.kt │ │ │ ├── X.kt │ │ │ ├── XInCircle.kt │ │ │ └── XInCircleFilled.kt │ │ │ └── small │ │ │ ├── ArrowNorthEast.kt │ │ │ ├── BankId.kt │ │ │ ├── Campaign.kt │ │ │ ├── Checkmark.kt │ │ │ ├── CircleFilled.kt │ │ │ ├── CircleWithOutline.kt │ │ │ ├── Lock.kt │ │ │ ├── Minus.kt │ │ │ ├── Plus.kt │ │ │ ├── Sound.kt │ │ │ └── SquircleWithCheckmark.kt │ ├── core-markdown │ │ ├── build.gradle.kts │ │ └── src │ │ │ └── main │ │ │ ├── AndroidManifest.xml │ │ │ └── kotlin │ │ │ └── com │ │ │ └── hedvig │ │ │ └── android │ │ │ └── core │ │ │ └── markdown │ │ │ └── MarkdownString.kt │ ├── core-resources │ │ ├── .gitignore │ │ ├── README.md │ │ ├── build.gradle.kts │ │ └── src │ │ │ └── main │ │ │ ├── AndroidManifest.xml │ │ │ └── res │ │ │ ├── drawable-mdpi │ │ │ └── pillow_hedvig.png │ │ │ ├── drawable-night-mdpi │ │ │ └── pillow_hedvig.png │ │ │ ├── drawable │ │ │ └── ic_hedvig_h.xml │ │ │ ├── font │ │ │ ├── hedvig_letters_small.otf │ │ │ └── hedvig_letters_standard.otf │ │ │ ├── values-night │ │ │ └── colors.xml │ │ │ └── values │ │ │ ├── colors.xml │ │ │ ├── ids.xml │ │ │ └── static_strings.xml │ ├── core-retrofit │ │ ├── build.gradle.kts │ │ └── src │ │ │ └── main │ │ │ └── kotlin │ │ │ └── com │ │ │ └── hedvig │ │ │ └── android │ │ │ └── core │ │ │ └── retrofit │ │ │ └── CallErrorExt.kt │ └── core-ui-data │ │ ├── build.gradle.kts │ │ └── src │ │ └── main │ │ └── kotlin │ │ └── com │ │ └── hedvig │ │ └── android │ │ └── core │ │ └── uidata │ │ ├── UiCurrencyCode.kt │ │ ├── UiFile.kt │ │ ├── UiMoney.kt │ │ └── UiNullableMoney.kt ├── data │ ├── data-addons │ │ ├── build.gradle.kts │ │ └── src │ │ │ ├── main │ │ │ ├── graphql │ │ │ │ └── TravelAddonBannerQuery.graphql │ │ │ └── kotlin │ │ │ │ └── com │ │ │ │ └── hedvig │ │ │ │ └── android │ │ │ │ └── data │ │ │ │ └── addons │ │ │ │ ├── data │ │ │ │ ├── DemoGetTravelAddonBannerInfoUseCase.kt │ │ │ │ ├── GetTravelAddonBannerInfoUseCase.kt │ │ │ │ └── GetTravelAddonBannerInfoUseCaseProvider.kt │ │ │ │ └── di │ │ │ │ └── DataAddonsModule.kt │ │ │ └── test │ │ │ └── kotlin │ │ │ └── GetTravelAddonBannerInfoUseCaseImplTest.kt │ ├── data-changetier │ │ ├── build.gradle.kts │ │ └── src │ │ │ ├── main │ │ │ ├── graphql │ │ │ │ ├── DeductibleFragment.graphql │ │ │ │ ├── MutationChangeTierDeductible.graphql │ │ │ │ └── MutationCommitChangeTierDeductible.graphql │ │ │ └── kotlin │ │ │ │ └── com │ │ │ │ └── hedvig │ │ │ │ └── android │ │ │ │ └── data │ │ │ │ └── changetier │ │ │ │ ├── data │ │ │ │ ├── ChangeTierQuoteStorage.kt │ │ │ │ ├── ChangeTierRepository.kt │ │ │ │ ├── CreateChangeTierDeductibleIntentUseCase.kt │ │ │ │ ├── IntentModel.kt │ │ │ │ └── TierConstants.kt │ │ │ │ └── di │ │ │ │ └── DataChangeTierModule.kt │ │ │ └── test │ │ │ └── kotlin │ │ │ ├── CommonTestData.kt │ │ │ └── data │ │ │ ├── ChangeTierRepositoryImplTest.kt │ │ │ └── CreateChangeTierDeductibleIntentUseCaseImplTest.kt │ ├── data-chat │ │ ├── build.gradle.kts │ │ └── src │ │ │ ├── main │ │ │ └── kotlin │ │ │ │ └── com │ │ │ │ └── hedvig │ │ │ │ └── android │ │ │ │ └── data │ │ │ │ └── chat │ │ │ │ └── database │ │ │ │ ├── ChatDao.kt │ │ │ │ ├── ChatMessageEntity.kt │ │ │ │ ├── RemoteKeyDao.kt │ │ │ │ ├── RemoteKeyEntity.kt │ │ │ │ └── converter │ │ │ │ ├── InstantConverter.kt │ │ │ │ └── UuidConverter.kt │ │ │ └── test │ │ │ └── kotlin │ │ │ └── com │ │ │ └── hedvig │ │ │ └── android │ │ │ └── data │ │ │ └── chat │ │ │ └── database │ │ │ └── ChatDaoTest.kt │ ├── data-claim-flow │ │ ├── build.gradle.kts │ │ └── src │ │ │ └── main │ │ │ ├── graphql │ │ │ ├── FragmentAudioContentFragment.graphql │ │ │ ├── FragmentCheckoutMethodFragment.graphql │ │ │ ├── FragmentClaimFlowStepFragment.graphql │ │ │ ├── MutationFlowClaimAudioRecordingNext.graphql │ │ │ ├── MutationFlowClaimConfirmEmergency.graphql │ │ │ ├── MutationFlowClaimContractNext.graphql │ │ │ ├── MutationFlowClaimDateOfOccurrenceNext.graphql │ │ │ ├── MutationFlowClaimDateOfOccurrencePlusLocationNext.graphql │ │ │ ├── MutationFlowClaimFileUploadNext.graphql │ │ │ ├── MutationFlowClaimLocationNext.graphql │ │ │ ├── MutationFlowClaimPhoneNumberNext.graphql │ │ │ ├── MutationFlowClaimSingleItemCheckoutNext.graphql │ │ │ ├── MutationFlowClaimSingleItemNext.graphql │ │ │ ├── MutationFlowClaimStart.graphql │ │ │ ├── MutationFlowClaimSummaryNext.graphql │ │ │ └── triaging │ │ │ │ ├── FragmentEntryPointFragment.graphql │ │ │ │ └── QueryEntrypointGroups.graphql │ │ │ └── kotlin │ │ │ └── com │ │ │ └── hedvig │ │ │ └── android │ │ │ └── data │ │ │ └── claimflow │ │ │ ├── ClaimFlowContextStorage.kt │ │ │ ├── ClaimFlowDestination.kt │ │ │ ├── ClaimFlowRepository.kt │ │ │ ├── ClaimFlowStep.kt │ │ │ ├── ClaimFlowStepExt.kt │ │ │ ├── OdysseyService.kt │ │ │ ├── di │ │ │ └── ClaimFlowDataModule.kt │ │ │ └── model │ │ │ ├── AudioUrl.kt │ │ │ └── FlowId.kt │ ├── data-claim-triaging │ │ ├── build.gradle.kts │ │ └── src │ │ │ └── main │ │ │ └── kotlin │ │ │ └── com │ │ │ └── hedvig │ │ │ └── android │ │ │ └── data │ │ │ └── claimtriaging │ │ │ ├── ClaimGroup.kt │ │ │ └── EntryPoint.kt │ ├── data-contract │ │ ├── data-contract-android │ │ │ ├── AndroidManifest.xml │ │ │ ├── build.gradle.kts │ │ │ └── src │ │ │ │ └── main │ │ │ │ ├── kotlin │ │ │ │ └── com │ │ │ │ │ └── hedvig │ │ │ │ │ └── android │ │ │ │ │ └── data │ │ │ │ │ └── contract │ │ │ │ │ └── android │ │ │ │ │ ├── ContractGroupAndroid.kt │ │ │ │ │ └── CrossSell.kt │ │ │ │ └── res │ │ │ │ └── drawable-nodpi │ │ │ │ ├── gradient_accident.webp │ │ │ │ ├── gradient_car.webp │ │ │ │ ├── gradient_cat.webp │ │ │ │ ├── gradient_dog.webp │ │ │ │ ├── gradient_homeowner.webp │ │ │ │ ├── gradient_rental.webp │ │ │ │ ├── gradient_student.webp │ │ │ │ ├── gradient_villa.webp │ │ │ │ ├── ic_pillow_accident.webp │ │ │ │ ├── ic_pillow_car.webp │ │ │ │ ├── ic_pillow_cat.webp │ │ │ │ ├── ic_pillow_dog.webp │ │ │ │ ├── ic_pillow_home.webp │ │ │ │ ├── ic_pillow_homeowner.webp │ │ │ │ ├── ic_pillow_pet.webp │ │ │ │ ├── ic_pillow_rental.webp │ │ │ │ ├── ic_pillow_student.webp │ │ │ │ └── ic_pillow_villa.webp │ │ └── data-contract-public │ │ │ ├── build.gradle.kts │ │ │ └── src │ │ │ └── main │ │ │ └── kotlin │ │ │ └── com │ │ │ └── hedvig │ │ │ └── android │ │ │ └── data │ │ │ └── contract │ │ │ ├── ContractGroup.kt │ │ │ ├── ContractType.kt │ │ │ └── CrossSell.kt │ ├── data-conversations │ │ ├── build.gradle.kts │ │ └── src │ │ │ └── main │ │ │ ├── graphql │ │ │ └── QueryCbmNumberOfChatMessages.graphql │ │ │ └── kotlin │ │ │ └── com │ │ │ └── hedvig │ │ │ └── android │ │ │ └── data │ │ │ └── conversations │ │ │ ├── HasAnyActiveConversationUseCase.kt │ │ │ └── di │ │ │ └── DataConversationsModule.kt │ ├── data-cross-sell-after-claim-closed │ │ ├── build.gradle.kts │ │ └── src │ │ │ └── main │ │ │ ├── graphql │ │ │ └── MutationClaimAcknowledgeClosedStatus.graphql │ │ │ └── kotlin │ │ │ └── com │ │ │ └── hedvig │ │ │ └── android │ │ │ └── data │ │ │ └── cross │ │ │ └── sell │ │ │ └── after │ │ │ └── claim │ │ │ └── closed │ │ │ ├── CrossSellAfterClaimClosedRepository.kt │ │ │ └── di │ │ │ └── CrossSellAfterClaimModule.kt │ ├── data-cross-sell-after-flow │ │ ├── build.gradle.kts │ │ └── src │ │ │ └── main │ │ │ └── kotlin │ │ │ └── com │ │ │ └── hedvig │ │ │ └── android │ │ │ └── data │ │ │ └── cross │ │ │ └── sell │ │ │ └── after │ │ │ └── flow │ │ │ ├── CrossSellAfterFlowRepository.kt │ │ │ └── di │ │ │ └── DataCrossSellAfterFlowModule.kt │ ├── data-display-items │ │ ├── build.gradle.kts │ │ └── src │ │ │ └── main │ │ │ └── kotlin │ │ │ └── com │ │ │ └── hedvig │ │ │ └── android │ │ │ └── data │ │ │ └── display │ │ │ └── items │ │ │ └── DisplayItem.kt │ ├── data-paying-member │ │ ├── build.gradle.kts │ │ └── src │ │ │ └── main │ │ │ ├── graphql │ │ │ └── ActiveInsuranceContractTypes.graphql │ │ │ └── kotlin │ │ │ └── com │ │ │ └── hedvig │ │ │ └── android │ │ │ └── data │ │ │ └── paying │ │ │ └── member │ │ │ ├── GetChatRepositoryProvider.kt │ │ │ ├── GetOnlyHasNonPayingContractsUseCase.kt │ │ │ ├── GetOnlyHasNonPayingContractsUseCaseDemo.kt │ │ │ ├── GetOnlyHasNonPayingContractsUseCaseImpl.kt │ │ │ └── di │ │ │ └── dataPayingMemberModule.kt │ ├── data-product-variant │ │ ├── data-product-variant-android │ │ │ ├── AndroidManifest.xml │ │ │ ├── build.gradle.kts │ │ │ └── src │ │ │ │ └── main │ │ │ │ └── kotlin │ │ │ │ └── com │ │ │ │ └── hedvig │ │ │ │ └── android │ │ │ │ └── data │ │ │ │ └── productvariant │ │ │ │ └── android │ │ │ │ └── ProductVariantAndroid.kt │ │ └── data-product-variant-public │ │ │ ├── build.gradle.kts │ │ │ └── src │ │ │ └── main │ │ │ └── kotlin │ │ │ └── com │ │ │ └── hedvig │ │ │ └── android │ │ │ └── data │ │ │ └── productvariant │ │ │ ├── AddonVariant.kt │ │ │ └── ProductVariant.kt │ ├── data-settings-datastore │ │ ├── data-settings-datastore-public │ │ │ ├── build.gradle.kts │ │ │ └── src │ │ │ │ └── main │ │ │ │ └── kotlin │ │ │ │ └── com │ │ │ │ └── hedvig │ │ │ │ └── android │ │ │ │ └── data │ │ │ │ └── settings │ │ │ │ └── datastore │ │ │ │ ├── SettingsDataStoreImpl.kt │ │ │ │ └── di │ │ │ │ └── DataStoreModule.kt │ │ └── data-settings-datastore-test │ │ │ ├── build.gradle.kts │ │ │ └── src │ │ │ └── main │ │ │ └── kotlin │ │ │ └── com │ │ │ └── hedvig │ │ │ └── android │ │ │ └── data │ │ │ └── settings │ │ │ └── datastore │ │ │ └── FakeSettingsDataStore.kt │ └── data-termination │ │ ├── build.gradle.kts │ │ └── src │ │ └── main │ │ ├── graphql │ │ └── QueryContractsToTerminate.graphql │ │ └── kotlin │ │ └── com │ │ └── hedvig │ │ └── android │ │ └── data │ │ └── termination │ │ ├── data │ │ └── GetTerminatableContractsUseCase.kt │ │ └── di │ │ └── TerminationDataModule.kt ├── database │ ├── database-android │ │ ├── build.gradle.kts │ │ └── src │ │ │ └── main │ │ │ └── kotlin │ │ │ └── com │ │ │ └── hedvig │ │ │ └── android │ │ │ └── database │ │ │ └── di │ │ │ └── DatabaseAndroidModule.kt │ ├── database-core │ │ ├── build.gradle.kts │ │ └── src │ │ │ └── main │ │ │ └── kotlin │ │ │ └── com │ │ │ └── hedvig │ │ │ └── android │ │ │ └── database │ │ │ ├── AppDatabase.kt │ │ │ └── di │ │ │ └── DatabaseModule.kt │ ├── database-test │ │ ├── build.gradle.kts │ │ └── src │ │ │ └── main │ │ │ └── kotlin │ │ │ └── com │ │ │ └── hedvig │ │ │ └── android │ │ │ └── database │ │ │ └── test │ │ │ └── TestAppDatabaseRule.kt │ └── schemas │ │ └── com.hedvig.android.database.AppDatabase │ │ ├── 1.json │ │ ├── 2.json │ │ └── 3.json ├── datadog │ ├── datadog-android │ │ ├── build.gradle.kts │ │ └── src │ │ │ └── main │ │ │ ├── AndroidManifest.xml │ │ │ └── kotlin │ │ │ └── com │ │ │ └── hedvig │ │ │ └── android │ │ │ └── datadog │ │ │ └── core │ │ │ ├── DatadogInitializer.kt │ │ │ ├── DatadogLoggingTree.kt │ │ │ ├── OkHttpDatadogUtil.kt │ │ │ ├── attributestracking │ │ │ ├── DatadogAttributesManager.kt │ │ │ ├── DeviceIdProvider.kt │ │ │ └── MemberMemberIdTrackingKey.kt │ │ │ └── di │ │ │ └── DatadogModule.kt │ ├── datadog-core │ │ ├── build.gradle.kts │ │ └── src │ │ │ └── main │ │ │ └── kotlin │ │ │ └── com │ │ │ └── hedvig │ │ │ └── android │ │ │ └── datadog │ │ │ └── core │ │ │ └── attributestracking │ │ │ ├── DatadogAttributeProvider.kt │ │ │ └── DatadogMemberIdProvider.kt │ └── datadog-demo-tracking │ │ ├── build.gradle.kts │ │ └── src │ │ └── main │ │ └── kotlin │ │ └── com │ │ └── hedvig │ │ └── android │ │ └── datadog │ │ └── demo │ │ └── tracking │ │ ├── DatadogDemoModeTracking.kt │ │ └── di │ │ └── DatadogDemoTrackingModule.kt ├── design-system │ ├── design-system-api │ │ ├── build.gradle.kts │ │ └── src │ │ │ └── main │ │ │ └── kotlin │ │ │ └── com │ │ │ └── hedvig │ │ │ └── android │ │ │ └── design │ │ │ └── system │ │ │ └── hedvig │ │ │ └── api │ │ │ ├── HedvigBottomSheetState.kt │ │ │ └── HedvigDatePickerState.kt │ ├── design-system-hedvig │ │ ├── build.gradle.kts │ │ └── src │ │ │ └── main │ │ │ ├── AndroidManifest.xml │ │ │ └── kotlin │ │ │ └── com │ │ │ └── hedvig │ │ │ └── android │ │ │ └── design │ │ │ └── system │ │ │ └── hedvig │ │ │ ├── Accordion.kt │ │ │ ├── AddonBanner.kt │ │ │ ├── Button.kt │ │ │ ├── CheckBoxGroup.kt │ │ │ ├── Checkbox.kt │ │ │ ├── ClickableList.kt │ │ │ ├── ColorScheme.kt │ │ │ ├── ContentColor.kt │ │ │ ├── Dialog.kt │ │ │ ├── Divider.kt │ │ │ ├── Dropdown.kt │ │ │ ├── DynamicFilesGridBetweenOtherThings.kt │ │ │ ├── EmptyState.kt │ │ │ ├── ErrorSnackbar.kt │ │ │ ├── ExpandablePlusCard.kt │ │ │ ├── FadeAnimatedContent.kt │ │ │ ├── FileContainer.kt │ │ │ ├── FullScreenProgress.kt │ │ │ ├── HedvigBigCard.kt │ │ │ ├── HedvigBottomSheet.kt │ │ │ ├── HedvigCard.kt │ │ │ ├── HedvigErrorSection.kt │ │ │ ├── HedvigInformationSection.kt │ │ │ ├── HedvigPreview.kt │ │ │ ├── HedvigScaffold.kt │ │ │ ├── HedvigText.kt │ │ │ ├── HedvigTextField.kt │ │ │ ├── HedvigTheme.kt │ │ │ ├── HighlightLabel.kt │ │ │ ├── HorizontalItems.kt │ │ │ ├── Icon.kt │ │ │ ├── IconButton.kt │ │ │ ├── IconResource.kt │ │ │ ├── InteractiveComponentSize.kt │ │ │ ├── LogCompositions.kt │ │ │ ├── Modifier.kt │ │ │ ├── NavigationBar.kt │ │ │ ├── Notification.kt │ │ │ ├── Peril.kt │ │ │ ├── PermissionDialog.kt │ │ │ ├── ProgressBar.kt │ │ │ ├── ProvideContentColorTextStyle.kt │ │ │ ├── RadioGroup.kt │ │ │ ├── RadioOption.kt │ │ │ ├── RichText.kt │ │ │ ├── Ripple.kt │ │ │ ├── ShapedColorPainter.kt │ │ │ ├── Shapes.kt │ │ │ ├── Stepper.kt │ │ │ ├── Surface.kt │ │ │ ├── Tab.kt │ │ │ ├── ThreeDotsLoading.kt │ │ │ ├── Toggle.kt │ │ │ ├── Tooltip.kt │ │ │ ├── TopAppBar.kt │ │ │ ├── Typography.kt │ │ │ ├── WindowSize.kt │ │ │ ├── a11y │ │ │ ├── FlowHeading.kt │ │ │ ├── Modifier.kt │ │ │ └── UiMoney.kt │ │ │ ├── datepicker │ │ │ ├── DatePicker.kt │ │ │ └── HedvigDateTimeFormatter.kt │ │ │ ├── freetext │ │ │ ├── FreeTextOverlay.kt │ │ │ └── FreeTextTriggerDisplay.kt │ │ │ ├── icon │ │ │ ├── ArrowDown.kt │ │ │ ├── ArrowLeft.kt │ │ │ ├── ArrowNorthEast.kt │ │ │ ├── ArrowRight.kt │ │ │ ├── ArrowUp.kt │ │ │ ├── Attach.kt │ │ │ ├── AttentionFilled.kt │ │ │ ├── AttentionOutline.kt │ │ │ ├── BankId.kt │ │ │ ├── Camera.kt │ │ │ ├── Campaign.kt │ │ │ ├── Card.kt │ │ │ ├── Cart.kt │ │ │ ├── CartAdded.kt │ │ │ ├── Certified.kt │ │ │ ├── Chat.kt │ │ │ ├── CheckFilled.kt │ │ │ ├── CheckOutline.kt │ │ │ ├── Checkmark.kt │ │ │ ├── ChevronDown.kt │ │ │ ├── ChevronDownSmall.kt │ │ │ ├── ChevronLeft.kt │ │ │ ├── ChevronLeftSmall.kt │ │ │ ├── ChevronRight.kt │ │ │ ├── ChevronRightSmall.kt │ │ │ ├── ChevronUp.kt │ │ │ ├── ChevronUpSmall.kt │ │ │ ├── CircleFilled.kt │ │ │ ├── CircleOutline.kt │ │ │ ├── Clock.kt │ │ │ ├── Close.kt │ │ │ ├── CollapseContent.kt │ │ │ ├── Copy.kt │ │ │ ├── Document.kt │ │ │ ├── Dots.kt │ │ │ ├── Download.kt │ │ │ ├── EQ.kt │ │ │ ├── Eurobonus.kt │ │ │ ├── ExpandContent.kt │ │ │ ├── ForeverFilled.kt │ │ │ ├── ForeverOutline.kt │ │ │ ├── HedvigIcons.kt │ │ │ ├── HedvigLogotype.kt │ │ │ ├── HelipadFilled.kt │ │ │ ├── HelipadOutline.kt │ │ │ ├── ID.kt │ │ │ ├── Image.kt │ │ │ ├── InfoFilled.kt │ │ │ ├── InfoOutline.kt │ │ │ ├── Link.kt │ │ │ ├── Lock.kt │ │ │ ├── Mic.kt │ │ │ ├── Minus.kt │ │ │ ├── MultipleDocuments.kt │ │ │ ├── Notification.kt │ │ │ ├── Pause.kt │ │ │ ├── PaymentFilled.kt │ │ │ ├── PaymentOutline.kt │ │ │ ├── Play.kt │ │ │ ├── Plus.kt │ │ │ ├── ProfileFilled.kt │ │ │ ├── ProfileOutline.kt │ │ │ ├── Refresh.kt │ │ │ ├── Reload.kt │ │ │ ├── Search.kt │ │ │ ├── Settings.kt │ │ │ ├── ShieldFilled.kt │ │ │ ├── ShieldOutline.kt │ │ │ ├── Star.kt │ │ │ ├── Swap.kt │ │ │ ├── Travel.kt │ │ │ ├── WarningFilled.kt │ │ │ ├── WarningOutline.kt │ │ │ ├── colored │ │ │ │ ├── ColoredCampaign.kt │ │ │ │ ├── ColoredCampaignWithDot.kt │ │ │ │ ├── ColoredChat.kt │ │ │ │ ├── ColoredChatWithDot.kt │ │ │ │ ├── ColoredFirstVet.kt │ │ │ │ └── ColoredFirstVetWithDot.kt │ │ │ └── flag │ │ │ │ ├── FlagSweden.kt │ │ │ │ └── FlagUk.kt │ │ │ ├── internal │ │ │ ├── Decoration.kt │ │ │ ├── DraggableState.kt │ │ │ ├── HedvigTextFieldImpl.kt │ │ │ └── MappedInteractionSource.kt │ │ │ ├── motion │ │ │ ├── FadeThroughDefaults.kt │ │ │ ├── MotionDefaults.kt │ │ │ └── SharedAxisDefaults.kt │ │ │ ├── pdfrenderer │ │ │ └── PdfDecoder.kt │ │ │ ├── placeholder │ │ │ ├── Placeholder.kt │ │ │ └── PlaceholderHighlight.kt │ │ │ ├── tokens │ │ │ ├── AccordionTokens.kt │ │ │ ├── AnimationTokens.kt │ │ │ ├── BottomSheetTokens.kt │ │ │ ├── ButtonTokens.kt │ │ │ ├── CheckboxTokens.kt │ │ │ ├── ClickableListTokens.kt │ │ │ ├── ColorDarkTokens.kt │ │ │ ├── ColorLightTokens.kt │ │ │ ├── ColorSchemeKeyTokens.kt │ │ │ ├── DialogTokens.kt │ │ │ ├── DropdownTokens.kt │ │ │ ├── EmptyStateTokens.kt │ │ │ ├── FreeTextTokens.kt │ │ │ ├── HighlightLabelTokens.kt │ │ │ ├── IconButtonTokens.kt │ │ │ ├── MotionTokens.kt │ │ │ ├── NavigationTokens.kt │ │ │ ├── NotificationsTokens.kt │ │ │ ├── PaletteTokens.kt │ │ │ ├── PerilCommonTokens.kt │ │ │ ├── ProgressIndicatorTokens.kt │ │ │ ├── RadioOptionTokens.kt │ │ │ ├── ScaffoldTokens.kt │ │ │ ├── ScrimTokens.kt │ │ │ ├── ShapeKeyTokens.kt │ │ │ ├── StateTokens.kt │ │ │ ├── StepperTokens.kt │ │ │ ├── TabTokens.kt │ │ │ ├── TextFieldTokens.kt │ │ │ ├── ToggleTokens.kt │ │ │ ├── TooltipTokens.kt │ │ │ ├── TopAppBarTokens.kt │ │ │ ├── TweenAnimationTokens.kt │ │ │ ├── TypeScaleTokens.kt │ │ │ ├── TypefaceTokens.kt │ │ │ ├── TypographyKeyTokens.kt │ │ │ └── TypographyTokens.kt │ │ │ └── videoplayer │ │ │ ├── ControllerState.kt │ │ │ ├── Media.kt │ │ │ ├── MediaState.kt │ │ │ ├── PlayerState.kt │ │ │ ├── ResizeMode.kt │ │ │ ├── SimpleVideoController.kt │ │ │ └── TimeBar.kt │ └── design-system-internals │ │ ├── build.gradle.kts │ │ └── src │ │ └── main │ │ ├── AndroidManifest.xml │ │ └── kotlin │ │ └── com │ │ └── hedvig │ │ └── android │ │ └── design │ │ └── system │ │ └── internals │ │ ├── DatePicker.kt │ │ ├── HedvigBottomSheet.kt │ │ └── SnackBar.kt ├── feature │ ├── feature-addon-purchase │ │ ├── build.gradle.kts │ │ └── src │ │ │ ├── main │ │ │ ├── AndroidManifest.xml │ │ │ ├── graphql │ │ │ │ ├── InsurancesForTravelAddonQuery.graphql │ │ │ │ ├── UpsellAddonOfferMutation.graphql │ │ │ │ └── UpsellTravelAddonActivateMutation.graphql │ │ │ └── kotlin │ │ │ │ └── com │ │ │ │ └── hedvig │ │ │ │ └── android │ │ │ │ └── feature │ │ │ │ └── addon │ │ │ │ └── purchase │ │ │ │ ├── data │ │ │ │ ├── Addon.kt │ │ │ │ ├── GetInsuranceForTravelAddonUseCase.kt │ │ │ │ ├── GetTravelAddonOfferUseCase.kt │ │ │ │ └── SubmitAddonPurchaseUseCase.kt │ │ │ │ ├── di │ │ │ │ └── AddonPurchaseModule.kt │ │ │ │ ├── navigation │ │ │ │ ├── AddonPurchaseDestination.kt │ │ │ │ └── AddonPurchaseNavGraph.kt │ │ │ │ └── ui │ │ │ │ ├── customize │ │ │ │ ├── CustomizeTravelAddonDestination.kt │ │ │ │ └── CustomizeTravelAddonViewModel.kt │ │ │ │ ├── selectinsurance │ │ │ │ ├── SelectInsuranceForAddonDestination.kt │ │ │ │ └── SelectInsuranceForAddonViewModel.kt │ │ │ │ ├── success │ │ │ │ ├── AddonFailureScreen.kt │ │ │ │ └── AddonSuccessScreen.kt │ │ │ │ ├── summary │ │ │ │ ├── AddonSummaryDestination.kt │ │ │ │ └── AddonSummaryViewModel.kt │ │ │ │ ├── travelinsuranceplusexplanation │ │ │ │ └── TravelInsurancePlusExplanationDestination.kt │ │ │ │ └── triage │ │ │ │ ├── TravelAddonTriageDestination.kt │ │ │ │ └── TravelAddonTriageViewModel.kt │ │ │ └── test │ │ │ └── kotlin │ │ │ ├── data │ │ │ ├── GetInsuranceForTravelAddonUseCaseImplTest.kt │ │ │ ├── GetTravelAddonOfferUseCaseImplTest.kt │ │ │ └── SubmitAddonPurchaseUseCaseImplTest.kt │ │ │ └── ui │ │ │ ├── AddonSummaryPresenterTest.kt │ │ │ ├── CustomizeTravelAddonPresenterTest.kt │ │ │ └── SelectInsuranceForAddonPresenterTest.kt │ ├── feature-chat │ │ ├── build.gradle.kts │ │ └── src │ │ │ └── main │ │ │ ├── AndroidManifest.xml │ │ │ ├── graphql │ │ │ ├── FragmentConversationInfo.graphql │ │ │ ├── MutationConversationSendMessage.graphql │ │ │ ├── MutationConversationStart.graphql │ │ │ ├── QueryChatConversations.graphql │ │ │ ├── QueryConversation.graphql │ │ │ ├── QueryConversationInfo.graphql │ │ │ └── QueryConversationStatusMessage.graphql │ │ │ └── kotlin │ │ │ └── com │ │ │ └── hedvig │ │ │ └── android │ │ │ └── feature │ │ │ └── chat │ │ │ ├── CbmChatViewModel.kt │ │ │ ├── ChatDestination.kt │ │ │ ├── ChatLoadedScreen.kt │ │ │ ├── data │ │ │ ├── BotServiceService.kt │ │ │ ├── CbmChatRepository.kt │ │ │ ├── CbmChatRepositoryDemo.kt │ │ │ ├── GetAllConversationsUseCase.kt │ │ │ └── GetCbmChatRepositoryProvider.kt │ │ │ ├── di │ │ │ └── ChatModule.kt │ │ │ ├── inbox │ │ │ ├── InboxDestination.kt │ │ │ └── InboxViewModel.kt │ │ │ ├── model │ │ │ ├── CbmChatMessage.kt │ │ │ ├── InboxConversation.kt │ │ │ └── Sender.kt │ │ │ ├── navigation │ │ │ ├── CbmChatGraph.kt │ │ │ └── ChatDestination.kt │ │ │ ├── paging │ │ │ └── ChatRemoteMediator.kt │ │ │ └── ui │ │ │ ├── AdjustSizeToImageRatio.kt │ │ │ ├── ChatBanner.kt │ │ │ ├── ChatInput.kt │ │ │ ├── ChatMessageExt.kt │ │ │ ├── PersistentContracts.kt │ │ │ └── TextWithClickableUrls.kt │ ├── feature-choose-tier │ │ ├── build.gradle.kts │ │ └── src │ │ │ ├── main │ │ │ ├── AndroidManifest.xml │ │ │ ├── graphql │ │ │ │ ├── AgreementFragment.graphql │ │ │ │ ├── CurrentContractQuery.graphql │ │ │ │ └── GetContractsEligibleForTierChangeQuery.graphql │ │ │ └── kotlin │ │ │ │ └── com │ │ │ │ └── hedvig │ │ │ │ └── android │ │ │ │ └── feature │ │ │ │ └── change │ │ │ │ └── tier │ │ │ │ ├── data │ │ │ │ ├── GetCurrentContractDataUseCase.kt │ │ │ │ └── GetCustomizableInsurancesUseCase.kt │ │ │ │ ├── di │ │ │ │ └── ChooseTierModule.kt │ │ │ │ ├── navigation │ │ │ │ ├── ChooseTierGraph.kt │ │ │ │ └── ChooseTierNavDestination.kt │ │ │ │ └── ui │ │ │ │ ├── chooseinsurance │ │ │ │ ├── ChooseInsuranceToChangeTierDestination.kt │ │ │ │ └── ChooseInsuranceViewModel.kt │ │ │ │ ├── stepcustomize │ │ │ │ ├── SelectCoverageViewModel.kt │ │ │ │ └── SelectTierDestination.kt │ │ │ │ ├── stepstart │ │ │ │ ├── StartTierFlowDestination.kt │ │ │ │ └── StartTierFlowViewModel.kt │ │ │ │ └── stepsummary │ │ │ │ ├── SubmitTierFailureScreen.kt │ │ │ │ ├── SubmitTierSuccessScreen.kt │ │ │ │ ├── SummaryDestination.kt │ │ │ │ └── SummaryViewModel.kt │ │ │ └── test │ │ │ └── kotlin │ │ │ ├── CommonTestdata.kt │ │ │ ├── data │ │ │ └── GetCustomizableInsurancesUseCase.kt │ │ │ └── ui │ │ │ ├── chooseinsurance │ │ │ └── ChooseInsurancePresenterTest.kt │ │ │ ├── stepcustomize │ │ │ └── SelectCoveragePresenterTest.kt │ │ │ └── stepstart │ │ │ └── StartTierChangePresenterTest.kt │ ├── feature-claim-details │ │ ├── build.gradle.kts │ │ └── src │ │ │ └── main │ │ │ ├── AndroidManifest.xml │ │ │ ├── graphql │ │ │ └── QueryClaims.graphql │ │ │ └── kotlin │ │ │ └── com │ │ │ └── hedvig │ │ │ └── android │ │ │ └── feature │ │ │ └── claim │ │ │ └── details │ │ │ ├── data │ │ │ └── GetClaimDetailUiStateUseCase.kt │ │ │ ├── di │ │ │ └── FeatureClaimDetailsModule.kt │ │ │ ├── navigation │ │ │ ├── ClaimDetailDestinationGraph.kt │ │ │ └── ClaimDetailDestinations.kt │ │ │ └── ui │ │ │ ├── AddFilesDestination.kt │ │ │ ├── AddFilesViewModel.kt │ │ │ ├── ClaimDetailsDestination.kt │ │ │ ├── ClaimDetailsViewModel.kt │ │ │ └── SubmittedAndClosedColumns.kt │ ├── feature-claim-triaging │ │ ├── build.gradle.kts │ │ └── src │ │ │ └── main │ │ │ ├── AndroidManifest.xml │ │ │ └── kotlin │ │ │ └── com │ │ │ └── hedvig │ │ │ └── android │ │ │ └── feature │ │ │ └── claimtriaging │ │ │ ├── ClaimTriagingGraph.kt │ │ │ ├── GetEntryPointGroupsUseCase.kt │ │ │ ├── OptionChipsFlowRow.kt │ │ │ ├── claimentrypointoptions │ │ │ ├── ClaimEntryPointOptionsDestination.kt │ │ │ └── ClaimEntryPointOptionsViewModel.kt │ │ │ ├── claimentrypoints │ │ │ ├── ClaimEntryPointsDestination.kt │ │ │ └── ClaimEntryPointsViewModel.kt │ │ │ ├── claimgroups │ │ │ ├── ClaimGroupsDestination.kt │ │ │ └── ClaimGroupsViewModel.kt │ │ │ └── di │ │ │ └── ClaimTriagingModule.kt │ ├── feature-connect-payment-trustly │ │ ├── build.gradle.kts │ │ └── src │ │ │ └── main │ │ │ ├── AndroidManifest.xml │ │ │ ├── graphql │ │ │ └── InitiateTrustlyConnectPaymentSession.graphql │ │ │ └── kotlin │ │ │ └── com │ │ │ └── hedvig │ │ │ └── android │ │ │ └── feature │ │ │ └── connect │ │ │ └── payment │ │ │ └── trustly │ │ │ ├── StartTrustlySessionUseCase.kt │ │ │ ├── TrustlyPresenter.kt │ │ │ ├── TrustlyViewModel.kt │ │ │ ├── data │ │ │ └── TrustlyCallback.kt │ │ │ ├── di │ │ │ └── ConnectPaymentTrustlyModule.kt │ │ │ ├── navigation │ │ │ └── ConnectTrustlyPaymentGraph.kt │ │ │ ├── ui │ │ │ └── TrustlyDestination.kt │ │ │ └── webview │ │ │ ├── TrustlyJavascriptInterface.kt │ │ │ └── TrustlyWebChromeClient.kt │ ├── feature-cross-sell-sheet │ │ ├── build.gradle.kts │ │ └── src │ │ │ └── main │ │ │ ├── AndroidManifest.xml │ │ │ ├── graphql │ │ │ └── QueryBottomSheetCrossSells.graphql │ │ │ └── kotlin │ │ │ └── com │ │ │ └── hedvig │ │ │ └── android │ │ │ └── feature │ │ │ └── cross │ │ │ └── sell │ │ │ └── sheet │ │ │ ├── CrossSellSheet.kt │ │ │ ├── CrossSellSheetViewModel.kt │ │ │ └── di │ │ │ └── FeatureCrossSellSheetModule.kt │ ├── feature-delete-account │ │ ├── build.gradle.kts │ │ └── src │ │ │ └── main │ │ │ ├── AndroidManifest.xml │ │ │ ├── graphql │ │ │ ├── MutationMemberDeletionRequest.graphql │ │ │ └── QueryDeleteAccountState.graphql │ │ │ └── kotlin │ │ │ └── com │ │ │ └── hedvig │ │ │ └── android │ │ │ └── feature │ │ │ └── deleteaccount │ │ │ ├── DeleteAccountDestination.kt │ │ │ ├── DeleteAccountPresenter.kt │ │ │ ├── DeleteAccountViewModel.kt │ │ │ ├── data │ │ │ ├── DeleteAccountRequestStorage.kt │ │ │ ├── DeleteAccountStateUseCase.kt │ │ │ └── RequestAccountDeletionUseCase.kt │ │ │ ├── di │ │ │ └── DeleteAccountModule.kt │ │ │ └── navigation │ │ │ ├── DeleteAccountDestination.kt │ │ │ └── DeleteAccountGraph.kt │ ├── feature-edit-coinsured │ │ ├── build.gradle.kts │ │ └── src │ │ │ ├── main │ │ │ ├── AndroidManifest.xml │ │ │ ├── graphql │ │ │ │ ├── MutationCommitMidtermChange.graphql │ │ │ │ ├── MutationCreateMidtermChange.graphql │ │ │ │ ├── QueryCoInsured.graphql │ │ │ │ ├── QueryEligibleContractsForEditCoInsured.graphql │ │ │ │ └── QueryPersonalInformation.graphql │ │ │ └── kotlin │ │ │ │ └── com │ │ │ │ └── hedvig │ │ │ │ └── android │ │ │ │ └── feature │ │ │ │ └── editcoinsured │ │ │ │ ├── data │ │ │ │ ├── CoInsured.kt │ │ │ │ ├── CommitMidtermChangeUseCase.kt │ │ │ │ ├── CreateMidtermChangeUseCase.kt │ │ │ │ ├── FetchCoInsuredPersonalInformationUseCase.kt │ │ │ │ ├── GetCoInsuredUseCase.kt │ │ │ │ ├── GetInsurancesForEditCoInsuredUseCase.kt │ │ │ │ └── Member.kt │ │ │ │ ├── di │ │ │ │ └── EditCoInsuredModule.kt │ │ │ │ ├── navigation │ │ │ │ ├── EditCoInsuredDestinations.kt │ │ │ │ └── EditCoInsuredGraph.kt │ │ │ │ └── ui │ │ │ │ ├── AddCoInsuredBottomSheetContent.kt │ │ │ │ ├── CoInsuredList.kt │ │ │ │ ├── EditCoInsuredAddMissingInfoDestination.kt │ │ │ │ ├── EditCoInsuredAddOrRemoveDestination.kt │ │ │ │ ├── EditCoInsuredPresenter.kt │ │ │ │ ├── EditCoInsuredViewModel.kt │ │ │ │ ├── EditCoinsuredSuccessDestination.kt │ │ │ │ ├── InsuredRow.kt │ │ │ │ ├── RemoveCoInsuredBottomSheetContent.kt │ │ │ │ └── triage │ │ │ │ ├── EditCoInsuredTriageDestination.kt │ │ │ │ └── EditCoInsuredTriageViewModel.kt │ │ │ └── test │ │ │ └── kotlin │ │ │ └── com │ │ │ └── hedvig │ │ │ └── android │ │ │ └── feature │ │ │ └── editcoinsured │ │ │ └── ui │ │ │ ├── EditCoInsuredPresenterTest.kt │ │ │ └── data │ │ │ ├── TestCoInsuredUseCase.kt │ │ │ ├── TestCommitMidtermChangeUseCase.kt │ │ │ ├── TestCreateMidTermChangeUseCase.kt │ │ │ ├── TestData.kt │ │ │ └── TestFetchCoInsuredPersonalInformationUseCase.kt │ ├── feature-force-upgrade │ │ ├── build.gradle.kts │ │ └── src │ │ │ └── main │ │ │ ├── AndroidManifest.xml │ │ │ └── kotlin │ │ │ └── com │ │ │ └── hedvig │ │ │ └── android │ │ │ └── feature │ │ │ └── force │ │ │ └── upgrade │ │ │ └── ForceUpgradeBlockingScreen.kt │ ├── feature-forever │ │ ├── build.gradle.kts │ │ └── src │ │ │ └── main │ │ │ ├── AndroidManifest.xml │ │ │ └── kotlin │ │ │ └── com │ │ │ └── hedvig │ │ │ └── android │ │ │ └── feature │ │ │ └── forever │ │ │ └── navigation │ │ │ ├── ForeverDestination.kt │ │ │ └── ForeverGraph.kt │ ├── feature-help-center │ │ ├── build.gradle.kts │ │ └── src │ │ │ ├── main │ │ │ ├── AndroidManifest.xml │ │ │ ├── graphql │ │ │ │ ├── QueryAvailableSelfServiceOnContracts.graphql │ │ │ │ ├── QueryHelpCenterFAQ.graphql │ │ │ │ └── QueryMemberActions.graphql │ │ │ └── kotlin │ │ │ │ └── com │ │ │ │ └── hedvig │ │ │ │ └── android │ │ │ │ └── feature │ │ │ │ └── help │ │ │ │ └── center │ │ │ │ ├── HelpCenterGraph.kt │ │ │ │ ├── HelpCenterPresenter.kt │ │ │ │ ├── HelpCenterViewModel.kt │ │ │ │ ├── ShowNavigateToInboxViewModel.kt │ │ │ │ ├── commonclaim │ │ │ │ ├── FirstVetDestination.kt │ │ │ │ └── emergency │ │ │ │ │ └── EmergencyDestination.kt │ │ │ │ ├── data │ │ │ │ ├── GetHelpCenterFAQUseCase.kt │ │ │ │ ├── GetHelpCenterQuestionUseCase.kt │ │ │ │ ├── GetHelpCenterTopicUseCase.kt │ │ │ │ ├── GetInsuranceForEditCoInsuredUseCase.kt │ │ │ │ ├── GetMemberActionsUseCase.kt │ │ │ │ └── GetQuickLinksUseCase.kt │ │ │ │ ├── di │ │ │ │ └── HelpCenterModule.kt │ │ │ │ ├── home │ │ │ │ └── HelpCenterHomeDestination.kt │ │ │ │ ├── model │ │ │ │ ├── Question.kt │ │ │ │ ├── QuickLink.kt │ │ │ │ └── Topic.kt │ │ │ │ ├── navigation │ │ │ │ └── HelpCenterDestination.kt │ │ │ │ ├── question │ │ │ │ ├── HelpCenterQuestionDestination.kt │ │ │ │ └── HelpCenterQuestionViewModel.kt │ │ │ │ ├── topic │ │ │ │ ├── HelpCenterTopicDestination.kt │ │ │ │ └── HelpCenterTopicViewModel.kt │ │ │ │ └── ui │ │ │ │ ├── HelpCenterSection.kt │ │ │ │ ├── HelpCenterSectionWithClickableRows.kt │ │ │ │ └── StillNeedHelpSection.kt │ │ │ └── test │ │ │ └── kotlin │ │ │ ├── GetMemberActionsUseCaseImpl.kt │ │ │ └── GetQuickLinksUseCaseTest.kt │ ├── feature-home │ │ ├── build.gradle.kts │ │ └── src │ │ │ ├── main │ │ │ ├── AndroidManifest.xml │ │ │ ├── graphql │ │ │ │ ├── QueryHome.graphql │ │ │ │ └── QueryUnreadMessageCount.graphql │ │ │ └── kotlin │ │ │ │ └── com │ │ │ │ └── hedvig │ │ │ │ └── android │ │ │ │ └── feature │ │ │ │ └── home │ │ │ │ ├── di │ │ │ │ ├── GetHomeDataUseCaseProvider.kt │ │ │ │ └── HomeModule.kt │ │ │ │ └── home │ │ │ │ ├── data │ │ │ │ ├── GetHomeDataUseCase.kt │ │ │ │ ├── GetHomeDataUseCaseDemo.kt │ │ │ │ └── SeenImportantMessagesStorage.kt │ │ │ │ ├── navigation │ │ │ │ ├── HomeDestinations.kt │ │ │ │ └── HomeGraph.kt │ │ │ │ └── ui │ │ │ │ ├── FirstVetDestination.kt │ │ │ │ ├── HomeDestination.kt │ │ │ │ ├── HomeLayout.kt │ │ │ │ ├── HomePresenter.kt │ │ │ │ ├── HomeViewModel.kt │ │ │ │ └── ToolbarIcons.kt │ │ │ └── test │ │ │ └── kotlin │ │ │ └── com │ │ │ └── hedvig │ │ │ └── android │ │ │ └── feature │ │ │ └── home │ │ │ └── home │ │ │ ├── data │ │ │ └── GetHomeUseCaseTest.kt │ │ │ └── ui │ │ │ └── HomePresenterTest.kt │ ├── feature-image-viewer │ │ ├── build.gradle.kts │ │ └── src │ │ │ └── main │ │ │ ├── AndroidManifest.xml │ │ │ └── kotlin │ │ │ └── com │ │ │ └── hedvig │ │ │ └── android │ │ │ └── feature │ │ │ └── imageviewer │ │ │ ├── ImageViewerDestination.kt │ │ │ └── navigation │ │ │ ├── ImageViewer.kt │ │ │ └── ImageViewerGraph.kt │ ├── feature-impersonation │ │ ├── build.gradle.kts │ │ └── src │ │ │ └── main │ │ │ ├── AndroidManifest.xml │ │ │ └── kotlin │ │ │ └── com │ │ │ └── hedvig │ │ │ └── android │ │ │ └── feature │ │ │ └── impersonation │ │ │ └── ImpersonationReceiverActivity.kt │ ├── feature-insurance-certificate │ │ ├── build.gradle.kts │ │ └── src │ │ │ ├── main │ │ │ ├── AndroidManifest.xml │ │ │ ├── graphql │ │ │ │ ├── InsuranceEvidenceCreate.graphql │ │ │ │ └── InsuranceEvidenceInitialData.graphql │ │ │ └── kotlin │ │ │ │ └── com │ │ │ │ └── hedvig │ │ │ │ └── android │ │ │ │ └── feature │ │ │ │ └── insurance │ │ │ │ └── certificate │ │ │ │ ├── data │ │ │ │ ├── GenerateInsuranceEvidenceUseCase.kt │ │ │ │ └── GetInsuranceEvidenceInitialEmailUseCase.kt │ │ │ │ ├── di │ │ │ │ └── InsuranceEvidenceModule.kt │ │ │ │ ├── navigation │ │ │ │ ├── InsuranceEvidenceDestination.kt │ │ │ │ └── InsuranceEvidenceGraph.kt │ │ │ │ └── ui │ │ │ │ ├── email │ │ │ │ ├── InsuranceEvidenceEmailInputDestination.kt │ │ │ │ └── InsuranceEvidenceEmailInputViewModel.kt │ │ │ │ └── overview │ │ │ │ ├── InsuranceEvidenceOverviewDestination.kt │ │ │ │ └── InsuranceEvidenceOverviewViewModel.kt │ │ │ └── test │ │ │ └── kotlin │ │ │ ├── InsuranceEvidenceEmailInputPresenterTest.kt │ │ │ ├── InsuranceEvidenceOverviewPresenterTest.kt │ │ │ └── com │ │ │ └── hedvig │ │ │ └── android │ │ │ └── feature │ │ │ └── insurance │ │ │ └── certificate │ │ │ └── data │ │ │ ├── GenerateInsuranceEvidenceUseCaseTest.kt │ │ │ └── GetInsuranceEvidenceInitialEmailUseCaseTest.kt │ ├── feature-insurances │ │ ├── build.gradle.kts │ │ └── src │ │ │ ├── main │ │ │ ├── AndroidManifest.xml │ │ │ ├── graphql │ │ │ │ ├── QueryCrossSells.graphql │ │ │ │ └── QueryInsuranceContracts.graphql │ │ │ └── kotlin │ │ │ │ └── com │ │ │ │ └── hedvig │ │ │ │ └── android │ │ │ │ └── feature │ │ │ │ └── insurances │ │ │ │ ├── data │ │ │ │ ├── CancelInsuranceData.kt │ │ │ │ ├── GetCrossSellsUseCase.kt │ │ │ │ ├── GetCrossSellsUseCaseDemo.kt │ │ │ │ ├── GetCrossSellsUseCaseImpl.kt │ │ │ │ ├── GetInsuranceContractsUseCase.kt │ │ │ │ ├── GetInsuranceContractsUseCaseDemo.kt │ │ │ │ └── InsuranceContract.kt │ │ │ │ ├── di │ │ │ │ ├── GetCrossSellsUseCaseProvider.kt │ │ │ │ ├── GetInsuranceContractsUseCaseProvider.kt │ │ │ │ └── InsurancesModule.kt │ │ │ │ ├── insurance │ │ │ │ ├── InsuranceDestination.kt │ │ │ │ └── presentation │ │ │ │ │ ├── InsurancePresenter.kt │ │ │ │ │ └── InsuranceViewModel.kt │ │ │ │ ├── insurancedetail │ │ │ │ ├── ContractDetailDestination.kt │ │ │ │ ├── ContractDetailViewModel.kt │ │ │ │ ├── GetContractForContractIdUseCase.kt │ │ │ │ ├── coverage │ │ │ │ │ └── CoverageTab.kt │ │ │ │ ├── documents │ │ │ │ │ └── DocumentsTab.kt │ │ │ │ └── yourinfo │ │ │ │ │ ├── EditInsuranceBottomSheetContent.kt │ │ │ │ │ ├── UpcomingChangesBottomSheetContent.kt │ │ │ │ │ └── YourInfoTab.kt │ │ │ │ ├── navigation │ │ │ │ ├── InsuranceGraph.kt │ │ │ │ └── InsurancesNavigation.kt │ │ │ │ ├── terminatedcontracts │ │ │ │ ├── TerminatedContractsDestination.kt │ │ │ │ └── TerminatedContractsViewModel.kt │ │ │ │ └── ui │ │ │ │ └── InsuranceContractExt.kt │ │ │ └── test │ │ │ └── kotlin │ │ │ └── com │ │ │ └── hedvig │ │ │ └── android │ │ │ └── feature │ │ │ └── insurances │ │ │ ├── data │ │ │ └── GetInsuranceContractsUseCaseImplTest.kt │ │ │ ├── insurance │ │ │ └── presentation │ │ │ │ └── InsurancePresenterTest.kt │ │ │ ├── insurancedetail │ │ │ └── ContractDetailPresenterTest.kt │ │ │ └── terminatedcontracts │ │ │ └── TerminatedContractsPresenterTest.kt │ ├── feature-login │ │ ├── build.gradle.kts │ │ └── src │ │ │ ├── main │ │ │ ├── AndroidManifest.xml │ │ │ ├── kotlin │ │ │ │ └── com │ │ │ │ │ └── hedvig │ │ │ │ │ └── android │ │ │ │ │ └── feature │ │ │ │ │ └── login │ │ │ │ │ ├── di │ │ │ │ │ └── LoginModule.kt │ │ │ │ │ ├── genericauth │ │ │ │ │ ├── EmailAddressWithTrimmedWhitespaces.kt │ │ │ │ │ ├── EmailInputScreen.kt │ │ │ │ │ ├── GenericAuthDestination.kt │ │ │ │ │ └── GenericAuthViewModel.kt │ │ │ │ │ ├── marketing │ │ │ │ │ ├── MarketingDestination.kt │ │ │ │ │ ├── MarketingPresenter.kt │ │ │ │ │ ├── MarketingViewModel.kt │ │ │ │ │ └── ui │ │ │ │ │ │ └── LoginBackgroundImage.kt │ │ │ │ │ ├── navigation │ │ │ │ │ ├── LoginDestination.kt │ │ │ │ │ └── LoginGraph.kt │ │ │ │ │ ├── otpinput │ │ │ │ │ ├── OtpInputDestination.kt │ │ │ │ │ └── OtpInputViewModel.kt │ │ │ │ │ └── swedishlogin │ │ │ │ │ ├── BankIdState.kt │ │ │ │ │ ├── SwedishLoginDestination.kt │ │ │ │ │ ├── SwedishLoginPresenter.kt │ │ │ │ │ └── SwedishLoginViewModel.kt │ │ │ └── res │ │ │ │ └── drawable-nodpi │ │ │ │ └── login_still_9x16.webp │ │ │ └── test │ │ │ └── kotlin │ │ │ └── com │ │ │ └── hedvig │ │ │ └── android │ │ │ └── feature │ │ │ └── login │ │ │ ├── genericauth │ │ │ ├── GenericAuthViewModelTest.kt │ │ │ └── OtpInformationViewModelTest.kt │ │ │ └── swedishlogin │ │ │ └── SwedishLoginPresenterTest.kt │ ├── feature-movingflow │ │ ├── build.gradle.kts │ │ └── src │ │ │ └── main │ │ │ ├── AndroidManifest.xml │ │ │ ├── graphql │ │ │ ├── FragmentMoveIntent.graphql │ │ │ ├── MutationMoveIntentCommit.graphql │ │ │ ├── MutationMoveIntentCreate.graphql │ │ │ └── MutationMoveIntentRequest.graphql │ │ │ └── kotlin │ │ │ └── com │ │ │ └── hedvig │ │ │ └── android │ │ │ └── feature │ │ │ └── movingflow │ │ │ ├── MovingFlowGraph.kt │ │ │ ├── compose │ │ │ ├── BooleanInput.kt │ │ │ ├── ConstrainedNumberInput.kt │ │ │ ├── ListInput.kt │ │ │ └── ValidatedInput.kt │ │ │ ├── data │ │ │ ├── ClosedRangeSerializer.kt │ │ │ ├── HousingType.kt │ │ │ ├── MovingFlowQuotes.kt │ │ │ └── MovingFlowState.kt │ │ │ ├── di │ │ │ └── movingFlowModule.kt │ │ │ ├── storage │ │ │ ├── MovingFlowRepository.kt │ │ │ └── MovingFlowStorage.kt │ │ │ └── ui │ │ │ ├── MovingFlowTopAppBar.kt │ │ │ ├── addhouseinformation │ │ │ ├── AddHouseInformationDestination.kt │ │ │ └── AddHouseInformationViewModel.kt │ │ │ ├── chosecoveragelevelanddeductible │ │ │ ├── ChoseCoverageLevelAndDeductibleDestination.kt │ │ │ └── ChoseCoverageLevelAndDeductibleViewModel.kt │ │ │ ├── enternewaddress │ │ │ ├── EnterNewAddressDestination.kt │ │ │ └── EnterNewAddressViewModel.kt │ │ │ ├── selectcontract │ │ │ ├── SelectContractDestination.kt │ │ │ └── SelectContractViewModel.kt │ │ │ ├── start │ │ │ ├── HousingTypeDestination.kt │ │ │ └── HousingTypeViewModel.kt │ │ │ ├── successfulmove │ │ │ └── SuccessfulMoveDestination.kt │ │ │ └── summary │ │ │ ├── SummaryDestination.kt │ │ │ └── SummaryViewModel.kt │ ├── feature-odyssey │ │ ├── build.gradle.kts │ │ └── src │ │ │ ├── main │ │ │ ├── AndroidManifest.xml │ │ │ ├── graphql │ │ │ │ └── AllContractsQuery.graphql │ │ │ └── kotlin │ │ │ │ └── com │ │ │ │ └── hedvig │ │ │ │ └── android │ │ │ │ └── feature │ │ │ │ └── odyssey │ │ │ │ ├── di │ │ │ │ └── OdysseyModule.kt │ │ │ │ ├── navigation │ │ │ │ ├── ClaimFlowGraph.kt │ │ │ │ └── ClaimsFlowDestination.kt │ │ │ │ ├── step │ │ │ │ ├── audiorecording │ │ │ │ │ ├── AudioRecordingDestination.kt │ │ │ │ │ ├── AudioRecordingViewModel.kt │ │ │ │ │ └── ui │ │ │ │ │ │ ├── AudioRecorder.kt │ │ │ │ │ │ ├── RecordingAmplitudeIndicator.kt │ │ │ │ │ │ └── ScreenOnFlag.kt │ │ │ │ ├── dateofoccurrence │ │ │ │ │ ├── DateOfOccurrenceDestination.kt │ │ │ │ │ └── DateOfOccurrenceViewModel.kt │ │ │ │ ├── dateofoccurrencepluslocation │ │ │ │ │ ├── DateOfOccurrencePlusLocationDestination.kt │ │ │ │ │ └── DateOfOccurrencePlusLocationViewModel.kt │ │ │ │ ├── fileupload │ │ │ │ │ ├── AddFilesScreen.kt │ │ │ │ │ ├── FileUploadDestination.kt │ │ │ │ │ ├── FileUploadScreen.kt │ │ │ │ │ └── FileUploadViewModel.kt │ │ │ │ ├── honestypledge │ │ │ │ │ ├── HonestyPledgeDestination.kt │ │ │ │ │ └── PledgeAcceptingSlider.kt │ │ │ │ ├── informdeflect │ │ │ │ │ ├── ConfirmEmergencyDestination.kt │ │ │ │ │ ├── ConfirmEmergencyViewModel.kt │ │ │ │ │ ├── DeflectCarOtherDamageDestination.kt │ │ │ │ │ ├── DeflectEmergencyDestination.kt │ │ │ │ │ ├── DeflectGlassDamageDestination.kt │ │ │ │ │ ├── DeflectPestsDestination.kt │ │ │ │ │ ├── DeflectTowingDestination.kt │ │ │ │ │ ├── IdProtectionDestination.kt │ │ │ │ │ └── PartnerImage.kt │ │ │ │ ├── location │ │ │ │ │ ├── LocationDestination.kt │ │ │ │ │ └── LocationViewModel.kt │ │ │ │ ├── notificationpermission │ │ │ │ │ └── NotificationPermissionDestination.kt │ │ │ │ ├── phonenumber │ │ │ │ │ ├── PhoneNumberDestination.kt │ │ │ │ │ └── PhoneNumberViewModel.kt │ │ │ │ ├── selectcontract │ │ │ │ │ ├── SelectContractDestination.kt │ │ │ │ │ └── SelectContractViewModel.kt │ │ │ │ ├── singleitem │ │ │ │ │ ├── SingleItemDestination.kt │ │ │ │ │ └── SingleItemViewModel.kt │ │ │ │ ├── singleitemcheckout │ │ │ │ │ ├── SingleItemCheckoutDestination.kt │ │ │ │ │ └── SingleItemCheckoutViewModel.kt │ │ │ │ ├── singleitempayout │ │ │ │ │ ├── SingleItemPayoutDestination.kt │ │ │ │ │ └── SingleItemPayoutViewModel.kt │ │ │ │ ├── success │ │ │ │ │ └── ClaimSuccessDestination.kt │ │ │ │ ├── summary │ │ │ │ │ ├── ClaimSummaryDestination.kt │ │ │ │ │ └── ClaimSummaryViewModel.kt │ │ │ │ ├── unknownerror │ │ │ │ │ └── UnknownErrorDestination.kt │ │ │ │ └── unknownscreen │ │ │ │ │ └── UnknownScreenDestination.kt │ │ │ │ └── ui │ │ │ │ ├── DatePickerWithDialog.kt │ │ │ │ ├── LocationWithDialog.kt │ │ │ │ ├── MonetaryAmountInput.kt │ │ │ │ └── MonetaryAmountOffsetMapping.kt │ │ │ └── test │ │ │ └── kotlin │ │ │ └── com │ │ │ └── hedvig │ │ │ └── android │ │ │ └── feature │ │ │ └── odyssey │ │ │ ├── data │ │ │ └── TestClaimFlowRepository.kt │ │ │ ├── step │ │ │ ├── singleitem │ │ │ │ └── SingleItemViewModelTest.kt │ │ │ ├── singleitemcheckout │ │ │ │ └── SingleItemCheckoutViewModelTest.kt │ │ │ └── singleitempayout │ │ │ │ └── SingleItemPayoutViewModelTest.kt │ │ │ └── ui │ │ │ └── MonetaryAmountOffsetMappingTest.kt │ ├── feature-payments │ │ ├── build.gradle.kts │ │ └── src │ │ │ └── main │ │ │ ├── AndroidManifest.xml │ │ │ ├── graphql │ │ │ ├── QueryDiscounts.graphql │ │ │ ├── QueryPaymentsHistory.graphql │ │ │ ├── QueryReferrals.graphql │ │ │ ├── QueryShortPaymentsHistory.graphql │ │ │ └── QueryUpcomingPayment.graphql │ │ │ └── kotlin │ │ │ └── com │ │ │ └── hedvig │ │ │ └── android │ │ │ └── feature │ │ │ └── payments │ │ │ ├── PreviewData.kt │ │ │ ├── data │ │ │ ├── Discount.kt │ │ │ ├── GetChargeDetailsUseCase.kt │ │ │ ├── GetDiscountsOverviewUseCase.kt │ │ │ ├── GetDiscountsUseCase.kt │ │ │ ├── GetPaymentsHistoryUseCase.kt │ │ │ ├── MemberCharge.kt │ │ │ ├── PaymentConnection.kt │ │ │ └── PaymentOverview.kt │ │ │ ├── di │ │ │ └── PaymentsModule.kt │ │ │ ├── navigation │ │ │ ├── PaymentsDestination.kt │ │ │ └── PaymentsGraph.kt │ │ │ ├── overview │ │ │ └── data │ │ │ │ ├── GetForeverInformationUseCase.kt │ │ │ │ ├── GetUpcomingPaymentUseCase.kt │ │ │ │ └── GetUpcomingPaymentUseCaseProvider.kt │ │ │ └── ui │ │ │ ├── details │ │ │ ├── PaymentDetailExpandableCard.kt │ │ │ ├── PaymentDetailsDestination.kt │ │ │ └── PaymentDetailsViewModel.kt │ │ │ ├── discounts │ │ │ ├── AddDiscountBottomSheetContent.kt │ │ │ ├── DiscountRow.kt │ │ │ ├── DiscountsDestination.kt │ │ │ ├── DiscountsPresenter.kt │ │ │ └── DiscountsViewModel.kt │ │ │ ├── history │ │ │ ├── PaymentHistoryDestination.kt │ │ │ └── PaymentHistoryViewModel.kt │ │ │ └── payments │ │ │ ├── PaymentsDestination.kt │ │ │ ├── PaymentsPresenter.kt │ │ │ └── PaymentsViewModel.kt │ ├── feature-profile │ │ ├── build.gradle.kts │ │ └── src │ │ │ ├── main │ │ │ ├── AndroidManifest.xml │ │ │ ├── graphql │ │ │ │ ├── eurobonus │ │ │ │ │ ├── FragmentPartnerDataFragment.graphql │ │ │ │ │ ├── MutationUpdateEurobonusNumber.graphql │ │ │ │ │ └── QueryEurobonusData.graphql │ │ │ │ └── member │ │ │ │ │ ├── MutationMemberUpdateContactInfo.graphql │ │ │ │ │ ├── MutationUpdateSubscriptionPreference.graphql │ │ │ │ │ ├── QueryContactInformation.graphql │ │ │ │ │ ├── QueryInsuranceEvidenceAvailability.graphql │ │ │ │ │ ├── QueryMemberId.graphql │ │ │ │ │ └── QueryTravelCertificateAvailability.graphql │ │ │ └── kotlin │ │ │ │ └── com │ │ │ │ └── hedvig │ │ │ │ └── android │ │ │ │ └── feature │ │ │ │ └── profile │ │ │ │ ├── aboutapp │ │ │ │ ├── AboutAppDestination.kt │ │ │ │ ├── AboutAppViewModel.kt │ │ │ │ └── LicensesDestination.kt │ │ │ │ ├── certificates │ │ │ │ ├── CertificatesDestination.kt │ │ │ │ └── CertificatesViewModel.kt │ │ │ │ ├── contactinfo │ │ │ │ ├── ContactInfoDestination.kt │ │ │ │ └── ContactInfoViewModel.kt │ │ │ │ ├── data │ │ │ │ ├── ChangeEmailSubscriptionPreferencesUseCase.kt │ │ │ │ ├── CheckCertificatesAvailabilityUseCase.kt │ │ │ │ ├── CheckInsuranceEvidenceAvailabilityUseCase.kt │ │ │ │ ├── CheckTravelCertificateDestinationAvailabilityUseCase.kt │ │ │ │ ├── ContactInfoRepository.kt │ │ │ │ ├── ContactInfoRepositoryDemo.kt │ │ │ │ ├── ContactInfoRepositoryImpl.kt │ │ │ │ ├── GetEurobonusDataUseCase.kt │ │ │ │ ├── ProfileData.kt │ │ │ │ └── UpdateEurobonusNumberUseCase.kt │ │ │ │ ├── di │ │ │ │ ├── ProfileModule.kt │ │ │ │ └── ProfileRepositoryProvider.kt │ │ │ │ ├── eurobonus │ │ │ │ ├── EurobonusDestination.kt │ │ │ │ └── EurobonusViewModel.kt │ │ │ │ ├── navigation │ │ │ │ └── ProfileDestinations.kt │ │ │ │ ├── settings │ │ │ │ ├── SettingsDestination.kt │ │ │ │ ├── SettingsPresenter.kt │ │ │ │ └── SettingsViewModel.kt │ │ │ │ └── tab │ │ │ │ ├── GetEurobonusStatusUseCase.kt │ │ │ │ ├── ProfileDestination.kt │ │ │ │ ├── ProfileGraph.kt │ │ │ │ └── ProfileViewModel.kt │ │ │ └── test │ │ │ └── kotlin │ │ │ └── com │ │ │ └── hedvig │ │ │ └── android │ │ │ └── feature │ │ │ ├── NoopNetworkCacheManager.kt │ │ │ └── profile │ │ │ ├── contactinfo │ │ │ └── ContactInfoPresenterTest.kt │ │ │ ├── eurobonus │ │ │ └── EurobonusPresenterTest.kt │ │ │ ├── settings │ │ │ └── SettingsPresenterTest.kt │ │ │ └── tab │ │ │ └── ProfilePresenterTest.kt │ ├── feature-terminate-insurance │ │ ├── build.gradle.kts │ │ └── src │ │ │ ├── main │ │ │ ├── AndroidManifest.xml │ │ │ ├── graphql │ │ │ │ ├── FragmentTerminationFlowStepFragment.graphql │ │ │ │ ├── MutationFlowTerminationDateNext.graphql │ │ │ │ ├── MutationFlowTerminationDeletionNext.graphql │ │ │ │ ├── MutationFlowTerminationStart.graphql │ │ │ │ └── MutationFlowTerminationSurveyNext.graphql │ │ │ └── kotlin │ │ │ │ └── com │ │ │ │ └── hedvig │ │ │ │ └── android │ │ │ │ └── feature │ │ │ │ └── terminateinsurance │ │ │ │ ├── InsuranceId.kt │ │ │ │ ├── data │ │ │ │ ├── TerminateInsuranceRepository.kt │ │ │ │ ├── TerminateInsuranceStep.kt │ │ │ │ ├── TerminationFlowContextStorage.kt │ │ │ │ └── TerminationSurveyOption.kt │ │ │ │ ├── di │ │ │ │ └── TerminateInsuranceModule.kt │ │ │ │ ├── navigation │ │ │ │ ├── TerminateInsuranceDestination.kt │ │ │ │ └── TerminateInsuranceGraph.kt │ │ │ │ ├── step │ │ │ │ ├── choose │ │ │ │ │ ├── ChooseInsuranceToTerminateDestination.kt │ │ │ │ │ └── ChooseInsuranceToTerminateViewModel.kt │ │ │ │ ├── deletion │ │ │ │ │ └── InsuranceDeletionDestination.kt │ │ │ │ ├── survey │ │ │ │ │ ├── TerminationSurveyDestination.kt │ │ │ │ │ └── TerminationSurveyViewModel.kt │ │ │ │ ├── terminationdate │ │ │ │ │ ├── TerminationDateDestination.kt │ │ │ │ │ └── TerminationDateViewModel.kt │ │ │ │ ├── terminationfailure │ │ │ │ │ └── TerminationFailureDestination.kt │ │ │ │ ├── terminationreview │ │ │ │ │ ├── TerminationConfirmationDestination.kt │ │ │ │ │ └── TerminationConfirmationViewModel.kt │ │ │ │ ├── terminationsuccess │ │ │ │ │ └── TerminationSuccessDestination.kt │ │ │ │ └── unknown │ │ │ │ │ └── UnknownScreenDestination.kt │ │ │ │ └── ui │ │ │ │ ├── TerminationInfo.kt │ │ │ │ ├── TerminationInfoCard.kt │ │ │ │ └── TerminationScaffold.kt │ │ │ └── test │ │ │ └── kotlin │ │ │ └── com │ │ │ └── hedvig │ │ │ └── android │ │ │ └── feature │ │ │ └── terminateinsurance │ │ │ ├── data │ │ │ └── TerminateInsuranceRepositoryImplTest.kt │ │ │ └── step │ │ │ └── survey │ │ │ └── TerminationSurveyPresenterTest.kt │ └── feature-travel-certificate │ │ ├── build.gradle.kts │ │ └── src │ │ ├── main │ │ ├── AndroidManifest.xml │ │ ├── graphql │ │ │ ├── MutationTravelCertificateCreate.graphql │ │ │ ├── QueryCoInsuredForContract.graphql │ │ │ ├── QueryCurrentContracts.graphql │ │ │ ├── QueryEligibleContractsWithAddress.graphql │ │ │ ├── QueryTravelCertificateHistory.graphql │ │ │ └── QueryTravelCertificateSpecifications.graphql │ │ └── kotlin │ │ │ └── com │ │ │ └── hedvig │ │ │ └── android │ │ │ └── feature │ │ │ └── travelcertificate │ │ │ ├── data │ │ │ ├── CheckTravelCertificateAvailabilityForCurrentContractsUseCase.kt │ │ │ ├── CreateTravelCertificateUseCase.kt │ │ │ ├── GetCoInsuredForContractUseCase.kt │ │ │ ├── GetEligibleContractsWithAddressUseCase.kt │ │ │ ├── GetTravelCertificateSpecificationsUseCase.kt │ │ │ └── GetTravelCertificatesHistoryUseCase.kt │ │ │ ├── di │ │ │ └── TravelCertificateModule.kt │ │ │ ├── navigation │ │ │ ├── TravelCertificateDestination.kt │ │ │ └── TravelCertificateGraph.kt │ │ │ └── ui │ │ │ ├── TravelCertificateInfoBottomSheet.kt │ │ │ ├── choose │ │ │ ├── ChooseContractForCertificate.kt │ │ │ └── ChooseContractForCertificateViewModel.kt │ │ │ ├── generatewhen │ │ │ ├── TravelCertificateDateInput.kt │ │ │ └── TravelCertificateDateInputViewModel.kt │ │ │ ├── generatewho │ │ │ ├── TravelCertificateTravellersInput.kt │ │ │ └── TravelCertificateTravellersInputViewModel.kt │ │ │ ├── history │ │ │ ├── CertificateHistoryViewModel.kt │ │ │ └── TravelCertificateHistory.kt │ │ │ └── overview │ │ │ ├── TravelCertificateOverview.kt │ │ │ └── TravelCertificateOverviewViewModel.kt │ │ └── test │ │ └── kotlin │ │ └── com │ │ └── hedvig │ │ └── android │ │ └── feature │ │ └── travelcertificate │ │ └── GetTravelCertificateSpecificationsUseCaseTest.kt ├── featureflags │ ├── feature-flags-public │ │ ├── build.gradle.kts │ │ └── src │ │ │ └── main │ │ │ └── kotlin │ │ │ └── com │ │ │ └── hedvig │ │ │ └── android │ │ │ └── featureflags │ │ │ ├── FeatureManager.kt │ │ │ ├── HedvigUnleashClient.kt │ │ │ ├── di │ │ │ └── featureManagerModule.kt │ │ │ └── flags │ │ │ ├── Feature.kt │ │ │ └── UnleashFeatureFlagProvider.kt │ └── feature-flags-test │ │ ├── build.gradle.kts │ │ └── src │ │ └── main │ │ └── kotlin │ │ └── com │ │ └── hedvig │ │ └── android │ │ └── featureflags │ │ └── test │ │ └── FakeFeatureManager.kt ├── initializable │ ├── build.gradle.kts │ └── src │ │ └── main │ │ └── kotlin │ │ └── com │ │ └── hedvig │ │ └── android │ │ └── initializable │ │ └── Initializable.kt ├── language │ ├── language-android │ │ ├── build.gradle.kts │ │ └── src │ │ │ └── main │ │ │ ├── AndroidManifest.xml │ │ │ └── kotlin │ │ │ └── com │ │ │ └── hedvig │ │ │ └── android │ │ │ └── language │ │ │ ├── AndroidLanguageService.kt │ │ │ ├── Language.kt │ │ │ └── di │ │ │ └── LanguageModule.kt │ ├── language-core │ │ ├── build.gradle.kts │ │ └── src │ │ │ └── main │ │ │ └── kotlin │ │ │ └── com │ │ │ └── hedvig │ │ │ └── android │ │ │ └── language │ │ │ ├── Language.kt │ │ │ └── LanguageService.kt │ ├── language-data │ │ ├── build.gradle.kts │ │ └── src │ │ │ └── main │ │ │ ├── graphql │ │ │ └── MutationMemberUpdateLanguage.graphql │ │ │ └── kotlin │ │ │ └── com │ │ │ └── hedvig │ │ │ └── android │ │ │ └── apollo │ │ │ └── auth │ │ │ └── listeners │ │ │ ├── UploadLanguagePreferenceToBackendAuthListener.kt │ │ │ ├── UploadLanguagePreferenceToBackendUseCase.kt │ │ │ └── di │ │ │ └── LanguageAuthListenersModule.kt │ ├── language-migration │ │ ├── build.gradle.kts │ │ └── src │ │ │ └── main │ │ │ ├── AndroidManifest.xml │ │ │ └── kotlin │ │ │ └── com │ │ │ └── hedvig │ │ │ └── android │ │ │ └── language │ │ │ ├── LanguageLaunchCheckUseCase.kt │ │ │ └── di │ │ │ └── LanguageMigrationModule.kt │ └── language-test │ │ ├── build.gradle.kts │ │ └── src │ │ └── main │ │ └── kotlin │ │ └── com │ │ └── hedvig │ │ └── android │ │ └── language │ │ └── test │ │ └── FakeLanguageService.kt ├── logging │ ├── logging-android │ │ ├── build.gradle.kts │ │ └── src │ │ │ └── main │ │ │ ├── AndroidManifest.xml │ │ │ └── kotlin │ │ │ └── com │ │ │ └── hedvig │ │ │ └── android │ │ │ └── logger │ │ │ └── AndroidLogcatLogger.kt │ ├── logging-public │ │ ├── build.gradle.kts │ │ └── src │ │ │ └── main │ │ │ └── kotlin │ │ │ └── com │ │ │ └── hedvig │ │ │ └── android │ │ │ └── logger │ │ │ ├── LogPriority.kt │ │ │ ├── Logcat.kt │ │ │ └── LogcatLogger.kt │ └── logging-test │ │ ├── build.gradle.kts │ │ └── src │ │ └── main │ │ └── kotlin │ │ └── com │ │ └── hedvig │ │ └── android │ │ └── logger │ │ ├── TestLogcatLogger.kt │ │ ├── TestLogcatLoggingRule.kt │ │ └── TestRumLogger.kt ├── member-reminders │ ├── member-reminders-public │ │ ├── build.gradle.kts │ │ └── src │ │ │ ├── main │ │ │ ├── graphql │ │ │ │ ├── QueryGetPayinMethodStatus.graphql │ │ │ │ ├── QueryGetUpcomingRenewalReminder.graphql │ │ │ │ ├── QueryNeedsCoInsuredInfoReminder.graphql │ │ │ │ └── QueryNeedsContactInfoUpdateReminder.graphql │ │ │ └── kotlin │ │ │ │ └── com │ │ │ │ └── hedvig │ │ │ │ └── android │ │ │ │ └── memberreminders │ │ │ │ ├── EnableNotificationsReminderSnoozeManager.kt │ │ │ │ ├── GetConnectPaymentReminderUseCase.kt │ │ │ │ ├── GetContactInfoUpdateIsNeededUseCase.kt │ │ │ │ ├── GetMemberRemindersUseCase.kt │ │ │ │ ├── GetNeedsCoInsuredInfoRemindersUseCase.kt │ │ │ │ ├── GetUpcomingRenewalRemindersUseCase.kt │ │ │ │ └── di │ │ │ │ └── MemberRemindersModule.kt │ │ │ └── test │ │ │ └── kotlin │ │ │ └── com │ │ │ └── hedvig │ │ │ └── android │ │ │ └── memberreminders │ │ │ ├── EnableNotificationsReminderManagerTest.kt │ │ │ ├── GetConnectPaymentReminderUseCaseTest.kt │ │ │ ├── GetMemberRemindersUseCaseTest.kt │ │ │ └── GetUpcomingRenewalRemindersUseCaseTest.kt │ ├── member-reminders-test │ │ ├── build.gradle.kts │ │ └── src │ │ │ └── main │ │ │ └── kotlin │ │ │ └── com │ │ │ └── hedvig │ │ │ └── android │ │ │ └── memberreminders │ │ │ └── test │ │ │ ├── TestEnableNotificationsReminderSnoozeManager.kt │ │ │ └── TestGetMemberRemindersUseCase.kt │ └── member-reminders-ui │ │ ├── build.gradle.kts │ │ └── src │ │ └── main │ │ ├── AndroidManifest.xml │ │ └── kotlin │ │ └── com │ │ └── hedvig │ │ └── android │ │ └── memberreminders │ │ └── ui │ │ └── MemberReminderCards.kt ├── molecule │ ├── molecule-android │ │ ├── build.gradle.kts │ │ └── src │ │ │ └── main │ │ │ ├── AndroidManifest.xml │ │ │ └── kotlin │ │ │ └── com │ │ │ └── hedvig │ │ │ └── android │ │ │ └── molecule │ │ │ └── android │ │ │ └── MoleculeViewModel.kt │ ├── molecule-public │ │ ├── build.gradle.kts │ │ └── src │ │ │ └── main │ │ │ └── kotlin │ │ │ └── com │ │ │ └── hedvig │ │ │ └── android │ │ │ └── molecule │ │ │ └── public │ │ │ └── MoleculePresenter.kt │ └── molecule-test │ │ ├── build.gradle.kts │ │ └── src │ │ └── main │ │ └── kotlin │ │ └── com │ │ └── hedvig │ │ └── android │ │ └── molecule │ │ └── test │ │ └── MoleculeTest.kt ├── navigation │ ├── navigation-activity │ │ ├── build.gradle.kts │ │ └── src │ │ │ └── main │ │ │ └── kotlin │ │ │ └── com │ │ │ └── hedvig │ │ │ └── android │ │ │ └── navigation │ │ │ └── activity │ │ │ └── ExternalNavigator.kt │ ├── navigation-common │ │ ├── build.gradle.kts │ │ └── src │ │ │ └── main │ │ │ └── kotlin │ │ │ └── com │ │ │ └── hedvig │ │ │ └── android │ │ │ └── navigation │ │ │ └── common │ │ │ └── Destination.kt │ ├── navigation-compose-typed │ │ ├── build.gradle.kts │ │ └── src │ │ │ └── main │ │ │ ├── AndroidManifest.xml │ │ │ └── kotlin │ │ │ └── com │ │ │ └── hedvig │ │ │ └── android │ │ │ └── navigation │ │ │ └── compose │ │ │ └── typed │ │ │ ├── DestinationScopedViewModel.kt │ │ │ └── getRouteFromBackStack.kt │ ├── navigation-compose │ │ ├── build.gradle.kts │ │ └── src │ │ │ └── main │ │ │ ├── AndroidManifest.xml │ │ │ └── kotlin │ │ │ └── com │ │ │ └── hedvig │ │ │ └── android │ │ │ └── navigation │ │ │ └── compose │ │ │ ├── JsonSerializableNavType.kt │ │ │ ├── LocalNavAnimatedVisibilityScope.kt │ │ │ ├── NavGraphBuilderExt.kt │ │ │ └── TypedAlternatives.kt │ └── navigation-core │ │ ├── build.gradle.kts │ │ └── src │ │ └── main │ │ ├── AndroidManifest.xml │ │ └── kotlin │ │ └── com │ │ └── hedvig │ │ └── android │ │ └── navigation │ │ └── core │ │ ├── HedvigDeepLinkContainer.kt │ │ ├── Navigator.kt │ │ ├── TopLevelGraph.kt │ │ └── di │ │ └── DeepLinkModule.kt ├── notification-badge-data │ ├── notification-badge-data-fake │ │ ├── build.gradle.kts │ │ └── src │ │ │ └── main │ │ │ └── kotlin │ │ │ └── com │ │ │ └── hedvig │ │ │ └── android │ │ │ └── notification │ │ │ └── badge │ │ │ └── data │ │ │ └── crosssell │ │ │ └── card │ │ │ └── CrossSellCardNotificationBadgeService.kt │ └── notification-badge-data-public │ │ ├── build.gradle.kts │ │ └── src │ │ ├── main │ │ ├── graphql │ │ │ └── QueryCrossSellTypes.graphql │ │ └── kotlin │ │ │ └── com │ │ │ └── hedvig │ │ │ └── android │ │ │ └── notification │ │ │ └── badge │ │ │ └── data │ │ │ ├── crosssell │ │ │ ├── CrossSellBadgeType.kt │ │ │ ├── CrossSellCardNotificationBadgeServiceProvider.kt │ │ │ ├── CrossSellNotificationBadgeService.kt │ │ │ ├── GetCrossSellIdentifiersUseCase.kt │ │ │ ├── bottomnav │ │ │ │ └── CrossSellBottomNavNotificationBadgeService.kt │ │ │ └── card │ │ │ │ ├── CrossSellCardNotificationBadgeDemoService.kt │ │ │ │ └── CrossSellCardNotificationBadgeService.kt │ │ │ ├── di │ │ │ └── NotificationBadgeModule.kt │ │ │ ├── referrals │ │ │ └── ReferralsNotificationBadgeService.kt │ │ │ ├── storage │ │ │ ├── DatastoreNotificationBadgeStorage.kt │ │ │ ├── NotificationBadge.kt │ │ │ └── NotificationBadgeStorage.kt │ │ │ └── tab │ │ │ ├── BottomNavTab.kt │ │ │ └── TabNotificationBadgeService.kt │ │ └── test │ │ └── kotlin │ │ └── com │ │ └── hedvig │ │ └── android │ │ └── notification │ │ └── badge │ │ └── data │ │ └── crosssell │ │ ├── FakeNotificationBadgeStorage.kt │ │ ├── bottomnav │ │ └── TabNotificationBadgeServiceTest.kt │ │ └── card │ │ ├── CrossSellCardNotificationBadgeServiceTest.kt │ │ └── FakeGetCrossSellIdentifiersUseCase.kt ├── notification-permission │ ├── build.gradle.kts │ └── src │ │ └── main │ │ ├── AndroidManifest.xml │ │ └── kotlin │ │ └── com │ │ └── hedvig │ │ └── android │ │ └── notification │ │ └── permission │ │ └── NotificationPermission.kt ├── notification │ ├── notification-core │ │ ├── build.gradle.kts │ │ └── src │ │ │ └── main │ │ │ ├── AndroidManifest.xml │ │ │ └── kotlin │ │ │ └── com │ │ │ └── hedvig │ │ │ └── android │ │ │ └── notification │ │ │ └── core │ │ │ ├── NotificationChannel.kt │ │ │ ├── NotificationExt.kt │ │ │ └── NotificationSender.kt │ └── notification-firebase │ │ ├── build.gradle.kts │ │ └── src │ │ └── main │ │ ├── AndroidManifest.xml │ │ ├── graphql │ │ └── MutationMemberDeviceRegister.graphql │ │ └── kotlin │ │ └── com │ │ └── hedvig │ │ └── android │ │ └── notification │ │ └── firebase │ │ ├── FCMTokenAuthEventListener.kt │ │ ├── FCMTokenManager.kt │ │ ├── FCMTokenStorage.kt │ │ ├── FCMTokenUploadWorker.kt │ │ ├── PushNotificationService.kt │ │ └── di │ │ └── FirebaseNotificationModule.kt ├── shared │ ├── forever-ui │ │ ├── build.gradle.kts │ │ └── src │ │ │ └── main │ │ │ ├── AndroidManifest.xml │ │ │ ├── graphql │ │ │ ├── MutationMemberReferralInformationCodeUpdate.graphql │ │ │ └── QueryFullReferrals.graphql │ │ │ └── kotlin │ │ │ └── com │ │ │ └── hedvig │ │ │ └── android │ │ │ └── shared │ │ │ └── foreverui │ │ │ └── ui │ │ │ ├── data │ │ │ ├── ForeverData.kt │ │ │ ├── ForeverRepository.kt │ │ │ ├── ForeverRepositoryDemo.kt │ │ │ ├── ForeverRepositoryImpl.kt │ │ │ └── ForeverRepositoryProvider.kt │ │ │ ├── di │ │ │ └── ForeverModule.kt │ │ │ └── ui │ │ │ ├── ContextExt.kt │ │ │ ├── DiscountPieChart.kt │ │ │ ├── EditCodeBottomSheet.kt │ │ │ ├── ForeverDestination.kt │ │ │ ├── ForeverExplanationBottomSheet.kt │ │ │ ├── ForeverViewModel.kt │ │ │ └── ReferralList.kt │ └── tier-comparison │ │ ├── build.gradle.kts │ │ └── src │ │ └── main │ │ ├── AndroidManifest.xml │ │ ├── graphql │ │ └── CompareCoverageQuery.graphql │ │ └── kotlin │ │ └── com │ │ └── hedvig │ │ └── android │ │ └── shared │ │ └── tier │ │ └── comparison │ │ ├── data │ │ └── GetCoverageComparisonUseCase.kt │ │ ├── di │ │ └── ComparisonModule.kt │ │ ├── navigation │ │ └── ComparisonParameters.kt │ │ └── ui │ │ ├── ComparisonDestination.kt │ │ ├── ComparisonViewModel.kt │ │ └── OverlaidIndicationState.kt ├── test │ └── test-clock │ │ ├── build.gradle.kts │ │ └── src │ │ └── main │ │ └── kotlin │ │ └── com │ │ └── hedvig │ │ └── android │ │ └── test │ │ └── clock │ │ └── TestClock.kt ├── theme │ ├── build.gradle.kts │ └── src │ │ └── main │ │ └── kotlin │ │ └── com │ │ └── hedvig │ │ └── android │ │ └── theme │ │ └── Theme.kt ├── tracking │ ├── tracking-core │ │ ├── build.gradle.kts │ │ └── src │ │ │ └── main │ │ │ └── kotlin │ │ │ └── com │ │ │ └── hedvig │ │ │ └── android │ │ │ └── core │ │ │ └── tracking │ │ │ ├── LogAction.kt │ │ │ └── RumLogger.kt │ └── tracking-datadog │ │ ├── build.gradle.kts │ │ └── src │ │ └── main │ │ ├── AndroidManifest.xml │ │ └── kotlin │ │ └── com │ │ └── hedvig │ │ └── android │ │ └── tracking │ │ └── datadog │ │ ├── ActionLoggerInitializer.kt │ │ ├── DatadogRumLogger.kt │ │ └── di │ │ └── trackingDatadogModule.kt └── ui │ ├── claim-status │ ├── build.gradle.kts │ └── src │ │ └── main │ │ ├── AndroidManifest.xml │ │ └── kotlin │ │ └── com │ │ └── hedvig │ │ └── android │ │ └── ui │ │ └── claimstatus │ │ ├── ClaimStatusCard.kt │ │ ├── ClaimStatusCards.kt │ │ ├── internal │ │ ├── ClaimPillsRow.kt │ │ └── ClaimProgressRow.kt │ │ └── model │ │ ├── ClaimPillType.kt │ │ ├── ClaimProgressSegment.kt │ │ └── ClaimStatusCardUiState.kt │ ├── compose-webview │ ├── README.md │ ├── build.gradle.kts │ └── src │ │ └── main │ │ ├── AndroidManifest.xml │ │ └── kotlin │ │ └── com │ │ └── hedvig │ │ └── android │ │ └── composewebview │ │ └── WebView.kt │ ├── cross-sells │ ├── build.gradle.kts │ └── src │ │ └── main │ │ ├── AndroidManifest.xml │ │ └── kotlin │ │ └── com │ │ └── hedvig │ │ └── android │ │ └── crosssells │ │ └── CrossSells.kt │ ├── placeholder │ ├── build.gradle.kts │ └── src │ │ └── main │ │ ├── AndroidManifest.xml │ │ └── kotlin │ │ └── com │ │ └── hedvig │ │ └── android │ │ └── placeholder │ │ ├── Placeholder.kt │ │ └── PlaceholderHighlight.kt │ ├── pullrefresh │ ├── README.md │ ├── build.gradle.kts │ └── src │ │ └── main │ │ ├── AndroidManifest.xml │ │ └── kotlin │ │ └── com │ │ └── hedvig │ │ └── android │ │ └── pullrefresh │ │ ├── PullRefresh.kt │ │ ├── PullRefreshIndicator.kt │ │ ├── PullRefreshIndicatorTransform.kt │ │ └── PullRefreshState.kt │ ├── ui-claim-flow │ ├── build.gradle.kts │ └── src │ │ └── main │ │ ├── AndroidManifest.xml │ │ └── kotlin │ │ └── com │ │ └── hedvig │ │ └── android │ │ └── ui │ │ └── claimflow │ │ ├── ClaimFlowScaffold.kt │ │ ├── HedvigChip.kt │ │ └── WarningTextWithIcon.kt │ ├── ui-emergency │ ├── build.gradle.kts │ └── src │ │ └── main │ │ ├── AndroidManifest.xml │ │ └── kotlin │ │ └── com │ │ └── hedvig │ │ └── android │ │ └── ui │ │ └── emergency │ │ ├── EmergencyScreen.kt │ │ └── FirstVetScreen.kt │ └── ui-tiers-and-addons │ ├── build.gradle.kts │ └── src │ └── main │ ├── AndroidManifest.xml │ └── kotlin │ └── com │ └── hedvig │ └── android │ └── tiersandaddons │ └── QuoteCard.kt ├── build-logic ├── README.md ├── convention │ ├── build.gradle.kts │ └── src │ │ └── main │ │ └── kotlin │ │ ├── ApplicationConventionPlugin.kt │ │ ├── HedvigGradlePlugin.kt │ │ ├── HedvigLintConventionPlugin.kt │ │ ├── KotlinLibraryConventionPlugin.kt │ │ ├── LibraryConventionPlugin.kt │ │ └── com │ │ └── hedvig │ │ └── android │ │ ├── AndroidCommonExtension.kt │ │ ├── ConfigureCompose.kt │ │ ├── ConfigureKotlin.kt │ │ ├── ConfigureKotlinAndroid.kt │ │ ├── ConfigureKotlinCommonCompilerOptions.kt │ │ └── HedvigGradlePluginExtension.kt ├── gradle.properties └── settings.gradle.kts ├── build.gradle.kts ├── debug.keystore ├── gradle.properties ├── gradle ├── libs.versions.toml ├── projectDependencyGraph.gradle └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat ├── hedvig-lint ├── .gitignore ├── build.gradle.kts ├── lint-baseline │ ├── lint-baseline-apollo-auth-listeners.xml │ ├── lint-baseline-apollo-core.xml │ ├── lint-baseline-apollo-network-cache-manager.xml │ ├── lint-baseline-apollo-octopus-public.xml │ ├── lint-baseline-apollo-octopus-test.xml │ ├── lint-baseline-apollo-test.xml │ ├── lint-baseline-app.xml │ ├── lint-baseline-audio-player-data.xml │ ├── lint-baseline-audio-player-ui.xml │ ├── lint-baseline-auth-core-public.xml │ ├── lint-baseline-auth-core-test.xml │ ├── lint-baseline-auth-event-core.xml │ ├── lint-baseline-auth-event-fake.xml │ ├── lint-baseline-claim-status.xml │ ├── lint-baseline-compose-pager-indicator.xml │ ├── lint-baseline-compose-photo-capture-state.xml │ ├── lint-baseline-compose-ui.xml │ ├── lint-baseline-compose-webview.xml │ ├── lint-baseline-core-app-review.xml │ ├── lint-baseline-core-build-constants.xml │ ├── lint-baseline-core-common-android-public.xml │ ├── lint-baseline-core-common-public.xml │ ├── lint-baseline-core-common-test.xml │ ├── lint-baseline-core-datastore-public.xml │ ├── lint-baseline-core-datastore-test.xml │ ├── lint-baseline-core-demo-mode.xml │ ├── lint-baseline-core-design-system.xml │ ├── lint-baseline-core-file-upload.xml │ ├── lint-baseline-core-icons.xml │ ├── lint-baseline-core-markdown.xml │ ├── lint-baseline-core-resources.xml │ ├── lint-baseline-core-retrofit.xml │ ├── lint-baseline-core-ui-data.xml │ ├── lint-baseline-core-ui.xml │ ├── lint-baseline-cross-sells.xml │ ├── lint-baseline-data-addons.xml │ ├── lint-baseline-data-changetier.xml │ ├── lint-baseline-data-chat.xml │ ├── lint-baseline-data-claim-flow.xml │ ├── lint-baseline-data-claim-triaging.xml │ ├── lint-baseline-data-contract-android.xml │ ├── lint-baseline-data-contract-public.xml │ ├── lint-baseline-data-conversations.xml │ ├── lint-baseline-data-cross-sell-after-claim-closed.xml │ ├── lint-baseline-data-cross-sell-after-flow.xml │ ├── lint-baseline-data-display-items.xml │ ├── lint-baseline-data-paying-member.xml │ ├── lint-baseline-data-product-variant-android.xml │ ├── lint-baseline-data-product-variant-public.xml │ ├── lint-baseline-data-settings-datastore-public.xml │ ├── lint-baseline-data-settings-datastore-test.xml │ ├── lint-baseline-data-termination.xml │ ├── lint-baseline-database-android.xml │ ├── lint-baseline-database-core.xml │ ├── lint-baseline-database-test.xml │ ├── lint-baseline-datadog-android.xml │ ├── lint-baseline-datadog-core.xml │ ├── lint-baseline-datadog-demo-tracking.xml │ ├── lint-baseline-design-showcase.xml │ ├── lint-baseline-design-system-api.xml │ ├── lint-baseline-design-system-hedvig.xml │ ├── lint-baseline-design-system-internals.xml │ ├── lint-baseline-feature-addon-purchase.xml │ ├── lint-baseline-feature-changeaddress.xml │ ├── lint-baseline-feature-chat.xml │ ├── lint-baseline-feature-choose-tier.xml │ ├── lint-baseline-feature-claim-details.xml │ ├── lint-baseline-feature-claim-triaging.xml │ ├── lint-baseline-feature-connect-payment-trustly.xml │ ├── lint-baseline-feature-cross-sell-after-flow.xml │ ├── lint-baseline-feature-cross-sell-sheet.xml │ ├── lint-baseline-feature-delete-account.xml │ ├── lint-baseline-feature-edit-coinsured.xml │ ├── lint-baseline-feature-flags-public.xml │ ├── lint-baseline-feature-flags-test.xml │ ├── lint-baseline-feature-force-upgrade.xml │ ├── lint-baseline-feature-forever.xml │ ├── lint-baseline-feature-help-center.xml │ ├── lint-baseline-feature-home.xml │ ├── lint-baseline-feature-image-viewer.xml │ ├── lint-baseline-feature-impersonation.xml │ ├── lint-baseline-feature-insurance-certificate.xml │ ├── lint-baseline-feature-insurances.xml │ ├── lint-baseline-feature-login.xml │ ├── lint-baseline-feature-movingflow.xml │ ├── lint-baseline-feature-odyssey.xml │ ├── lint-baseline-feature-payments.xml │ ├── lint-baseline-feature-profile.xml │ ├── lint-baseline-feature-terminate-insurance.xml │ ├── lint-baseline-feature-travel-certificate.xml │ ├── lint-baseline-forever-ui.xml │ ├── lint-baseline-initializable.xml │ ├── lint-baseline-language-android.xml │ ├── lint-baseline-language-core.xml │ ├── lint-baseline-language-data.xml │ ├── lint-baseline-language-migration.xml │ ├── lint-baseline-language-test.xml │ ├── lint-baseline-logging-android.xml │ ├── lint-baseline-logging-public.xml │ ├── lint-baseline-logging-test.xml │ ├── lint-baseline-member-reminders-public.xml │ ├── lint-baseline-member-reminders-test.xml │ ├── lint-baseline-member-reminders-ui.xml │ ├── lint-baseline-molecule-android.xml │ ├── lint-baseline-molecule-public.xml │ ├── lint-baseline-molecule-test.xml │ ├── lint-baseline-navigation-activity.xml │ ├── lint-baseline-navigation-common.xml │ ├── lint-baseline-navigation-compose-typed.xml │ ├── lint-baseline-navigation-compose.xml │ ├── lint-baseline-navigation-core.xml │ ├── lint-baseline-notification-badge-data-fake.xml │ ├── lint-baseline-notification-badge-data-public.xml │ ├── lint-baseline-notification-core.xml │ ├── lint-baseline-notification-firebase.xml │ ├── lint-baseline-notification-permission.xml │ ├── lint-baseline-placeholder.xml │ ├── lint-baseline-pullrefresh.xml │ ├── lint-baseline-test-clock.xml │ ├── lint-baseline-theme.xml │ ├── lint-baseline-tier-comparison.xml │ ├── lint-baseline-tracking-core.xml │ ├── lint-baseline-tracking-datadog.xml │ ├── lint-baseline-ui-claim-flow.xml │ ├── lint-baseline-ui-claimflow.xml │ ├── lint-baseline-ui-emergency.xml │ └── lint-baseline-ui-tiers-and-addons.xml ├── lint.xml └── src │ └── main │ ├── kotlin │ └── com │ │ └── hedvig │ │ └── android │ │ └── lint │ │ ├── HedvigLintRegistry.kt │ │ ├── Material2Detector.kt │ │ ├── config │ │ └── Priorities.kt │ │ └── util │ │ ├── LintOption.kt │ │ ├── LintUtils.kt │ │ ├── OptionLoadingDetector.kt │ │ └── StringSetLintOption.kt │ └── resources │ └── META-INF │ └── services │ └── com.android.tools.lint.client.api.IssueRegistry ├── lokalise-gradle-plugin ├── README.md ├── gradle.properties ├── lokalise │ ├── build.gradle.kts │ └── src │ │ └── main │ │ └── kotlin │ │ └── com │ │ └── hedvig │ │ └── android │ │ └── lokalise │ │ ├── HedvigLokalisePlugin.kt │ │ ├── config │ │ ├── DownloadConfig.kt │ │ ├── EmptyTranslationStrategy.kt │ │ └── StringsOrder.kt │ │ ├── extension │ │ └── LokalisePluginExtension.kt │ │ └── task │ │ └── DownloadStringsTask.kt └── settings.gradle.kts ├── maestro ├── demo-mode.yaml └── maestro.main.kts ├── micro-apps ├── README.md └── design-showcase │ ├── README.md │ ├── build.gradle.kts │ └── src │ └── main │ ├── AndroidManifest.xml │ ├── kotlin │ └── com │ │ └── hedvig │ │ └── android │ │ └── sample │ │ └── design │ │ └── showcase │ │ ├── DesignShowcase.kt │ │ ├── DesignShowcaseActivity.kt │ │ ├── accordion │ │ └── Accordion.kt │ │ ├── bigcard │ │ └── BigCard.kt │ │ ├── bottomSheet │ │ └── BottomSheetShowcase.kt │ │ ├── button │ │ └── ShowcaseButton.kt │ │ ├── datepicker │ │ └── DatePickerShowcase.kt │ │ ├── dialog │ │ └── ShowcaseDialog.kt │ │ ├── dropdown │ │ └── Dropdown.kt │ │ ├── freetext │ │ └── FreeTextShowcase.kt │ │ ├── highlight │ │ └── HighlightShowcase.kt │ │ ├── icons │ │ └── ShowcaseIcons.kt │ │ ├── list │ │ └── CLickableList.kt │ │ ├── materialBottomSheet │ │ └── MaterialExperiment.kt │ │ ├── notifications │ │ └── NotificationsShowcase.kt │ │ ├── peril │ │ └── Perils.kt │ │ ├── progress │ │ └── ProgressBarShowcase.kt │ │ ├── radio │ │ └── RadioGroups.kt │ │ ├── stepper │ │ └── StepperShowcase.kt │ │ ├── tabs │ │ └── Tabs.kt │ │ ├── textfield │ │ └── ShowcaseTextField.kt │ │ ├── toggle │ │ └── ToggleShowCase.kt │ │ ├── topbar │ │ └── TopAppBar.kt │ │ └── util │ │ ├── DashedBorder.kt │ │ ├── FreeScroll.kt │ │ └── ShowcaseLayout.kt │ └── res │ ├── drawable-nodpi │ ├── ic_pillow_cat.webp │ ├── ic_pillow_dog.webp │ ├── ic_pillow_home.webp │ └── ic_pillow_homeowner.webp │ └── values │ ├── strings.xml │ └── themes.xml ├── misc ├── WORKING_WITH_MAVEN_LOCAL.md └── images │ ├── m2_and_m3_color_schemes.png │ ├── m3_showcase.png │ └── modularization-graph.png ├── renovate.json ├── sample-module ├── README.md ├── build.gradle.kts └── src │ └── main │ └── AndroidManifest.xml ├── scripts └── ci-prebuild.sh └── settings.gradle.kts /.aiexclude: -------------------------------------------------------------------------------- 1 | .properties 2 | .DS_Store 3 | .gradle 4 | .settings 5 | .iml 6 | .li 7 | .classpath 8 | .project 9 | build/ 10 | mapping.txt 11 | .json 12 | .graphqls 13 | Jks 14 | -------------------------------------------------------------------------------- /.github/CODEOWNERS: -------------------------------------------------------------------------------- 1 | * @HedvigInsurance/android 2 | -------------------------------------------------------------------------------- /.github/ci-gradle.properties: -------------------------------------------------------------------------------- 1 | org.gradle.daemon=false 2 | org.gradle.parallel=true 3 | org.gradle.workers.max=2 4 | org.gradle.configuration-cache.parallel=true 5 | 6 | kotlin.incremental=false 7 | kotlin.compiler.execution.strategy=in-process -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .vscode 2 | .DS_Store 3 | .gradle 4 | build/ 5 | .settings 6 | maven/ 7 | local.properties 8 | sentry.properties 9 | .sts4-cache 10 | *.iml 11 | *.li 12 | .classpath 13 | .project 14 | .kotlin 15 | mapping.txt 16 | 17 | # graphql 18 | schema.json 19 | schema.graphqls 20 | 21 | open_source_licenses.html 22 | 23 | # lokalise credentials 24 | lokalise.properties 25 | app/src/main/res/**/strings.xml 26 | 27 | # Local jks store 28 | Jks 29 | -------------------------------------------------------------------------------- /.idea/.gitignore: -------------------------------------------------------------------------------- 1 | # Default ignored files 2 | /shelf/ 3 | /workspace.xml 4 | # GitHub Copilot files 5 | /copilot/* 6 | # Ignore everything inside .idea 7 | /* 8 | # Except for shared run configurations 9 | !/runConfigurations/ 10 | !codeInsightSettings.xml 11 | !.gitignore 12 | !/codeStyles/ 13 | -------------------------------------------------------------------------------- /.idea/codeStyles/codeStyleConfig.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | -------------------------------------------------------------------------------- /app/apollo/README.md: -------------------------------------------------------------------------------- 1 | To download the schema: 2 | `./gradlew downloadOctopusApolloSchemaFromIntrospection` 3 | 4 | To manually generate all the models to have the IDE not show errors all over the place: 5 | `./gradlew generateApolloSources` 6 | -------------------------------------------------------------------------------- /app/apollo/apollo-auth-listeners/build.gradle.kts: -------------------------------------------------------------------------------- 1 | plugins { 2 | id("hedvig.gradle.plugin") 3 | id("hedvig.kotlin.library") 4 | } 5 | 6 | dependencies { 7 | implementation(libs.apollo.normalizedCache) 8 | implementation(libs.apollo.runtime) 9 | implementation(libs.koin.core) 10 | implementation(projects.apolloOctopusPublic) 11 | implementation(projects.authEventCore) 12 | } 13 | -------------------------------------------------------------------------------- /app/apollo/apollo-core/build.gradle.kts: -------------------------------------------------------------------------------- 1 | plugins { 2 | id("hedvig.gradle.plugin") 3 | id("hedvig.kotlin.library") 4 | } 5 | 6 | dependencies { 7 | api(libs.apollo.api) 8 | api(libs.apollo.runtime) 9 | api(libs.arrow.core) 10 | api(libs.coroutines.core) 11 | api(projects.coreCommonPublic) 12 | 13 | implementation(libs.apollo.normalizedCache) 14 | } 15 | -------------------------------------------------------------------------------- /app/apollo/apollo-core/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /app/apollo/apollo-network-cache-manager/build.gradle.kts: -------------------------------------------------------------------------------- 1 | plugins { 2 | id("hedvig.gradle.plugin") 3 | id("hedvig.kotlin.library") 4 | } 5 | 6 | dependencies { 7 | implementation(libs.apollo.normalizedCache) 8 | implementation(libs.apollo.runtime) 9 | implementation(libs.koin.core) 10 | } 11 | -------------------------------------------------------------------------------- /app/apollo/apollo-network-cache-manager/src/main/kotlin/com/hedvig/android/apollo/di/NetworkCacheManagerModule.kt: -------------------------------------------------------------------------------- 1 | package com.hedvig.android.apollo.di 2 | 3 | import com.apollographql.apollo.ApolloClient 4 | import com.hedvig.android.apollo.ApolloNetworkCacheManager 5 | import com.hedvig.android.apollo.NetworkCacheManager 6 | import org.koin.dsl.module 7 | 8 | val networkCacheManagerModule = module { 9 | single { ApolloNetworkCacheManager(get()) } 10 | } 11 | -------------------------------------------------------------------------------- /app/apollo/apollo-octopus-public/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /app/apollo/apollo-octopus-public/src/main/graphql/com/hedvig/android/apollo/octopus/extra.graphqls: -------------------------------------------------------------------------------- 1 | extend schema 2 | @link( 3 | url: "https://specs.apollo.dev/kotlin_labs/v0.3", 4 | import: ["@typePolicy"] 5 | ) 6 | 7 | extend type Member @typePolicy(keyFields: "id") 8 | 9 | extend interface ChatMessage @typePolicy(keyFields: "id") 10 | extend type Contract @typePolicy(keyFields: "id") 11 | extend type Claim @typePolicy(keyFields: "id") 12 | extend type Conversation @typePolicy(keyFields: "id") 13 | -------------------------------------------------------------------------------- /app/apollo/apollo-octopus-public/src/main/graphql/com/hedvig/android/apollo/octopus/graphql/AddonVariantFragment.graphql: -------------------------------------------------------------------------------- 1 | fragment AddonVariantFragment on AddonVariant { 2 | termsVersion 3 | displayName 4 | product 5 | addonPerils { 6 | coverageText 7 | description 8 | title 9 | colorCode 10 | } 11 | documents { 12 | displayName 13 | url 14 | type 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /app/apollo/apollo-octopus-public/src/main/graphql/com/hedvig/android/apollo/octopus/graphql/FragmentMoneyFragment.graphql: -------------------------------------------------------------------------------- 1 | fragment MoneyFragment on Money { 2 | amount 3 | currencyCode 4 | } 5 | -------------------------------------------------------------------------------- /app/apollo/apollo-octopus-public/src/main/graphql/com/hedvig/android/apollo/octopus/graphql/FragmentProductVariantFragment.graphql: -------------------------------------------------------------------------------- 1 | fragment ProductVariantFragment on ProductVariant { 2 | displayName 3 | displayNameTier 4 | tierDescription 5 | typeOfContract 6 | partner 7 | termsVersion 8 | perils { 9 | id 10 | title 11 | description 12 | covered 13 | colorCode 14 | } 15 | insurableLimits { 16 | label 17 | limit 18 | description 19 | } 20 | documents { 21 | displayName 22 | url 23 | type 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /app/apollo/apollo-octopus-test/build.gradle.kts: -------------------------------------------------------------------------------- 1 | plugins { 2 | id("hedvig.gradle.plugin") 3 | id("hedvig.kotlin.library") 4 | } 5 | 6 | dependencies { 7 | api(libs.apollo.api) 8 | api(libs.kotlinx.datetime) 9 | 10 | implementation(projects.apolloOctopusPublic) 11 | implementation(projects.coreMarkdown) 12 | } 13 | -------------------------------------------------------------------------------- /app/apollo/apollo-test/build.gradle.kts: -------------------------------------------------------------------------------- 1 | plugins { 2 | id("hedvig.gradle.plugin") 3 | id("hedvig.kotlin.library") 4 | } 5 | 6 | dependencies { 7 | api(libs.junit) 8 | 9 | implementation(libs.apollo.testingSupport) 10 | implementation(libs.atomicfu) 11 | implementation(libs.turbine) 12 | } 13 | -------------------------------------------------------------------------------- /app/app/src/main/ic_launcher-playstore.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HedvigInsurance/android/1aa395f47782a3b094129c5c23eee6ec6f9c94a7/app/app/src/main/ic_launcher-playstore.png -------------------------------------------------------------------------------- /app/app/src/main/kotlin/com/hedvig/android/app/AppInitializers.kt: -------------------------------------------------------------------------------- 1 | package com.hedvig.android.app 2 | 3 | import com.hedvig.android.initializable.Initializable 4 | 5 | class AppInitializers( 6 | private val initializables: Set, 7 | ) { 8 | fun initialize() { 9 | for (initializable in initializables) { 10 | initializable.initialize() 11 | } 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /app/app/src/main/kotlin/com/hedvig/android/app/HedvigApplication.kt: -------------------------------------------------------------------------------- 1 | package com.hedvig.android.app 2 | 3 | import android.app.Application 4 | import androidx.appcompat.app.AppCompatDelegate 5 | import org.koin.android.ext.android.inject 6 | 7 | open class HedvigApplication : Application() { 8 | private val appInitializers: AppInitializers by inject() 9 | 10 | override fun onCreate() { 11 | super.onCreate() 12 | AppCompatDelegate.setCompatVectorFromResourcesEnabled(true) 13 | appInitializers.initialize() 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /app/app/src/main/kotlin/com/hedvig/android/app/di/AppModule.kt: -------------------------------------------------------------------------------- 1 | package com.hedvig.android.app.di 2 | 3 | import com.hedvig.android.app.AppInitializers 4 | import com.hedvig.android.initializable.Initializable 5 | import org.koin.dsl.module 6 | 7 | val appModule = module { 8 | single { 9 | AppInitializers(getAll().toSet()) 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /app/app/src/main/kotlin/com/hedvig/android/app/navigation/RootGraph.kt: -------------------------------------------------------------------------------- 1 | package com.hedvig.android.app.navigation 2 | 3 | import com.hedvig.android.navigation.common.Destination 4 | import kotlinx.serialization.SerialName 5 | import kotlinx.serialization.Serializable 6 | 7 | @Serializable 8 | @SerialName("root") 9 | object RootGraph : Destination { 10 | val route = "root" 11 | 12 | override fun toString(): String { 13 | return route 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /app/app/src/main/kotlin/com/hedvig/android/app/notification/senders/NotificationSendersExt.kt: -------------------------------------------------------------------------------- 1 | package com.hedvig.android.app.notification.senders 2 | 3 | import com.google.firebase.messaging.RemoteMessage 4 | 5 | // region From customerIO https://www.customer.io/docs/send-push/#standard-payload 6 | internal fun RemoteMessage?.titleFromCustomerIoData(): String? { 7 | return this?.data?.get("title") 8 | } 9 | 10 | internal fun RemoteMessage.bodyFromCustomerIoData(): String? { 11 | return this?.data?.get("body") 12 | } 13 | // endregion 14 | -------------------------------------------------------------------------------- /app/app/src/main/kotlin/com/hedvig/android/app/startup/DatadogInitializerImpl.kt: -------------------------------------------------------------------------------- 1 | package com.hedvig.android.app.startup 2 | 3 | import androidx.startup.Initializer 4 | import com.hedvig.android.app.di.KoinInitializer 5 | import com.hedvig.android.datadog.core.DatadogInitializer 6 | 7 | @Suppress("unused") // Used in /app/src/main/AndroidManifest.xml 8 | class DatadogInitializerImpl : DatadogInitializer() { 9 | override fun dependencies(): List>> { 10 | return listOf(TimberInitializer::class.java, KoinInitializer::class.java) 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /app/app/src/main/res/drawable/ic_launcher_background.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/app/src/main/res/mipmap-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HedvigInsurance/android/1aa395f47782a3b094129c5c23eee6ec6f9c94a7/app/app/src/main/res/mipmap-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/app/src/main/res/mipmap-hdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HedvigInsurance/android/1aa395f47782a3b094129c5c23eee6ec6f9c94a7/app/app/src/main/res/mipmap-hdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /app/app/src/main/res/mipmap-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HedvigInsurance/android/1aa395f47782a3b094129c5c23eee6ec6f9c94a7/app/app/src/main/res/mipmap-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/app/src/main/res/mipmap-mdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HedvigInsurance/android/1aa395f47782a3b094129c5c23eee6ec6f9c94a7/app/app/src/main/res/mipmap-mdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /app/app/src/main/res/mipmap-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HedvigInsurance/android/1aa395f47782a3b094129c5c23eee6ec6f9c94a7/app/app/src/main/res/mipmap-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HedvigInsurance/android/1aa395f47782a3b094129c5c23eee6ec6f9c94a7/app/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /app/app/src/main/res/mipmap-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HedvigInsurance/android/1aa395f47782a3b094129c5c23eee6ec6f9c94a7/app/app/src/main/res/mipmap-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HedvigInsurance/android/1aa395f47782a3b094129c5c23eee6ec6f9c94a7/app/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /app/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HedvigInsurance/android/1aa395f47782a3b094129c5c23eee6ec6f9c94a7/app/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HedvigInsurance/android/1aa395f47782a3b094129c5c23eee6ec6f9c94a7/app/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /app/app/src/main/res/values-night/colors.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | @color/hedvig_black 4 | @color/hedvig_white 5 | -------------------------------------------------------------------------------- /app/app/src/main/res/values-night/themes.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 9 | -------------------------------------------------------------------------------- /app/app/src/main/res/values/colors.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | #121212 4 | #ffffff 5 | 6 | @color/hedvig_black 7 | @color/hedvig_white 8 | 9 | @color/hedvig_white 10 | @color/hedvig_black 11 | 12 | -------------------------------------------------------------------------------- /app/app/src/main/res/values/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | /deeplink 4 | -------------------------------------------------------------------------------- /app/app/src/release/res/xml/file_paths.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /app/app/src/staging/res/xml/file_paths.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /app/audio-player-data/build.gradle.kts: -------------------------------------------------------------------------------- 1 | plugins { 2 | id("hedvig.gradle.plugin") 3 | id("hedvig.kotlin.library") 4 | } 5 | 6 | hedvig { 7 | serialization() 8 | } 9 | 10 | dependencies { 11 | implementation(libs.androidx.annotation) 12 | implementation(libs.coroutines.core) 13 | implementation(libs.kotlinx.serialization.core) 14 | implementation(projects.coreCommonPublic) 15 | 16 | testImplementation(libs.assertK) 17 | testImplementation(libs.junit) 18 | } 19 | -------------------------------------------------------------------------------- /app/audio-player-ui/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /app/audio-player-ui/src/main/kotlin/com/hedvig/android/audio/player/internal/WaveInteraction.kt: -------------------------------------------------------------------------------- 1 | package com.hedvig.android.audio.player.internal 2 | 3 | import com.hedvig.audio.player.data.ProgressPercentage 4 | 5 | internal fun interface WaveInteraction { 6 | /** 7 | * [horizontalProgressPercentage] is a value that shows where in the horizontal spectrum the wave was interacted 8 | * with. 9 | * Ranges from 0.0f when interacted on the far left to 1.0f on the far right. 10 | */ 11 | fun onInteraction(horizontalProgressPercentage: ProgressPercentage) 12 | } 13 | -------------------------------------------------------------------------------- /app/auth/auth-core-public/src/main/kotlin/com/hedvig/android/auth/AccessTokenProvider.kt: -------------------------------------------------------------------------------- 1 | package com.hedvig.android.auth 2 | 3 | /** 4 | * To be used in both Okhttp and ktor interceptors to append the access token to the header, and refresh it if there's 5 | * such a need. 6 | */ 7 | fun interface AccessTokenProvider { 8 | suspend fun provide(): String? 9 | } 10 | -------------------------------------------------------------------------------- /app/auth/auth-core-public/src/main/kotlin/com/hedvig/android/auth/AuthStatus.kt: -------------------------------------------------------------------------------- 1 | package com.hedvig.android.auth 2 | 3 | import com.hedvig.android.auth.token.LocalAccessToken 4 | import com.hedvig.android.auth.token.LocalRefreshToken 5 | 6 | sealed interface AuthStatus { 7 | data class LoggedIn( 8 | val accessToken: LocalAccessToken, 9 | val refreshToken: LocalRefreshToken, 10 | ) : AuthStatus 11 | 12 | data object LoggedOut : AuthStatus 13 | } 14 | -------------------------------------------------------------------------------- /app/auth/auth-core-public/src/main/kotlin/com/hedvig/android/auth/event/AuthEvent.kt: -------------------------------------------------------------------------------- 1 | package com.hedvig.android.auth.event 2 | 3 | sealed interface AuthEvent { 4 | data class LoggedIn( 5 | val accessToken: String, 6 | val refreshToken: String, 7 | ) : AuthEvent 8 | 9 | data object LoggedOut : AuthEvent 10 | } 11 | -------------------------------------------------------------------------------- /app/auth/auth-core-public/src/main/kotlin/com/hedvig/android/auth/event/AuthEventStorage.kt: -------------------------------------------------------------------------------- 1 | package com.hedvig.android.auth.event 2 | 3 | import kotlinx.coroutines.channels.Channel 4 | 5 | class AuthEventStorage() { 6 | val authEvents = Channel(Channel.UNLIMITED) 7 | 8 | fun loggedIn(accessToken: String, refreshToken: String) { 9 | authEvents.trySend(AuthEvent.LoggedIn(accessToken, refreshToken)) 10 | } 11 | 12 | fun loggedOut() { 13 | authEvents.trySend(AuthEvent.LoggedOut) 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /app/auth/auth-core-public/src/main/kotlin/com/hedvig/android/auth/token/AuthTokens.kt: -------------------------------------------------------------------------------- 1 | package com.hedvig.android.auth.token 2 | 3 | data class AuthTokens( 4 | val accessToken: LocalAccessToken, 5 | val refreshToken: LocalRefreshToken, 6 | ) 7 | -------------------------------------------------------------------------------- /app/auth/auth-core-public/src/main/kotlin/com/hedvig/android/auth/token/LocalAccessToken.kt: -------------------------------------------------------------------------------- 1 | package com.hedvig.android.auth.token 2 | 3 | import kotlinx.datetime.Instant 4 | 5 | data class LocalAccessToken( 6 | val token: String, 7 | val expiryDate: Instant, 8 | ) 9 | -------------------------------------------------------------------------------- /app/auth/auth-core-public/src/main/kotlin/com/hedvig/android/auth/token/LocalRefreshToken.kt: -------------------------------------------------------------------------------- 1 | package com.hedvig.android.auth.token 2 | 3 | import kotlinx.datetime.Instant 4 | 5 | data class LocalRefreshToken( 6 | val token: String, 7 | val expiryDate: Instant, 8 | ) 9 | -------------------------------------------------------------------------------- /app/auth/auth-core-test/build.gradle.kts: -------------------------------------------------------------------------------- 1 | plugins { 2 | id("hedvig.gradle.plugin") 3 | id("hedvig.kotlin.library") 4 | } 5 | 6 | dependencies { 7 | implementation(libs.coroutines.core) 8 | implementation(libs.hedvig.authlib) 9 | implementation(libs.turbine) 10 | implementation(projects.authCorePublic) 11 | } 12 | -------------------------------------------------------------------------------- /app/auth/auth-event-core/README.md: -------------------------------------------------------------------------------- 1 | ## Auth-event 2 | 3 | A simple module to host the AuthenticationListener for all other modules who are interested in this 4 | event to depend on 5 | -------------------------------------------------------------------------------- /app/auth/auth-event-core/build.gradle.kts: -------------------------------------------------------------------------------- 1 | plugins { 2 | id("hedvig.gradle.plugin") 3 | id("hedvig.kotlin.library") 4 | } 5 | -------------------------------------------------------------------------------- /app/auth/auth-event-fake/build.gradle.kts: -------------------------------------------------------------------------------- 1 | plugins { 2 | id("hedvig.gradle.plugin") 3 | id("hedvig.kotlin.library") 4 | } 5 | 6 | dependencies { 7 | api(projects.authEventCore) 8 | 9 | implementation(libs.turbine) 10 | } 11 | -------------------------------------------------------------------------------- /app/auth/auth-event-fake/src/main/kotlin/com/hedvig/android/auth/event/AuthEventListener.kt: -------------------------------------------------------------------------------- 1 | package com.hedvig.android.auth.event 2 | 3 | import app.cash.turbine.Turbine 4 | 5 | class FakeAuthEventListener : AuthEventListener { 6 | val loggedInEvent = Turbine() 7 | val loggedOutEvent = Turbine() 8 | 9 | override suspend fun loggedIn(accessToken: String) { 10 | loggedInEvent.add(accessToken) 11 | } 12 | 13 | override suspend fun loggedOut() { 14 | loggedOutEvent.add(Unit) 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /app/compose/compose-pager-indicator/build.gradle.kts: -------------------------------------------------------------------------------- 1 | plugins { 2 | id("hedvig.gradle.plugin") 3 | id("hedvig.android.library") 4 | } 5 | 6 | hedvig { 7 | compose() 8 | } 9 | 10 | dependencies { 11 | implementation(libs.androidx.compose.foundation) 12 | implementation(libs.androidx.compose.runtime) 13 | implementation(libs.androidx.compose.uiCore) 14 | implementation(projects.designSystemHedvig) 15 | } 16 | -------------------------------------------------------------------------------- /app/compose/compose-pager-indicator/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /app/compose/compose-photo-capture-state/build.gradle.kts: -------------------------------------------------------------------------------- 1 | plugins { 2 | id("hedvig.gradle.plugin") 3 | id("hedvig.android.library") 4 | } 5 | 6 | hedvig { 7 | compose() 8 | } 9 | 10 | dependencies { 11 | implementation(libs.androidx.activity.compose) 12 | implementation(libs.androidx.activity.core) 13 | } 14 | -------------------------------------------------------------------------------- /app/compose/compose-photo-capture-state/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /app/compose/compose-ui/build.gradle.kts: -------------------------------------------------------------------------------- 1 | plugins { 2 | id("hedvig.gradle.plugin") 3 | id("hedvig.android.library") 4 | } 5 | 6 | hedvig { 7 | compose() 8 | } 9 | 10 | dependencies { 11 | implementation(libs.androidx.compose.foundation) 12 | implementation(libs.androidx.compose.runtime) 13 | implementation(libs.androidx.compose.uiCore) 14 | } 15 | -------------------------------------------------------------------------------- /app/compose/compose-ui/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /app/compose/compose-ui/src/main/kotlin/com/hedvig/android/compose/ui/EmptyContentDescription.kt: -------------------------------------------------------------------------------- 1 | package com.hedvig.android.compose.ui 2 | 3 | /** 4 | * Used when the content description is purposefully left as null as we either want to ignore this item from a11y, or 5 | * we have some other mechanism in order to read this component properly. 6 | * This helps us differentiate these instances from 7 | */ 8 | val EmptyContentDescription: String? = null 9 | -------------------------------------------------------------------------------- /app/core/core-app-review/build.gradle.kts: -------------------------------------------------------------------------------- 1 | plugins { 2 | id("hedvig.gradle.plugin") 3 | id("hedvig.kotlin.library") 4 | } 5 | dependencies { 6 | implementation(libs.androidx.datastore.core) 7 | implementation(libs.androidx.datastore.preferencesCore) 8 | implementation(libs.coroutines.core) 9 | implementation(libs.koin.core) 10 | implementation(projects.authEventCore) 11 | } 12 | -------------------------------------------------------------------------------- /app/core/core-app-review/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /app/core/core-app-review/src/main/kotlin/com/hedvig/android/core/appreview/SelfServiceCompletedAuthEventListener.kt: -------------------------------------------------------------------------------- 1 | package com.hedvig.android.core.appreview 2 | 3 | import com.hedvig.android.auth.event.AuthEventListener 4 | 5 | internal class SelfServiceCompletedAuthEventListener( 6 | private val selfServiceCompletedEventManager: SelfServiceCompletedEventManager, 7 | ) : AuthEventListener { 8 | override suspend fun loggedOut() { 9 | selfServiceCompletedEventManager.resetSelfServiceCompletions() 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /app/core/core-build-constants/build.gradle.kts: -------------------------------------------------------------------------------- 1 | plugins { 2 | id("hedvig.gradle.plugin") 3 | id("hedvig.kotlin.library") 4 | } 5 | -------------------------------------------------------------------------------- /app/core/core-common-android-public/.gitignore: -------------------------------------------------------------------------------- 1 | /build -------------------------------------------------------------------------------- /app/core/core-common-android-public/build.gradle.kts: -------------------------------------------------------------------------------- 1 | plugins { 2 | id("hedvig.gradle.plugin") 3 | id("hedvig.android.library") 4 | } 5 | 6 | hedvig { 7 | serialization() 8 | compose() 9 | } 10 | 11 | dependencies { 12 | implementation(libs.androidx.compose.runtime) 13 | implementation(libs.androidx.other.core) 14 | implementation(projects.apolloOctopusPublic) 15 | implementation(projects.coreResources) 16 | } 17 | -------------------------------------------------------------------------------- /app/core/core-common-android-public/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /app/core/core-common-android-public/src/main/kotlin/com/hedvig/android/core/common/android/validation/ValidationResult.kt: -------------------------------------------------------------------------------- 1 | package com.hedvig.android.core.common.android.validation 2 | 3 | import androidx.annotation.StringRes 4 | 5 | data class ValidationResult( 6 | val isSuccessful: Boolean, 7 | @StringRes val errorTextKey: Int?, 8 | ) 9 | -------------------------------------------------------------------------------- /app/core/core-common-public/build.gradle.kts: -------------------------------------------------------------------------------- 1 | plugins { 2 | id("hedvig.gradle.plugin") 3 | id("hedvig.kotlin.library") 4 | } 5 | 6 | dependencies { 7 | api(libs.okhttp.core) 8 | 9 | implementation(libs.coroutines.core) 10 | implementation(libs.koin.core) 11 | implementation(libs.kotlinx.datetime) 12 | } 13 | -------------------------------------------------------------------------------- /app/core/core-common-public/src/main/kotlin/com/hedvig/android/core/common/Cast.kt: -------------------------------------------------------------------------------- 1 | package com.hedvig.android.core.common 2 | 3 | inline fun Any?.cast(): T = this as T 4 | 5 | inline fun Any?.safeCast(): T? = this as? T 6 | -------------------------------------------------------------------------------- /app/core/core-common-public/src/main/kotlin/com/hedvig/android/core/common/ErrorMessage.kt: -------------------------------------------------------------------------------- 1 | package com.hedvig.android.core.common 2 | 3 | interface ErrorMessage { 4 | val message: String? 5 | val throwable: Throwable? 6 | } 7 | 8 | fun ErrorMessage(message: String? = null, throwable: Throwable? = null): ErrorMessage = object : ErrorMessage { 9 | override val message = message 10 | override val throwable = throwable 11 | 12 | override fun toString(): String { 13 | return "ErrorMessage(message=$message, throwable=$throwable)" 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /app/core/core-common-public/src/main/kotlin/com/hedvig/android/core/common/di/CoreCommonModule.kt: -------------------------------------------------------------------------------- 1 | package com.hedvig.android.core.common.di 2 | 3 | import com.hedvig.android.core.common.ApplicationScope 4 | import kotlin.coroutines.CoroutineContext 5 | import kotlinx.coroutines.Dispatchers 6 | import org.koin.dsl.module 7 | 8 | val coreCommonModule = module { 9 | single { ApplicationScope() } 10 | single(ioDispatcherQualifier) { Dispatchers.IO } 11 | } 12 | -------------------------------------------------------------------------------- /app/core/core-common-test/build.gradle.kts: -------------------------------------------------------------------------------- 1 | plugins { 2 | id("hedvig.gradle.plugin") 3 | id("hedvig.kotlin.library") 4 | } 5 | 6 | dependencies { 7 | api(libs.assertK) 8 | api(libs.junit) 9 | 10 | implementation(libs.arrow.core) 11 | implementation(libs.coroutines.test) 12 | } 13 | -------------------------------------------------------------------------------- /app/core/core-datastore-public/build.gradle.kts: -------------------------------------------------------------------------------- 1 | plugins { 2 | id("hedvig.gradle.plugin") 3 | id("hedvig.kotlin.library") 4 | } 5 | 6 | dependencies { 7 | api(libs.androidx.datastore.core) 8 | api(libs.androidx.datastore.preferencesCore) 9 | 10 | implementation(libs.coroutines.core) 11 | implementation(libs.koin.core) 12 | implementation(projects.coreCommonPublic) 13 | } 14 | -------------------------------------------------------------------------------- /app/core/core-datastore-test/build.gradle.kts: -------------------------------------------------------------------------------- 1 | plugins { 2 | id("hedvig.gradle.plugin") 3 | id("hedvig.kotlin.library") 4 | } 5 | 6 | dependencies { 7 | implementation(libs.androidx.datastore.core) 8 | implementation(libs.androidx.datastore.preferencesCore) 9 | implementation(libs.coroutines.core) 10 | implementation(libs.coroutines.test) 11 | implementation(projects.coreDatastorePublic) 12 | } 13 | -------------------------------------------------------------------------------- /app/core/core-demo-mode/build.gradle.kts: -------------------------------------------------------------------------------- 1 | plugins { 2 | id("hedvig.gradle.plugin") 3 | id("hedvig.kotlin.library") 4 | } 5 | 6 | dependencies { 7 | implementation(libs.androidx.datastore.core) 8 | implementation(libs.androidx.datastore.preferencesCore) 9 | implementation(libs.coroutines.core) 10 | implementation(libs.koin.core) 11 | implementation(projects.authEventCore) 12 | } 13 | -------------------------------------------------------------------------------- /app/core/core-demo-mode/src/main/kotlin/com/hedvig/android/core/demomode/DemoAuthEventListener.kt: -------------------------------------------------------------------------------- 1 | package com.hedvig.android.core.demomode 2 | 3 | import com.hedvig.android.auth.event.AuthEventListener 4 | 5 | internal class DemoAuthEventListener( 6 | private val demoManager: DemoManager, 7 | ) : AuthEventListener { 8 | override suspend fun loggedOut() { 9 | demoManager.setDemoMode(false) 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /app/core/core-demo-mode/src/main/kotlin/com/hedvig/android/core/demomode/ProdOrDemoProvider.kt: -------------------------------------------------------------------------------- 1 | package com.hedvig.android.core.demomode 2 | 3 | import kotlinx.coroutines.flow.first 4 | 5 | interface ProdOrDemoProvider : Provider { 6 | val demoManager: DemoManager 7 | val demoImpl: T 8 | val prodImpl: T 9 | 10 | override suspend fun provide(): T { 11 | return if (demoManager.isDemoMode().first()) { 12 | demoImpl 13 | } else { 14 | prodImpl 15 | } 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /app/core/core-demo-mode/src/main/kotlin/com/hedvig/android/core/demomode/Provider.kt: -------------------------------------------------------------------------------- 1 | package com.hedvig.android.core.demomode 2 | 3 | fun interface Provider { 4 | suspend fun provide(): T 5 | } 6 | -------------------------------------------------------------------------------- /app/core/core-file-upload/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /app/core/core-icons/README.md: -------------------------------------------------------------------------------- 1 | ## core-icons 2 | 3 | All the icons from the new design system, usable as composable ImageVectors. 4 | Just like `androidx.compose.material:material-icons-extended` does -------------------------------------------------------------------------------- /app/core/core-icons/build.gradle.kts: -------------------------------------------------------------------------------- 1 | plugins { 2 | id("hedvig.gradle.plugin") 3 | id("hedvig.android.library") 4 | } 5 | 6 | hedvig { 7 | compose() 8 | } 9 | 10 | dependencies { 11 | implementation(libs.androidx.compose.materialIconsCore) 12 | implementation(libs.androidx.compose.uiCore) 13 | } 14 | -------------------------------------------------------------------------------- /app/core/core-icons/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /app/core/core-icons/src/main/kotlin/com/hedvig/android/core/icons/HedvigIcons.kt: -------------------------------------------------------------------------------- 1 | package com.hedvig.android.core.icons 2 | 3 | import androidx.compose.material.icons.Icons 4 | 5 | @Suppress("UnusedReceiverParameter") 6 | val Icons.Hedvig: HedvigIcons 7 | get() = HedvigIcons 8 | 9 | object HedvigIcons 10 | -------------------------------------------------------------------------------- /app/core/core-markdown/build.gradle.kts: -------------------------------------------------------------------------------- 1 | plugins { 2 | id("hedvig.gradle.plugin") 3 | id("hedvig.kotlin.library") 4 | } 5 | -------------------------------------------------------------------------------- /app/core/core-markdown/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /app/core/core-markdown/src/main/kotlin/com/hedvig/android/core/markdown/MarkdownString.kt: -------------------------------------------------------------------------------- 1 | package com.hedvig.android.core.markdown 2 | 3 | @JvmInline 4 | value class MarkdownString(val string: String) 5 | -------------------------------------------------------------------------------- /app/core/core-resources/.gitignore: -------------------------------------------------------------------------------- 1 | #Generated from `./gradlew downloadStrings` therefore ignored 2 | src/main/res/**/strings.xml -------------------------------------------------------------------------------- /app/core/core-resources/README.md: -------------------------------------------------------------------------------- 1 | ## core-resources 2 | 3 | Module to contain the strings generated from `./gradlew downloadStrings` 4 | 5 | Exists since we're automatically getting the strings from lokalise, and they need to be shared across all modules 6 | which may want to access them. This should depend on no other modules and have all modules which need access to string 7 | resources depend on it. 8 | -------------------------------------------------------------------------------- /app/core/core-resources/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | -------------------------------------------------------------------------------- /app/core/core-resources/src/main/res/drawable-mdpi/pillow_hedvig.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HedvigInsurance/android/1aa395f47782a3b094129c5c23eee6ec6f9c94a7/app/core/core-resources/src/main/res/drawable-mdpi/pillow_hedvig.png -------------------------------------------------------------------------------- /app/core/core-resources/src/main/res/drawable-night-mdpi/pillow_hedvig.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HedvigInsurance/android/1aa395f47782a3b094129c5c23eee6ec6f9c94a7/app/core/core-resources/src/main/res/drawable-night-mdpi/pillow_hedvig.png -------------------------------------------------------------------------------- /app/core/core-resources/src/main/res/font/hedvig_letters_small.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HedvigInsurance/android/1aa395f47782a3b094129c5c23eee6ec6f9c94a7/app/core/core-resources/src/main/res/font/hedvig_letters_small.otf -------------------------------------------------------------------------------- /app/core/core-resources/src/main/res/font/hedvig_letters_standard.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HedvigInsurance/android/1aa395f47782a3b094129c5c23eee6ec6f9c94a7/app/core/core-resources/src/main/res/font/hedvig_letters_standard.otf -------------------------------------------------------------------------------- /app/core/core-resources/src/main/res/values-night/colors.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | #fafafa 4 | -------------------------------------------------------------------------------- /app/core/core-resources/src/main/res/values/colors.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | #121212 4 | -------------------------------------------------------------------------------- /app/core/core-resources/src/main/res/values/ids.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /app/core/core-resources/src/main/res/values/static_strings.xml: -------------------------------------------------------------------------------- 1 | 2 | Svenska 3 | English 4 | 5 | -------------------------------------------------------------------------------- /app/core/core-retrofit/build.gradle.kts: -------------------------------------------------------------------------------- 1 | plugins { 2 | id("hedvig.gradle.plugin") 3 | id("hedvig.kotlin.library") 4 | } 5 | 6 | dependencies { 7 | api(libs.retrofitArrow) 8 | api(projects.coreCommonPublic) 9 | } 10 | -------------------------------------------------------------------------------- /app/core/core-ui-data/build.gradle.kts: -------------------------------------------------------------------------------- 1 | plugins { 2 | id("hedvig.gradle.plugin") 3 | id("hedvig.kotlin.library") 4 | } 5 | 6 | hedvig { 7 | serialization() 8 | compose() 9 | } 10 | 11 | dependencies { 12 | implementation(libs.androidx.compose.runtime) 13 | implementation(libs.kotlinx.serialization.core) 14 | implementation(projects.apolloOctopusPublic) 15 | } 16 | -------------------------------------------------------------------------------- /app/core/core-ui-data/src/main/kotlin/com/hedvig/android/core/uidata/UiFile.kt: -------------------------------------------------------------------------------- 1 | package com.hedvig.android.core.uidata 2 | 3 | import kotlinx.serialization.Serializable 4 | 5 | @Serializable 6 | data class UiFile( 7 | val name: String, 8 | val localPath: String?, 9 | val url: String?, 10 | val mimeType: String, 11 | val id: String, 12 | ) 13 | -------------------------------------------------------------------------------- /app/data/data-addons/src/main/graphql/TravelAddonBannerQuery.graphql: -------------------------------------------------------------------------------- 1 | query TravelAddonBanner($flow: UpsellTravelAddonFlow!) { 2 | currentMember { 3 | upsellTravelAddonBanner (flow: $flow) { 4 | badges 5 | contractIds 6 | descriptionDisplayName 7 | titleDisplayName 8 | } 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /app/data/data-addons/src/main/kotlin/com/hedvig/android/data/addons/data/GetTravelAddonBannerInfoUseCaseProvider.kt: -------------------------------------------------------------------------------- 1 | package com.hedvig.android.data.addons.data 2 | 3 | import com.hedvig.android.core.demomode.DemoManager 4 | import com.hedvig.android.core.demomode.ProdOrDemoProvider 5 | 6 | class GetTravelAddonBannerInfoUseCaseProvider( 7 | override val demoManager: DemoManager, 8 | override val demoImpl: GetTravelAddonBannerInfoUseCase, 9 | override val prodImpl: GetTravelAddonBannerInfoUseCase, 10 | ) : ProdOrDemoProvider 11 | -------------------------------------------------------------------------------- /app/data/data-changetier/src/main/graphql/DeductibleFragment.graphql: -------------------------------------------------------------------------------- 1 | fragment DeductibleFragment on Deductible { 2 | amount { 3 | ...MoneyFragment 4 | } 5 | displayText 6 | percentage 7 | } 8 | -------------------------------------------------------------------------------- /app/data/data-changetier/src/main/graphql/MutationCommitChangeTierDeductible.graphql: -------------------------------------------------------------------------------- 1 | mutation ChangeTierDeductibleCommitIntent($quoteId: ID!) { 2 | changeTierDeductibleCommitIntent(input: {quoteId: $quoteId}) { 3 | userError { 4 | message 5 | } 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /app/data/data-changetier/src/main/kotlin/com/hedvig/android/data/changetier/data/TierConstants.kt: -------------------------------------------------------------------------------- 1 | package com.hedvig.android.data.changetier.data 2 | 3 | internal object TierConstants { 4 | val CURRENT_ID = "Agreement_to_change_ID" 5 | } 6 | -------------------------------------------------------------------------------- /app/data/data-chat/src/main/kotlin/com/hedvig/android/data/chat/database/RemoteKeyEntity.kt: -------------------------------------------------------------------------------- 1 | package com.hedvig.android.data.chat.database 2 | 3 | import androidx.room.Entity 4 | import androidx.room.PrimaryKey 5 | import com.benasher44.uuid.Uuid 6 | 7 | @Entity(tableName = "remote_keys") 8 | data class RemoteKeyEntity( 9 | @PrimaryKey 10 | val conversationId: Uuid, 11 | val olderToken: String?, 12 | val newerToken: String?, 13 | ) 14 | -------------------------------------------------------------------------------- /app/data/data-chat/src/main/kotlin/com/hedvig/android/data/chat/database/converter/InstantConverter.kt: -------------------------------------------------------------------------------- 1 | package com.hedvig.android.data.chat.database.converter 2 | 3 | import androidx.room.TypeConverter 4 | import kotlinx.datetime.Instant 5 | 6 | class InstantConverter { 7 | @TypeConverter 8 | fun parse(value: String): Instant { 9 | return Instant.parse(value) 10 | } 11 | 12 | @TypeConverter 13 | fun toString(value: Instant): String { 14 | return value.toString() 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /app/data/data-chat/src/main/kotlin/com/hedvig/android/data/chat/database/converter/UuidConverter.kt: -------------------------------------------------------------------------------- 1 | package com.hedvig.android.data.chat.database.converter 2 | 3 | import androidx.room.TypeConverter 4 | import com.benasher44.uuid.Uuid 5 | 6 | class UuidConverter { 7 | @TypeConverter 8 | fun parse(value: String): Uuid { 9 | return Uuid.fromString(value) 10 | } 11 | 12 | @TypeConverter 13 | fun toString(value: Uuid): String { 14 | return value.toString() 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /app/data/data-claim-flow/src/main/graphql/FragmentAudioContentFragment.graphql: -------------------------------------------------------------------------------- 1 | fragment AudioContentFragment on FlowClaimAudioContent { 2 | audioUrl 3 | signedUrl 4 | } 5 | -------------------------------------------------------------------------------- /app/data/data-claim-flow/src/main/graphql/FragmentCheckoutMethodFragment.graphql: -------------------------------------------------------------------------------- 1 | fragment CheckoutMethodFragment on FlowClaimCheckoutMethod { 2 | id 3 | ...AutomaticAutogiroPayoutFragment 4 | } 5 | 6 | fragment AutomaticAutogiroPayoutFragment on FlowClaimAutomaticAutogiroPayout { 7 | id 8 | displayName 9 | amount { 10 | ...MoneyFragment 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /app/data/data-claim-flow/src/main/graphql/MutationFlowClaimAudioRecordingNext.graphql: -------------------------------------------------------------------------------- 1 | mutation FlowClaimAudioRecordingNext($audioUrl: Url, $freeText: String, $context: FlowContext!) { 2 | flowClaimAudioRecordingNext(input: { audioUrl: $audioUrl, freeText: $freeText }, context: $context) { 3 | id 4 | context 5 | ...ClaimFlowStepFragment 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /app/data/data-claim-flow/src/main/graphql/MutationFlowClaimConfirmEmergency.graphql: -------------------------------------------------------------------------------- 1 | mutation FlowClaimConfirmEmergency($isUrgentEmergency: Boolean!, $context: FlowContext!) { 2 | flowClaimConfirmEmergencyNext(input: { confirmEmergency: $isUrgentEmergency }, context: $context) { 3 | id 4 | context 5 | ...ClaimFlowStepFragment 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /app/data/data-claim-flow/src/main/graphql/MutationFlowClaimContractNext.graphql: -------------------------------------------------------------------------------- 1 | mutation FlowClaimContractNext($contractId: UUID, $context: FlowContext!) { 2 | flowClaimContractSelectNext(input: { contractId: $contractId }, context: $context) { 3 | id 4 | context 5 | ...ClaimFlowStepFragment 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /app/data/data-claim-flow/src/main/graphql/MutationFlowClaimDateOfOccurrenceNext.graphql: -------------------------------------------------------------------------------- 1 | mutation FlowClaimDateOfOccurrenceNext($dateOfOccurrence: Date, $context: FlowContext!) { 2 | flowClaimDateOfOccurrenceNext(input: { dateOfOccurrence: $dateOfOccurrence }, context: $context) { 3 | id 4 | context 5 | ...ClaimFlowStepFragment 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /app/data/data-claim-flow/src/main/graphql/MutationFlowClaimDateOfOccurrencePlusLocationNext.graphql: -------------------------------------------------------------------------------- 1 | mutation FlowClaimDateOfOccurrencePlusLocationNext( 2 | $dateOfOccurrence: Date, 3 | $location: ID, 4 | $context: FlowContext! 5 | ) { 6 | flowClaimDateOfOccurrencePlusLocationNext( 7 | input: { 8 | dateOfOccurrence: $dateOfOccurrence, 9 | location: $location 10 | }, 11 | context: $context 12 | ) { 13 | id 14 | context 15 | ...ClaimFlowStepFragment 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /app/data/data-claim-flow/src/main/graphql/MutationFlowClaimFileUploadNext.graphql: -------------------------------------------------------------------------------- 1 | mutation FlowClaimFileUploadNext($input: FlowClaimFileUploadInput!, $context: FlowContext!) { 2 | flowClaimFileUploadNext(input: $input, context: $context) { 3 | id 4 | context 5 | ...ClaimFlowStepFragment 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /app/data/data-claim-flow/src/main/graphql/MutationFlowClaimLocationNext.graphql: -------------------------------------------------------------------------------- 1 | mutation FlowClaimLocationNext($location: ID, $context: FlowContext!) { 2 | flowClaimLocationNext(input: { location: $location }, context: $context) { 3 | id 4 | context 5 | ...ClaimFlowStepFragment 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /app/data/data-claim-flow/src/main/graphql/MutationFlowClaimPhoneNumberNext.graphql: -------------------------------------------------------------------------------- 1 | mutation FlowClaimPhoneNumberNext($phoneNumber: String!, $context: FlowContext!) { 2 | flowClaimPhoneNumberNext(input: { phoneNumber: $phoneNumber }, context: $context) { 3 | id 4 | context 5 | ...ClaimFlowStepFragment 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /app/data/data-claim-flow/src/main/graphql/MutationFlowClaimSingleItemCheckoutNext.graphql: -------------------------------------------------------------------------------- 1 | mutation FlowClaimSingleItemCheckoutNext($amount: Float!, $context: FlowContext!) { 2 | flowClaimSingleItemCheckoutNext(input: { automaticAutogiro: { amount: $amount } }, context: $context) { 3 | id 4 | context 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /app/data/data-claim-flow/src/main/graphql/MutationFlowClaimSingleItemNext.graphql: -------------------------------------------------------------------------------- 1 | mutation FlowClaimSingleItemNext( 2 | $input: FlowClaimSingleItemInput!, 3 | $context: FlowContext! 4 | ) { 5 | flowClaimSingleItemNext(input: $input, context: $context) { 6 | id 7 | context 8 | ...ClaimFlowStepFragment 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /app/data/data-claim-flow/src/main/graphql/MutationFlowClaimStart.graphql: -------------------------------------------------------------------------------- 1 | mutation FlowClaimStart($entrypointId: ID, $entryPointOptionId: ID, $supportedSteps: [ID!]) { 2 | flowClaimStart(input: { entrypointId: $entrypointId, entrypointOptionId: $entryPointOptionId, supportedSteps: $supportedSteps }, context: null) { 3 | id 4 | context 5 | ...ClaimFlowStepFragment 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /app/data/data-claim-flow/src/main/graphql/MutationFlowClaimSummaryNext.graphql: -------------------------------------------------------------------------------- 1 | mutation FlowClaimSummaryNext($input: FlowClaimSummaryInput!, $context: FlowContext!) { 2 | flowClaimSummaryNext(input: $input, context: $context) { 3 | id 4 | context 5 | ...ClaimFlowStepFragment 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /app/data/data-claim-flow/src/main/graphql/triaging/FragmentEntryPointFragment.graphql: -------------------------------------------------------------------------------- 1 | fragment EntryPoint on Entrypoint { 2 | id 3 | displayName 4 | options { 5 | id 6 | displayName 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /app/data/data-claim-flow/src/main/graphql/triaging/QueryEntrypointGroups.graphql: -------------------------------------------------------------------------------- 1 | query EntryPointGroups { 2 | entrypointGroups(type: CLAIM) { 3 | id 4 | displayName 5 | entrypoints { 6 | ...EntryPoint 7 | } 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /app/data/data-claim-flow/src/main/kotlin/com/hedvig/android/data/claimflow/model/AudioUrl.kt: -------------------------------------------------------------------------------- 1 | package com.hedvig.android.data.claimflow.model 2 | 3 | import kotlinx.serialization.Serializable 4 | 5 | @Serializable 6 | @JvmInline 7 | value class AudioUrl(val value: String) 8 | -------------------------------------------------------------------------------- /app/data/data-claim-flow/src/main/kotlin/com/hedvig/android/data/claimflow/model/FlowId.kt: -------------------------------------------------------------------------------- 1 | package com.hedvig.android.data.claimflow.model 2 | 3 | import kotlinx.serialization.Serializable 4 | 5 | @Serializable 6 | @JvmInline 7 | value class FlowId(val value: String) 8 | -------------------------------------------------------------------------------- /app/data/data-claim-triaging/build.gradle.kts: -------------------------------------------------------------------------------- 1 | plugins { 2 | id("hedvig.gradle.plugin") 3 | id("hedvig.kotlin.library") 4 | } 5 | 6 | hedvig { 7 | serialization() 8 | } 9 | 10 | dependencies { 11 | implementation(libs.kotlinx.serialization.core) 12 | implementation(projects.apolloOctopusPublic) 13 | } 14 | -------------------------------------------------------------------------------- /app/data/data-claim-triaging/src/main/kotlin/com/hedvig/android/data/claimtriaging/ClaimGroup.kt: -------------------------------------------------------------------------------- 1 | package com.hedvig.android.data.claimtriaging 2 | 3 | import kotlinx.serialization.Serializable 4 | 5 | data class ClaimGroup( 6 | val id: ClaimGroupId, 7 | val displayName: String, 8 | val entryPoints: List, 9 | ) 10 | 11 | @Serializable 12 | @JvmInline 13 | value class ClaimGroupId(val id: String) 14 | -------------------------------------------------------------------------------- /app/data/data-contract/data-contract-android/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /app/data/data-contract/data-contract-android/build.gradle.kts: -------------------------------------------------------------------------------- 1 | plugins { 2 | id("hedvig.gradle.plugin") 3 | id("hedvig.android.library") 4 | } 5 | 6 | hedvig { 7 | androidResources() 8 | } 9 | 10 | dependencies { 11 | implementation(projects.coreResources) 12 | implementation(projects.dataContractPublic) 13 | } 14 | -------------------------------------------------------------------------------- /app/data/data-contract/data-contract-android/src/main/res/drawable-nodpi/gradient_accident.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HedvigInsurance/android/1aa395f47782a3b094129c5c23eee6ec6f9c94a7/app/data/data-contract/data-contract-android/src/main/res/drawable-nodpi/gradient_accident.webp -------------------------------------------------------------------------------- /app/data/data-contract/data-contract-android/src/main/res/drawable-nodpi/gradient_car.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HedvigInsurance/android/1aa395f47782a3b094129c5c23eee6ec6f9c94a7/app/data/data-contract/data-contract-android/src/main/res/drawable-nodpi/gradient_car.webp -------------------------------------------------------------------------------- /app/data/data-contract/data-contract-android/src/main/res/drawable-nodpi/gradient_cat.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HedvigInsurance/android/1aa395f47782a3b094129c5c23eee6ec6f9c94a7/app/data/data-contract/data-contract-android/src/main/res/drawable-nodpi/gradient_cat.webp -------------------------------------------------------------------------------- /app/data/data-contract/data-contract-android/src/main/res/drawable-nodpi/gradient_dog.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HedvigInsurance/android/1aa395f47782a3b094129c5c23eee6ec6f9c94a7/app/data/data-contract/data-contract-android/src/main/res/drawable-nodpi/gradient_dog.webp -------------------------------------------------------------------------------- /app/data/data-contract/data-contract-android/src/main/res/drawable-nodpi/gradient_homeowner.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HedvigInsurance/android/1aa395f47782a3b094129c5c23eee6ec6f9c94a7/app/data/data-contract/data-contract-android/src/main/res/drawable-nodpi/gradient_homeowner.webp -------------------------------------------------------------------------------- /app/data/data-contract/data-contract-android/src/main/res/drawable-nodpi/gradient_rental.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HedvigInsurance/android/1aa395f47782a3b094129c5c23eee6ec6f9c94a7/app/data/data-contract/data-contract-android/src/main/res/drawable-nodpi/gradient_rental.webp -------------------------------------------------------------------------------- /app/data/data-contract/data-contract-android/src/main/res/drawable-nodpi/gradient_student.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HedvigInsurance/android/1aa395f47782a3b094129c5c23eee6ec6f9c94a7/app/data/data-contract/data-contract-android/src/main/res/drawable-nodpi/gradient_student.webp -------------------------------------------------------------------------------- /app/data/data-contract/data-contract-android/src/main/res/drawable-nodpi/gradient_villa.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HedvigInsurance/android/1aa395f47782a3b094129c5c23eee6ec6f9c94a7/app/data/data-contract/data-contract-android/src/main/res/drawable-nodpi/gradient_villa.webp -------------------------------------------------------------------------------- /app/data/data-contract/data-contract-android/src/main/res/drawable-nodpi/ic_pillow_accident.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HedvigInsurance/android/1aa395f47782a3b094129c5c23eee6ec6f9c94a7/app/data/data-contract/data-contract-android/src/main/res/drawable-nodpi/ic_pillow_accident.webp -------------------------------------------------------------------------------- /app/data/data-contract/data-contract-android/src/main/res/drawable-nodpi/ic_pillow_car.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HedvigInsurance/android/1aa395f47782a3b094129c5c23eee6ec6f9c94a7/app/data/data-contract/data-contract-android/src/main/res/drawable-nodpi/ic_pillow_car.webp -------------------------------------------------------------------------------- /app/data/data-contract/data-contract-android/src/main/res/drawable-nodpi/ic_pillow_cat.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HedvigInsurance/android/1aa395f47782a3b094129c5c23eee6ec6f9c94a7/app/data/data-contract/data-contract-android/src/main/res/drawable-nodpi/ic_pillow_cat.webp -------------------------------------------------------------------------------- /app/data/data-contract/data-contract-android/src/main/res/drawable-nodpi/ic_pillow_dog.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HedvigInsurance/android/1aa395f47782a3b094129c5c23eee6ec6f9c94a7/app/data/data-contract/data-contract-android/src/main/res/drawable-nodpi/ic_pillow_dog.webp -------------------------------------------------------------------------------- /app/data/data-contract/data-contract-android/src/main/res/drawable-nodpi/ic_pillow_home.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HedvigInsurance/android/1aa395f47782a3b094129c5c23eee6ec6f9c94a7/app/data/data-contract/data-contract-android/src/main/res/drawable-nodpi/ic_pillow_home.webp -------------------------------------------------------------------------------- /app/data/data-contract/data-contract-android/src/main/res/drawable-nodpi/ic_pillow_homeowner.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HedvigInsurance/android/1aa395f47782a3b094129c5c23eee6ec6f9c94a7/app/data/data-contract/data-contract-android/src/main/res/drawable-nodpi/ic_pillow_homeowner.webp -------------------------------------------------------------------------------- /app/data/data-contract/data-contract-android/src/main/res/drawable-nodpi/ic_pillow_pet.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HedvigInsurance/android/1aa395f47782a3b094129c5c23eee6ec6f9c94a7/app/data/data-contract/data-contract-android/src/main/res/drawable-nodpi/ic_pillow_pet.webp -------------------------------------------------------------------------------- /app/data/data-contract/data-contract-android/src/main/res/drawable-nodpi/ic_pillow_rental.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HedvigInsurance/android/1aa395f47782a3b094129c5c23eee6ec6f9c94a7/app/data/data-contract/data-contract-android/src/main/res/drawable-nodpi/ic_pillow_rental.webp -------------------------------------------------------------------------------- /app/data/data-contract/data-contract-android/src/main/res/drawable-nodpi/ic_pillow_student.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HedvigInsurance/android/1aa395f47782a3b094129c5c23eee6ec6f9c94a7/app/data/data-contract/data-contract-android/src/main/res/drawable-nodpi/ic_pillow_student.webp -------------------------------------------------------------------------------- /app/data/data-contract/data-contract-android/src/main/res/drawable-nodpi/ic_pillow_villa.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HedvigInsurance/android/1aa395f47782a3b094129c5c23eee6ec6f9c94a7/app/data/data-contract/data-contract-android/src/main/res/drawable-nodpi/ic_pillow_villa.webp -------------------------------------------------------------------------------- /app/data/data-contract/data-contract-public/build.gradle.kts: -------------------------------------------------------------------------------- 1 | plugins { 2 | id("hedvig.gradle.plugin") 3 | id("hedvig.kotlin.library") 4 | } 5 | 6 | hedvig { 7 | serialization() 8 | } 9 | -------------------------------------------------------------------------------- /app/data/data-contract/data-contract-public/src/main/kotlin/com/hedvig/android/data/contract/CrossSell.kt: -------------------------------------------------------------------------------- 1 | package com.hedvig.android.data.contract 2 | 3 | data class CrossSell( 4 | val id: String, 5 | val title: String, 6 | val subtitle: String, 7 | val storeUrl: String, 8 | val type: CrossSellType, 9 | ) { 10 | enum class CrossSellType { 11 | PET, 12 | HOME, 13 | ACCIDENT, 14 | CAR, 15 | UNKNOWN, 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /app/data/data-conversations/build.gradle.kts: -------------------------------------------------------------------------------- 1 | plugins { 2 | id("hedvig.gradle.plugin") 3 | id("hedvig.kotlin.library") 4 | } 5 | 6 | hedvig { 7 | apollo("octopus") 8 | } 9 | 10 | dependencies { 11 | implementation(libs.apollo.normalizedCache) 12 | implementation(libs.arrow.core) 13 | implementation(libs.koin.core) 14 | implementation(projects.apolloCore) 15 | implementation(projects.apolloOctopusPublic) 16 | } 17 | -------------------------------------------------------------------------------- /app/data/data-conversations/src/main/graphql/QueryCbmNumberOfChatMessages.graphql: -------------------------------------------------------------------------------- 1 | query CbmNumberOfChatMessages { 2 | currentMember { 3 | legacyConversation { 4 | messagePage(newerToken: null, olderToken: null) { 5 | messages { 6 | id 7 | sender 8 | } 9 | } 10 | } 11 | conversations { 12 | isOpen 13 | newestMessage { 14 | # noinspection ApolloUnusedField 15 | id 16 | } 17 | } 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /app/data/data-conversations/src/main/kotlin/com/hedvig/android/data/conversations/di/DataConversationsModule.kt: -------------------------------------------------------------------------------- 1 | package com.hedvig.android.data.conversations.di 2 | 3 | import com.apollographql.apollo.ApolloClient 4 | import com.hedvig.android.data.conversations.HasAnyActiveConversationUseCase 5 | import org.koin.dsl.module 6 | 7 | val dataConversationsModule = module { 8 | single { HasAnyActiveConversationUseCase(get()) } 9 | } 10 | -------------------------------------------------------------------------------- /app/data/data-cross-sell-after-claim-closed/build.gradle.kts: -------------------------------------------------------------------------------- 1 | plugins { 2 | id("hedvig.gradle.plugin") 3 | id("hedvig.kotlin.library") 4 | } 5 | 6 | hedvig { 7 | apollo("octopus") 8 | } 9 | 10 | dependencies { 11 | implementation(libs.arrow.core) 12 | implementation(libs.coroutines.core) 13 | implementation(libs.koin.core) 14 | implementation(projects.apolloCore) 15 | implementation(projects.apolloOctopusPublic) 16 | implementation(projects.coreCommonPublic) 17 | implementation(projects.dataCrossSellAfterFlow) 18 | } 19 | -------------------------------------------------------------------------------- /app/data/data-cross-sell-after-claim-closed/src/main/graphql/MutationClaimAcknowledgeClosedStatus.graphql: -------------------------------------------------------------------------------- 1 | mutation ClaimAcknowledgeClosedStatus($claimId: ID!) { 2 | claimAcknowledgeClosedStatus(id: $claimId) { 3 | userError { 4 | message 5 | } 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /app/data/data-cross-sell-after-flow/build.gradle.kts: -------------------------------------------------------------------------------- 1 | plugins { 2 | id("hedvig.gradle.plugin") 3 | id("hedvig.kotlin.library") 4 | } 5 | 6 | dependencies { 7 | implementation(libs.arrow.core) 8 | implementation(libs.coroutines.core) 9 | implementation(libs.koin.core) 10 | implementation(projects.coreCommonPublic) 11 | } 12 | -------------------------------------------------------------------------------- /app/data/data-cross-sell-after-flow/src/main/kotlin/com/hedvig/android/data/cross/sell/after/flow/di/DataCrossSellAfterFlowModule.kt: -------------------------------------------------------------------------------- 1 | package com.hedvig.android.data.cross.sell.after.flow.di 2 | 3 | import com.hedvig.android.data.cross.sell.after.flow.CrossSellAfterFlowRepository 4 | import com.hedvig.android.data.cross.sell.after.flow.CrossSellAfterFlowRepositoryImpl 5 | import org.koin.dsl.module 6 | 7 | val dataCrossSellAfterFlowModule = module { 8 | single { 9 | CrossSellAfterFlowRepositoryImpl() 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /app/data/data-display-items/build.gradle.kts: -------------------------------------------------------------------------------- 1 | plugins { 2 | id("hedvig.gradle.plugin") 3 | id("hedvig.kotlin.library") 4 | } 5 | 6 | dependencies { 7 | implementation(libs.kotlinx.datetime) 8 | } 9 | -------------------------------------------------------------------------------- /app/data/data-paying-member/build.gradle.kts: -------------------------------------------------------------------------------- 1 | plugins { 2 | id("hedvig.gradle.plugin") 3 | id("hedvig.kotlin.library") 4 | } 5 | 6 | hedvig { 7 | apollo("octopus") 8 | } 9 | 10 | dependencies { 11 | implementation(libs.arrow.core) 12 | implementation(libs.koin.core) 13 | implementation(projects.apolloCore) 14 | implementation(projects.apolloOctopusPublic) 15 | implementation(projects.coreCommonPublic) 16 | implementation(projects.coreDemoMode) 17 | implementation(projects.dataContractPublic) 18 | } 19 | -------------------------------------------------------------------------------- /app/data/data-paying-member/src/main/graphql/ActiveInsuranceContractTypes.graphql: -------------------------------------------------------------------------------- 1 | query ActiveInsuranceContractTypes { 2 | currentMember { 3 | activeContracts { 4 | currentAgreement { 5 | productVariant { 6 | typeOfContract 7 | } 8 | } 9 | } 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /app/data/data-paying-member/src/main/kotlin/com/hedvig/android/data/paying/member/GetOnlyHasNonPayingContractsUseCase.kt: -------------------------------------------------------------------------------- 1 | package com.hedvig.android.data.paying.member 2 | 3 | import arrow.core.Either 4 | import com.hedvig.android.core.common.ErrorMessage 5 | 6 | /** 7 | * Returns true when all the member's active contracts are non-paying contracts. 8 | */ 9 | interface GetOnlyHasNonPayingContractsUseCase { 10 | suspend fun invoke(): Either 11 | } 12 | -------------------------------------------------------------------------------- /app/data/data-paying-member/src/main/kotlin/com/hedvig/android/data/paying/member/GetOnlyHasNonPayingContractsUseCaseDemo.kt: -------------------------------------------------------------------------------- 1 | package com.hedvig.android.data.paying.member 2 | 3 | import arrow.core.Either 4 | import arrow.core.right 5 | import com.hedvig.android.core.common.ErrorMessage 6 | 7 | internal class GetOnlyHasNonPayingContractsUseCaseDemo : GetOnlyHasNonPayingContractsUseCase { 8 | override suspend fun invoke(): Either { 9 | return false.right() 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /app/data/data-product-variant/data-product-variant-android/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /app/data/data-product-variant/data-product-variant-android/build.gradle.kts: -------------------------------------------------------------------------------- 1 | plugins { 2 | id("hedvig.gradle.plugin") 3 | id("hedvig.android.library") 4 | } 5 | 6 | dependencies { 7 | implementation(projects.apolloOctopusPublic) 8 | implementation(projects.coreResources) 9 | implementation(projects.dataContractAndroid) 10 | implementation(projects.dataContractPublic) 11 | implementation(projects.dataProductVariantPublic) 12 | } 13 | -------------------------------------------------------------------------------- /app/data/data-product-variant/data-product-variant-public/build.gradle.kts: -------------------------------------------------------------------------------- 1 | plugins { 2 | id("hedvig.gradle.plugin") 3 | id("hedvig.kotlin.library") 4 | } 5 | 6 | hedvig { 7 | serialization() 8 | } 9 | 10 | dependencies { 11 | api(projects.dataContractPublic) 12 | implementation(libs.kotlinx.serialization.core) 13 | implementation(projects.apolloOctopusPublic) 14 | } 15 | -------------------------------------------------------------------------------- /app/data/data-settings-datastore/data-settings-datastore-public/build.gradle.kts: -------------------------------------------------------------------------------- 1 | plugins { 2 | id("hedvig.gradle.plugin") 3 | id("hedvig.kotlin.library") 4 | } 5 | 6 | dependencies { 7 | implementation(libs.androidx.datastore.core) 8 | implementation(libs.androidx.datastore.preferencesCore) 9 | implementation(libs.coroutines.core) 10 | implementation(libs.koin.core) 11 | implementation(projects.theme) 12 | } 13 | -------------------------------------------------------------------------------- /app/data/data-settings-datastore/data-settings-datastore-test/build.gradle.kts: -------------------------------------------------------------------------------- 1 | plugins { 2 | id("hedvig.gradle.plugin") 3 | id("hedvig.kotlin.library") 4 | } 5 | 6 | dependencies { 7 | implementation(libs.coroutines.core) 8 | implementation(libs.turbine) 9 | implementation(projects.dataSettingsDatastorePublic) 10 | implementation(projects.theme) 11 | } 12 | -------------------------------------------------------------------------------- /app/data/data-termination/src/main/graphql/QueryContractsToTerminate.graphql: -------------------------------------------------------------------------------- 1 | query ContractsToTerminate { 2 | currentMember { 3 | activeContracts { 4 | id 5 | exposureDisplayName 6 | terminationDate 7 | currentAgreement { 8 | productVariant { 9 | displayName 10 | typeOfContract 11 | } 12 | } 13 | } 14 | pendingContracts { 15 | productVariant { 16 | displayName 17 | typeOfContract 18 | } 19 | id 20 | exposureDisplayName 21 | } 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /app/database/database-android/build.gradle.kts: -------------------------------------------------------------------------------- 1 | plugins { 2 | id("hedvig.gradle.plugin") 3 | id("hedvig.android.library") 4 | } 5 | 6 | dependencies { 7 | implementation(libs.koin.core) 8 | implementation(libs.room.runtime) 9 | implementation(projects.coreCommonPublic) 10 | implementation(projects.databaseCore) 11 | } 12 | -------------------------------------------------------------------------------- /app/database/database-core/build.gradle.kts: -------------------------------------------------------------------------------- 1 | plugins { 2 | id("hedvig.gradle.plugin") 3 | id("hedvig.kotlin.library") 4 | } 5 | 6 | hedvig { 7 | room { resolve("app/database/schemas") } 8 | } 9 | 10 | dependencies { 11 | implementation(libs.coroutines.core) 12 | implementation(libs.koin.core) 13 | implementation(libs.kotlinx.datetime) 14 | implementation(libs.room.paging) 15 | implementation(libs.room.runtime) 16 | implementation(projects.dataChat) 17 | } 18 | -------------------------------------------------------------------------------- /app/database/database-test/build.gradle.kts: -------------------------------------------------------------------------------- 1 | plugins { 2 | id("hedvig.gradle.plugin") 3 | id("hedvig.kotlin.library") 4 | } 5 | 6 | dependencies { 7 | api(libs.junit) 8 | api(libs.room.runtime) 9 | api(libs.sqlite.bundled) 10 | } 11 | -------------------------------------------------------------------------------- /app/datadog/datadog-android/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /app/datadog/datadog-core/build.gradle.kts: -------------------------------------------------------------------------------- 1 | plugins { 2 | id("hedvig.gradle.plugin") 3 | id("hedvig.kotlin.library") 4 | } 5 | 6 | dependencies { 7 | implementation(libs.coroutines.core) 8 | } 9 | -------------------------------------------------------------------------------- /app/datadog/datadog-core/src/main/kotlin/com/hedvig/android/datadog/core/attributestracking/DatadogAttributeProvider.kt: -------------------------------------------------------------------------------- 1 | package com.hedvig.android.datadog.core.attributestracking 2 | 3 | import kotlinx.coroutines.flow.Flow 4 | 5 | interface DatadogAttributeProvider { 6 | /** 7 | * The implementation must return something, even null, immediatelly. To avoid blocking the rest of the attributes 8 | * from being read in the [combine] which combines all of them together 9 | */ 10 | fun provide(): Flow> 11 | } 12 | -------------------------------------------------------------------------------- /app/datadog/datadog-core/src/main/kotlin/com/hedvig/android/datadog/core/attributestracking/DatadogMemberIdProvider.kt: -------------------------------------------------------------------------------- 1 | package com.hedvig.android.datadog.core.attributestracking 2 | 3 | import kotlinx.coroutines.flow.Flow 4 | 5 | interface DatadogMemberIdProvider { 6 | /** 7 | * The implementation must return something, even null, immediatelly. To avoid blocking the rest of the attributes 8 | * from being read in the [combine] which combines all of them together 9 | */ 10 | fun provide(): Flow> 11 | } 12 | -------------------------------------------------------------------------------- /app/datadog/datadog-demo-tracking/build.gradle.kts: -------------------------------------------------------------------------------- 1 | plugins { 2 | id("hedvig.gradle.plugin") 3 | id("hedvig.kotlin.library") 4 | } 5 | 6 | dependencies { 7 | implementation(libs.coroutines.core) 8 | implementation(libs.koin.core) 9 | implementation(projects.coreCommonPublic) 10 | implementation(projects.coreDemoMode) 11 | implementation(projects.datadogCore) 12 | implementation(projects.initializable) 13 | } 14 | -------------------------------------------------------------------------------- /app/design-system/design-system-api/build.gradle.kts: -------------------------------------------------------------------------------- 1 | plugins { 2 | id("hedvig.gradle.plugin") 3 | id("hedvig.kotlin.library") 4 | } 5 | 6 | dependencies { 7 | implementation(platform(libs.androidx.compose.bom)) 8 | implementation(libs.androidx.compose.runtime) 9 | implementation(libs.androidx.compose.material3) 10 | } 11 | -------------------------------------------------------------------------------- /app/design-system/design-system-hedvig/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /app/design-system/design-system-hedvig/src/main/kotlin/com/hedvig/android/design/system/hedvig/ContentColor.kt: -------------------------------------------------------------------------------- 1 | package com.hedvig.android.design.system.hedvig 2 | 3 | import androidx.compose.runtime.compositionLocalOf 4 | import androidx.compose.ui.graphics.Color 5 | 6 | val LocalContentColor = compositionLocalOf { Color.Black } 7 | -------------------------------------------------------------------------------- /app/design-system/design-system-hedvig/src/main/kotlin/com/hedvig/android/design/system/hedvig/IconResource.kt: -------------------------------------------------------------------------------- 1 | package com.hedvig.android.design.system.hedvig 2 | 3 | import androidx.compose.ui.graphics.vector.ImageVector 4 | 5 | sealed interface IconResource { 6 | data class Vector(val imageVector: ImageVector) : IconResource 7 | 8 | data class Painter(val painterResId: Int) : IconResource 9 | } 10 | -------------------------------------------------------------------------------- /app/design-system/design-system-hedvig/src/main/kotlin/com/hedvig/android/design/system/hedvig/icon/HedvigIcons.kt: -------------------------------------------------------------------------------- 1 | package com.hedvig.android.design.system.hedvig.icon 2 | 3 | object HedvigIcons 4 | -------------------------------------------------------------------------------- /app/design-system/design-system-hedvig/src/main/kotlin/com/hedvig/android/design/system/hedvig/tokens/AnimationTokens.kt: -------------------------------------------------------------------------------- 1 | package com.hedvig.android.design.system.hedvig.tokens 2 | 3 | internal object AnimationTokens { 4 | const val fastAnimationDuration: Int = 200 5 | const val pulsatingAnimationDuration: Int = 200 6 | const val pulsatingAnimationDurationExit: Int = 800 7 | const val errorPulsatingDuration: Int = 400 8 | } 9 | -------------------------------------------------------------------------------- /app/design-system/design-system-hedvig/src/main/kotlin/com/hedvig/android/design/system/hedvig/tokens/ScaffoldTokens.kt: -------------------------------------------------------------------------------- 1 | package com.hedvig.android.design.system.hedvig.tokens 2 | 3 | internal object ScaffoldTokens { 4 | val BackgroundColor = ColorSchemeKeyTokens.BackgroundPrimary 5 | } 6 | -------------------------------------------------------------------------------- /app/design-system/design-system-hedvig/src/main/kotlin/com/hedvig/android/design/system/hedvig/tokens/ScrimTokens.kt: -------------------------------------------------------------------------------- 1 | package com.hedvig.android.design.system.hedvig.tokens 2 | 3 | internal object ScrimTokens { 4 | val ContainerColor = ColorSchemeKeyTokens.Scrim 5 | const val ContainerOpacity = 0.32f 6 | } 7 | -------------------------------------------------------------------------------- /app/design-system/design-system-hedvig/src/main/kotlin/com/hedvig/android/design/system/hedvig/tokens/ShapeKeyTokens.kt: -------------------------------------------------------------------------------- 1 | package com.hedvig.android.design.system.hedvig.tokens 2 | 3 | internal enum class ShapeKeyTokens { 4 | CornerXXLarge, 5 | CornerXLarge, 6 | CornerLarge, 7 | CornerMedium, 8 | CornerSmall, 9 | CornerXSmall, 10 | CornerNone, 11 | CornerXLargeTop, 12 | CornerXSmallTop, 13 | CornerXSmallBottom, 14 | } 15 | -------------------------------------------------------------------------------- /app/design-system/design-system-hedvig/src/main/kotlin/com/hedvig/android/design/system/hedvig/tokens/StateTokens.kt: -------------------------------------------------------------------------------- 1 | package com.hedvig.android.design.system.hedvig.tokens 2 | 3 | internal object StateTokens { 4 | const val DraggedStateLayerOpacity = 0.16f 5 | const val FocusStateLayerOpacity = 0.1f 6 | const val HoverStateLayerOpacity = 0.08f 7 | const val PressedStateLayerOpacity = 0.1f 8 | } 9 | -------------------------------------------------------------------------------- /app/design-system/design-system-hedvig/src/main/kotlin/com/hedvig/android/design/system/hedvig/tokens/TopAppBarTokens.kt: -------------------------------------------------------------------------------- 1 | package com.hedvig.android.design.system.hedvig.tokens 2 | 3 | import androidx.compose.ui.unit.dp 4 | 5 | internal object TopAppBarTokens { 6 | val ContainerColor = ColorSchemeKeyTokens.BackgroundPrimary 7 | val ContentColor = ColorSchemeKeyTokens.TextPrimary 8 | val ContainerHeight = 64.dp 9 | val ContentHorizontalPadding = 16.dp 10 | val IconTitleSpacerWidth = 12.dp 11 | val TextStyle = TypographyKeyTokens.HeadlineSmall 12 | } 13 | -------------------------------------------------------------------------------- /app/design-system/design-system-hedvig/src/main/kotlin/com/hedvig/android/design/system/hedvig/tokens/TypographyKeyTokens.kt: -------------------------------------------------------------------------------- 1 | package com.hedvig.android.design.system.hedvig.tokens 2 | 3 | internal enum class TypographyKeyTokens { 4 | BodyLarge, 5 | BodyMedium, 6 | BodySmall, 7 | DisplayLarge, 8 | DisplayMedium, 9 | DisplaySmall, 10 | HeadlineLarge, 11 | HeadlineMedium, 12 | HeadlineSmall, 13 | Label, 14 | FinePrint, 15 | } 16 | -------------------------------------------------------------------------------- /app/design-system/design-system-internals/build.gradle.kts: -------------------------------------------------------------------------------- 1 | plugins { 2 | id("hedvig.gradle.plugin") 3 | id("hedvig.android.library") 4 | } 5 | 6 | hedvig { 7 | compose() 8 | } 9 | 10 | dependencies { 11 | implementation(libs.androidx.compose.foundation) 12 | implementation(libs.androidx.compose.foundationLayout) 13 | implementation(libs.androidx.compose.material3) 14 | implementation(libs.androidx.compose.uiGraphics) 15 | implementation(projects.composeUi) 16 | implementation(projects.coreResources) 17 | implementation(projects.designSystemApi) 18 | } 19 | -------------------------------------------------------------------------------- /app/design-system/design-system-internals/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /app/feature/feature-addon-purchase/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /app/feature/feature-addon-purchase/src/main/graphql/InsurancesForTravelAddonQuery.graphql: -------------------------------------------------------------------------------- 1 | query InsurancesForTravelAddon { 2 | currentMember { 3 | activeContracts { 4 | id 5 | exposureDisplayName 6 | currentAgreement { 7 | productVariant { 8 | displayName 9 | typeOfContract 10 | } 11 | } 12 | } 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /app/feature/feature-addon-purchase/src/main/graphql/UpsellTravelAddonActivateMutation.graphql: -------------------------------------------------------------------------------- 1 | mutation UpsellTravelAddonActivate($addonId: ID!, $quoteId: ID!) { 2 | upsellTravelAddonActivate(addonId: $addonId, quoteId: $quoteId) { 3 | userError { 4 | message 5 | } 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /app/feature/feature-chat/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /app/feature/feature-chat/src/main/graphql/FragmentConversationInfo.graphql: -------------------------------------------------------------------------------- 1 | fragment ConversationInfo on Conversation { 2 | id 3 | createdAt 4 | isLegacy 5 | claim { 6 | id 7 | claimType 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /app/feature/feature-chat/src/main/graphql/MutationConversationSendMessage.graphql: -------------------------------------------------------------------------------- 1 | mutation ConversationSendMessage($conversationId: UUID!, $messageId: UUID!, $text: String, $fileUploadToken: String) { 2 | conversationSendMessage(input: {id: $conversationId, messageId: $messageId, text: $text, fileUploadToken: $fileUploadToken}) { 3 | message { 4 | ...ChatMessageFragment 5 | } 6 | userError { 7 | message 8 | } 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /app/feature/feature-chat/src/main/graphql/MutationConversationStart.graphql: -------------------------------------------------------------------------------- 1 | mutation ConversationStart($id: UUID!) { 2 | conversationStart(input: { id: $id }) { 3 | ...ConversationInfo 4 | } 5 | } 6 | -------------------------------------------------------------------------------- /app/feature/feature-chat/src/main/graphql/QueryConversationInfo.graphql: -------------------------------------------------------------------------------- 1 | query ConversationInfo($id: UUID!) { 2 | conversation(id: $id) { 3 | ...ConversationInfo 4 | } 5 | } 6 | -------------------------------------------------------------------------------- /app/feature/feature-chat/src/main/graphql/QueryConversationStatusMessage.graphql: -------------------------------------------------------------------------------- 1 | query ConversationStatusMessage($conversationId: UUID!) { 2 | conversation(id: $conversationId) { 3 | statusMessage 4 | isOpen 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /app/feature/feature-chat/src/main/kotlin/com/hedvig/android/feature/chat/data/GetCbmChatRepositoryProvider.kt: -------------------------------------------------------------------------------- 1 | package com.hedvig.android.feature.chat.data 2 | 3 | import com.hedvig.android.core.demomode.DemoManager 4 | import com.hedvig.android.core.demomode.ProdOrDemoProvider 5 | 6 | internal class GetCbmChatRepositoryProvider( 7 | override val demoManager: DemoManager, 8 | override val demoImpl: CbmChatRepository, 9 | override val prodImpl: CbmChatRepository, 10 | ) : ProdOrDemoProvider 11 | -------------------------------------------------------------------------------- /app/feature/feature-choose-tier/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /app/feature/feature-choose-tier/src/main/graphql/AgreementFragment.graphql: -------------------------------------------------------------------------------- 1 | fragment GeneralAgreementFragment on Agreement { 2 | displayItems { 3 | displaySubtitle 4 | displayTitle 5 | displayValue 6 | } 7 | premium { 8 | ...MoneyFragment 9 | } 10 | deductible { 11 | displayText 12 | percentage 13 | amount { 14 | ...MoneyFragment 15 | } 16 | } 17 | productVariant { 18 | ...ProductVariantFragment 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /app/feature/feature-choose-tier/src/main/graphql/CurrentContractQuery.graphql: -------------------------------------------------------------------------------- 1 | query CurrentContractsForTierChange { 2 | currentMember { 3 | activeContracts { 4 | id 5 | exposureDisplayName 6 | } 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /app/feature/feature-choose-tier/src/main/graphql/GetContractsEligibleForTierChangeQuery.graphql: -------------------------------------------------------------------------------- 1 | query ContractsEligibleForTierChange { 2 | currentMember { 3 | activeContracts { 4 | id 5 | supportsChangeTier 6 | exposureDisplayName 7 | currentAgreement { 8 | productVariant { 9 | ...ProductVariantFragment 10 | } 11 | } 12 | } 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /app/feature/feature-claim-details/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /app/feature/feature-claim-details/src/main/graphql/QueryClaims.graphql: -------------------------------------------------------------------------------- 1 | query Claims { 2 | currentMember { 3 | claims { 4 | ...ClaimFragment 5 | conversation { 6 | id 7 | unreadMessageCount 8 | } 9 | } 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /app/feature/feature-claim-triaging/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /app/feature/feature-connect-payment-trustly/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /app/feature/feature-connect-payment-trustly/src/main/graphql/InitiateTrustlyConnectPaymentSession.graphql: -------------------------------------------------------------------------------- 1 | mutation InitiateTrustlyConnectPaymentSession($successUrl: String!, $failureUrl: String!) { 2 | registerDirectDebit2(clientContext: { successUrl: $successUrl, failureUrl: $failureUrl }) { 3 | url 4 | orderId 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /app/feature/feature-cross-sell-sheet/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /app/feature/feature-cross-sell-sheet/src/main/graphql/QueryBottomSheetCrossSells.graphql: -------------------------------------------------------------------------------- 1 | query BottomSheetCrossSells { 2 | currentMember { 3 | crossSells { 4 | id 5 | title 6 | description 7 | storeUrl 8 | type 9 | } 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /app/feature/feature-delete-account/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /app/feature/feature-delete-account/src/main/graphql/MutationMemberDeletionRequest.graphql: -------------------------------------------------------------------------------- 1 | mutation MemberDeletionRequest { 2 | memberDeletionRequest { 3 | message 4 | } 5 | } 6 | -------------------------------------------------------------------------------- /app/feature/feature-delete-account/src/main/graphql/QueryDeleteAccountState.graphql: -------------------------------------------------------------------------------- 1 | query DeleteAccountState { 2 | currentMember { 3 | claims { 4 | status 5 | } 6 | activeContracts { 7 | # noinspection ApolloUnusedField 8 | __typename 9 | } 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /app/feature/feature-delete-account/src/main/kotlin/com/hedvig/android/feature/deleteaccount/navigation/DeleteAccountDestination.kt: -------------------------------------------------------------------------------- 1 | package com.hedvig.android.feature.deleteaccount.navigation 2 | 3 | import com.hedvig.android.navigation.common.Destination 4 | import kotlinx.serialization.Serializable 5 | 6 | @Serializable 7 | data object DeleteAccountDestination : Destination 8 | -------------------------------------------------------------------------------- /app/feature/feature-edit-coinsured/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /app/feature/feature-edit-coinsured/src/main/graphql/MutationCommitMidtermChange.graphql: -------------------------------------------------------------------------------- 1 | mutation CommitMidtermChange($intentId: ID!) { 2 | midtermChangeIntentCommit(intentId: $intentId) { 3 | intent { 4 | state 5 | activationDate 6 | } 7 | userError { 8 | message 9 | } 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /app/feature/feature-edit-coinsured/src/main/graphql/MutationCreateMidtermChange.graphql: -------------------------------------------------------------------------------- 1 | mutation CreateMidtermChange($contractId: ID!, $input: MidtermChangeIntentCreateInput!) { 2 | midtermChangeIntentCreate(contractId: $contractId, input: $input) { 3 | intent { 4 | id 5 | currentPremium { 6 | ...MoneyFragment 7 | } 8 | newPremium { 9 | ...MoneyFragment 10 | } 11 | activationDate 12 | } 13 | userError { 14 | message 15 | } 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /app/feature/feature-edit-coinsured/src/main/graphql/QueryCoInsured.graphql: -------------------------------------------------------------------------------- 1 | query CoInsured { 2 | currentMember { 3 | firstName 4 | lastName 5 | ssn 6 | activeContracts { 7 | id 8 | coInsured { 9 | firstName 10 | lastName 11 | birthdate 12 | ssn 13 | hasMissingInfo 14 | activatesOn 15 | terminatesOn 16 | } 17 | } 18 | } 19 | } 20 | 21 | -------------------------------------------------------------------------------- /app/feature/feature-edit-coinsured/src/main/graphql/QueryEligibleContractsForEditCoInsured.graphql: -------------------------------------------------------------------------------- 1 | query EligibleContractsForEditCoInsured { 2 | currentMember { 3 | activeContracts { 4 | id 5 | exposureDisplayName 6 | currentAgreement { 7 | productVariant { 8 | displayName 9 | } 10 | } 11 | supportsCoInsured 12 | coInsured { 13 | hasMissingInfo 14 | } 15 | } 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /app/feature/feature-edit-coinsured/src/main/graphql/QueryPersonalInformation.graphql: -------------------------------------------------------------------------------- 1 | query PersonalInformation($ssn: String!) { 2 | personalInformation(input: { personalNumber: $ssn }) { 3 | firstName 4 | lastName 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /app/feature/feature-force-upgrade/build.gradle.kts: -------------------------------------------------------------------------------- 1 | plugins { 2 | id("hedvig.gradle.plugin") 3 | id("hedvig.android.library") 4 | } 5 | 6 | hedvig { 7 | compose() 8 | } 9 | 10 | dependencies { 11 | implementation(projects.coreResources) 12 | implementation(projects.designSystemHedvig) 13 | } 14 | -------------------------------------------------------------------------------- /app/feature/feature-force-upgrade/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /app/feature/feature-forever/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /app/feature/feature-forever/src/main/kotlin/com/hedvig/android/feature/forever/navigation/ForeverDestination.kt: -------------------------------------------------------------------------------- 1 | package com.hedvig.android.feature.forever.navigation 2 | 3 | import com.hedvig.android.navigation.common.Destination 4 | import kotlinx.serialization.Serializable 5 | 6 | sealed interface ForeverDestination { 7 | @Serializable 8 | data object Graph : ForeverDestination, Destination 9 | 10 | @Serializable 11 | data object Forever : ForeverDestination, Destination 12 | } 13 | -------------------------------------------------------------------------------- /app/feature/feature-help-center/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /app/feature/feature-help-center/src/main/graphql/QueryAvailableSelfServiceOnContracts.graphql: -------------------------------------------------------------------------------- 1 | query AvailableSelfServiceOnContracts { 2 | currentMember { 3 | activeContracts { 4 | id 5 | exposureDisplayName 6 | currentAgreement { 7 | productVariant { 8 | displayName 9 | } 10 | } 11 | supportsCoInsured 12 | coInsured { 13 | hasMissingInfo 14 | } 15 | } 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /app/feature/feature-help-center/src/main/graphql/QueryHelpCenterFAQ.graphql: -------------------------------------------------------------------------------- 1 | query HelpCenterFAQ { 2 | currentMember { 3 | memberFAQ { 4 | topics { 5 | id 6 | title 7 | commonFAQ { 8 | ...FAQItemFragment 9 | } 10 | otherFAQ { 11 | ...FAQItemFragment 12 | } 13 | } 14 | commonFAQ { 15 | ...FAQItemFragment 16 | } 17 | } 18 | } 19 | } 20 | 21 | fragment FAQItemFragment on MemberFAQItem { 22 | id 23 | question 24 | answer 25 | } 26 | -------------------------------------------------------------------------------- /app/feature/feature-home/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /app/feature/feature-home/src/main/graphql/QueryUnreadMessageCount.graphql: -------------------------------------------------------------------------------- 1 | query UnreadMessageCount { 2 | currentMember { 3 | conversations { 4 | unreadMessageCount 5 | } 6 | legacyConversation { 7 | unreadMessageCount 8 | } 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /app/feature/feature-image-viewer/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /app/feature/feature-image-viewer/src/main/kotlin/com/hedvig/android/feature/imageviewer/navigation/ImageViewer.kt: -------------------------------------------------------------------------------- 1 | package com.hedvig.android.feature.imageviewer.navigation 2 | 3 | import com.hedvig.android.navigation.common.Destination 4 | import kotlinx.serialization.Serializable 5 | 6 | @Serializable 7 | data class ImageViewer(val imageUrl: String, val cacheKey: String) : Destination 8 | -------------------------------------------------------------------------------- /app/feature/feature-insurance-certificate/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /app/feature/feature-insurance-certificate/src/main/graphql/InsuranceEvidenceCreate.graphql: -------------------------------------------------------------------------------- 1 | mutation InsuranceEvidenceCreate($input: InsuranceEvidenceInput!) { 2 | insuranceEvidenceCreate(input: $input) { 3 | userError { 4 | message 5 | } 6 | insuranceEvidenceInformation { 7 | signedUrl 8 | } 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /app/feature/feature-insurance-certificate/src/main/graphql/InsuranceEvidenceInitialData.graphql: -------------------------------------------------------------------------------- 1 | query InsuranceEvidenceInitialData { 2 | currentMember { 3 | email 4 | memberActions { 5 | isCreatingOfInsuranceEvidenceEnabled 6 | } 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /app/feature/feature-insurances/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /app/feature/feature-insurances/src/main/graphql/QueryCrossSells.graphql: -------------------------------------------------------------------------------- 1 | query CrossSells { 2 | currentMember { 3 | id 4 | crossSells { 5 | id 6 | title 7 | description 8 | storeUrl 9 | type 10 | } 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /app/feature/feature-insurances/src/main/kotlin/com/hedvig/android/feature/insurances/data/CancelInsuranceData.kt: -------------------------------------------------------------------------------- 1 | package com.hedvig.android.feature.insurances.data 2 | 3 | data class CancelInsuranceData( 4 | val contractId: String, 5 | ) 6 | -------------------------------------------------------------------------------- /app/feature/feature-insurances/src/main/kotlin/com/hedvig/android/feature/insurances/data/GetCrossSellsUseCase.kt: -------------------------------------------------------------------------------- 1 | package com.hedvig.android.feature.insurances.data 2 | 3 | import arrow.core.Either 4 | import com.hedvig.android.core.common.ErrorMessage 5 | import octopus.CrossSellsQuery 6 | 7 | internal interface GetCrossSellsUseCase { 8 | suspend fun invoke(): Either> 9 | } 10 | -------------------------------------------------------------------------------- /app/feature/feature-login/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /app/feature/feature-login/src/main/kotlin/com/hedvig/android/feature/login/marketing/MarketingViewModel.kt: -------------------------------------------------------------------------------- 1 | package com.hedvig.android.feature.login.marketing 2 | 3 | import com.hedvig.android.language.LanguageService 4 | import com.hedvig.android.molecule.android.MoleculeViewModel 5 | 6 | internal class MarketingViewModel( 7 | languageService: LanguageService, 8 | ) : MoleculeViewModel( 9 | MarketingUiState.Loading, 10 | MarketingPresenter(languageService), 11 | ) 12 | -------------------------------------------------------------------------------- /app/feature/feature-login/src/main/res/drawable-nodpi/login_still_9x16.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HedvigInsurance/android/1aa395f47782a3b094129c5c23eee6ec6f9c94a7/app/feature/feature-login/src/main/res/drawable-nodpi/login_still_9x16.webp -------------------------------------------------------------------------------- /app/feature/feature-movingflow/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /app/feature/feature-movingflow/src/main/graphql/FragmentMoveIntent.graphql: -------------------------------------------------------------------------------- 1 | # Consider inlining this fragment 2 | fragment MoveIntentFragment on MoveIntent { 3 | id 4 | maxHouseNumberCoInsured 5 | maxHouseSquareMeters 6 | maxApartmentNumberCoInsured 7 | maxApartmentSquareMeters 8 | isApartmentAvailableforStudent 9 | extraBuildingTypes 10 | currentHomeAddresses { 11 | id 12 | oldAddressCoverageDurationDays 13 | displayTitle 14 | displaySubtitle 15 | suggestedNumberCoInsured 16 | maxMovingDate 17 | minMovingDate 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /app/feature/feature-movingflow/src/main/graphql/MutationMoveIntentCommit.graphql: -------------------------------------------------------------------------------- 1 | mutation MoveIntentV2Commit($intentId: ID!, $homeQuoteId: ID!, $excludedAddons: [ID!]!) { 2 | moveIntentCommit(intentId: $intentId, homeQuoteId: $homeQuoteId, removedAddons: $excludedAddons) { 3 | moveIntent { 4 | id 5 | } 6 | userError { 7 | message 8 | } 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /app/feature/feature-movingflow/src/main/graphql/MutationMoveIntentCreate.graphql: -------------------------------------------------------------------------------- 1 | mutation MoveIntentV2Create { 2 | moveIntentCreate { 3 | moveIntent { 4 | ...MoveIntentFragment 5 | } 6 | userError { 7 | message 8 | } 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /app/feature/feature-movingflow/src/main/kotlin/com/hedvig/android/feature/movingflow/data/HousingType.kt: -------------------------------------------------------------------------------- 1 | package com.hedvig.android.feature.movingflow.data 2 | 3 | internal enum class HousingType { 4 | ApartmentRent, 5 | ApartmentOwn, 6 | Villa, 7 | } 8 | -------------------------------------------------------------------------------- /app/feature/feature-odyssey/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /app/feature/feature-odyssey/src/main/graphql/AllContractsQuery.graphql: -------------------------------------------------------------------------------- 1 | query AllContracts { 2 | currentMember { 3 | pendingContracts { 4 | id 5 | exposureDisplayName 6 | } 7 | terminatedContracts { 8 | ...ShortContractInfoFragment 9 | } 10 | activeContracts { 11 | ...ShortContractInfoFragment 12 | } 13 | } 14 | } 15 | 16 | fragment ShortContractInfoFragment on Contract { 17 | id 18 | exposureDisplayName 19 | } 20 | -------------------------------------------------------------------------------- /app/feature/feature-odyssey/src/main/kotlin/com/hedvig/android/feature/odyssey/navigation/ClaimsFlowDestination.kt: -------------------------------------------------------------------------------- 1 | package com.hedvig.android.feature.odyssey.navigation 2 | 3 | import com.hedvig.android.navigation.common.Destination 4 | import kotlinx.serialization.Serializable 5 | 6 | @Serializable 7 | data object ClaimsFlowGraphDestination : Destination 8 | -------------------------------------------------------------------------------- /app/feature/feature-payments/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /app/feature/feature-payments/src/main/graphql/QueryDiscounts.graphql: -------------------------------------------------------------------------------- 1 | query Discounts { 2 | currentMember { 3 | redeemedCampaigns { 4 | code 5 | description 6 | expiresAt 7 | id 8 | onlyApplicableToContracts { 9 | currentAgreement { 10 | productVariant { 11 | displayName 12 | displayNameShort 13 | } 14 | } 15 | exposureDisplayNameShort 16 | } 17 | type 18 | } 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /app/feature/feature-payments/src/main/graphql/QueryShortPaymentsHistory.graphql: -------------------------------------------------------------------------------- 1 | query ShortPaymentHistory { 2 | currentMember { 3 | pastCharges { 4 | net { 5 | ...MoneyFragment 6 | } 7 | id 8 | status 9 | date 10 | } 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /app/feature/feature-profile/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /app/feature/feature-profile/src/main/graphql/eurobonus/FragmentPartnerDataFragment.graphql: -------------------------------------------------------------------------------- 1 | fragment PartnerDataFragment on Member { 2 | partnerData { 3 | sas { 4 | eurobonusNumber 5 | eligible 6 | } 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /app/feature/feature-profile/src/main/graphql/eurobonus/MutationUpdateEurobonusNumber.graphql: -------------------------------------------------------------------------------- 1 | mutation UpdateEurobonusNumber($input: String!) { 2 | memberUpdateEurobonusNumber(input: {eurobonusNumber: $input}) { 3 | userError { 4 | message 5 | } 6 | member { 7 | ...PartnerDataFragment 8 | } 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /app/feature/feature-profile/src/main/graphql/eurobonus/QueryEurobonusData.graphql: -------------------------------------------------------------------------------- 1 | query EurobonusData { 2 | currentMember { 3 | ...PartnerDataFragment 4 | } 5 | } 6 | -------------------------------------------------------------------------------- /app/feature/feature-profile/src/main/graphql/member/MutationMemberUpdateContactInfo.graphql: -------------------------------------------------------------------------------- 1 | mutation MemberUpdateContactInfo($email: String!, $phoneNumber:String!) { 2 | memberUpdateContactInfo(input: {email: $email, phoneNumber: $phoneNumber}) { 3 | userError { 4 | message 5 | } 6 | member { 7 | ...ContactInformation 8 | } 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /app/feature/feature-profile/src/main/graphql/member/MutationUpdateSubscriptionPreference.graphql: -------------------------------------------------------------------------------- 1 | mutation UpdateSubscriptionPreference($subscribe: Boolean) { 2 | memberUpdateSubscriptionPreference(subscribe: $subscribe) { 3 | message 4 | } 5 | } 6 | -------------------------------------------------------------------------------- /app/feature/feature-profile/src/main/graphql/member/QueryContactInformation.graphql: -------------------------------------------------------------------------------- 1 | query ContactInformation { 2 | currentMember { 3 | ...ContactInformation 4 | } 5 | } 6 | 7 | fragment ContactInformation on Member { 8 | phoneNumber 9 | email 10 | } 11 | -------------------------------------------------------------------------------- /app/feature/feature-profile/src/main/graphql/member/QueryInsuranceEvidenceAvailability.graphql: -------------------------------------------------------------------------------- 1 | query InsuranceEvidenceAvailability { 2 | currentMember { 3 | memberActions { 4 | isCreatingOfInsuranceEvidenceEnabled 5 | } 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /app/feature/feature-profile/src/main/graphql/member/QueryMemberId.graphql: -------------------------------------------------------------------------------- 1 | query MemberId { 2 | currentMember { 3 | id 4 | } 5 | } 6 | -------------------------------------------------------------------------------- /app/feature/feature-profile/src/main/graphql/member/QueryTravelCertificateAvailability.graphql: -------------------------------------------------------------------------------- 1 | query TravelCertificateAvailability { 2 | currentMember { 3 | memberActions { 4 | isTravelCertificateEnabled 5 | } 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /app/feature/feature-profile/src/main/kotlin/com/hedvig/android/feature/profile/data/ProfileData.kt: -------------------------------------------------------------------------------- 1 | package com.hedvig.android.feature.profile.data 2 | 3 | internal data class ProfileData( 4 | val member: Member, 5 | ) { 6 | data class Member( 7 | val id: String, 8 | val firstName: String, 9 | val lastName: String, 10 | val email: String, 11 | val phoneNumber: String?, 12 | ) 13 | } 14 | -------------------------------------------------------------------------------- /app/feature/feature-profile/src/test/kotlin/com/hedvig/android/feature/NoopNetworkCacheManager.kt: -------------------------------------------------------------------------------- 1 | package com.hedvig.android.feature 2 | 3 | import com.hedvig.android.apollo.NetworkCacheManager 4 | 5 | val NoopNetworkCacheManager = object : NetworkCacheManager { 6 | override fun clearCache() {} 7 | } 8 | -------------------------------------------------------------------------------- /app/feature/feature-terminate-insurance/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /app/feature/feature-terminate-insurance/src/main/graphql/MutationFlowTerminationDateNext.graphql: -------------------------------------------------------------------------------- 1 | mutation FlowTerminationDateNext($context: FlowContext!, $input: FlowTerminationDateInput!, $addonsEnabled: Boolean!) { 2 | flowTerminationDateNext(context: $context, input: $input) { 3 | id 4 | context 5 | ...TerminationFlowStepFragment 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /app/feature/feature-terminate-insurance/src/main/graphql/MutationFlowTerminationDeletionNext.graphql: -------------------------------------------------------------------------------- 1 | mutation FlowTerminationDeletionNext($context: FlowContext!, $addonsEnabled: Boolean!) { 2 | flowTerminationDeletionNext(input: {confirmed: true}, context: $context) { 3 | id 4 | context 5 | ...TerminationFlowStepFragment 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /app/feature/feature-terminate-insurance/src/main/graphql/MutationFlowTerminationStart.graphql: -------------------------------------------------------------------------------- 1 | mutation FlowTerminationStart($flowTerminationStartInput : FlowTerminationStartInput!, $addonsEnabled: Boolean!) { 2 | flowTerminationStart(input: $flowTerminationStartInput, context: null) { 3 | id 4 | context 5 | ...TerminationFlowStepFragment 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /app/feature/feature-terminate-insurance/src/main/graphql/MutationFlowTerminationSurveyNext.graphql: -------------------------------------------------------------------------------- 1 | mutation FlowTerminationSurveyNext($context: FlowContext!, $input: FlowTerminationSurveyInput!, $addonsEnabled: Boolean!) { 2 | flowTerminationSurveyNext(context: $context, input: $input) { 3 | id 4 | context 5 | ...TerminationFlowStepFragment 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /app/feature/feature-terminate-insurance/src/main/kotlin/com/hedvig/android/feature/terminateinsurance/InsuranceId.kt: -------------------------------------------------------------------------------- 1 | package com.hedvig.android.feature.terminateinsurance 2 | 3 | import kotlinx.serialization.Serializable 4 | 5 | @Serializable 6 | @JvmInline 7 | internal value class InsuranceId(val id: String) 8 | -------------------------------------------------------------------------------- /app/feature/feature-travel-certificate/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /app/feature/feature-travel-certificate/src/main/graphql/MutationTravelCertificateCreate.graphql: -------------------------------------------------------------------------------- 1 | mutation TravelCertificateCreate($input: TravelCertificateCreateInput!) { 2 | travelCertificateCreate(input: $input) { 3 | id 4 | signedUrl 5 | startDate 6 | endDate 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /app/feature/feature-travel-certificate/src/main/graphql/QueryCoInsuredForContract.graphql: -------------------------------------------------------------------------------- 1 | query CoInsuredForContract($contractId: UUID!) { 2 | contract(id: $contractId) { 3 | coInsured { 4 | birthdate 5 | firstName 6 | ssn 7 | lastName 8 | hasMissingInfo 9 | id 10 | } 11 | } 12 | currentMember { 13 | firstName 14 | lastName 15 | } 16 | } 17 | 18 | -------------------------------------------------------------------------------- /app/feature/feature-travel-certificate/src/main/graphql/QueryCurrentContracts.graphql: -------------------------------------------------------------------------------- 1 | query CurrentContracts { 2 | currentMember { 3 | activeContracts { 4 | supportsTravelCertificate 5 | } 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /app/feature/feature-travel-certificate/src/main/graphql/QueryEligibleContractsWithAddress.graphql: -------------------------------------------------------------------------------- 1 | query EligibleContractsWithAddress { 2 | currentMember { 3 | activeContracts { 4 | id 5 | supportsTravelCertificate 6 | exposureDisplayName 7 | } 8 | travelCertificateSpecifications { 9 | contractSpecifications { 10 | contractId 11 | location { 12 | street 13 | } 14 | } 15 | } 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /app/feature/feature-travel-certificate/src/main/graphql/QueryTravelCertificateHistory.graphql: -------------------------------------------------------------------------------- 1 | query TravelCertificates { 2 | currentMember { 3 | travelCertificates { 4 | startDate 5 | id 6 | signedUrl 7 | expiryDate 8 | } 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /app/feature/feature-travel-certificate/src/main/graphql/QueryTravelCertificateSpecifications.graphql: -------------------------------------------------------------------------------- 1 | query TravelCertificateSpecificationsQuery { 2 | currentMember { 3 | email 4 | activeContracts { 5 | id 6 | supportsTravelCertificate 7 | } 8 | travelCertificateSpecifications { 9 | contractSpecifications { 10 | contractId 11 | maxDurationDays 12 | maxStartDate 13 | minStartDate 14 | numberOfCoInsured 15 | } 16 | } 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /app/featureflags/feature-flags-public/build.gradle.kts: -------------------------------------------------------------------------------- 1 | plugins { 2 | id("hedvig.gradle.plugin") 3 | id("hedvig.kotlin.library") 4 | } 5 | 6 | dependencies { 7 | api(libs.unleash) 8 | 9 | implementation(libs.coroutines.core) 10 | implementation(libs.koin.core) 11 | implementation(projects.authCorePublic) 12 | implementation(projects.authEventCore) 13 | implementation(projects.coreBuildConstants) 14 | implementation(projects.coreCommonPublic) 15 | } 16 | -------------------------------------------------------------------------------- /app/featureflags/feature-flags-public/src/main/kotlin/com/hedvig/android/featureflags/FeatureManager.kt: -------------------------------------------------------------------------------- 1 | package com.hedvig.android.featureflags 2 | 3 | import com.hedvig.android.featureflags.flags.Feature 4 | import kotlinx.coroutines.flow.Flow 5 | 6 | interface FeatureManager { 7 | fun isFeatureEnabled(feature: Feature): Flow 8 | } 9 | -------------------------------------------------------------------------------- /app/featureflags/feature-flags-test/build.gradle.kts: -------------------------------------------------------------------------------- 1 | plugins { 2 | id("hedvig.gradle.plugin") 3 | id("hedvig.kotlin.library") 4 | } 5 | 6 | dependencies { 7 | implementation(libs.turbine) 8 | implementation(projects.featureFlagsPublic) 9 | } 10 | -------------------------------------------------------------------------------- /app/initializable/build.gradle.kts: -------------------------------------------------------------------------------- 1 | plugins { 2 | id("hedvig.gradle.plugin") 3 | id("hedvig.kotlin.library") 4 | } 5 | -------------------------------------------------------------------------------- /app/initializable/src/main/kotlin/com/hedvig/android/initializable/Initializable.kt: -------------------------------------------------------------------------------- 1 | package com.hedvig.android.initializable 2 | 3 | fun interface Initializable { 4 | fun initialize() 5 | } 6 | -------------------------------------------------------------------------------- /app/language/language-android/build.gradle.kts: -------------------------------------------------------------------------------- 1 | plugins { 2 | id("hedvig.gradle.plugin") 3 | id("hedvig.android.library") 4 | } 5 | 6 | dependencies { 7 | implementation(libs.androidx.other.appCompat) 8 | implementation(libs.koin.core) 9 | implementation(projects.coreCommonPublic) 10 | implementation(projects.coreResources) 11 | implementation(projects.languageCore) 12 | } 13 | -------------------------------------------------------------------------------- /app/language/language-android/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /app/language/language-android/src/main/kotlin/com/hedvig/android/language/Language.kt: -------------------------------------------------------------------------------- 1 | package com.hedvig.android.language 2 | 3 | import androidx.annotation.StringRes 4 | import com.hedvig.android.language.Language.EN_SE 5 | import com.hedvig.android.language.Language.SV_SE 6 | import hedvig.resources.R 7 | 8 | val Language.label: Int 9 | @StringRes 10 | get() = when (this) { 11 | SV_SE -> R.string.swedish 12 | EN_SE -> R.string.english_swedish 13 | } 14 | -------------------------------------------------------------------------------- /app/language/language-android/src/main/kotlin/com/hedvig/android/language/di/LanguageModule.kt: -------------------------------------------------------------------------------- 1 | package com.hedvig.android.language.di 2 | 3 | import com.hedvig.android.language.AndroidLanguageService 4 | import com.hedvig.android.language.LanguageService 5 | import org.koin.dsl.module 6 | 7 | val languageModule = module { 8 | single { AndroidLanguageService() } 9 | } 10 | -------------------------------------------------------------------------------- /app/language/language-core/build.gradle.kts: -------------------------------------------------------------------------------- 1 | plugins { 2 | id("hedvig.gradle.plugin") 3 | id("hedvig.kotlin.library") 4 | } 5 | 6 | dependencies { 7 | implementation(libs.androidx.annotation) 8 | implementation(projects.coreCommonPublic) 9 | } 10 | -------------------------------------------------------------------------------- /app/language/language-data/build.gradle.kts: -------------------------------------------------------------------------------- 1 | plugins { 2 | id("hedvig.gradle.plugin") 3 | id("hedvig.kotlin.library") 4 | } 5 | 6 | hedvig { 7 | apollo("octopus") 8 | } 9 | 10 | dependencies { 11 | 12 | implementation(libs.apollo.runtime) 13 | implementation(libs.koin.core) 14 | implementation(projects.apolloCore) 15 | implementation(projects.apolloOctopusPublic) 16 | implementation(projects.authEventCore) 17 | implementation(projects.languageCore) 18 | } 19 | -------------------------------------------------------------------------------- /app/language/language-data/src/main/graphql/MutationMemberUpdateLanguage.graphql: -------------------------------------------------------------------------------- 1 | mutation MemberUpdateLanguage($ietfLanguageTag: String!) { 2 | memberUpdateLanguage(input: { ietfLanguageTag: $ietfLanguageTag}) { 3 | member { 4 | id 5 | language 6 | } 7 | userError { 8 | message 9 | } 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /app/language/language-data/src/main/kotlin/com/hedvig/android/apollo/auth/listeners/UploadLanguagePreferenceToBackendAuthListener.kt: -------------------------------------------------------------------------------- 1 | package com.hedvig.android.apollo.auth.listeners 2 | 3 | import com.hedvig.android.auth.event.AuthEventListener 4 | 5 | internal class UploadLanguagePreferenceToBackendAuthListener( 6 | private val uploadLanguagePreferenceToBackendUseCase: UploadLanguagePreferenceToBackendUseCase, 7 | ) : AuthEventListener { 8 | override suspend fun loggedIn(accessToken: String) { 9 | uploadLanguagePreferenceToBackendUseCase.invoke() 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /app/language/language-migration/build.gradle.kts: -------------------------------------------------------------------------------- 1 | plugins { 2 | id("hedvig.gradle.plugin") 3 | id("hedvig.android.library") 4 | } 5 | 6 | dependencies { 7 | implementation(libs.androidx.other.appCompat) 8 | implementation(libs.koin.core) 9 | implementation(projects.coreCommonPublic) 10 | implementation(projects.coreResources) 11 | implementation(projects.languageCore) 12 | } 13 | -------------------------------------------------------------------------------- /app/language/language-migration/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /app/language/language-migration/src/main/kotlin/com/hedvig/android/language/di/LanguageMigrationModule.kt: -------------------------------------------------------------------------------- 1 | package com.hedvig.android.language.di 2 | 3 | import com.hedvig.android.language.AndroidLanguageLaunchCheckUseCase 4 | import com.hedvig.android.language.LanguageLaunchCheckUseCase 5 | import com.hedvig.android.language.LanguageService 6 | import org.koin.dsl.module 7 | 8 | val languageMigrationModule = module { 9 | single { 10 | AndroidLanguageLaunchCheckUseCase(get()) 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /app/language/language-test/build.gradle.kts: -------------------------------------------------------------------------------- 1 | plugins { 2 | id("hedvig.gradle.plugin") 3 | id("hedvig.kotlin.library") 4 | } 5 | 6 | dependencies { 7 | implementation(projects.languageCore) 8 | } 9 | -------------------------------------------------------------------------------- /app/logging/logging-android/build.gradle.kts: -------------------------------------------------------------------------------- 1 | plugins { 2 | id("hedvig.gradle.plugin") 3 | id("hedvig.android.library") 4 | } 5 | 6 | dependencies { 7 | implementation(libs.slimber) 8 | implementation(libs.timber) 9 | implementation(projects.loggingPublic) 10 | } 11 | -------------------------------------------------------------------------------- /app/logging/logging-android/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /app/logging/logging-public/build.gradle.kts: -------------------------------------------------------------------------------- 1 | plugins { 2 | id("hedvig.gradle.plugin") 3 | id("hedvig.kotlin.library") 4 | } 5 | -------------------------------------------------------------------------------- /app/logging/logging-public/src/main/kotlin/com/hedvig/android/logger/LogPriority.kt: -------------------------------------------------------------------------------- 1 | package com.hedvig.android.logger 2 | 3 | /** 4 | * An enum for log priorities that map to [android.util.Log] priority constants 5 | * without a direct import. 6 | */ 7 | enum class LogPriority { 8 | VERBOSE, 9 | DEBUG, 10 | INFO, 11 | WARN, 12 | ERROR, 13 | ASSERT, 14 | } 15 | -------------------------------------------------------------------------------- /app/logging/logging-public/src/main/kotlin/com/hedvig/android/logger/Logcat.kt: -------------------------------------------------------------------------------- 1 | package com.hedvig.android.logger 2 | 3 | /** 4 | * The main entrypoint to logging in the entire app. 5 | */ 6 | @Suppress("NOTHING_TO_INLINE") 7 | inline fun logcat( 8 | priority: LogPriority = LogPriority.DEBUG, 9 | throwable: Throwable? = null, 10 | noinline message: () -> String, 11 | ) { 12 | with(LogcatLogger.logger) { 13 | log(priority, throwable, message) 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /app/logging/logging-test/build.gradle.kts: -------------------------------------------------------------------------------- 1 | plugins { 2 | id("hedvig.gradle.plugin") 3 | id("hedvig.kotlin.library") 4 | } 5 | 6 | dependencies { 7 | api(libs.junit) 8 | api(projects.loggingPublic) 9 | } 10 | -------------------------------------------------------------------------------- /app/logging/logging-test/src/main/kotlin/com/hedvig/android/logger/TestLogcatLogger.kt: -------------------------------------------------------------------------------- 1 | package com.hedvig.android.logger 2 | 3 | /** 4 | * A test [LogcatLogger] implementation which just prints out to [System.out]. 5 | */ 6 | internal class TestLogcatLogger : LogcatLogger { 7 | override fun log(priority: LogPriority, throwable: Throwable?, message: () -> String) { 8 | val throwableText = throwable?.let { " ${it.message}" } ?: "" 9 | println("[${priority.name}] ${message()}" + throwableText) 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /app/member-reminders/member-reminders-public/src/main/graphql/QueryGetPayinMethodStatus.graphql: -------------------------------------------------------------------------------- 1 | query GetPayinMethodStatus { 2 | currentMember { 3 | paymentInformation { 4 | status 5 | } 6 | activeContracts { 7 | terminationDate 8 | terminationDueToMissedPayments 9 | id 10 | } 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /app/member-reminders/member-reminders-public/src/main/graphql/QueryGetUpcomingRenewalReminder.graphql: -------------------------------------------------------------------------------- 1 | query GetUpcomingRenewalReminder { 2 | currentMember { 3 | activeContracts { 4 | currentAgreement { 5 | productVariant { 6 | displayName 7 | } 8 | } 9 | upcomingChangedAgreement { 10 | creationCause 11 | activeFrom 12 | certificateUrl 13 | } 14 | } 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /app/member-reminders/member-reminders-public/src/main/graphql/QueryNeedsCoInsuredInfoReminder.graphql: -------------------------------------------------------------------------------- 1 | query NeedsCoInsuredInfoReminder { 2 | currentMember { 3 | activeContracts { 4 | id 5 | coInsured { 6 | hasMissingInfo 7 | terminatesOn 8 | } 9 | supportsCoInsured 10 | } 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /app/member-reminders/member-reminders-public/src/main/graphql/QueryNeedsContactInfoUpdateReminder.graphql: -------------------------------------------------------------------------------- 1 | query NeedsContactInfoUpdateReminder { 2 | currentMember { 3 | memberActions { 4 | isContactInfoUpdateNeeded 5 | } 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /app/member-reminders/member-reminders-test/build.gradle.kts: -------------------------------------------------------------------------------- 1 | plugins { 2 | id("hedvig.gradle.plugin") 3 | id("hedvig.kotlin.library") 4 | } 5 | 6 | dependencies { 7 | implementation(libs.turbine) 8 | implementation(projects.memberRemindersPublic) 9 | } 10 | -------------------------------------------------------------------------------- /app/member-reminders/member-reminders-ui/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /app/molecule/molecule-android/build.gradle.kts: -------------------------------------------------------------------------------- 1 | plugins { 2 | id("hedvig.gradle.plugin") 3 | id("hedvig.android.library") 4 | } 5 | 6 | hedvig { 7 | compose() 8 | } 9 | 10 | dependencies { 11 | api(libs.androidx.lifecycle.viewModel) 12 | api(projects.moleculePublic) 13 | 14 | implementation(libs.coroutines.core) 15 | implementation(libs.molecule) 16 | } 17 | -------------------------------------------------------------------------------- /app/molecule/molecule-android/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /app/molecule/molecule-public/build.gradle.kts: -------------------------------------------------------------------------------- 1 | plugins { 2 | id("hedvig.gradle.plugin") 3 | id("hedvig.kotlin.library") 4 | } 5 | 6 | hedvig { 7 | compose() 8 | } 9 | 10 | dependencies { 11 | implementation(libs.androidx.compose.runtime) 12 | implementation(libs.coroutines.core) 13 | } 14 | -------------------------------------------------------------------------------- /app/molecule/molecule-test/build.gradle.kts: -------------------------------------------------------------------------------- 1 | plugins { 2 | id("hedvig.gradle.plugin") 3 | id("hedvig.kotlin.library") 4 | } 5 | 6 | hedvig { 7 | compose() 8 | } 9 | 10 | dependencies { 11 | api(projects.moleculePublic) 12 | implementation(libs.androidx.annotation) 13 | implementation(libs.androidx.compose.runtime) 14 | implementation(libs.molecule) 15 | implementation(libs.turbine) 16 | } 17 | -------------------------------------------------------------------------------- /app/navigation/navigation-activity/build.gradle.kts: -------------------------------------------------------------------------------- 1 | plugins { 2 | id("hedvig.gradle.plugin") 3 | id("hedvig.kotlin.library") 4 | } 5 | -------------------------------------------------------------------------------- /app/navigation/navigation-activity/src/main/kotlin/com/hedvig/android/navigation/activity/ExternalNavigator.kt: -------------------------------------------------------------------------------- 1 | package com.hedvig.android.navigation.activity 2 | 3 | interface ExternalNavigator { 4 | fun openAppSettings() 5 | 6 | fun tryOpenPlayStore() 7 | 8 | fun openEmailApp() 9 | } 10 | -------------------------------------------------------------------------------- /app/navigation/navigation-common/build.gradle.kts: -------------------------------------------------------------------------------- 1 | plugins { 2 | id("hedvig.gradle.plugin") 3 | id("hedvig.kotlin.library") 4 | } 5 | 6 | dependencies { 7 | implementation(libs.kotlin.reflect) 8 | } 9 | -------------------------------------------------------------------------------- /app/navigation/navigation-common/src/main/kotlin/com/hedvig/android/navigation/common/Destination.kt: -------------------------------------------------------------------------------- 1 | package com.hedvig.android.navigation.common 2 | 3 | import kotlin.reflect.KType 4 | 5 | interface Destination 6 | 7 | interface DestinationNavTypeAware { 8 | val typeList: List 9 | } 10 | -------------------------------------------------------------------------------- /app/navigation/navigation-compose-typed/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /app/navigation/navigation-compose/build.gradle.kts: -------------------------------------------------------------------------------- 1 | plugins { 2 | id("hedvig.gradle.plugin") 3 | id("hedvig.android.library") 4 | } 5 | 6 | hedvig { 7 | serialization() 8 | compose() 9 | } 10 | 11 | dependencies { 12 | api(libs.androidx.navigation.common) 13 | implementation(libs.androidx.compose.runtime) 14 | implementation(libs.androidx.navigation.compose) 15 | implementation(libs.kotlinx.serialization.core) 16 | implementation(libs.kotlinx.serialization.json) 17 | implementation(projects.navigationCommon) 18 | } 19 | -------------------------------------------------------------------------------- /app/navigation/navigation-compose/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /app/navigation/navigation-core/build.gradle.kts: -------------------------------------------------------------------------------- 1 | plugins { 2 | id("hedvig.gradle.plugin") 3 | id("hedvig.android.library") 4 | } 5 | 6 | dependencies { 7 | api(libs.androidx.navigation.common) 8 | implementation(libs.koin.core) 9 | implementation(projects.coreBuildConstants) 10 | implementation(projects.navigationCommon) 11 | } 12 | -------------------------------------------------------------------------------- /app/navigation/navigation-core/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /app/navigation/navigation-core/src/main/kotlin/com/hedvig/android/navigation/core/TopLevelGraph.kt: -------------------------------------------------------------------------------- 1 | package com.hedvig.android.navigation.core 2 | 3 | enum class TopLevelGraph { 4 | Home, 5 | Insurances, 6 | Forever, 7 | Payments, 8 | Profile, 9 | } 10 | -------------------------------------------------------------------------------- /app/navigation/navigation-core/src/main/kotlin/com/hedvig/android/navigation/core/di/DeepLinkModule.kt: -------------------------------------------------------------------------------- 1 | package com.hedvig.android.navigation.core.di 2 | 3 | import com.hedvig.android.core.buildconstants.HedvigBuildConstants 4 | import com.hedvig.android.navigation.core.HedvigDeepLinkContainer 5 | import com.hedvig.android.navigation.core.HedvigDeepLinkContainerImpl 6 | import org.koin.dsl.module 7 | 8 | val deepLinkModule = module { 9 | single { 10 | HedvigDeepLinkContainerImpl(get()) 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /app/notification-badge-data/notification-badge-data-fake/build.gradle.kts: -------------------------------------------------------------------------------- 1 | plugins { 2 | id("hedvig.gradle.plugin") 3 | id("hedvig.kotlin.library") 4 | } 5 | 6 | dependencies { 7 | implementation(libs.turbine) 8 | implementation(projects.notificationBadgeDataPublic) 9 | } 10 | -------------------------------------------------------------------------------- /app/notification-badge-data/notification-badge-data-public/src/main/graphql/QueryCrossSellTypes.graphql: -------------------------------------------------------------------------------- 1 | query CrossSellTypes { 2 | currentMember { 3 | crossSells { 4 | id 5 | type 6 | } 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /app/notification-badge-data/notification-badge-data-public/src/main/kotlin/com/hedvig/android/notification/badge/data/tab/BottomNavTab.kt: -------------------------------------------------------------------------------- 1 | package com.hedvig.android.notification.badge.data.tab 2 | 3 | enum class BottomNavTab { 4 | HOME, 5 | INSURANCE, 6 | FOREVER, 7 | PAYMENTS, 8 | PROFILE, 9 | } 10 | -------------------------------------------------------------------------------- /app/notification-permission/build.gradle.kts: -------------------------------------------------------------------------------- 1 | plugins { 2 | id("hedvig.gradle.plugin") 3 | id("hedvig.android.library") 4 | } 5 | 6 | hedvig { 7 | compose() 8 | } 9 | 10 | dependencies { 11 | api(libs.accompanist.permissions) 12 | 13 | implementation(libs.androidx.activity.compose) 14 | implementation(projects.coreResources) 15 | implementation(projects.designSystemHedvig) 16 | } 17 | -------------------------------------------------------------------------------- /app/notification-permission/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /app/notification/notification-core/build.gradle.kts: -------------------------------------------------------------------------------- 1 | plugins { 2 | id("hedvig.gradle.plugin") 3 | id("hedvig.android.library") 4 | } 5 | 6 | dependencies { 7 | implementation(platform(libs.firebase.bom)) 8 | 9 | implementation(libs.androidx.other.coreKtx) 10 | implementation(libs.firebase.messaging) 11 | implementation(projects.coreResources) 12 | } 13 | -------------------------------------------------------------------------------- /app/notification/notification-core/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /app/notification/notification-core/src/main/kotlin/com/hedvig/android/notification/core/NotificationSender.kt: -------------------------------------------------------------------------------- 1 | package com.hedvig.android.notification.core 2 | 3 | import com.google.firebase.messaging.RemoteMessage 4 | 5 | interface NotificationSender { 6 | suspend fun sendNotification(type: String, remoteMessage: RemoteMessage) 7 | 8 | fun handlesNotificationType(notificationType: String): Boolean 9 | } 10 | -------------------------------------------------------------------------------- /app/notification/notification-firebase/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /app/notification/notification-firebase/src/main/graphql/MutationMemberDeviceRegister.graphql: -------------------------------------------------------------------------------- 1 | mutation MemberDeviceRegister($token: String!) { 2 | memberDeviceRegister(input: {platform: ANDROID, token: $token}) 3 | } 4 | -------------------------------------------------------------------------------- /app/shared/forever-ui/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /app/shared/forever-ui/src/main/graphql/MutationMemberReferralInformationCodeUpdate.graphql: -------------------------------------------------------------------------------- 1 | mutation MemberReferralInformationCodeUpdate($code: String!) { 2 | memberReferralInformationCodeUpdate(code: $code) { 3 | referralInformation { 4 | code 5 | } 6 | userError { 7 | message 8 | } 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /app/shared/forever-ui/src/main/kotlin/com/hedvig/android/shared/foreverui/ui/data/ForeverRepository.kt: -------------------------------------------------------------------------------- 1 | package com.hedvig.android.shared.foreverui.ui.data 2 | 3 | import arrow.core.Either 4 | import com.hedvig.android.core.common.ErrorMessage 5 | import octopus.FullReferralsQuery 6 | 7 | interface ForeverRepository { 8 | suspend fun getReferralsData(): Either 9 | 10 | suspend fun updateCode(newCode: String): Either 11 | 12 | data class ReferralError(val message: String?) 13 | } 14 | -------------------------------------------------------------------------------- /app/shared/forever-ui/src/main/kotlin/com/hedvig/android/shared/foreverui/ui/data/ForeverRepositoryProvider.kt: -------------------------------------------------------------------------------- 1 | package com.hedvig.android.shared.foreverui.ui.data 2 | 3 | import com.hedvig.android.core.demomode.DemoManager 4 | import com.hedvig.android.core.demomode.ProdOrDemoProvider 5 | 6 | internal class ForeverRepositoryProvider( 7 | override val demoManager: DemoManager, 8 | override val demoImpl: ForeverRepository, 9 | override val prodImpl: ForeverRepository, 10 | ) : ProdOrDemoProvider 11 | -------------------------------------------------------------------------------- /app/shared/tier-comparison/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /app/shared/tier-comparison/src/main/graphql/CompareCoverageQuery.graphql: -------------------------------------------------------------------------------- 1 | query CompareCoverage($termsVersions: [ID!]!) { 2 | productVariantComparison(termsVersions: $termsVersions) { 3 | variantColumns { 4 | displayNameTier 5 | displayNameSubtype 6 | termsVersion 7 | } 8 | rows { 9 | title 10 | description 11 | cells { 12 | isCovered 13 | coverageText 14 | } 15 | } 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /app/shared/tier-comparison/src/main/kotlin/com/hedvig/android/shared/tier/comparison/navigation/ComparisonParameters.kt: -------------------------------------------------------------------------------- 1 | package com.hedvig.android.shared.tier.comparison.navigation 2 | 3 | import kotlinx.serialization.Serializable 4 | 5 | @Serializable 6 | data class ComparisonParameters( 7 | val termsIds: List, 8 | val selectedTermsVersion: String?, 9 | ) 10 | -------------------------------------------------------------------------------- /app/test/test-clock/build.gradle.kts: -------------------------------------------------------------------------------- 1 | plugins { 2 | id("hedvig.gradle.plugin") 3 | id("hedvig.kotlin.library") 4 | } 5 | 6 | dependencies { 7 | api(libs.kotlinx.datetime) 8 | } 9 | -------------------------------------------------------------------------------- /app/test/test-clock/src/main/kotlin/com/hedvig/android/test/clock/TestClock.kt: -------------------------------------------------------------------------------- 1 | package com.hedvig.android.test.clock 2 | 3 | import kotlin.time.Duration 4 | import kotlinx.datetime.Clock 5 | import kotlinx.datetime.Instant 6 | 7 | class TestClock : Clock { 8 | private var now = Clock.System.now() 9 | 10 | fun advanceTimeBy(duration: Duration) { 11 | require(duration > Duration.ZERO) 12 | now += duration 13 | } 14 | 15 | override fun now(): Instant { 16 | return now 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /app/theme/build.gradle.kts: -------------------------------------------------------------------------------- 1 | plugins { 2 | id("hedvig.gradle.plugin") 3 | id("hedvig.kotlin.library") 4 | } 5 | -------------------------------------------------------------------------------- /app/theme/src/main/kotlin/com/hedvig/android/theme/Theme.kt: -------------------------------------------------------------------------------- 1 | package com.hedvig.android.theme 2 | 3 | enum class Theme { 4 | LIGHT, 5 | DARK, 6 | SYSTEM_DEFAULT, 7 | } 8 | -------------------------------------------------------------------------------- /app/tracking/tracking-core/build.gradle.kts: -------------------------------------------------------------------------------- 1 | plugins { 2 | id("hedvig.gradle.plugin") 3 | id("hedvig.kotlin.library") 4 | } 5 | -------------------------------------------------------------------------------- /app/tracking/tracking-datadog/build.gradle.kts: -------------------------------------------------------------------------------- 1 | plugins { 2 | id("hedvig.gradle.plugin") 3 | id("hedvig.android.library") 4 | } 5 | 6 | dependencies { 7 | api(libs.datadog.sdk.rum) 8 | api(projects.trackingCore) 9 | 10 | implementation(libs.koin.core) 11 | implementation(projects.initializable) 12 | } 13 | -------------------------------------------------------------------------------- /app/tracking/tracking-datadog/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /app/tracking/tracking-datadog/src/main/kotlin/com/hedvig/android/tracking/datadog/ActionLoggerInitializer.kt: -------------------------------------------------------------------------------- 1 | package com.hedvig.android.tracking.datadog 2 | 3 | import com.hedvig.android.initializable.Initializable 4 | 5 | class ActionLoggerInitializer : Initializable { 6 | override fun initialize() { 7 | DatadogRumLogger.install() 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /app/tracking/tracking-datadog/src/main/kotlin/com/hedvig/android/tracking/datadog/di/trackingDatadogModule.kt: -------------------------------------------------------------------------------- 1 | package com.hedvig.android.tracking.datadog.di 2 | 3 | import com.hedvig.android.initializable.Initializable 4 | import com.hedvig.android.tracking.datadog.ActionLoggerInitializer 5 | import org.koin.dsl.bind 6 | import org.koin.dsl.module 7 | 8 | val trackingDatadogModule = module { 9 | single { ActionLoggerInitializer() } bind Initializable::class 10 | } 11 | -------------------------------------------------------------------------------- /app/ui/claim-status/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /app/ui/compose-webview/README.md: -------------------------------------------------------------------------------- 1 | Accompanist WebView is deprecated https://medium.com/androiddevelopers/an-update-on-jetpack-compose-accompanist-libraries-august-2023-ac4cbbf059f1 2 | This is a fork of it so we can still use it as suggested in the article above -------------------------------------------------------------------------------- /app/ui/compose-webview/build.gradle.kts: -------------------------------------------------------------------------------- 1 | plugins { 2 | id("hedvig.gradle.plugin") 3 | id("hedvig.android.library") 4 | } 5 | 6 | hedvig { 7 | compose() 8 | } 9 | 10 | dependencies { 11 | implementation(libs.androidx.activity.compose) 12 | implementation(libs.androidx.compose.foundation) 13 | implementation(libs.androidx.compose.runtime) 14 | } 15 | -------------------------------------------------------------------------------- /app/ui/compose-webview/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /app/ui/cross-sells/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /app/ui/placeholder/build.gradle.kts: -------------------------------------------------------------------------------- 1 | plugins { 2 | id("hedvig.gradle.plugin") 3 | id("hedvig.android.library") 4 | } 5 | 6 | hedvig { 7 | compose() 8 | } 9 | 10 | dependencies { 11 | implementation(libs.androidx.compose.animationCore) 12 | implementation(libs.androidx.compose.runtime) 13 | implementation(libs.androidx.compose.uiUtil) 14 | } 15 | -------------------------------------------------------------------------------- /app/ui/placeholder/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /app/ui/pullrefresh/README.md: -------------------------------------------------------------------------------- 1 | ## A local fork of the pullrefresh functionality from androidx.material 2 | 3 | Source: https://cs.android.com/androidx/platform/frameworks/support/+/androidx-main:compose/material/material/src/commonMain/kotlin/androidx/compose/material/pullrefresh/ 4 | 5 | Forked so that we can make use of it while not bringing in m2 dependencies in our project unecessarily 6 | -------------------------------------------------------------------------------- /app/ui/pullrefresh/build.gradle.kts: -------------------------------------------------------------------------------- 1 | plugins { 2 | id("hedvig.gradle.plugin") 3 | id("hedvig.android.library") 4 | } 5 | 6 | hedvig { 7 | compose() 8 | } 9 | 10 | dependencies { 11 | implementation(libs.androidx.compose.animationCore) 12 | implementation(libs.androidx.compose.runtime) 13 | implementation(projects.designSystemHedvig) 14 | } 15 | -------------------------------------------------------------------------------- /app/ui/pullrefresh/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /app/ui/ui-claim-flow/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /app/ui/ui-emergency/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /app/ui/ui-tiers-and-addons/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /build-logic/convention/src/main/kotlin/com/hedvig/android/AndroidCommonExtension.kt: -------------------------------------------------------------------------------- 1 | package com.hedvig.android 2 | 3 | import com.android.build.api.dsl.CommonExtension 4 | 5 | internal typealias AndroidCommonExtension = CommonExtension<*, *, *, *, *, *> 6 | -------------------------------------------------------------------------------- /build-logic/gradle.properties: -------------------------------------------------------------------------------- 1 | # Gradle properties are not passed to included builds https://github.com/gradle/gradle/issues/2534 2 | org.gradle.caching=true 3 | org.gradle.configureondemand=true 4 | org.gradle.parallel=true 5 | org.gradle.configuration-cache=true 6 | -------------------------------------------------------------------------------- /build-logic/settings.gradle.kts: -------------------------------------------------------------------------------- 1 | dependencyResolutionManagement { 2 | repositories { 3 | google() 4 | mavenCentral() 5 | maven("https://plugins.gradle.org/m2/") 6 | } 7 | versionCatalogs { 8 | create("libs") { 9 | from(files("../gradle/libs.versions.toml")) 10 | } 11 | } 12 | } 13 | 14 | rootProject.name = "build-logic" 15 | 16 | include(":convention") 17 | -------------------------------------------------------------------------------- /debug.keystore: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HedvigInsurance/android/1aa395f47782a3b094129c5c23eee6ec6f9c94a7/debug.keystore -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HedvigInsurance/android/1aa395f47782a3b094129c5c23eee6ec6f9c94a7/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | distributionBase=GRADLE_USER_HOME 2 | distributionPath=wrapper/dists 3 | distributionUrl=https\://services.gradle.org/distributions/gradle-8.14-bin.zip 4 | zipStoreBase=GRADLE_USER_HOME 5 | zipStorePath=wrapper/dists 6 | -------------------------------------------------------------------------------- /hedvig-lint/.gitignore: -------------------------------------------------------------------------------- 1 | /lint-reports -------------------------------------------------------------------------------- /hedvig-lint/build.gradle.kts: -------------------------------------------------------------------------------- 1 | import org.jetbrains.kotlin.gradle.dsl.JvmTarget 2 | 3 | plugins { 4 | id("hedvig.gradle.plugin") 5 | `java-library` 6 | alias(libs.plugins.kotlinJvm) 7 | alias(libs.plugins.lintGradlePlugin) 8 | } 9 | 10 | dependencies { 11 | compileOnly(libs.lintApi) 12 | } 13 | 14 | java { 15 | sourceCompatibility = JavaVersion.VERSION_17 16 | targetCompatibility = JavaVersion.VERSION_17 17 | } 18 | 19 | kotlin { 20 | compilerOptions { 21 | jvmTarget.set(JvmTarget.JVM_17) 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /hedvig-lint/lint-baseline/lint-baseline-apollo-auth-listeners.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /hedvig-lint/lint-baseline/lint-baseline-apollo-core.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /hedvig-lint/lint-baseline/lint-baseline-apollo-network-cache-manager.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /hedvig-lint/lint-baseline/lint-baseline-apollo-octopus-public.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /hedvig-lint/lint-baseline/lint-baseline-apollo-octopus-test.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /hedvig-lint/lint-baseline/lint-baseline-apollo-test.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /hedvig-lint/lint-baseline/lint-baseline-app.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /hedvig-lint/lint-baseline/lint-baseline-audio-player-data.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /hedvig-lint/lint-baseline/lint-baseline-audio-player-ui.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /hedvig-lint/lint-baseline/lint-baseline-auth-core-public.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /hedvig-lint/lint-baseline/lint-baseline-auth-core-test.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /hedvig-lint/lint-baseline/lint-baseline-auth-event-core.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /hedvig-lint/lint-baseline/lint-baseline-auth-event-fake.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /hedvig-lint/lint-baseline/lint-baseline-claim-status.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /hedvig-lint/lint-baseline/lint-baseline-compose-pager-indicator.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /hedvig-lint/lint-baseline/lint-baseline-compose-photo-capture-state.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /hedvig-lint/lint-baseline/lint-baseline-compose-ui.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /hedvig-lint/lint-baseline/lint-baseline-compose-webview.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /hedvig-lint/lint-baseline/lint-baseline-core-app-review.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /hedvig-lint/lint-baseline/lint-baseline-core-build-constants.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /hedvig-lint/lint-baseline/lint-baseline-core-common-android-public.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /hedvig-lint/lint-baseline/lint-baseline-core-common-public.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /hedvig-lint/lint-baseline/lint-baseline-core-common-test.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /hedvig-lint/lint-baseline/lint-baseline-core-datastore-public.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /hedvig-lint/lint-baseline/lint-baseline-core-datastore-test.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /hedvig-lint/lint-baseline/lint-baseline-core-demo-mode.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /hedvig-lint/lint-baseline/lint-baseline-core-design-system.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /hedvig-lint/lint-baseline/lint-baseline-core-file-upload.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /hedvig-lint/lint-baseline/lint-baseline-core-icons.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /hedvig-lint/lint-baseline/lint-baseline-core-markdown.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /hedvig-lint/lint-baseline/lint-baseline-core-retrofit.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /hedvig-lint/lint-baseline/lint-baseline-core-ui-data.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /hedvig-lint/lint-baseline/lint-baseline-core-ui.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /hedvig-lint/lint-baseline/lint-baseline-cross-sells.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /hedvig-lint/lint-baseline/lint-baseline-data-addons.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /hedvig-lint/lint-baseline/lint-baseline-data-changetier.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /hedvig-lint/lint-baseline/lint-baseline-data-chat.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /hedvig-lint/lint-baseline/lint-baseline-data-claim-flow.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /hedvig-lint/lint-baseline/lint-baseline-data-claim-triaging.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /hedvig-lint/lint-baseline/lint-baseline-data-contract-android.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /hedvig-lint/lint-baseline/lint-baseline-data-contract-public.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /hedvig-lint/lint-baseline/lint-baseline-data-conversations.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /hedvig-lint/lint-baseline/lint-baseline-data-cross-sell-after-claim-closed.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /hedvig-lint/lint-baseline/lint-baseline-data-display-items.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /hedvig-lint/lint-baseline/lint-baseline-data-paying-member.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /hedvig-lint/lint-baseline/lint-baseline-data-product-variant-android.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /hedvig-lint/lint-baseline/lint-baseline-data-product-variant-public.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /hedvig-lint/lint-baseline/lint-baseline-data-settings-datastore-public.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /hedvig-lint/lint-baseline/lint-baseline-data-settings-datastore-test.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /hedvig-lint/lint-baseline/lint-baseline-data-termination.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /hedvig-lint/lint-baseline/lint-baseline-database-android.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /hedvig-lint/lint-baseline/lint-baseline-database-core.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /hedvig-lint/lint-baseline/lint-baseline-database-test.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /hedvig-lint/lint-baseline/lint-baseline-datadog-android.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /hedvig-lint/lint-baseline/lint-baseline-datadog-core.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /hedvig-lint/lint-baseline/lint-baseline-datadog-demo-tracking.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /hedvig-lint/lint-baseline/lint-baseline-design-showcase.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /hedvig-lint/lint-baseline/lint-baseline-design-system-api.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /hedvig-lint/lint-baseline/lint-baseline-design-system-hedvig.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /hedvig-lint/lint-baseline/lint-baseline-design-system-internals.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /hedvig-lint/lint-baseline/lint-baseline-feature-addon-purchase.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /hedvig-lint/lint-baseline/lint-baseline-feature-changeaddress.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /hedvig-lint/lint-baseline/lint-baseline-feature-chat.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /hedvig-lint/lint-baseline/lint-baseline-feature-choose-tier.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /hedvig-lint/lint-baseline/lint-baseline-feature-claim-details.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /hedvig-lint/lint-baseline/lint-baseline-feature-claim-triaging.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /hedvig-lint/lint-baseline/lint-baseline-feature-connect-payment-trustly.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /hedvig-lint/lint-baseline/lint-baseline-feature-cross-sell-after-flow.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /hedvig-lint/lint-baseline/lint-baseline-feature-cross-sell-sheet.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /hedvig-lint/lint-baseline/lint-baseline-feature-delete-account.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /hedvig-lint/lint-baseline/lint-baseline-feature-edit-coinsured.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /hedvig-lint/lint-baseline/lint-baseline-feature-flags-public.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /hedvig-lint/lint-baseline/lint-baseline-feature-flags-test.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /hedvig-lint/lint-baseline/lint-baseline-feature-force-upgrade.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /hedvig-lint/lint-baseline/lint-baseline-feature-forever.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /hedvig-lint/lint-baseline/lint-baseline-feature-help-center.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /hedvig-lint/lint-baseline/lint-baseline-feature-home.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /hedvig-lint/lint-baseline/lint-baseline-feature-image-viewer.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /hedvig-lint/lint-baseline/lint-baseline-feature-impersonation.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /hedvig-lint/lint-baseline/lint-baseline-feature-insurances.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /hedvig-lint/lint-baseline/lint-baseline-feature-login.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /hedvig-lint/lint-baseline/lint-baseline-feature-movingflow.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /hedvig-lint/lint-baseline/lint-baseline-feature-odyssey.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /hedvig-lint/lint-baseline/lint-baseline-feature-payments.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /hedvig-lint/lint-baseline/lint-baseline-feature-profile.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /hedvig-lint/lint-baseline/lint-baseline-feature-terminate-insurance.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /hedvig-lint/lint-baseline/lint-baseline-feature-travel-certificate.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /hedvig-lint/lint-baseline/lint-baseline-forever-ui.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /hedvig-lint/lint-baseline/lint-baseline-initializable.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /hedvig-lint/lint-baseline/lint-baseline-language-android.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /hedvig-lint/lint-baseline/lint-baseline-language-core.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /hedvig-lint/lint-baseline/lint-baseline-language-data.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /hedvig-lint/lint-baseline/lint-baseline-language-migration.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /hedvig-lint/lint-baseline/lint-baseline-language-test.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /hedvig-lint/lint-baseline/lint-baseline-logging-android.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /hedvig-lint/lint-baseline/lint-baseline-logging-public.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /hedvig-lint/lint-baseline/lint-baseline-logging-test.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /hedvig-lint/lint-baseline/lint-baseline-member-reminders-public.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /hedvig-lint/lint-baseline/lint-baseline-member-reminders-test.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /hedvig-lint/lint-baseline/lint-baseline-member-reminders-ui.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /hedvig-lint/lint-baseline/lint-baseline-molecule-android.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /hedvig-lint/lint-baseline/lint-baseline-molecule-public.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /hedvig-lint/lint-baseline/lint-baseline-molecule-test.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /hedvig-lint/lint-baseline/lint-baseline-navigation-activity.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /hedvig-lint/lint-baseline/lint-baseline-navigation-common.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /hedvig-lint/lint-baseline/lint-baseline-navigation-compose-typed.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /hedvig-lint/lint-baseline/lint-baseline-navigation-compose.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /hedvig-lint/lint-baseline/lint-baseline-navigation-core.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /hedvig-lint/lint-baseline/lint-baseline-notification-badge-data-fake.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /hedvig-lint/lint-baseline/lint-baseline-notification-badge-data-public.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /hedvig-lint/lint-baseline/lint-baseline-notification-core.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /hedvig-lint/lint-baseline/lint-baseline-notification-firebase.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /hedvig-lint/lint-baseline/lint-baseline-notification-permission.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /hedvig-lint/lint-baseline/lint-baseline-placeholder.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /hedvig-lint/lint-baseline/lint-baseline-pullrefresh.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /hedvig-lint/lint-baseline/lint-baseline-test-clock.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /hedvig-lint/lint-baseline/lint-baseline-theme.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /hedvig-lint/lint-baseline/lint-baseline-tier-comparison.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /hedvig-lint/lint-baseline/lint-baseline-tracking-core.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /hedvig-lint/lint-baseline/lint-baseline-tracking-datadog.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /hedvig-lint/lint-baseline/lint-baseline-ui-claim-flow.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /hedvig-lint/lint-baseline/lint-baseline-ui-claimflow.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /hedvig-lint/lint-baseline/lint-baseline-ui-emergency.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /hedvig-lint/lint-baseline/lint-baseline-ui-tiers-and-addons.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /hedvig-lint/src/main/kotlin/com/hedvig/android/lint/config/Priorities.kt: -------------------------------------------------------------------------------- 1 | package com.hedvig.android.lint.config 2 | 3 | object Priorities { 4 | const val HIGH = 10 5 | const val NORMAL = 5 6 | const val LOW = 3 7 | const val NONE = 1 8 | } 9 | -------------------------------------------------------------------------------- /hedvig-lint/src/main/kotlin/com/hedvig/android/lint/util/LintOption.kt: -------------------------------------------------------------------------------- 1 | package com.hedvig.android.lint.util 2 | 3 | import com.android.tools.lint.client.api.Configuration 4 | 5 | /** 6 | * A layer of indirection for implementations of option loaders without needing to extend from 7 | * Detector. This goes along with [OptionLoadingDetector]. 8 | */ 9 | interface LintOption { 10 | fun load(configuration: Configuration) 11 | } 12 | -------------------------------------------------------------------------------- /hedvig-lint/src/main/kotlin/com/hedvig/android/lint/util/StringSetLintOption.kt: -------------------------------------------------------------------------------- 1 | package com.hedvig.android.lint.util 2 | 3 | import com.android.tools.lint.client.api.Configuration 4 | import com.android.tools.lint.detector.api.StringOption 5 | 6 | open class StringSetLintOption(private val option: StringOption) : LintOption { 7 | var value: Set = emptySet() 8 | private set 9 | 10 | override fun load(configuration: Configuration) { 11 | value = option.loadAsSet(configuration) 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /hedvig-lint/src/main/resources/META-INF/services/com.android.tools.lint.client.api.IssueRegistry: -------------------------------------------------------------------------------- 1 | com.hedvig.android.lint.HedvigLintRegistry -------------------------------------------------------------------------------- /lokalise-gradle-plugin/gradle.properties: -------------------------------------------------------------------------------- 1 | # Gradle properties are not passed to included builds https://github.com/gradle/gradle/issues/2534 2 | org.gradle.caching=true 3 | org.gradle.configureondemand=true 4 | org.gradle.parallel=true 5 | org.gradle.configuration-cache=true 6 | -------------------------------------------------------------------------------- /lokalise-gradle-plugin/lokalise/src/main/kotlin/com/hedvig/android/lokalise/config/DownloadConfig.kt: -------------------------------------------------------------------------------- 1 | package com.hedvig.android.lokalise.config 2 | 3 | class DownloadConfig( 4 | val stringsOrder: StringsOrder = StringsOrder.A_Z, 5 | val emptyTranslationStrategy: EmptyTranslationStrategy = EmptyTranslationStrategy.REPLACE_WITH_BASE_LANGUAGE, 6 | ) 7 | -------------------------------------------------------------------------------- /lokalise-gradle-plugin/lokalise/src/main/kotlin/com/hedvig/android/lokalise/config/EmptyTranslationStrategy.kt: -------------------------------------------------------------------------------- 1 | package com.hedvig.android.lokalise.config 2 | 3 | @Suppress("unused") 4 | enum class EmptyTranslationStrategy(val value: String) { 5 | REPLACE_WITH_BASE_LANGUAGE("base"), 6 | KEEP_EMPTY("empty"), 7 | SKIP("skip"), 8 | } 9 | -------------------------------------------------------------------------------- /lokalise-gradle-plugin/lokalise/src/main/kotlin/com/hedvig/android/lokalise/config/StringsOrder.kt: -------------------------------------------------------------------------------- 1 | package com.hedvig.android.lokalise.config 2 | 3 | @Suppress("unused") 4 | enum class StringsOrder(val value: String) { 5 | FIRST_ADDED("first_added"), 6 | LAST_ADDED("last_added"), 7 | LAST_UPDATED("last_updated"), 8 | A_Z("a_z"), 9 | Z_A("z_a"), 10 | } 11 | -------------------------------------------------------------------------------- /lokalise-gradle-plugin/settings.gradle.kts: -------------------------------------------------------------------------------- 1 | dependencyResolutionManagement { 2 | repositories { 3 | google() 4 | mavenCentral() 5 | } 6 | versionCatalogs { 7 | create("libs") { 8 | from(files("../gradle/libs.versions.toml")) 9 | } 10 | } 11 | } 12 | 13 | rootProject.name = "lokalise-gradle-plugin" 14 | 15 | include(":lokalise") 16 | -------------------------------------------------------------------------------- /maestro/demo-mode.yaml: -------------------------------------------------------------------------------- 1 | appId: com.hedvig.dev.app 2 | --- 3 | - launchApp: 4 | clearState: true 5 | - tapOn: 6 | id: login_button 7 | - longPressOn: 8 | id: qr_code 9 | - tapOn: 10 | id: positive_button 11 | - assertVisible: 12 | id: welcome_message 13 | - tapOn: 14 | id: PROFILE 15 | - tapOn: 16 | id: logout 17 | - tapOn: 18 | id: positive_button 19 | - assertVisible: 20 | id: login_button -------------------------------------------------------------------------------- /micro-apps/README.md: -------------------------------------------------------------------------------- 1 | ## micro-apps 2 | 3 | ### Directory to be used to host micro-apps to quickly iterate on something 4 | 5 | Or for whatever else one might want to do with a light-weight version of the app, only depending on 6 | specific modules 7 | -------------------------------------------------------------------------------- /micro-apps/design-showcase/README.md: -------------------------------------------------------------------------------- 1 | ## A micro app to quickly test core-design-system and core-ui components 2 | 3 | ### Made test how the m3 design system color mapping works in various m3 components 4 | 5 | Run quickly by using the shared run configuration `Design Showcase` 6 | 7 | ![M3 color system in dark and light mode](../../misc/images/m3_showcase.png "M3 color system in dark and light mode") -------------------------------------------------------------------------------- /micro-apps/design-showcase/src/main/res/drawable-nodpi/ic_pillow_cat.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HedvigInsurance/android/1aa395f47782a3b094129c5c23eee6ec6f9c94a7/micro-apps/design-showcase/src/main/res/drawable-nodpi/ic_pillow_cat.webp -------------------------------------------------------------------------------- /micro-apps/design-showcase/src/main/res/drawable-nodpi/ic_pillow_dog.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HedvigInsurance/android/1aa395f47782a3b094129c5c23eee6ec6f9c94a7/micro-apps/design-showcase/src/main/res/drawable-nodpi/ic_pillow_dog.webp -------------------------------------------------------------------------------- /micro-apps/design-showcase/src/main/res/drawable-nodpi/ic_pillow_home.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HedvigInsurance/android/1aa395f47782a3b094129c5c23eee6ec6f9c94a7/micro-apps/design-showcase/src/main/res/drawable-nodpi/ic_pillow_home.webp -------------------------------------------------------------------------------- /micro-apps/design-showcase/src/main/res/drawable-nodpi/ic_pillow_homeowner.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HedvigInsurance/android/1aa395f47782a3b094129c5c23eee6ec6f9c94a7/micro-apps/design-showcase/src/main/res/drawable-nodpi/ic_pillow_homeowner.webp -------------------------------------------------------------------------------- /micro-apps/design-showcase/src/main/res/values/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | DesignShowcaseActivity.kt 3 | -------------------------------------------------------------------------------- /micro-apps/design-showcase/src/main/res/values/themes.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 |