From 2a7e7110fcf66f5b8de59d2f8285a8e4a1624ee2 Mon Sep 17 00:00:00 2001 From: Mustafa Ozhan Date: Mon, 1 Jul 2024 19:05:27 +0200 Subject: [PATCH 01/89] [Oztechan/CCC#3651] Enable back Check task in develop for caching (#3652) --- .github/workflows/main.yml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index f3b47568b1..879791f1de 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -236,7 +236,6 @@ jobs: Check: runs-on: macos-14 - if: github.ref != 'refs/heads/develop' outputs: status: ${{ steps.status.outputs.status }} steps: @@ -334,7 +333,7 @@ jobs: - name: Notify slack fail if: false == (needs.GradleBuild.outputs.status == 'success') || false == (needs.XCodeBuild.outputs.status == 'success') || - (false == (needs.Check.outputs.status == 'success') && github.ref != 'refs/heads/develop')|| + false == (needs.Check.outputs.status == 'success') || false == (needs.Coverage.outputs.status == 'success') || false == (needs.CodeAnalysis.outputs.status == 'success') || (false == (needs.DistributeAndroid.outputs.status == 'success') && github.event_name == 'push') || From 22cfb868b01e2b9367d79c00b9149a7efe1dc4d6 Mon Sep 17 00:00:00 2001 From: Mustafa Ozhan Date: Mon, 1 Jul 2024 23:03:50 +0200 Subject: [PATCH 02/89] [Oztechan/CCC#3649] Run both iOS configurations in PR jobs (#3650) * [Oztechan/CCC#3649] Run both iOS configurations in PR jobs * [Oztechan/CCC#3649] Run both iOS configurations in PR jobs --- .github/workflows/main.yml | 2 +- ios/fastlane/Fastfile | 23 ++++++++++++++++++++--- 2 files changed, 21 insertions(+), 4 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 879791f1de..14473494e9 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -183,7 +183,7 @@ jobs: - name: Build working-directory: ios - run: fastlane build + run: fastlane buildAll - name: Upload iOS Artifacts uses: actions/upload-artifact@v4.3.3 diff --git a/ios/fastlane/Fastfile b/ios/fastlane/Fastfile index c9f86876aa..28bb4d2b1f 100644 --- a/ios/fastlane/Fastfile +++ b/ios/fastlane/Fastfile @@ -50,7 +50,23 @@ platform :ios do add_test_devices build_project( match_type: "adhoc", - profile: "match AdHoc com.oztechan.ccc" + profile: "match AdHoc com.oztechan.ccc", + configuration: "Release" + ) + end + + lane :buildAll do + install_certificate_and_profile(match_type: "adhoc") + add_test_devices + build_project( + match_type: "adhoc", + profile: "match AdHoc com.oztechan.ccc", + configuration: "Release" + ) + build_project( + match_type: "adhoc", + profile: "match AdHoc com.oztechan.ccc", + configuration: "Debug" ) end @@ -59,7 +75,8 @@ platform :ios do add_test_devices build_project( match_type: "appstore", - profile: "match AppStore com.oztechan.ccc" + profile: "match AppStore com.oztechan.ccc", + configuration: "Release" ) pilot(skip_waiting_for_build_processing: true) upload_crashlytics_symbols @@ -119,7 +136,7 @@ platform :ios do gym( workspace: "CCC.xcworkspace", scheme: "CCC", - configuration: "Release", + configuration: options[:configuration], xcargs: "-allowProvisioningUpdates CODE_SIGN_STYLE=Manual", codesigning_identity: "Apple Distribution: Mustafa Ozhan (Q5WB95G58X)", export_method: method, From 66a89c2f264957966c4c355892dc562c27ecf7f8 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 1 Jul 2024 23:04:13 +0200 Subject: [PATCH 03/89] [Oztechan/CCC#1457] Lock file maintenance (#3646) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: Mustafa Ozhan --- ios/Gemfile.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/ios/Gemfile.lock b/ios/Gemfile.lock index 4c675f2cf9..dd560a174f 100644 --- a/ios/Gemfile.lock +++ b/ios/Gemfile.lock @@ -10,8 +10,8 @@ GEM artifactory (3.0.17) atomos (0.1.3) aws-eventstream (1.3.0) - aws-partitions (1.947.0) - aws-sdk-core (3.199.0) + aws-partitions (1.949.0) + aws-sdk-core (3.200.0) aws-eventstream (~> 1, >= 1.3.0) aws-partitions (~> 1, >= 1.651.0) aws-sigv4 (~> 1.8) @@ -19,7 +19,7 @@ GEM aws-sdk-kms (1.87.0) aws-sdk-core (~> 3, >= 3.199.0) aws-sigv4 (~> 1.1) - aws-sdk-s3 (1.154.0) + aws-sdk-s3 (1.155.0) aws-sdk-core (~> 3, >= 3.199.0) aws-sdk-kms (~> 1) aws-sigv4 (~> 1.8) From 2faf85ec96437ee5bec4e3047240617a021c7312 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 2 Jul 2024 09:59:06 +0200 Subject: [PATCH 04/89] [Oztechan/CCC#1457] Update lifecycle to v2.8.3 (#3653) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: Mustafa Ozhan --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index fe9f6374e2..22488c4262 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -34,7 +34,7 @@ coroutines = "1.8.1" billing = "6.2.1" leakCanary = "2.14" sqlDelight = "1.5.5" -lifecycle = "2.8.2" +lifecycle = "2.8.3" mokoResources = "0.24.1" buildKonfig = "0.15.1" splashScreen = "1.0.1" From 91e7bc604a83b12f54510515b3e417c20c45539b Mon Sep 17 00:00:00 2001 From: Mustafa Ozhan Date: Thu, 4 Jul 2024 00:27:36 +0200 Subject: [PATCH 05/89] [Oztechan/CCC#2579] Remove moko detekt task dependency (#2582) --- client/core/res/client-core-res.gradle.kts | 7 ------- 1 file changed, 7 deletions(-) diff --git a/client/core/res/client-core-res.gradle.kts b/client/core/res/client-core-res.gradle.kts index 8f07949500..1679c1f580 100644 --- a/client/core/res/client-core-res.gradle.kts +++ b/client/core/res/client-core-res.gradle.kts @@ -1,5 +1,3 @@ -import io.gitlab.arturbosch.detekt.Detekt - plugins { libs.plugins.apply { alias(kotlinMultiplatform) @@ -54,8 +52,3 @@ multiplatformResources { resourcesPackage.set(Modules.Client.Core.res.packageName) resourcesClassName.set(Modules.Client.Core.res.frameworkName) } - -// todo https://github.com/icerockdev/moko-resources/issues/421 -tasks.withType { - dependsOn("generateMRcommonMain") -} From deee3eb4265585b939736af61ea7561c3850aba8 Mon Sep 17 00:00:00 2001 From: Mustafa Ozhan Date: Thu, 4 Jul 2024 00:28:10 +0200 Subject: [PATCH 06/89] [Oztechan/CCC#2580] Remove additional srcDirs for android (#2583) --- client/core/res/client-core-res.gradle.kts | 5 ----- 1 file changed, 5 deletions(-) diff --git a/client/core/res/client-core-res.gradle.kts b/client/core/res/client-core-res.gradle.kts index 1679c1f580..2ce5f5bfd8 100644 --- a/client/core/res/client-core-res.gradle.kts +++ b/client/core/res/client-core-res.gradle.kts @@ -41,11 +41,6 @@ android { targetCompatibility = JAVA_VERSION } } - - // Todo https://github.com/icerockdev/moko-resources/issues/510 - sourceSets { - getByName("main").java.srcDirs("build/generated/moko/androidMain/src") - } } multiplatformResources { From 146575e7185920ed20f530639ab9c10f1dad6295 Mon Sep 17 00:00:00 2001 From: Mustafa Ozhan Date: Sat, 6 Jul 2024 14:01:51 +0200 Subject: [PATCH 07/89] [Oztechan/CCC#3660] Add Separate Firebase App IDs for iOS debug and release versions (#3661) --- .github/workflows/main.yml | 3 ++- .github/workflows/release.yml | 3 ++- ios/fastlane/Fastfile | 2 +- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 14473494e9..ae1dd1e6d0 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -46,7 +46,8 @@ env: APP_STORE_CONNECT_ISSUER_ID: ${{ secrets.APP_STORE_CONNECT_ISSUER_ID }} APP_STORE_CONNECT_KEY_CONTENT: ${{ secrets.APP_STORE_CONNECT_KEY_CONTENT }} APP_STORE_CONNECT_KEY_ID: ${{ secrets.APP_STORE_CONNECT_KEY_ID }} - IOS_GOOGLE_FIREBASE_APP_ID: ${{ secrets.IOS_GOOGLE_FIREBASE_APP_ID }} + IOS_RELEASE_FIREBASE_APP_ID: ${{ secrets.IOS_RELEASE_FIREBASE_APP_ID }} + IOS_DEBUG_FIREBASE_APP_ID: ${{ secrets.IOS_DEBUG_FIREBASE_APP_ID }} FIREBASE_CLI_TOKEN: ${{ secrets.FIREBASE_CLI_TOKEN }} GIT_AUTHORIZATION: ${{ secrets.GIT_AUTHORIZATION }} SECRET_PASSWORD: ${{ secrets.SECRET_PASSWORD }} diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 0451b1482d..3a189d23c6 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -41,7 +41,8 @@ env: APP_STORE_CONNECT_ISSUER_ID: ${{ secrets.APP_STORE_CONNECT_ISSUER_ID }} APP_STORE_CONNECT_KEY_CONTENT: ${{ secrets.APP_STORE_CONNECT_KEY_CONTENT }} APP_STORE_CONNECT_KEY_ID: ${{ secrets.APP_STORE_CONNECT_KEY_ID }} - IOS_GOOGLE_FIREBASE_APP_ID: ${{ secrets.IOS_GOOGLE_FIREBASE_APP_ID }} + IOS_RELEASE_FIREBASE_APP_ID: ${{ secrets.IOS_RELEASE_FIREBASE_APP_ID }} + IOS_DEBUG_FIREBASE_APP_ID: ${{ secrets.IOS_DEBUG_FIREBASE_APP_ID }} FIREBASE_CLI_TOKEN: ${{ secrets.FIREBASE_CLI_TOKEN }} GIT_AUTHORIZATION: ${{ secrets.GIT_AUTHORIZATION }} SECRET_PASSWORD: ${{ secrets.SECRET_PASSWORD }} diff --git a/ios/fastlane/Fastfile b/ios/fastlane/Fastfile index 28bb4d2b1f..32a5f7b670 100644 --- a/ios/fastlane/Fastfile +++ b/ios/fastlane/Fastfile @@ -84,7 +84,7 @@ platform :ios do lane :distribute do firebase_app_distribution( - app: ENV["IOS_GOOGLE_FIREBASE_APP_ID"], + app: ENV["IOS_RELEASE_FIREBASE_APP_ID"], groups: "QA", release_notes: changelog_from_git_commits(commits_count: 1), firebase_cli_token: ENV["FIREBASE_CLI_TOKEN"], From eff7523a8f48c61fbc14733285c43a4fbfde3f9f Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 6 Jul 2024 16:28:19 +0200 Subject: [PATCH 08/89] [Oztechan/CCC#1457] Update Git Submodules (#3606) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: Mustafa Ozhan --- submodule/parsermob | 2 +- submodule/scopemob | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/submodule/parsermob b/submodule/parsermob index 1ad0858866..da7db61e51 160000 --- a/submodule/parsermob +++ b/submodule/parsermob @@ -1 +1 @@ -Subproject commit 1ad0858866fc26dd37cf2174854533881ec777e9 +Subproject commit da7db61e51aca9b13f4b510ab91081e59048d217 diff --git a/submodule/scopemob b/submodule/scopemob index cefe5c7d18..54491efce9 160000 --- a/submodule/scopemob +++ b/submodule/scopemob @@ -1 +1 @@ -Subproject commit cefe5c7d180225f90fd2a1d1018a44c8159b55e2 +Subproject commit 54491efce9d39c74e279ed9b53052d4252480049 From 712f05233fbfd56f590fdee93ad7acfcd870e715 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 6 Jul 2024 16:28:33 +0200 Subject: [PATCH 09/89] [Oztechan/CCC#1457] Update actions/upload-artifact action to v4.3.4 (#3659) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: Mustafa Ozhan --- .github/workflows/main.yml | 4 ++-- .github/workflows/release.yml | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index ae1dd1e6d0..96085249d8 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -85,7 +85,7 @@ jobs: run: ./gradlew assemble - name: Upload Android Artifacts - uses: actions/upload-artifact@v4.3.3 + uses: actions/upload-artifact@v4.3.4 if: github.event_name == 'push' with: name: androidArtifacts @@ -187,7 +187,7 @@ jobs: run: fastlane buildAll - name: Upload iOS Artifacts - uses: actions/upload-artifact@v4.3.3 + uses: actions/upload-artifact@v4.3.4 if: github.event_name == 'push' with: name: iOSArtifacts diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 3a189d23c6..a735941d16 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -80,19 +80,19 @@ jobs: run: ./gradlew :android:app:bundleRelease :backend:app:jar --parallel - name: Upload Google App Bundle - uses: actions/upload-artifact@v4.3.3 + uses: actions/upload-artifact@v4.3.4 with: name: googleBundle path: android/app/build/outputs/bundle/googleRelease/app-google-release.aab - name: Upload Huawei App Bundle - uses: actions/upload-artifact@v4.3.3 + uses: actions/upload-artifact@v4.3.4 with: name: huaweiBundle path: android/app/build/outputs/bundle/huaweiRelease/app-huawei-release.aab - name: Upload Backend Jar - uses: actions/upload-artifact@v4.3.3 + uses: actions/upload-artifact@v4.3.4 with: name: backendJar path: backend/app/build/libs/app-*.jar From 710fe832dfb00f417f4160d7f0b241ae000177dd Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 6 Jul 2024 16:28:44 +0200 Subject: [PATCH 10/89] [Oztechan/CCC#1457] Update actions/download-artifact action to v4.1.8 (#3658) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: Mustafa Ozhan --- .github/workflows/main.yml | 4 ++-- .github/workflows/release.yml | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 96085249d8..5a8d3a617b 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -115,7 +115,7 @@ jobs: uses: actions/checkout@v4.1.7 - name: Download Android Artifacts - uses: actions/download-artifact@v4.1.7 + uses: actions/download-artifact@v4.1.8 with: name: androidArtifacts @@ -214,7 +214,7 @@ jobs: uses: actions/checkout@v4.1.7 - name: Download iOS IPA - uses: actions/download-artifact@v4.1.7 + uses: actions/download-artifact@v4.1.8 with: name: iOSArtifacts path: ios diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index a735941d16..25ec4e1267 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -112,7 +112,7 @@ jobs: uses: actions/checkout@v4.1.7 - name: Download App Bundle - uses: actions/download-artifact@v4.1.7 + uses: actions/download-artifact@v4.1.8 with: name: googleBundle @@ -155,7 +155,7 @@ jobs: steps: - name: Download App Bundle - uses: actions/download-artifact@v4.1.7 + uses: actions/download-artifact@v4.1.8 with: name: huaweiBundle @@ -186,7 +186,7 @@ jobs: steps: - name: Download Backend Jar - uses: actions/download-artifact@v4.1.7 + uses: actions/download-artifact@v4.1.8 with: name: backendJar path: artifact From f7b3804b06a9da6617bb773c191c64e942e0549e Mon Sep 17 00:00:00 2001 From: Mustafa Ozhan Date: Sat, 6 Jul 2024 18:55:08 +0200 Subject: [PATCH 11/89] [Oztechan/CCC#3662] Move androidx.navigation.safeargs to kotlin version (#3663) --- android/ui/mobile/android-ui-mobile.gradle.kts | 2 +- gradle/libs.versions.toml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/android/ui/mobile/android-ui-mobile.gradle.kts b/android/ui/mobile/android-ui-mobile.gradle.kts index 192bee483d..222816086d 100644 --- a/android/ui/mobile/android-ui-mobile.gradle.kts +++ b/android/ui/mobile/android-ui-mobile.gradle.kts @@ -5,7 +5,7 @@ plugins { libs.plugins.apply { alias(androidLibrary) alias(kotlinAndroid) - alias(safeArgs) // todo can be removed once compose migration done + alias(safeArgsKotlin) // todo can be removed once compose migration done alias(jetbrainsCompose) alias(kotlinPluginCompose) } diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 22488c4262..9cf7c703ae 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -118,7 +118,7 @@ kotlinJvm = { id = "org.jetbrains.kotlin.jvm", version.ref = "kotlin" } kotlinAndroid = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" } androidApplication = { id = "com.android.application", version.ref = "androidGradlePlugin" } androidLibrary = { id = "com.android.library", version.ref = "androidGradlePlugin" } -safeArgs = { id = "androidx.navigation.safeargs", version.ref = "navigation" } +safeArgsKotlin = { id = "androidx.navigation.safeargs.kotlin", version.ref = "navigation" } buildKonfig = { id = "com.codingfeline.buildkonfig", version.ref = "buildKonfig" } firebaseCrashlyticsPlugin = { id = "com.google.firebase.crashlytics", version.ref = "firebaseCrashlyticsPlugin" } googleServices = { id = "com.google.gms.google-services", version.ref = "googleServices" } From 72394b6bed9485ebb14c46dfbb698b1ab5f19eb3 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 8 Jul 2024 22:51:05 +0200 Subject: [PATCH 12/89] [Oztechan/CCC#1457] Lock file maintenance (#3664) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: Mustafa Ozhan --- ios/Gemfile.lock | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/ios/Gemfile.lock b/ios/Gemfile.lock index dd560a174f..5760000f37 100644 --- a/ios/Gemfile.lock +++ b/ios/Gemfile.lock @@ -10,19 +10,19 @@ GEM artifactory (3.0.17) atomos (0.1.3) aws-eventstream (1.3.0) - aws-partitions (1.949.0) - aws-sdk-core (3.200.0) + aws-partitions (1.952.0) + aws-sdk-core (3.201.1) aws-eventstream (~> 1, >= 1.3.0) aws-partitions (~> 1, >= 1.651.0) aws-sigv4 (~> 1.8) jmespath (~> 1, >= 1.6.1) - aws-sdk-kms (1.87.0) - aws-sdk-core (~> 3, >= 3.199.0) - aws-sigv4 (~> 1.1) - aws-sdk-s3 (1.155.0) - aws-sdk-core (~> 3, >= 3.199.0) + aws-sdk-kms (1.88.0) + aws-sdk-core (~> 3, >= 3.201.0) + aws-sigv4 (~> 1.5) + aws-sdk-s3 (1.156.0) + aws-sdk-core (~> 3, >= 3.201.0) aws-sdk-kms (~> 1) - aws-sigv4 (~> 1.8) + aws-sigv4 (~> 1.5) aws-sigv4 (1.8.0) aws-eventstream (~> 1, >= 1.0.2) babosa (1.0.4) From 7f8c2a989dc7d9065a3ef171911f7277d9ce56b0 Mon Sep 17 00:00:00 2001 From: Mustafa Ozhan Date: Wed, 10 Jul 2024 10:09:04 +0200 Subject: [PATCH 13/89] [Oztechan/CCC#3666] Update Google Play Core to Core Review (#3667) --- android/ui/mobile/android-ui-mobile.gradle.kts | 2 +- gradle/libs.versions.toml | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/android/ui/mobile/android-ui-mobile.gradle.kts b/android/ui/mobile/android-ui-mobile.gradle.kts index 222816086d..58fff12edd 100644 --- a/android/ui/mobile/android-ui-mobile.gradle.kts +++ b/android/ui/mobile/android-ui-mobile.gradle.kts @@ -68,7 +68,7 @@ dependencies { } android.google.apply { - DeviceFlavour.GOOGLE.implementation(playCore) + DeviceFlavour.GOOGLE.implementation(playCoreReview) } } diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 9cf7c703ae..827ee49ac6 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -28,7 +28,7 @@ googleUmp = "2.2.0" huaweiAds = "3.4.72.301" huaweiOsm = "1.3.35" navigation = "2.7.7" -playCore = "1.10.3" +playCoreReview = "2.0.1" kotlinXDateTime = "0.6.0" coroutines = "1.8.1" billing = "6.2.1" @@ -90,7 +90,7 @@ android-anrWatchDog = { module = "com.github.anrwatchdog:anrwatchdog", version.r android-google-billing = { module = "com.android.billingclient:billing", version.ref = "billing" } android-google-googleAds = { module = "com.google.android.gms:play-services-ads", version.ref = "googleAds" } android-google-ump = { module = "com.google.android.ump:user-messaging-platform", version.ref = "googleUmp" } -android-google-playCore = { module = "com.google.android.play:core", version.ref = "playCore" } +android-google-playCoreReview = { module = "com.google.android.play:review", version.ref = "playCoreReview" } # ANDROID HUAWEI android-huawei-huaweiAds = { module = "com.huawei.hms:ads-prime", version.ref = "huaweiAds" } From fec005568656ee064574f5b11e0f5a56892e91ea Mon Sep 17 00:00:00 2001 From: Mustafa Ozhan Date: Wed, 10 Jul 2024 12:24:20 +0200 Subject: [PATCH 14/89] [Oztechan/CCC#3656] Add debug postfix to the bundle identifier of iOS app (#3657) * [Oztechan/CCC#3656] Add debug postfix to the bundle identifier of iOS app * [Oztechan/CCC#3656] Add debug postfix to the bundle identifier of iOS app * [Oztechan/CCC#3656] Add debug postfix to the bundle identifier of iOS app * [Oztechan/CCC#3656] Add debug postfix to the bundle identifier of iOS app * [Oztechan/CCC#3656] Add debug postfix to the bundle identifier of iOS app * [Oztechan/CCC#3656] Add debug postfix to the bundle identifier of iOS app * [Oztechan/CCC#3656] Add debug postfix to the bundle identifier of iOS app * [Oztechan/CCC#3656] Add debug postfix to the bundle identifier of iOS app --- ios/CCC.xcodeproj/project.pbxproj | 2 +- ios/fastlane/Appfile | 2 +- ios/fastlane/Fastfile | 23 +++++++++++++++++------ 3 files changed, 19 insertions(+), 8 deletions(-) diff --git a/ios/CCC.xcodeproj/project.pbxproj b/ios/CCC.xcodeproj/project.pbxproj index ecb0a4c853..d6dad9b858 100644 --- a/ios/CCC.xcodeproj/project.pbxproj +++ b/ios/CCC.xcodeproj/project.pbxproj @@ -739,7 +739,7 @@ "$(inherited)", "-lsqlite3", ); - PRODUCT_BUNDLE_IDENTIFIER = com.oztechan.ccc; + PRODUCT_BUNDLE_IDENTIFIER = com.oztechan.ccc.debug; PRODUCT_NAME = "$(TARGET_NAME)_I"; SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; diff --git a/ios/fastlane/Appfile b/ios/fastlane/Appfile index 32f70b7c70..f3f00f8fb7 100644 --- a/ios/fastlane/Appfile +++ b/ios/fastlane/Appfile @@ -1,4 +1,4 @@ -app_identifier("com.oztechan.ccc") # The bundle identifier of your app +app_identifier("com.oztechan.ccc", "com.oztechan.ccc.debug") # The bundle identifier of your app apple_id("development.oztechan@gmail.com") # Your Apple email address itc_team_id("124231627") # App Store Connect Team ID diff --git a/ios/fastlane/Fastfile b/ios/fastlane/Fastfile index 32a5f7b670..3903c2ad08 100644 --- a/ios/fastlane/Fastfile +++ b/ios/fastlane/Fastfile @@ -42,6 +42,18 @@ def get_method_from_match_type(match_type) return method end +def get_identifier_from_configuration(configuration) + identifier = "" + + if configuration == "Release" + identifier = "com.oztechan.ccc" + else + identifier = "com.oztechan.ccc.debug" + end + + return identifier +end + platform :ios do desc "iOS Lanes" @@ -65,7 +77,7 @@ platform :ios do ) build_project( match_type: "adhoc", - profile: "match AdHoc com.oztechan.ccc", + profile: "match AdHoc com.oztechan.ccc.debug", configuration: "Debug" ) end @@ -107,6 +119,7 @@ platform :ios do ensure_temp_keychain(keychain_name, keychain_password) match( + app_identifier: ["com.oztechan.ccc", "com.oztechan.ccc.debug"], type: options[:match_type], readonly: is_ci, git_basic_authorization: Base64.strict_encode64(ENV["GIT_AUTHORIZATION"]), @@ -127,10 +140,11 @@ platform :ios do lane :build_project do |options| match_type = options[:match_type] method = get_method_from_match_type(match_type) + identifier = get_identifier_from_configuration(options[:configuration]) update_code_signing_settings(use_automatic_signing: false) update_project_provisioning( - profile: ENV["sigh_com.oztechan.ccc_" + match_type + "_profile-path"] + profile: ENV["sigh_" + identifier + "_" + match_type + "_profile-path"] ) xcodes(select_for_current_build_only: true) gym( @@ -141,10 +155,7 @@ platform :ios do codesigning_identity: "Apple Distribution: Mustafa Ozhan (Q5WB95G58X)", export_method: method, export_options: { - signingStyle: "manual", - provisioningProfiles: { - "com.oztechan.ccc": options[:profile] - } + signingStyle: "manual" }, ) end From c7f2b8e6024b6e8967bb3f75687184d5f27a498c Mon Sep 17 00:00:00 2001 From: Mustafa Ozhan Date: Fri, 12 Jul 2024 10:22:47 +0200 Subject: [PATCH 15/89] [Oztechan/CCC#3673] Run develop Job every day (#3674) * [Oztechan/CCC#3673] Run develop Job every Monday * [Oztechan/CCC#3673] Run develop Job every day --- .github/workflows/main.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 5a8d3a617b..86b0dd7536 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -5,6 +5,8 @@ on: branches: - develop pull_request: + schedule: + - cron: '0 0 * * *' # At 00:00 every day concurrency: group: ${{ github.ref == 'refs/heads/develop' && 'develop' || github.ref }} From 5b90f0a4032f5d0b335bb42b3bdf74b23c77ebb9 Mon Sep 17 00:00:00 2001 From: Mustafa Ozhan Date: Fri, 12 Jul 2024 20:53:30 +0200 Subject: [PATCH 16/89] [Oztechan/CCC#3654] Upload both configurations of iOS app to Firebase app distribution (#3655) * [Oztechan/CCC#3654] Upload both configurations of iOS app to Firebase app distribution * [Oztechan/CCC#3654] Upload both configurations of iOS app to Firebase app distribution * [Oztechan/CCC#3654] Upload both configurations of iOS app to Firebase app distribution * [Oztechan/CCC#3654] Upload both configurations of iOS app to Firebase app distribution --- .github/workflows/main.yml | 3 ++- ios/fastlane/Fastfile | 19 ++++++++----------- 2 files changed, 10 insertions(+), 12 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 86b0dd7536..f9280a58d5 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -195,6 +195,7 @@ jobs: name: iOSArtifacts path: | ios/CCC.ipa + ios/CCC_I.ipa ios/CCC.app.dSYM.zip - name: Cancel other jobs if this fails @@ -226,7 +227,7 @@ jobs: working-directory: ios run: | sudo chown -R $(whoami) /var/lib/gems/3.0.0 - fastlane distribute + fastlane distributeAll - name: Delete iOS IPA uses: geekyeggo/delete-artifact@v5.0.0 diff --git a/ios/fastlane/Fastfile b/ios/fastlane/Fastfile index 3903c2ad08..7b79c365cc 100644 --- a/ios/fastlane/Fastfile +++ b/ios/fastlane/Fastfile @@ -57,16 +57,6 @@ end platform :ios do desc "iOS Lanes" - lane :build do - install_certificate_and_profile(match_type: "adhoc") - add_test_devices - build_project( - match_type: "adhoc", - profile: "match AdHoc com.oztechan.ccc", - configuration: "Release" - ) - end - lane :buildAll do install_certificate_and_profile(match_type: "adhoc") add_test_devices @@ -94,7 +84,7 @@ platform :ios do upload_crashlytics_symbols end - lane :distribute do + lane :distributeAll do firebase_app_distribution( app: ENV["IOS_RELEASE_FIREBASE_APP_ID"], groups: "QA", @@ -102,6 +92,13 @@ platform :ios do firebase_cli_token: ENV["FIREBASE_CLI_TOKEN"], ipa_path: "../ios/CCC.ipa" ) + firebase_app_distribution( + app: ENV["IOS_DEBUG_FIREBASE_APP_ID"], + groups: "QA", + release_notes: changelog_from_git_commits(commits_count: 1), + firebase_cli_token: ENV["FIREBASE_CLI_TOKEN"], + ipa_path: "../ios/CCC_I.ipa" + ) upload_crashlytics_symbols end From c505c14bf07c0edd9a4db415033a35bec2358634 Mon Sep 17 00:00:00 2001 From: Mustafa Ozhan Date: Fri, 12 Jul 2024 22:12:01 +0200 Subject: [PATCH 17/89] [Oztechan/CCC#3669] Add lint task in CodeAnalysis job (#3670) --- .github/workflows/main.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index f9280a58d5..5c481bb838 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -310,8 +310,8 @@ jobs: - name: Setup Gradle Repo uses: Oztechan/Global/actions/setup-gradle-repo@d5c2d633506a792e53d7a273d90dde429df3bba7 - - name: Detekt - run: ./gradlew detektAll + - name: Detekt & Lint + run: ./gradlew detektAll lint - name: SwiftLint uses: norio-nomura/action-swiftlint@3.2.1 From 8bbb25a3179d0b8faef19e63554d849ff5222c51 Mon Sep 17 00:00:00 2001 From: Mustafa Ozhan Date: Sat, 13 Jul 2024 09:18:51 +0200 Subject: [PATCH 18/89] [Oztechan/CCC#3671] Replace Check job with Test (#3672) * [Oztechan/CCC#3671] Replace Check job with Test * [Oztechan/CCC#3671] Replace Check job with Test --- .github/workflows/main.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 5c481bb838..db9038ca94 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -238,7 +238,7 @@ jobs: id: status run: echo "status=success" >> $GITHUB_OUTPUT - Check: + Test: runs-on: macos-14 outputs: status: ${{ steps.status.outputs.status }} @@ -247,8 +247,8 @@ jobs: - name: Setup Gradle Repo uses: Oztechan/Global/actions/setup-gradle-repo@d5c2d633506a792e53d7a273d90dde429df3bba7 - - name: Run Check - run: ./gradlew check + - name: Test + run: ./gradlew test - name: Cancel other jobs if this fails if: failure() @@ -330,7 +330,7 @@ jobs: Notify: runs-on: ubuntu-22.04 - needs: [ GradleBuild, XCodeBuild, Check, Coverage, CodeAnalysis, DistributeAndroid, DistributeIOS ] + needs: [ GradleBuild, XCodeBuild, Test, Coverage, CodeAnalysis, DistributeAndroid, DistributeIOS ] if: always() steps: From 81ccfbed7dcce66070fd453b28d77a2fe7d05eb4 Mon Sep 17 00:00:00 2001 From: Mustafa Ozhan Date: Sat, 13 Jul 2024 10:35:02 +0200 Subject: [PATCH 19/89] [Oztechan/CCC#3679] Upload builds to Firebase on schedule (#3680) --- .github/workflows/main.yml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index db9038ca94..0f4f957c95 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -88,7 +88,7 @@ jobs: - name: Upload Android Artifacts uses: actions/upload-artifact@v4.3.4 - if: github.event_name == 'push' + if: github.event_name == 'push' || github.event_name == 'schedule' with: name: androidArtifacts path: | @@ -108,7 +108,7 @@ jobs: DistributeAndroid: runs-on: ubuntu-22.04 needs: [ GradleBuild ] - if: github.event_name == 'push' + if: github.event_name == 'push' || github.event_name == 'schedule' outputs: status: ${{ steps.status.outputs.status }} steps: @@ -190,7 +190,7 @@ jobs: - name: Upload iOS Artifacts uses: actions/upload-artifact@v4.3.4 - if: github.event_name == 'push' + if: github.event_name == 'push' || github.event_name == 'schedule' with: name: iOSArtifacts path: | @@ -209,7 +209,7 @@ jobs: DistributeIOS: runs-on: ubuntu-22.04 needs: [ XCodeBuild ] - if: github.event_name == 'push' + if: github.event_name == 'push' || github.event_name == 'schedule' outputs: status: ${{ steps.status.outputs.status }} steps: @@ -340,8 +340,8 @@ jobs: false == (needs.Check.outputs.status == 'success') || false == (needs.Coverage.outputs.status == 'success') || false == (needs.CodeAnalysis.outputs.status == 'success') || - (false == (needs.DistributeAndroid.outputs.status == 'success') && github.event_name == 'push') || - (false == (needs.DistributeIOS.outputs.status == 'success') && github.event_name == 'push') + (false == (needs.DistributeAndroid.outputs.status == 'success') && (github.event_name == 'push' || github.event_name == 'schedule')) || + (false == (needs.DistributeIOS.outputs.status == 'success') && (github.event_name == 'push' || github.event_name == 'schedule')) uses: voxmedia/github-action-slack-notify-build@v1.6.0 with: channel: ccc-github From 7db713721d319653be3081a2bdf28005574c44a6 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 13 Jul 2024 23:36:32 +0200 Subject: [PATCH 20/89] [Oztechan/CCC#1457] Update androidGradlePlugin to v8.5.1 (#3676) * [Oztechan/CCC#1457] Update androidGradlePlugin to v8.5.1 Co-authored-by: Mustafa Ozhan * [Oztechan/CCC#1457] Update submodule/basemob digest to b260f76 (#3677) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: Mustafa Ozhan * [Oztechan/CCC#1457] Update Git Submodules (#3678) * [Oztechan/CCC#3679] Upload builds to Firebase on schedule (#3680) * [Oztechan/CCC#1457] Update Git Submodules Co-authored-by: Mustafa Ozhan --------- Co-authored-by: Mustafa Ozhan Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --------- Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: Mustafa Ozhan --- gradle/libs.versions.toml | 2 +- submodule/basemob | 2 +- submodule/logmob | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 827ee49ac6..9e2d8932ce 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,7 +1,7 @@ [versions] kotlin = "2.0.0" -androidGradlePlugin = "8.5.0" +androidGradlePlugin = "8.5.1" jetbrainsCompose = "1.6.11" glance = "1.1.0" mokkery = "2.1.1" diff --git a/submodule/basemob b/submodule/basemob index 34eb65f466..b260f76c19 160000 --- a/submodule/basemob +++ b/submodule/basemob @@ -1 +1 @@ -Subproject commit 34eb65f466d9072bd78063954446961b59e4c194 +Subproject commit b260f76c191f213388e702cc2c83e93ce43ca5e1 diff --git a/submodule/logmob b/submodule/logmob index 9b30a8c6e4..e0eb22cb29 160000 --- a/submodule/logmob +++ b/submodule/logmob @@ -1 +1 @@ -Subproject commit 9b30a8c6e4bd35d2e90bc1b114c1f9867e5971c5 +Subproject commit e0eb22cb290c5173b23738b56470b2b006a95da3 From 2cb9ad8766624bfb2f17fb94e312d512bca438ca Mon Sep 17 00:00:00 2001 From: Mustafa Ozhan Date: Sat, 13 Jul 2024 23:55:13 +0200 Subject: [PATCH 21/89] [Oztechan/CCC#3685] Create a weekly Build workflow for running all tasks (#3686) --- .github/workflows/build.yml | 97 +++++++++++++++++++++++++++++++++++++ 1 file changed, 97 insertions(+) create mode 100644 .github/workflows/build.yml diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml new file mode 100644 index 0000000000..01382f1629 --- /dev/null +++ b/.github/workflows/build.yml @@ -0,0 +1,97 @@ +name: Build + +on: + schedule: + - cron: '0 0 * * 0' # Runs every Sunday at midnight UTC + +env: + BASE_URL_BACKEND: ${{ secrets.BASE_URL_BACKEND }} + BASE_URL_API: ${{ secrets.BASE_URL_API }} + BASE_URL_API_PREMIUM: ${{ secrets.BASE_URL_API_PREMIUM }} + API_KEY_PREMIUM: ${{ secrets.API_KEY_PREMIUM }} + ANDROID_KEY_STORE_PATH: ${{ secrets.ANDROID_KEY_STORE_PATH }} + ANDROID_STORE_PASSWORD: ${{ secrets.ANDROID_STORE_PASSWORD }} + ANDROID_KEY_ALIAS: ${{ secrets.ANDROID_KEY_ALIAS }} + ANDROID_KEY_PASSWORD: ${{ secrets.ANDROID_KEY_PASSWORD }} + RELEASE_ADVERTISEMENT_ID_GOOGLE: ${{ secrets.RELEASE_ADVERTISEMENT_ID_GOOGLE }} + DEBUG_ADVERTISEMENT_ID_GOOGLE: ${{ secrets.DEBUG_ADVERTISEMENT_ID_GOOGLE }} + RELEASE_ADVERTISEMENT_ID_HUAWEI: ${{ secrets.RELEASE_ADVERTISEMENT_ID_HUAWEI }} + DEBUG_ADVERTISEMENT_ID_HUAWEI: ${{ secrets.DEBUG_ADVERTISEMENT_ID_HUAWEI }} + GOOGLE_BANNER_AD_UNIT_ID_CALCULATOR_RELEASE: ${{ secrets.GOOGLE_BANNER_AD_UNIT_ID_CALCULATOR_RELEASE }} + GOOGLE_BANNER_AD_UNIT_ID_SETTINGS_RELEASE: ${{ secrets.GOOGLE_BANNER_AD_UNIT_ID_SETTINGS_RELEASE }} + GOOGLE_BANNER_AD_UNIT_ID_CURRENCIES_RELEASE: ${{ secrets.GOOGLE_BANNER_AD_UNIT_ID_CURRENCIES_RELEASE }} + GOOGLE_INTERSTITIAL_AD_ID_RELEASE: ${{ secrets.GOOGLE_INTERSTITIAL_AD_ID_RELEASE }} + GOOGLE_REWARDED_AD_UNIT_ID_RELEASE: ${{ secrets.GOOGLE_REWARDED_AD_UNIT_ID_RELEASE }} + GOOGLE_BANNER_AD_UNIT_ID_CALCULATOR_DEBUG: ${{ secrets.GOOGLE_BANNER_AD_UNIT_ID_CALCULATOR_DEBUG }} + GOOGLE_BANNER_AD_UNIT_ID_SETTINGS_DEBUG: ${{ secrets.GOOGLE_BANNER_AD_UNIT_ID_SETTINGS_DEBUG }} + GOOGLE_BANNER_AD_UNIT_ID_CURRENCIES_DEBUG: ${{ secrets.GOOGLE_BANNER_AD_UNIT_ID_CURRENCIES_DEBUG }} + GOOGLE_INTERSTITIAL_AD_ID_DEBUG: ${{ secrets.GOOGLE_INTERSTITIAL_AD_ID_DEBUG }} + GOOGLE_REWARDED_AD_UNIT_ID_DEBUG: ${{ secrets.GOOGLE_REWARDED_AD_UNIT_ID_DEBUG }} + HUAWEI_BANNER_AD_UNIT_ID_CALCULATOR_RELEASE: ${{ secrets.HUAWEI_BANNER_AD_UNIT_ID_CALCULATOR_RELEASE }} + HUAWEI_BANNER_AD_UNIT_ID_SETTINGS_RELEASE: ${{ secrets.HUAWEI_BANNER_AD_UNIT_ID_SETTINGS_RELEASE }} + HUAWEI_BANNER_AD_UNIT_ID_CURRENCIES_RELEASE: ${{ secrets.HUAWEI_BANNER_AD_UNIT_ID_CURRENCIES_RELEASE }} + HUAWEI_INTERSTITIAL_AD_ID_RELEASE: ${{ secrets.HUAWEI_INTERSTITIAL_AD_ID_RELEASE }} + HUAWEI_REWARDED_AD_UNIT_ID_RELEASE: ${{ secrets.HUAWEI_REWARDED_AD_UNIT_ID_RELEASE }} + HUAWEI_BANNER_AD_UNIT_ID_CALCULATOR_DEBUG: ${{ secrets.HUAWEI_BANNER_AD_UNIT_ID_CALCULATOR_DEBUG }} + HUAWEI_BANNER_AD_UNIT_ID_SETTINGS_DEBUG: ${{ secrets.HUAWEI_BANNER_AD_UNIT_ID_SETTINGS_DEBUG }} + HUAWEI_BANNER_AD_UNIT_ID_CURRENCIES_DEBUG: ${{ secrets.HUAWEI_BANNER_AD_UNIT_ID_CURRENCIES_DEBUG }} + HUAWEI_INTERSTITIAL_AD_ID_DEBUG: ${{ secrets.HUAWEI_INTERSTITIAL_AD_ID_DEBUG }} + HUAWEI_REWARDED_AD_UNIT_ID_DEBUG: ${{ secrets.HUAWEI_REWARDED_AD_UNIT_ID_DEBUG }} + APP_STORE_CONNECT_ISSUER_ID: ${{ secrets.APP_STORE_CONNECT_ISSUER_ID }} + APP_STORE_CONNECT_KEY_CONTENT: ${{ secrets.APP_STORE_CONNECT_KEY_CONTENT }} + APP_STORE_CONNECT_KEY_ID: ${{ secrets.APP_STORE_CONNECT_KEY_ID }} + IOS_RELEASE_FIREBASE_APP_ID: ${{ secrets.IOS_RELEASE_FIREBASE_APP_ID }} + IOS_DEBUG_FIREBASE_APP_ID: ${{ secrets.IOS_DEBUG_FIREBASE_APP_ID }} + FIREBASE_CLI_TOKEN: ${{ secrets.FIREBASE_CLI_TOKEN }} + GIT_AUTHORIZATION: ${{ secrets.GIT_AUTHORIZATION }} + SECRET_PASSWORD: ${{ secrets.SECRET_PASSWORD }} + MATCH_PASSWORD: ${{ secrets.SECRET_PASSWORD }} + SLACK_BOT_TOKEN: ${{ secrets.SLACK_BOT_TOKEN }} + FASTLANE_XCODEBUILD_SETTINGS_TIMEOUT: 5 + FASTLANE_XCODEBUILD_SETTINGS_RETRIES: 5 + CI: true + +jobs: + + Build: + runs-on: macos-14 + outputs: + status: ${{ steps.status.outputs.status }} + steps: + + - name: Setup Gradle Repo + uses: Oztechan/Global/actions/setup-gradle-repo@d5c2d633506a792e53d7a273d90dde429df3bba7 + + - name: Adding secret files + uses: ./.github/actions/add-secret-files + with: + ANDROID_RELEASE_KEYSTORE_ASC: ${{ secrets.ANDROID_RELEASE_KEYSTORE_ASC }} + SECRET_PASSWORD: ${{ secrets.SECRET_PASSWORD }} + GOOGLE_SERVICES_JSON_ASC: ${{ secrets.GOOGLE_SERVICES_JSON_ASC }} + AG_CONNECT_SERVICES_JSON_ASC: ${{ secrets.AG_CONNECT_SERVICES_JSON_ASC }} + GOOGLE_SERVICE_INFO_PLIST_ASC_RELEASE: ${{ secrets.GOOGLE_SERVICE_INFO_PLIST_ASC_RELEASE }} + GOOGLE_SERVICE_INFO_PLIST_ASC_DEBUG: ${{ secrets.GOOGLE_SERVICE_INFO_PLIST_ASC_DEBUG }} + IOS_XCCONFIG_ASC_RELEASE: ${{ secrets.IOS_XCCONFIG_ASC_RELEASE }} + IOS_XCCONFIG_ASC_DEBUG: ${{ secrets.IOS_XCCONFIG_ASC_DEBUG }} + GOOGLE_PLAY_SERVICE_ACCOUNT_JSON: ${{ secrets.GOOGLE_PLAY_SERVICE_ACCOUNT_JSON }} + + - name: Build + run: ./gradlew build + + - name: Set Job Status + id: status + run: echo "status=success" >> $GITHUB_OUTPUT + + Notify: + runs-on: ubuntu-22.04 + needs: [ Build ] + if: always() + steps: + + - name: Notify slack fail + if: false == (needs.Build.outputs.status == 'success') + uses: voxmedia/github-action-slack-notify-build@v1.6.0 + with: + channel: ccc-github + status: FAILED + color: danger From d3d966bf3e3b817e91ab26b8556309cca708eb03 Mon Sep 17 00:00:00 2001 From: Mustafa Ozhan Date: Sat, 13 Jul 2024 23:57:53 +0200 Subject: [PATCH 22/89] [Oztechan/CCC#3687] Add Manual run to Build workflow (#3688) * [Oztechan/CCC#3685] Create a weekly Build workflow for running all tasks * [Oztechan/CCC#3687] Add Manual run to Build workflow --- .github/workflows/build.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 01382f1629..619c9e5fad 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -3,6 +3,7 @@ name: Build on: schedule: - cron: '0 0 * * 0' # Runs every Sunday at midnight UTC + workflow_dispatch: # Allows manual trigger env: BASE_URL_BACKEND: ${{ secrets.BASE_URL_BACKEND }} From 3ebb09140d4dcfb5e44616bb461d2747ad366af9 Mon Sep 17 00:00:00 2001 From: Mustafa Ozhan Date: Sun, 14 Jul 2024 18:55:08 +0200 Subject: [PATCH 23/89] [Oztechan/CCC#3682] Move GradleBuild to Release/Debug Variants based of event (#3683) * [Oztechan/CCC#3682] Move GradleBuild to Release/Debug Matrix * [Oztechan/CCC#3682] Move GradleBuild to Release/Debug Matrix * [Oztechan/CCC#3682] Move GradleBuild to Release/Debug Matrix * [Oztechan/CCC#3682] Move GradleBuild to Release/Debug Matrix * [Oztechan/CCC#3682] Move GradleBuild to Release/Debug Matrix * [Oztechan/CCC#3682] Move GradleBuild to Release/Debug Matrix * [Oztechan/CCC#3682] Move GradleBuild to Release/Debug Matrix * [Oztechan/CCC#3687] Add Manual run to Build workflow --- .github/workflows/main.yml | 42 ++++++++++++-------------------------- 1 file changed, 13 insertions(+), 29 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 0f4f957c95..d5da2ade8a 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -58,6 +58,8 @@ env: FASTLANE_XCODEBUILD_SETTINGS_TIMEOUT: 5 FASTLANE_XCODEBUILD_SETTINGS_RETRIES: 5 CI: true + BUILD_TYPE: ${{ github.event_name == 'schedule' && 'Release' || 'Debug' }} + BUILD_TYPE_LOWERCASE: ${{ github.event_name == 'schedule' && 'release' || 'debug' }} jobs: @@ -83,19 +85,17 @@ jobs: IOS_XCCONFIG_ASC_DEBUG: ${{ secrets.IOS_XCCONFIG_ASC_DEBUG }} GOOGLE_PLAY_SERVICE_ACCOUNT_JSON: ${{ secrets.GOOGLE_PLAY_SERVICE_ACCOUNT_JSON }} - - name: Assemble - run: ./gradlew assemble + - name: Assemble${{ env.BUILD_TYPE }} + run: ./gradlew assemble${{ env.BUILD_TYPE }} - - name: Upload Android Artifacts + - name: Upload Android ${{ matrix.build-type }} Artifacts uses: actions/upload-artifact@v4.3.4 if: github.event_name == 'push' || github.event_name == 'schedule' with: name: androidArtifacts path: | - android/app/build/outputs/apk/google/debug/app-google-debug.apk - android/app/build/outputs/apk/huawei/debug/app-huawei-debug.apk - android/app/build/outputs/apk/google/release/app-google-release.apk - android/app/build/outputs/apk/huawei/release/app-huawei-release.apk + android/app/build/outputs/apk/google/${{ env.BUILD_TYPE_LOWERCASE }}/app-google-${{ env.BUILD_TYPE_LOWERCASE }}.apk + android/app/build/outputs/apk/huawei/${{ env.BUILD_TYPE_LOWERCASE }}/app-huawei-${{ env.BUILD_TYPE_LOWERCASE }}.apk - name: Cancel other jobs if this fails if: failure() @@ -121,37 +121,21 @@ jobs: with: name: androidArtifacts - - name: Firebase App Distribution Google Debug + - name: Firebase App Distribution Google ${{ env.BUILD_TYPE }} uses: wzieba/Firebase-Distribution-Github-Action@v1.7.0 with: - appId: ${{secrets.ANDROID_GOOGLE_DEBUG_FIREBASE_APP_ID}} + appId: ${{ github.event_name == 'schedule' && secrets.ANDROID_GOOGLE_RELEASE_FIREBASE_APP_ID || secrets.ANDROID_GOOGLE_DEBUG_FIREBASE_APP_ID }} token: ${{secrets.FIREBASE_CLI_TOKEN}} groups: QA - file: google/debug/app-google-debug.apk + file: google/${{ env.BUILD_TYPE_LOWERCASE }}/app-google-${{ env.BUILD_TYPE_LOWERCASE }}.apk - - name: Firebase App Distribution Google Release + - name: Firebase App Distribution Huawei ${{ env.BUILD_TYPE }} uses: wzieba/Firebase-Distribution-Github-Action@v1.7.0 with: - appId: ${{secrets.ANDROID_GOOGLE_RELEASE_FIREBASE_APP_ID}} + appId: ${{ github.event_name == 'schedule' && secrets.ANDROID_HUAWEI_RELEASE_FIREBASE_APP_ID || secrets.ANDROID_HUAWEI_DEBUG_FIREBASE_APP_ID }} token: ${{secrets.FIREBASE_CLI_TOKEN}} groups: QA - file: google/release/app-google-release.apk - - - name: Firebase App Distribution Huawei Debug - uses: wzieba/Firebase-Distribution-Github-Action@v1.7.0 - with: - appId: ${{secrets.ANDROID_HUAWEI_DEBUG_FIREBASE_APP_ID}} - token: ${{secrets.FIREBASE_CLI_TOKEN}} - groups: QA - file: huawei/debug/app-huawei-debug.apk - - - name: Firebase App Distribution Huawei Release - uses: wzieba/Firebase-Distribution-Github-Action@v1.7.0 - with: - appId: ${{secrets.ANDROID_HUAWEI_RELEASE_FIREBASE_APP_ID}} - token: ${{secrets.FIREBASE_CLI_TOKEN}} - groups: QA - file: huawei/release/app-huawei-release.apk + file: huawei/${{ env.BUILD_TYPE_LOWERCASE }}/app-huawei-${{ env.BUILD_TYPE_LOWERCASE }}.apk - name: Delete Android Artifacts uses: geekyeggo/delete-artifact@v5.0.0 From 8a4d4e2a4393561c3033ee12b6ac84cfda518243 Mon Sep 17 00:00:00 2001 From: Mustafa Ozhan Date: Sun, 14 Jul 2024 19:50:35 +0200 Subject: [PATCH 24/89] [Oztechan/CCC#3689] Move XCodeBuild to Release/Debug Variants based of event (#3690) * [Oztechan/CCC#3682] Move GradleBuild to Release/Debug Matrix * [Oztechan/CCC#3682] Move GradleBuild to Release/Debug Matrix * [Oztechan/CCC#3682] Move GradleBuild to Release/Debug Matrix * [Oztechan/CCC#3682] Move GradleBuild to Release/Debug Matrix * [Oztechan/CCC#3682] Move GradleBuild to Release/Debug Matrix * [Oztechan/CCC#3682] Move GradleBuild to Release/Debug Matrix * [Oztechan/CCC#3682] Move GradleBuild to Release/Debug Matrix * [Oztechan/CCC#3687] Add Manual run to Build workflow * [Oztechan/CCC#3689] Move XCodeBuild to Release/Debug Variants based of event * [Oztechan/CCC#3689] Move XCodeBuild to Release/Debug Variants based of event --- .github/workflows/main.yml | 16 +++++++++++----- ios/fastlane/Fastfile | 14 +++++++++++--- 2 files changed, 22 insertions(+), 8 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index d5da2ade8a..1fb3620e17 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -88,7 +88,7 @@ jobs: - name: Assemble${{ env.BUILD_TYPE }} run: ./gradlew assemble${{ env.BUILD_TYPE }} - - name: Upload Android ${{ matrix.build-type }} Artifacts + - name: Upload Android ${{ env.BUILD_TYPE }} Artifacts uses: actions/upload-artifact@v4.3.4 if: github.event_name == 'push' || github.event_name == 'schedule' with: @@ -170,16 +170,22 @@ jobs: - name: Build working-directory: ios - run: fastlane buildAll + run: fastlane build${{ env.BUILD_TYPE }} + + - name: Upload iOS Debug Artifacts + uses: actions/upload-artifact@v4.3.4 + if: github.event_name == 'push' + with: + name: iOSArtifacts + path: ios/CCC_I.ipa - name: Upload iOS Artifacts uses: actions/upload-artifact@v4.3.4 - if: github.event_name == 'push' || github.event_name == 'schedule' + if: github.event_name == 'schedule' with: name: iOSArtifacts path: | ios/CCC.ipa - ios/CCC_I.ipa ios/CCC.app.dSYM.zip - name: Cancel other jobs if this fails @@ -200,7 +206,7 @@ jobs: - name: Clone Repo uses: actions/checkout@v4.1.7 - - name: Download iOS IPA + - name: Download iOS Artifacts uses: actions/download-artifact@v4.1.8 with: name: iOSArtifacts diff --git a/ios/fastlane/Fastfile b/ios/fastlane/Fastfile index 7b79c365cc..51fdba086b 100644 --- a/ios/fastlane/Fastfile +++ b/ios/fastlane/Fastfile @@ -57,7 +57,7 @@ end platform :ios do desc "iOS Lanes" - lane :buildAll do + lane :buildRelease do install_certificate_and_profile(match_type: "adhoc") add_test_devices build_project( @@ -65,6 +65,11 @@ platform :ios do profile: "match AdHoc com.oztechan.ccc", configuration: "Release" ) + end + + lane :buildDebug do + install_certificate_and_profile(match_type: "adhoc") + add_test_devices build_project( match_type: "adhoc", profile: "match AdHoc com.oztechan.ccc.debug", @@ -84,7 +89,7 @@ platform :ios do upload_crashlytics_symbols end - lane :distributeAll do + lane :distributeRelease do firebase_app_distribution( app: ENV["IOS_RELEASE_FIREBASE_APP_ID"], groups: "QA", @@ -92,6 +97,10 @@ platform :ios do firebase_cli_token: ENV["FIREBASE_CLI_TOKEN"], ipa_path: "../ios/CCC.ipa" ) + upload_crashlytics_symbols + end + + lane :distributeDebug do firebase_app_distribution( app: ENV["IOS_DEBUG_FIREBASE_APP_ID"], groups: "QA", @@ -99,7 +108,6 @@ platform :ios do firebase_cli_token: ENV["FIREBASE_CLI_TOKEN"], ipa_path: "../ios/CCC_I.ipa" ) - upload_crashlytics_symbols end # Sub lines From cdfa888e1dace491dd38393831ffe28016314341 Mon Sep 17 00:00:00 2001 From: Mustafa Ozhan Date: Mon, 15 Jul 2024 00:02:13 +0200 Subject: [PATCH 25/89] [Oztechan/CCC#3695] Fix develop builds cancellation issue (#3696) --- .github/workflows/main.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 1fb3620e17..06e95c4091 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -9,8 +9,8 @@ on: - cron: '0 0 * * *' # At 00:00 every day concurrency: - group: ${{ github.ref == 'refs/heads/develop' && 'develop' || github.ref }} - cancel-in-progress: ${{ github.ref != 'refs/heads/develop' }} + group: ${{ github.ref_name == 'develop' && github.run_id || github.ref_name }} # Unique group for 'develop' branch to prevent cancellation + cancel-in-progress: ${{ github.ref_name != 'develop' }} # Allow cancellation only for non-develop branches env: BASE_URL_BACKEND: ${{ secrets.BASE_URL_BACKEND }} From 2f9ef7776274c79071672414babd732be0cc3329 Mon Sep 17 00:00:00 2001 From: Mustafa Ozhan Date: Mon, 15 Jul 2024 00:02:24 +0200 Subject: [PATCH 26/89] [Oztechan/CCC#3693] Fix iOS fastlane build issue (#3694) --- .github/workflows/main.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 06e95c4091..39e7c61f2e 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -217,7 +217,7 @@ jobs: working-directory: ios run: | sudo chown -R $(whoami) /var/lib/gems/3.0.0 - fastlane distributeAll + fastlane distribute${{ env.BUILD_TYPE }} - name: Delete iOS IPA uses: geekyeggo/delete-artifact@v5.0.0 From f5399ae5be31c5f8203825c73c8c46d1e5afedd3 Mon Sep 17 00:00:00 2001 From: Mustafa Ozhan Date: Mon, 15 Jul 2024 00:02:36 +0200 Subject: [PATCH 27/89] [Oztechan/CCC#3691] Fix wrong Notify issue (#3692) --- .github/workflows/main.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 39e7c61f2e..acefa59ec1 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -327,7 +327,7 @@ jobs: - name: Notify slack fail if: false == (needs.GradleBuild.outputs.status == 'success') || false == (needs.XCodeBuild.outputs.status == 'success') || - false == (needs.Check.outputs.status == 'success') || + false == (needs.Test.outputs.status == 'success') || false == (needs.Coverage.outputs.status == 'success') || false == (needs.CodeAnalysis.outputs.status == 'success') || (false == (needs.DistributeAndroid.outputs.status == 'success') && (github.event_name == 'push' || github.event_name == 'schedule')) || From 9fee0247c7753e64049f623c023ee829da5b508e Mon Sep 17 00:00:00 2001 From: Mustafa Ozhan Date: Mon, 15 Jul 2024 00:02:43 +0200 Subject: [PATCH 28/89] [Oztechan/CCC#3697] Fix step names (#3698) * [Oztechan/CCC#3695] Fix develop builds cancellation issue * [Oztechan/CCC#3697] Fix step names --- .github/workflows/main.yml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index acefa59ec1..d645e2b1f2 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -85,7 +85,7 @@ jobs: IOS_XCCONFIG_ASC_DEBUG: ${{ secrets.IOS_XCCONFIG_ASC_DEBUG }} GOOGLE_PLAY_SERVICE_ACCOUNT_JSON: ${{ secrets.GOOGLE_PLAY_SERVICE_ACCOUNT_JSON }} - - name: Assemble${{ env.BUILD_TYPE }} + - name: Assemble ${{ env.BUILD_TYPE }} run: ./gradlew assemble${{ env.BUILD_TYPE }} - name: Upload Android ${{ env.BUILD_TYPE }} Artifacts @@ -116,7 +116,7 @@ jobs: - name: Clone Repo # Needed for reading commit message for Firebase App Distribution uses: actions/checkout@v4.1.7 - - name: Download Android Artifacts + - name: Download Android ${{ env.BUILD_TYPE }} Artifacts uses: actions/download-artifact@v4.1.8 with: name: androidArtifacts @@ -137,7 +137,7 @@ jobs: groups: QA file: huawei/${{ env.BUILD_TYPE_LOWERCASE }}/app-huawei-${{ env.BUILD_TYPE_LOWERCASE }}.apk - - name: Delete Android Artifacts + - name: Delete Android ${{ env.BUILD_TYPE }} Artifacts uses: geekyeggo/delete-artifact@v5.0.0 with: name: androidArtifacts @@ -168,7 +168,7 @@ jobs: IOS_XCCONFIG_ASC_DEBUG: ${{ secrets.IOS_XCCONFIG_ASC_DEBUG }} GOOGLE_PLAY_SERVICE_ACCOUNT_JSON: ${{ secrets.GOOGLE_PLAY_SERVICE_ACCOUNT_JSON }} - - name: Build + - name: Build ${{ env.BUILD_TYPE }} working-directory: ios run: fastlane build${{ env.BUILD_TYPE }} @@ -206,20 +206,20 @@ jobs: - name: Clone Repo uses: actions/checkout@v4.1.7 - - name: Download iOS Artifacts + - name: Download iOS ${{ env.BUILD_TYPE }} Artifacts uses: actions/download-artifact@v4.1.8 with: name: iOSArtifacts path: ios # was necessary to use chown to fix permission issues in linux machines - - name: Distribute + - name: Distribute ${{ env.BUILD_TYPE }} working-directory: ios run: | sudo chown -R $(whoami) /var/lib/gems/3.0.0 fastlane distribute${{ env.BUILD_TYPE }} - - name: Delete iOS IPA + - name: Delete iOS ${{ env.BUILD_TYPE }} Artifacts uses: geekyeggo/delete-artifact@v5.0.0 with: name: iOSArtifacts From fd37a0d07e8b242da5abb463f04b156ee38cb366 Mon Sep 17 00:00:00 2001 From: Mustafa Ozhan Date: Tue, 16 Jul 2024 20:13:40 +0200 Subject: [PATCH 29/89] [Oztechan/CCC#3702] Run develop builds in serial manner (#3703) --- .github/workflows/main.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index d645e2b1f2..62cc56b764 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -9,8 +9,8 @@ on: - cron: '0 0 * * *' # At 00:00 every day concurrency: - group: ${{ github.ref_name == 'develop' && github.run_id || github.ref_name }} # Unique group for 'develop' branch to prevent cancellation - cancel-in-progress: ${{ github.ref_name != 'develop' }} # Allow cancellation only for non-develop branches + group: ${{ github.ref == 'refs/heads/develop' && 'develop' || github.ref }} # Only run one job at a time for the same branch + cancel-in-progress: ${{ github.ref != 'refs/heads/develop' }} # Only cancel the same branch but not develop env: BASE_URL_BACKEND: ${{ secrets.BASE_URL_BACKEND }} From 64df7fd5150b3fd11bc2627766c5158b7aefd502 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 16 Jul 2024 20:13:54 +0200 Subject: [PATCH 30/89] [Oztechan/CCC#1457] Update Git Submodules (#3684) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: Mustafa Ozhan --- submodule/basemob | 2 +- submodule/logmob | 2 +- submodule/parsermob | 2 +- submodule/scopemob | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/submodule/basemob b/submodule/basemob index b260f76c19..5c4208aa08 160000 --- a/submodule/basemob +++ b/submodule/basemob @@ -1 +1 @@ -Subproject commit b260f76c191f213388e702cc2c83e93ce43ca5e1 +Subproject commit 5c4208aa081f872c75ce99d401a1975f72cb2f77 diff --git a/submodule/logmob b/submodule/logmob index e0eb22cb29..8ee79b69e0 160000 --- a/submodule/logmob +++ b/submodule/logmob @@ -1 +1 @@ -Subproject commit e0eb22cb290c5173b23738b56470b2b006a95da3 +Subproject commit 8ee79b69e0391c648e0362a14d7e3d1890d47e6e diff --git a/submodule/parsermob b/submodule/parsermob index da7db61e51..39dd56f8e4 160000 --- a/submodule/parsermob +++ b/submodule/parsermob @@ -1 +1 @@ -Subproject commit da7db61e51aca9b13f4b510ab91081e59048d217 +Subproject commit 39dd56f8e42d86037a165af7ed60d7eef5186e0f diff --git a/submodule/scopemob b/submodule/scopemob index 54491efce9..f6e8fedc4d 160000 --- a/submodule/scopemob +++ b/submodule/scopemob @@ -1 +1 @@ -Subproject commit 54491efce9d39c74e279ed9b53052d4252480049 +Subproject commit f6e8fedc4d1a2c786b8d651c31061a4e5eead236 From bc4b5f097aa59fa51e4142959f4d6b845c40a4d5 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 16 Jul 2024 20:14:12 +0200 Subject: [PATCH 31/89] [Oztechan/CCC#1457] Update dependency gradle to v8.9 (#3675) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: Mustafa Ozhan --- gradle/wrapper/gradle-wrapper.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 6f7a6eb33e..dedd5d1e69 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.8-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.9-all.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME From 09c3439153b6b3ca77621b758a003720c41c60a2 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 16 Jul 2024 20:14:24 +0200 Subject: [PATCH 32/89] [Oztechan/CCC#1457] Lock file maintenance (#3699) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: Mustafa Ozhan --- ios/Gemfile.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/ios/Gemfile.lock b/ios/Gemfile.lock index 5760000f37..b6bf540f6f 100644 --- a/ios/Gemfile.lock +++ b/ios/Gemfile.lock @@ -10,7 +10,7 @@ GEM artifactory (3.0.17) atomos (0.1.3) aws-eventstream (1.3.0) - aws-partitions (1.952.0) + aws-partitions (1.956.0) aws-sdk-core (3.201.1) aws-eventstream (~> 1, >= 1.3.0) aws-partitions (~> 1, >= 1.651.0) @@ -38,7 +38,7 @@ GEM domain_name (0.6.20240107) dotenv (2.8.1) emoji_regex (3.2.3) - excon (0.110.0) + excon (0.111.0) faraday (1.10.3) faraday-em_http (~> 1.0) faraday-em_synchrony (~> 1.0) @@ -161,7 +161,7 @@ GEM json (2.7.2) jwt (2.8.2) base64 - mini_magick (4.13.1) + mini_magick (4.13.2) mini_mime (1.1.5) multi_json (1.15.0) multipart-post (2.4.1) From 415fbb07b9874248ed6414dbdb56056884fa7c50 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 17 Jul 2024 23:18:28 +0200 Subject: [PATCH 33/89] [Oztechan/CCC#1457] Update Oztechan/Global digest to de5d409 (#3704) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: Mustafa Ozhan --- .github/workflows/build.yml | 2 +- .github/workflows/main.yml | 10 +++++----- .github/workflows/project.yml | 2 +- .github/workflows/publish.yml | 2 +- .github/workflows/release.yml | 4 ++-- 5 files changed, 10 insertions(+), 10 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 619c9e5fad..dee0a5fe53 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -61,7 +61,7 @@ jobs: steps: - name: Setup Gradle Repo - uses: Oztechan/Global/actions/setup-gradle-repo@d5c2d633506a792e53d7a273d90dde429df3bba7 + uses: Oztechan/Global/actions/setup-gradle-repo@de5d4095c26cce6ce46bca91a81ed73a1096ad0c - name: Adding secret files uses: ./.github/actions/add-secret-files diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 62cc56b764..3c7f71c9aa 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -70,7 +70,7 @@ jobs: steps: - name: Setup Gradle Repo - uses: Oztechan/Global/actions/setup-gradle-repo@d5c2d633506a792e53d7a273d90dde429df3bba7 + uses: Oztechan/Global/actions/setup-gradle-repo@de5d4095c26cce6ce46bca91a81ed73a1096ad0c - name: Adding secret files uses: ./.github/actions/add-secret-files @@ -153,7 +153,7 @@ jobs: steps: - name: Setup Gradle Repo - uses: Oztechan/Global/actions/setup-gradle-repo@d5c2d633506a792e53d7a273d90dde429df3bba7 + uses: Oztechan/Global/actions/setup-gradle-repo@de5d4095c26cce6ce46bca91a81ed73a1096ad0c - name: Adding secret files uses: ./.github/actions/add-secret-files @@ -235,7 +235,7 @@ jobs: steps: - name: Setup Gradle Repo - uses: Oztechan/Global/actions/setup-gradle-repo@d5c2d633506a792e53d7a273d90dde429df3bba7 + uses: Oztechan/Global/actions/setup-gradle-repo@de5d4095c26cce6ce46bca91a81ed73a1096ad0c - name: Test run: ./gradlew test @@ -255,7 +255,7 @@ jobs: steps: - name: Setup Gradle Repo - uses: Oztechan/Global/actions/setup-gradle-repo@d5c2d633506a792e53d7a273d90dde429df3bba7 + uses: Oztechan/Global/actions/setup-gradle-repo@de5d4095c26cce6ce46bca91a81ed73a1096ad0c - name: Generate Coverage run: ./gradlew koverXmlReport @@ -298,7 +298,7 @@ jobs: steps: - name: Setup Gradle Repo - uses: Oztechan/Global/actions/setup-gradle-repo@d5c2d633506a792e53d7a273d90dde429df3bba7 + uses: Oztechan/Global/actions/setup-gradle-repo@de5d4095c26cce6ce46bca91a81ed73a1096ad0c - name: Detekt & Lint run: ./gradlew detektAll lint diff --git a/.github/workflows/project.yml b/.github/workflows/project.yml index da597ea75e..ac21e85950 100644 --- a/.github/workflows/project.yml +++ b/.github/workflows/project.yml @@ -14,7 +14,7 @@ on: jobs: ProjectAutomations: - uses: Oztechan/Global/.github/workflows/reusable-project.yml@d5c2d633506a792e53d7a273d90dde429df3bba7 + uses: Oztechan/Global/.github/workflows/reusable-project.yml@de5d4095c26cce6ce46bca91a81ed73a1096ad0c with: project_id: 2 secrets: inherit diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 92fea6009c..7925400d54 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -8,7 +8,7 @@ on: jobs: PublishRelease: - uses: Oztechan/Global/.github/workflows/reusable-publish.yml@d5c2d633506a792e53d7a273d90dde429df3bba7 + uses: Oztechan/Global/.github/workflows/reusable-publish.yml@de5d4095c26cce6ce46bca91a81ed73a1096ad0c with: slack_channel: "ccc-github" secrets: inherit diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 25ec4e1267..e3ab0745ec 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -61,7 +61,7 @@ jobs: steps: - name: Setup Gradle Repo - uses: Oztechan/Global/actions/setup-gradle-repo@d5c2d633506a792e53d7a273d90dde429df3bba7 + uses: Oztechan/Global/actions/setup-gradle-repo@de5d4095c26cce6ce46bca91a81ed73a1096ad0c - name: Adding secret files uses: ./.github/actions/add-secret-files @@ -215,7 +215,7 @@ jobs: status: ${{ steps.status.outputs.status }} steps: - name: Setup Gradle Repo - uses: Oztechan/Global/actions/setup-gradle-repo@d5c2d633506a792e53d7a273d90dde429df3bba7 + uses: Oztechan/Global/actions/setup-gradle-repo@de5d4095c26cce6ce46bca91a81ed73a1096ad0c - name: Adding secret files uses: ./.github/actions/add-secret-files From 8500b1b8a4d2c9c0b886b735ffee073c4bd507ea Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 20 Jul 2024 20:52:29 +0200 Subject: [PATCH 34/89] [Oztechan/CCC#1457] Update dependency org.jetbrains.kotlinx.kover to v0.8.3 (#3705) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: Mustafa Ozhan --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 9e2d8932ce..3023adb8fd 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -38,7 +38,7 @@ lifecycle = "2.8.3" mokoResources = "0.24.1" buildKonfig = "0.15.1" splashScreen = "1.0.1" -kover = "0.8.2" +kover = "0.8.3" rootBeer = "0.1.0" anrWatchDog = "1.4.0" kermit = "2.0.4" From 1bb0e1de2ca0479f789ed7c7dbe4fd852ffb4f2f Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 20 Jul 2024 21:15:48 +0200 Subject: [PATCH 35/89] [Oztechan/CCC#1457] Update Git Submodules (#3706) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: Mustafa Ozhan --- submodule/basemob | 2 +- submodule/logmob | 2 +- submodule/parsermob | 2 +- submodule/scopemob | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/submodule/basemob b/submodule/basemob index 5c4208aa08..7b5f9b762e 160000 --- a/submodule/basemob +++ b/submodule/basemob @@ -1 +1 @@ -Subproject commit 5c4208aa081f872c75ce99d401a1975f72cb2f77 +Subproject commit 7b5f9b762ebb14b35689274bee12c7aa5b97c830 diff --git a/submodule/logmob b/submodule/logmob index 8ee79b69e0..882071fde3 160000 --- a/submodule/logmob +++ b/submodule/logmob @@ -1 +1 @@ -Subproject commit 8ee79b69e0391c648e0362a14d7e3d1890d47e6e +Subproject commit 882071fde3c04cb20e4f9cc883e167a47f961fc5 diff --git a/submodule/parsermob b/submodule/parsermob index 39dd56f8e4..c84f8c5582 160000 --- a/submodule/parsermob +++ b/submodule/parsermob @@ -1 +1 @@ -Subproject commit 39dd56f8e42d86037a165af7ed60d7eef5186e0f +Subproject commit c84f8c5582d7061f4ab3b1b0b6a63c23286ebcc1 diff --git a/submodule/scopemob b/submodule/scopemob index f6e8fedc4d..3b67d8f6fd 160000 --- a/submodule/scopemob +++ b/submodule/scopemob @@ -1 +1 @@ -Subproject commit f6e8fedc4d1a2c786b8d651c31061a4e5eead236 +Subproject commit 3b67d8f6fd5c248c0dbf4e8eee92e40dca138628 From 2a71e12b552aec7b544ace693d85a0c4468818f8 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sun, 21 Jul 2024 23:42:53 +0200 Subject: [PATCH 36/89] [Oztechan/CCC#1457] Update dependency com.huawei.hms:ads-prime to v3.4.73.301 (#3668) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: Mustafa Ozhan --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 3023adb8fd..08264d0745 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -25,7 +25,7 @@ firebasePerPlugin = "1.4.2" firebaseCrashlyticsPlugin = "3.0.2" googleAds = "23.2.0" googleUmp = "2.2.0" -huaweiAds = "3.4.72.301" +huaweiAds = "3.4.73.301" huaweiOsm = "1.3.35" navigation = "2.7.7" playCoreReview = "2.0.1" From 3bdec6cb72ea074bcdf7009080e28f00c91bd3c6 Mon Sep 17 00:00:00 2001 From: Mustafa Ozhan Date: Mon, 22 Jul 2024 17:39:57 +0200 Subject: [PATCH 37/89] [Oztechan/CCC#3708] Move State into SEEDVIewModel (#3709) * [Oztechan/CCC#3708] Move State into SEEDVIewModel * [Oztechan/CCC#3708] Move State into SEEDVIewModel --- .../viewmodel/widget/WidgetViewModel.kt | 31 +++++------ .../core/viewmodel/BaseSEEDViewModel.kt | 22 -------- .../client/core/viewmodel/SEEDViewModel.kt | 29 ++++++++++ .../calculator/CalculatorViewModel.kt | 53 +++++++++---------- .../currencies/CurrenciesViewModel.kt | 32 +++++------ .../client/viewmodel/main/MainViewModel.kt | 24 ++++----- .../viewmodel/premium/PremiumViewModel.kt | 23 ++++---- .../selectcurrency/SelectCurrencyViewModel.kt | 15 +++--- .../viewmodel/settings/SettingsViewModel.kt | 26 ++++----- .../viewmodel/watchers/WatchersViewModel.kt | 34 ++++++------ ios/CCC/Util/ObservableSEEDViewModel.swift | 15 +++--- 11 files changed, 139 insertions(+), 165 deletions(-) delete mode 100644 client/core/viewmodel/src/commonMain/kotlin/com/oztechan/ccc/client/core/viewmodel/BaseSEEDViewModel.kt create mode 100644 client/core/viewmodel/src/commonMain/kotlin/com/oztechan/ccc/client/core/viewmodel/SEEDViewModel.kt diff --git a/android/viewmodel/widget/src/main/kotlin/com/oztechan/ccc/android/viewmodel/widget/WidgetViewModel.kt b/android/viewmodel/widget/src/main/kotlin/com/oztechan/ccc/android/viewmodel/widget/WidgetViewModel.kt index b655b763ca..64dd1a716b 100644 --- a/android/viewmodel/widget/src/main/kotlin/com/oztechan/ccc/android/viewmodel/widget/WidgetViewModel.kt +++ b/android/viewmodel/widget/src/main/kotlin/com/oztechan/ccc/android/viewmodel/widget/WidgetViewModel.kt @@ -7,17 +7,14 @@ import com.oztechan.ccc.client.core.shared.util.getRateFromCode import com.oztechan.ccc.client.core.shared.util.isNotPassed import com.oztechan.ccc.client.core.shared.util.nowAsDateString import com.oztechan.ccc.client.core.viewmodel.BaseEffect -import com.oztechan.ccc.client.core.viewmodel.BaseSEEDViewModel +import com.oztechan.ccc.client.core.viewmodel.SEEDViewModel import com.oztechan.ccc.client.core.viewmodel.util.launchIgnored import com.oztechan.ccc.client.datasource.currency.CurrencyDataSource import com.oztechan.ccc.client.service.backend.BackendApiService import com.oztechan.ccc.client.storage.app.AppStorage import com.oztechan.ccc.client.storage.calculation.CalculationStorage import kotlinx.coroutines.flow.MutableSharedFlow -import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.asSharedFlow -import kotlinx.coroutines.flow.asStateFlow -import kotlinx.coroutines.flow.update import kotlinx.coroutines.launch class WidgetViewModel( @@ -25,17 +22,15 @@ class WidgetViewModel( private val backendApiService: BackendApiService, private val currencyDataSource: CurrencyDataSource, private val appStorage: AppStorage -) : BaseSEEDViewModel(), WidgetEvent { - - // region SEED - private val _state = MutableStateFlow( - WidgetState( - currentBase = calculationStorage.currentBase, - isPremium = appStorage.premiumEndDate.isNotPassed() - ) +) : SEEDViewModel( + WidgetState( + currentBase = calculationStorage.currentBase, + isPremium = appStorage.premiumEndDate.isNotPassed() ) - override val state = _state.asStateFlow() +), + WidgetEvent { + // region SEED private val _effect = MutableSharedFlow() override val effect = _effect.asSharedFlow() @@ -45,8 +40,8 @@ class WidgetViewModel( // endregion private fun refreshWidgetData() { - _state.update { - it.copy( + setState { + copy( currencyList = listOf(), lastUpdate = "", currentBase = calculationStorage.currentBase, @@ -54,7 +49,7 @@ class WidgetViewModel( ) } - if (_state.value.isPremium) { + if (state.value.isPremium) { getFreshWidgetData() } } @@ -72,8 +67,8 @@ class WidgetViewModel( } .take(MAXIMUM_NUMBER_OF_CURRENCY) .let { currencyList -> - _state.update { - it.copy( + setState { + copy( currencyList = currencyList, lastUpdate = nowAsDateString() ) diff --git a/client/core/viewmodel/src/commonMain/kotlin/com/oztechan/ccc/client/core/viewmodel/BaseSEEDViewModel.kt b/client/core/viewmodel/src/commonMain/kotlin/com/oztechan/ccc/client/core/viewmodel/BaseSEEDViewModel.kt deleted file mode 100644 index 2fbb212366..0000000000 --- a/client/core/viewmodel/src/commonMain/kotlin/com/oztechan/ccc/client/core/viewmodel/BaseSEEDViewModel.kt +++ /dev/null @@ -1,22 +0,0 @@ -/* - * Copyright (c) 2021 Mustafa Ozhan. All rights reserved. - */ - -package com.oztechan.ccc.client.core.viewmodel - -import kotlinx.coroutines.flow.SharedFlow -import kotlinx.coroutines.flow.StateFlow - -abstract class BaseSEEDViewModel< - State : BaseState, - Effect : BaseEffect, - Event : BaseEvent, - Data : BaseData - > : BaseViewModel() { - // region SEED - abstract val state: StateFlow? - abstract val effect: SharedFlow? - abstract val event: Event? - abstract val data: Data? - // endregion -} diff --git a/client/core/viewmodel/src/commonMain/kotlin/com/oztechan/ccc/client/core/viewmodel/SEEDViewModel.kt b/client/core/viewmodel/src/commonMain/kotlin/com/oztechan/ccc/client/core/viewmodel/SEEDViewModel.kt new file mode 100644 index 0000000000..119b998ebf --- /dev/null +++ b/client/core/viewmodel/src/commonMain/kotlin/com/oztechan/ccc/client/core/viewmodel/SEEDViewModel.kt @@ -0,0 +1,29 @@ +/* + * Copyright (c) 2021 Mustafa Ozhan. All rights reserved. + */ + +package com.oztechan.ccc.client.core.viewmodel + +import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.SharedFlow +import kotlinx.coroutines.flow.asStateFlow + +abstract class SEEDViewModel< + State : BaseState, + Effect : BaseEffect, + Event : BaseEvent, + Data : BaseData + >(initialState: State) : BaseViewModel() { + // region SEED + private val _state: MutableStateFlow = MutableStateFlow(initialState) + val state = _state.asStateFlow() + + abstract val effect: SharedFlow? + abstract val event: Event? + abstract val data: Data? + // endregion + + protected fun setState(newState: State.() -> State) { + _state.value = state.value.newState() + } +} diff --git a/client/viewmodel/calculator/src/commonMain/kotlin/com/oztechan/ccc/client/viewmodel/calculator/CalculatorViewModel.kt b/client/viewmodel/calculator/src/commonMain/kotlin/com/oztechan/ccc/client/viewmodel/calculator/CalculatorViewModel.kt index bc68094e14..6b8d10bd4d 100644 --- a/client/viewmodel/calculator/src/commonMain/kotlin/com/oztechan/ccc/client/viewmodel/calculator/CalculatorViewModel.kt +++ b/client/viewmodel/calculator/src/commonMain/kotlin/com/oztechan/ccc/client/viewmodel/calculator/CalculatorViewModel.kt @@ -16,9 +16,8 @@ import com.oztechan.ccc.client.core.shared.util.getFormatted import com.oztechan.ccc.client.core.shared.util.nowAsDateString import com.oztechan.ccc.client.core.shared.util.toStandardDigits import com.oztechan.ccc.client.core.shared.util.toSupportedCharacters -import com.oztechan.ccc.client.core.viewmodel.BaseSEEDViewModel +import com.oztechan.ccc.client.core.viewmodel.SEEDViewModel import com.oztechan.ccc.client.core.viewmodel.util.launchIgnored -import com.oztechan.ccc.client.core.viewmodel.util.update import com.oztechan.ccc.client.datasource.currency.CurrencyDataSource import com.oztechan.ccc.client.repository.adcontrol.AdControlRepository import com.oztechan.ccc.client.service.backend.BackendApiService @@ -35,9 +34,7 @@ import com.oztechan.ccc.common.core.model.Conversion import com.oztechan.ccc.common.core.model.Currency import com.oztechan.ccc.common.datasource.conversion.ConversionDataSource import kotlinx.coroutines.flow.MutableSharedFlow -import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.asSharedFlow -import kotlinx.coroutines.flow.asStateFlow import kotlinx.coroutines.flow.distinctUntilChanged import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.map @@ -53,13 +50,11 @@ class CalculatorViewModel( private val conversionDataSource: ConversionDataSource, adControlRepository: AdControlRepository, private val analyticsManager: AnalyticsManager -) : BaseSEEDViewModel(), +) : SEEDViewModel( + CalculatorState(isBannerAdVisible = adControlRepository.shouldShowBannerAd()) +), CalculatorEvent { // region SEED - private val _state = - MutableStateFlow(CalculatorState(isBannerAdVisible = adControlRepository.shouldShowBannerAd())) - override val state = _state.asStateFlow() - private val _effect = MutableSharedFlow() override val effect = _effect.asSharedFlow() @@ -71,9 +66,10 @@ class CalculatorViewModel( init { currencyDataSource.getActiveCurrenciesFlow() .onStart { - _state.update { + val activeCurrencies = currencyDataSource.getActiveCurrencies() + setState { copy( - currencyList = currencyDataSource.getActiveCurrencies(), + currencyList = activeCurrencies, base = calculationStorage.currentBase, input = calculationStorage.lastInput, loading = true @@ -85,7 +81,7 @@ class CalculatorViewModel( } .onEach { Logger.d { "CalculatorViewModel currencyList changed: ${it.joinToString(",")}" } - _state.update { copy(currencyList = it) } + setState { copy(currencyList = it) } analyticsManager.setUserProperty(UserProperty.CurrencyCount(it.count().toString())) } @@ -110,7 +106,7 @@ class CalculatorViewModel( .launchIn(viewModelScope) private fun updateConversion() { - _state.update { copy(loading = true) } + setState { copy(loading = true) } data.conversion?.let { calculateConversions(it, ConversionState.Cached(it.date)) @@ -148,10 +144,10 @@ class CalculatorViewModel( } private fun calculateConversions(conversion: Conversion?, conversionState: ConversionState) = - _state.update { + setState { copy( - currencyList = _state.value.currencyList.onEach { - it.rate = conversion.calculateRate(it.code, _state.value.output) + currencyList = state.value.currencyList.onEach { + it.rate = conversion.calculateRate(it.code, state.value.output) .getFormatted(calculationStorage.precision) .toStandardDigits() }, @@ -165,22 +161,22 @@ class CalculatorViewModel( .calculate(input.toSupportedCharacters(), MAXIMUM_FLOATING_POINT) .mapTo { if (it.isFinite()) it.getFormatted(calculationStorage.precision) else "" } - _state.update { copy(output = output) } + setState { copy(output = output) } when { input.length > MAXIMUM_INPUT -> { _effect.emit(CalculatorEffect.TooBigInput) - _state.update { copy(input = input.dropLast(1)) } + setState { copy(input = input.dropLast(1)) } } output.length > MAXIMUM_OUTPUT -> { _effect.emit(CalculatorEffect.TooBigOutput) - _state.update { copy(input = input.dropLast(1)) } + setState { copy(input = input.dropLast(1)) } } state.value.currencyList.size < MINIMUM_ACTIVE_CURRENCY -> { _effect.emit(CalculatorEffect.FewCurrency) - _state.update { copy(loading = false) } + setState { copy(loading = false) } } else -> updateConversion() @@ -191,11 +187,12 @@ class CalculatorViewModel( viewModelScope.launchIgnored { data.conversion = null calculationStorage.currentBase = newBase - _state.update { + val symbol = currencyDataSource.getCurrencyByCode(newBase)?.symbol.orEmpty() + setState { copy( base = newBase, input = input, - symbol = currencyDataSource.getCurrencyByCode(newBase)?.symbol.orEmpty() + symbol = symbol ) } @@ -210,15 +207,15 @@ class CalculatorViewModel( Logger.d { "CalculatorViewModel onKeyPress $key" } when (key) { - KEY_AC -> _state.update { copy(input = "") } + KEY_AC -> setState { copy(input = "") } KEY_DEL -> state.value.input .whetherNot { it.isEmpty() } ?.apply { - _state.update { copy(input = substring(0, length - 1)) } + setState { copy(input = substring(0, length - 1)) } } - else -> _state.update { copy(input = state.value.input + key) } + else -> setState { copy(input = state.value.input + key) } } } @@ -233,7 +230,7 @@ class CalculatorViewModel( } } - _state.update { + setState { copy( base = code, input = newInput @@ -287,7 +284,7 @@ class CalculatorViewModel( analyticsManager.trackEvent(Event.PasteFromClipboard) - _state.update { copy(input = text.toSupportedCharacters()) } + setState { copy(input = text.toSupportedCharacters()) } } override fun onBarClick() = viewModelScope.launchIgnored { @@ -303,7 +300,7 @@ class CalculatorViewModel( override fun onBaseChange(base: String) { Logger.d { "CalculatorViewModel onBaseChange $base" } currentBaseChanged(base) - calculateOutput(_state.value.input) + calculateOutput(state.value.input) } // endregion } diff --git a/client/viewmodel/currencies/src/commonMain/kotlin/com/oztechan/ccc/client/viewmodel/currencies/CurrenciesViewModel.kt b/client/viewmodel/currencies/src/commonMain/kotlin/com/oztechan/ccc/client/viewmodel/currencies/CurrenciesViewModel.kt index 75a9eff767..4899c87657 100755 --- a/client/viewmodel/currencies/src/commonMain/kotlin/com/oztechan/ccc/client/viewmodel/currencies/CurrenciesViewModel.kt +++ b/client/viewmodel/currencies/src/commonMain/kotlin/com/oztechan/ccc/client/viewmodel/currencies/CurrenciesViewModel.kt @@ -13,18 +13,15 @@ import com.oztechan.ccc.client.core.analytics.model.Event import com.oztechan.ccc.client.core.analytics.model.Param import com.oztechan.ccc.client.core.analytics.model.UserProperty import com.oztechan.ccc.client.core.shared.constants.MINIMUM_ACTIVE_CURRENCY -import com.oztechan.ccc.client.core.viewmodel.BaseSEEDViewModel +import com.oztechan.ccc.client.core.viewmodel.SEEDViewModel import com.oztechan.ccc.client.core.viewmodel.util.launchIgnored -import com.oztechan.ccc.client.core.viewmodel.util.update import com.oztechan.ccc.client.datasource.currency.CurrencyDataSource import com.oztechan.ccc.client.repository.adcontrol.AdControlRepository import com.oztechan.ccc.client.storage.app.AppStorage import com.oztechan.ccc.client.storage.calculation.CalculationStorage import com.oztechan.ccc.common.core.model.Currency import kotlinx.coroutines.flow.MutableSharedFlow -import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.asSharedFlow -import kotlinx.coroutines.flow.asStateFlow import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.onEach @@ -35,17 +32,14 @@ class CurrenciesViewModel( private val currencyDataSource: CurrencyDataSource, adControlRepository: AdControlRepository, private val analyticsManager: AnalyticsManager -) : BaseSEEDViewModel(), +) : SEEDViewModel( + CurrenciesState( + isBannerAdVisible = adControlRepository.shouldShowBannerAd(), + isOnboardingVisible = appStorage.firstRun + ) +), CurrenciesEvent { // region SEED - private val _state = MutableStateFlow( - CurrenciesState( - isBannerAdVisible = adControlRepository.shouldShowBannerAd(), - isOnboardingVisible = appStorage.firstRun - ) - ) - override val state = _state.asStateFlow() - private val _effect = MutableSharedFlow() override val effect = _effect.asSharedFlow() @@ -108,7 +102,7 @@ class CurrenciesViewModel( symbol.contains(txt, true) }.toMutableList() .let { - _state.update { copy(currencyList = it, loading = false) } + setState { copy(currencyList = it, loading = false) } }.run { data.query = txt } @@ -132,21 +126,21 @@ class CurrenciesViewModel( ?.let { _effect.emit(CurrenciesEffect.FewCurrency) } ?: run { appStorage.firstRun = false - _state.update { copy(isOnboardingVisible = false) } + setState { copy(isOnboardingVisible = false) } filterList("") _effect.emit(CurrenciesEffect.OpenCalculator) } } - override fun onItemLongClick() = _state.value.selectionVisibility.let { + override fun onItemLongClick() = state.value.selectionVisibility.let { Logger.d { "CurrenciesViewModel onItemLongClick" } - _state.update { copy(selectionVisibility = !it) } + setState { copy(selectionVisibility = !it) } } override fun onCloseClick() = viewModelScope.launchIgnored { Logger.d { "CurrenciesViewModel onCloseClick" } - if (_state.value.selectionVisibility) { - _state.update { copy(selectionVisibility = false) } + if (state.value.selectionVisibility) { + setState { copy(selectionVisibility = false) } } else { _effect.emit(CurrenciesEffect.Back) }.run { diff --git a/client/viewmodel/main/src/commonMain/kotlin/com/oztechan/ccc/client/viewmodel/main/MainViewModel.kt b/client/viewmodel/main/src/commonMain/kotlin/com/oztechan/ccc/client/viewmodel/main/MainViewModel.kt index 3aa79de6a7..fa2d088cd5 100644 --- a/client/viewmodel/main/src/commonMain/kotlin/com/oztechan/ccc/client/viewmodel/main/MainViewModel.kt +++ b/client/viewmodel/main/src/commonMain/kotlin/com/oztechan/ccc/client/viewmodel/main/MainViewModel.kt @@ -10,17 +10,13 @@ import com.oztechan.ccc.client.core.analytics.AnalyticsManager import com.oztechan.ccc.client.core.analytics.model.UserProperty import com.oztechan.ccc.client.core.shared.model.AppTheme import com.oztechan.ccc.client.core.shared.util.isNotPassed -import com.oztechan.ccc.client.core.viewmodel.BaseSEEDViewModel -import com.oztechan.ccc.client.core.viewmodel.util.update +import com.oztechan.ccc.client.core.viewmodel.SEEDViewModel import com.oztechan.ccc.client.repository.adcontrol.AdControlRepository import com.oztechan.ccc.client.repository.appconfig.AppConfigRepository import com.oztechan.ccc.client.storage.app.AppStorage import kotlinx.coroutines.delay import kotlinx.coroutines.flow.MutableSharedFlow -import kotlinx.coroutines.flow.MutableStateFlow -import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.flow.asSharedFlow -import kotlinx.coroutines.flow.asStateFlow import kotlinx.coroutines.isActive import kotlinx.coroutines.launch @@ -31,16 +27,14 @@ class MainViewModel( private val adConfigService: AdConfigService, private val adControlRepository: AdControlRepository, analyticsManager: AnalyticsManager, -) : BaseSEEDViewModel(), MainEvent { - // region SEED - private val _state = MutableStateFlow( - MainState( - shouldOnboardUser = appStorage.firstRun, - appTheme = appStorage.appTheme - ) +) : SEEDViewModel( + MainState( + shouldOnboardUser = appStorage.firstRun, + appTheme = appStorage.appTheme ) - override val state: StateFlow = _state.asStateFlow() - +), + MainEvent { + // region SEED private val _effect = MutableSharedFlow() override val effect = _effect.asSharedFlow() @@ -124,7 +118,7 @@ class MainViewModel( override fun onResume() { Logger.d { "MainViewModel onResume" } - _state.update { + setState { copy( shouldOnboardUser = appStorage.firstRun, appTheme = appStorage.appTheme diff --git a/client/viewmodel/premium/src/commonMain/kotlin/com/oztechan/ccc/client/viewmodel/premium/PremiumViewModel.kt b/client/viewmodel/premium/src/commonMain/kotlin/com/oztechan/ccc/client/viewmodel/premium/PremiumViewModel.kt index e39c128b4b..0520a4f3f9 100644 --- a/client/viewmodel/premium/src/commonMain/kotlin/com/oztechan/ccc/client/viewmodel/premium/PremiumViewModel.kt +++ b/client/viewmodel/premium/src/commonMain/kotlin/com/oztechan/ccc/client/viewmodel/premium/PremiumViewModel.kt @@ -8,26 +8,23 @@ import co.touchlab.kermit.Logger import com.github.submob.scopemob.whether import com.oztechan.ccc.client.core.shared.util.isNotPassed import com.oztechan.ccc.client.core.viewmodel.BaseData -import com.oztechan.ccc.client.core.viewmodel.BaseSEEDViewModel +import com.oztechan.ccc.client.core.viewmodel.SEEDViewModel import com.oztechan.ccc.client.core.viewmodel.util.launchIgnored -import com.oztechan.ccc.client.core.viewmodel.util.update import com.oztechan.ccc.client.storage.app.AppStorage import com.oztechan.ccc.client.viewmodel.premium.model.OldPurchase import com.oztechan.ccc.client.viewmodel.premium.model.PremiumData import com.oztechan.ccc.client.viewmodel.premium.model.PremiumType import com.oztechan.ccc.client.viewmodel.premium.util.calculatePremiumEnd import kotlinx.coroutines.flow.MutableSharedFlow -import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.asSharedFlow -import kotlinx.coroutines.flow.asStateFlow class PremiumViewModel( private val appStorage: AppStorage -) : BaseSEEDViewModel(), PremiumEvent { +) : SEEDViewModel( + PremiumState() +), + PremiumEvent { // region SEED - private val _state = MutableStateFlow(PremiumState()) - override val state = _state.asStateFlow() - private val _effect = MutableSharedFlow() override val effect = _effect.asSharedFlow() @@ -64,7 +61,7 @@ class PremiumViewModel( startDate = this.date, isRestorePurchase = true ) - _state.update { copy(loading = false) } + setState { copy(loading = false) } } } @@ -80,15 +77,15 @@ class PremiumViewModel( tempList.add(it) } tempList.sortBy { it.ordinal } - _state.update { copy(premiumTypes = tempList) } + setState { copy(premiumTypes = tempList) } }.also { - _state.update { copy(loading = false) } // in case list is empty, loading will be false + setState { copy(loading = false) } // in case list is empty, loading will be false } } override fun onPremiumItemClick(type: PremiumType) = viewModelScope.launchIgnored { Logger.d { "PremiumViewModel onPremiumItemClick ${type.data.duration}" } - _state.update { + setState { copy(loading = type != PremiumType.VIDEO) } _effect.emit(PremiumEffect.LaunchActivatePremiumFlow(type)) @@ -96,7 +93,7 @@ class PremiumViewModel( override fun onPremiumActivationFailed() { Logger.d { "PremiumViewModel onPremiumActivationFailed" } - _state.update { copy(loading = false) } + setState { copy(loading = false) } } // endregion } diff --git a/client/viewmodel/selectcurrency/src/commonMain/kotlin/com/oztechan/ccc/client/viewmodel/selectcurrency/SelectCurrencyViewModel.kt b/client/viewmodel/selectcurrency/src/commonMain/kotlin/com/oztechan/ccc/client/viewmodel/selectcurrency/SelectCurrencyViewModel.kt index f8e5a2f820..377009e329 100644 --- a/client/viewmodel/selectcurrency/src/commonMain/kotlin/com/oztechan/ccc/client/viewmodel/selectcurrency/SelectCurrencyViewModel.kt +++ b/client/viewmodel/selectcurrency/src/commonMain/kotlin/com/oztechan/ccc/client/viewmodel/selectcurrency/SelectCurrencyViewModel.kt @@ -6,25 +6,22 @@ package com.oztechan.ccc.client.viewmodel.selectcurrency import co.touchlab.kermit.Logger import com.oztechan.ccc.client.core.shared.constants.MINIMUM_ACTIVE_CURRENCY import com.oztechan.ccc.client.core.viewmodel.BaseData -import com.oztechan.ccc.client.core.viewmodel.BaseSEEDViewModel +import com.oztechan.ccc.client.core.viewmodel.SEEDViewModel import com.oztechan.ccc.client.core.viewmodel.util.launchIgnored -import com.oztechan.ccc.client.core.viewmodel.util.update import com.oztechan.ccc.client.datasource.currency.CurrencyDataSource import com.oztechan.ccc.common.core.model.Currency import kotlinx.coroutines.flow.MutableSharedFlow -import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.asSharedFlow -import kotlinx.coroutines.flow.asStateFlow import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.onEach class SelectCurrencyViewModel( currencyDataSource: CurrencyDataSource -) : BaseSEEDViewModel(), SelectCurrencyEvent { +) : SEEDViewModel( + SelectCurrencyState() +), + SelectCurrencyEvent { // region SEED - private val _state = MutableStateFlow(SelectCurrencyState()) - override val state = _state.asStateFlow() - private val _effect = MutableSharedFlow() override val effect = _effect.asSharedFlow() @@ -36,7 +33,7 @@ class SelectCurrencyViewModel( init { currencyDataSource.getActiveCurrenciesFlow() .onEach { - _state.update { + setState { copy( currencyList = it, loading = false, diff --git a/client/viewmodel/settings/src/commonMain/kotlin/com/oztechan/ccc/client/viewmodel/settings/SettingsViewModel.kt b/client/viewmodel/settings/src/commonMain/kotlin/com/oztechan/ccc/client/viewmodel/settings/SettingsViewModel.kt index 3830157b17..55a1fe194e 100644 --- a/client/viewmodel/settings/src/commonMain/kotlin/com/oztechan/ccc/client/viewmodel/settings/SettingsViewModel.kt +++ b/client/viewmodel/settings/src/commonMain/kotlin/com/oztechan/ccc/client/viewmodel/settings/SettingsViewModel.kt @@ -9,9 +9,8 @@ import com.oztechan.ccc.client.core.analytics.model.Event import com.oztechan.ccc.client.core.shared.model.AppTheme import com.oztechan.ccc.client.core.shared.util.isPassed import com.oztechan.ccc.client.core.shared.util.toDateString -import com.oztechan.ccc.client.core.viewmodel.BaseSEEDViewModel +import com.oztechan.ccc.client.core.viewmodel.SEEDViewModel import com.oztechan.ccc.client.core.viewmodel.util.launchIgnored -import com.oztechan.ccc.client.core.viewmodel.util.update import com.oztechan.ccc.client.datasource.currency.CurrencyDataSource import com.oztechan.ccc.client.datasource.watcher.WatcherDataSource import com.oztechan.ccc.client.repository.adcontrol.AdControlRepository @@ -25,9 +24,7 @@ import com.oztechan.ccc.client.viewmodel.settings.util.indexToNumber import com.oztechan.ccc.common.datasource.conversion.ConversionDataSource import kotlinx.coroutines.delay import kotlinx.coroutines.flow.MutableSharedFlow -import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.asSharedFlow -import kotlinx.coroutines.flow.asStateFlow import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.onEach @@ -39,15 +36,14 @@ class SettingsViewModel( private val currencyDataSource: CurrencyDataSource, private val conversionDataSource: ConversionDataSource, watcherDataSource: WatcherDataSource, - adControlRepository: AdControlRepository, + private val adControlRepository: AdControlRepository, private val appConfigRepository: AppConfigRepository, private val analyticsManager: AnalyticsManager -) : BaseSEEDViewModel(), SettingsEvent { +) : SEEDViewModel( + SettingsState(isBannerAdVisible = adControlRepository.shouldShowBannerAd()) +), + SettingsEvent { // region SEED - private val _state = - MutableStateFlow(SettingsState(isBannerAdVisible = adControlRepository.shouldShowBannerAd())) - override val state = _state.asStateFlow() - private val _effect = MutableSharedFlow() override val effect = _effect.asSharedFlow() @@ -57,7 +53,7 @@ class SettingsViewModel( // endregion init { - _state.update { + setState { copy( appThemeType = AppTheme.getThemeByValueOrDefault(appStorage.appTheme), premiumStatus = appStorage.premiumEndDate.toPremiumStatus(), @@ -68,12 +64,12 @@ class SettingsViewModel( currencyDataSource.getActiveCurrenciesFlow() .onEach { - _state.update { copy(activeCurrencyCount = it.size) } + setState { copy(activeCurrencyCount = it.size) } }.launchIn(viewModelScope) watcherDataSource.getWatchersFlow() .onEach { - _state.update { copy(activeWatcherCount = it.size) } + setState { copy(activeWatcherCount = it.size) } }.launchIn(viewModelScope) } @@ -175,12 +171,12 @@ class SettingsViewModel( override fun onPrecisionSelect(index: Int) { Logger.d { "SettingsViewModel onPrecisionSelect $index" } calculationStorage.precision = index.indexToNumber() - _state.update { copy(precision = index.indexToNumber()) } + setState { copy(precision = index.indexToNumber()) } } override fun onThemeChange(theme: AppTheme) = viewModelScope.launchIgnored { Logger.d { "SettingsViewModel onThemeChange $theme" } - _state.update { copy(appThemeType = theme) } + setState { copy(appThemeType = theme) } appStorage.appTheme = theme.themeValue _effect.emit(SettingsEffect.ChangeTheme(theme.themeValue)) } diff --git a/client/viewmodel/watchers/src/commonMain/kotlin/com/oztechan/ccc/client/viewmodel/watchers/WatchersViewModel.kt b/client/viewmodel/watchers/src/commonMain/kotlin/com/oztechan/ccc/client/viewmodel/watchers/WatchersViewModel.kt index 78f3998f34..7eac27add9 100644 --- a/client/viewmodel/watchers/src/commonMain/kotlin/com/oztechan/ccc/client/viewmodel/watchers/WatchersViewModel.kt +++ b/client/viewmodel/watchers/src/commonMain/kotlin/com/oztechan/ccc/client/viewmodel/watchers/WatchersViewModel.kt @@ -5,9 +5,8 @@ import com.oztechan.ccc.client.core.analytics.AnalyticsManager import com.oztechan.ccc.client.core.analytics.model.UserProperty import com.oztechan.ccc.client.core.shared.util.toStandardDigits import com.oztechan.ccc.client.core.shared.util.toSupportedCharacters -import com.oztechan.ccc.client.core.viewmodel.BaseSEEDViewModel +import com.oztechan.ccc.client.core.viewmodel.SEEDViewModel import com.oztechan.ccc.client.core.viewmodel.util.launchIgnored -import com.oztechan.ccc.client.core.viewmodel.util.update import com.oztechan.ccc.client.datasource.currency.CurrencyDataSource import com.oztechan.ccc.client.datasource.watcher.WatcherDataSource import com.oztechan.ccc.client.repository.adcontrol.AdControlRepository @@ -15,9 +14,7 @@ import com.oztechan.ccc.client.viewmodel.watchers.WatchersData.Companion.MAXIMUM import com.oztechan.ccc.client.viewmodel.watchers.WatchersData.Companion.MAXIMUM_NUMBER_OF_WATCHER import com.oztechan.ccc.common.core.model.Watcher import kotlinx.coroutines.flow.MutableSharedFlow -import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.asSharedFlow -import kotlinx.coroutines.flow.asStateFlow import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.onEach import kotlinx.coroutines.launch @@ -27,12 +24,11 @@ class WatchersViewModel( private val watcherDataSource: WatcherDataSource, adControlRepository: AdControlRepository, private val analyticsManager: AnalyticsManager -) : BaseSEEDViewModel(), WatchersEvent { +) : SEEDViewModel( + WatchersState(isBannerAdVisible = adControlRepository.shouldShowBannerAd()) +), + WatchersEvent { // region SEED - private val _state = - MutableStateFlow(WatchersState(isBannerAdVisible = adControlRepository.shouldShowBannerAd())) - override val state = _state.asStateFlow() - private val _effect = MutableSharedFlow() override val effect = _effect.asSharedFlow() @@ -44,7 +40,7 @@ class WatchersViewModel( init { watcherDataSource.getWatchersFlow() .onEach { - _state.update { copy(watcherList = it) } + setState { copy(watcherList = it) } analyticsManager.setUserProperty(UserProperty.WatcherCount(it.count().toString())) }.launchIn(viewModelScope) } @@ -70,10 +66,11 @@ class WatchersViewModel( watcherDataSource.updateWatcherBaseById(newBase, watcher.id) } - override fun onTargetChanged(watcher: Watcher, newTarget: String) = viewModelScope.launchIgnored { - Logger.d { "WatcherViewModel onTargetChanged $watcher $newTarget" } - watcherDataSource.updateWatcherTargetById(newTarget, watcher.id) - } + override fun onTargetChanged(watcher: Watcher, newTarget: String) = + viewModelScope.launchIgnored { + Logger.d { "WatcherViewModel onTargetChanged $watcher $newTarget" } + watcherDataSource.updateWatcherTargetById(newTarget, watcher.id) + } override fun onAddClick() = viewModelScope.launchIgnored { Logger.d { "WatcherViewModel onAddClick" } @@ -95,10 +92,11 @@ class WatchersViewModel( watcherDataSource.deleteWatcher(watcher.id) } - override fun onRelationChange(watcher: Watcher, isGreater: Boolean) = viewModelScope.launchIgnored { - Logger.d { "WatcherViewModel onRelationChange $watcher $isGreater" } - watcherDataSource.updateWatcherRelationById(isGreater, watcher.id) - } + override fun onRelationChange(watcher: Watcher, isGreater: Boolean) = + viewModelScope.launchIgnored { + Logger.d { "WatcherViewModel onRelationChange $watcher $isGreater" } + watcherDataSource.updateWatcherRelationById(isGreater, watcher.id) + } override fun onRateChange(watcher: Watcher, rate: String): String { Logger.d { "WatcherViewModel onRateChange $watcher $rate" } diff --git a/ios/CCC/Util/ObservableSEEDViewModel.swift b/ios/CCC/Util/ObservableSEEDViewModel.swift index c2b43a6319..18c3a4f31d 100644 --- a/ios/CCC/Util/ObservableSEEDViewModel.swift +++ b/ios/CCC/Util/ObservableSEEDViewModel.swift @@ -14,7 +14,7 @@ final class ObservableSEEDViewModel< Effect: BaseEffect, Event: BaseEvent, Data: BaseData, - ViewModel: BaseSEEDViewModel + ViewModel: SEEDViewModel >: ObservableObject { let viewModel: ViewModel = koin.get() @@ -30,7 +30,7 @@ final class ObservableSEEDViewModel< logger.d(message: { "ObservableSEED \(ViewModel.description()) init" }) // swiftlint:disable:next force_cast - self.state = viewModel.state!.value as! State + self.state = viewModel.state.value as! State self.event = viewModel.event! } @@ -41,12 +41,11 @@ final class ObservableSEEDViewModel< func startObserving() { logger.d(message: { "ObservableSEED \(ViewModel.description()) startObserving" }) - if viewModel.state != nil { - stateClosable = CoroutineUtilKt.observeWithCloseable(viewModel.state!, onChange: { - // swiftlint:disable:next force_cast - self.state = $0 as! State - }) - } + stateClosable = CoroutineUtilKt.observeWithCloseable(viewModel.state, onChange: { + // swiftlint:disable:next force_cast + self.state = $0 as! State + }) + if viewModel.effect != nil { effectClosable = CoroutineUtilKt.observeWithCloseable(viewModel.effect!, onChange: { // swiftlint:disable:next force_cast From 394c5c60f5b5fd50d1ea8a1f0da29bca52520998 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 23 Jul 2024 10:46:44 +0200 Subject: [PATCH 38/89] [Oztechan/CCC#1457] Lock file maintenance (#3711) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: Mustafa Ozhan --- ios/Gemfile.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/ios/Gemfile.lock b/ios/Gemfile.lock index b6bf540f6f..a4a8d3ef97 100644 --- a/ios/Gemfile.lock +++ b/ios/Gemfile.lock @@ -10,8 +10,8 @@ GEM artifactory (3.0.17) atomos (0.1.3) aws-eventstream (1.3.0) - aws-partitions (1.956.0) - aws-sdk-core (3.201.1) + aws-partitions (1.957.0) + aws-sdk-core (3.201.2) aws-eventstream (~> 1, >= 1.3.0) aws-partitions (~> 1, >= 1.651.0) aws-sigv4 (~> 1.8) @@ -171,7 +171,7 @@ GEM optparse (0.5.0) os (1.1.4) plist (3.7.1) - public_suffix (6.0.0) + public_suffix (6.0.1) rake (13.2.1) representable (3.2.0) declarative (< 0.1.0) From dd61e11bcd7de21cd427995b601f902892ad743b Mon Sep 17 00:00:00 2001 From: Mustafa Ozhan Date: Tue, 23 Jul 2024 10:47:16 +0200 Subject: [PATCH 39/89] [Oztechan/CCC#3712] Move Data into SEEDViewModel (#3713) * [Oztechan/CCC#3712] Move Data into SEEDViewModel * [Oztechan/CCC#3712] Move Data into SEEDViewModel * [Oztechan/CCC#3712] Move Data into SEEDViewModel --- .../ccc/android/viewmodel/widget/WidgetViewModel.kt | 7 +++---- .../ccc/client/core/viewmodel/SEEDViewModel.kt | 13 +++++++++++-- .../viewmodel/calculator/CalculatorViewModel.kt | 5 ++--- .../viewmodel/currencies/CurrenciesViewModel.kt | 7 +++---- .../ccc/client/viewmodel/main/MainViewModel.kt | 7 +++---- .../client/viewmodel/premium/PremiumViewModel.kt | 4 +--- .../viewmodel/premium/PremiumViewModelTest.kt | 9 +++++++-- .../selectcurrency/SelectCurrencyViewModel.kt | 4 +--- .../selectcurrency/SelectCurrencyViewModelTest.kt | 9 +++++++-- .../client/viewmodel/settings/SettingsViewModel.kt | 5 ++--- .../client/viewmodel/watchers/WatchersViewModel.kt | 5 ++--- 11 files changed, 42 insertions(+), 33 deletions(-) diff --git a/android/viewmodel/widget/src/main/kotlin/com/oztechan/ccc/android/viewmodel/widget/WidgetViewModel.kt b/android/viewmodel/widget/src/main/kotlin/com/oztechan/ccc/android/viewmodel/widget/WidgetViewModel.kt index 64dd1a716b..72bfa348a5 100644 --- a/android/viewmodel/widget/src/main/kotlin/com/oztechan/ccc/android/viewmodel/widget/WidgetViewModel.kt +++ b/android/viewmodel/widget/src/main/kotlin/com/oztechan/ccc/android/viewmodel/widget/WidgetViewModel.kt @@ -23,10 +23,11 @@ class WidgetViewModel( private val currencyDataSource: CurrencyDataSource, private val appStorage: AppStorage ) : SEEDViewModel( - WidgetState( + initialState = WidgetState( currentBase = calculationStorage.currentBase, isPremium = appStorage.premiumEndDate.isNotPassed() - ) + ), + initialData = WidgetData() ), WidgetEvent { @@ -35,8 +36,6 @@ class WidgetViewModel( override val effect = _effect.asSharedFlow() override val event = this as WidgetEvent - - override val data = WidgetData() // endregion private fun refreshWidgetData() { diff --git a/client/core/viewmodel/src/commonMain/kotlin/com/oztechan/ccc/client/core/viewmodel/SEEDViewModel.kt b/client/core/viewmodel/src/commonMain/kotlin/com/oztechan/ccc/client/core/viewmodel/SEEDViewModel.kt index 119b998ebf..b13ed463aa 100644 --- a/client/core/viewmodel/src/commonMain/kotlin/com/oztechan/ccc/client/core/viewmodel/SEEDViewModel.kt +++ b/client/core/viewmodel/src/commonMain/kotlin/com/oztechan/ccc/client/core/viewmodel/SEEDViewModel.kt @@ -13,16 +13,25 @@ abstract class SEEDViewModel< Effect : BaseEffect, Event : BaseEvent, Data : BaseData - >(initialState: State) : BaseViewModel() { + >( + initialState: State, + initialData: Data? = null +) : BaseViewModel() { // region SEED private val _state: MutableStateFlow = MutableStateFlow(initialState) val state = _state.asStateFlow() abstract val effect: SharedFlow? abstract val event: Event? - abstract val data: Data? + lateinit var data: Data // endregion + init { + if (initialData != null) { + this.data = initialData + } + } + protected fun setState(newState: State.() -> State) { _state.value = state.value.newState() } diff --git a/client/viewmodel/calculator/src/commonMain/kotlin/com/oztechan/ccc/client/viewmodel/calculator/CalculatorViewModel.kt b/client/viewmodel/calculator/src/commonMain/kotlin/com/oztechan/ccc/client/viewmodel/calculator/CalculatorViewModel.kt index 6b8d10bd4d..61dda76de9 100644 --- a/client/viewmodel/calculator/src/commonMain/kotlin/com/oztechan/ccc/client/viewmodel/calculator/CalculatorViewModel.kt +++ b/client/viewmodel/calculator/src/commonMain/kotlin/com/oztechan/ccc/client/viewmodel/calculator/CalculatorViewModel.kt @@ -51,7 +51,8 @@ class CalculatorViewModel( adControlRepository: AdControlRepository, private val analyticsManager: AnalyticsManager ) : SEEDViewModel( - CalculatorState(isBannerAdVisible = adControlRepository.shouldShowBannerAd()) + initialState = CalculatorState(isBannerAdVisible = adControlRepository.shouldShowBannerAd()), + initialData = CalculatorData() ), CalculatorEvent { // region SEED @@ -59,8 +60,6 @@ class CalculatorViewModel( override val effect = _effect.asSharedFlow() override val event = this as CalculatorEvent - - override val data = CalculatorData() // endregion init { diff --git a/client/viewmodel/currencies/src/commonMain/kotlin/com/oztechan/ccc/client/viewmodel/currencies/CurrenciesViewModel.kt b/client/viewmodel/currencies/src/commonMain/kotlin/com/oztechan/ccc/client/viewmodel/currencies/CurrenciesViewModel.kt index 4899c87657..5f1ff4f348 100755 --- a/client/viewmodel/currencies/src/commonMain/kotlin/com/oztechan/ccc/client/viewmodel/currencies/CurrenciesViewModel.kt +++ b/client/viewmodel/currencies/src/commonMain/kotlin/com/oztechan/ccc/client/viewmodel/currencies/CurrenciesViewModel.kt @@ -33,10 +33,11 @@ class CurrenciesViewModel( adControlRepository: AdControlRepository, private val analyticsManager: AnalyticsManager ) : SEEDViewModel( - CurrenciesState( + initialState = CurrenciesState( isBannerAdVisible = adControlRepository.shouldShowBannerAd(), isOnboardingVisible = appStorage.firstRun - ) + ), + initialData = CurrenciesData() ), CurrenciesEvent { // region SEED @@ -44,8 +45,6 @@ class CurrenciesViewModel( override val effect = _effect.asSharedFlow() override val event = this as CurrenciesEvent - - override val data = CurrenciesData() // endregion init { diff --git a/client/viewmodel/main/src/commonMain/kotlin/com/oztechan/ccc/client/viewmodel/main/MainViewModel.kt b/client/viewmodel/main/src/commonMain/kotlin/com/oztechan/ccc/client/viewmodel/main/MainViewModel.kt index fa2d088cd5..3093dcae06 100644 --- a/client/viewmodel/main/src/commonMain/kotlin/com/oztechan/ccc/client/viewmodel/main/MainViewModel.kt +++ b/client/viewmodel/main/src/commonMain/kotlin/com/oztechan/ccc/client/viewmodel/main/MainViewModel.kt @@ -28,10 +28,11 @@ class MainViewModel( private val adControlRepository: AdControlRepository, analyticsManager: AnalyticsManager, ) : SEEDViewModel( - MainState( + initialState = MainState( shouldOnboardUser = appStorage.firstRun, appTheme = appStorage.appTheme - ) + ), + initialData = MainData() ), MainEvent { // region SEED @@ -39,8 +40,6 @@ class MainViewModel( override val effect = _effect.asSharedFlow() override val event = this as MainEvent - - override val data = MainData() // endregion init { diff --git a/client/viewmodel/premium/src/commonMain/kotlin/com/oztechan/ccc/client/viewmodel/premium/PremiumViewModel.kt b/client/viewmodel/premium/src/commonMain/kotlin/com/oztechan/ccc/client/viewmodel/premium/PremiumViewModel.kt index 0520a4f3f9..75262918f5 100644 --- a/client/viewmodel/premium/src/commonMain/kotlin/com/oztechan/ccc/client/viewmodel/premium/PremiumViewModel.kt +++ b/client/viewmodel/premium/src/commonMain/kotlin/com/oztechan/ccc/client/viewmodel/premium/PremiumViewModel.kt @@ -21,7 +21,7 @@ import kotlinx.coroutines.flow.asSharedFlow class PremiumViewModel( private val appStorage: AppStorage ) : SEEDViewModel( - PremiumState() + initialState = PremiumState() ), PremiumEvent { // region SEED @@ -29,8 +29,6 @@ class PremiumViewModel( override val effect = _effect.asSharedFlow() override val event = this as PremiumEvent - - override val data: BaseData? = null // endregion // region Event diff --git a/client/viewmodel/premium/src/commonTest/kotlin/com/oztechan/ccc/client/viewmodel/premium/PremiumViewModelTest.kt b/client/viewmodel/premium/src/commonTest/kotlin/com/oztechan/ccc/client/viewmodel/premium/PremiumViewModelTest.kt index c4dd0fb5b4..a923d4210d 100644 --- a/client/viewmodel/premium/src/commonTest/kotlin/com/oztechan/ccc/client/viewmodel/premium/PremiumViewModelTest.kt +++ b/client/viewmodel/premium/src/commonTest/kotlin/com/oztechan/ccc/client/viewmodel/premium/PremiumViewModelTest.kt @@ -27,10 +27,10 @@ import kotlinx.coroutines.test.setMain import kotlin.test.BeforeTest import kotlin.test.Test import kotlin.test.assertEquals +import kotlin.test.assertFailsWith import kotlin.test.assertFalse import kotlin.test.assertIs import kotlin.test.assertNotNull -import kotlin.test.assertNull import kotlin.test.assertTrue import kotlin.time.Duration.Companion.days import kotlin.time.Duration.Companion.seconds @@ -64,7 +64,12 @@ internal class PremiumViewModelTest { // SEED @Test fun `init updates data correctly`() { - assertNull(viewModel.data) + assertFailsWith { + viewModel.data + }.message.let { + assertNotNull(it) + assertEquals("lateinit property data has not been initialized", it) + } } // Event diff --git a/client/viewmodel/selectcurrency/src/commonMain/kotlin/com/oztechan/ccc/client/viewmodel/selectcurrency/SelectCurrencyViewModel.kt b/client/viewmodel/selectcurrency/src/commonMain/kotlin/com/oztechan/ccc/client/viewmodel/selectcurrency/SelectCurrencyViewModel.kt index 377009e329..8228c6d8ab 100644 --- a/client/viewmodel/selectcurrency/src/commonMain/kotlin/com/oztechan/ccc/client/viewmodel/selectcurrency/SelectCurrencyViewModel.kt +++ b/client/viewmodel/selectcurrency/src/commonMain/kotlin/com/oztechan/ccc/client/viewmodel/selectcurrency/SelectCurrencyViewModel.kt @@ -18,7 +18,7 @@ import kotlinx.coroutines.flow.onEach class SelectCurrencyViewModel( currencyDataSource: CurrencyDataSource ) : SEEDViewModel( - SelectCurrencyState() + initialState = SelectCurrencyState() ), SelectCurrencyEvent { // region SEED @@ -26,8 +26,6 @@ class SelectCurrencyViewModel( override val effect = _effect.asSharedFlow() override val event = this as SelectCurrencyEvent - - override val data: BaseData? = null // endregion init { diff --git a/client/viewmodel/selectcurrency/src/commonTest/kotlin/com/oztechan/ccc/client/viewmodel/selectcurrency/SelectCurrencyViewModelTest.kt b/client/viewmodel/selectcurrency/src/commonTest/kotlin/com/oztechan/ccc/client/viewmodel/selectcurrency/SelectCurrencyViewModelTest.kt index 3ff8528c27..4ea7e339aa 100644 --- a/client/viewmodel/selectcurrency/src/commonTest/kotlin/com/oztechan/ccc/client/viewmodel/selectcurrency/SelectCurrencyViewModelTest.kt +++ b/client/viewmodel/selectcurrency/src/commonTest/kotlin/com/oztechan/ccc/client/viewmodel/selectcurrency/SelectCurrencyViewModelTest.kt @@ -20,10 +20,10 @@ import kotlinx.coroutines.test.setMain import kotlin.test.BeforeTest import kotlin.test.Test import kotlin.test.assertEquals +import kotlin.test.assertFailsWith import kotlin.test.assertFalse import kotlin.test.assertIs import kotlin.test.assertNotNull -import kotlin.test.assertNull import kotlin.test.assertTrue import com.oztechan.ccc.common.core.model.Currency as CurrencyCommon @@ -55,7 +55,12 @@ internal class SelectCurrencyViewModelTest { // SEED @Test fun `init updates data correctly`() { - assertNull(subject.data) + assertFailsWith { + subject.data + }.message.let { + assertNotNull(it) + assertEquals("lateinit property data has not been initialized", it) + } } // init diff --git a/client/viewmodel/settings/src/commonMain/kotlin/com/oztechan/ccc/client/viewmodel/settings/SettingsViewModel.kt b/client/viewmodel/settings/src/commonMain/kotlin/com/oztechan/ccc/client/viewmodel/settings/SettingsViewModel.kt index 55a1fe194e..c8ff04f0c3 100644 --- a/client/viewmodel/settings/src/commonMain/kotlin/com/oztechan/ccc/client/viewmodel/settings/SettingsViewModel.kt +++ b/client/viewmodel/settings/src/commonMain/kotlin/com/oztechan/ccc/client/viewmodel/settings/SettingsViewModel.kt @@ -40,7 +40,8 @@ class SettingsViewModel( private val appConfigRepository: AppConfigRepository, private val analyticsManager: AnalyticsManager ) : SEEDViewModel( - SettingsState(isBannerAdVisible = adControlRepository.shouldShowBannerAd()) + initialState = SettingsState(isBannerAdVisible = adControlRepository.shouldShowBannerAd()), + initialData = SettingsData() ), SettingsEvent { // region SEED @@ -48,8 +49,6 @@ class SettingsViewModel( override val effect = _effect.asSharedFlow() override val event = this as SettingsEvent - - override val data = SettingsData() // endregion init { diff --git a/client/viewmodel/watchers/src/commonMain/kotlin/com/oztechan/ccc/client/viewmodel/watchers/WatchersViewModel.kt b/client/viewmodel/watchers/src/commonMain/kotlin/com/oztechan/ccc/client/viewmodel/watchers/WatchersViewModel.kt index 7eac27add9..d4d1ce4ba0 100644 --- a/client/viewmodel/watchers/src/commonMain/kotlin/com/oztechan/ccc/client/viewmodel/watchers/WatchersViewModel.kt +++ b/client/viewmodel/watchers/src/commonMain/kotlin/com/oztechan/ccc/client/viewmodel/watchers/WatchersViewModel.kt @@ -25,7 +25,8 @@ class WatchersViewModel( adControlRepository: AdControlRepository, private val analyticsManager: AnalyticsManager ) : SEEDViewModel( - WatchersState(isBannerAdVisible = adControlRepository.shouldShowBannerAd()) + initialState = WatchersState(isBannerAdVisible = adControlRepository.shouldShowBannerAd()), + initialData = WatchersData() ), WatchersEvent { // region SEED @@ -33,8 +34,6 @@ class WatchersViewModel( override val effect = _effect.asSharedFlow() override val event = this as WatchersEvent - - override val data = WatchersData() // endregion init { From b17c1cb6115d88eef56cafeef57f2ad3e5b07317 Mon Sep 17 00:00:00 2001 From: Mustafa Ozhan Date: Tue, 23 Jul 2024 17:36:06 +0200 Subject: [PATCH 40/89] [Oztechan/CCC#3714] Move Effect into SEEDViewModel (#3715) * [Oztechan/CCC#3714] Move Effect into SEEDViewModel * [Oztechan/CCC#3714] Move Effect into SEEDViewModel * [Oztechan/CCC#3714] Move Effect into SEEDViewModel * [Oztechan/CCC#3714] Move Effect into SEEDViewModel * [Oztechan/CCC#3714] Move Effect into SEEDViewModel * [Oztechan/CCC#3714] Move Effect into SEEDViewModel * [Oztechan/CCC#3714] Move Effect into SEEDViewModel --- .../viewmodel/widget/WidgetViewModel.kt | 7 +-- .../client/core/viewmodel/SEEDViewModel.kt | 11 ++++- .../calculator/CalculatorViewModel.kt | 27 +++++------- .../currencies/CurrenciesViewModel.kt | 15 +++---- .../client/viewmodel/main/MainViewModel.kt | 12 ++---- .../viewmodel/premium/PremiumViewModel.kt | 9 +--- .../selectcurrency/SelectCurrencyViewModel.kt | 9 +--- .../viewmodel/settings/SettingsViewModel.kt | 43 +++++++++---------- .../viewmodel/watchers/WatchersViewModel.kt | 17 +++----- ios/CCC/Util/ObservableSEEDViewModel.swift | 10 ++--- 10 files changed, 64 insertions(+), 96 deletions(-) diff --git a/android/viewmodel/widget/src/main/kotlin/com/oztechan/ccc/android/viewmodel/widget/WidgetViewModel.kt b/android/viewmodel/widget/src/main/kotlin/com/oztechan/ccc/android/viewmodel/widget/WidgetViewModel.kt index 72bfa348a5..629a877f13 100644 --- a/android/viewmodel/widget/src/main/kotlin/com/oztechan/ccc/android/viewmodel/widget/WidgetViewModel.kt +++ b/android/viewmodel/widget/src/main/kotlin/com/oztechan/ccc/android/viewmodel/widget/WidgetViewModel.kt @@ -13,8 +13,6 @@ import com.oztechan.ccc.client.datasource.currency.CurrencyDataSource import com.oztechan.ccc.client.service.backend.BackendApiService import com.oztechan.ccc.client.storage.app.AppStorage import com.oztechan.ccc.client.storage.calculation.CalculationStorage -import kotlinx.coroutines.flow.MutableSharedFlow -import kotlinx.coroutines.flow.asSharedFlow import kotlinx.coroutines.launch class WidgetViewModel( @@ -32,9 +30,6 @@ class WidgetViewModel( WidgetEvent { // region SEED - private val _effect = MutableSharedFlow() - override val effect = _effect.asSharedFlow() - override val event = this as WidgetEvent // endregion @@ -114,7 +109,7 @@ class WidgetViewModel( override fun onOpenAppClick() = viewModelScope.launchIgnored { Logger.d { "WidgetViewModel onOpenAppClick" } - _effect.emit(WidgetEffect.OpenApp) + setEffect { WidgetEffect.OpenApp } } // endregion } diff --git a/client/core/viewmodel/src/commonMain/kotlin/com/oztechan/ccc/client/core/viewmodel/SEEDViewModel.kt b/client/core/viewmodel/src/commonMain/kotlin/com/oztechan/ccc/client/core/viewmodel/SEEDViewModel.kt index b13ed463aa..30da178588 100644 --- a/client/core/viewmodel/src/commonMain/kotlin/com/oztechan/ccc/client/core/viewmodel/SEEDViewModel.kt +++ b/client/core/viewmodel/src/commonMain/kotlin/com/oztechan/ccc/client/core/viewmodel/SEEDViewModel.kt @@ -4,8 +4,9 @@ package com.oztechan.ccc.client.core.viewmodel +import kotlinx.coroutines.flow.MutableSharedFlow import kotlinx.coroutines.flow.MutableStateFlow -import kotlinx.coroutines.flow.SharedFlow +import kotlinx.coroutines.flow.asSharedFlow import kotlinx.coroutines.flow.asStateFlow abstract class SEEDViewModel< @@ -21,7 +22,9 @@ abstract class SEEDViewModel< private val _state: MutableStateFlow = MutableStateFlow(initialState) val state = _state.asStateFlow() - abstract val effect: SharedFlow? + private val _effect: MutableSharedFlow = MutableSharedFlow() + val effect = _effect.asSharedFlow() + abstract val event: Event? lateinit var data: Data // endregion @@ -35,4 +38,8 @@ abstract class SEEDViewModel< protected fun setState(newState: State.() -> State) { _state.value = state.value.newState() } + + protected suspend fun setEffect(newEffect: () -> Effect) { + _effect.emit(newEffect()) + } } diff --git a/client/viewmodel/calculator/src/commonMain/kotlin/com/oztechan/ccc/client/viewmodel/calculator/CalculatorViewModel.kt b/client/viewmodel/calculator/src/commonMain/kotlin/com/oztechan/ccc/client/viewmodel/calculator/CalculatorViewModel.kt index 61dda76de9..4f85595a01 100644 --- a/client/viewmodel/calculator/src/commonMain/kotlin/com/oztechan/ccc/client/viewmodel/calculator/CalculatorViewModel.kt +++ b/client/viewmodel/calculator/src/commonMain/kotlin/com/oztechan/ccc/client/viewmodel/calculator/CalculatorViewModel.kt @@ -33,8 +33,6 @@ import com.oztechan.ccc.client.viewmodel.calculator.util.getConversionStringFrom import com.oztechan.ccc.common.core.model.Conversion import com.oztechan.ccc.common.core.model.Currency import com.oztechan.ccc.common.datasource.conversion.ConversionDataSource -import kotlinx.coroutines.flow.MutableSharedFlow -import kotlinx.coroutines.flow.asSharedFlow import kotlinx.coroutines.flow.distinctUntilChanged import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.map @@ -56,9 +54,6 @@ class CalculatorViewModel( ), CalculatorEvent { // region SEED - private val _effect = MutableSharedFlow() - override val effect = _effect.asSharedFlow() - override val event = this as CalculatorEvent // endregion @@ -136,7 +131,7 @@ class CalculatorViewModel( } ?: run { Logger.w { "No offline conversion found in the DB" } - _effect.emit(CalculatorEffect.Error) + setEffect { CalculatorEffect.Error } calculateConversions(null, ConversionState.Error) } @@ -164,17 +159,17 @@ class CalculatorViewModel( when { input.length > MAXIMUM_INPUT -> { - _effect.emit(CalculatorEffect.TooBigInput) + setEffect { CalculatorEffect.TooBigInput } setState { copy(input = input.dropLast(1)) } } output.length > MAXIMUM_OUTPUT -> { - _effect.emit(CalculatorEffect.TooBigOutput) + setEffect { CalculatorEffect.TooBigOutput } setState { copy(input = input.dropLast(1)) } } state.value.currencyList.size < MINIMUM_ACTIVE_CURRENCY -> { - _effect.emit(CalculatorEffect.FewCurrency) + setEffect { CalculatorEffect.FewCurrency } setState { copy(loading = false) } } @@ -243,7 +238,7 @@ class CalculatorViewModel( analyticsManager.trackEvent(Event.ShowConversion(Param.Base(currency.code))) viewModelScope.launch { - _effect.emit( + setEffect { CalculatorEffect.ShowConversion( currency.getConversionStringFromBase( calculationStorage.currentBase, @@ -251,7 +246,7 @@ class CalculatorViewModel( ), currency.code ) - ) + } } } @@ -261,7 +256,7 @@ class CalculatorViewModel( analyticsManager.trackEvent(Event.CopyClipboard) viewModelScope.launch { - _effect.emit(CalculatorEffect.CopyToClipboard(amount)) + setEffect { CalculatorEffect.CopyToClipboard(amount) } } } @@ -270,12 +265,12 @@ class CalculatorViewModel( analyticsManager.trackEvent(Event.CopyClipboard) - _effect.emit(CalculatorEffect.CopyToClipboard(state.value.output)) + setEffect { CalculatorEffect.CopyToClipboard(state.value.output) } } override fun onInputLongClick() = viewModelScope.launchIgnored { Logger.d { "CalculatorViewModel onInputLongClick" } - _effect.emit(CalculatorEffect.ShowPasteRequest) + setEffect { CalculatorEffect.ShowPasteRequest } } override fun onPasteToInput(text: String) { @@ -288,12 +283,12 @@ class CalculatorViewModel( override fun onBarClick() = viewModelScope.launchIgnored { Logger.d { "CalculatorViewModel onBarClick" } - _effect.emit(CalculatorEffect.OpenBar) + setEffect { CalculatorEffect.OpenBar } } override fun onSettingsClicked() = viewModelScope.launchIgnored { Logger.d { "CalculatorViewModel onSettingsClicked" } - _effect.emit(CalculatorEffect.OpenSettings) + setEffect { CalculatorEffect.OpenSettings } } override fun onBaseChange(base: String) { diff --git a/client/viewmodel/currencies/src/commonMain/kotlin/com/oztechan/ccc/client/viewmodel/currencies/CurrenciesViewModel.kt b/client/viewmodel/currencies/src/commonMain/kotlin/com/oztechan/ccc/client/viewmodel/currencies/CurrenciesViewModel.kt index 5f1ff4f348..a7f97d0fbb 100755 --- a/client/viewmodel/currencies/src/commonMain/kotlin/com/oztechan/ccc/client/viewmodel/currencies/CurrenciesViewModel.kt +++ b/client/viewmodel/currencies/src/commonMain/kotlin/com/oztechan/ccc/client/viewmodel/currencies/CurrenciesViewModel.kt @@ -20,8 +20,6 @@ import com.oztechan.ccc.client.repository.adcontrol.AdControlRepository import com.oztechan.ccc.client.storage.app.AppStorage import com.oztechan.ccc.client.storage.calculation.CalculationStorage import com.oztechan.ccc.common.core.model.Currency -import kotlinx.coroutines.flow.MutableSharedFlow -import kotlinx.coroutines.flow.asSharedFlow import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.onEach @@ -41,9 +39,6 @@ class CurrenciesViewModel( ), CurrenciesEvent { // region SEED - private val _effect = MutableSharedFlow() - override val effect = _effect.asSharedFlow() - override val event = this as CurrenciesEvent // endregion @@ -74,7 +69,7 @@ class CurrenciesViewModel( .filter { it.isActive } .whether { it.size < MINIMUM_ACTIVE_CURRENCY } ?.whetherNot { appStorage.firstRun } - ?.run { _effect.emit(CurrenciesEffect.FewCurrency) } + ?.run { setEffect { CurrenciesEffect.FewCurrency } } private suspend fun verifyCurrentBase() = calculationStorage.currentBase.either( { it.isEmpty() }, @@ -91,7 +86,7 @@ class CurrenciesViewModel( analyticsManager.trackEvent(Event.BaseChange(Param.Base(newBase))) analyticsManager.setUserProperty(UserProperty.BaseCurrency(newBase)) - _effect.emit(CurrenciesEffect.ChangeBase(newBase)) + setEffect { CurrenciesEffect.ChangeBase(newBase) } } private fun filterList(txt: String) = data.unFilteredList @@ -122,12 +117,12 @@ class CurrenciesViewModel( data.unFilteredList .filter { it.isActive }.size .whether { it < MINIMUM_ACTIVE_CURRENCY } - ?.let { _effect.emit(CurrenciesEffect.FewCurrency) } + ?.let { setEffect { CurrenciesEffect.FewCurrency } } ?: run { appStorage.firstRun = false setState { copy(isOnboardingVisible = false) } filterList("") - _effect.emit(CurrenciesEffect.OpenCalculator) + setEffect { CurrenciesEffect.OpenCalculator } } } @@ -141,7 +136,7 @@ class CurrenciesViewModel( if (state.value.selectionVisibility) { setState { copy(selectionVisibility = false) } } else { - _effect.emit(CurrenciesEffect.Back) + setEffect { CurrenciesEffect.Back } }.run { filterList("") } diff --git a/client/viewmodel/main/src/commonMain/kotlin/com/oztechan/ccc/client/viewmodel/main/MainViewModel.kt b/client/viewmodel/main/src/commonMain/kotlin/com/oztechan/ccc/client/viewmodel/main/MainViewModel.kt index 3093dcae06..0386642a70 100644 --- a/client/viewmodel/main/src/commonMain/kotlin/com/oztechan/ccc/client/viewmodel/main/MainViewModel.kt +++ b/client/viewmodel/main/src/commonMain/kotlin/com/oztechan/ccc/client/viewmodel/main/MainViewModel.kt @@ -15,8 +15,6 @@ import com.oztechan.ccc.client.repository.adcontrol.AdControlRepository import com.oztechan.ccc.client.repository.appconfig.AppConfigRepository import com.oztechan.ccc.client.storage.app.AppStorage import kotlinx.coroutines.delay -import kotlinx.coroutines.flow.MutableSharedFlow -import kotlinx.coroutines.flow.asSharedFlow import kotlinx.coroutines.isActive import kotlinx.coroutines.launch @@ -36,8 +34,6 @@ class MainViewModel( ), MainEvent { // region SEED - private val _effect = MutableSharedFlow() - override val effect = _effect.asSharedFlow() override val event = this as MainEvent // endregion @@ -70,7 +66,7 @@ class MainViewModel( while (isActive && adControlRepository.shouldShowInterstitialAd()) { if (data.adVisibility) { - _effect.emit(MainEffect.ShowInterstitialAd) + setEffect { MainEffect.ShowInterstitialAd } } delay(adConfigService.config.interstitialAdPeriod) } @@ -87,12 +83,12 @@ class MainViewModel( private fun checkAppUpdate() { appConfigRepository.checkAppUpdate(data.isAppUpdateShown)?.let { isCancelable -> viewModelScope.launch { - _effect.emit( + setEffect { MainEffect.AppUpdateEffect( isCancelable, appConfigRepository.getMarketLink() ) - ) + } data.isAppUpdateShown = true } } @@ -102,7 +98,7 @@ class MainViewModel( if (appConfigRepository.shouldShowAppReview()) { viewModelScope.launch { delay(reviewConfigService.config.appReviewDialogDelay) - _effect.emit(MainEffect.RequestReview) + setEffect { MainEffect.RequestReview } } } } diff --git a/client/viewmodel/premium/src/commonMain/kotlin/com/oztechan/ccc/client/viewmodel/premium/PremiumViewModel.kt b/client/viewmodel/premium/src/commonMain/kotlin/com/oztechan/ccc/client/viewmodel/premium/PremiumViewModel.kt index 75262918f5..56ba6f7e7b 100644 --- a/client/viewmodel/premium/src/commonMain/kotlin/com/oztechan/ccc/client/viewmodel/premium/PremiumViewModel.kt +++ b/client/viewmodel/premium/src/commonMain/kotlin/com/oztechan/ccc/client/viewmodel/premium/PremiumViewModel.kt @@ -15,8 +15,6 @@ import com.oztechan.ccc.client.viewmodel.premium.model.OldPurchase import com.oztechan.ccc.client.viewmodel.premium.model.PremiumData import com.oztechan.ccc.client.viewmodel.premium.model.PremiumType import com.oztechan.ccc.client.viewmodel.premium.util.calculatePremiumEnd -import kotlinx.coroutines.flow.MutableSharedFlow -import kotlinx.coroutines.flow.asSharedFlow class PremiumViewModel( private val appStorage: AppStorage @@ -25,9 +23,6 @@ class PremiumViewModel( ), PremiumEvent { // region SEED - private val _effect = MutableSharedFlow() - override val effect = _effect.asSharedFlow() - override val event = this as PremiumEvent // endregion @@ -40,7 +35,7 @@ class PremiumViewModel( Logger.d { "PremiumViewModel onPremiumActivated ${adType?.data?.duration.orEmpty()}" } adType?.let { appStorage.premiumEndDate = it.calculatePremiumEnd(startDate) - _effect.emit(PremiumEffect.PremiumActivated(it, isRestorePurchase)) + setEffect { PremiumEffect.PremiumActivated(it, isRestorePurchase) } } } @@ -86,7 +81,7 @@ class PremiumViewModel( setState { copy(loading = type != PremiumType.VIDEO) } - _effect.emit(PremiumEffect.LaunchActivatePremiumFlow(type)) + setEffect { PremiumEffect.LaunchActivatePremiumFlow(type) } } override fun onPremiumActivationFailed() { diff --git a/client/viewmodel/selectcurrency/src/commonMain/kotlin/com/oztechan/ccc/client/viewmodel/selectcurrency/SelectCurrencyViewModel.kt b/client/viewmodel/selectcurrency/src/commonMain/kotlin/com/oztechan/ccc/client/viewmodel/selectcurrency/SelectCurrencyViewModel.kt index 8228c6d8ab..e324299186 100644 --- a/client/viewmodel/selectcurrency/src/commonMain/kotlin/com/oztechan/ccc/client/viewmodel/selectcurrency/SelectCurrencyViewModel.kt +++ b/client/viewmodel/selectcurrency/src/commonMain/kotlin/com/oztechan/ccc/client/viewmodel/selectcurrency/SelectCurrencyViewModel.kt @@ -10,8 +10,6 @@ import com.oztechan.ccc.client.core.viewmodel.SEEDViewModel import com.oztechan.ccc.client.core.viewmodel.util.launchIgnored import com.oztechan.ccc.client.datasource.currency.CurrencyDataSource import com.oztechan.ccc.common.core.model.Currency -import kotlinx.coroutines.flow.MutableSharedFlow -import kotlinx.coroutines.flow.asSharedFlow import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.onEach @@ -22,9 +20,6 @@ class SelectCurrencyViewModel( ), SelectCurrencyEvent { // region SEED - private val _effect = MutableSharedFlow() - override val effect = _effect.asSharedFlow() - override val event = this as SelectCurrencyEvent // endregion @@ -44,12 +39,12 @@ class SelectCurrencyViewModel( // region Event override fun onItemClick(currency: Currency) = viewModelScope.launchIgnored { Logger.d { "SelectCurrencyViewModel onItemClick ${currency.code}" } - _effect.emit(SelectCurrencyEffect.CurrencyChange(currency.code)) + setEffect { SelectCurrencyEffect.CurrencyChange(currency.code) } } override fun onSelectClick() = viewModelScope.launchIgnored { Logger.d { "SelectCurrencyViewModel onSelectClick" } - _effect.emit(SelectCurrencyEffect.OpenCurrencies) + setEffect { SelectCurrencyEffect.OpenCurrencies } } // endregion } diff --git a/client/viewmodel/settings/src/commonMain/kotlin/com/oztechan/ccc/client/viewmodel/settings/SettingsViewModel.kt b/client/viewmodel/settings/src/commonMain/kotlin/com/oztechan/ccc/client/viewmodel/settings/SettingsViewModel.kt index c8ff04f0c3..69c419c73b 100644 --- a/client/viewmodel/settings/src/commonMain/kotlin/com/oztechan/ccc/client/viewmodel/settings/SettingsViewModel.kt +++ b/client/viewmodel/settings/src/commonMain/kotlin/com/oztechan/ccc/client/viewmodel/settings/SettingsViewModel.kt @@ -23,8 +23,6 @@ import com.oztechan.ccc.client.viewmodel.settings.model.PremiumStatus import com.oztechan.ccc.client.viewmodel.settings.util.indexToNumber import com.oztechan.ccc.common.datasource.conversion.ConversionDataSource import kotlinx.coroutines.delay -import kotlinx.coroutines.flow.MutableSharedFlow -import kotlinx.coroutines.flow.asSharedFlow import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.onEach @@ -45,9 +43,6 @@ class SettingsViewModel( ), SettingsEvent { // region SEED - private val _effect = MutableSharedFlow() - override val effect = _effect.asSharedFlow() - override val event = this as SettingsEvent // endregion @@ -79,7 +74,7 @@ class SettingsViewModel( } private suspend fun synchroniseConversions() { - _effect.emit(SettingsEffect.Synchronising) + setEffect { SettingsEffect.Synchronising } currencyDataSource.getActiveCurrencies() .forEach { (name) -> @@ -90,7 +85,7 @@ class SettingsViewModel( delay(SYNC_DELAY) } - _effect.emit(SettingsEffect.Synchronised) + setEffect { SettingsEffect.Synchronised } data.synced = true } @@ -98,56 +93,58 @@ class SettingsViewModel( // region Event override fun onBackClick() = viewModelScope.launchIgnored { Logger.d { "SettingsViewModel onBackClick" } - _effect.emit(SettingsEffect.Back) + setEffect { SettingsEffect.Back } } override fun onCurrenciesClick() = viewModelScope.launchIgnored { Logger.d { "SettingsViewModel onCurrenciesClick" } - _effect.emit(SettingsEffect.OpenCurrencies) + setEffect { SettingsEffect.OpenCurrencies } } override fun onWatchersClick() = viewModelScope.launchIgnored { Logger.d { "SettingsViewModel onWatchersClick" } - _effect.emit(SettingsEffect.OpenWatchers) + setEffect { SettingsEffect.OpenWatchers } } override fun onFeedBackClick() = viewModelScope.launchIgnored { Logger.d { "SettingsViewModel onFeedBackClick" } - _effect.emit(SettingsEffect.FeedBack) + setEffect { SettingsEffect.FeedBack } } override fun onShareClick() = viewModelScope.launchIgnored { Logger.d { "SettingsViewModel onShareClick" } - _effect.emit(SettingsEffect.Share(appConfigRepository.getMarketLink())) + setEffect { SettingsEffect.Share(appConfigRepository.getMarketLink()) } } override fun onSupportUsClick() = viewModelScope.launchIgnored { Logger.d { "SettingsViewModel onSupportUsClick" } - _effect.emit(SettingsEffect.SupportUs(appConfigRepository.getMarketLink())) + setEffect { SettingsEffect.SupportUs(appConfigRepository.getMarketLink()) } } override fun onPrivacySettingsClick() = viewModelScope.launchIgnored { Logger.d { "SettingsViewModel onPrivacySettingsClick" } - _effect.emit(SettingsEffect.PrivacySettings) + setEffect { SettingsEffect.PrivacySettings } } override fun onOnGitHubClick() = viewModelScope.launchIgnored { Logger.d { "SettingsViewModel onOnGitHubClick" } - _effect.emit(SettingsEffect.OnGitHub) + setEffect { SettingsEffect.OnGitHub } } override fun onPremiumClick() = viewModelScope.launchIgnored { Logger.d { "SettingsViewModel onPremiumClick" } - if (appStorage.premiumEndDate.isPassed()) { - _effect.emit(SettingsEffect.Premium) - } else { - _effect.emit(SettingsEffect.AlreadyPremium) + setEffect { + if (appStorage.premiumEndDate.isPassed()) { + SettingsEffect.Premium + } else { + SettingsEffect.AlreadyPremium + } } } override fun onThemeClick() = viewModelScope.launchIgnored { Logger.d { "SettingsViewModel onThemeClick" } - _effect.emit(SettingsEffect.ThemeDialog) + setEffect { SettingsEffect.ThemeDialog } } override fun onSyncClick() = viewModelScope.launchIgnored { @@ -156,7 +153,7 @@ class SettingsViewModel( analyticsManager.trackEvent(Event.OfflineSync) if (data.synced) { - _effect.emit(SettingsEffect.OnlyOneTimeSync) + setEffect { SettingsEffect.OnlyOneTimeSync } } else { synchroniseConversions() } @@ -164,7 +161,7 @@ class SettingsViewModel( override fun onPrecisionClick() = viewModelScope.launchIgnored { Logger.d { "SettingsViewModel onPrecisionClick" } - _effect.emit(SettingsEffect.SelectPrecision) + setEffect { SettingsEffect.SelectPrecision } } override fun onPrecisionSelect(index: Int) { @@ -177,7 +174,7 @@ class SettingsViewModel( Logger.d { "SettingsViewModel onThemeChange $theme" } setState { copy(appThemeType = theme) } appStorage.appTheme = theme.themeValue - _effect.emit(SettingsEffect.ChangeTheme(theme.themeValue)) + setEffect { SettingsEffect.ChangeTheme(theme.themeValue) } } // endregion } diff --git a/client/viewmodel/watchers/src/commonMain/kotlin/com/oztechan/ccc/client/viewmodel/watchers/WatchersViewModel.kt b/client/viewmodel/watchers/src/commonMain/kotlin/com/oztechan/ccc/client/viewmodel/watchers/WatchersViewModel.kt index d4d1ce4ba0..ef19d00203 100644 --- a/client/viewmodel/watchers/src/commonMain/kotlin/com/oztechan/ccc/client/viewmodel/watchers/WatchersViewModel.kt +++ b/client/viewmodel/watchers/src/commonMain/kotlin/com/oztechan/ccc/client/viewmodel/watchers/WatchersViewModel.kt @@ -13,8 +13,6 @@ import com.oztechan.ccc.client.repository.adcontrol.AdControlRepository import com.oztechan.ccc.client.viewmodel.watchers.WatchersData.Companion.MAXIMUM_INPUT import com.oztechan.ccc.client.viewmodel.watchers.WatchersData.Companion.MAXIMUM_NUMBER_OF_WATCHER import com.oztechan.ccc.common.core.model.Watcher -import kotlinx.coroutines.flow.MutableSharedFlow -import kotlinx.coroutines.flow.asSharedFlow import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.onEach import kotlinx.coroutines.launch @@ -30,9 +28,6 @@ class WatchersViewModel( ), WatchersEvent { // region SEED - private val _effect = MutableSharedFlow() - override val effect = _effect.asSharedFlow() - override val event = this as WatchersEvent // endregion @@ -47,17 +42,17 @@ class WatchersViewModel( // region Event override fun onBackClick() = viewModelScope.launchIgnored { Logger.d { "WatcherViewModel onBackClick" } - _effect.emit(WatchersEffect.Back) + setEffect { WatchersEffect.Back } } override fun onBaseClick(watcher: Watcher) = viewModelScope.launchIgnored { Logger.d { "WatcherViewModel onBaseClick $watcher" } - _effect.emit(WatchersEffect.SelectBase(watcher)) + setEffect { WatchersEffect.SelectBase(watcher) } } override fun onTargetClick(watcher: Watcher) = viewModelScope.launchIgnored { Logger.d { "WatcherViewModel onTargetClick $watcher" } - _effect.emit(WatchersEffect.SelectTarget(watcher)) + setEffect { WatchersEffect.SelectTarget(watcher) } } override fun onBaseChanged(watcher: Watcher, newBase: String) = viewModelScope.launchIgnored { @@ -75,7 +70,7 @@ class WatchersViewModel( Logger.d { "WatcherViewModel onAddClick" } if (watcherDataSource.getWatchers().size >= MAXIMUM_NUMBER_OF_WATCHER) { - _effect.emit(WatchersEffect.MaximumNumberOfWatchers) + setEffect { WatchersEffect.MaximumNumberOfWatchers } } else { currencyDataSource.getActiveCurrencies().let { list -> watcherDataSource.addWatcher( @@ -101,7 +96,7 @@ class WatchersViewModel( Logger.d { "WatcherViewModel onRateChange $watcher $rate" } return if (rate.length > MAXIMUM_INPUT) { - viewModelScope.launch { _effect.emit(WatchersEffect.TooBigInput) } + viewModelScope.launch { setEffect { WatchersEffect.TooBigInput } } rate.dropLast(1) } else { rate.toSupportedCharacters().toStandardDigits().toDoubleOrNull()?.let { @@ -109,7 +104,7 @@ class WatchersViewModel( watcherDataSource.updateWatcherRateById(it, watcher.id) } } ?: viewModelScope.launch { - _effect.emit(WatchersEffect.InvalidInput) + setEffect { WatchersEffect.InvalidInput } } rate } diff --git a/ios/CCC/Util/ObservableSEEDViewModel.swift b/ios/CCC/Util/ObservableSEEDViewModel.swift index 18c3a4f31d..b789e25d1d 100644 --- a/ios/CCC/Util/ObservableSEEDViewModel.swift +++ b/ios/CCC/Util/ObservableSEEDViewModel.swift @@ -46,12 +46,10 @@ final class ObservableSEEDViewModel< self.state = $0 as! State }) - if viewModel.effect != nil { - effectClosable = CoroutineUtilKt.observeWithCloseable(viewModel.effect!, onChange: { - // swiftlint:disable:next force_cast - self.effect.send($0 as! Effect) - }) - } + effectClosable = CoroutineUtilKt.observeWithCloseable(viewModel.effect, onChange: { + // swiftlint:disable:next force_cast + self.effect.send($0 as! Effect) + }) } func stopObserving() { From 3887c457946a68d99732df9f7a56149a3483990d Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 23 Jul 2024 17:36:34 +0200 Subject: [PATCH 41/89] [Oztechan/CCC#1457] Update Git Submodules (#3710) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: Mustafa Ozhan --- submodule/parsermob | 2 +- submodule/scopemob | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/submodule/parsermob b/submodule/parsermob index c84f8c5582..ccbf6b8c95 160000 --- a/submodule/parsermob +++ b/submodule/parsermob @@ -1 +1 @@ -Subproject commit c84f8c5582d7061f4ab3b1b0b6a63c23286ebcc1 +Subproject commit ccbf6b8c9524c1d52a594df83dbb21c970a4dc76 diff --git a/submodule/scopemob b/submodule/scopemob index 3b67d8f6fd..d174e18dd6 160000 --- a/submodule/scopemob +++ b/submodule/scopemob @@ -1 +1 @@ -Subproject commit 3b67d8f6fd5c248c0dbf4e8eee92e40dca138628 +Subproject commit d174e18dd68136317b16fb039c8fd8dcf0a97354 From dc21b4d3155a59154767e61a57b13a48a7912908 Mon Sep 17 00:00:00 2001 From: Mustafa Ozhan Date: Tue, 23 Jul 2024 22:31:27 +0200 Subject: [PATCH 42/89] [Oztechan/CCC#3717] Move Event into SEEDViewModel (#3718) --- .../oztechan/ccc/android/viewmodel/widget/WidgetViewModel.kt | 4 ---- .../com/oztechan/ccc/client/core/viewmodel/SEEDViewModel.kt | 4 +++- .../ccc/client/viewmodel/calculator/CalculatorViewModel.kt | 3 --- .../ccc/client/viewmodel/currencies/CurrenciesViewModel.kt | 3 --- .../com/oztechan/ccc/client/viewmodel/main/MainViewModel.kt | 4 ---- .../oztechan/ccc/client/viewmodel/premium/PremiumViewModel.kt | 3 --- .../viewmodel/selectcurrency/SelectCurrencyViewModel.kt | 3 --- .../ccc/client/viewmodel/settings/SettingsViewModel.kt | 3 --- .../ccc/client/viewmodel/watchers/WatchersViewModel.kt | 3 --- ios/CCC/Util/ObservableSEEDViewModel.swift | 2 +- 10 files changed, 4 insertions(+), 28 deletions(-) diff --git a/android/viewmodel/widget/src/main/kotlin/com/oztechan/ccc/android/viewmodel/widget/WidgetViewModel.kt b/android/viewmodel/widget/src/main/kotlin/com/oztechan/ccc/android/viewmodel/widget/WidgetViewModel.kt index 629a877f13..4ae60975dc 100644 --- a/android/viewmodel/widget/src/main/kotlin/com/oztechan/ccc/android/viewmodel/widget/WidgetViewModel.kt +++ b/android/viewmodel/widget/src/main/kotlin/com/oztechan/ccc/android/viewmodel/widget/WidgetViewModel.kt @@ -29,10 +29,6 @@ class WidgetViewModel( ), WidgetEvent { - // region SEED - override val event = this as WidgetEvent - // endregion - private fun refreshWidgetData() { setState { copy( diff --git a/client/core/viewmodel/src/commonMain/kotlin/com/oztechan/ccc/client/core/viewmodel/SEEDViewModel.kt b/client/core/viewmodel/src/commonMain/kotlin/com/oztechan/ccc/client/core/viewmodel/SEEDViewModel.kt index 30da178588..6cc7165d45 100644 --- a/client/core/viewmodel/src/commonMain/kotlin/com/oztechan/ccc/client/core/viewmodel/SEEDViewModel.kt +++ b/client/core/viewmodel/src/commonMain/kotlin/com/oztechan/ccc/client/core/viewmodel/SEEDViewModel.kt @@ -25,7 +25,9 @@ abstract class SEEDViewModel< private val _effect: MutableSharedFlow = MutableSharedFlow() val effect = _effect.asSharedFlow() - abstract val event: Event? + @Suppress("UNCHECKED_CAST") + val event: Event by lazy { this as Event } + lateinit var data: Data // endregion diff --git a/client/viewmodel/calculator/src/commonMain/kotlin/com/oztechan/ccc/client/viewmodel/calculator/CalculatorViewModel.kt b/client/viewmodel/calculator/src/commonMain/kotlin/com/oztechan/ccc/client/viewmodel/calculator/CalculatorViewModel.kt index 4f85595a01..1c87dd7f7a 100644 --- a/client/viewmodel/calculator/src/commonMain/kotlin/com/oztechan/ccc/client/viewmodel/calculator/CalculatorViewModel.kt +++ b/client/viewmodel/calculator/src/commonMain/kotlin/com/oztechan/ccc/client/viewmodel/calculator/CalculatorViewModel.kt @@ -53,9 +53,6 @@ class CalculatorViewModel( initialData = CalculatorData() ), CalculatorEvent { - // region SEED - override val event = this as CalculatorEvent - // endregion init { currencyDataSource.getActiveCurrenciesFlow() diff --git a/client/viewmodel/currencies/src/commonMain/kotlin/com/oztechan/ccc/client/viewmodel/currencies/CurrenciesViewModel.kt b/client/viewmodel/currencies/src/commonMain/kotlin/com/oztechan/ccc/client/viewmodel/currencies/CurrenciesViewModel.kt index a7f97d0fbb..5ff19361f4 100755 --- a/client/viewmodel/currencies/src/commonMain/kotlin/com/oztechan/ccc/client/viewmodel/currencies/CurrenciesViewModel.kt +++ b/client/viewmodel/currencies/src/commonMain/kotlin/com/oztechan/ccc/client/viewmodel/currencies/CurrenciesViewModel.kt @@ -38,9 +38,6 @@ class CurrenciesViewModel( initialData = CurrenciesData() ), CurrenciesEvent { - // region SEED - override val event = this as CurrenciesEvent - // endregion init { currencyDataSource.getCurrenciesFlow() diff --git a/client/viewmodel/main/src/commonMain/kotlin/com/oztechan/ccc/client/viewmodel/main/MainViewModel.kt b/client/viewmodel/main/src/commonMain/kotlin/com/oztechan/ccc/client/viewmodel/main/MainViewModel.kt index 0386642a70..0bb5886bc7 100644 --- a/client/viewmodel/main/src/commonMain/kotlin/com/oztechan/ccc/client/viewmodel/main/MainViewModel.kt +++ b/client/viewmodel/main/src/commonMain/kotlin/com/oztechan/ccc/client/viewmodel/main/MainViewModel.kt @@ -33,10 +33,6 @@ class MainViewModel( initialData = MainData() ), MainEvent { - // region SEED - - override val event = this as MainEvent - // endregion init { with(analyticsManager) { diff --git a/client/viewmodel/premium/src/commonMain/kotlin/com/oztechan/ccc/client/viewmodel/premium/PremiumViewModel.kt b/client/viewmodel/premium/src/commonMain/kotlin/com/oztechan/ccc/client/viewmodel/premium/PremiumViewModel.kt index 56ba6f7e7b..91fde9a57f 100644 --- a/client/viewmodel/premium/src/commonMain/kotlin/com/oztechan/ccc/client/viewmodel/premium/PremiumViewModel.kt +++ b/client/viewmodel/premium/src/commonMain/kotlin/com/oztechan/ccc/client/viewmodel/premium/PremiumViewModel.kt @@ -22,9 +22,6 @@ class PremiumViewModel( initialState = PremiumState() ), PremiumEvent { - // region SEED - override val event = this as PremiumEvent - // endregion // region Event override fun onPremiumActivated( diff --git a/client/viewmodel/selectcurrency/src/commonMain/kotlin/com/oztechan/ccc/client/viewmodel/selectcurrency/SelectCurrencyViewModel.kt b/client/viewmodel/selectcurrency/src/commonMain/kotlin/com/oztechan/ccc/client/viewmodel/selectcurrency/SelectCurrencyViewModel.kt index e324299186..07401a93e8 100644 --- a/client/viewmodel/selectcurrency/src/commonMain/kotlin/com/oztechan/ccc/client/viewmodel/selectcurrency/SelectCurrencyViewModel.kt +++ b/client/viewmodel/selectcurrency/src/commonMain/kotlin/com/oztechan/ccc/client/viewmodel/selectcurrency/SelectCurrencyViewModel.kt @@ -19,9 +19,6 @@ class SelectCurrencyViewModel( initialState = SelectCurrencyState() ), SelectCurrencyEvent { - // region SEED - override val event = this as SelectCurrencyEvent - // endregion init { currencyDataSource.getActiveCurrenciesFlow() diff --git a/client/viewmodel/settings/src/commonMain/kotlin/com/oztechan/ccc/client/viewmodel/settings/SettingsViewModel.kt b/client/viewmodel/settings/src/commonMain/kotlin/com/oztechan/ccc/client/viewmodel/settings/SettingsViewModel.kt index 69c419c73b..493aee066d 100644 --- a/client/viewmodel/settings/src/commonMain/kotlin/com/oztechan/ccc/client/viewmodel/settings/SettingsViewModel.kt +++ b/client/viewmodel/settings/src/commonMain/kotlin/com/oztechan/ccc/client/viewmodel/settings/SettingsViewModel.kt @@ -42,9 +42,6 @@ class SettingsViewModel( initialData = SettingsData() ), SettingsEvent { - // region SEED - override val event = this as SettingsEvent - // endregion init { setState { diff --git a/client/viewmodel/watchers/src/commonMain/kotlin/com/oztechan/ccc/client/viewmodel/watchers/WatchersViewModel.kt b/client/viewmodel/watchers/src/commonMain/kotlin/com/oztechan/ccc/client/viewmodel/watchers/WatchersViewModel.kt index ef19d00203..141895873f 100644 --- a/client/viewmodel/watchers/src/commonMain/kotlin/com/oztechan/ccc/client/viewmodel/watchers/WatchersViewModel.kt +++ b/client/viewmodel/watchers/src/commonMain/kotlin/com/oztechan/ccc/client/viewmodel/watchers/WatchersViewModel.kt @@ -27,9 +27,6 @@ class WatchersViewModel( initialData = WatchersData() ), WatchersEvent { - // region SEED - override val event = this as WatchersEvent - // endregion init { watcherDataSource.getWatchersFlow() diff --git a/ios/CCC/Util/ObservableSEEDViewModel.swift b/ios/CCC/Util/ObservableSEEDViewModel.swift index b789e25d1d..3156798ea9 100644 --- a/ios/CCC/Util/ObservableSEEDViewModel.swift +++ b/ios/CCC/Util/ObservableSEEDViewModel.swift @@ -31,7 +31,7 @@ final class ObservableSEEDViewModel< // swiftlint:disable:next force_cast self.state = viewModel.state.value as! State - self.event = viewModel.event! + self.event = viewModel.event } deinit { From 7adf6bb876dcdc2287a03c3c3587e6b36be3913f Mon Sep 17 00:00:00 2001 From: Mustafa Ozhan Date: Tue, 23 Jul 2024 22:31:42 +0200 Subject: [PATCH 43/89] [Oztechan/CCC#3719] Name all the ViewModels as viewmodel (#3720) --- .../content/calculator/CalculatorFragment.kt | 20 +++++++++---------- .../content/currencies/CurrenciesFragment.kt | 14 ++++++------- .../ui/mobile/content/main/MainActivity.kt | 10 +++++----- .../content/premium/PremiumBottomSheet.kt | 20 +++++++++---------- .../SelectCurrencyBottomSheet.kt | 10 +++++----- .../content/settings/SettingsFragment.kt | 18 ++++++++--------- .../SelectCurrencyViewModelTest.kt | 16 +++++++-------- 7 files changed, 54 insertions(+), 54 deletions(-) diff --git a/android/ui/mobile/src/main/kotlin/com/oztechan/ccc/android/ui/mobile/content/calculator/CalculatorFragment.kt b/android/ui/mobile/src/main/kotlin/com/oztechan/ccc/android/ui/mobile/content/calculator/CalculatorFragment.kt index f67eb5b55a..2ca511c744 100755 --- a/android/ui/mobile/src/main/kotlin/com/oztechan/ccc/android/ui/mobile/content/calculator/CalculatorFragment.kt +++ b/android/ui/mobile/src/main/kotlin/com/oztechan/ccc/android/ui/mobile/content/calculator/CalculatorFragment.kt @@ -40,10 +40,10 @@ class CalculatorFragment : BaseVBFragment() { private val analyticsManager: AnalyticsManager by inject() private val adManager: AdManager by inject() - private val calculatorViewModel: CalculatorViewModel by viewModel() + private val viewModel: CalculatorViewModel by viewModel() private val calculatorAdapter: CalculatorAdapter by lazy { - CalculatorAdapter(calculatorViewModel.event) + CalculatorAdapter(viewModel.event) } override fun getViewBinding() = FragmentCalculatorBinding.inflate(layoutInflater) @@ -81,7 +81,7 @@ class CalculatorFragment : BaseVBFragment() { R.id.calculatorFragment )?.observe(viewLifecycleOwner) { Logger.i { "CalculatorFragment observeNavigationResults $it" } - calculatorViewModel.event.onBaseChange(it) + viewModel.event.onBaseChange(it) } private fun FragmentCalculatorBinding.initViews() { @@ -92,17 +92,17 @@ class CalculatorFragment : BaseVBFragment() { } else { getString(R.string.banner_ad_unit_id_calculator_release) }, - shouldShowAd = calculatorViewModel.state.value.isBannerAdVisible + shouldShowAd = viewModel.state.value.isBannerAdVisible ) recyclerViewMain.adapter = calculatorAdapter } @SuppressLint("SetTextI18n") - private fun FragmentCalculatorBinding.observeStates() = calculatorViewModel.state + private fun FragmentCalculatorBinding.observeStates() = viewModel.state .flowWithLifecycle(lifecycle) .onEach { with(it) { - calculatorAdapter.submitList(currencyList.toValidList(calculatorViewModel.state.value.base)) + calculatorAdapter.submitList(currencyList.toValidList(viewModel.state.value.base)) txtInput.text = input with(layoutBar) { @@ -117,7 +117,7 @@ class CalculatorFragment : BaseVBFragment() { } }.launchIn(viewLifecycleOwner.lifecycleScope) - private fun observeEffects() = calculatorViewModel.effect + private fun observeEffects() = viewModel.effect .flowWithLifecycle(lifecycle) .onEach { viewEffect -> Logger.i { "CalculatorFragment observeEffects ${viewEffect::class.simpleName}" } @@ -150,7 +150,7 @@ class CalculatorFragment : BaseVBFragment() { text = R.string.text_paste_request, actionText = R.string.text_paste ) { - calculatorViewModel.onPasteToInput(it.context.getFromClipBoard()) + viewModel.onPasteToInput(it.context.getFromClipBoard()) } } @@ -162,7 +162,7 @@ class CalculatorFragment : BaseVBFragment() { } }.launchIn(viewLifecycleOwner.lifecycleScope) - private fun FragmentCalculatorBinding.setListeners() = with(calculatorViewModel.event) { + private fun FragmentCalculatorBinding.setListeners() = with(viewModel.event) { btnSettings.setOnClickListener { onSettingsClicked() } layoutBar.root.setOnClickListener { onBarClick() } @@ -203,7 +203,7 @@ class CalculatorFragment : BaseVBFragment() { } private fun Button.setKeyboardListener() = setOnClickListener { - calculatorViewModel.event.onKeyPress(text.toString()) + viewModel.event.onKeyPress(text.toString()) } companion object { diff --git a/android/ui/mobile/src/main/kotlin/com/oztechan/ccc/android/ui/mobile/content/currencies/CurrenciesFragment.kt b/android/ui/mobile/src/main/kotlin/com/oztechan/ccc/android/ui/mobile/content/currencies/CurrenciesFragment.kt index e7752f6bd7..66602b4fee 100755 --- a/android/ui/mobile/src/main/kotlin/com/oztechan/ccc/android/ui/mobile/content/currencies/CurrenciesFragment.kt +++ b/android/ui/mobile/src/main/kotlin/com/oztechan/ccc/android/ui/mobile/content/currencies/CurrenciesFragment.kt @@ -39,10 +39,10 @@ class CurrenciesFragment : BaseVBFragment() { private val analyticsManager: AnalyticsManager by inject() private val adManager: AdManager by inject() - private val currenciesViewModel: CurrenciesViewModel by viewModel() + private val viewModel: CurrenciesViewModel by viewModel() private val currenciesAdapter: CurrenciesAdapter by lazy { - CurrenciesAdapter(currenciesViewModel.event) + CurrenciesAdapter(viewModel.event) } override fun getViewBinding() = FragmentCurrenciesBinding.inflate(layoutInflater) @@ -71,7 +71,7 @@ class CurrenciesFragment : BaseVBFragment() { } else { getString(R.string.banner_ad_unit_id_currencies_release) }, - shouldShowAd = currenciesViewModel.state.value.isBannerAdVisible + shouldShowAd = viewModel.state.value.isBannerAdVisible ) setSpanByOrientation(resources.configuration.orientation) @@ -82,7 +82,7 @@ class CurrenciesFragment : BaseVBFragment() { } } - private fun FragmentCurrenciesBinding.observeStates() = currenciesViewModel.state + private fun FragmentCurrenciesBinding.observeStates() = viewModel.state .flowWithLifecycle(lifecycle) .onEach { with(it) { @@ -113,7 +113,7 @@ class CurrenciesFragment : BaseVBFragment() { } }.launchIn(viewLifecycleOwner.lifecycleScope) - private fun observeEffects() = currenciesViewModel.effect + private fun observeEffects() = viewModel.effect .flowWithLifecycle(lifecycle) .onEach { viewEffect -> Logger.i { "CurrenciesFragment observeEffects ${viewEffect::class.simpleName}" } @@ -140,7 +140,7 @@ class CurrenciesFragment : BaseVBFragment() { } }.launchIn(viewLifecycleOwner.lifecycleScope) - private fun FragmentCurrenciesBinding.setListeners() = with(currenciesViewModel.event) { + private fun FragmentCurrenciesBinding.setListeners() = with(viewModel.event) { btnDone.setOnClickListener { onDoneClick() } with(layoutCurrenciesToolbar) { @@ -152,7 +152,7 @@ class CurrenciesFragment : BaseVBFragment() { override fun onQueryTextSubmit(query: String) = false override fun onQueryTextChange(newText: String): Boolean { Logger.i { "CurrenciesFragment onQueryTextChange $newText" } - currenciesViewModel.event.onQueryChange(newText) + viewModel.event.onQueryChange(newText) return true } }) diff --git a/android/ui/mobile/src/main/kotlin/com/oztechan/ccc/android/ui/mobile/content/main/MainActivity.kt b/android/ui/mobile/src/main/kotlin/com/oztechan/ccc/android/ui/mobile/content/main/MainActivity.kt index 9282e2c1a1..44068df877 100755 --- a/android/ui/mobile/src/main/kotlin/com/oztechan/ccc/android/ui/mobile/content/main/MainActivity.kt +++ b/android/ui/mobile/src/main/kotlin/com/oztechan/ccc/android/ui/mobile/content/main/MainActivity.kt @@ -33,7 +33,7 @@ class MainActivity : BaseActivity() { override var containerId: Int = R.id.content private val adManager: AdManager by inject() - private val mainViewModel: MainViewModel by viewModel() + private val viewModel: MainViewModel by viewModel() init { // use dark mode default for old devices @@ -52,7 +52,7 @@ class MainActivity : BaseActivity() { observeEffects() } - private fun observeStates() = mainViewModel.state + private fun observeStates() = viewModel.state .flowWithLifecycle(lifecycle) .onEach { with(it) { @@ -65,7 +65,7 @@ class MainActivity : BaseActivity() { } }.launchIn(lifecycleScope) - private fun observeEffects() = mainViewModel.effect + private fun observeEffects() = viewModel.effect .flowWithLifecycle(lifecycle) .onEach { viewEffect -> Logger.i { "MainActivity observeEffects ${viewEffect::class.simpleName}" } @@ -105,12 +105,12 @@ class MainActivity : BaseActivity() { override fun onResume() { super.onResume() Logger.i { "MainActivity onResume" } - mainViewModel.event.onResume() + viewModel.event.onResume() } override fun onPause() { Logger.i { "MainActivity onPause" } - mainViewModel.event.onPause() + viewModel.event.onPause() super.onPause() } diff --git a/android/ui/mobile/src/main/kotlin/com/oztechan/ccc/android/ui/mobile/content/premium/PremiumBottomSheet.kt b/android/ui/mobile/src/main/kotlin/com/oztechan/ccc/android/ui/mobile/content/premium/PremiumBottomSheet.kt index 93118934d8..7d9a6c7674 100644 --- a/android/ui/mobile/src/main/kotlin/com/oztechan/ccc/android/ui/mobile/content/premium/PremiumBottomSheet.kt +++ b/android/ui/mobile/src/main/kotlin/com/oztechan/ccc/android/ui/mobile/content/premium/PremiumBottomSheet.kt @@ -37,10 +37,10 @@ class PremiumBottomSheet : BaseVBBottomSheetDialogFragment Logger.i { "PremiumBottomSheet observeEffects ${viewEffect::class.simpleName}" } @@ -121,19 +121,19 @@ class PremiumBottomSheet : BaseVBBottomSheetDialogFragment restartActivity() - is BillingEffect.RestorePurchase -> premiumViewModel.event.onRestorePurchase( + is BillingEffect.RestorePurchase -> viewModel.event.onRestorePurchase( viewEffect.purchaseHistoryRecordRecordList.toOldPurchaseList() ) - is BillingEffect.AddPurchaseMethods -> premiumViewModel.event.onAddPurchaseMethods( + is BillingEffect.AddPurchaseMethods -> viewModel.event.onAddPurchaseMethods( viewEffect.productDetailsList.toPremiumDataList() ) - is BillingEffect.UpdatePremiumEndDate -> premiumViewModel.onPremiumActivated( + is BillingEffect.UpdatePremiumEndDate -> viewModel.onPremiumActivated( PremiumType.getById(viewEffect.id) ) - BillingEffect.BillingUnavailable -> premiumViewModel.event.onPremiumActivationFailed() + BillingEffect.BillingUnavailable -> viewModel.event.onPremiumActivationFailed() } }.launchIn(viewLifecycleOwner.lifecycleScope) @@ -147,10 +147,10 @@ class PremiumBottomSheet : BaseVBBottomSheetDialogFragment() { private val analyticsManager: AnalyticsManager by inject() - private val selectCurrencyViewModel: SelectCurrencyViewModel by viewModel() + private val viewModel: SelectCurrencyViewModel by viewModel() private val selectCurrencyAdapter: SelectCurrencyAdapter by lazy { - SelectCurrencyAdapter(selectCurrencyViewModel.event) + SelectCurrencyAdapter(viewModel.event) } override fun getViewBinding() = BottomSheetSelectCurrencyBinding.inflate(layoutInflater) @@ -60,7 +60,7 @@ class SelectCurrencyBottomSheet : recyclerViewSelectCurrency.adapter = selectCurrencyAdapter } - private fun BottomSheetSelectCurrencyBinding.observeStates() = selectCurrencyViewModel.state + private fun BottomSheetSelectCurrencyBinding.observeStates() = viewModel.state .flowWithLifecycle(lifecycle) .onEach { with(it) { @@ -81,7 +81,7 @@ class SelectCurrencyBottomSheet : } }.launchIn(viewLifecycleOwner.lifecycleScope) - private fun observeEffects() = selectCurrencyViewModel.effect + private fun observeEffects() = viewModel.effect .flowWithLifecycle(lifecycle) .onEach { viewEffect -> Logger.i { "SelectCurrencyBottomSheet observeEffects ${viewEffect::class.simpleName}" } @@ -103,6 +103,6 @@ class SelectCurrencyBottomSheet : }.launchIn(viewLifecycleOwner.lifecycleScope) private fun BottomSheetSelectCurrencyBinding.setListeners() = btnSelect.setOnClickListener { - selectCurrencyViewModel.event.onSelectClick() + viewModel.event.onSelectClick() } } diff --git a/android/ui/mobile/src/main/kotlin/com/oztechan/ccc/android/ui/mobile/content/settings/SettingsFragment.kt b/android/ui/mobile/src/main/kotlin/com/oztechan/ccc/android/ui/mobile/content/settings/SettingsFragment.kt index de6aee79e3..4c59d85078 100644 --- a/android/ui/mobile/src/main/kotlin/com/oztechan/ccc/android/ui/mobile/content/settings/SettingsFragment.kt +++ b/android/ui/mobile/src/main/kotlin/com/oztechan/ccc/android/ui/mobile/content/settings/SettingsFragment.kt @@ -45,7 +45,7 @@ class SettingsFragment : BaseVBFragment() { private val analyticsManager: AnalyticsManager by inject() private val adManager: AdManager by inject() - private val settingsViewModel: SettingsViewModel by viewModel() + private val viewModel: SettingsViewModel by viewModel() override fun getViewBinding() = FragmentSettingsBinding.inflate(layoutInflater) @@ -73,7 +73,7 @@ class SettingsFragment : BaseVBFragment() { } else { getString(R.string.banner_ad_unit_id_settings_release) }, - shouldShowAd = settingsViewModel.state.value.isBannerAdVisible + shouldShowAd = viewModel.state.value.isBannerAdVisible ) with(itemCurrencies) { @@ -146,7 +146,7 @@ class SettingsFragment : BaseVBFragment() { } } - private fun FragmentSettingsBinding.observeStates() = settingsViewModel.state + private fun FragmentSettingsBinding.observeStates() = viewModel.state .flowWithLifecycle(lifecycle) .onEach { with(it) { @@ -182,7 +182,7 @@ class SettingsFragment : BaseVBFragment() { }.launchIn(viewLifecycleOwner.lifecycleScope) @Suppress("ComplexMethod") - private fun observeEffects() = settingsViewModel.effect + private fun observeEffects() = viewModel.effect .flowWithLifecycle(lifecycle) .onEach { viewEffect -> Logger.i { "SettingsFragment observeEffects ${viewEffect::class.simpleName}" } @@ -241,7 +241,7 @@ class SettingsFragment : BaseVBFragment() { } }.launchIn(viewLifecycleOwner.lifecycleScope) - private fun FragmentSettingsBinding.setListeners() = with(settingsViewModel.event) { + private fun FragmentSettingsBinding.setListeners() = with(viewModel.event) { backButton.setOnClickListener { onBackClick() } itemCurrencies.root.setOnClickListener { onCurrenciesClick() } @@ -267,9 +267,9 @@ class SettingsFragment : BaseVBFragment() { activity?.showSingleChoiceDialog( getString(R.string.title_dialog_choose_theme), AppTheme.values().map { it.themeName }.toTypedArray(), - settingsViewModel.state.value.appThemeType.ordinal + viewModel.state.value.appThemeType.ordinal ) { index -> - AppTheme.getThemeByOrdinal(index)?.let { settingsViewModel.event.onThemeChange(it) } + AppTheme.getThemeByOrdinal(index)?.let { viewModel.event.onThemeChange(it) } } } @@ -281,9 +281,9 @@ class SettingsFragment : BaseVBFragment() { it ) }.toTypedArray(), - settingsViewModel.state.value.precision.numberToIndex() + viewModel.state.value.precision.numberToIndex() ) { - settingsViewModel.event.onPrecisionSelect(it) + viewModel.event.onPrecisionSelect(it) } private fun share(marketLink: String) = Intent(Intent.ACTION_SEND).apply { diff --git a/client/viewmodel/selectcurrency/src/commonTest/kotlin/com/oztechan/ccc/client/viewmodel/selectcurrency/SelectCurrencyViewModelTest.kt b/client/viewmodel/selectcurrency/src/commonTest/kotlin/com/oztechan/ccc/client/viewmodel/selectcurrency/SelectCurrencyViewModelTest.kt index 4ea7e339aa..02a0ad090a 100644 --- a/client/viewmodel/selectcurrency/src/commonTest/kotlin/com/oztechan/ccc/client/viewmodel/selectcurrency/SelectCurrencyViewModelTest.kt +++ b/client/viewmodel/selectcurrency/src/commonTest/kotlin/com/oztechan/ccc/client/viewmodel/selectcurrency/SelectCurrencyViewModelTest.kt @@ -29,7 +29,7 @@ import com.oztechan.ccc.common.core.model.Currency as CurrencyCommon internal class SelectCurrencyViewModelTest { - private val subject: SelectCurrencyViewModel by lazy { + private val viewModel: SelectCurrencyViewModel by lazy { SelectCurrencyViewModel(currencyDataSource) } @@ -56,7 +56,7 @@ internal class SelectCurrencyViewModelTest { @Test fun `init updates data correctly`() { assertFailsWith { - subject.data + viewModel.data }.message.let { assertNotNull(it) assertEquals("lateinit property data has not been initialized", it) @@ -69,7 +69,7 @@ internal class SelectCurrencyViewModelTest { every { currencyDataSource.getActiveCurrenciesFlow() } .returns(flowOf(currencyListNotEnough)) - subject.state.firstOrNull().let { + viewModel.state.firstOrNull().let { assertNotNull(it) assertFalse { it.loading } assertFalse { it.enoughCurrency } @@ -82,7 +82,7 @@ internal class SelectCurrencyViewModelTest { @Test fun `init updates the states with enough currency`() { runTest { - subject.state.firstOrNull().let { + viewModel.state.firstOrNull().let { assertNotNull(it) assertFalse { it.loading } assertTrue { it.enoughCurrency } @@ -95,8 +95,8 @@ internal class SelectCurrencyViewModelTest { @Test fun onItemClick() = runTest { - subject.effect.onSubscription { - subject.event.onItemClick(currencyDollar) + viewModel.effect.onSubscription { + viewModel.event.onItemClick(currencyDollar) }.firstOrNull().let { assertNotNull(it) assertIs(it) @@ -106,8 +106,8 @@ internal class SelectCurrencyViewModelTest { @Test fun onSelectClick() = runTest { - subject.effect.onSubscription { - subject.event.onSelectClick() + viewModel.effect.onSubscription { + viewModel.event.onSelectClick() }.firstOrNull().let { assertIs(it) } From c561c333f90b1f831779497655cfca8678898aab Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 24 Jul 2024 23:11:47 +0200 Subject: [PATCH 44/89] [Oztechan/CCC#1457] Update dependency androidx.activity:activity-compose to v1.9.1 (#3721) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: Mustafa Ozhan --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 08264d0745..129024c907 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -5,7 +5,7 @@ androidGradlePlugin = "8.5.1" jetbrainsCompose = "1.6.11" glance = "1.1.0" mokkery = "2.1.1" -activityCompose = "1.9.0" +activityCompose = "1.9.1" navigationCompose = "2.7.0-alpha07" detekt = "1.23.6" androidDesugaring = "2.0.4" From 56423644b30270e49b210cd5eb54eca3591c3c4b Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 24 Jul 2024 23:12:12 +0200 Subject: [PATCH 45/89] [Oztechan/CCC#1457] Update lifecycle to v2.8.4 (#3722) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: Mustafa Ozhan --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 129024c907..a6b83fbc23 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -34,7 +34,7 @@ coroutines = "1.8.1" billing = "6.2.1" leakCanary = "2.14" sqlDelight = "1.5.5" -lifecycle = "2.8.3" +lifecycle = "2.8.4" mokoResources = "0.24.1" buildKonfig = "0.15.1" splashScreen = "1.0.1" From 6e42abd52d6086f86c2e4f12f4edbd92ad4d22cd Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 27 Jul 2024 17:41:40 +0200 Subject: [PATCH 46/89] [Oztechan/CCC#1457] Update Oztechan/Global digest to 54ed8a1 (#3736) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: Mustafa Ozhan --- .github/workflows/build.yml | 2 +- .github/workflows/main.yml | 10 +++++----- .github/workflows/project.yml | 2 +- .github/workflows/publish.yml | 2 +- .github/workflows/release.yml | 4 ++-- 5 files changed, 10 insertions(+), 10 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index dee0a5fe53..362913e8c8 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -61,7 +61,7 @@ jobs: steps: - name: Setup Gradle Repo - uses: Oztechan/Global/actions/setup-gradle-repo@de5d4095c26cce6ce46bca91a81ed73a1096ad0c + uses: Oztechan/Global/actions/setup-gradle-repo@54ed8a1c9b3ce3addaeca9f69ce06393c7949bba - name: Adding secret files uses: ./.github/actions/add-secret-files diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 3c7f71c9aa..1df951e0ba 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -70,7 +70,7 @@ jobs: steps: - name: Setup Gradle Repo - uses: Oztechan/Global/actions/setup-gradle-repo@de5d4095c26cce6ce46bca91a81ed73a1096ad0c + uses: Oztechan/Global/actions/setup-gradle-repo@54ed8a1c9b3ce3addaeca9f69ce06393c7949bba - name: Adding secret files uses: ./.github/actions/add-secret-files @@ -153,7 +153,7 @@ jobs: steps: - name: Setup Gradle Repo - uses: Oztechan/Global/actions/setup-gradle-repo@de5d4095c26cce6ce46bca91a81ed73a1096ad0c + uses: Oztechan/Global/actions/setup-gradle-repo@54ed8a1c9b3ce3addaeca9f69ce06393c7949bba - name: Adding secret files uses: ./.github/actions/add-secret-files @@ -235,7 +235,7 @@ jobs: steps: - name: Setup Gradle Repo - uses: Oztechan/Global/actions/setup-gradle-repo@de5d4095c26cce6ce46bca91a81ed73a1096ad0c + uses: Oztechan/Global/actions/setup-gradle-repo@54ed8a1c9b3ce3addaeca9f69ce06393c7949bba - name: Test run: ./gradlew test @@ -255,7 +255,7 @@ jobs: steps: - name: Setup Gradle Repo - uses: Oztechan/Global/actions/setup-gradle-repo@de5d4095c26cce6ce46bca91a81ed73a1096ad0c + uses: Oztechan/Global/actions/setup-gradle-repo@54ed8a1c9b3ce3addaeca9f69ce06393c7949bba - name: Generate Coverage run: ./gradlew koverXmlReport @@ -298,7 +298,7 @@ jobs: steps: - name: Setup Gradle Repo - uses: Oztechan/Global/actions/setup-gradle-repo@de5d4095c26cce6ce46bca91a81ed73a1096ad0c + uses: Oztechan/Global/actions/setup-gradle-repo@54ed8a1c9b3ce3addaeca9f69ce06393c7949bba - name: Detekt & Lint run: ./gradlew detektAll lint diff --git a/.github/workflows/project.yml b/.github/workflows/project.yml index ac21e85950..e0490c572a 100644 --- a/.github/workflows/project.yml +++ b/.github/workflows/project.yml @@ -14,7 +14,7 @@ on: jobs: ProjectAutomations: - uses: Oztechan/Global/.github/workflows/reusable-project.yml@de5d4095c26cce6ce46bca91a81ed73a1096ad0c + uses: Oztechan/Global/.github/workflows/reusable-project.yml@54ed8a1c9b3ce3addaeca9f69ce06393c7949bba with: project_id: 2 secrets: inherit diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 7925400d54..930cdb81b8 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -8,7 +8,7 @@ on: jobs: PublishRelease: - uses: Oztechan/Global/.github/workflows/reusable-publish.yml@de5d4095c26cce6ce46bca91a81ed73a1096ad0c + uses: Oztechan/Global/.github/workflows/reusable-publish.yml@54ed8a1c9b3ce3addaeca9f69ce06393c7949bba with: slack_channel: "ccc-github" secrets: inherit diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index e3ab0745ec..c9217c25c2 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -61,7 +61,7 @@ jobs: steps: - name: Setup Gradle Repo - uses: Oztechan/Global/actions/setup-gradle-repo@de5d4095c26cce6ce46bca91a81ed73a1096ad0c + uses: Oztechan/Global/actions/setup-gradle-repo@54ed8a1c9b3ce3addaeca9f69ce06393c7949bba - name: Adding secret files uses: ./.github/actions/add-secret-files @@ -215,7 +215,7 @@ jobs: status: ${{ steps.status.outputs.status }} steps: - name: Setup Gradle Repo - uses: Oztechan/Global/actions/setup-gradle-repo@de5d4095c26cce6ce46bca91a81ed73a1096ad0c + uses: Oztechan/Global/actions/setup-gradle-repo@54ed8a1c9b3ce3addaeca9f69ce06393c7949bba - name: Adding secret files uses: ./.github/actions/add-secret-files From 6d1470db86e4e9c3987f97b412e7db3984691aea Mon Sep 17 00:00:00 2001 From: Mustafa Ozhan Date: Sun, 28 Jul 2024 19:50:55 +0200 Subject: [PATCH 47/89] [Oztechan/CCC#3733] Move to Java 21 (#3734) * [Oztechan/CCC#3733] Move to Java 21 * [Oztechan/CCC#3733] Move to Java 21 --- buildSrc/src/main/kotlin/ProjectSettings.kt | 2 +- submodule/basemob | 2 +- submodule/logmob | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/buildSrc/src/main/kotlin/ProjectSettings.kt b/buildSrc/src/main/kotlin/ProjectSettings.kt index d22fb2d6f7..c8e508613b 100644 --- a/buildSrc/src/main/kotlin/ProjectSettings.kt +++ b/buildSrc/src/main/kotlin/ProjectSettings.kt @@ -23,7 +23,7 @@ object ProjectSettings { const val MIN_SDK_VERSION = 21 const val TARGET_SDK_VERSION = 33 - val JAVA_VERSION = JavaVersion.VERSION_17 + val JAVA_VERSION = JavaVersion.VERSION_21 @Suppress("TooGenericExceptionCaught", "SwallowedException") fun getVersionCode(project: Project) = try { diff --git a/submodule/basemob b/submodule/basemob index 7b5f9b762e..fc9029b457 160000 --- a/submodule/basemob +++ b/submodule/basemob @@ -1 +1 @@ -Subproject commit 7b5f9b762ebb14b35689274bee12c7aa5b97c830 +Subproject commit fc9029b4571c5b8365698277d5fdfc14375a09a8 diff --git a/submodule/logmob b/submodule/logmob index 882071fde3..b70625d529 160000 --- a/submodule/logmob +++ b/submodule/logmob @@ -1 +1 @@ -Subproject commit 882071fde3c04cb20e4f9cc883e167a47f961fc5 +Subproject commit b70625d5294ff630138cc72c9b456c1bf0e23525 From aa5f36846b8824e40bb363de035a20aaabc04b91 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sun, 28 Jul 2024 20:21:09 +0200 Subject: [PATCH 48/89] [Oztechan/CCC#1457] Update Git Submodules (#3735) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: Mustafa Ozhan --- submodule/basemob | 2 +- submodule/logmob | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/submodule/basemob b/submodule/basemob index fc9029b457..262fabcf79 160000 --- a/submodule/basemob +++ b/submodule/basemob @@ -1 +1 @@ -Subproject commit fc9029b4571c5b8365698277d5fdfc14375a09a8 +Subproject commit 262fabcf79f6391d56cab13aa4f3712627828fc8 diff --git a/submodule/logmob b/submodule/logmob index b70625d529..95201c8050 160000 --- a/submodule/logmob +++ b/submodule/logmob @@ -1 +1 @@ -Subproject commit b70625d5294ff630138cc72c9b456c1bf0e23525 +Subproject commit 95201c8050a64a1896291163ce7b2e15de86da00 From c238cd05ed4e9e12b1fbca523645fedb6f5b7ecc Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 29 Jul 2024 10:54:36 +0200 Subject: [PATCH 49/89] [Oztechan/CCC#1457] Lock file maintenance (#3739) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: Mustafa Ozhan --- ios/Gemfile.lock | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/ios/Gemfile.lock b/ios/Gemfile.lock index a4a8d3ef97..b403a0d808 100644 --- a/ios/Gemfile.lock +++ b/ios/Gemfile.lock @@ -10,8 +10,8 @@ GEM artifactory (3.0.17) atomos (0.1.3) aws-eventstream (1.3.0) - aws-partitions (1.957.0) - aws-sdk-core (3.201.2) + aws-partitions (1.958.0) + aws-sdk-core (3.201.3) aws-eventstream (~> 1, >= 1.3.0) aws-partitions (~> 1, >= 1.651.0) aws-sigv4 (~> 1.8) @@ -23,7 +23,7 @@ GEM aws-sdk-core (~> 3, >= 3.201.0) aws-sdk-kms (~> 1) aws-sigv4 (~> 1.5) - aws-sigv4 (1.8.0) + aws-sigv4 (1.9.0) aws-eventstream (~> 1, >= 1.0.2) babosa (1.0.4) base64 (0.2.0) @@ -60,7 +60,7 @@ GEM faraday-httpclient (1.0.1) faraday-multipart (1.0.4) multipart-post (~> 2) - faraday-net_http (1.0.1) + faraday-net_http (1.0.2) faraday-net_http_persistent (1.2.0) faraday-patron (1.0.0) faraday-rack (1.0.0) From 9722103bb5495765b649c87e6fab347728b7ba96 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 29 Jul 2024 10:55:31 +0200 Subject: [PATCH 50/89] [Oztechan/CCC#1457] Update dependency fastlane to v2.222.0 (#3737) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: Mustafa Ozhan --- ios/Gemfile | 2 +- ios/Gemfile.lock | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/ios/Gemfile b/ios/Gemfile index ce182ff6d4..62bdc35ff8 100644 --- a/ios/Gemfile +++ b/ios/Gemfile @@ -1,4 +1,4 @@ source "https://rubygems.org" -gem "fastlane", "2.221.1" +gem "fastlane", "2.222.0" gem "fastlane-plugin-firebase_app_distribution", "0.9.1" diff --git a/ios/Gemfile.lock b/ios/Gemfile.lock index b403a0d808..878bf57d83 100644 --- a/ios/Gemfile.lock +++ b/ios/Gemfile.lock @@ -68,7 +68,7 @@ GEM faraday_middleware (1.2.0) faraday (~> 1.0) fastimage (2.3.1) - fastlane (2.221.1) + fastlane (2.222.0) CFPropertyList (>= 2.3, < 4.0.0) addressable (>= 2.8, < 3.0.0) artifactory (~> 3.0) @@ -222,7 +222,7 @@ PLATFORMS x86_64-linux DEPENDENCIES - fastlane (= 2.221.1) + fastlane (= 2.222.0) fastlane-plugin-firebase_app_distribution (= 0.9.1) BUNDLED WITH From 598e517097c6f8cdfb178f580f974166a4980fb1 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 1 Aug 2024 17:57:25 +0200 Subject: [PATCH 51/89] [Oztechan/CCC#1457] Update easingthemes/ssh-deploy action to v5.1.1 (#3723) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: Mustafa Ozhan --- .github/workflows/release.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index c9217c25c2..bbd2a7bab6 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -192,7 +192,7 @@ jobs: path: artifact - name: Deploy to Server - uses: easingthemes/ssh-deploy@v5.0.3 + uses: easingthemes/ssh-deploy@v5.1.1 env: SSH_PRIVATE_KEY: ${{ secrets.SSH_PRIVATE_KEY }} REMOTE_HOST: ${{ secrets.REMOTE_HOST }} From 4e9e0c7fc1abf82917af0d021fe11d590f44e2d0 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 1 Aug 2024 17:57:43 +0200 Subject: [PATCH 52/89] [Oztechan/CCC#1457] Update Git Submodules (#3738) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: Mustafa Ozhan --- submodule/parsermob | 2 +- submodule/scopemob | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/submodule/parsermob b/submodule/parsermob index ccbf6b8c95..e962ad3fac 160000 --- a/submodule/parsermob +++ b/submodule/parsermob @@ -1 +1 @@ -Subproject commit ccbf6b8c9524c1d52a594df83dbb21c970a4dc76 +Subproject commit e962ad3fac993dfe22884c749f8c1aa2c2bc989d diff --git a/submodule/scopemob b/submodule/scopemob index d174e18dd6..03fd752a2f 160000 --- a/submodule/scopemob +++ b/submodule/scopemob @@ -1 +1 @@ -Subproject commit d174e18dd68136317b16fb039c8fd8dcf0a97354 +Subproject commit 03fd752a2f5cc52c6916be1e900ed179c4ab3aff From 6273908e671ac7dd934282c7a86f2b807fcd8004 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 3 Aug 2024 12:05:57 +0200 Subject: [PATCH 53/89] [Oztechan/CCC#1457] Update actions/upload-artifact action to v4.3.5 (#3742) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: Mustafa Ozhan --- .github/workflows/main.yml | 6 +++--- .github/workflows/release.yml | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 1df951e0ba..47e7267fef 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -89,7 +89,7 @@ jobs: run: ./gradlew assemble${{ env.BUILD_TYPE }} - name: Upload Android ${{ env.BUILD_TYPE }} Artifacts - uses: actions/upload-artifact@v4.3.4 + uses: actions/upload-artifact@v4.3.5 if: github.event_name == 'push' || github.event_name == 'schedule' with: name: androidArtifacts @@ -173,14 +173,14 @@ jobs: run: fastlane build${{ env.BUILD_TYPE }} - name: Upload iOS Debug Artifacts - uses: actions/upload-artifact@v4.3.4 + uses: actions/upload-artifact@v4.3.5 if: github.event_name == 'push' with: name: iOSArtifacts path: ios/CCC_I.ipa - name: Upload iOS Artifacts - uses: actions/upload-artifact@v4.3.4 + uses: actions/upload-artifact@v4.3.5 if: github.event_name == 'schedule' with: name: iOSArtifacts diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index bbd2a7bab6..087082369e 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -80,19 +80,19 @@ jobs: run: ./gradlew :android:app:bundleRelease :backend:app:jar --parallel - name: Upload Google App Bundle - uses: actions/upload-artifact@v4.3.4 + uses: actions/upload-artifact@v4.3.5 with: name: googleBundle path: android/app/build/outputs/bundle/googleRelease/app-google-release.aab - name: Upload Huawei App Bundle - uses: actions/upload-artifact@v4.3.4 + uses: actions/upload-artifact@v4.3.5 with: name: huaweiBundle path: android/app/build/outputs/bundle/huaweiRelease/app-huawei-release.aab - name: Upload Backend Jar - uses: actions/upload-artifact@v4.3.4 + uses: actions/upload-artifact@v4.3.5 with: name: backendJar path: backend/app/build/libs/app-*.jar From 19ddcfa6df1da773abd059a5929f9db07ff4e697 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 3 Aug 2024 18:45:35 +0200 Subject: [PATCH 54/89] [Oztechan/CCC#1457] Update submodule/logmob digest to e269b8d (#3743) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: Mustafa Ozhan --- submodule/logmob | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/submodule/logmob b/submodule/logmob index 95201c8050..e269b8df59 160000 --- a/submodule/logmob +++ b/submodule/logmob @@ -1 +1 @@ -Subproject commit 95201c8050a64a1896291163ce7b2e15de86da00 +Subproject commit e269b8df59381960e826e559996d8d6ebf1ce9a3 From 7eb451c12230b5f120451c7bcead1b60f50d5706 Mon Sep 17 00:00:00 2001 From: Mustafa Ozhan Date: Sat, 3 Aug 2024 20:08:51 +0200 Subject: [PATCH 55/89] [Oztechan/CCC#3727] Create sendEffect method for fire and forget (#3728) * [Oztechan/CCC#3727] Create sendEffect method for fire and forget * [Oztechan/CCC#3727] Create sendEffect method for fire and forget --- .../viewmodel/widget/WidgetViewModel.kt | 4 +- .../client/core/viewmodel/SEEDViewModel.kt | 7 ++ .../calculator/CalculatorViewModel.kt | 69 +++++++--------- .../currencies/CurrenciesViewModel.kt | 16 ++-- .../client/viewmodel/main/MainViewModel.kt | 14 ++-- .../viewmodel/premium/PremiumViewModel.kt | 9 +-- .../selectcurrency/SelectCurrencyViewModel.kt | 9 +-- .../viewmodel/settings/SettingsViewModel.kt | 78 ++++++++++--------- .../viewmodel/watchers/WatchersViewModel.kt | 20 ++--- 9 files changed, 110 insertions(+), 116 deletions(-) diff --git a/android/viewmodel/widget/src/main/kotlin/com/oztechan/ccc/android/viewmodel/widget/WidgetViewModel.kt b/android/viewmodel/widget/src/main/kotlin/com/oztechan/ccc/android/viewmodel/widget/WidgetViewModel.kt index 4ae60975dc..0d394ae2be 100644 --- a/android/viewmodel/widget/src/main/kotlin/com/oztechan/ccc/android/viewmodel/widget/WidgetViewModel.kt +++ b/android/viewmodel/widget/src/main/kotlin/com/oztechan/ccc/android/viewmodel/widget/WidgetViewModel.kt @@ -103,9 +103,9 @@ class WidgetViewModel( refreshWidgetData() } - override fun onOpenAppClick() = viewModelScope.launchIgnored { + override fun onOpenAppClick() { Logger.d { "WidgetViewModel onOpenAppClick" } - setEffect { WidgetEffect.OpenApp } + sendEffect { WidgetEffect.OpenApp } } // endregion } diff --git a/client/core/viewmodel/src/commonMain/kotlin/com/oztechan/ccc/client/core/viewmodel/SEEDViewModel.kt b/client/core/viewmodel/src/commonMain/kotlin/com/oztechan/ccc/client/core/viewmodel/SEEDViewModel.kt index 6cc7165d45..50b7da7e72 100644 --- a/client/core/viewmodel/src/commonMain/kotlin/com/oztechan/ccc/client/core/viewmodel/SEEDViewModel.kt +++ b/client/core/viewmodel/src/commonMain/kotlin/com/oztechan/ccc/client/core/viewmodel/SEEDViewModel.kt @@ -8,6 +8,7 @@ import kotlinx.coroutines.flow.MutableSharedFlow import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.asSharedFlow import kotlinx.coroutines.flow.asStateFlow +import kotlinx.coroutines.launch abstract class SEEDViewModel< State : BaseState, @@ -44,4 +45,10 @@ abstract class SEEDViewModel< protected suspend fun setEffect(newEffect: () -> Effect) { _effect.emit(newEffect()) } + + protected fun sendEffect(newEffect: () -> Effect) { + viewModelScope.launch { + _effect.emit(newEffect()) + } + } } diff --git a/client/viewmodel/calculator/src/commonMain/kotlin/com/oztechan/ccc/client/viewmodel/calculator/CalculatorViewModel.kt b/client/viewmodel/calculator/src/commonMain/kotlin/com/oztechan/ccc/client/viewmodel/calculator/CalculatorViewModel.kt index 1c87dd7f7a..c67643faba 100644 --- a/client/viewmodel/calculator/src/commonMain/kotlin/com/oztechan/ccc/client/viewmodel/calculator/CalculatorViewModel.kt +++ b/client/viewmodel/calculator/src/commonMain/kotlin/com/oztechan/ccc/client/viewmodel/calculator/CalculatorViewModel.kt @@ -108,16 +108,13 @@ class CalculatorViewModel( } } - private fun updateConversionSuccess(conversion: Conversion) = - conversion.copy(date = nowAsDateString()) - .let { - data.conversion = it - calculateConversions(it, ConversionState.Online(it.date)) - - viewModelScope.launch { - conversionDataSource.insertConversion(it) - } - } + private fun updateConversionSuccess(conversion: Conversion) = viewModelScope.launch { + conversion.copy(date = nowAsDateString()).let { + data.conversion = it + calculateConversions(it, ConversionState.Online(it.date)) + conversionDataSource.insertConversion(it) + } + } private fun updateConversionFailed(t: Throwable) = viewModelScope.launchIgnored { Logger.w(t) { "CalculatorViewModel updateConversionFailed" } @@ -128,7 +125,7 @@ class CalculatorViewModel( } ?: run { Logger.w { "No offline conversion found in the DB" } - setEffect { CalculatorEffect.Error } + sendEffect { CalculatorEffect.Error } calculateConversions(null, ConversionState.Error) } @@ -147,7 +144,7 @@ class CalculatorViewModel( ) } - private fun calculateOutput(input: String) = viewModelScope.launch { + private fun calculateOutput(input: String) { val output = data.parser .calculate(input.toSupportedCharacters(), MAXIMUM_FLOATING_POINT) .mapTo { if (it.isFinite()) it.getFormatted(calculationStorage.precision) else "" } @@ -156,17 +153,17 @@ class CalculatorViewModel( when { input.length > MAXIMUM_INPUT -> { - setEffect { CalculatorEffect.TooBigInput } + sendEffect { CalculatorEffect.TooBigInput } setState { copy(input = input.dropLast(1)) } } output.length > MAXIMUM_OUTPUT -> { - setEffect { CalculatorEffect.TooBigOutput } + sendEffect { CalculatorEffect.TooBigOutput } setState { copy(input = input.dropLast(1)) } } state.value.currencyList.size < MINIMUM_ACTIVE_CURRENCY -> { - setEffect { CalculatorEffect.FewCurrency } + sendEffect { CalculatorEffect.FewCurrency } setState { copy(loading = false) } } @@ -234,40 +231,32 @@ class CalculatorViewModel( analyticsManager.trackEvent(Event.ShowConversion(Param.Base(currency.code))) - viewModelScope.launch { - setEffect { - CalculatorEffect.ShowConversion( - currency.getConversionStringFromBase( - calculationStorage.currentBase, - data.conversion - ), - currency.code - ) - } + sendEffect { + CalculatorEffect.ShowConversion( + currency.getConversionStringFromBase( + calculationStorage.currentBase, + data.conversion + ), + currency.code + ) } } override fun onItemAmountLongClick(amount: String) { Logger.d { "CalculatorViewModel onItemAmountLongClick $amount" } - analyticsManager.trackEvent(Event.CopyClipboard) - - viewModelScope.launch { - setEffect { CalculatorEffect.CopyToClipboard(amount) } - } + sendEffect { CalculatorEffect.CopyToClipboard(amount) } } - override fun onOutputLongClick() = viewModelScope.launchIgnored { + override fun onOutputLongClick() { Logger.d { "CalculatorViewModel onOutputLongClick" } - analyticsManager.trackEvent(Event.CopyClipboard) - - setEffect { CalculatorEffect.CopyToClipboard(state.value.output) } + sendEffect { CalculatorEffect.CopyToClipboard(state.value.output) } } - override fun onInputLongClick() = viewModelScope.launchIgnored { + override fun onInputLongClick() { Logger.d { "CalculatorViewModel onInputLongClick" } - setEffect { CalculatorEffect.ShowPasteRequest } + sendEffect { CalculatorEffect.ShowPasteRequest } } override fun onPasteToInput(text: String) { @@ -278,14 +267,14 @@ class CalculatorViewModel( setState { copy(input = text.toSupportedCharacters()) } } - override fun onBarClick() = viewModelScope.launchIgnored { + override fun onBarClick() { Logger.d { "CalculatorViewModel onBarClick" } - setEffect { CalculatorEffect.OpenBar } + sendEffect { CalculatorEffect.OpenBar } } - override fun onSettingsClicked() = viewModelScope.launchIgnored { + override fun onSettingsClicked() { Logger.d { "CalculatorViewModel onSettingsClicked" } - setEffect { CalculatorEffect.OpenSettings } + sendEffect { CalculatorEffect.OpenSettings } } override fun onBaseChange(base: String) { diff --git a/client/viewmodel/currencies/src/commonMain/kotlin/com/oztechan/ccc/client/viewmodel/currencies/CurrenciesViewModel.kt b/client/viewmodel/currencies/src/commonMain/kotlin/com/oztechan/ccc/client/viewmodel/currencies/CurrenciesViewModel.kt index 5ff19361f4..1d48d7198f 100755 --- a/client/viewmodel/currencies/src/commonMain/kotlin/com/oztechan/ccc/client/viewmodel/currencies/CurrenciesViewModel.kt +++ b/client/viewmodel/currencies/src/commonMain/kotlin/com/oztechan/ccc/client/viewmodel/currencies/CurrenciesViewModel.kt @@ -62,13 +62,13 @@ class CurrenciesViewModel( filterList("") } - private suspend fun verifyListSize() = data.unFilteredList + private fun verifyListSize() = data.unFilteredList .filter { it.isActive } .whether { it.size < MINIMUM_ACTIVE_CURRENCY } ?.whetherNot { appStorage.firstRun } - ?.run { setEffect { CurrenciesEffect.FewCurrency } } + ?.run { sendEffect { CurrenciesEffect.FewCurrency } } - private suspend fun verifyCurrentBase() = calculationStorage.currentBase.either( + private fun verifyCurrentBase() = calculationStorage.currentBase.either( { it.isEmpty() }, { base -> state.value.currencyList @@ -83,7 +83,7 @@ class CurrenciesViewModel( analyticsManager.trackEvent(Event.BaseChange(Param.Base(newBase))) analyticsManager.setUserProperty(UserProperty.BaseCurrency(newBase)) - setEffect { CurrenciesEffect.ChangeBase(newBase) } + sendEffect { CurrenciesEffect.ChangeBase(newBase) } } private fun filterList(txt: String) = data.unFilteredList @@ -109,17 +109,17 @@ class CurrenciesViewModel( currencyDataSource.updateCurrencyStateByCode(currency.code, !currency.isActive) } - override fun onDoneClick() = viewModelScope.launchIgnored { + override fun onDoneClick() { Logger.d { "CurrenciesViewModel onDoneClick" } data.unFilteredList .filter { it.isActive }.size .whether { it < MINIMUM_ACTIVE_CURRENCY } - ?.let { setEffect { CurrenciesEffect.FewCurrency } } + ?.let { sendEffect { CurrenciesEffect.FewCurrency } } ?: run { appStorage.firstRun = false setState { copy(isOnboardingVisible = false) } filterList("") - setEffect { CurrenciesEffect.OpenCalculator } + sendEffect { CurrenciesEffect.OpenCalculator } } } @@ -133,7 +133,7 @@ class CurrenciesViewModel( if (state.value.selectionVisibility) { setState { copy(selectionVisibility = false) } } else { - setEffect { CurrenciesEffect.Back } + sendEffect { CurrenciesEffect.Back } }.run { filterList("") } diff --git a/client/viewmodel/main/src/commonMain/kotlin/com/oztechan/ccc/client/viewmodel/main/MainViewModel.kt b/client/viewmodel/main/src/commonMain/kotlin/com/oztechan/ccc/client/viewmodel/main/MainViewModel.kt index 0bb5886bc7..1445f10aef 100644 --- a/client/viewmodel/main/src/commonMain/kotlin/com/oztechan/ccc/client/viewmodel/main/MainViewModel.kt +++ b/client/viewmodel/main/src/commonMain/kotlin/com/oztechan/ccc/client/viewmodel/main/MainViewModel.kt @@ -78,15 +78,13 @@ class MainViewModel( private fun checkAppUpdate() { appConfigRepository.checkAppUpdate(data.isAppUpdateShown)?.let { isCancelable -> - viewModelScope.launch { - setEffect { - MainEffect.AppUpdateEffect( - isCancelable, - appConfigRepository.getMarketLink() - ) - } - data.isAppUpdateShown = true + sendEffect { + MainEffect.AppUpdateEffect( + isCancelable, + appConfigRepository.getMarketLink() + ) } + data.isAppUpdateShown = true } } diff --git a/client/viewmodel/premium/src/commonMain/kotlin/com/oztechan/ccc/client/viewmodel/premium/PremiumViewModel.kt b/client/viewmodel/premium/src/commonMain/kotlin/com/oztechan/ccc/client/viewmodel/premium/PremiumViewModel.kt index 91fde9a57f..d79dc6b4bc 100644 --- a/client/viewmodel/premium/src/commonMain/kotlin/com/oztechan/ccc/client/viewmodel/premium/PremiumViewModel.kt +++ b/client/viewmodel/premium/src/commonMain/kotlin/com/oztechan/ccc/client/viewmodel/premium/PremiumViewModel.kt @@ -9,7 +9,6 @@ import com.github.submob.scopemob.whether import com.oztechan.ccc.client.core.shared.util.isNotPassed import com.oztechan.ccc.client.core.viewmodel.BaseData import com.oztechan.ccc.client.core.viewmodel.SEEDViewModel -import com.oztechan.ccc.client.core.viewmodel.util.launchIgnored import com.oztechan.ccc.client.storage.app.AppStorage import com.oztechan.ccc.client.viewmodel.premium.model.OldPurchase import com.oztechan.ccc.client.viewmodel.premium.model.PremiumData @@ -28,11 +27,11 @@ class PremiumViewModel( adType: PremiumType?, startDate: Long, isRestorePurchase: Boolean - ) = viewModelScope.launchIgnored { + ) { Logger.d { "PremiumViewModel onPremiumActivated ${adType?.data?.duration.orEmpty()}" } adType?.let { appStorage.premiumEndDate = it.calculatePremiumEnd(startDate) - setEffect { PremiumEffect.PremiumActivated(it, isRestorePurchase) } + sendEffect { PremiumEffect.PremiumActivated(it, isRestorePurchase) } } } @@ -73,12 +72,12 @@ class PremiumViewModel( } } - override fun onPremiumItemClick(type: PremiumType) = viewModelScope.launchIgnored { + override fun onPremiumItemClick(type: PremiumType) { Logger.d { "PremiumViewModel onPremiumItemClick ${type.data.duration}" } setState { copy(loading = type != PremiumType.VIDEO) } - setEffect { PremiumEffect.LaunchActivatePremiumFlow(type) } + sendEffect { PremiumEffect.LaunchActivatePremiumFlow(type) } } override fun onPremiumActivationFailed() { diff --git a/client/viewmodel/selectcurrency/src/commonMain/kotlin/com/oztechan/ccc/client/viewmodel/selectcurrency/SelectCurrencyViewModel.kt b/client/viewmodel/selectcurrency/src/commonMain/kotlin/com/oztechan/ccc/client/viewmodel/selectcurrency/SelectCurrencyViewModel.kt index 07401a93e8..5a335bdfd2 100644 --- a/client/viewmodel/selectcurrency/src/commonMain/kotlin/com/oztechan/ccc/client/viewmodel/selectcurrency/SelectCurrencyViewModel.kt +++ b/client/viewmodel/selectcurrency/src/commonMain/kotlin/com/oztechan/ccc/client/viewmodel/selectcurrency/SelectCurrencyViewModel.kt @@ -7,7 +7,6 @@ import co.touchlab.kermit.Logger import com.oztechan.ccc.client.core.shared.constants.MINIMUM_ACTIVE_CURRENCY import com.oztechan.ccc.client.core.viewmodel.BaseData import com.oztechan.ccc.client.core.viewmodel.SEEDViewModel -import com.oztechan.ccc.client.core.viewmodel.util.launchIgnored import com.oztechan.ccc.client.datasource.currency.CurrencyDataSource import com.oztechan.ccc.common.core.model.Currency import kotlinx.coroutines.flow.launchIn @@ -34,14 +33,14 @@ class SelectCurrencyViewModel( } // region Event - override fun onItemClick(currency: Currency) = viewModelScope.launchIgnored { + override fun onItemClick(currency: Currency) { Logger.d { "SelectCurrencyViewModel onItemClick ${currency.code}" } - setEffect { SelectCurrencyEffect.CurrencyChange(currency.code) } + sendEffect { SelectCurrencyEffect.CurrencyChange(currency.code) } } - override fun onSelectClick() = viewModelScope.launchIgnored { + override fun onSelectClick() { Logger.d { "SelectCurrencyViewModel onSelectClick" } - setEffect { SelectCurrencyEffect.OpenCurrencies } + sendEffect { SelectCurrencyEffect.OpenCurrencies } } // endregion } diff --git a/client/viewmodel/settings/src/commonMain/kotlin/com/oztechan/ccc/client/viewmodel/settings/SettingsViewModel.kt b/client/viewmodel/settings/src/commonMain/kotlin/com/oztechan/ccc/client/viewmodel/settings/SettingsViewModel.kt index 493aee066d..3fa4c4b0da 100644 --- a/client/viewmodel/settings/src/commonMain/kotlin/com/oztechan/ccc/client/viewmodel/settings/SettingsViewModel.kt +++ b/client/viewmodel/settings/src/commonMain/kotlin/com/oztechan/ccc/client/viewmodel/settings/SettingsViewModel.kt @@ -10,7 +10,6 @@ import com.oztechan.ccc.client.core.shared.model.AppTheme import com.oztechan.ccc.client.core.shared.util.isPassed import com.oztechan.ccc.client.core.shared.util.toDateString import com.oztechan.ccc.client.core.viewmodel.SEEDViewModel -import com.oztechan.ccc.client.core.viewmodel.util.launchIgnored import com.oztechan.ccc.client.datasource.currency.CurrencyDataSource import com.oztechan.ccc.client.datasource.watcher.WatcherDataSource import com.oztechan.ccc.client.repository.adcontrol.AdControlRepository @@ -25,6 +24,7 @@ import com.oztechan.ccc.common.datasource.conversion.ConversionDataSource import kotlinx.coroutines.delay import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.onEach +import kotlinx.coroutines.launch @Suppress("TooManyFunctions", "LongParameterList") class SettingsViewModel( @@ -70,67 +70,69 @@ class SettingsViewModel( else -> PremiumStatus.Active(toDateString()) } - private suspend fun synchroniseConversions() { - setEffect { SettingsEffect.Synchronising } + private fun synchroniseConversions() { + viewModelScope.launch { + sendEffect { SettingsEffect.Synchronising } - currencyDataSource.getActiveCurrencies() - .forEach { (name) -> - runCatching { backendApiService.getConversion(name) } - .onFailure { error -> Logger.w(error) { error.message.toString() } } - .onSuccess { conversionDataSource.insertConversion(it) } + currencyDataSource.getActiveCurrencies() + .forEach { (name) -> + runCatching { backendApiService.getConversion(name) } + .onFailure { error -> Logger.w(error) { error.message.toString() } } + .onSuccess { conversionDataSource.insertConversion(it) } - delay(SYNC_DELAY) - } + delay(SYNC_DELAY) + } - setEffect { SettingsEffect.Synchronised } + sendEffect { SettingsEffect.Synchronised } - data.synced = true + data.synced = true + } } // region Event - override fun onBackClick() = viewModelScope.launchIgnored { + override fun onBackClick() { Logger.d { "SettingsViewModel onBackClick" } - setEffect { SettingsEffect.Back } + sendEffect { SettingsEffect.Back } } - override fun onCurrenciesClick() = viewModelScope.launchIgnored { + override fun onCurrenciesClick() { Logger.d { "SettingsViewModel onCurrenciesClick" } - setEffect { SettingsEffect.OpenCurrencies } + sendEffect { SettingsEffect.OpenCurrencies } } - override fun onWatchersClick() = viewModelScope.launchIgnored { + override fun onWatchersClick() { Logger.d { "SettingsViewModel onWatchersClick" } - setEffect { SettingsEffect.OpenWatchers } + sendEffect { SettingsEffect.OpenWatchers } } - override fun onFeedBackClick() = viewModelScope.launchIgnored { + override fun onFeedBackClick() { Logger.d { "SettingsViewModel onFeedBackClick" } - setEffect { SettingsEffect.FeedBack } + sendEffect { SettingsEffect.FeedBack } } - override fun onShareClick() = viewModelScope.launchIgnored { + override fun onShareClick() { Logger.d { "SettingsViewModel onShareClick" } - setEffect { SettingsEffect.Share(appConfigRepository.getMarketLink()) } + sendEffect { SettingsEffect.Share(appConfigRepository.getMarketLink()) } } - override fun onSupportUsClick() = viewModelScope.launchIgnored { + override fun onSupportUsClick() { Logger.d { "SettingsViewModel onSupportUsClick" } - setEffect { SettingsEffect.SupportUs(appConfigRepository.getMarketLink()) } + sendEffect { SettingsEffect.SupportUs(appConfigRepository.getMarketLink()) } } - override fun onPrivacySettingsClick() = viewModelScope.launchIgnored { + override fun onPrivacySettingsClick() { Logger.d { "SettingsViewModel onPrivacySettingsClick" } - setEffect { SettingsEffect.PrivacySettings } + sendEffect { SettingsEffect.PrivacySettings } } - override fun onOnGitHubClick() = viewModelScope.launchIgnored { + override fun onOnGitHubClick() { Logger.d { "SettingsViewModel onOnGitHubClick" } - setEffect { SettingsEffect.OnGitHub } + sendEffect { SettingsEffect.OnGitHub } } - override fun onPremiumClick() = viewModelScope.launchIgnored { + override fun onPremiumClick() { Logger.d { "SettingsViewModel onPremiumClick" } - setEffect { + sendEffect { if (appStorage.premiumEndDate.isPassed()) { SettingsEffect.Premium } else { @@ -139,26 +141,26 @@ class SettingsViewModel( } } - override fun onThemeClick() = viewModelScope.launchIgnored { + override fun onThemeClick() { Logger.d { "SettingsViewModel onThemeClick" } - setEffect { SettingsEffect.ThemeDialog } + sendEffect { SettingsEffect.ThemeDialog } } - override fun onSyncClick() = viewModelScope.launchIgnored { + override fun onSyncClick() { Logger.d { "SettingsViewModel onSyncClick" } analyticsManager.trackEvent(Event.OfflineSync) if (data.synced) { - setEffect { SettingsEffect.OnlyOneTimeSync } + sendEffect { SettingsEffect.OnlyOneTimeSync } } else { synchroniseConversions() } } - override fun onPrecisionClick() = viewModelScope.launchIgnored { + override fun onPrecisionClick() { Logger.d { "SettingsViewModel onPrecisionClick" } - setEffect { SettingsEffect.SelectPrecision } + sendEffect { SettingsEffect.SelectPrecision } } override fun onPrecisionSelect(index: Int) { @@ -167,11 +169,11 @@ class SettingsViewModel( setState { copy(precision = index.indexToNumber()) } } - override fun onThemeChange(theme: AppTheme) = viewModelScope.launchIgnored { + override fun onThemeChange(theme: AppTheme) { Logger.d { "SettingsViewModel onThemeChange $theme" } setState { copy(appThemeType = theme) } appStorage.appTheme = theme.themeValue - setEffect { SettingsEffect.ChangeTheme(theme.themeValue) } + sendEffect { SettingsEffect.ChangeTheme(theme.themeValue) } } // endregion } diff --git a/client/viewmodel/watchers/src/commonMain/kotlin/com/oztechan/ccc/client/viewmodel/watchers/WatchersViewModel.kt b/client/viewmodel/watchers/src/commonMain/kotlin/com/oztechan/ccc/client/viewmodel/watchers/WatchersViewModel.kt index 141895873f..b75c6452e0 100644 --- a/client/viewmodel/watchers/src/commonMain/kotlin/com/oztechan/ccc/client/viewmodel/watchers/WatchersViewModel.kt +++ b/client/viewmodel/watchers/src/commonMain/kotlin/com/oztechan/ccc/client/viewmodel/watchers/WatchersViewModel.kt @@ -37,19 +37,19 @@ class WatchersViewModel( } // region Event - override fun onBackClick() = viewModelScope.launchIgnored { + override fun onBackClick() { Logger.d { "WatcherViewModel onBackClick" } - setEffect { WatchersEffect.Back } + sendEffect { WatchersEffect.Back } } - override fun onBaseClick(watcher: Watcher) = viewModelScope.launchIgnored { + override fun onBaseClick(watcher: Watcher) { Logger.d { "WatcherViewModel onBaseClick $watcher" } - setEffect { WatchersEffect.SelectBase(watcher) } + sendEffect { WatchersEffect.SelectBase(watcher) } } - override fun onTargetClick(watcher: Watcher) = viewModelScope.launchIgnored { + override fun onTargetClick(watcher: Watcher) { Logger.d { "WatcherViewModel onTargetClick $watcher" } - setEffect { WatchersEffect.SelectTarget(watcher) } + sendEffect { WatchersEffect.SelectTarget(watcher) } } override fun onBaseChanged(watcher: Watcher, newBase: String) = viewModelScope.launchIgnored { @@ -67,7 +67,7 @@ class WatchersViewModel( Logger.d { "WatcherViewModel onAddClick" } if (watcherDataSource.getWatchers().size >= MAXIMUM_NUMBER_OF_WATCHER) { - setEffect { WatchersEffect.MaximumNumberOfWatchers } + sendEffect { WatchersEffect.MaximumNumberOfWatchers } } else { currencyDataSource.getActiveCurrencies().let { list -> watcherDataSource.addWatcher( @@ -93,15 +93,15 @@ class WatchersViewModel( Logger.d { "WatcherViewModel onRateChange $watcher $rate" } return if (rate.length > MAXIMUM_INPUT) { - viewModelScope.launch { setEffect { WatchersEffect.TooBigInput } } + sendEffect { WatchersEffect.TooBigInput } rate.dropLast(1) } else { rate.toSupportedCharacters().toStandardDigits().toDoubleOrNull()?.let { viewModelScope.launch { watcherDataSource.updateWatcherRateById(it, watcher.id) } - } ?: viewModelScope.launch { - setEffect { WatchersEffect.InvalidInput } + } ?: sendEffect { + WatchersEffect.InvalidInput } rate } From 413fbe420138c2c40286e4bc5cdfbee4a060a7e8 Mon Sep 17 00:00:00 2001 From: Mustafa Ozhan Date: Sat, 3 Aug 2024 20:17:26 +0200 Subject: [PATCH 56/89] [Oztechan/CCC#3729] Simplify WidgetViewModel (#3730) * [Oztechan/CCC#3729] Simplify WidgetViewModel * [Oztechan/CCC#3729] Simplify WidgetViewModel --- .../viewmodel/widget/WidgetViewModel.kt | 34 ++++++++++--------- 1 file changed, 18 insertions(+), 16 deletions(-) diff --git a/android/viewmodel/widget/src/main/kotlin/com/oztechan/ccc/android/viewmodel/widget/WidgetViewModel.kt b/android/viewmodel/widget/src/main/kotlin/com/oztechan/ccc/android/viewmodel/widget/WidgetViewModel.kt index 0d394ae2be..807edb78ca 100644 --- a/android/viewmodel/widget/src/main/kotlin/com/oztechan/ccc/android/viewmodel/widget/WidgetViewModel.kt +++ b/android/viewmodel/widget/src/main/kotlin/com/oztechan/ccc/android/viewmodel/widget/WidgetViewModel.kt @@ -66,36 +66,38 @@ class WidgetViewModel( } } - private suspend fun updateBase(isToNext: Boolean) { - val activeCurrencies = currencyDataSource.getActiveCurrencies() + private fun updateBase(isToNext: Boolean) { + viewModelScope.launch { + val activeCurrencies = currencyDataSource.getActiveCurrencies() - val newBaseIndex = activeCurrencies - .map { it.code } - .indexOf(calculationStorage.currentBase) - .let { - if (isToNext) { - it + 1 - } else { - it - 1 + val newBaseIndex = activeCurrencies + .map { it.code } + .indexOf(calculationStorage.currentBase) + .let { + if (isToNext) { + it + 1 + } else { + it - 1 + } + }.let { + (it + activeCurrencies.size) % activeCurrencies.size // it handles index -1 and index size +1 } - }.let { - (it + activeCurrencies.size) % activeCurrencies.size // it handles index -1 and index size +1 - } - calculationStorage.currentBase = activeCurrencies[newBaseIndex].code + calculationStorage.currentBase = activeCurrencies[newBaseIndex].code + + refreshWidgetData() + } } // region Event override fun onPreviousClick() = viewModelScope.launchIgnored { Logger.d { "WidgetViewModel onPreviousClick" } updateBase(false) - refreshWidgetData() } override fun onNextClick() = viewModelScope.launchIgnored { Logger.d { "WidgetViewModel onNextClick" } updateBase(true) - refreshWidgetData() } override fun onRefreshClick() = viewModelScope.launchIgnored { From 9a3bc56dcafaa640d24c158dff3f3879535af95b Mon Sep 17 00:00:00 2001 From: Mustafa Ozhan Date: Sun, 4 Aug 2024 13:45:45 +0200 Subject: [PATCH 57/89] [Oztechan/CCC#3731] Get rid of CoroutinesUtil for ViewModels (#3732) --- .../viewmodel/widget/WidgetViewModel.kt | 7 ++- .../core/viewmodel/util/CoroutineUtil.kt | 16 ------- .../calculator/CalculatorViewModel.kt | 5 +- .../currencies/CurrenciesViewModel.kt | 16 ++++--- .../viewmodel/watchers/WatchersViewModel.kt | 47 +++++++++++-------- 5 files changed, 42 insertions(+), 49 deletions(-) delete mode 100644 client/core/viewmodel/src/commonMain/kotlin/com/oztechan/ccc/client/core/viewmodel/util/CoroutineUtil.kt diff --git a/android/viewmodel/widget/src/main/kotlin/com/oztechan/ccc/android/viewmodel/widget/WidgetViewModel.kt b/android/viewmodel/widget/src/main/kotlin/com/oztechan/ccc/android/viewmodel/widget/WidgetViewModel.kt index 807edb78ca..995ef35d4c 100644 --- a/android/viewmodel/widget/src/main/kotlin/com/oztechan/ccc/android/viewmodel/widget/WidgetViewModel.kt +++ b/android/viewmodel/widget/src/main/kotlin/com/oztechan/ccc/android/viewmodel/widget/WidgetViewModel.kt @@ -8,7 +8,6 @@ import com.oztechan.ccc.client.core.shared.util.isNotPassed import com.oztechan.ccc.client.core.shared.util.nowAsDateString import com.oztechan.ccc.client.core.viewmodel.BaseEffect import com.oztechan.ccc.client.core.viewmodel.SEEDViewModel -import com.oztechan.ccc.client.core.viewmodel.util.launchIgnored import com.oztechan.ccc.client.datasource.currency.CurrencyDataSource import com.oztechan.ccc.client.service.backend.BackendApiService import com.oztechan.ccc.client.storage.app.AppStorage @@ -90,17 +89,17 @@ class WidgetViewModel( } // region Event - override fun onPreviousClick() = viewModelScope.launchIgnored { + override fun onPreviousClick() { Logger.d { "WidgetViewModel onPreviousClick" } updateBase(false) } - override fun onNextClick() = viewModelScope.launchIgnored { + override fun onNextClick() { Logger.d { "WidgetViewModel onNextClick" } updateBase(true) } - override fun onRefreshClick() = viewModelScope.launchIgnored { + override fun onRefreshClick() { Logger.d { "WidgetViewModel onRefreshClick" } refreshWidgetData() } diff --git a/client/core/viewmodel/src/commonMain/kotlin/com/oztechan/ccc/client/core/viewmodel/util/CoroutineUtil.kt b/client/core/viewmodel/src/commonMain/kotlin/com/oztechan/ccc/client/core/viewmodel/util/CoroutineUtil.kt deleted file mode 100644 index ab04514cdd..0000000000 --- a/client/core/viewmodel/src/commonMain/kotlin/com/oztechan/ccc/client/core/viewmodel/util/CoroutineUtil.kt +++ /dev/null @@ -1,16 +0,0 @@ -package com.oztechan.ccc.client.core.viewmodel.util - -import kotlinx.coroutines.CoroutineScope -import kotlinx.coroutines.flow.MutableStateFlow -import kotlinx.coroutines.flow.update -import kotlinx.coroutines.launch - -fun CoroutineScope.launchIgnored(function: suspend () -> Unit) { - launch { - function() - } -} - -inline fun MutableStateFlow.update(function: T.() -> T) { - update { function(value) } -} diff --git a/client/viewmodel/calculator/src/commonMain/kotlin/com/oztechan/ccc/client/viewmodel/calculator/CalculatorViewModel.kt b/client/viewmodel/calculator/src/commonMain/kotlin/com/oztechan/ccc/client/viewmodel/calculator/CalculatorViewModel.kt index c67643faba..9266a87327 100644 --- a/client/viewmodel/calculator/src/commonMain/kotlin/com/oztechan/ccc/client/viewmodel/calculator/CalculatorViewModel.kt +++ b/client/viewmodel/calculator/src/commonMain/kotlin/com/oztechan/ccc/client/viewmodel/calculator/CalculatorViewModel.kt @@ -17,7 +17,6 @@ import com.oztechan.ccc.client.core.shared.util.nowAsDateString import com.oztechan.ccc.client.core.shared.util.toStandardDigits import com.oztechan.ccc.client.core.shared.util.toSupportedCharacters import com.oztechan.ccc.client.core.viewmodel.SEEDViewModel -import com.oztechan.ccc.client.core.viewmodel.util.launchIgnored import com.oztechan.ccc.client.datasource.currency.CurrencyDataSource import com.oztechan.ccc.client.repository.adcontrol.AdControlRepository import com.oztechan.ccc.client.service.backend.BackendApiService @@ -116,7 +115,7 @@ class CalculatorViewModel( } } - private fun updateConversionFailed(t: Throwable) = viewModelScope.launchIgnored { + private fun updateConversionFailed(t: Throwable) = viewModelScope.launch { Logger.w(t) { "CalculatorViewModel updateConversionFailed" } conversionDataSource.getConversionByBase( calculationStorage.currentBase @@ -172,7 +171,7 @@ class CalculatorViewModel( } private fun currentBaseChanged(newBase: String, shouldTrack: Boolean = false) = - viewModelScope.launchIgnored { + viewModelScope.launch { data.conversion = null calculationStorage.currentBase = newBase val symbol = currencyDataSource.getCurrencyByCode(newBase)?.symbol.orEmpty() diff --git a/client/viewmodel/currencies/src/commonMain/kotlin/com/oztechan/ccc/client/viewmodel/currencies/CurrenciesViewModel.kt b/client/viewmodel/currencies/src/commonMain/kotlin/com/oztechan/ccc/client/viewmodel/currencies/CurrenciesViewModel.kt index 1d48d7198f..ae3582a72d 100755 --- a/client/viewmodel/currencies/src/commonMain/kotlin/com/oztechan/ccc/client/viewmodel/currencies/CurrenciesViewModel.kt +++ b/client/viewmodel/currencies/src/commonMain/kotlin/com/oztechan/ccc/client/viewmodel/currencies/CurrenciesViewModel.kt @@ -14,7 +14,6 @@ import com.oztechan.ccc.client.core.analytics.model.Param import com.oztechan.ccc.client.core.analytics.model.UserProperty import com.oztechan.ccc.client.core.shared.constants.MINIMUM_ACTIVE_CURRENCY import com.oztechan.ccc.client.core.viewmodel.SEEDViewModel -import com.oztechan.ccc.client.core.viewmodel.util.launchIgnored import com.oztechan.ccc.client.datasource.currency.CurrencyDataSource import com.oztechan.ccc.client.repository.adcontrol.AdControlRepository import com.oztechan.ccc.client.storage.app.AppStorage @@ -22,6 +21,7 @@ import com.oztechan.ccc.client.storage.calculation.CalculationStorage import com.oztechan.ccc.common.core.model.Currency import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.onEach +import kotlinx.coroutines.launch @Suppress("TooManyFunctions") class CurrenciesViewModel( @@ -99,14 +99,18 @@ class CurrenciesViewModel( } // region Event - override fun updateAllCurrenciesState(state: Boolean) = viewModelScope.launchIgnored { + override fun updateAllCurrenciesState(state: Boolean) { Logger.d { "CurrenciesViewModel updateAllCurrenciesState $state" } - currencyDataSource.updateCurrencyStates(state) + viewModelScope.launch { + currencyDataSource.updateCurrencyStates(state) + } } - override fun onItemClick(currency: Currency) = viewModelScope.launchIgnored { + override fun onItemClick(currency: Currency) { Logger.d { "CurrenciesViewModel onItemClick ${currency.code}" } - currencyDataSource.updateCurrencyStateByCode(currency.code, !currency.isActive) + viewModelScope.launch { + currencyDataSource.updateCurrencyStateByCode(currency.code, !currency.isActive) + } } override fun onDoneClick() { @@ -128,7 +132,7 @@ class CurrenciesViewModel( setState { copy(selectionVisibility = !it) } } - override fun onCloseClick() = viewModelScope.launchIgnored { + override fun onCloseClick() { Logger.d { "CurrenciesViewModel onCloseClick" } if (state.value.selectionVisibility) { setState { copy(selectionVisibility = false) } diff --git a/client/viewmodel/watchers/src/commonMain/kotlin/com/oztechan/ccc/client/viewmodel/watchers/WatchersViewModel.kt b/client/viewmodel/watchers/src/commonMain/kotlin/com/oztechan/ccc/client/viewmodel/watchers/WatchersViewModel.kt index b75c6452e0..2815cb0d7f 100644 --- a/client/viewmodel/watchers/src/commonMain/kotlin/com/oztechan/ccc/client/viewmodel/watchers/WatchersViewModel.kt +++ b/client/viewmodel/watchers/src/commonMain/kotlin/com/oztechan/ccc/client/viewmodel/watchers/WatchersViewModel.kt @@ -6,7 +6,6 @@ import com.oztechan.ccc.client.core.analytics.model.UserProperty import com.oztechan.ccc.client.core.shared.util.toStandardDigits import com.oztechan.ccc.client.core.shared.util.toSupportedCharacters import com.oztechan.ccc.client.core.viewmodel.SEEDViewModel -import com.oztechan.ccc.client.core.viewmodel.util.launchIgnored import com.oztechan.ccc.client.datasource.currency.CurrencyDataSource import com.oztechan.ccc.client.datasource.watcher.WatcherDataSource import com.oztechan.ccc.client.repository.adcontrol.AdControlRepository @@ -52,42 +51,50 @@ class WatchersViewModel( sendEffect { WatchersEffect.SelectTarget(watcher) } } - override fun onBaseChanged(watcher: Watcher, newBase: String) = viewModelScope.launchIgnored { + override fun onBaseChanged(watcher: Watcher, newBase: String) { Logger.d { "WatcherViewModel onBaseChanged $watcher $newBase" } - watcherDataSource.updateWatcherBaseById(newBase, watcher.id) + viewModelScope.launch { + watcherDataSource.updateWatcherBaseById(newBase, watcher.id) + } } - override fun onTargetChanged(watcher: Watcher, newTarget: String) = - viewModelScope.launchIgnored { - Logger.d { "WatcherViewModel onTargetChanged $watcher $newTarget" } + override fun onTargetChanged(watcher: Watcher, newTarget: String) { + Logger.d { "WatcherViewModel onTargetChanged $watcher $newTarget" } + viewModelScope.launch { watcherDataSource.updateWatcherTargetById(newTarget, watcher.id) } + } - override fun onAddClick() = viewModelScope.launchIgnored { + override fun onAddClick() { Logger.d { "WatcherViewModel onAddClick" } - if (watcherDataSource.getWatchers().size >= MAXIMUM_NUMBER_OF_WATCHER) { - sendEffect { WatchersEffect.MaximumNumberOfWatchers } - } else { - currencyDataSource.getActiveCurrencies().let { list -> - watcherDataSource.addWatcher( - base = list.firstOrNull()?.code.orEmpty(), - target = list.lastOrNull()?.code.orEmpty() - ) + viewModelScope.launch { + if (watcherDataSource.getWatchers().size >= MAXIMUM_NUMBER_OF_WATCHER) { + sendEffect { WatchersEffect.MaximumNumberOfWatchers } + } else { + currencyDataSource.getActiveCurrencies().let { list -> + watcherDataSource.addWatcher( + base = list.firstOrNull()?.code.orEmpty(), + target = list.lastOrNull()?.code.orEmpty() + ) + } } } } - override fun onDeleteClick(watcher: Watcher) = viewModelScope.launchIgnored { + override fun onDeleteClick(watcher: Watcher) { Logger.d { "WatcherViewModel onDeleteClick $watcher" } - watcherDataSource.deleteWatcher(watcher.id) + viewModelScope.launch { + watcherDataSource.deleteWatcher(watcher.id) + } } - override fun onRelationChange(watcher: Watcher, isGreater: Boolean) = - viewModelScope.launchIgnored { - Logger.d { "WatcherViewModel onRelationChange $watcher $isGreater" } + override fun onRelationChange(watcher: Watcher, isGreater: Boolean) { + Logger.d { "WatcherViewModel onRelationChange $watcher $isGreater" } + viewModelScope.launch { watcherDataSource.updateWatcherRelationById(isGreater, watcher.id) } + } override fun onRateChange(watcher: Watcher, rate: String): String { Logger.d { "WatcherViewModel onRateChange $watcher $rate" } From 18311421f4d689c734171e9da2c7c5ec17fa203f Mon Sep 17 00:00:00 2001 From: Mustafa Ozhan Date: Sun, 4 Aug 2024 14:06:51 +0200 Subject: [PATCH 58/89] [Oztechan/CCC#3745] add assertNotNull for firstOrNull() test cases (#3746) --- .../calculator/CalculatorViewModelTest.kt | 10 ++++++++++ .../currencies/CurrenciesViewModelTest.kt | 7 +++++++ .../client/viewmodel/main/MainViewModelTest.kt | 2 ++ .../viewmodel/premium/PremiumViewModelTest.kt | 7 +++++++ .../SelectCurrencyViewModelTest.kt | 1 + .../viewmodel/settings/SettingsViewModelTest.kt | 17 +++++++++++++++++ 6 files changed, 44 insertions(+) diff --git a/client/viewmodel/calculator/src/commonTest/kotlin/com/oztechan/ccc/client/viewmodel/calculator/CalculatorViewModelTest.kt b/client/viewmodel/calculator/src/commonTest/kotlin/com/oztechan/ccc/client/viewmodel/calculator/CalculatorViewModelTest.kt index 5e20b7042e..4b61b21134 100644 --- a/client/viewmodel/calculator/src/commonTest/kotlin/com/oztechan/ccc/client/viewmodel/calculator/CalculatorViewModelTest.kt +++ b/client/viewmodel/calculator/src/commonTest/kotlin/com/oztechan/ccc/client/viewmodel/calculator/CalculatorViewModelTest.kt @@ -202,6 +202,7 @@ internal class CalculatorViewModelTest { viewModel.effect.onSubscription { viewModel.event.onKeyPress("1") // trigger api call }.firstOrNull().let { + assertNotNull(it) assertIs(it) viewModel.state.value.let { state -> @@ -229,6 +230,7 @@ internal class CalculatorViewModelTest { viewModel.effect.onSubscription { viewModel.event.onKeyPress("1") // trigger api call }.firstOrNull().let { + assertNotNull(it) assertIs(it) viewModel.state.value.let { state -> @@ -248,6 +250,7 @@ internal class CalculatorViewModelTest { viewModel.effect.onSubscription { viewModel.event.onKeyPress(fortyFiveDigitNumber) }.firstOrNull().let { + assertNotNull(it) assertIs(it) assertFalse { viewModel.state.value.loading } assertEquals(fortyFiveDigitNumber.dropLast(1), viewModel.state.value.input) @@ -261,6 +264,7 @@ internal class CalculatorViewModelTest { viewModel.effect.onSubscription { viewModel.event.onKeyPress(nineteenDigitNumber) }.firstOrNull().let { + assertNotNull(it) assertIs(it) assertFalse { viewModel.state.value.loading } assertEquals(nineteenDigitNumber.dropLast(1), viewModel.state.value.input) @@ -309,6 +313,7 @@ internal class CalculatorViewModelTest { viewModel.effect.onSubscription { viewModel.event.onBarClick() }.firstOrNull().let { + assertNotNull(it) assertIs(it) } } @@ -318,6 +323,7 @@ internal class CalculatorViewModelTest { viewModel.effect.onSubscription { viewModel.event.onSettingsClicked() }.firstOrNull().let { + assertNotNull(it) assertIs(it) } } @@ -360,6 +366,7 @@ internal class CalculatorViewModelTest { viewModel.effect.onSubscription { viewModel.event.onItemImageLongClick(currency1) }.firstOrNull().let { + assertNotNull(it) assertIs(it) assertEquals( currency1.getConversionStringFromBase( @@ -379,6 +386,7 @@ internal class CalculatorViewModelTest { viewModel.effect.onSubscription { viewModel.event.onItemAmountLongClick(currency1.rate) }.firstOrNull().let { + assertNotNull(it) assertEquals( CalculatorEffect.CopyToClipboard(currency1.rate), it @@ -395,6 +403,7 @@ internal class CalculatorViewModelTest { viewModel.event.onKeyPress(output) viewModel.event.onOutputLongClick() }.firstOrNull().let { + assertNotNull(it) assertEquals(CalculatorEffect.CopyToClipboard(output), it) verify { analyticsManager.trackEvent(Event.CopyClipboard) } @@ -406,6 +415,7 @@ internal class CalculatorViewModelTest { viewModel.effect.onSubscription { viewModel.event.onInputLongClick() }.firstOrNull().let { + assertNotNull(it) assertEquals(CalculatorEffect.ShowPasteRequest, it) } } diff --git a/client/viewmodel/currencies/src/commonTest/kotlin/com/oztechan/ccc/client/viewmodel/currencies/CurrenciesViewModelTest.kt b/client/viewmodel/currencies/src/commonTest/kotlin/com/oztechan/ccc/client/viewmodel/currencies/CurrenciesViewModelTest.kt index 84f42b6260..4d57198231 100644 --- a/client/viewmodel/currencies/src/commonTest/kotlin/com/oztechan/ccc/client/viewmodel/currencies/CurrenciesViewModelTest.kt +++ b/client/viewmodel/currencies/src/commonTest/kotlin/com/oztechan/ccc/client/viewmodel/currencies/CurrenciesViewModelTest.kt @@ -160,6 +160,7 @@ internal class CurrenciesViewModelTest { ) viewModel.effect.firstOrNull().let { + assertNotNull(it) assertIs(it) } } @@ -179,6 +180,7 @@ internal class CurrenciesViewModelTest { ) viewModel.effect.firstOrNull().let { + assertNotNull(it) assertIs(it) } } @@ -201,6 +203,7 @@ internal class CurrenciesViewModelTest { ) viewModel.effect.firstOrNull().let { + assertNotNull(it) assertIs(it) } } @@ -232,6 +235,7 @@ internal class CurrenciesViewModelTest { .returns("") viewModel.effect.firstOrNull().let { + assertNotNull(it) assertIs(it) assertEquals(firstActiveBase, it.newBase) } @@ -256,6 +260,7 @@ internal class CurrenciesViewModelTest { .returns(currency1.code) // not active one viewModel.effect.firstOrNull().let { + assertNotNull(it) assertIs(it) assertEquals(currency2.code, it.newBase) } @@ -372,6 +377,7 @@ internal class CurrenciesViewModelTest { viewModel.effect.onSubscription { viewModel.onCloseClick() }.firstOrNull().let { + assertNotNull(it) assertIs(it) assertEquals("", viewModel.data.query) } @@ -401,6 +407,7 @@ internal class CurrenciesViewModelTest { viewModel.effect.onSubscription { viewModel.onDoneClick() }.firstOrNull().let { + assertNotNull(it) assertIs(it) assertTrue { viewModel.data.query.isEmpty() } assertTrue { viewModel.state.value.isOnboardingVisible } diff --git a/client/viewmodel/main/src/commonTest/kotlin/com/oztechan/ccc/client/viewmodel/main/MainViewModelTest.kt b/client/viewmodel/main/src/commonTest/kotlin/com/oztechan/ccc/client/viewmodel/main/MainViewModelTest.kt index 43c221b000..e544ee2dbc 100644 --- a/client/viewmodel/main/src/commonTest/kotlin/com/oztechan/ccc/client/viewmodel/main/MainViewModelTest.kt +++ b/client/viewmodel/main/src/commonTest/kotlin/com/oztechan/ccc/client/viewmodel/main/MainViewModelTest.kt @@ -293,6 +293,7 @@ internal class MainViewModelTest { viewModel.effect.onSubscription { viewModel.onResume() }.firstOrNull().let { + assertNotNull(it) assertIs(it) assertEquals(mockBoolean, it.isCancelable) assertTrue { viewModel.data.isAppUpdateShown } @@ -326,6 +327,7 @@ internal class MainViewModelTest { viewModel.effect.onSubscription { viewModel.onResume() }.firstOrNull().let { + assertNotNull(it) assertIs(it) } diff --git a/client/viewmodel/premium/src/commonTest/kotlin/com/oztechan/ccc/client/viewmodel/premium/PremiumViewModelTest.kt b/client/viewmodel/premium/src/commonTest/kotlin/com/oztechan/ccc/client/viewmodel/premium/PremiumViewModelTest.kt index a923d4210d..d82d3ba5d9 100644 --- a/client/viewmodel/premium/src/commonTest/kotlin/com/oztechan/ccc/client/viewmodel/premium/PremiumViewModelTest.kt +++ b/client/viewmodel/premium/src/commonTest/kotlin/com/oztechan/ccc/client/viewmodel/premium/PremiumViewModelTest.kt @@ -83,6 +83,7 @@ internal class PremiumViewModelTest { viewModel.effect.onSubscription { viewModel.event.onPremiumActivated(premiumType, now) }.firstOrNull().let { + assertNotNull(it) assertIs(it) assertEquals(premiumType, it.premiumType) assertFalse { it.isRestorePurchase } @@ -107,6 +108,7 @@ internal class PremiumViewModelTest { ) ) }.firstOrNull().let { + assertNotNull(it) assertIs(it) assertTrue { it.isRestorePurchase } assertFalse { viewModel.state.value.loading } @@ -178,6 +180,7 @@ internal class PremiumViewModelTest { viewModel.effect.onSubscription { viewModel.event.onPremiumItemClick(PremiumType.VIDEO) }.firstOrNull().let { + assertNotNull(it) assertIs(it) assertEquals(PremiumType.VIDEO, it.premiumType) assertFalse { viewModel.state.value.loading } @@ -186,6 +189,7 @@ internal class PremiumViewModelTest { viewModel.effect.onSubscription { viewModel.event.onPremiumItemClick(PremiumType.MONTH) }.firstOrNull().let { + assertNotNull(it) assertIs(it) assertEquals(PremiumType.MONTH, it.premiumType) assertTrue { viewModel.state.value.loading } @@ -194,6 +198,7 @@ internal class PremiumViewModelTest { viewModel.effect.onSubscription { viewModel.event.onPremiumItemClick(PremiumType.QUARTER) }.firstOrNull().let { + assertNotNull(it) assertIs(it) assertEquals(PremiumType.QUARTER, it.premiumType) assertTrue { viewModel.state.value.loading } @@ -202,6 +207,7 @@ internal class PremiumViewModelTest { viewModel.effect.onSubscription { viewModel.event.onPremiumItemClick(PremiumType.HALF_YEAR) }.firstOrNull().let { + assertNotNull(it) assertIs(it) assertEquals(PremiumType.HALF_YEAR, it.premiumType) assertTrue { viewModel.state.value.loading } @@ -210,6 +216,7 @@ internal class PremiumViewModelTest { viewModel.effect.onSubscription { viewModel.event.onPremiumItemClick(PremiumType.YEAR) }.firstOrNull().let { + assertNotNull(it) assertIs(it) assertEquals(PremiumType.YEAR, it.premiumType) assertTrue { viewModel.state.value.loading } diff --git a/client/viewmodel/selectcurrency/src/commonTest/kotlin/com/oztechan/ccc/client/viewmodel/selectcurrency/SelectCurrencyViewModelTest.kt b/client/viewmodel/selectcurrency/src/commonTest/kotlin/com/oztechan/ccc/client/viewmodel/selectcurrency/SelectCurrencyViewModelTest.kt index 02a0ad090a..532f1946c7 100644 --- a/client/viewmodel/selectcurrency/src/commonTest/kotlin/com/oztechan/ccc/client/viewmodel/selectcurrency/SelectCurrencyViewModelTest.kt +++ b/client/viewmodel/selectcurrency/src/commonTest/kotlin/com/oztechan/ccc/client/viewmodel/selectcurrency/SelectCurrencyViewModelTest.kt @@ -109,6 +109,7 @@ internal class SelectCurrencyViewModelTest { viewModel.effect.onSubscription { viewModel.event.onSelectClick() }.firstOrNull().let { + assertNotNull(it) assertIs(it) } } diff --git a/client/viewmodel/settings/src/commonTest/kotlin/com/oztechan/ccc/client/viewmodel/settings/SettingsViewModelTest.kt b/client/viewmodel/settings/src/commonTest/kotlin/com/oztechan/ccc/client/viewmodel/settings/SettingsViewModelTest.kt index 8f255e7c45..228d6d7a9b 100644 --- a/client/viewmodel/settings/src/commonTest/kotlin/com/oztechan/ccc/client/viewmodel/settings/SettingsViewModelTest.kt +++ b/client/viewmodel/settings/src/commonTest/kotlin/com/oztechan/ccc/client/viewmodel/settings/SettingsViewModelTest.kt @@ -202,6 +202,7 @@ internal class SettingsViewModelTest { viewModel.effect.onSubscription { viewModel.event.onSyncClick() }.firstOrNull().let { + assertNotNull(it) assertIs(it) } @@ -223,6 +224,7 @@ internal class SettingsViewModelTest { viewModel.effect.onSubscription { viewModel.event.onSyncClick() }.firstOrNull().let { + assertNotNull(it) assertIs(it) } @@ -235,6 +237,7 @@ internal class SettingsViewModelTest { viewModel.effect.onSubscription { viewModel.event.onBackClick() }.firstOrNull().let { + assertNotNull(it) assertIs(it) } } @@ -244,6 +247,7 @@ internal class SettingsViewModelTest { viewModel.effect.onSubscription { viewModel.event.onCurrenciesClick() }.firstOrNull().let { + assertNotNull(it) assertIs(it) } } @@ -253,6 +257,7 @@ internal class SettingsViewModelTest { viewModel.effect.onSubscription { viewModel.event.onWatchersClick() }.firstOrNull().let { + assertNotNull(it) assertEquals(SettingsEffect.OpenWatchers, it) } } @@ -262,6 +267,7 @@ internal class SettingsViewModelTest { viewModel.effect.onSubscription { viewModel.event.onFeedBackClick() }.firstOrNull().let { + assertNotNull(it) assertIs(it) } } @@ -276,6 +282,7 @@ internal class SettingsViewModelTest { viewModel.effect.onSubscription { viewModel.event.onShareClick() }.firstOrNull().let { + assertNotNull(it) assertIs(it) assertEquals(link, it.marketLink) } @@ -291,6 +298,7 @@ internal class SettingsViewModelTest { viewModel.effect.onSubscription { viewModel.event.onSupportUsClick() }.firstOrNull().let { + assertNotNull(it) assertIs(it) assertEquals(link, it.marketLink) } @@ -301,6 +309,7 @@ internal class SettingsViewModelTest { viewModel.effect.onSubscription { viewModel.event.onOnGitHubClick() }.firstOrNull().let { + assertNotNull(it) assertIs(it) } } @@ -310,6 +319,7 @@ internal class SettingsViewModelTest { viewModel.effect.onSubscription { viewModel.event.onPrivacySettingsClick() }.firstOrNull().let { + assertNotNull(it) assertIs(it) } } @@ -319,6 +329,7 @@ internal class SettingsViewModelTest { viewModel.effect.onSubscription { viewModel.event.onPremiumClick() }.firstOrNull().let { + assertNotNull(it) assertIs(it) } @@ -330,6 +341,7 @@ internal class SettingsViewModelTest { viewModel.effect.onSubscription { viewModel.event.onPremiumClick() }.firstOrNull().let { + assertNotNull(it) assertIs(it) } @@ -341,6 +353,7 @@ internal class SettingsViewModelTest { viewModel.effect.onSubscription { viewModel.event.onThemeClick() }.firstOrNull().let { + assertNotNull(it) assertIs(it) } } @@ -353,12 +366,14 @@ internal class SettingsViewModelTest { viewModel.effect.onSubscription { viewModel.event.onSyncClick() }.firstOrNull().let { + assertNotNull(it) assertIs(it) } viewModel.effect.onSubscription { viewModel.event.onSyncClick() }.firstOrNull().let { + assertNotNull(it) assertTrue { viewModel.data.synced } assertIs(it) } @@ -371,6 +386,7 @@ internal class SettingsViewModelTest { viewModel.effect.onSubscription { viewModel.event.onPrecisionClick() }.firstOrNull().let { + assertNotNull(it) assertIs(it) } } @@ -398,6 +414,7 @@ internal class SettingsViewModelTest { viewModel.effect.onSubscription { viewModel.onThemeChange(mockTheme) }.firstOrNull().let { + assertNotNull(it) assertEquals(mockTheme, viewModel.state.value.appThemeType) assertIs(it) assertEquals(mockTheme.themeValue, it.themeValue) From a929cd43c69c70e28f8ed61b802015b4b818083f Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sun, 4 Aug 2024 18:48:22 +0200 Subject: [PATCH 59/89] [Oztechan/CCC#1457] Update dependency com.android.billingclient:billing to v7 (#3437) * [Oztechan/CCC#1457] Update dependency com.android.billingclient:billing to v7 Co-authored-by: Mustafa Ozhan * [Oztechan/CCC#1457] Update dependency com.android.billingclient:billing to v7 --------- Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: Mustafa Ozhan --- .../core/billing/BillingManagerImpl.kt | 36 ++++++++++--------- .../mapper/PurchaseHistoryRecordMapper.kt | 9 ----- .../core/billing/mapper/PurchaseMapper.kt | 9 +++++ .../ccc/android/core/billing/BillingEffect.kt | 4 +-- .../android/core/billing/model/Purchase.kt | 6 ++++ .../billing/model/PurchaseHistoryRecord.kt | 6 ---- .../content/premium/PremiumBottomSheet.kt | 2 +- .../android/ui/mobile/util/PurchaseUtil.kt | 10 +++--- .../ui/mobile/util/PurchaseUtilTest.kt | 16 ++++----- gradle/libs.versions.toml | 2 +- 10 files changed, 51 insertions(+), 49 deletions(-) delete mode 100644 android/core/billing/src/google/kotlin/com/oztechan/ccc/android/core/billing/mapper/PurchaseHistoryRecordMapper.kt create mode 100644 android/core/billing/src/google/kotlin/com/oztechan/ccc/android/core/billing/mapper/PurchaseMapper.kt create mode 100644 android/core/billing/src/main/kotlin/com/oztechan/ccc/android/core/billing/model/Purchase.kt delete mode 100644 android/core/billing/src/main/kotlin/com/oztechan/ccc/android/core/billing/model/PurchaseHistoryRecord.kt diff --git a/android/core/billing/src/google/kotlin/com/oztechan/ccc/android/core/billing/BillingManagerImpl.kt b/android/core/billing/src/google/kotlin/com/oztechan/ccc/android/core/billing/BillingManagerImpl.kt index 9728a5294c..4c430fd478 100644 --- a/android/core/billing/src/google/kotlin/com/oztechan/ccc/android/core/billing/BillingManagerImpl.kt +++ b/android/core/billing/src/google/kotlin/com/oztechan/ccc/android/core/billing/BillingManagerImpl.kt @@ -10,17 +10,17 @@ import com.android.billingclient.api.BillingClient import com.android.billingclient.api.BillingClientStateListener import com.android.billingclient.api.BillingFlowParams import com.android.billingclient.api.BillingResult +import com.android.billingclient.api.PendingPurchasesParams import com.android.billingclient.api.ProductDetails import com.android.billingclient.api.ProductDetailsResponseListener import com.android.billingclient.api.Purchase -import com.android.billingclient.api.PurchaseHistoryRecord -import com.android.billingclient.api.PurchaseHistoryResponseListener +import com.android.billingclient.api.PurchasesResponseListener import com.android.billingclient.api.PurchasesUpdatedListener import com.android.billingclient.api.QueryProductDetailsParams -import com.android.billingclient.api.QueryPurchaseHistoryParams +import com.android.billingclient.api.QueryPurchasesParams import com.github.submob.scopemob.whether import com.oztechan.ccc.android.core.billing.mapper.toProductDetailsModel -import com.oztechan.ccc.android.core.billing.mapper.toPurchaseHistoryRecordModel +import com.oztechan.ccc.android.core.billing.mapper.toPurchaseModel import com.oztechan.ccc.android.core.billing.util.launchWithLifeCycle import kotlinx.coroutines.flow.MutableSharedFlow import kotlinx.coroutines.flow.asSharedFlow @@ -32,7 +32,7 @@ internal class BillingManagerImpl(private val context: Context) : AcknowledgePurchaseResponseListener, PurchasesUpdatedListener, BillingClientStateListener, - PurchaseHistoryResponseListener, + PurchasesResponseListener, ProductDetailsResponseListener { private lateinit var billingClient: BillingClient @@ -62,7 +62,10 @@ internal class BillingManagerImpl(private val context: Context) : billingClient = BillingClient .newBuilder(context.applicationContext) .setListener(this) - .enablePendingPurchases() + .enablePendingPurchases( + PendingPurchasesParams.newBuilder().enableOneTimeProducts().enablePrepaidPlans() + .build() + ) .build() billingClient.startConnection(this) @@ -142,11 +145,11 @@ internal class BillingManagerImpl(private val context: Context) : override fun onBillingSetupFinished(billingResult: BillingResult) { Logger.v { "BillingManagerImpl onBillingSetupFinished ${billingResult.responseCode}" } - val queryPurchaseHistoryParams = QueryPurchaseHistoryParams.newBuilder() + val queryPurchasesParams = QueryPurchasesParams.newBuilder() .setProductType(BillingClient.ProductType.INAPP) .build() - billingClient.queryPurchaseHistoryAsync(queryPurchaseHistoryParams, this) + billingClient.queryPurchasesAsync(queryPurchasesParams, this) billingClient.whether( { it.isReady }, @@ -190,18 +193,17 @@ internal class BillingManagerImpl(private val context: Context) : } } - override fun onPurchaseHistoryResponse( + override fun onQueryPurchasesResponse( billingResult: BillingResult, - purchaseHistoryList: MutableList? + purchasesResponse: MutableList ) { - Logger.v { "BillingManagerImpl onPurchaseHistoryResponse ${billingResult.responseCode}" } - - purchaseHistoryList - ?.map { it.toPurchaseHistoryRecordModel() } - ?.let { - lifecycleOwner.launchWithLifeCycle { + Logger.v { "BillingManagerImpl onQueryPurchasesResponse ${billingResult.responseCode}" } + lifecycleOwner.launchWithLifeCycle { + purchasesResponse + .map { it.toPurchaseModel() } + .let { _effect.emit(BillingEffect.RestorePurchase(it)) } - } + } } } diff --git a/android/core/billing/src/google/kotlin/com/oztechan/ccc/android/core/billing/mapper/PurchaseHistoryRecordMapper.kt b/android/core/billing/src/google/kotlin/com/oztechan/ccc/android/core/billing/mapper/PurchaseHistoryRecordMapper.kt deleted file mode 100644 index 643e921c23..0000000000 --- a/android/core/billing/src/google/kotlin/com/oztechan/ccc/android/core/billing/mapper/PurchaseHistoryRecordMapper.kt +++ /dev/null @@ -1,9 +0,0 @@ -package com.oztechan.ccc.android.core.billing.mapper - -import com.android.billingclient.api.PurchaseHistoryRecord as PurchaseHistoryRecordIAPModel -import com.oztechan.ccc.android.core.billing.model.PurchaseHistoryRecord as toPurchaseHistoryRecordModel - -internal fun PurchaseHistoryRecordIAPModel.toPurchaseHistoryRecordModel() = toPurchaseHistoryRecordModel( - products, - purchaseTime -) diff --git a/android/core/billing/src/google/kotlin/com/oztechan/ccc/android/core/billing/mapper/PurchaseMapper.kt b/android/core/billing/src/google/kotlin/com/oztechan/ccc/android/core/billing/mapper/PurchaseMapper.kt new file mode 100644 index 0000000000..1c02e72c0b --- /dev/null +++ b/android/core/billing/src/google/kotlin/com/oztechan/ccc/android/core/billing/mapper/PurchaseMapper.kt @@ -0,0 +1,9 @@ +package com.oztechan.ccc.android.core.billing.mapper + +import com.android.billingclient.api.Purchase +import com.oztechan.ccc.android.core.billing.model.Purchase as PurchaseModel + +internal fun Purchase.toPurchaseModel() = PurchaseModel( + products, + purchaseTime +) diff --git a/android/core/billing/src/main/kotlin/com/oztechan/ccc/android/core/billing/BillingEffect.kt b/android/core/billing/src/main/kotlin/com/oztechan/ccc/android/core/billing/BillingEffect.kt index 47501c1b4f..ee82fc0a65 100644 --- a/android/core/billing/src/main/kotlin/com/oztechan/ccc/android/core/billing/BillingEffect.kt +++ b/android/core/billing/src/main/kotlin/com/oztechan/ccc/android/core/billing/BillingEffect.kt @@ -1,14 +1,14 @@ package com.oztechan.ccc.android.core.billing import com.oztechan.ccc.android.core.billing.model.ProductDetails -import com.oztechan.ccc.android.core.billing.model.PurchaseHistoryRecord +import com.oztechan.ccc.android.core.billing.model.Purchase sealed class BillingEffect { data object SuccessfulPurchase : BillingEffect() data object BillingUnavailable : BillingEffect() data class RestorePurchase( - val purchaseHistoryRecordRecordList: List + val purchaseList: List ) : BillingEffect() data class AddPurchaseMethods( diff --git a/android/core/billing/src/main/kotlin/com/oztechan/ccc/android/core/billing/model/Purchase.kt b/android/core/billing/src/main/kotlin/com/oztechan/ccc/android/core/billing/model/Purchase.kt new file mode 100644 index 0000000000..acab2a3df3 --- /dev/null +++ b/android/core/billing/src/main/kotlin/com/oztechan/ccc/android/core/billing/model/Purchase.kt @@ -0,0 +1,6 @@ +package com.oztechan.ccc.android.core.billing.model + +data class Purchase( + var products: List, + var purchaseTime: Long +) diff --git a/android/core/billing/src/main/kotlin/com/oztechan/ccc/android/core/billing/model/PurchaseHistoryRecord.kt b/android/core/billing/src/main/kotlin/com/oztechan/ccc/android/core/billing/model/PurchaseHistoryRecord.kt deleted file mode 100644 index ad8334e562..0000000000 --- a/android/core/billing/src/main/kotlin/com/oztechan/ccc/android/core/billing/model/PurchaseHistoryRecord.kt +++ /dev/null @@ -1,6 +0,0 @@ -package com.oztechan.ccc.android.core.billing.model - -data class PurchaseHistoryRecord( - var ids: List, - var date: Long -) diff --git a/android/ui/mobile/src/main/kotlin/com/oztechan/ccc/android/ui/mobile/content/premium/PremiumBottomSheet.kt b/android/ui/mobile/src/main/kotlin/com/oztechan/ccc/android/ui/mobile/content/premium/PremiumBottomSheet.kt index 7d9a6c7674..abecec2aa6 100644 --- a/android/ui/mobile/src/main/kotlin/com/oztechan/ccc/android/ui/mobile/content/premium/PremiumBottomSheet.kt +++ b/android/ui/mobile/src/main/kotlin/com/oztechan/ccc/android/ui/mobile/content/premium/PremiumBottomSheet.kt @@ -122,7 +122,7 @@ class PremiumBottomSheet : BaseVBBottomSheetDialogFragment restartActivity() is BillingEffect.RestorePurchase -> viewModel.event.onRestorePurchase( - viewEffect.purchaseHistoryRecordRecordList.toOldPurchaseList() + viewEffect.purchaseList.toOldPurchaseList() ) is BillingEffect.AddPurchaseMethods -> viewModel.event.onAddPurchaseMethods( diff --git a/android/ui/mobile/src/main/kotlin/com/oztechan/ccc/android/ui/mobile/util/PurchaseUtil.kt b/android/ui/mobile/src/main/kotlin/com/oztechan/ccc/android/ui/mobile/util/PurchaseUtil.kt index b5c81b8dff..d4690d21f7 100644 --- a/android/ui/mobile/src/main/kotlin/com/oztechan/ccc/android/ui/mobile/util/PurchaseUtil.kt +++ b/android/ui/mobile/src/main/kotlin/com/oztechan/ccc/android/ui/mobile/util/PurchaseUtil.kt @@ -1,7 +1,7 @@ package com.oztechan.ccc.android.ui.mobile.util import com.oztechan.ccc.android.core.billing.model.ProductDetails -import com.oztechan.ccc.android.core.billing.model.PurchaseHistoryRecord +import com.oztechan.ccc.android.core.billing.model.Purchase import com.oztechan.ccc.client.viewmodel.premium.model.OldPurchase import com.oztechan.ccc.client.viewmodel.premium.model.PremiumData import com.oztechan.ccc.client.viewmodel.premium.model.PremiumType @@ -10,9 +10,9 @@ internal fun List.toPremiumDataList(): List = map { PremiumData(it.price, it.description, it.id) } -internal fun List.toOldPurchaseList(): List = - mapNotNull { purchaseHistoryRecord -> - PremiumType.getById(purchaseHistoryRecord.ids.firstOrNull())?.let { - OldPurchase(purchaseHistoryRecord.date, it) +internal fun List.toOldPurchaseList(): List = + mapNotNull { purchase -> + PremiumType.getById(purchase.products.firstOrNull())?.let { + OldPurchase(purchase.purchaseTime, it) } } diff --git a/android/ui/mobile/src/test/kotlin/com/oztechan/ccc/android/ui/mobile/util/PurchaseUtilTest.kt b/android/ui/mobile/src/test/kotlin/com/oztechan/ccc/android/ui/mobile/util/PurchaseUtilTest.kt index 4726006ef4..0de9dffb97 100644 --- a/android/ui/mobile/src/test/kotlin/com/oztechan/ccc/android/ui/mobile/util/PurchaseUtilTest.kt +++ b/android/ui/mobile/src/test/kotlin/com/oztechan/ccc/android/ui/mobile/util/PurchaseUtilTest.kt @@ -1,7 +1,7 @@ package com.oztechan.ccc.android.ui.mobile.util import com.oztechan.ccc.android.core.billing.model.ProductDetails -import com.oztechan.ccc.android.core.billing.model.PurchaseHistoryRecord +import com.oztechan.ccc.android.core.billing.model.Purchase import com.oztechan.ccc.client.viewmodel.premium.model.PremiumType import kotlin.test.Test import kotlin.test.assertEquals @@ -24,16 +24,16 @@ internal class PurchaseUtilTest { @Test fun `toOldPurchaseList maps correctly`() { - val purchaseHistoryRecordLists = listOf( - PurchaseHistoryRecord(listOf("1", "2"), 123L), - PurchaseHistoryRecord(listOf("9", "8"), 987L) + val purchaseLists = listOf( + Purchase(listOf("1", "2"), 123L), + Purchase(listOf("9", "8"), 987L) ) - val oldPurchaseList = purchaseHistoryRecordLists.toOldPurchaseList() + val oldPurchaseList = purchaseLists.toOldPurchaseList() - purchaseHistoryRecordLists.zip(oldPurchaseList) { first, second -> - assertEquals(first.date, second.date) - val type = PremiumType.getById(first.ids.firstOrNull()) + purchaseLists.zip(oldPurchaseList) { first, second -> + assertEquals(first.purchaseTime, second.date) + val type = PremiumType.getById(first.products.firstOrNull()) assertEquals(type, second.type) } } diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index a6b83fbc23..67a4c1d429 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -31,7 +31,7 @@ navigation = "2.7.7" playCoreReview = "2.0.1" kotlinXDateTime = "0.6.0" coroutines = "1.8.1" -billing = "6.2.1" +billing = "7.0.0" leakCanary = "2.14" sqlDelight = "1.5.5" lifecycle = "2.8.4" From 53fe267312502ae412aa922e289c0875376538fa Mon Sep 17 00:00:00 2001 From: Mustafa Ozhan Date: Mon, 5 Aug 2024 17:15:20 +0200 Subject: [PATCH 60/89] [Oztechan/CCC#3747] Remove offer token for one time purchases (#3748) * [Oztechan/CCC#3747] Remove offer token for one time purchases * [Oztechan/CCC#3747] Remove offer token for one time purchases --- .../oztechan/ccc/android/core/billing/BillingManagerImpl.kt | 4 ---- 1 file changed, 4 deletions(-) diff --git a/android/core/billing/src/google/kotlin/com/oztechan/ccc/android/core/billing/BillingManagerImpl.kt b/android/core/billing/src/google/kotlin/com/oztechan/ccc/android/core/billing/BillingManagerImpl.kt index 4c430fd478..107877e382 100644 --- a/android/core/billing/src/google/kotlin/com/oztechan/ccc/android/core/billing/BillingManagerImpl.kt +++ b/android/core/billing/src/google/kotlin/com/oztechan/ccc/android/core/billing/BillingManagerImpl.kt @@ -81,13 +81,9 @@ internal class BillingManagerImpl(private val context: Context) : productDetailList .firstOrNull { it.productId == skuId } ?.let { - val offerToken = - it.subscriptionOfferDetails?.get(productDetailList.indexOf(it))?.offerToken.orEmpty() - val productDetailsParamsList = listOf( BillingFlowParams.ProductDetailsParams.newBuilder() .setProductDetails(it) - .setOfferToken(offerToken) .build() ) val billingFlowParams = From 6cb053272f7c291eaea3a11ce896efb95623de67 Mon Sep 17 00:00:00 2001 From: Mustafa Ozhan Date: Mon, 5 Aug 2024 21:19:19 +0200 Subject: [PATCH 61/89] [Oztechan/CCC#3751] Add purchaseToken into custom Purchase Model (#3752) --- .../ccc/android/core/billing/mapper/PurchaseMapper.kt | 3 ++- .../oztechan/ccc/android/core/billing/model/Purchase.kt | 3 ++- .../oztechan/ccc/android/ui/mobile/util/PurchaseUtil.kt | 2 +- .../ccc/android/ui/mobile/util/PurchaseUtilTest.kt | 5 +++-- .../ccc/client/viewmodel/premium/model/OldPurchase.kt | 3 ++- .../ccc/client/viewmodel/premium/PremiumViewModelTest.kt | 9 +++++---- 6 files changed, 15 insertions(+), 10 deletions(-) diff --git a/android/core/billing/src/google/kotlin/com/oztechan/ccc/android/core/billing/mapper/PurchaseMapper.kt b/android/core/billing/src/google/kotlin/com/oztechan/ccc/android/core/billing/mapper/PurchaseMapper.kt index 1c02e72c0b..5775401a17 100644 --- a/android/core/billing/src/google/kotlin/com/oztechan/ccc/android/core/billing/mapper/PurchaseMapper.kt +++ b/android/core/billing/src/google/kotlin/com/oztechan/ccc/android/core/billing/mapper/PurchaseMapper.kt @@ -5,5 +5,6 @@ import com.oztechan.ccc.android.core.billing.model.Purchase as PurchaseModel internal fun Purchase.toPurchaseModel() = PurchaseModel( products, - purchaseTime + purchaseTime, + purchaseToken ) diff --git a/android/core/billing/src/main/kotlin/com/oztechan/ccc/android/core/billing/model/Purchase.kt b/android/core/billing/src/main/kotlin/com/oztechan/ccc/android/core/billing/model/Purchase.kt index acab2a3df3..f45e0026b5 100644 --- a/android/core/billing/src/main/kotlin/com/oztechan/ccc/android/core/billing/model/Purchase.kt +++ b/android/core/billing/src/main/kotlin/com/oztechan/ccc/android/core/billing/model/Purchase.kt @@ -2,5 +2,6 @@ package com.oztechan.ccc.android.core.billing.model data class Purchase( var products: List, - var purchaseTime: Long + var purchaseTime: Long, + var purchaseToken: String ) diff --git a/android/ui/mobile/src/main/kotlin/com/oztechan/ccc/android/ui/mobile/util/PurchaseUtil.kt b/android/ui/mobile/src/main/kotlin/com/oztechan/ccc/android/ui/mobile/util/PurchaseUtil.kt index d4690d21f7..3362f30ba9 100644 --- a/android/ui/mobile/src/main/kotlin/com/oztechan/ccc/android/ui/mobile/util/PurchaseUtil.kt +++ b/android/ui/mobile/src/main/kotlin/com/oztechan/ccc/android/ui/mobile/util/PurchaseUtil.kt @@ -13,6 +13,6 @@ internal fun List.toPremiumDataList(): List = map { internal fun List.toOldPurchaseList(): List = mapNotNull { purchase -> PremiumType.getById(purchase.products.firstOrNull())?.let { - OldPurchase(purchase.purchaseTime, it) + OldPurchase(purchase.purchaseTime, it, purchase.purchaseToken) } } diff --git a/android/ui/mobile/src/test/kotlin/com/oztechan/ccc/android/ui/mobile/util/PurchaseUtilTest.kt b/android/ui/mobile/src/test/kotlin/com/oztechan/ccc/android/ui/mobile/util/PurchaseUtilTest.kt index 0de9dffb97..82be65cb91 100644 --- a/android/ui/mobile/src/test/kotlin/com/oztechan/ccc/android/ui/mobile/util/PurchaseUtilTest.kt +++ b/android/ui/mobile/src/test/kotlin/com/oztechan/ccc/android/ui/mobile/util/PurchaseUtilTest.kt @@ -25,8 +25,8 @@ internal class PurchaseUtilTest { @Test fun `toOldPurchaseList maps correctly`() { val purchaseLists = listOf( - Purchase(listOf("1", "2"), 123L), - Purchase(listOf("9", "8"), 987L) + Purchase(listOf("1", "2"), 123L, "token1"), + Purchase(listOf("9", "8"), 987L, "token2") ) val oldPurchaseList = purchaseLists.toOldPurchaseList() @@ -35,6 +35,7 @@ internal class PurchaseUtilTest { assertEquals(first.purchaseTime, second.date) val type = PremiumType.getById(first.products.firstOrNull()) assertEquals(type, second.type) + assertEquals(first.purchaseToken, second.purchaseToken) } } } diff --git a/client/viewmodel/premium/src/commonMain/kotlin/com/oztechan/ccc/client/viewmodel/premium/model/OldPurchase.kt b/client/viewmodel/premium/src/commonMain/kotlin/com/oztechan/ccc/client/viewmodel/premium/model/OldPurchase.kt index 4faaf34958..5ac0a5b866 100644 --- a/client/viewmodel/premium/src/commonMain/kotlin/com/oztechan/ccc/client/viewmodel/premium/model/OldPurchase.kt +++ b/client/viewmodel/premium/src/commonMain/kotlin/com/oztechan/ccc/client/viewmodel/premium/model/OldPurchase.kt @@ -2,5 +2,6 @@ package com.oztechan.ccc.client.viewmodel.premium.model data class OldPurchase( val date: Long, - val type: PremiumType + val type: PremiumType, + val purchaseToken: String ) diff --git a/client/viewmodel/premium/src/commonTest/kotlin/com/oztechan/ccc/client/viewmodel/premium/PremiumViewModelTest.kt b/client/viewmodel/premium/src/commonTest/kotlin/com/oztechan/ccc/client/viewmodel/premium/PremiumViewModelTest.kt index d82d3ba5d9..294cae135f 100644 --- a/client/viewmodel/premium/src/commonTest/kotlin/com/oztechan/ccc/client/viewmodel/premium/PremiumViewModelTest.kt +++ b/client/viewmodel/premium/src/commonTest/kotlin/com/oztechan/ccc/client/viewmodel/premium/PremiumViewModelTest.kt @@ -103,8 +103,8 @@ internal class PremiumViewModelTest { viewModel.effect.onSubscription { viewModel.event.onRestorePurchase( listOf( - OldPurchase(now, PremiumType.MONTH), - OldPurchase(now, PremiumType.YEAR) + OldPurchase(now, PremiumType.MONTH, ""), + OldPurchase(now, PremiumType.YEAR, "") ) ) }.firstOrNull().let { @@ -117,7 +117,7 @@ internal class PremiumViewModelTest { } // onRestorePurchase shouldn't do anything if all the old purchases out of dated - var oldPurchase = OldPurchase(nowAsLong(), PremiumType.MONTH) + var oldPurchase = OldPurchase(nowAsLong(), PremiumType.MONTH, "") every { appStorage.premiumEndDate } .returns(nowAsLong() + 1.seconds.inWholeMilliseconds) @@ -129,7 +129,8 @@ internal class PremiumViewModelTest { } // onRestorePurchase shouldn't do anything if the old purchase is already expired - oldPurchase = OldPurchase(nowAsLong() - (32.days.inWholeMilliseconds), PremiumType.MONTH) + oldPurchase = + OldPurchase(nowAsLong() - (32.days.inWholeMilliseconds), PremiumType.MONTH, "") every { appStorage.premiumEndDate } .returns(0) From ef05654c0bb800f21b5f90b8a9cf486a3f0c92ea Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 6 Aug 2024 20:41:30 +0200 Subject: [PATCH 62/89] [Oztechan/CCC#1457] Lock file maintenance (#3750) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: Mustafa Ozhan --- ios/Gemfile.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/ios/Gemfile.lock b/ios/Gemfile.lock index 878bf57d83..63b8f490d3 100644 --- a/ios/Gemfile.lock +++ b/ios/Gemfile.lock @@ -10,7 +10,7 @@ GEM artifactory (3.0.17) atomos (0.1.3) aws-eventstream (1.3.0) - aws-partitions (1.958.0) + aws-partitions (1.961.0) aws-sdk-core (3.201.3) aws-eventstream (~> 1, >= 1.3.0) aws-partitions (~> 1, >= 1.651.0) @@ -19,11 +19,11 @@ GEM aws-sdk-kms (1.88.0) aws-sdk-core (~> 3, >= 3.201.0) aws-sigv4 (~> 1.5) - aws-sdk-s3 (1.156.0) + aws-sdk-s3 (1.157.0) aws-sdk-core (~> 3, >= 3.201.0) aws-sdk-kms (~> 1) aws-sigv4 (~> 1.5) - aws-sigv4 (1.9.0) + aws-sigv4 (1.9.1) aws-eventstream (~> 1, >= 1.0.2) babosa (1.0.4) base64 (0.2.0) From 89b86224d1643448b7da6a904f4cd91b78e844bb Mon Sep 17 00:00:00 2001 From: Mustafa Ozhan Date: Tue, 6 Aug 2024 21:13:14 +0200 Subject: [PATCH 63/89] [Oztechan/CCC#3757] Update rexml version (#3758) --- ios/Gemfile.lock | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/ios/Gemfile.lock b/ios/Gemfile.lock index 63b8f490d3..0e85c1d94f 100644 --- a/ios/Gemfile.lock +++ b/ios/Gemfile.lock @@ -178,7 +178,7 @@ GEM trailblazer-option (>= 0.1.1, < 0.2.0) uber (< 0.2.0) retriable (3.1.2) - rexml (3.2.9) + rexml (3.3.3) strscan rouge (2.0.7) ruby2_keywords (0.0.5) @@ -204,13 +204,12 @@ GEM uber (0.1.0) unicode-display_width (2.5.0) word_wrap (1.0.0) - xcodeproj (1.24.0) + xcodeproj (1.19.0) CFPropertyList (>= 2.3.3, < 4.0) atomos (~> 0.1.3) claide (>= 1.0.2, < 2.0) colored2 (~> 3.1) nanaimo (~> 0.3.0) - rexml (~> 3.2.4) xcpretty (0.3.0) rouge (~> 2.0.7) xcpretty-travis-formatter (1.0.1) From ab65dcf15c166a7ced2cea1e68196177a8fb62d3 Mon Sep 17 00:00:00 2001 From: Mustafa Ozhan Date: Wed, 7 Aug 2024 22:28:07 +0200 Subject: [PATCH 64/89] [Oztechan/CCC#3753] Add consume purchase methods to BillingManager (#3754) * [Oztechan/CCC#3753] Add consume purchase methods to BillingManager * [Oztechan/CCC#3753] Add consume purchase methods to BillingManager --- .../android/core/billing/BillingManagerImpl.kt | 15 ++++++++++++++- .../android/core/billing/BillingManagerImpl.kt | 4 ++++ .../ccc/android/core/billing/BillingManager.kt | 2 ++ 3 files changed, 20 insertions(+), 1 deletion(-) diff --git a/android/core/billing/src/google/kotlin/com/oztechan/ccc/android/core/billing/BillingManagerImpl.kt b/android/core/billing/src/google/kotlin/com/oztechan/ccc/android/core/billing/BillingManagerImpl.kt index 107877e382..f51e4bdba7 100644 --- a/android/core/billing/src/google/kotlin/com/oztechan/ccc/android/core/billing/BillingManagerImpl.kt +++ b/android/core/billing/src/google/kotlin/com/oztechan/ccc/android/core/billing/BillingManagerImpl.kt @@ -10,6 +10,8 @@ import com.android.billingclient.api.BillingClient import com.android.billingclient.api.BillingClientStateListener import com.android.billingclient.api.BillingFlowParams import com.android.billingclient.api.BillingResult +import com.android.billingclient.api.ConsumeParams +import com.android.billingclient.api.ConsumeResponseListener import com.android.billingclient.api.PendingPurchasesParams import com.android.billingclient.api.ProductDetails import com.android.billingclient.api.ProductDetailsResponseListener @@ -27,13 +29,15 @@ import kotlinx.coroutines.flow.asSharedFlow // Billing will not work on debug builds // .debug suffix needs to be removed in app-level build.gradle and google-services.json +@Suppress("TooManyFunctions") internal class BillingManagerImpl(private val context: Context) : BillingManager, AcknowledgePurchaseResponseListener, PurchasesUpdatedListener, BillingClientStateListener, PurchasesResponseListener, - ProductDetailsResponseListener { + ProductDetailsResponseListener, + ConsumeResponseListener { private lateinit var billingClient: BillingClient private lateinit var lifecycleOwner: LifecycleOwner @@ -102,6 +106,11 @@ internal class BillingManagerImpl(private val context: Context) : } } + override fun consumePurchase(token: String) { + Logger.v { "BillingManagerImpl consumePurchase" } + billingClient.consumeAsync(ConsumeParams.newBuilder().setPurchaseToken(token).build(), this) + } + override fun onAcknowledgePurchaseResponse(billingResult: BillingResult) { Logger.v { "BillingManagerImpl onAcknowledgePurchaseResponse ${billingResult.responseCode}" } if (billingResult.responseCode == BillingClient.BillingResponseCode.OK) { @@ -202,4 +211,8 @@ internal class BillingManagerImpl(private val context: Context) : } } } + + override fun onConsumeResponse(billingResult: BillingResult, token: String) { + Logger.v { "BillingManagerImpl onConsumeResponse ${billingResult.responseCode}, token:$token" } + } } diff --git a/android/core/billing/src/huawei/kotlin/com/oztechan/ccc/android/core/billing/BillingManagerImpl.kt b/android/core/billing/src/huawei/kotlin/com/oztechan/ccc/android/core/billing/BillingManagerImpl.kt index 669fa728ba..1282cc7582 100644 --- a/android/core/billing/src/huawei/kotlin/com/oztechan/ccc/android/core/billing/BillingManagerImpl.kt +++ b/android/core/billing/src/huawei/kotlin/com/oztechan/ccc/android/core/billing/BillingManagerImpl.kt @@ -31,4 +31,8 @@ internal class BillingManagerImpl(private val context: Context) : BillingManager override fun acknowledgePurchase() { Logger.v { "BillingManagerImpl acknowledgePurchase" } } + + override fun consumePurchase(token: String) { + Logger.v { "BillingManagerImpl consumePurchase" } + } } diff --git a/android/core/billing/src/main/kotlin/com/oztechan/ccc/android/core/billing/BillingManager.kt b/android/core/billing/src/main/kotlin/com/oztechan/ccc/android/core/billing/BillingManager.kt index 368dbee52a..b01b797dc1 100644 --- a/android/core/billing/src/main/kotlin/com/oztechan/ccc/android/core/billing/BillingManager.kt +++ b/android/core/billing/src/main/kotlin/com/oztechan/ccc/android/core/billing/BillingManager.kt @@ -17,4 +17,6 @@ interface BillingManager { fun launchBillingFlow(activity: Activity, skuId: String) fun acknowledgePurchase() + + fun consumePurchase(token: String) } From 7064827609172b482876bc6f247f25569a59533f Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:54:25 +0200 Subject: [PATCH 65/89] [Oztechan/CCC#1457] Update actions/upload-artifact action to v4.3.6 (#3755) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: Mustafa Ozhan --- .github/workflows/main.yml | 6 +++--- .github/workflows/release.yml | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 47e7267fef..9d6c46fb18 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -89,7 +89,7 @@ jobs: run: ./gradlew assemble${{ env.BUILD_TYPE }} - name: Upload Android ${{ env.BUILD_TYPE }} Artifacts - uses: actions/upload-artifact@v4.3.5 + uses: actions/upload-artifact@v4.3.6 if: github.event_name == 'push' || github.event_name == 'schedule' with: name: androidArtifacts @@ -173,14 +173,14 @@ jobs: run: fastlane build${{ env.BUILD_TYPE }} - name: Upload iOS Debug Artifacts - uses: actions/upload-artifact@v4.3.5 + uses: actions/upload-artifact@v4.3.6 if: github.event_name == 'push' with: name: iOSArtifacts path: ios/CCC_I.ipa - name: Upload iOS Artifacts - uses: actions/upload-artifact@v4.3.5 + uses: actions/upload-artifact@v4.3.6 if: github.event_name == 'schedule' with: name: iOSArtifacts diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 087082369e..95a617361d 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -80,19 +80,19 @@ jobs: run: ./gradlew :android:app:bundleRelease :backend:app:jar --parallel - name: Upload Google App Bundle - uses: actions/upload-artifact@v4.3.5 + uses: actions/upload-artifact@v4.3.6 with: name: googleBundle path: android/app/build/outputs/bundle/googleRelease/app-google-release.aab - name: Upload Huawei App Bundle - uses: actions/upload-artifact@v4.3.5 + uses: actions/upload-artifact@v4.3.6 with: name: huaweiBundle path: android/app/build/outputs/bundle/huaweiRelease/app-huawei-release.aab - name: Upload Backend Jar - uses: actions/upload-artifact@v4.3.5 + uses: actions/upload-artifact@v4.3.6 with: name: backendJar path: backend/app/build/libs/app-*.jar From 45f0679190b942d6a38450dbe63940574ce17f18 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 10 Aug 2024 21:02:41 +0200 Subject: [PATCH 66/89] [Oztechan/CCC#1457] Update Oztechan/Global digest to 007659c (#3760) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: Mustafa Ozhan --- .github/workflows/build.yml | 2 +- .github/workflows/main.yml | 10 +++++----- .github/workflows/project.yml | 2 +- .github/workflows/publish.yml | 2 +- .github/workflows/release.yml | 4 ++-- 5 files changed, 10 insertions(+), 10 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 362913e8c8..7fc2e2519f 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -61,7 +61,7 @@ jobs: steps: - name: Setup Gradle Repo - uses: Oztechan/Global/actions/setup-gradle-repo@54ed8a1c9b3ce3addaeca9f69ce06393c7949bba + uses: Oztechan/Global/actions/setup-gradle-repo@007659c3464bb29eeaaed0abfd2822af806dfe1e - name: Adding secret files uses: ./.github/actions/add-secret-files diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 9d6c46fb18..3836996911 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -70,7 +70,7 @@ jobs: steps: - name: Setup Gradle Repo - uses: Oztechan/Global/actions/setup-gradle-repo@54ed8a1c9b3ce3addaeca9f69ce06393c7949bba + uses: Oztechan/Global/actions/setup-gradle-repo@007659c3464bb29eeaaed0abfd2822af806dfe1e - name: Adding secret files uses: ./.github/actions/add-secret-files @@ -153,7 +153,7 @@ jobs: steps: - name: Setup Gradle Repo - uses: Oztechan/Global/actions/setup-gradle-repo@54ed8a1c9b3ce3addaeca9f69ce06393c7949bba + uses: Oztechan/Global/actions/setup-gradle-repo@007659c3464bb29eeaaed0abfd2822af806dfe1e - name: Adding secret files uses: ./.github/actions/add-secret-files @@ -235,7 +235,7 @@ jobs: steps: - name: Setup Gradle Repo - uses: Oztechan/Global/actions/setup-gradle-repo@54ed8a1c9b3ce3addaeca9f69ce06393c7949bba + uses: Oztechan/Global/actions/setup-gradle-repo@007659c3464bb29eeaaed0abfd2822af806dfe1e - name: Test run: ./gradlew test @@ -255,7 +255,7 @@ jobs: steps: - name: Setup Gradle Repo - uses: Oztechan/Global/actions/setup-gradle-repo@54ed8a1c9b3ce3addaeca9f69ce06393c7949bba + uses: Oztechan/Global/actions/setup-gradle-repo@007659c3464bb29eeaaed0abfd2822af806dfe1e - name: Generate Coverage run: ./gradlew koverXmlReport @@ -298,7 +298,7 @@ jobs: steps: - name: Setup Gradle Repo - uses: Oztechan/Global/actions/setup-gradle-repo@54ed8a1c9b3ce3addaeca9f69ce06393c7949bba + uses: Oztechan/Global/actions/setup-gradle-repo@007659c3464bb29eeaaed0abfd2822af806dfe1e - name: Detekt & Lint run: ./gradlew detektAll lint diff --git a/.github/workflows/project.yml b/.github/workflows/project.yml index e0490c572a..b4ac5b16aa 100644 --- a/.github/workflows/project.yml +++ b/.github/workflows/project.yml @@ -14,7 +14,7 @@ on: jobs: ProjectAutomations: - uses: Oztechan/Global/.github/workflows/reusable-project.yml@54ed8a1c9b3ce3addaeca9f69ce06393c7949bba + uses: Oztechan/Global/.github/workflows/reusable-project.yml@007659c3464bb29eeaaed0abfd2822af806dfe1e with: project_id: 2 secrets: inherit diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 930cdb81b8..c49bf04150 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -8,7 +8,7 @@ on: jobs: PublishRelease: - uses: Oztechan/Global/.github/workflows/reusable-publish.yml@54ed8a1c9b3ce3addaeca9f69ce06393c7949bba + uses: Oztechan/Global/.github/workflows/reusable-publish.yml@007659c3464bb29eeaaed0abfd2822af806dfe1e with: slack_channel: "ccc-github" secrets: inherit diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 95a617361d..d3c5be2331 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -61,7 +61,7 @@ jobs: steps: - name: Setup Gradle Repo - uses: Oztechan/Global/actions/setup-gradle-repo@54ed8a1c9b3ce3addaeca9f69ce06393c7949bba + uses: Oztechan/Global/actions/setup-gradle-repo@007659c3464bb29eeaaed0abfd2822af806dfe1e - name: Adding secret files uses: ./.github/actions/add-secret-files @@ -215,7 +215,7 @@ jobs: status: ${{ steps.status.outputs.status }} steps: - name: Setup Gradle Repo - uses: Oztechan/Global/actions/setup-gradle-repo@54ed8a1c9b3ce3addaeca9f69ce06393c7949bba + uses: Oztechan/Global/actions/setup-gradle-repo@007659c3464bb29eeaaed0abfd2822af806dfe1e - name: Adding secret files uses: ./.github/actions/add-secret-files From 3aab284420b31b28c83dc0b1b0d080876c640637 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 10 Aug 2024 21:34:24 +0200 Subject: [PATCH 67/89] [Oztechan/CCC#1457] Update androidGradlePlugin to v8.5.2 (#3761) * [Oztechan/CCC#1457] Update androidGradlePlugin to v8.5.2 Co-authored-by: Mustafa Ozhan * [Oztechan/CCC#1457] Update Git Submodules (#3762) * [Oztechan/CCC#1457] Update Oztechan/Global digest to 007659c (#3760) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: Mustafa Ozhan * [Oztechan/CCC#1457] Update Git Submodules Co-authored-by: Mustafa Ozhan --------- Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: Mustafa Ozhan --------- Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: Mustafa Ozhan --- gradle/libs.versions.toml | 2 +- submodule/basemob | 2 +- submodule/logmob | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 67a4c1d429..85024aca3e 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,7 +1,7 @@ [versions] kotlin = "2.0.0" -androidGradlePlugin = "8.5.1" +androidGradlePlugin = "8.5.2" jetbrainsCompose = "1.6.11" glance = "1.1.0" mokkery = "2.1.1" diff --git a/submodule/basemob b/submodule/basemob index 262fabcf79..35a5de0ace 160000 --- a/submodule/basemob +++ b/submodule/basemob @@ -1 +1 @@ -Subproject commit 262fabcf79f6391d56cab13aa4f3712627828fc8 +Subproject commit 35a5de0aceed1bebe19b26033dd61a1b0eca0888 diff --git a/submodule/logmob b/submodule/logmob index e269b8df59..3dd09eaf88 160000 --- a/submodule/logmob +++ b/submodule/logmob @@ -1 +1 @@ -Subproject commit e269b8df59381960e826e559996d8d6ebf1ce9a3 +Subproject commit 3dd09eaf88d00863c465e745187a8e799e977f80 From 264f47be7e7bc2bf717cd3573f3903b3d8275995 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sun, 11 Aug 2024 22:41:12 +0200 Subject: [PATCH 68/89] [Oztechan/CCC#1457] Update Git Submodules (#3763) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: Mustafa Ozhan --- submodule/basemob | 2 +- submodule/logmob | 2 +- submodule/parsermob | 2 +- submodule/scopemob | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/submodule/basemob b/submodule/basemob index 35a5de0ace..d014226b69 160000 --- a/submodule/basemob +++ b/submodule/basemob @@ -1 +1 @@ -Subproject commit 35a5de0aceed1bebe19b26033dd61a1b0eca0888 +Subproject commit d014226b699cb7023062a49fe2621e8e7b467c26 diff --git a/submodule/logmob b/submodule/logmob index 3dd09eaf88..66e62751e8 160000 --- a/submodule/logmob +++ b/submodule/logmob @@ -1 +1 @@ -Subproject commit 3dd09eaf88d00863c465e745187a8e799e977f80 +Subproject commit 66e62751e895ed7a78e8d9da4b90284512a8ba3f diff --git a/submodule/parsermob b/submodule/parsermob index e962ad3fac..5f41e9128f 160000 --- a/submodule/parsermob +++ b/submodule/parsermob @@ -1 +1 @@ -Subproject commit e962ad3fac993dfe22884c749f8c1aa2c2bc989d +Subproject commit 5f41e9128f8d7021a4490ca537510b6cfd2f893b diff --git a/submodule/scopemob b/submodule/scopemob index 03fd752a2f..85d8614d36 160000 --- a/submodule/scopemob +++ b/submodule/scopemob @@ -1 +1 @@ -Subproject commit 03fd752a2f5cc52c6916be1e900ed179c4ab3aff +Subproject commit 85d8614d36725b5ee933413b9eaa4461e9e0f2af From 2ce8de91f0f2dc58637f4f743a9fe2bd601f8a1d Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sun, 11 Aug 2024 22:41:55 +0200 Subject: [PATCH 69/89] [Oztechan/CCC#1457] Update dependency dev.mokkery to v2.2.0 (#3759) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: Mustafa Ozhan --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 85024aca3e..49a5323246 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -4,7 +4,7 @@ kotlin = "2.0.0" androidGradlePlugin = "8.5.2" jetbrainsCompose = "1.6.11" glance = "1.1.0" -mokkery = "2.1.1" +mokkery = "2.2.0" activityCompose = "1.9.1" navigationCompose = "2.7.0-alpha07" detekt = "1.23.6" From 20c590b21f3b8393cf0dbe1e01ef69bda94e06cd Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 12 Aug 2024 21:54:10 +0200 Subject: [PATCH 70/89] [Oztechan/CCC#1457] Lock file maintenance (#3764) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: Mustafa Ozhan --- ios/Gemfile.lock | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/ios/Gemfile.lock b/ios/Gemfile.lock index 0e85c1d94f..fa7f10e0ad 100644 --- a/ios/Gemfile.lock +++ b/ios/Gemfile.lock @@ -10,8 +10,8 @@ GEM artifactory (3.0.17) atomos (0.1.3) aws-eventstream (1.3.0) - aws-partitions (1.961.0) - aws-sdk-core (3.201.3) + aws-partitions (1.963.0) + aws-sdk-core (3.201.4) aws-eventstream (~> 1, >= 1.3.0) aws-partitions (~> 1, >= 1.651.0) aws-sigv4 (~> 1.8) @@ -133,7 +133,7 @@ GEM google-apis-core (>= 0.11.0, < 2.a) google-apis-storage_v1 (0.31.0) google-apis-core (>= 0.11.0, < 2.a) - google-cloud-core (1.7.0) + google-cloud-core (1.7.1) google-cloud-env (>= 1.0, < 3.a) google-cloud-errors (~> 1.0) google-cloud-env (1.6.0) @@ -178,7 +178,7 @@ GEM trailblazer-option (>= 0.1.1, < 0.2.0) uber (< 0.2.0) retriable (3.1.2) - rexml (3.3.3) + rexml (3.3.4) strscan rouge (2.0.7) ruby2_keywords (0.0.5) @@ -204,12 +204,13 @@ GEM uber (0.1.0) unicode-display_width (2.5.0) word_wrap (1.0.0) - xcodeproj (1.19.0) + xcodeproj (1.25.0) CFPropertyList (>= 2.3.3, < 4.0) atomos (~> 0.1.3) claide (>= 1.0.2, < 2.0) colored2 (~> 3.1) nanaimo (~> 0.3.0) + rexml (>= 3.3.2, < 4.0) xcpretty (0.3.0) rouge (~> 2.0.7) xcpretty-travis-formatter (1.0.1) From 31b5ae3372c3d779e8e7bc326c4e2281937039e2 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 14 Aug 2024 19:08:38 +0200 Subject: [PATCH 71/89] [Oztechan/CCC#1457] Update Git Submodules (#3766) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: Mustafa Ozhan --- submodule/basemob | 2 +- submodule/logmob | 2 +- submodule/parsermob | 2 +- submodule/scopemob | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/submodule/basemob b/submodule/basemob index d014226b69..3993847ee5 160000 --- a/submodule/basemob +++ b/submodule/basemob @@ -1 +1 @@ -Subproject commit d014226b699cb7023062a49fe2621e8e7b467c26 +Subproject commit 3993847ee521a242677d894ee8f3db7a2876f86e diff --git a/submodule/logmob b/submodule/logmob index 66e62751e8..1de3d8b59b 160000 --- a/submodule/logmob +++ b/submodule/logmob @@ -1 +1 @@ -Subproject commit 66e62751e895ed7a78e8d9da4b90284512a8ba3f +Subproject commit 1de3d8b59b9b442ec992a66265d53291e1e2363d diff --git a/submodule/parsermob b/submodule/parsermob index 5f41e9128f..ca609c37af 160000 --- a/submodule/parsermob +++ b/submodule/parsermob @@ -1 +1 @@ -Subproject commit 5f41e9128f8d7021a4490ca537510b6cfd2f893b +Subproject commit ca609c37af16e7656e8ee55863e2b6767b785cc2 diff --git a/submodule/scopemob b/submodule/scopemob index 85d8614d36..13a1a8ff11 160000 --- a/submodule/scopemob +++ b/submodule/scopemob @@ -1 +1 @@ -Subproject commit 85d8614d36725b5ee933413b9eaa4461e9e0f2af +Subproject commit 13a1a8ff11e379ac29325eade54a2fea1e14d14a From 08382e88c9bc424199023604cf7aaa4c919c0390 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 14 Aug 2024 19:08:52 +0200 Subject: [PATCH 72/89] [Oztechan/CCC#1457] Update kotlin to v2.0.10 (#3756) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: Mustafa Ozhan --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 49a5323246..fa8dcbaa83 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,6 +1,6 @@ [versions] -kotlin = "2.0.0" +kotlin = "2.0.10" androidGradlePlugin = "8.5.2" jetbrainsCompose = "1.6.11" glance = "1.1.0" From 89f577b188b968150347ed0c7b00054cfb5cd2bd Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 15 Aug 2024 23:09:23 +0200 Subject: [PATCH 73/89] [Oztechan/CCC#1457] Update dependency gradle to v8.10 (#3767) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: Mustafa Ozhan --- gradle/wrapper/gradle-wrapper.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index dedd5d1e69..66cd5a0e49 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.9-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10-all.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME From ddf5b2aea84375b5e661e67f1768ccd8c9ddd671 Mon Sep 17 00:00:00 2001 From: Mustafa Ozhan Date: Sat, 17 Aug 2024 17:18:25 +0200 Subject: [PATCH 74/89] [Oztechan/CCC#3769] Add Android themed icon (#3770) * [Oztechan/CCC#3769] Add Android themed icon * [Oztechan/CCC#3769] Add Android themed icon --- .../ic_launcher_foreground_monochrome.xml | 75 +++++++++++++++++++ .../res/mipmap-anydpi-v26/ic_launcher.xml | 1 + .../mipmap-anydpi-v26/ic_launcher_round.xml | 1 + 3 files changed, 77 insertions(+) create mode 100644 android/ui/mobile/src/main/res/drawable/ic_launcher_foreground_monochrome.xml diff --git a/android/ui/mobile/src/main/res/drawable/ic_launcher_foreground_monochrome.xml b/android/ui/mobile/src/main/res/drawable/ic_launcher_foreground_monochrome.xml new file mode 100644 index 0000000000..ebedfc88f4 --- /dev/null +++ b/android/ui/mobile/src/main/res/drawable/ic_launcher_foreground_monochrome.xml @@ -0,0 +1,75 @@ + + + + + + + + + + + + + + + + + + + diff --git a/android/ui/mobile/src/main/res/mipmap-anydpi-v26/ic_launcher.xml b/android/ui/mobile/src/main/res/mipmap-anydpi-v26/ic_launcher.xml index ac94b34f54..c46cd71e3b 100644 --- a/android/ui/mobile/src/main/res/mipmap-anydpi-v26/ic_launcher.xml +++ b/android/ui/mobile/src/main/res/mipmap-anydpi-v26/ic_launcher.xml @@ -2,4 +2,5 @@ + \ No newline at end of file diff --git a/android/ui/mobile/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml b/android/ui/mobile/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml index ac94b34f54..c46cd71e3b 100644 --- a/android/ui/mobile/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml +++ b/android/ui/mobile/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml @@ -2,4 +2,5 @@ + \ No newline at end of file From bf5ef3df2f393d6c0594519c3a950d83763606a8 Mon Sep 17 00:00:00 2001 From: Mustafa Ozhan Date: Sat, 17 Aug 2024 17:18:42 +0200 Subject: [PATCH 75/89] [Oztechan/CCC#3772] Regenerate the android icon with webp (#3773) * [Oztechan/CCC#3769] Add Android themed icon * [Oztechan/CCC#3769] Add Android themed icon * [Oztechan/CCC#3772] Regenerate the android icon with webp * [Oztechan/CCC#3772] Regenerate the android icon with webp --- .../mobile/src/main/ic_launcher-playstore.png | Bin 0 -> 22764 bytes .../res/drawable/ic_launcher_foreground.xml | 47 ++++++++++-------- .../src/main/res/mipmap-hdpi/ic_launcher.png | Bin 2420 -> 0 bytes .../src/main/res/mipmap-hdpi/ic_launcher.webp | Bin 0 -> 1614 bytes .../res/mipmap-hdpi/ic_launcher_round.png | Bin 4508 -> 0 bytes .../res/mipmap-hdpi/ic_launcher_round.webp | Bin 0 -> 3202 bytes .../src/main/res/mipmap-mdpi/ic_launcher.png | Bin 1623 -> 0 bytes .../src/main/res/mipmap-mdpi/ic_launcher.webp | Bin 0 -> 1072 bytes .../res/mipmap-mdpi/ic_launcher_round.png | Bin 2747 -> 0 bytes .../res/mipmap-mdpi/ic_launcher_round.webp | Bin 0 -> 1984 bytes .../src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 3359 -> 0 bytes .../main/res/mipmap-xhdpi/ic_launcher.webp | Bin 0 -> 2202 bytes .../res/mipmap-xhdpi/ic_launcher_round.png | Bin 6348 -> 0 bytes .../res/mipmap-xhdpi/ic_launcher_round.webp | Bin 0 -> 4428 bytes .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 5110 -> 0 bytes .../main/res/mipmap-xxhdpi/ic_launcher.webp | Bin 0 -> 3156 bytes .../res/mipmap-xxhdpi/ic_launcher_round.png | Bin 9794 -> 0 bytes .../res/mipmap-xxhdpi/ic_launcher_round.webp | Bin 0 -> 6956 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 7035 -> 0 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.webp | Bin 0 -> 4616 bytes .../res/mipmap-xxxhdpi/ic_launcher_round.png | Bin 14083 -> 0 bytes .../res/mipmap-xxxhdpi/ic_launcher_round.webp | Bin 0 -> 9866 bytes .../src/main/res/mipmap/ic_launcher.png | Bin 5110 -> 0 bytes .../src/main/res/mipmap/ic_launcher_round.png | Bin 9794 -> 0 bytes .../res/values/ic_launcher_background.xml | 4 ++ 25 files changed, 31 insertions(+), 20 deletions(-) create mode 100644 android/ui/mobile/src/main/ic_launcher-playstore.png delete mode 100644 android/ui/mobile/src/main/res/mipmap-hdpi/ic_launcher.png create mode 100644 android/ui/mobile/src/main/res/mipmap-hdpi/ic_launcher.webp delete mode 100644 android/ui/mobile/src/main/res/mipmap-hdpi/ic_launcher_round.png create mode 100644 android/ui/mobile/src/main/res/mipmap-hdpi/ic_launcher_round.webp delete mode 100644 android/ui/mobile/src/main/res/mipmap-mdpi/ic_launcher.png create mode 100644 android/ui/mobile/src/main/res/mipmap-mdpi/ic_launcher.webp delete mode 100644 android/ui/mobile/src/main/res/mipmap-mdpi/ic_launcher_round.png create mode 100644 android/ui/mobile/src/main/res/mipmap-mdpi/ic_launcher_round.webp delete mode 100644 android/ui/mobile/src/main/res/mipmap-xhdpi/ic_launcher.png create mode 100644 android/ui/mobile/src/main/res/mipmap-xhdpi/ic_launcher.webp delete mode 100644 android/ui/mobile/src/main/res/mipmap-xhdpi/ic_launcher_round.png create mode 100644 android/ui/mobile/src/main/res/mipmap-xhdpi/ic_launcher_round.webp delete mode 100644 android/ui/mobile/src/main/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 android/ui/mobile/src/main/res/mipmap-xxhdpi/ic_launcher.webp delete mode 100644 android/ui/mobile/src/main/res/mipmap-xxhdpi/ic_launcher_round.png create mode 100644 android/ui/mobile/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp delete mode 100644 android/ui/mobile/src/main/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 android/ui/mobile/src/main/res/mipmap-xxxhdpi/ic_launcher.webp delete mode 100644 android/ui/mobile/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png create mode 100644 android/ui/mobile/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp delete mode 100644 android/ui/mobile/src/main/res/mipmap/ic_launcher.png delete mode 100644 android/ui/mobile/src/main/res/mipmap/ic_launcher_round.png create mode 100644 android/ui/mobile/src/main/res/values/ic_launcher_background.xml diff --git a/android/ui/mobile/src/main/ic_launcher-playstore.png b/android/ui/mobile/src/main/ic_launcher-playstore.png new file mode 100644 index 0000000000000000000000000000000000000000..dd96003a26c70d25483997d0ef953a6dfb50a656 GIT binary patch literal 22764 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 - - - - + + android:pathData="M 299.7 414.5 C 251.2 403.5 218.5 358.2 223.8 309.9 C 226.5 286.2 236.4 266.3 253.8 249.8 C 290.8 214.7 347.6 214.5 385.6 249.3 C 397.6 260.3 407.8 276.7 412.5 292.5 C 416.1 304.6 417 325.5 414.5 338 C 406.9 376.1 377.8 406.1 340.7 414.1 C 329.9 416.4 308.9 416.6 299.7 414.5 M 272 384.1 C 270.8 381.8 272.8 379.6 275.3 380.5 C 277.2 381.2 277.4 383 276 384.8 C 274.5 386.5 273.1 386.2 272 384.1 M 346.3 373.4 C 346 372.6 346.3 371.3 347 370.4 C 348 369.2 351.4 369 365.5 369 C 375 369 383.5 369.2 384.4 369.6 C 385.2 369.9 386 371.2 386 372.6 C 386 375 386 375 366.5 375 C 350 375 346.9 374.7 346.3 373.4 M 254.4 366.5 C 253.1 363.3 255 363 274.6 363 C 293.6 363 294.1 363 293.5 365 C 293 366.8 291.9 367 274 367.5 C 257.9 367.9 254.9 367.7 254.4 366.5 M 346.3 359.3 C 345.9 358.3 346.3 357.1 347.5 356.3 C 350.3 354.2 384.6 354.8 385.9 356.9 C 388.2 360.6 386.6 361 366.5 361 C 349.3 361 346.9 360.8 346.3 359.3 M 272.5 350.3 C 271.6 349.1 271.9 346.1 273 345.4 C 274.6 344.4 277.3 347.5 276.6 349.4 C 275.9 351 273.4 351.5 272.5 350.3 M 272 294.8 C 271.4 294.1 271 290.1 271 285.8 C 271 278 271 278 262.7 277.7 C 255.2 277.5 254.5 277.3 254.5 275.5 C 254.5 273.6 255.2 273.4 262.7 273.2 C 271 272.9 271 272.9 271 265.6 C 271 257.7 272.4 254.4 275.2 255.5 C 276.5 256 276.9 257.7 277.2 264.3 C 277.5 272.5 277.5 272.5 285.4 272.7 C 293.3 273 295.3 273.9 294.3 276.6 C 293.9 277.6 291.4 278 285.4 278 C 277 278 277 278 276.5 286.5 C 276.1 292.8 275.6 295.1 274.5 295.5 C 273.6 295.7 272.5 295.4 272 294.8 M 352 289.8 C 350.3 287.8 350.7 287.1 356.5 281 C 362 275.2 362 275.2 356.4 269.6 C 351.5 264.8 350.9 263.8 351.9 262 C 352.5 260.9 353.4 260 353.9 260 C 354.4 260 357.4 262.5 360.5 265.6 C 366.1 271.2 366.1 271.2 371.8 265.6 C 375.9 261.5 378.1 260.1 379.3 260.5 C 382.1 261.6 381.1 264.3 376 269.5 C 373.2 272.2 371 274.8 371 275.2 C 371 275.7 373.4 278.6 376.4 281.6 C 381 286.3 381.7 287.5 380.9 289.1 C 380.3 290.1 379.4 291 378.8 291 C 378.3 291 375.1 288.4 371.8 285.3 C 365.9 279.6 365.9 279.6 359.9 285.3 C 356.6 288.4 353.7 291 353.5 291 C 353.2 291 352.5 290.4 352 289.8" /> - + + android:pathData="M 272 384.1 C 270.8 381.8 272.8 379.6 275.3 380.5 C 277.2 381.2 277.4 383 276 384.8 C 274.5 386.5 273.1 386.2 272 384.1" /> + android:pathData="M 346.3 373.4 C 346 372.6 346.3 371.3 347 370.4 C 348 369.2 351.4 369 365.5 369 C 375 369 383.5 369.2 384.4 369.6 C 385.2 369.9 386 371.2 386 372.6 C 386 375 386 375 366.5 375 C 350 375 346.9 374.7 346.3 373.4" /> + android:pathData="M 254.4 366.5 C 253.1 363.3 255 363 274.6 363 C 293.6 363 294.1 363 293.5 365 C 293 366.8 291.9 367 274 367.5 C 257.9 367.9 254.9 367.7 254.4 366.5" /> + android:pathData="M 167 360.4 C 139 359.9 139 359.9 139 355.1 C 139 350.5 139.1 350.2 141.9 349.6 C 143.6 349.3 146.1 348.2 147.6 347.3 C 150.8 345.2 154.9 336.7 154.9 332.2 C 155 329 155 329 147 329 C 139 329 139 329 139 323.5 C 139 318 139 318 146.9 318 C 154.9 318 154.9 318 152.4 312.7 C 147.5 302.1 150.2 289.8 158.4 285.3 C 167.8 280.1 179.4 280.2 191.2 285.8 C 197 288.5 197 288.5 194.5 292.6 C 192 296.8 192 296.8 184.7 294.2 C 176.2 291.3 168.8 291.5 164 294.9 C 160 297.8 159.4 301.5 162 308.6 C 163.2 311.8 164.4 315.2 164.6 316.2 C 165.1 317.6 166.7 317.9 175.3 318.2 C 185.5 318.5 185.5 318.5 185.8 323.7 C 186.1 329 186.1 329 176.1 329 C 166.2 329 166.2 329 165.6 335.1 C 165.2 338.7 163.9 343 162.5 345.6 C 160.1 350 160.1 350 178.5 350 C 197 350 197 350 197 355 C 197 357.7 196.5 360.2 196 360.5 C 195.4 360.7 182.4 360.7 167 360.4" /> + android:pathData="M 346.3 359.3 C 345.9 358.3 346.3 357.1 347.5 356.3 C 350.3 354.2 384.6 354.8 385.9 356.9 C 388.2 360.6 386.6 361 366.5 361 C 349.3 361 346.9 360.8 346.3 359.3" /> + android:pathData="M 272.5 350.3 C 271.6 349.1 271.9 346.1 273 345.4 C 274.6 344.4 277.3 347.5 276.6 349.4 C 275.9 351 273.4 351.5 272.5 350.3" /> + android:pathData="M 272 294.8 C 271.4 294.1 271 290.1 271 285.8 C 271 278 271 278 262.7 277.7 C 255.2 277.5 254.5 277.3 254.5 275.5 C 254.5 273.6 255.2 273.4 262.7 273.2 C 271 272.9 271 272.9 271 265.6 C 271 257.7 272.4 254.4 275.2 255.5 C 276.5 256 276.9 257.7 277.2 264.3 C 277.5 272.5 277.5 272.5 285.4 272.7 C 293.3 273 295.3 273.9 294.3 276.6 C 293.9 277.6 291.4 278 285.4 278 C 277 278 277 278 276.5 286.5 C 276.1 292.8 275.6 295.1 274.5 295.5 C 273.6 295.7 272.5 295.4 272 294.8" /> + android:pathData="M 352 289.8 C 350.3 287.8 350.7 287.1 356.5 281 C 362 275.2 362 275.2 356.4 269.6 C 351.5 264.8 350.9 263.8 351.9 262 C 352.5 260.9 353.4 260 353.9 260 C 354.4 260 357.4 262.5 360.5 265.6 C 366.1 271.2 366.1 271.2 371.8 265.6 C 375.9 261.5 378.1 260.1 379.3 260.5 C 382.1 261.6 381.1 264.3 376 269.5 C 373.2 272.2 371 274.8 371 275.2 C 371 275.7 373.4 278.6 376.4 281.6 C 381 286.3 381.7 287.5 380.9 289.1 C 380.3 290.1 379.4 291 378.8 291 C 378.3 291 375.1 288.4 371.8 285.3 C 365.9 279.6 365.9 279.6 359.9 285.3 C 356.6 288.4 353.7 291 353.5 291 C 353.2 291 352.5 290.4 352 289.8" /> + android:pathData="M 160 210.1 C 160 207.6 159.2 206.9 153.5 204 C 146.8 200.8 141.8 195.8 140 190.8 C 139.1 188.1 139.3 187.8 143.9 185.5 C 148.8 183 148.8 183 149.3 185.4 C 151.1 192.5 161.3 197.9 170.6 196.6 C 184.1 194.7 190.5 184 182.5 176.5 C 178.8 172.9 173.8 171.4 163.8 170.5 C 155.5 169.8 151.1 168 145.8 163.2 C 137.4 155.6 136.6 145.2 143.8 137.6 C 146.6 134.6 153.7 130.7 158.2 129.6 C 160.4 129 161 128.4 161 125.9 C 161 123 161 123 166.5 123 C 171.8 123 172 123 172 125.8 C 172 128.4 172.3 128.8 176.1 129.4 C 182.2 130.3 189.9 134.8 193.1 139.4 C 194.7 141.5 196 143.7 196 144.4 C 196 145 193.9 146.2 191.4 147.1 C 186.9 148.7 186.8 148.7 185.8 146.6 C 184.4 143.4 179.2 140.2 173.3 138.9 C 160.5 135.9 146.5 143.6 149.9 151.8 C 151.9 156.6 156.7 158.9 167.1 160 C 183 161.7 193.1 168.2 196 178.5 C 198.1 186 195.9 192.9 189.3 199.3 C 185.6 202.9 176.9 207 172.9 207 C 171.4 207 171 207.6 171 210 C 171 212.9 170.9 213 165.5 213 C 160.1 213 160 212.9 160 210.1" /> + android:pathData="M 319.6 205.6 C 310 202.8 300.9 194.8 296.1 185.2 C 293.9 181 293.9 181 287.4 181 C 280.8 181 280.8 181 281.1 176.2 C 281.5 171.5 281.5 171.5 286.8 171.1 C 291.9 170.9 292.1 170.7 291.8 168.1 C 291.5 165.6 291.1 165.4 286.1 165.1 C 280.8 164.8 280.8 164.8 281.1 160.1 C 281.5 155.5 281.5 155.5 287.6 155.2 C 293.8 154.9 293.8 154.9 296.4 149.5 C 303.4 135.1 321.5 126.2 338 129 C 344.9 130.1 354 134.7 358.7 139.3 C 361 141.5 361 141.5 357 145.4 C 353 149.3 353 149.3 350.2 146.8 C 338.6 135.9 319 137.7 309.2 150.3 C 308 151.9 307 153.6 307 154.1 C 307 154.6 310.6 155 315 155 C 323 155 323 155 323 159.9 C 323 164.9 323 164.9 313.2 165.2 C 303.5 165.5 303.5 165.5 303.1 168.2 C 302.8 171 302.8 171 312.9 171 C 323 171 323 171 323 176 C 323 181 323 181 315 181 C 309.5 181 307 181.3 307 182.1 C 307 182.8 309.1 185.4 311.8 188 C 317.4 193.3 323.8 196 331.5 196 C 338.1 196 342.2 194.5 348.3 190.2 C 353.7 186.5 352.6 186.2 359.7 192.7 C 361.2 194 360.1 195.4 353.8 200.2 C 345.8 206.4 330.2 208.8 319.6 205.6" /> - \ No newline at end of file + diff --git a/android/ui/mobile/src/main/res/mipmap-hdpi/ic_launcher.png b/android/ui/mobile/src/main/res/mipmap-hdpi/ic_launcher.png deleted file mode 100644 index b38eb92d3346a286917907706bb08074a67a0ef1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2420 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 M!js3J9s)dv!a@HGS^xk5 literal 0 HcmV?d00001 diff --git a/android/ui/mobile/src/main/res/mipmap-hdpi/ic_launcher_round.png b/android/ui/mobile/src/main/res/mipmap-hdpi/ic_launcher_round.png deleted file mode 100644 index 67b6a5ca720f65b0a535bddbeeb451d83f90462c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4508 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 diff --git a/android/ui/mobile/src/main/res/mipmap-hdpi/ic_launcher_round.webp b/android/ui/mobile/src/main/res/mipmap-hdpi/ic_launcher_round.webp new file mode 100644 index 0000000000000000000000000000000000000000..47c8faebf75e31ec6aa9b1b8ca6b931b2e2cbea1 GIT binary patch literal 3202 zcmV-|41M!bNk&F`3;+OEMM6+kP&iC&3;+NxN5Byf6^DYhZJ2~V>~;r2L`(p$=0b9? zK7fprt^YIhIloP8I~m)yjn~~>6)kfex%F3F)&0MLU)blw`R&HBlU~L)da#OZ?%1(y zj3>6uify}McWj;mv27$rlJd{(!#ML()jfXB18^HjawLn&BQxDuz0X9>rB~m9hh^Kg z>1d>E+qP}nwr$&A?t*RGRu^I?WxH-22W}%NQl)!%W)Fv+K-c>J^K&#;m88wd1z2O- zwr$6@ZQHhOXLJESe80c{TtaO8PSUeVs#Lbk($#uP?`Lg0?$)+#b%Scp=WMy#sop}` zZCi#U#s6*Fwrzgu9^1BU+wsB?6*)nLjikg;emGE(aU@A?g5e8cx|m!}6km{5^ zg8}yxzZkdWMTj`-1<4uz+ntxx@RAX3&$vS1%H52`cP_tAUX07Tzn(jW%j!d(Ld3{( zQ;|aCWn^dk?@V5@%;hy#fS3Zd5Z%p{rE}LuRFP{f0z_W4=dzzG4@8?F^Cj z7t@j~=4(wuw#6WDsM-GDMx0TWa^;g2D@@5J7Smk$dJl0Ahi=pdQRb|YwtW0*#|+lQ zm9?XB4@Yj*!-y+n8XRgD2nTCkLN@9cJFp1N9N({~sML)@=J_&m{4kPEGZ~fpUbSoZ zS{pJJ_mFf;<5S=+8ZilJB|yp|wEhpHuk!A$nK5695;KX)0B1@>PNkf?ZKkAj?TBL_ z7E@O3N7De%r67Y_EWIoh*-(M7jL8yvH)7D*iLr>4v`&YBAXEv2sE|vCoH|&uf+Vdt zek}#!)ha=ehwR>Jy!fGQey>UZ<*geS*~rWWBsMCu{*mR@K@l32|MQs8JF;<^L}U_~ z$0s+iH2C#x@g3D z2lh~q3}GtNDpXucuVkPRx02cO%CjvqtqU!ti=_aqfm5ICLPRl}4%!50gsTvNSmXan z4jLkg9wHgjf+V@}Z#vMakFQ-(fJ|=Njwp*;HERY&<|dLlz%gkINOM6kFM-QOFdlJ%UkDnQ=#& z7w>eaMQ9SR=cQ&L#%2;I1DQR;6N`&NWMm>k6Y&;FNaRpP-nUAWFer@EIT<8!Edt0W zhhb1+&72@}XCCdk1hJ!5A->k3fCA(SG9BpHQixGOjk4^bAit}Ob*-E*qy?%Yc(m%1fPL(T}>V;|LRWu^sinL|QUe`UyqeApB741%oX#w6cy%868 zSqrc1SV5}0d}Qhn#EQ7f21ZuE1Qh^8B$uw?K)YIj*b2DvHECNdF~R)#YHKeXczGX% zs7{&*Enk^1&?5z@a`m63K692sXsizVt)NR+`4o3W+4rcCb#xXwIbl^+lct@>Q% zo^>=*?wcA1B@6;=)mn|&XXl!1e&`9Q`GDfD=7+AyWYUqBdb4!%YBo!U6+iT14yEv= zIj%fsfa=>n%Y7fjh)COyI(wPq)pTxM$CCTreg?=^yUNZV^aqEv=Px3)_cG0^S#J%~ z$BWa9#ewS#K%UO0`Q<{QUAD+$6X*HO|U6?v^aw*dwK7_4jLnfltH zG#`v#A#3%@Ub~7-9qpgHoUJQ+-3l-Ncw}!_4X>AuZ(Q#$rrHhw1lKQ(M+fOjrG^?R zg#f~)#W~Y;ZqpZJuKddFwkD54edAanHs0K2V+|2=ljn!UpLnGIHf}!jXx*y)pa{_e;A&lWAZd|;Rf@qM62i-t z-nD~;If!B{>}g);0B|To+z~)DnOPB3EVE_BU#4z>MP?Ez!_%&!9Ahy$cYs9dT|Kxb z9eTC_#C9xLUjPI;)LkM76fo3tCXVs45s6(HTMYTU@v6Gr>hi~3aGV0*p5cwYsodC` zG&CO(iW=7`h`6#Pb1s(&iWpc7E*@tjWE63cZK2AeqITO63n>S@0CKUKJ#D)``6U98xNWl-gJnQQr=^EO*1E64$`FM0 z&c(UizIy^7e>WCsM*!ivYe!oW?4sXFl}zU#Zs-!k8*lWCqEBQEoZ>9s2AWx`SDUA< z^IOyHv+45Db$sorpDdXxKM1W}%5Midry@{oujHY1f!k)|RSNh36uL$&*`7j{J^7;& zzq`k~VHc3^CMJ3Y*0Y0j=E&)8LH@yI`O_F&)&c`hXw7GK^gzTf z(g7q@UhkcjSAM~fd{Phw(CD1KHNcAFS9<1iSibW$l@(--hwj|BLsUrAi$8gXLMfqKK(^6abJd^ST5k z!x!>p?Q!!%*R`}BT=$tBxh8AvQ!M(m)SFNM*=HmUHsul#0HvC{Gtv?{IFV>R94>Ru z84_nsPeryTLR9^%Tma?QWv(PtsfHMUTHU>hQx?&>D0p+_a~`8BxNflow0!OpYr!9n zBYXN)&0Xb}PTvt%C<6e;1l)=DtZ`OWEazFjg~EMY^TDBa^lD0tTGGUgnJ|7y8NX3nm|WBx4QxKUPu>yLL_CNBC`uuU$#mwFxb{oTgM?2ny_!Tt zlR}h!yiy@Lv8h2|Y>)@gnd*1-Z9Qr=Wr0bcOQeUH?-J5WwH~!L)%W7J&{=OPbO->~ zc-%??r~nvNIhXXdBS$HVPNN~0%qQ$V=Y0MUvJ|*}lgejhKD^A{09_A$o2#< zDfiq-EqhOQ57`+9m;@p&|1R;lMDrC8`j;r8hcgj)^4xNdmHbD~&2y!$0Khphh@90E zz;HsY?sd;@ZZmqTTa~_@;lKb*#SAbdY}Y-T-gflnhp#-`^Q>O0qHC=B+&GNvz5u$b zkH^)y@^fW1p4HR3JJ%`eqFXdJmd#AM?-M!CKb{=RFnc{cXyoy0{_*@W7dQ^j1Z)X1gp4Z)T z^y~L3`fvmX2Rkr~aiE-_2BEI!hS6vofC$^=iXQ3VCMuUMbyEe$yc?j_ydwvAZq#5) zo6TSo0s~`)sMI=>DpdDS6{342D;5nV)Wp?jGuVyF5RIAa2uiiK&%i7UFDKIa+cm%r z7A7=wgepY)JMN@XYyMV+YX70AWq_U+HRxbQaKs-zvu3@`)yfMT@%YzoUeIXeV$Bn3 zfE+;B6TOY41Brn}%btGp$((Uqt-N3xCn-N0L)<@RcNQM7x8WN2aM}!Su2x=f4Rl`t zO&>9!r3NNUWj^3)<;DNjz?_I!2ndT7wZAMRHLxgl4K$r@hT{D-5EQdowA~h1&x@BQ z!iJne*pycU3!|UCpJWEKNgLp&`<<}A;V4u$9)s&0w;?idy(mveMxhDr-0Or>=UU-x z>qT;m2N1P(lPHfxG6SZnTG&&2nD!|CAF?6|<}TBV@>sCc3>mr9baLhnm>nKN+e23w zAYe(9D4#_#1D{95!L?i8!<8Gip#IniShaDh)r>9H7_;H_ox9Na^DngQmaa|_<=8?p z14y7|CB6JvyGn_X4$!BhiE>yH(zd~m_wK{54}XJiE_@4-38|tSTS#U=XV^%EW3M9( zU!Q`sf?`n~%e=_t5WhJSI)1nVdFH*eq-K)R(Wj=teCEsd-dPELI{vMNYzDAwoOV=z!dweshfhGlv9s_-X`RS` z*PeRFId>8ATH3*dOL2F|p!LDagkiU zIoE6zi6-8!I3((Q#G|YZJjqq?CFT_78rt@HRQEw25>Isg8m9!HiHISBH3|DV< zz@x`cpzZQC*qFQ1x(yd9p{SnFD+UmJqB?!P4Q5C17on+Sg~dgR6@=x}qY}!;60+Rj zNoF81JqPY~K7jVC*I{>MH6=F1NVnkt97d)?R?u)VyC_O515}8Uxei>)>M4UuYH6Em z<}P5mW;DqR;3H*5VF~QqQw8P&b(9tB)2-V_8;o=s^{YAp`s2-%>9tKf@i?U}IC>fk ztyd^hs+;IO-tpa!rji+W9(Wa;b4x`%E;OKNJPCPZoj?K)eFd&ti@-muyCh{ZfZ#wJ zRIrb(z$46-@(_Y!1C1aqd1cn=lSNhoh#$E@8@|m%S6HEVF4*%z@rdjO5L}tZCTs>p z=5BgL9E$eCKyu@TvyFlb*m0{j@XChEe=^Yha`)vJU}4BgjlGOlWwJJ&{$`du`>h_= zzze6J9!hoOpY&}5_XCGqbba9PUlj3ZjIZw~ z)W|T5*Z@Y?=bP82&0Sot4AB7l%ESWgja~#h&~oliiIzzL3mSBbBPVwKA=h5vsbW1gI1`QmGIsfoTGiLYqouq*ACv2=J#Q5h8;g zQVAbO9`M#tG|8Qg&~HN$3d(=$FO|bK7hkG=0gPT%7O{0-Faj_FAOhx^OCm&!7#I-{ z0T>rwTcgXc#6ZlRxqUr@F)WAxj2IyhArP@djGhUAh`^XV6M_OkW>BCIz(fc}WFQr6 zqPz8vPDcw2F(Jw*W5(Es9L69Z(s6dNG*fD4n0qC&3`#n-i$dXIe}fZbBNj7bH!@2= zW~`05yPNZTe@XgyzmCgX%saoKhR)-xPUYF=>MP4(&G8%7J~jKK%xh!aWsT*{?y}tG z;{UR@Zq9dJx`+FR_`3R|DOLA1^$13YB7H8mzoT+sBJGKDdSml)}FO(o4vN} z>a1;!ZQIk`S=+YNT64_%PSsTE?A+&%=>G(u@-oN3oJ-Slq(D8FphrCG*iptj3vs=O z9%Ucdv7I?ToQ?EihXky|gI2U0^luy9qGry8J>O7{g@OOwh1Hn3TG(wu2HKCU3NcIA zrI646hqW6NwybThWfFu%1Bb3)G^twGE_G*#4XE0_U8ON>x^=~{a5YU(IjK0FDX>}E zuui9Om_EKil{V9`xLmMu{!pi}w80e}E01P2wVwbT2ho;~uGxFlM%7|A^BT2m-fS)n zU|7ATO&U*U0}ER8UxFph7&&SIW+dI+0|4BV;})KzA)tv1J*kkuWFi{pt%yL)&Fd5$ zK!&dZ+*5QIwSa%ka`%V!sgp)gOUf1n%A< zmN%~5J4d2iL9v6a9*OJo?d+NJd_9t!Yh<3w%S!;BloU?@ literal 0 HcmV?d00001 diff --git a/android/ui/mobile/src/main/res/mipmap-mdpi/ic_launcher_round.png b/android/ui/mobile/src/main/res/mipmap-mdpi/ic_launcher_round.png deleted file mode 100644 index d213769412e54d09c04d5609b9ccf5ad2fd9169d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2747 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 diff --git a/android/ui/mobile/src/main/res/mipmap-xhdpi/ic_launcher.webp b/android/ui/mobile/src/main/res/mipmap-xhdpi/ic_launcher.webp new file mode 100644 index 0000000000000000000000000000000000000000..1527c5f06cbba31dac06e95b7941953f5aafc5c8 GIT binary patch literal 2202 zcmV;L2xa$DNk&GJ2mk+01-D#!Z!_}$8{*SG=j^D|h~;Q_7{3I3y$}JS1b5R+w)7s$rAc+M7`LTpbej%kt$%*k1yl zA34;T&vn%g32*8UF^xkqfz=<>l$*O(g(Ac^+<|^M#V;;=YmWjr4ec^HMbHae&H#Vmc$2gq;AlOFX+-b80U|w&k&MYumupc6BToO*{OkhIkqQs#x^0(0rZKLtGy?xQ@tj6D)mGYmvT2l7r-!mxAmMy_h@sVInub`;aY#IOTIpRVAvLqe?f-FOVbUSQe) z_mQmv%S?O24>|HJ9xS(vY?U~~dyR>fniios4^#YnOe18kgk!C#N>BM^9mi@3M0<8D z`2o7Jien`HTpsJ^zAXap9KpD+ z^LjWEj=vnZTcLkJ2Dy*R6vn$HxFisA=XcGCNY4R1Qga0nF&O)mvs?~l8P=AnwoO2Z zX<3GOL6@BI-zP9`2*QqtN`~>Z*?!`JXoEh@&)Nu&?a&cX3B!M89GEHrBBd=6Z6(KM zL>(vs(Cq~uu&l<>3^{MG7UrVuPkYj zV17=&y$W9G=%G&N==iRV8ttI9@;xZSN6M1nBm8$Nt$GSmmI^xN%HYe-oTTRQK26ZLD%Ua+$ zt9TwE;+O9MU|@^SJ`#5AvYS#5plR|t!w-@hNB-h0DwWQG5<{2jh_Btlt-$3mtm2y1=qSUa$VAVSRtW-J7wejY1Cq z%A(eOosuXtZKFW4SHfNZWUGJ{L>bbm7Z{%#zoo#IQf}0g_ij&U617uztV>w|0NgJH z9gLNnb^+{SOP*oRHzqnKz;$ls=RCyJtEM_u6f1ZI04Vh+<=hI=Rto>^lrWC50S0>h z8iX#3ypJVdL$O2Rc*aH;EJBt_u*#72IZg@S+yJ=%MB&dOW}pRALl#?fhX1Itv?pNeTs`L``uAkU+Io)NZ27y=Qib8B zaJ8aCMA}kqpu^}nc%=lZ2tDu9lz!f66yH%zG?re^WmB4b!J z3f-0o(<))=>gt-sF6}!i=s*pdE%6!uqn9JgIQ_O=BI9`mpQBU(fc7n|o;#(Sr=gR7 zhl9Hv&@^og;7ng5 z%fk=A8NQ7omkwJxWGUr);xNkC}|&&1FQk=jia_>OLpy! zKEpA1%DVN$6V9-$2)(aS77U;90|0cXto|d;$|I#*Y~Oq=4`_OeZvdJ^Z1cF`fl@A^ zWAxvFGJ*S(n??m5KacAf{db~l;QKYDG0UwuVg0x3W0Vm@`&FjaODT#1Bh4rdnA@JJ#>MJ3x{fRR$e12HBJEv z0Iw$PmQWz0-$MDP!Lt8vTazfPvwi3hs{yb>_7Sen?ktP9R=WH+h5bYCw0!w_`=GMq z5Ht}7;3NT64S?Xoj}4$on5tA=JhVCx5>kS~R*Q<7W86@+@7}yQMvVc;o*)J=2mU*g z*Q`!e+1m!~$42kBhV1KA)bFp>=RDoYt+N~O@9Z-Vko;ne27u;<%4Yyx&z)4*TDhpT z%2895kVj2b{_eSx{{8InIirIChyZkVkhy>Xzyja^aH7BcaQp5TC+jr;6abbdh}=Q$ c1`0P&B7b%B-H8{5wVNxyUZDSV#qhzU0B_w>h5!Hn literal 0 HcmV?d00001 diff --git a/android/ui/mobile/src/main/res/mipmap-xhdpi/ic_launcher_round.png b/android/ui/mobile/src/main/res/mipmap-xhdpi/ic_launcher_round.png deleted file mode 100644 index e1edce8b72bb19bba475698c8cf23ba70002b2aa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6348 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 O00008jXo!g=ZG)vVc1uK&+g$N0yb*w#GJ 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 SNhBp@CiA+pb2X>Vl?bl)@Bb@=&Tkf3JKn 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 Awg3PC diff --git a/android/ui/mobile/src/main/res/mipmap-xxhdpi/ic_launcher.webp b/android/ui/mobile/src/main/res/mipmap-xxhdpi/ic_launcher.webp new file mode 100644 index 0000000000000000000000000000000000000000..3d9ab4131e156c939908d8f8aacada6568e12436 GIT binary patch literal 3156 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 literal 0 HcmV?d00001 diff --git a/android/ui/mobile/src/main/res/mipmap-xxhdpi/ic_launcher_round.png b/android/ui/mobile/src/main/res/mipmap-xxhdpi/ic_launcher_round.png deleted file mode 100644 index 317bed966d1cd067ae2cec82033f60dfc4c164c2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9794 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 literal 0 HcmV?d00001 diff --git a/android/ui/mobile/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/android/ui/mobile/src/main/res/mipmap-xxxhdpi/ic_launcher.png deleted file mode 100644 index f4b0b2c108174672e0ee7e0a794af44d570c3569..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7035 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 literal 0 HcmV?d00001 diff --git a/android/ui/mobile/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png b/android/ui/mobile/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png deleted file mode 100644 index 66b7dcba1e4228efeea65dde00ef20c59f1af36a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14083 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 literal 0 HcmV?d00001 diff --git a/android/ui/mobile/src/main/res/mipmap/ic_launcher.png b/android/ui/mobile/src/main/res/mipmap/ic_launcher.png deleted file mode 100644 index f62977ad3209a58370313c8a3c3c9098c7fad4f3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5110 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 Awg3PC diff --git a/android/ui/mobile/src/main/res/mipmap/ic_launcher_round.png b/android/ui/mobile/src/main/res/mipmap/ic_launcher_round.png deleted file mode 100644 index 317bed966d1cd067ae2cec82033f60dfc4c164c2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9794 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 + + #445963 + \ No newline at end of file From 8abc85958143d63cb826814b0a9cc407caba7c64 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 17 Aug 2024 17:34:50 +0200 Subject: [PATCH 76/89] [Oztechan/CCC#1457] Update Git Submodules (#3768) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: Mustafa Ozhan --- submodule/basemob | 2 +- submodule/logmob | 2 +- submodule/parsermob | 2 +- submodule/scopemob | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/submodule/basemob b/submodule/basemob index 3993847ee5..0e49a1bc58 160000 --- a/submodule/basemob +++ b/submodule/basemob @@ -1 +1 @@ -Subproject commit 3993847ee521a242677d894ee8f3db7a2876f86e +Subproject commit 0e49a1bc58e4fa711706a97e1efd9a4aaa81af89 diff --git a/submodule/logmob b/submodule/logmob index 1de3d8b59b..744a46a3de 160000 --- a/submodule/logmob +++ b/submodule/logmob @@ -1 +1 @@ -Subproject commit 1de3d8b59b9b442ec992a66265d53291e1e2363d +Subproject commit 744a46a3deeced69b06ad763499fb5d58347bfe3 diff --git a/submodule/parsermob b/submodule/parsermob index ca609c37af..afd024cccc 160000 --- a/submodule/parsermob +++ b/submodule/parsermob @@ -1 +1 @@ -Subproject commit ca609c37af16e7656e8ee55863e2b6767b785cc2 +Subproject commit afd024ccccb75d7d8bd6b367791034b16f631e81 diff --git a/submodule/scopemob b/submodule/scopemob index 13a1a8ff11..3591e8bd7a 160000 --- a/submodule/scopemob +++ b/submodule/scopemob @@ -1 +1 @@ -Subproject commit 13a1a8ff11e379ac29325eade54a2fea1e14d14a +Subproject commit 3591e8bd7a2529dfe56763c387ff310364f48511 From ac6df3dca67fe2a92a655c111ffd23f7f735820d Mon Sep 17 00:00:00 2001 From: Mustafa Ozhan Date: Sat, 17 Aug 2024 17:47:17 +0200 Subject: [PATCH 77/89] [Oztechan/CCC#3774] Add transparency instead of black in monochrome icon (#3775) * [Oztechan/CCC#3769] Add Android themed icon * [Oztechan/CCC#3769] Add Android themed icon * [Oztechan/CCC#3772] Regenerate the android icon with webp * [Oztechan/CCC#3772] Regenerate the android icon with webp * [Oztechan/CCC#3774] Add transparency instead of black in monochrome icon * [Oztechan/CCC#3774] Add transparency instead of black in monochrome icon * [Oztechan/CCC#3774] Add transparency instead of black in monochrome icon --- .../res/drawable/ic_launcher_monochrome.xml | 75 +++++++++++++++++++ .../res/mipmap-anydpi-v26/ic_launcher.xml | 2 +- .../mipmap-anydpi-v26/ic_launcher_round.xml | 2 +- .../res/values/ic_launcher_background.xml | 4 - 4 files changed, 77 insertions(+), 6 deletions(-) create mode 100644 android/ui/mobile/src/main/res/drawable/ic_launcher_monochrome.xml delete mode 100644 android/ui/mobile/src/main/res/values/ic_launcher_background.xml diff --git a/android/ui/mobile/src/main/res/drawable/ic_launcher_monochrome.xml b/android/ui/mobile/src/main/res/drawable/ic_launcher_monochrome.xml new file mode 100644 index 0000000000..e50738ba3e --- /dev/null +++ b/android/ui/mobile/src/main/res/drawable/ic_launcher_monochrome.xml @@ -0,0 +1,75 @@ + + + + + + + + + + + + + + + + + + + diff --git a/android/ui/mobile/src/main/res/mipmap-anydpi-v26/ic_launcher.xml b/android/ui/mobile/src/main/res/mipmap-anydpi-v26/ic_launcher.xml index c46cd71e3b..f30783b210 100644 --- a/android/ui/mobile/src/main/res/mipmap-anydpi-v26/ic_launcher.xml +++ b/android/ui/mobile/src/main/res/mipmap-anydpi-v26/ic_launcher.xml @@ -2,5 +2,5 @@ - + \ No newline at end of file diff --git a/android/ui/mobile/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml b/android/ui/mobile/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml index c46cd71e3b..f30783b210 100644 --- a/android/ui/mobile/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml +++ b/android/ui/mobile/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml @@ -2,5 +2,5 @@ - + \ No newline at end of file diff --git a/android/ui/mobile/src/main/res/values/ic_launcher_background.xml b/android/ui/mobile/src/main/res/values/ic_launcher_background.xml deleted file mode 100644 index 6d47d1fd95..0000000000 --- a/android/ui/mobile/src/main/res/values/ic_launcher_background.xml +++ /dev/null @@ -1,4 +0,0 @@ - - - #445963 - \ No newline at end of file From e17d501bbc9f2ac1493ac797ae3347db82321d22 Mon Sep 17 00:00:00 2001 From: Mustafa Ozhan Date: Sat, 17 Aug 2024 18:11:52 +0200 Subject: [PATCH 78/89] [Oztechan/CCC#3776] Use iOS single size App icon (#3777) * [Oztechan/CCC#3769] Add Android themed icon * [Oztechan/CCC#3769] Add Android themed icon * [Oztechan/CCC#3772] Regenerate the android icon with webp * [Oztechan/CCC#3772] Regenerate the android icon with webp * [Oztechan/CCC#3774] Add transparency instead of black in monochrome icon * [Oztechan/CCC#3776] User iOS single size App icon * [Oztechan/CCC#3776] Use iOS single size App icon --- .../AppIcon.appiconset/100.png | Bin 6624 -> 0 bytes .../AppIcon.appiconset/1024.png | Bin 142838 -> 0 bytes .../AppIcon.appiconset/114.png | Bin 7570 -> 0 bytes .../AppIcon.appiconset/120.png | Bin 8101 -> 0 bytes .../AppIcon.appiconset/144.png | Bin 10004 -> 0 bytes .../AppIcon.appiconset/152.png | Bin 10863 -> 0 bytes .../AppIcon.appiconset/167.png | Bin 11979 -> 0 bytes .../AppIcon.appiconset/180.png | Bin 12900 -> 0 bytes .../Assets.xcassets/AppIcon.appiconset/20.png | Bin 939 -> 0 bytes .../Assets.xcassets/AppIcon.appiconset/29.png | Bin 1476 -> 0 bytes .../Assets.xcassets/AppIcon.appiconset/40.png | Bin 2216 -> 0 bytes .../Assets.xcassets/AppIcon.appiconset/50.png | Bin 2934 -> 0 bytes .../Assets.xcassets/AppIcon.appiconset/57.png | Bin 3348 -> 0 bytes .../Assets.xcassets/AppIcon.appiconset/58.png | Bin 3496 -> 0 bytes .../Assets.xcassets/AppIcon.appiconset/60.png | Bin 3589 -> 0 bytes .../Assets.xcassets/AppIcon.appiconset/72.png | Bin 4227 -> 0 bytes .../Assets.xcassets/AppIcon.appiconset/76.png | Bin 4816 -> 0 bytes .../Assets.xcassets/AppIcon.appiconset/80.png | Bin 5045 -> 0 bytes .../Assets.xcassets/AppIcon.appiconset/87.png | Bin 5655 -> 0 bytes .../AppIcon.appiconset/AppIcon.png | Bin 0 -> 109994 bytes .../AppIcon.appiconset/Contents.json | 150 +----------------- 21 files changed, 3 insertions(+), 147 deletions(-) delete mode 100644 ios/CCC/Resources/Assets.xcassets/AppIcon.appiconset/100.png delete mode 100644 ios/CCC/Resources/Assets.xcassets/AppIcon.appiconset/1024.png delete mode 100644 ios/CCC/Resources/Assets.xcassets/AppIcon.appiconset/114.png delete mode 100644 ios/CCC/Resources/Assets.xcassets/AppIcon.appiconset/120.png delete mode 100644 ios/CCC/Resources/Assets.xcassets/AppIcon.appiconset/144.png delete mode 100644 ios/CCC/Resources/Assets.xcassets/AppIcon.appiconset/152.png delete mode 100644 ios/CCC/Resources/Assets.xcassets/AppIcon.appiconset/167.png delete mode 100644 ios/CCC/Resources/Assets.xcassets/AppIcon.appiconset/180.png delete mode 100644 ios/CCC/Resources/Assets.xcassets/AppIcon.appiconset/20.png delete mode 100644 ios/CCC/Resources/Assets.xcassets/AppIcon.appiconset/29.png delete mode 100644 ios/CCC/Resources/Assets.xcassets/AppIcon.appiconset/40.png delete mode 100644 ios/CCC/Resources/Assets.xcassets/AppIcon.appiconset/50.png delete mode 100644 ios/CCC/Resources/Assets.xcassets/AppIcon.appiconset/57.png delete mode 100644 ios/CCC/Resources/Assets.xcassets/AppIcon.appiconset/58.png delete mode 100644 ios/CCC/Resources/Assets.xcassets/AppIcon.appiconset/60.png delete mode 100644 ios/CCC/Resources/Assets.xcassets/AppIcon.appiconset/72.png delete mode 100644 ios/CCC/Resources/Assets.xcassets/AppIcon.appiconset/76.png delete mode 100644 ios/CCC/Resources/Assets.xcassets/AppIcon.appiconset/80.png delete mode 100644 ios/CCC/Resources/Assets.xcassets/AppIcon.appiconset/87.png create mode 100644 ios/CCC/Resources/Assets.xcassets/AppIcon.appiconset/AppIcon.png diff --git a/ios/CCC/Resources/Assets.xcassets/AppIcon.appiconset/100.png b/ios/CCC/Resources/Assets.xcassets/AppIcon.appiconset/100.png deleted file mode 100644 index 8fe774530593098a1fcccf13040577c1744161f5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6624 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%0A9Uh~iWYR=VOetH+o+%CfZ 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

Y7 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Ⓢ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 diff --git a/ios/CCC/Resources/Assets.xcassets/AppIcon.appiconset/114.png b/ios/CCC/Resources/Assets.xcassets/AppIcon.appiconset/114.png deleted file mode 100644 index 480befe1602a0a612141f8e20810b1e5d0097e56..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7570 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 diff --git a/ios/CCC/Resources/Assets.xcassets/AppIcon.appiconset/120.png b/ios/CCC/Resources/Assets.xcassets/AppIcon.appiconset/120.png deleted file mode 100644 index a09628844dd0ce1ddba57ded45ce517449a8a14d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8101 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 diff --git a/ios/CCC/Resources/Assets.xcassets/AppIcon.appiconset/144.png b/ios/CCC/Resources/Assets.xcassets/AppIcon.appiconset/144.png deleted file mode 100644 index 8868b660ba0d350ed1c6e50a4678710b986a5925..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10004 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 ep627~i~k26J29>g7an>500007hM diff --git a/ios/CCC/Resources/Assets.xcassets/AppIcon.appiconset/152.png b/ios/CCC/Resources/Assets.xcassets/AppIcon.appiconset/152.png deleted file mode 100644 index 22ace376eebb0d42ab152a1c62d2582abd51b5be..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10863 zcmV-#Dv;HQP)1^@s67{VYS00001b5ch_0Itp) z=>PyA07*naRCr$PeFt=0)wT9Fy-BjVEXhTZEy=blS(a_E!G(ZaQBm^*! z{15^!FUd)kF$mqdXuQ9vdEEKHP@hGhy!0F!_aRtiV}3oCi0!6kr67zir` zB!GpLywczjz$6TWl>!pL!b)Cga0y@%2Es}K31DF*uQa#>FbM-;rGNymu##6ATmqPc zfv{3Q0$5ndD-A9IOu|4|DIftXtmKsj4;#SzNivg3^grh*Fs1^=`0z-UVT=wYKVbqRo@LFK`}<39pmzQ`*9&=-Y*|6BrC z0JM{U7yz-{w@LsDoMu5k@t+7#31C6PWo#adHjqXIz+|%iWOcz6DHg=o;H=NLMl$H4 z0$_HB0}h7+L`cGwN~wfgE{}kvjgD6sO8`bRz=(4>oi5BTnt^Fkvq3t%K*ZT$z;MK-~Be0U3EE} z4m;!uC4TwL^Y~!XmxzmvfkG~aTrOjg84BY2frF6VLW@oFCGgM&vfJ&vsrq^mWz4aa zN(Gb(1%uET0-%jXs4n6FCYQ-zb2wnL*$`{cBQ-Gr-??!a7S5jstJMmHLV=GqeTf}= z_M@q_9raDkFj_27tJF{`+AyIPoq`|zzhS>yyrVoZWmDiBZ65hRwO5k!=kyfv0!d7vL{VM zT&w{y$RP*`Fvy$^2U^=ZaP-6}Y~Q^PUmYk#XHPFQYIWF&9tyzmT&-5GqD6=^BS(CM^LC`iX7&gO!{?tsx~LS17M4pmlT+t>S0aqJ`{`#4Z_1nLL| znaFi)b~_4lr{KmbmttOV5%hXJ14a;$&OV@_XJ}KAcqCET)zytHJ9lHb6)oy1lMS3S0F05zCSvzCp zp7brdL%4@{IDJl*^yxFTSpDYP_~Pq*{M5~T>^vvlFfJEb+S<|3)P%P7PTpi%tp=&d zNh~@O;>US56@4$!sJo{Je_Qi!e7tpM*pmx_0oj;}NFpqODLpv}zj2dj?2XtwZX7XA^OthB*n^?IB)s{nW0xC|3BGhi}XU@+)#sH_UV_~T#D zWi+z#90{C^=W4TI`88Ky#sB*jb0re(qUbw(>^MICVmtO%9!67ZD=bzUb35YVI;{qo zsVO+Gr~peBUxbNRJb;IfMrL8H~6uC@+;c=;9Vtvno7aEaSHQ2LB12P37!VYA~$-@P4IUwSc2 zW;5#+Prvwgtlzv9F?zkA@D4F6aS=##e&>d3uyF1ieEh{$>^fMAmX5AKX%W)<*;nck zd|c#qNgfx6-#q#tresfs*=%9!k9>SDy|NY`e6bx$r3xygzup5ciY-r@4RR8* z*I$i=^Gfi-Kh|JxWi_-~E$eIHyrPbS5iw|2KK6sVuyo0VFk37v1pnucf5Emr2Us+a zW##K4vKq7+xSTGub#<|VPoiS1E)gK26O{~~!Mo^`GF)4WFT{ zt6K;MDTDt8SY(v17_sq!eX=X8WEr-WM=dU(AU*Bpu4vh z3b}$UL*l+jXqZejT{P@Im0oPj+n0!$^7 z;Wv*wfRf@O)+vcgvvbueLqgQSytysiL%P_%-dT?qUVBplm_OwA*QQ}z%x1%s%yitp zVmW3P3cH{DMxy7MIF&~Mb}KD5yA2JEE!g(;9<1NA6}64ceu)-;-aVLmSVRK&>AiQM zq^N*h6C?ul20fJIk8^WuqtVE23b%7l;9xE%^g12hTK_3luX~Rp6Jsgv2b+IXaxifs zqDMbI&VXw#S%OO!U5JeIH1-)eos@7W#OK5x5+C#oaV?5To;Y;|FRytE+xH!0kN#LL zPC{HP^jZx&ky8@l@yHMELRwlXgNl^=->+JY>SHIN?iXpG`E>X6qN`VkSVYfU=|C0``jv&A34q`M&28NFh$O0vpeQ00n7&l{1uUX zEEV_8rNtqjQBG8hL631UF)aSb0Emx`LH5Knc0PK)yJ$r|`n@|)R4|=&FcR(K;^I8MDte#J&MpR@H5`gxzL`Ql(_`-q$4p z&u+8fCqGz$%P(FGqtVQ1Ixqa=b-cM@BP-jZ0WgoT0vA@^c`J%$OyhJLx+s*BmYU*m zw9wArPX#*T6E5|dd{sE&!IA=gHSpputzuDSXKO4*#qH)QUBj%C$ z+Ki$4Jn8^O;*iYx`Nf5}Wa0UkkvkR7yz~!j*s=o#oz|xwMNUhT$&3{@T!R(2-oUwI z#I;thU5C}{KH%`nXe#=&kfgAS`4D0_?B*+$;(@!qEo4K;=#-EQYu^3kr8!o$;btuXbAjjmkonPZue|m`n z!E{th^nLX=0_b_O)rQ1a11Buz=S_jdV&l_AzkB|#_;mX&=ye+RF|bhWVc+8j(p^{z z`je_KI>FMuv^UsJ!4ByvNVMx$)4U`w6wOP ztEWd$;+0B_i;G2aQX*TKbUmYwJjD=BfEJqc8C>NR}&nNnXygV=$9mllRg z1la9ZSTYMMZn+-WlP7t^J-x4Z2!zgrih37YjCKddWMwkBKo6M=rIpqA+uC*P?<3V< zw63TFm^a8MIDGR}mtpCm1?-(C4?gW!p~#7_LxnI7$s zSX2T`1R3pan!xm_IaqvN2@0p>VM0c_XNMBa9S%E-&iaNX94N2C*4_KK+75wkw8X?n zxdn?$nybr&?96m5D4B&>1=Eq4o{G4bSe`G3nOrVb0Xn<7ak{n+`${XZ>p&@L8k^WX zF`6mU;+&%vU?RwbED1WX?L}F!$;BD(TR@ko<1kQBTXz0 z2Sm}|#o4(I2cPpyNsLEwVj^M;Iu?Ttrwd&@q?fg!xviZGy%2{U%Piig2AH@Yq@c5J zNU6Y+k35K?!Wmr8iLA*7{`LOcjUdY4d# zL#RzLm|t+D95s;V&k2B?1)3bi)AEo^`WS_j>~`!eui{hN1g>ZX)&QUhEPP-Qx)2th z3j|0*-Fr>}j3!A6u~^BFc01Lg@Fy4^3SvrQ45Yw02QUVcS9V1-m(6sE^PrS(aqas1 zu0*l#=4kwj9eR=B)jQ_^7S&vY#kdgkk-3D@O$-+LJ6VaOQ_+u1&R!V)oH8riWuE96 z!WG@?{X_SS)fG_yi=2Hon#&=ag(MKj2~?25p;W@6(Za0L!=%&0sMEr#*21Px!bS&M z+*Pyb8KuJkmBS7dodUO*p*I?yd;2)Cbhl3OI&O@aUTFS zwFW)0acCbGkIuMp=+Wt6QK{je^cs(-9AXQ4eNJ3VWwSwVF(asyh+qS#osO$^ky>>JKK@k(u9QeRw%7jI7Sg@62L~0i;2MMj88z__)IhNyk1^;dUg>Zkp{E-ejde(EYJkdOIm;o#C^{nsV56%Y1i5m- zJmxOsPqn&;W1Y#Igu0Y8*r}#0aWYPU=E!LSyR!JkjQ!!S$3lhtp2Zl7HA6StQKU~oJ26gqh#0W1jM_Dod)UiS`1%(1hogK(OQiYhVj*y8=31A^v9bpjS z2u_6(N2ccEbb96hu0_P=I$-^Z_lEElMlclBd{-dGWI{o8ImWfOh6H31z(%kn-j9ml zs?M8%nzVGlNe52`xg1WRc>gFX`2I|j;|g*GbQTK=tIH7I+B{-$DFMtM%KN&9J3c6I zICmOzE>`5do?-W@3rJJSaAkZ9wso6u#A5Tb=kqoENIs|U77`Yzj{e{yiT7|y6LD9C zf*rI)m4^`5(KaHGMGU|~XSa-GIf8qZxYx;?TpXE{J*YCzV$o*DW4ROXka-im^XLy+5S zL5XzuD>oU!GioLcyrf&+_I|_a08z=y zs>+bmRL@p&AgyR5fCaIjHXD9loQsE-EWrAM z<+x_^Zh#!H-a3)H2wf1bH0UD?Y`X&&#Axx-MdzU)Ya;3!n{d}>+i~1z!7JZ559jCR za4Y7AHt)o%HO-I>))`kWM|@8=ic9xHWibcD$s~XUx|(#D*Wuv6_1?k~nAQD6qYD@( zb0JHo@vt$m6u^&WkRQ&ZJL(jEbqaPx#PprQLxS=S;(O1-Y=eE8U0&j83IOoL&c$#fmPo zi8EM*&s zWHM-NR?I2g4?|a{+jZfavVH^c(p&HLJ=zHAG14y(&kb^ByH~qA(a$3m3l8=On;;tP z=!{Ro-on|idztPckW~&R)-Ei@4TaNSC4hNRn8c`fUXf#yZvT|nGN!Vo9#?$21E;J) z(UMR_FR4up9n8&90Iz@Je9X_w;gzasZo$1De~I;-Mh4h$B}CcURVp#L_6+h5m%~9# zy!=>if9|1SBASDFYOr$G4=SST68crU3+PgfFbfwzp`JxbcTo_*{}TwPMebEGZ6<2S zq3Y&dBAq=BRfP-%aR%XlhFjsMbDH1Jn~dA$730h5qxkRLWl(T?WPyj#owYqiR9Wpo zxdVn;Yms|RQ!B9gqIsB~n}de7c61s|$e)mbhQ=m*|Fi9QzoXYD$Y?{T?KaFixEF@* zE;uQr+eflu!~iUih4v;UflDkhN6ieTPszrVtce((nu0ikfop0}5x0hxR#YE5fy$%D zai*aOR=b0Xfp|EI&)q1vC3@nG|gu$VRD->PzHX{L>6;BuE;l~$UfcFoUW7(#! z2Uqe#7(!wvs>6u_tqOl#JQoXcbGVGcJsWr6L}xc%Te^UCvbx45+_!ND-fim{T*-IO zMC4*qPMyHiW7V*e^Y&Z@m{4)r0fR<^E0$bODhhQ zS7FPpz1-)U^dYej?{FAn{mS9MiJV*dj|T! z$o1h9=>FXxx+w~^D!jC?gk2HTiSFS|U*WYnY6>Q2#hjy-PfV z%LPGHN*H^MI8;%E*WO-_^5Z9cm(ZleSE;bSumtUK;|6z446*iO=V-Oz(cDRR>YGd0 z74hJvop`Ob`K+VW?ZQ~)2HA#vhj8__13n`RG#~PdrPbHMu2c@o#iAEr#Jy}b++o z*jrExM}T5X1lY61dAOfKMWvOvYBPn3!sp3nZsT;JC`OC>b0=YAeGA^KYhe+{0c|mL z$nL=WSRL-p%fg2>4S2VyokK-KsVt(HoY+u@>6N8Si=jZ|FStfU$qz&a<6^n)wti1N z{v*W4#|!<6R4TN!wPXA4y(p_bik9{cE~-n)enwglTQTL?`CAyT0xwLRrkZoNy;z3Ae;)p9w;CnsUa`ExKWCkw0Ayv4pCzZ#Uv#6}9RAv{JbfRftIpmtc%SpZKuxElN-7Q_v84$P#o%HxY5^uz zV!m(rO}ORyt6?;oS;YN)?ORyA?tR1<3<6EuqCg}daVZj+6yz0a%@5biz~g>!I$<`% zU~f?gj2f*^(|kxS*Jg#5Ss6GxGC@)+!LDziS2MMO2gtQIRCzH2#_ zU2z$AjHSsu`TR@RymODxW_XC~IuTI*I$K5kt1USV`)3pdtbg@!sfZS3m{N2`3wEL& zmf2X38I`3&>uUkLP}m)*NygE5fxpCA(_hQz}8Ei>XP?yBy$6I&0#Uurk`)WZ! z6~?7z1~X@)F)?rpGEDpY^WD#CZy)WFaFhg_}PKp++iSuEH(XU4``VY0TBSy1MbkyX(>3-3_Ijntcig zBM$+2^y`~ixDmWR?g{Zhr%H`|v*w^9CU(G)v}goI$ljSkM%5J+D{l22s=ue)HBH z`0bzn78t-N$XzrC?XhtI1-V1UDI#?s5|RCa-obFM2;g7>z@E78ZhT|Wg+kL!F;&zh zWKeiJPAT9`{T02_2}yiXvf-CIcH)=MuJRvXBx2<{J9Z5t%R8uW~ zY0&>Zp*V^XsckJNDnH;ke-Nzx6#+{AKvIwr-)l1CrYkPN5AR$Ko87^w&`nLvc=Wfw zM{RS9e|cU$sqC&nF)jgn3yWb@4s+PU$5^xgoP0?C1rpu&`HrJ|gP2W`bLJGL9(4Fv>zDVC788#Ino2f!T#K*#|}!<%7Mu z;ZwZw&U)@q?O(wF8K_M$iPzySQ4ga!V2APx`~q%&eUXfh$MdrAo68sB_5EeIed~V6 z)v94nQ;!rx!E%)0q_?PlrF67nR_Xqb=wA_`gAq4capN^uy7)rG#>6m(qJG`p*%h_* zjj-8mLWf(<${+e7Zm3bKvHsIdc>A+2eCCi*S0|V5l~gt$EhAtt$#29t`F1X6>Fe~4?-}^G!{tJP4A4{AOg{&s z`B|M#G*gA2p&ZdN8B}&V=9cb5Y-b0T5Ab!m+n=wG2!Q?c-W9lH$s*=l)C|54i*grl z^92%dvLXjt^Y3@D>R)gB1ekEL+m7bcbR3voIP3{*(OT?JSkXuk52Fku{LqDZ{aGZs zhsZ*ebmqkw@Q3qeay1`1pzJS)p;Ax3+FOQq8aoCQq7%8-_~u3wRvh$L!v2mO(K;B3 z$a`0`dALcm#GI27>a;FcdPa*1B`C1hgCC2&C0?)oB=l#oo zs;*vq*=-t8LZdr_3FBnIwJGsP*J;5u?R-g8s(U5_I_-A6)7XwCcf3~=ubzV*ogJ86 zx{qVBq^I~A*YC9mcYQE_^aMIQ%O$r%H7iy%4ruuS-%A*LscJ)xTqhlnm*H}Ag^-pSS@YHqUv&tud4|u z_lgV-=4mM42MPkYCBQR^9+ySN1a?_acLSG*A(C(oC!WZkjGLxUg^gP#`vw?!_SFgn z4%9W^!9A5|bL&k0Y`P(*N-6;T1gPZO98Q>6nLC?pB66?P_Er>?oed2!Fan|VF!zqJ zk{_a3gmM_U9Az_#(2$f0nbY1UkAT|vB`_Bd!b1LBv`{?`2lxnafW=k3$0u0Onb6rW zT0AwkfYk~zXnX;Id8kYVI?(*a4K*z}fy#9ORHvFpM1S|P2 z>J%qeU`owt*P{Nasjx0=KQbRB{|M=a| zZz(GIDRLQZPftRcPQxx0UqBGcIrZ4=c(twtr!0cQn!-SIg1e~v;D8e5zQ**QmJwE6 zCy*Bp`@J$bs;AGynbh%u^L3b|R5+a&FPEX&>4J5H?g+o;MIkU(fbJ3!&*TW^Lp4-c z+J@qaLx`jHe*J2)MisyYBiKlHvtNra!kZ|BWYz0YI=x6ZH`%Y#8tcpMTJ<-lCF0i$ zX5poZV|cpyRG+>`yp{Xbx`ReXa1V-`fZi>;<}{`pKP)(D zhjE#l^8kxPu0|m1icdsE-gI;sV)}T}X+a{fXE%H6WO8niGo|JvCZ9Owwswby(0>%b zB8jV!`@&?10gy zgPX}9bNis$QqpjIat_*KV%Z_fu8a|cgMx#U@RSg|qM)e)D!Ubv8tO3d%qghNCcnWY zj1$@`DghQ5Km&6#t5%QN%t<&iJ{@MNR83;jtwfIo#}zo1kZ(r+pVHBWtTQJuuC0~H z#7*A=I7=r1Y>*8$8VfntzNUpG<)0RonrYRhPe6T2Dy(A1TlZ&Vv4!#-#Z+bn5B)fu zNb2gug!&q!G&e$Sx4Dn}2gZ#;4X&uu!GJoWWfATspb?OIV`9;envTZg6!hry zZU9i;H-&awLadUC?D;8-c+uS)h&dJi2<{M-)rzFfcBD5oAhE3lN~;wP>iR(mg8^_Y zalR73{8;(11Daq@GDm|8X00Bb@d;>6Oy>Gy)aZd@e(r8@3>se`5CO$ebfJ}?#%2T6 zj!0~8Lt=X?V!FE_ci6cdGI6wEfE5ni%LCeQXSDi(iICqib|4elyAW>VE+>PH7Tu!N zqSp|M?wDBg7-C@5>0nW*VN-xc1I%Ba72Ha?XO9EJ!0XEd|kpMgiU}LoSWAU|t z0L~XM{29yF7@?$rq=SW$n$lPUC?Ek$0!3IUAOS3_NB|2fd8NT6fJqn#D+MHgg_XS0;1a+j41|>e{|5nqc*WypZl3@E002ovPDHLk FV1o2Eusi?& diff --git a/ios/CCC/Resources/Assets.xcassets/AppIcon.appiconset/167.png b/ios/CCC/Resources/Assets.xcassets/AppIcon.appiconset/167.png deleted file mode 100644 index bf09043bdc40a8c3aa7cf99ad28356aa25b9e19e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11979 zcmbuF zV&=S=c`@;sIp=#_(K=cxxL5!z1Oxr!$5oOJ;*dqUIQXTPemS~dV=~0 z0f8PtO;OIk$Ko^q-Jg1{@ulf~g+-+`saZ;uy-A%pxOXjB7J~o-1tSa~kBx%Cyeow< ztPw1;6;8y@B3l+HUXp1|Wn*(0T=f+xBj$$cJ7#s@ zn3l`gTpjE{K+{CwNFL1YLwPX&B+YpoX8egC7);3CbyhpMcUn%Mk?vc3Rn}u3MC^%6 z3{J?}CA-i=;J@_{efA?e0_@_{yTRejo1_u}M=54#)QT-AhCZDyVuYR!_FVuN5DcV~ zxqd=AMln{ce?$vT1AVp;9C-N0G)yNRokdla;b*z>%g? zky>3L4b-o+b9--jWl zVmRZ2#A@i(;5PuRkPB1Xe-e?9=fD535et&uyr3PYBCu(DAiWO^lyPmpVQc>FKn{1V zm#@+*tSv+7dOj}XH{qUgp4BNgpr@bNM~M+1LBQNYoIrJ`TqL!|m9;CUQCRp2{-1<+U$)RHEjmdID@XzHXrA$J7wb+x z&Wgh110dL0E6Xt1IoWc9M>|Luh*o>xLWn+E?ihFeh(Lx1FpPPbK}#Mv6s6-h=e+pI z%Y!Q3(dk^ax7<+ZXG71_40^a8VwLiaXi^=|wQWArDw7F_sFYro=$ooqRBvYNfel!W zRxgE!5I}T7^s$dPN`vSdf2QUq$Oz~6TEBk`B(yvV=Rwgf2{O%*-~RO7X2=1I38_e< z`yX12^^y{o$^{9CiBVyO*u^P%-EjC;Z9RU=sFk8i023ZH2fQgQ^$29a-!hlkJbJonk&HfOubZgw%PPpTO|*ZFr=RytL+gW{w{dZetI}MqB$8HCACPRzyD}BqT2T7yK^9UqZ(Y zkLdW}_H6Mpa3H!11*IlLU>f}AH)%$$%(pddXW1mJ$U?il`|F*_g2oCzJr6zxXpCi` zuRG&e%cZHUeNnHih#=_KhN`y+1rE^MG(w@+uB`f_m2%QB=0sGj4s-t?gNy_*_7x=WHB;po?LZ;4mRDk*5;{|mw_EO z;&`dl$XmLFhHt?8UkJ(R-^byE97gGwdv1LOdheL-t20*1Q$6)v^X14VrXQoJ zl*1x6JI$&GdqN~}a55;^9~x-=q)4dYZCV<*H#f0-T0tz-O&< z#$C>oH*&tlm1IB9p2H(A`vPBN04vMSSIKB7KsDRD>@i~te)7QPXI9pTD6Zv75y{7s z*u^>spZt(I8?qJ2Kb9K5EFQx{Pk^M);9KMNJOmz|Dt2z(ezq0wZO3=Q$Q5+VSp@cC zeFAK-s|XF=zR53FOc|Q?XT5ry9~zA>{-~H;%$J&dI60#Be_rpH$DxgQnFje^1 z@#TooJn%s~If)<<*4EWe%-4~SUhUcykcWt(oiuH}FXU8M_He1s;H9H>ttQ}QO zPEM0#MjWHIru|lW{qaVFeb$-mCkwJeI|4GcJi_5IUH5k-)QsHhcu|=b=&$6WWSK(8 z93%q)akfFRx6M}1&Z}N)X|*ZU<%Wgj4x~dLfA%0DKCX|Ykk~%y+virCv+y5XK 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 H-YVpOW~%DA diff --git a/ios/CCC/Resources/Assets.xcassets/AppIcon.appiconset/180.png b/ios/CCC/Resources/Assets.xcassets/AppIcon.appiconset/180.png deleted file mode 100644 index 37046b020367b6f0d7e500fa8a42568adac3f351..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12900 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 N002ovPDHLkV1gWhzJUM$ diff --git a/ios/CCC/Resources/Assets.xcassets/AppIcon.appiconset/29.png b/ios/CCC/Resources/Assets.xcassets/AppIcon.appiconset/29.png deleted file mode 100644 index 86506571b5867ff1d20694956bc613241cb5eae7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1476 zcmV;#1v~nQP)Px)en~_@R7gwZmRW3+RUE~C-!@A-W$D7!(gjKjg*GiMAXr=yiKsk?JP1)Skzhn) zOh}B&tKrGSH++y7qljQcfut^&AR@$cVH2b+wq?vF+(qkR%DQU+l6hYg)l3&^uCE z6d8_2F)a&KQSo}*Qvxfpj2?>-)nh1%OuE;L`2SREQqU2=XP;cpy6Q^y|4_%Zu3KoT zIssTw6vB~VN{aGXSzbnOe}Kk|moZFp6nH%R1W-wq356rPy!kou=Ff8qJpI@@zCKb% zOUHFQ?t2}}vW!1Cz=qnjYnl4>oS#c5VH#+&^@G*R8X`@u90#5)Hg$9N~y!Xay zL}M|I9{-J~t`kcn#&jvzFbspo*VM3U`&R1DUF4I`_Y;pNn3J99bU&Wr5#UL$jL&(l^ z=8uN6d{_4?>0S?33hK1<3NsCcLX;IRrn%O4QCee)~jY$|$NHq*188f)BWEqjntYkS+cq9-^lT3df zWvzdco`_>8iUa&WprTvRod6c!LLbF4iTW})T~{EfQl0fdW32Ay!$o>j{Zn<`!zI8BQ`Kdb6Ewq@(ZztqojLWL=tB50;bN-)FJM2 zQ}RzU#Wy>MPerfjRK(ybFKl9MbtOHwd-3_wIC}gfO=r&&&09!g`AQafToljn5jG4i z1c%T~3)`|;kmlj}h4WBkiKhM_^}RuAFE)@K4kv>`oNp>4iP$p@b2PL?{)%{1O_PQd zRpc!#Wtm4qw{3pE-A_n#Y}@4fyu7+74-GgT40E-ik=5-j#MGpojt!=L4W>ljh*2cl z!f<&wwY(B~qD=M-eIQMz edcQvG@Badk$GtpVrXN250000Px-Vo5|nR9Hvtm)QMxlrYsSnGB-qq0bD_7g^mJcExpl}(gOwBp6hor?|XXS zP5kRBR>|PoSv^<y`NZ2*SRpE{5+ak+Iaqz*Dwr|OzAV9sA($ESb}LK z#jJn)QG$LS(O8^dFqc36^bFCq*?)^VR{T?;wgqgpjPTAjFH`UdvB5 zZf5`CBa(^CiWG$*QsaT8OL*|}OL6Hs&24Acx%VIJ+*ggRsl?;STW3&smXNqGG=Zm9 zf0gHdxrxTscKkVBw!HKlo45U$zwFshFgI|WWr*AomQ*kypI<%qJ>J~0lP%ldB54{_ z%_w7bc^TVw?!L7gOxKoR=gF@<%)+V)8cw%xM`;Nso0|FI&t8$9I8uo87>LGLP&JEn zkFAoaG7yRI(c&WZR3GByS6@%%@Gv*XItS%i$DwZ^!hN5-n-%xp$A-;YsX2CB-dt1F zVILruDGHh>m`IeofRBY$v+xH3)HgPBvbj|%F{1ZnfX>RO(|#xbC6b0TTmgKz-3wrf zI-ZG$Lg5g-a>Lv?i&V}E|OR*E*~Z;*yqcUokq&1 zs=POM5xJodD~b#FOi2;-7yH=V(ak%ZVH7P@?Q--oOg=ZckeBbA&5w>Y@S9Vus4ktw zhpX{N2C!6>O!FGEiqqgqizl({-h1%py=~O3f zD8QMP#khc<4bQHZokaB2S$9n5rA@DMy1f&>u5zeyKD`q{D5i-MPq1=EDQ|U!IUk9k zxLwys>{1jKhD9Kf`stU_)yH3djjS$O0S<1h9~n@U^H zr~p&>rcxLR@yyyaZ2bK;8k$>4B$7m8aWuy!;tz0O-eT;`T@Uflp#amzfb@R>#&Nl* ztUoIK(aiA1Q3h5q5yz>TIi05;TZP~6$Fgi`9~*xAJN6u`CFph2=Su<1tW?3Qc%Q9J zr2$qPucNrD;~MiGlR=lRkxUx=^atzMcc_*>y!|&hLM2TTkxvP?hw24)V(6}`hAhlk z81gX9R$P+RKNw;YvNLHq^Xh82?LrTxezm)dS;b;ZUsySdr`LR)XI}mVrXlqFQxLb{5Sv`FPC%yz!Xq z;bRtwqNXISESts)>(|Ph6XTK?7(8ANKi~8Q?;flr-=%Y^bQ(=l%g~IZ>>`C;Hf~lF~0xT^qBq5HVn#$g;Fg2GW6!eCfQ&)?bQ6K{3=n^}Qlv5lrMWoLl zqC&-?D3LS~7HoJt?4P@s!eB1nET2N3X_M#HsR{S8<@6a;U6*Xxmd&j3xqP9dh`1OW zG>x5|-5l)gW8txXk$>U*jR8!xH3v)BMrt%n<&`5;QKgln`|z3K$s8}QL`x)?7v_6+BRNAVfUp0dXB!&{KgX`hp;y)gV&B1*Jpd?QB#66O+J`D zgXYOosPubji$u9>TB%J8%|YRRBHV6rd(X4@WSt~J8K$ak=+~{WY(ujw+9sFMP%;%f zZm=v#d)jp6dQkwnj^;Q_?mWZv#uGTUgQKWdrkTwB+z`M_YZz`m6dbrrgMna>w&D`P z`61#S?^VmO9b86|@s}?$xucy>Zx~Y(J|MUoe)~5C@VXH%VlmVZ|yR*>fqTTM;SSNiQJH~x<>I2v%l q+%+MKA^Z5R1I!-E@ZbE<1N=9*B@<=6OalJ^0000Px=FiAu~RA@u(SqpGfQ%?UUbpMn42@&1Q-<%p68)z8e_m} zk>C%8VY6CTAfpX{*5G&^vZ6qi6&ANe5@E4e;%jBGLCIjV213EoLls5EvL)AG;iVU2 z&4%CNGw6>$YyBAig1(GPH-JIdr%?b$5 zafr$?rc{>W=l9)-!u&jV{Q>0X=HiRiHaz{@X0Lz2=zJQ*9Ys%aYg=&qY@z;z3+ zNc`Ji8}in+9eDAzHxUR&AQ01OHYOdItbh>Jw2Qxg`Uw{BuQ$JpNHhkI%ZW#SvK$>< z-B`VDBV0}gsCGuWWJQIlD0t%jd-0t)b=dgQpU`-q85HrHnwhwL>9u(3+23LNt_HXq zw4R=Jxl}M2fe`14sv^(h#;eb*!;>2}VauCuV_Z%SqOll?3kzVkS>X$YK+KJF34(xJ zw+pp1reo#uJMip_Tk!6`cOn#tf&eOtf}+BF1jCVx2|8*Zw7(Q!I2y%@+iu2^s~6xO z|N0Q^-96~)J&ynE*~=d6bl8SvgV-dIa624W|JXw)D=lV>Mx#;i9FO}R`vqHz3SE|E z5a3MLn1CcpfARFIF}{sF9ddOePIbTcIzPQB=JizH$01v7B#lEnx` zBCH-nLB#vJ8xRUdK=nhf;nHb{N{z-48Gxi4Xy>U=NpeL>6OS8fR<3}ms`%0BwXj*O z>6K=X5j)mD_ApA%DMCzE5MjY{Sn>E%=={}r#l{ZE#* zvZ_MYbWEu%L*EH6tC^9&j0p%W7>mi+xMmfK#}{DjhUd}U*N2JaWq5G;GJLS-Bdpo* zd_uL-tBeUvRW&9O58QbxuD|L^YpVGv71L2x|;Ej@5_HAHeNP7GqxBEIj$l^XTgBV>Ocv2(#wQ0E3|r#<^W6EiR%5 zFjpV&`QfzLSnZ5-jfoL+K{Ei;nKfM>Y)vvTVI(|8&{Xhbay$=1lpyN{R9ObEYq0V> zL`i~7j!wsS+0ZHAVY@0<2iU4p15b)%nFRuVzPY$9sJ2XLnU>LB~xkzocZ20~GAw4w^1PCF0q1#o#~F)lAEz$3f&19tl<^D&8(u4uTvvIGabetg#N z!(G!V@W-ALu(!3LuDOY&*>G*js8h=vO-Z@P52#f!2PG!2iNX%LbFjN+HXNdWa!JHx zWkr}ES+4AqCfl{J<%9=iv?0FhIx%UAu7sXij4^fr6&b! zvsl<o#ovupYc1uv`wfJ&X<7ZC1*m2(F$|jzuNoanFthz)7h! z)Cm}fn2bkeRU^l0!8@&;ST%DhZrITPzh=O&SWtba8C9(=l&eeLg6qrtzC`Q z&MrLg-jyr$S%~=DX!ffyA#shcWhD+yOh+9@X%<`LN2pVmm6G? zWX4r4^C?flRal70f1B^;ezY5|pdY#*4)LRmKxjv3XXv0|=~Y*vWWspNtGfX2?W||# zQJ)_3w;X2gYe24d02&QnN$Hst5Sk&z<+$<4 zy+4G39cnTG!ltd*JbT zp^M@WdNTqspG&FLH{eC}qzb(9%r9~GLyx23Kr?dOE{KW4H2SWn>u8)+hyJ_*aH@LJ zjR^tuRv8W!Qcq&oF>1nmss5-&Y_SLoF2x)({bH58fi&4YboVmU&O8sd-M@+*;|P4* z)XZYHC^9~oIvqzVCW1>0N5n?4-HHiT3z|;&Sqq}2YtiX5QmEuh;MvhCrL4#A#q7QH zr${%$nF$Ex1Ep53$Aw=#x)K%TWe5ZUXz%J_YDK3Y$NT&7#QNVLDl4$)I{NYp(Rh9> zK&eK-MP=9>HWb?}XzBOSA@2}oOzHJVB5Lw-2757)dEh}YlQ#t!mW3j?6OW;XmT4+Q4?r9cI|d8VJ!y?taRZ z@P_0=HPaXmOrMF)l2X7Qpdx}>k`M@nI@UaQb~v69zck*~*xKuwXJ+n+b*-xTCZJM=GiiwmIT{Vk(-s2J5N#_;jc$DD7&; zq$7tR$#O;zqfV`{vP1WgnMG|j^o%b?Z$Tk~4i{ue8f1pXVn-y5{1XEx?&*X(;AgXY z@~l1_8)pniHULd_=vau%EoQMowpyX_0(e7bJ8zYv3^090Acpi(8Q4Fq)EaHm#10)2 z2XAaJGIVyanDv;Dbh7^3tZ}!RcH&RLsmRLq-AMLh(Mc@BQ g899@fzcxVr2P$xVeljpF07*qoM6N<$g37#d4gdfE diff --git a/ios/CCC/Resources/Assets.xcassets/AppIcon.appiconset/57.png b/ios/CCC/Resources/Assets.xcassets/AppIcon.appiconset/57.png deleted file mode 100644 index 0e2f0f9c8d11ad84678b5ef7df5c141327992712..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3348 zcmV+v4eRoWP)Px>&PhZ;RA@u(S_yEJ)%)Z~#FmYPD8qRkSEmXFx`4 z(W;dyv{h#0s0SA7V5M~0ajdmfs}(BPpa>>`a3tXfL=uAJf`nXq|HpRTZ}Z1xNwT{n z73=WL>|~Pt_uKDzpZ9&<;|n);;r&5;%NKVA`14`|?WyNx*oXhd&U2EXy#POb~b;S}=%U@Y0V) zz-V9EN7XdY?}8vOxIwKS`^HiXgm14i*WB8QTj$Kebp=zge$y7Tws*p2vof%k0#x7E z?e#(uMOaKGsHzIL*T;ZbOhyJie8ub)@qna*1Y{Y5670C+mU;NWyg4wNEvTz+z|Nw5 zc=P?OaCy8i8Vqp(rF~^Zfg}jHdG-vu5=JIX4nV6~W|?%Naa znBA2QqNpkotQI`K@^Oqz8-e$?7ox7A37I3)aMSFWI9*qdN1j=ac9#pHAVfV7u|m(0 z;jCsep8feln2?);+Aq)Gc=ajvH)q~>m`o;Y{NrEn)`vTKWHcJPF@q#GZ0qdA;sv*1 z>5uQgy~|givicOvCL=svAFg#yz@quz$IDyZ!0CoY7$hkwNOEhh&(GZQ`KKSlHIwr2 z%!|Lrj@?Dz`H+!PQ7u*v`M&*l@1sJ-?2)Q!2m%kEKLAbDKq^FG z5N-7fB!M7{lMAhX>QRgtorOJn_v37H3(mHj$DYzds5w&)i`fV*iW2IvJuEp1e^~n~ z*zF1MdcBZk1qlguw(pZ`UV?&b^eVv;PGYmW97OHC@k6so7EDv+@pgNAVpTN z=E>!_uHYK1dF6F{xN}zs7=ZNDp;&(ZBJA0B5bu0c2rGp`l&UHcXv`^ubtJ(cv+k;& zJ%DScPDaUrGMuh!z?iHIvj-?oQXxPoXVt??F>T5uoITf! zs+w9B+Y`o(1uqDAVbc~C?|p?qcQ{1GX}lGWLY0Xq;(K#u;wN{_hs|om(c@LvzUy=R zt8iDhA!3Q2@E9e*q4>N0+I)O>=5(YEO@Tik<8b8(mR63})W%ftFoEn3NL^v+=ed^i zxP9In_GaN zS`2TjXB!ghy|H@PK?<6NQ|Y5nJ!&*#4T^lhVRbiV2}CE0;+z)%p2Lvlvlw^cC`=v? zW3?xsmlY%*4C2VxT-1$72YkMe%Zb$aM_+tb3JXdG7`+}$I(!h0_O>2@UKWr{Ly|B7n7rE|$ zgJjYlsuX%Grpf&zSw>Ap7LI4<0A4TP@?h_A>pA_AI*%GM5)H@9NLv1)MQ#mzS5U(M^o^1N*PcGgs^D=EV-_a278 zYFI$fR21wlg4yGN#)rJ2-yn5>DM^E{Y|)*VIw6;JCavx5*i~GLx3}(KO|(eLr>gK+ ztSFjN09AKuMFl$DSUt;$R=t4o@FRIz_ zNeuXLDm@d&#*70e%Ph$oXs+rHV0rFnxD*AiSDpfIG%!{p7aK5ZL5y`+(dhM~&FhE7 zC?U&cK}DMjJkK%q5;{AOf1u>6j1#d@TwRDh0gEg;ihTUdk^=g96 zih!boX0Oau6&%W)h{j>5-5~Yv*AoXxM$|tiZD`Z-RpwWL0IBq!OMz2Ac-yN=jeK1>D@oXjk9N9$uEA54!4`J=kfWwI}nNu zRTNR=EP&TUV~p7EOX4vEeNRx5aP`r0jHvq(N|?&V4U#~RdM;VG0E_Rq9UU$g8|70U z$lmMd#ImQJMN4}J>o>`zNEAqPd`8p%9AxgX3Z$Jm-9L~NkHnxeHwWXhM`OgW6x=Xl zIzIgP6Eroquv|$^GxdMnF3WK!b{4>8wX%dAu6wLZ8-SZD#-u1>;^9LW)>z*^kSzan z&0fzmHsPMzZpNxd9>n71D^ON>0yc{UX0xfQ_z6`%RLYf3oWfcuPKk&~5))cIR60GW zY~N!#jNn?N!(%vNg&)F zFK(GL0}m~}hh5XvH#DNQzJYbeA=xNhl;E5FGGt9-qBFdq4iklLfI>LbYo^X6dQ z>={gGsGQR;cBp2hlJ0LGY{S-1_H>UV$==12^U-N{0IGr%qX9NafLm4>W{W7GQ&w>< zAYTBHh|&}dISwm+m!H?o5DNp2!xQ@sqm&F}G{RX{iXqKS{Ri3Q8LVa{x8x|{Ymqn0 zL5PwBsp}F*??CEO(@-&fBH;64t#dpIh7W<<6_W;m$ES5oc=})^xX6nl8bFHzauaN! zf;7yf$;~^#V{mH=rX1SGDxco6aLn%7opYilbOL^%-|?D;0~4HRPELU!2f*nf~> zt{s_)+SKnrHW)))1&uHwdO?=+=tW?HK_s1T!By2&NNhXLCVe{p(aQb-1IgmA4{LTC zgT^K_E}?&4vD(luEEQ*yhQMvHvTB8a(l^sonCZ^4y%oco8j#d-j^)9~QRLSOGM?Dg z1&PKNl*GMe3+q+_^zSiUF-(;VjWvt`A2XmTh!meuL5s z7o^u$ThV)z|GH;4Jt*im7G$JFLbyV=Tal};3!Yd2UN$DPx?Vo5|nRA@u(S_yDf>Ei)3{6;sgq;|`qB0c}ajFy*>%x?(rPCR= zN?oZ6ts*!TYpDxhJ9ZSTLKUfkY(gQD5FkO8ge4?~>@VxfTkhKV{+AcCyd*aX7OVU- znISLl{`a2me9QUIh5N~ZMH+qpi@OZ;d&cr*M!#o-;xeNh8SUDZx&K4Dbup@U{(P4M zFesn|jOTf%ng&hlI~{cs`Mk7>J)dje>%nt;Qg-z4IasKeo z-h){K0!knoTUrns8G+kwnuRSp_u|a?GK7bPLTF=nAP>cJ928ZB+v6paEL-Sz4jgPY zE9mcCGe>Wh3<#)C6p=YH9Sd&05!0qj#F>)w_-xO9e7^4h>YG|%wV3rPh5f+NNhDPM%7hrF0K14}^#oYVeJpu0*P)Z}O*N1!O&BdZS=cA&s3dc?r zBRVP)6EjDnqOuy#y!;x@mX*U~H0lOxFc{$Rc#)Dg1WObT z(vy$klO21o_WjLp*zLONic--liiivg#b1^^ji|_Qta^Pt4&)a=l4V%TCd~TrG~9LT zT)gnwoA~nRG1x2?)&P52g9FO*aJ9NIebRWWcw9k8!4?46Pmy&Xtv;+Svd{h@FA%Yf(dMYH{I#1@o}*j(PBSJunGI zNU{Wr#fp_{)?w53od|b0*nMSL2Br8w$C&Qar3a@PrG^j}6^UQpa|f=TG7-GNz%Wrw zt$ptU{Oj}GeKw4adyPmhh|P|?!mm(LUeR9bbZuvVYKCNyy=FXgf`8UnR z(1bWt)zqQJS&z_=5WKx{Gxp}?!%nH)Hc$1=(m?~Is8WM48wK#Z0Un=^fl(BibsE;K zTn0&!u=uHEuvjd;GC<9()#JqtGp1tZ^lT)?$08{q9(hL!p=!WK+jrr>;Q}T`D6k%{ z4;G6Vl=6M8K>=kTB?+-nky!D>!+7tbe`Dj;?FbKbFm`FEuV1wcKGBE8Pc4VF51@hc zrE6)7+;Giwyzs;$*tB&UUR<*dq=RT?ilT`4m}p#obvAb81`-kKz(b4f#*FMK z?O9ac(1^F*{U^5W-lwY>1xr6l(K**%jl1W~MM8Xh`&UZKFW_$*H{*-k!))y6X-WfT zG;mj9Kv5L5xLR2wdF1|uSiSBY?9R!BM-cuWWW>|szE@j%??+H10IVNvS0+y0cJ^r)$NAe z)eMW<%|Ob6z^?5J@PHU)57q-s{RJ2RX_O?0CNrwyhoCZc2%1A2Py_+sI*t#Gk;fF1(g*-kl zG|D}WgV|(+*<|W07&L!f9h{VnR+9-6!yWj;pDi)5r64N$p#es@i2sSfhgMfs}a%3JafFyj=oCd^bH>aNC*g%g83uRtW zVq7emT`uGm9LLvH)y&gjrb8Q>rO8*|6cccsH7Bjiv`zB%VPd+&f!8>tQH2W)gFSJiB~~w z13?c!KW3iC9YbUBet8W%3Ui%$K6=pw)M;s?8U?662@nh{Fr<()gMiTHMr0kyZQtXf z0QGvkShM_TR*S!QY$?LRLYdH~&jmqXrx)s=tO*TCM8W8>em1)@Mk9lm)UlZ62gmA{ z)oe%2%W)878B_DWgxTYU#`A+qU8)~S$LcyKetX}&n19nOEcnf1sH}CuCgC-T2K!F=4plf}4DUCWvgF=~<|oJt>wk}J}J0`2qR^?reZWe_m2Fdxx% z)lfQg-@q2Sfl_U@w7M}fdoq?Sc@V0qKoli5PFO~AJYIP94Sc+7FTz6XkjWaABow8M zz`4})Zx<+4CU3x`f_y|fYgls{FryS1stdc-!i;JHv+9{8*z);qY}oQC!W<5k(qv$> z5z&^qB`H6`so|r*Nm94e?N)1g84U70He!zCBDARyDv6ISC83+qj(bZLjaP zpiVuM1C!Xj7qGFY=l>aX9pFP^qp@W1BE&^U;j!f_QB&W*nh`Nh-Irb^u+23UKC=}$ zld>VTMLF=$CXT}|Qxmbiv;tm5VZy#gZLj!`ah(^(IyT7*O%M=OUx!IY4?zjiar*_7 zYLwo+Ts?U_UVQRVc28ANmRF|nYk7!ewRagkw=H2=F&>It%Cm^Mr0Ud)vsZRQBhH`yQ&r*gAwWHijj7lNUV|p*5U|5?u0DAKp+XnQ20+hY_Zhs{JMb&3Q5K-L*sBy zdJ4+`VwrxtJ`oQUo`#Pa+J%knDV4#d^IWq09%qW3`Oaq zsFNW^Fu*CvJv$3+HzNiEY!Miecos=QMqxf88l3F{;i59yjjcXrV5e*dxD7)RaWZ`r zM5BoT4lvP^LDv3vN^L=44&a!R$JqI^qYC;~f%cc-0JC&_D@jd5MNAx2!RSv%vOWDR z{F^kT8YY0`V0gVqzEFmgug`;58fLOFfrg}q+{=1zY+i+s7rcyuFZP!&o0u- z#6ItLCwh6`(ifY$CE#E|>AAk0^)BXEe_tl`bgxUss2=ba^E;P;Ud(8I7xwzWF#2B_ WAg-0ba>^6{0000Px?zez+vRA@u(S_yEJ~0Q<2S1aU zO#c7>{_lC8_kG^ugZuR@x9j)?UEF!VKXbOvGyF3r80Q%d#&Aa&=YHZY5D~+XcfvYNFq@1xR$d9C(Ew2pm;rin@jMSz)8KZyp{g1Pvm}Zz84Msl>Il56p3`l> zPL~^fVl7zk;JwJo%)o-@R-mY)6n3WzQD#$E7w^m<1h&oLgxP4o-~ky(Nlbt&%P6m^ z!HMcx2%-RkB!yf*lo7fGm>8UO-3-jU_G%E*F1H&|QBkO?Z@}`EZ)3~e{fIJ|pmou| zd7finFB~%(ch0;4g9c`vwu`P~!#CTo^1TnxaI%?sQaBe62E0pv$@=!THr#goHMr~6 zoABxSjrh-|Z{c*gkQm))TFxU`&w%7oDu;PNTI!ja+<+&6zQ;1kPGq0?i)w79COc>hN`JhHJxpM zeuxo?fekHPr1DO;2Nw*>#>ErHVqkh2@^f>rZPy-D)YhZEp%I^K*u=n5c#yl(9!y3< zM4H%RhUsG-kBrQ;6fBAw^bm_T?zd(bz|iYuo43S)Ce zA|^TtsmV!9xK^$G1h2pM0gNm!hbcyU?wr&&9@&}cxM$YQ@W={YeP<0MgM`MD%{Wqa z0;0f&^_E};?iIi+jx~)jLAxN9C{U~#w0Cl zYimPXObk9+`6AYSwjRs>{w~YYWSq_}@)lW9kd~B)jMNm2&KZv1&bR{WzuJuTo3}!d z6%>`0Ll6YG-JbSJPLxDY{D-@G447i5)!v4u9-58G1^Kw+k;hquMQW@lDz2M86?13b ziDzD3iI2bd3b8TKAp!eCgx+m)I@$BDE_wnh%1a5r~Vk;=f;iizTnT8Tr})ACCwy zE8cxC5@^b~Lk47G)(zL-;)&zfow|kwZ2V?BR)4yV)!3xek;a;TPvk*Vvc_92xNiD1 zOqnzeiGAal_moyt;*<4XV#AglAeR<6u6<8kDL%Rkm=>oJ(B+olbUN|)oVyThj>6L~ zy~c7XH4?;DSHb#?N}y#$W%)iP$_z_1g@uY!Haja&qRpmo4s*u+K)3D|Uxnzx*lMCh6ZO$Q`RMZtkRu-ICHf<9+}NoYhx!J!eOP@R?uLH4j*`uU{= z_~VX4C~a+HE~^Fs&ID1_kkcm?36g+KHQ&>a3pb`E;j^X|XsvdPFWd>q5ZrrpJRn2z5D4i)<9f}=YQ8BuY z1?w)Ggx`I+15-2l;iBXOT()jA97ZFO8|sjEun-D~*x3S11&G@tvkr%HFU^^#3}o@x zfhkHKvSh%Hf{AeQBJ$&6Fn`QQ#^$8dBosC@LDqD`)({*UJQSSUjYN|Xlau?hjV{O^ftL=Kpx)_0(J32_*zBz62ox}SR@5{+ zHD(0HCiR7x1D-u_6dzXBv&xQAl(nT9!(J@S=8T+!gW-7e)Qq0(}9aYV(0F7>hGh>jRp;%Wv zGOkQd#@yT?nDW_Xj7v_y^J7Qg>Ww?lq^Mr6;&~M8+lBa(P3;2KW58_UAu zFT(K?m00=DwXoUSkd@J&4e?%Ey%xpg6|7h0Wf{$V;;}QYfGI31Lw%(w@wi~*Agm~< zM4i(EodZIR@Xgd*kfF#Zss@9=LnUKSTBCWIBw=9raSS_lgjH(vw;lub56UOx<>1*T z=3?HWWvp3`v&OQ~4;e&~BsRp;K<+G~EHev7h71Qsu^!mClXy{e6+uJK4CWI^dYqi6 z-E|4DC^B}(?%M^`CtlqG+%cZWo$U@MveMJ=_VUGeef9fzW6ejtajMQ5cDmRE)2Ggd zhvlFmJu@g^CPv|MaDeLi_tUX{XTS42qMQy)+`S!~>dgY(0?Yt(_^8zq4OLO`;#7+bcg&rSrWPCfJH;abE*v!)^~wGIFMz2bnY4R5jBe_x zdI|7VQ!YZRC7O+0Mh?x!hwHvzQxI8J@acw4aJoEfNZ@yADmJRp(u2D+<Owad1_M^t*oeiC%)zzOr(wn)W~08TndM$OIrI<9{W%;ZKp7R zr2iAoFIuF&H(hlZelvX<5)=BeVfitZa}5kEvAk>lL2TKxA10HDECAVHz}B%7;gJm9 zR*)rQ>Wg*UpPi0(D(cYWA{PuZHDTi<+KC@HA*CMKI|R^03Ax|xLuzex?*XO{zBqp# z2Bh~#i`~wKYIHzN%1n&|of5pW_G7%f>U~%(F|6&Q#^Kajb?>s@wf+6$fg zQei=h664+u$(t4Zl^8V@tlaapg*Iy(cIJ-<4dq71Td{Q9D7JBt=UC%l5_r5?REpJQ zRY98viQ_OTHX25rZx=a%1L|EKl-eE8jYbSEIg0GkV%Dg1Ht&iEa9|-%%>e-o9#PcR z@@E`{_|>{-SPo94XChA5Ffu-lIj2KaVWMFj&#|7k+Tl85`oYYo>qs<6cyatF#25^$ zlq8QLhBsH$V)5ZJ#K>-p+p`^lukGwi3%Uh3+=)W4F)dk~W>35F$DuVk25`BVhYYdC zpxEwUwK1!a16_`yF0oAG*tTd3c8@NA$6#b^+?Sn!RU}$&uV{tL$rSH_Un$|U9a?-C={~T*x}(4~djz=S zVv(}$2kkbQSqD|0l;Z7=*{OqXm4FFmM**S+0fLB_wpI))E_yn|AtZ#6& zT+Brxc4r=>=?sJ_N>F@50rCVI@3M45rE7@el^-48P{P+f3Gt0Px_JxN4CRCr$Pn+tSQ^_|DRGjs1elS~ql$qPsbL6VS!nDA8N1CWQ-T?J}e^sJ?7 z-E9|ES6J6a-3n-{BHOKc)T-6$w#t?&2VbR#2t^@4APEE#LP&swJR#&YuY2#zp5K4w z4#_a@Of;U8drpAE+`0Gv|NMXN-!F=re{`=CW0zk7iZMWerDF_G5bYTQGzMsR26jw> z#w2J=f`&&RniAwMU{Z|e62IMthh>9?6H$IwAx0gLLZN`u89vI<3NWgG2#n-#K&4bd zNuWkpI~Y`j8*K!K63X(T0!W6TQYm53YB6B3LXaeIN+lc)N7O-)l+q6!h9pTKL@JdE zN~MxXueSsbM>>ZMh!$lR1YGLr#nOfIu<9pw%8l6 z+oJiXIZ=m));|wYvXE8DkGw@BLF_aw7L?@Y;>x?hk{hl? zP5o)Kw0AR5Ep}-%!x=$Fv6hIVdnG#l+Brmo}OMjwC-6noNZ?D zNvL8^fGFO%^~N$3=1oCKK|T`WjrjY43iR~$L8sHA>UbSK{c>+u&-EusBL>K37eMg| z$8k&r98L!d+~|*cmi_}C_@^IY`>s7$|KjhM-3S)I$s3SW?3p#IapQG!m_4HJYBU

1yvsi72)9dj5%Nuc~ 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 LNkvXXu0mjf*Y>9* diff --git a/ios/CCC/Resources/Assets.xcassets/AppIcon.appiconset/87.png b/ios/CCC/Resources/Assets.xcassets/AppIcon.appiconset/87.png deleted file mode 100644 index fa31931761c31de13472f04335be7cba2a9b2aa9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5655 zcmV+y7U=1TP)Px~(Md!>RCr$PTnThk<=K8_Uy{ilNJ20n5C|j$5(tY@sw{3rT>g4m*A}%^Tv1T_ zyA@oqQmtA}1^>SsE!E@iE>@rl3Mi1U1c)pl0YXAZ2qDQNnf2b8`Oo{_xnUBM%$5ma z^PQ6eXXf7T-tYO|@A;m0`9?AOhTAOTX1K>sw+W~L~z>OpV z5$t<_a|ghUAOaEWdcbmjY~Xh1btoeElILsJAz5yqF5Q1R;1LDapT+&u!9S z0r-f5t55(6g%W@VZg-$$;?LfD|Nh4`DG>u#p-@0{x!`a*p;RcL*J;B;EsVQql7X|Z zdpu_+I+BwS5pY#XB?B90ipHqnnXp>zC_7vU0-U~cx!qwv75J@6C9N7j6kTw+T_8-A zN(Iy^73ezx*%#=pJ%tXZ3og-xqWm$KHEk-d zp7_{Uwpy#rj+&G8*t)9}UwykBEo~MU^tzDV!ynLn1}<5PAPBhix~p)@FXuw7)&L$i z8k?GVGmDRnfkrFw?v`yOc=3%@Y*~E?FahfnMMUX!xcio0VfN22f=1)R^&U6C8?4k0 zS02Udt5&1z@DXUW+MogM7jTKcELJP7nlT-Z-uruqqKGdyeTVg%x8hV|Bit@GVq;90 zQjm{pFQ0|@_&99(ZabE|wgM`(8cc>^Hkw?Q%MG1YjU@~2Mp5B7?y>S{6*d>|L{&{K zoT7k12?;0~mxoCO)U}ji~Eq9c_O(~Amm|LwQn+mc;a`OXIrJsuxD5!g&e99+p_T!=F0 z@!FFAM#j)|JpJ-=eE#(o3`$Dm@1%i&EsKCmh>Jl@-6`m_S{`tyjqViPZaAF+tTr1i zDjbKG|M)0R>boDW!LpTaL9f@tXf!~pA%2$xncL&x>n}(hjML3#RyLXt`MOlJ+6b3x`I&-%jMNldd)W+DDET?r z7?nK&Hk%Ebww9pXWYB+J54E)fTptkLFhB7fv?EPd=D zL`O&COj8qf>?uQ4%}I77n#^WY9IHl6{VC=)NdkpR2BcR>R#`E9LIGZQe4&?_+;BLY zY^}cSi?6=HGq0~ij48U4>n~HaJvfNOf+1)+; z0o;)eK`ONhf*`VnCAwe= zP^l1YG-CRs0^EGvTqGqWV#DUGc;@vLA?ZtbrC4k>OdU5CFFo}LV@AABYJhm1B%a6P zW^h0H*Lu9P@@>SJqJr|q0-1vNC>2%PL6X6x_=C(FmfB7sdntwZc zboV{^9IERi^$@J(%3#oaG%;>?pi(HX?6HL?$j?Pnb2DCf^DV5~yp1KGPNU(lqqMpl z$QY7>1-IRTueX+9-IlGqA%^k}5eHXxfB);UnRxKddCYxZY}kZP)^9{ZQxgx~6cvT( zlM8X!Lf0HL5ltKAg8cnVw2OY>9l8ToeUx-1;$#B^1_-e~G4$#z| zYGAsEHJMPDmxHS>oq?h0L*TSKF#oZqQCU+P5>rqS6Rx>pHhKw%P4Sh>2m(?c%9LNJ|;q5s{-vT~o6edk>W3 z!?pj$o`Z*(62f)EyVby<*5`IxyWkCgQ%qN@R^zUluE+Iruf)l^dc6Ag)i_#x0(GYw zS$=6$sy+u+9w2R4q#lS{6XRl$bwN6k6B2lmTiY$Du06@I4c>%(Hr>A7)cVYFeP4{M zl{T#WQQ4R^Z3>6`K3KPbHx_yG3YTa70zo{iR6-C%jv-Lklb5hU!J90-hrHVS_T}e- zh|@yX=X3B}6k)eJST2!U>Mv&%&LBNrnWdo6q1z4q7xbr)mOQO0?;pV|XYuH|a9h8F zD_e;is|_Yk70h4>Fs0iKrQ5|Di>TH>(CXmSYT;CC;8v;Fqs5R%U%x3Qx1);qsb9PB$!)}UUve?4fVVN2;^X`_$L7_0jr|rtWu#SJp)zg8E{bS zmQv$H3tsw^`M0OlAcM!(5p4iSXlcTTW0go~Is=hDV~Y=rkI#E>2?&iSpe-g22eU_` zDL#SnM!b3X1G6{EA)pyTwVEw=Sj}-{RaNkW5g!L)#pgA+GO(uxrDA_hE}R-IlrE9e zFp?OlXai z3<2Zv0gvKiq&Q;D%_t}2*x?RE+h*BT9oYiY)WeY<$$>y3KOJ8-4VON7M~iyh-9!l_b2N#If; zpWT5)W3#cOC=bc2*TAY!cBIS$*@8GgE{Iq-CJSv22UeC>Lv7SUwAry>Ocq3s8_N$J zhbPL2w7Od49oP$(_Zi*B5PDcR5pjP*Tcq9GrBGnkxQVP`6=Xd!a&{-?j~$Lb7LG>R zyKCW=OO(74%ir@U?(1?2cq%^|OQsj$uC<%6;=nO1D$K!4GcUw~FTca92aiFeQNyKD zW6a_GxS+ZU0=dlH@b5XZT(S~=xL4XpdcJr2VxAQQ92+(QIR` z#j<^eq4XB#(Q~z;fGN96ptD*e$D~W^cW@b0Z+wB`yu_EpX&SXuvp{Cp(@wAOxZ%(l zuzkW5wicRD#LF!mOvd7&9PrH0ag(j4ThemM(&~S+4Jjaz5NPq2dILGNQbt{9e%2fr!Cii#SxT;Iu8yWNf*(C$TVM7mKcj8V0WkN1e-uWC*kcRL`-c|s$XR<1II5!J_nt34>Zrp~K zcOS&FlgHxmX%jGi?Pk1Dc>+qU6wH^cclfbNWLK8|fP4D|TrReAdtlINvGflQAa8UI z!(z2q&}Ol4#6LDRmOndnssZ;t`5exe+n6Re9O;!_4TDlqnpXg@qj2`sX}?k{ln}jY zVR2C|2Cx1c7KIYTghUViELM)zc?1E^jn6@|Q^2ya3aAWvxNLSTF392HzGurSJA0>0I{Iq?kij5GU=~iMW=gP63{N1Gn8`!Gd`=;g?rkfz8`W@aWRNaE6y^ z1Zas-3f@R%MoKypA!PRG%~^os&E-GJavipk&0O2(I4<@j?~ zMI%$g=<)-|s6N(-8u}I7hi za%+2$Y_h!bC+h+Q+TV2@s-d=q;|{*6p{zpLGc0xoI~8*4 z2rCXwLuuZ4I++)ctm-fPNjZCzDnwh_F?n|}?+3K;MHF1=OoSWJMm<))`T|U*n2zz< z?W7QNoj~%qT)5%BhjHpmbEj$>e=@AUKy zl0PBf6ia`BF42M-@vY66Sh_=Ujr}~l&p4N!Lq*S2?LrR2BftMGSKEBMeFq*{`btNU zGrbVS1iF)8lwF_@R~EoQ}S%6(i8hZS8y>?D;<|fYE5gYya~$-uY}TqN9CE=Dmo~MEDvgeXR0$P?}$e z(}~Ga47UdhCU=*@jLtAn>}^?hom5$hjoZH$sdcse4{o&4fZXgX+;B4t?rVmo;NH=hn7yHdW2_OU2+lr> z92qn85ZCQG&tcPotQHJK0YM{W;#Ebf-uj#`Uc7l9|he@ z<)^YE(H0wr;({Wagg3zrr;q?kd66)!x6l#~<>VAGPPl1<-J;$3I76qPiJhr|5{l$pNacwXf&(;kFq?Yza9SMn%w8JDdPNbdrsU(&tf8>++2gY} zP{_ilQR5%`EAeRQA&!iBDD0_LBmZC-(rRl0qJ%yH*E=k>s+_D0KE3Gc@Au^U(|G9k zYMaH{>3o<>4RxtQus3&H2e>MDa9!FUq(>Pbx+$wcQb@sPA!t>ol?rUAZ^S-xI}}Vo z-8ZHWw;MNIkcx3h@eq7yiS8iF*D96Ra;gz)PBcKNQnID`IuC&sN{4N^zC)m2-=MQ! z{uQ8f7afu6>EIoKu#=LLR9Pd6Fere3&76X}L*REkLuU8JWc|{DAmD@P6L4jArk57Z@&X0iqcm!~x%Uw6FDV0zMkF?! zLE+w=9aG`Yd61vqr{D%Mn}J><#~La|0XDbO86lW4(%IfE0B z8)uSe!3QmxAB{?h?TszibjA$I@=e^c1JSK5oMsQyYQy4Oc|3tFkRV3ip1eYw zPD+MS5SUNhqKKJ;5^>|OG~BUce}@(h>Rm*aG&$X^G(wn^f=-LE2fxRVlhqK^Qq4l3 zR@*1wc7-jd0s6t53!L39h#DPs=NG~p69<(jaGtIp-h^2xNmy216;e5qTqoA`6=d*4 zl^WSc%0WrVKmz044JBk+@MnvC1+rX|OV#6h^TvCtZv=Q;-a@<}X`xp>CT^#+xl)Od zM=LPwSS8o$`daHbwcJQpvJ5c!^M^)`!O6jCT4&eKaVraFRD}8b*%Q56+ z4TLVh@=_0=zpyv7AfCaOhHJ?ZMUcr^Qo#EW&@$Mp_MBsQPH zsLFE0n45#H3+q=}=xL1Mf=vCAOtVCraC~ScP7X?eNR>NWx-T7(>eM;{7o9(rmp^?P z-QI@G6V*tqujL>(se)h%?s^()#5lJ%0}2;lnI@DTH`=3PP&YUg4T*!$Zj6FQPPG%r zvRlkA{zTBid>n-wu_t^7yPExwmBA{31Am&y-jaNz`Qf_zR$mj`Cy zbTU$kToKR=5LM++e1SBv`~wzz5YWxFXJo`w(@Vf}k}&{xHdw1Y=aw5R;{L$)4Xk$n zCjU|!Z-w4EVQ&~Q(C3E&?0E-ncVPGfJWv38yY4?0+(-i+DzHBZ%k2xxj8q@zM2baf xFh90_2f&Tsj0}J~0B!^kh+x+PmK#BE{~vo`t?q-jkTL)O002ovPDHLkV1kVZquc-h diff --git a/ios/CCC/Resources/Assets.xcassets/AppIcon.appiconset/AppIcon.png b/ios/CCC/Resources/Assets.xcassets/AppIcon.appiconset/AppIcon.png new file mode 100644 index 0000000000000000000000000000000000000000..a77fe82159748af569f4131d7bf7449abecf49d9 GIT binary patch literal 109994 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 Date: Sat, 17 Aug 2024 23:41:00 +0200 Subject: [PATCH 79/89] [Oztechan/CCC#3778] Return back to gradle 8.9 (#3779) * [Oztechan/CCC#3769] Add Android themed icon * [Oztechan/CCC#3769] Add Android themed icon * [Oztechan/CCC#3772] Regenerate the android icon with webp * [Oztechan/CCC#3772] Regenerate the android icon with webp * [Oztechan/CCC#3774] Add transparency instead of black in monochrome icon * [Oztechan/CCC#3776] User iOS single size App icon * [Oztechan/CCC#3776] Use iOS single size App icon * [Oztechan/CCC#3778] Return back to gradle 8.9 --- gradle/wrapper/gradle-wrapper.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 66cd5a0e49..dedd5d1e69 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.10-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.9-all.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME From 45d2c973ebd2820510183b2c63d8a2cd616cb88d Mon Sep 17 00:00:00 2001 From: Mustafa Ozhan Date: Sun, 18 Aug 2024 13:52:35 +0200 Subject: [PATCH 80/89] [Oztechan/CCC#3781] Rename onRestorePurchase to onRestoreOrConsumePurchase (#3782) * [Oztechan/CCC#3769] Add Android themed icon * [Oztechan/CCC#3769] Add Android themed icon * [Oztechan/CCC#3772] Regenerate the android icon with webp * [Oztechan/CCC#3772] Regenerate the android icon with webp * [Oztechan/CCC#3774] Add transparency instead of black in monochrome icon * [Oztechan/CCC#3776] User iOS single size App icon * [Oztechan/CCC#3776] Use iOS single size App icon * [Oztechan/CCC#3778] Return back to gradle 8.9 * [Oztechan/CCC#3781] Rename onRestorePurchase to onRestoreOrConsumePurchase * [Oztechan/CCC#3781] Rename onRestorePurchase to onRestoreOrConsumePurchase --- .../ccc/android/core/billing/BillingManagerImpl.kt | 2 +- .../oztechan/ccc/android/core/billing/BillingEffect.kt | 2 +- .../ui/mobile/content/premium/PremiumBottomSheet.kt | 2 +- .../oztechan/ccc/client/viewmodel/premium/PremiumSEED.kt | 2 +- .../ccc/client/viewmodel/premium/PremiumViewModel.kt | 2 +- .../ccc/client/viewmodel/premium/PremiumViewModelTest.kt | 8 ++++---- 6 files changed, 9 insertions(+), 9 deletions(-) diff --git a/android/core/billing/src/google/kotlin/com/oztechan/ccc/android/core/billing/BillingManagerImpl.kt b/android/core/billing/src/google/kotlin/com/oztechan/ccc/android/core/billing/BillingManagerImpl.kt index f51e4bdba7..aaf48d7387 100644 --- a/android/core/billing/src/google/kotlin/com/oztechan/ccc/android/core/billing/BillingManagerImpl.kt +++ b/android/core/billing/src/google/kotlin/com/oztechan/ccc/android/core/billing/BillingManagerImpl.kt @@ -207,7 +207,7 @@ internal class BillingManagerImpl(private val context: Context) : purchasesResponse .map { it.toPurchaseModel() } .let { - _effect.emit(BillingEffect.RestorePurchase(it)) + _effect.emit(BillingEffect.RestoreOrConsumePurchase(it)) } } } diff --git a/android/core/billing/src/main/kotlin/com/oztechan/ccc/android/core/billing/BillingEffect.kt b/android/core/billing/src/main/kotlin/com/oztechan/ccc/android/core/billing/BillingEffect.kt index ee82fc0a65..e965e468f6 100644 --- a/android/core/billing/src/main/kotlin/com/oztechan/ccc/android/core/billing/BillingEffect.kt +++ b/android/core/billing/src/main/kotlin/com/oztechan/ccc/android/core/billing/BillingEffect.kt @@ -7,7 +7,7 @@ sealed class BillingEffect { data object SuccessfulPurchase : BillingEffect() data object BillingUnavailable : BillingEffect() - data class RestorePurchase( + data class RestoreOrConsumePurchase( val purchaseList: List ) : BillingEffect() diff --git a/android/ui/mobile/src/main/kotlin/com/oztechan/ccc/android/ui/mobile/content/premium/PremiumBottomSheet.kt b/android/ui/mobile/src/main/kotlin/com/oztechan/ccc/android/ui/mobile/content/premium/PremiumBottomSheet.kt index abecec2aa6..abd365950b 100644 --- a/android/ui/mobile/src/main/kotlin/com/oztechan/ccc/android/ui/mobile/content/premium/PremiumBottomSheet.kt +++ b/android/ui/mobile/src/main/kotlin/com/oztechan/ccc/android/ui/mobile/content/premium/PremiumBottomSheet.kt @@ -121,7 +121,7 @@ class PremiumBottomSheet : BaseVBBottomSheetDialogFragment restartActivity() - is BillingEffect.RestorePurchase -> viewModel.event.onRestorePurchase( + is BillingEffect.RestoreOrConsumePurchase -> viewModel.event.onRestoreOrConsumePurchase( viewEffect.purchaseList.toOldPurchaseList() ) diff --git a/client/viewmodel/premium/src/commonMain/kotlin/com/oztechan/ccc/client/viewmodel/premium/PremiumSEED.kt b/client/viewmodel/premium/src/commonMain/kotlin/com/oztechan/ccc/client/viewmodel/premium/PremiumSEED.kt index 0c9bfaadd8..823714b8fb 100644 --- a/client/viewmodel/premium/src/commonMain/kotlin/com/oztechan/ccc/client/viewmodel/premium/PremiumSEED.kt +++ b/client/viewmodel/premium/src/commonMain/kotlin/com/oztechan/ccc/client/viewmodel/premium/PremiumSEED.kt @@ -22,7 +22,7 @@ interface PremiumEvent : BaseEvent { isRestorePurchase: Boolean = false ) - fun onRestorePurchase(oldPurchaseList: List) + fun onRestoreOrConsumePurchase(oldPurchaseList: List) fun onAddPurchaseMethods(premiumDataList: List) fun onPremiumItemClick(type: PremiumType) fun onPremiumActivationFailed() diff --git a/client/viewmodel/premium/src/commonMain/kotlin/com/oztechan/ccc/client/viewmodel/premium/PremiumViewModel.kt b/client/viewmodel/premium/src/commonMain/kotlin/com/oztechan/ccc/client/viewmodel/premium/PremiumViewModel.kt index d79dc6b4bc..edf684ef17 100644 --- a/client/viewmodel/premium/src/commonMain/kotlin/com/oztechan/ccc/client/viewmodel/premium/PremiumViewModel.kt +++ b/client/viewmodel/premium/src/commonMain/kotlin/com/oztechan/ccc/client/viewmodel/premium/PremiumViewModel.kt @@ -35,7 +35,7 @@ class PremiumViewModel( } } - override fun onRestorePurchase(oldPurchaseList: List) { + override fun onRestoreOrConsumePurchase(oldPurchaseList: List) { Logger.d { "PremiumViewModel onRestorePurchase" } oldPurchaseList .maxByOrNull { diff --git a/client/viewmodel/premium/src/commonTest/kotlin/com/oztechan/ccc/client/viewmodel/premium/PremiumViewModelTest.kt b/client/viewmodel/premium/src/commonTest/kotlin/com/oztechan/ccc/client/viewmodel/premium/PremiumViewModelTest.kt index 294cae135f..b1118f72c9 100644 --- a/client/viewmodel/premium/src/commonTest/kotlin/com/oztechan/ccc/client/viewmodel/premium/PremiumViewModelTest.kt +++ b/client/viewmodel/premium/src/commonTest/kotlin/com/oztechan/ccc/client/viewmodel/premium/PremiumViewModelTest.kt @@ -94,14 +94,14 @@ internal class PremiumViewModelTest { } @Test - fun onRestorePurchase() = runTest { + fun onRestoreOrConsumePurchase() = runTest { every { appStorage.premiumEndDate } .returns(0) val now = nowAsLong() viewModel.effect.onSubscription { - viewModel.event.onRestorePurchase( + viewModel.event.onRestoreOrConsumePurchase( listOf( OldPurchase(now, PremiumType.MONTH, ""), OldPurchase(now, PremiumType.YEAR, "") @@ -122,7 +122,7 @@ internal class PremiumViewModelTest { every { appStorage.premiumEndDate } .returns(nowAsLong() + 1.seconds.inWholeMilliseconds) - viewModel.event.onRestorePurchase(listOf(oldPurchase)) + viewModel.event.onRestoreOrConsumePurchase(listOf(oldPurchase)) verify(VerifyMode.not) { appStorage.premiumEndDate = oldPurchase.type.calculatePremiumEnd(oldPurchase.date) @@ -135,7 +135,7 @@ internal class PremiumViewModelTest { every { appStorage.premiumEndDate } .returns(0) - viewModel.event.onRestorePurchase(listOf(oldPurchase)) + viewModel.event.onRestoreOrConsumePurchase(listOf(oldPurchase)) verify(VerifyMode.not) { appStorage.premiumEndDate = oldPurchase.type.calculatePremiumEnd(oldPurchase.date) From 49e36b817d08ae7a2c1d185ed62490e1e785db74 Mon Sep 17 00:00:00 2001 From: Mustafa Ozhan Date: Sun, 18 Aug 2024 14:15:45 +0200 Subject: [PATCH 81/89] [Oztechan/CCC#3783] Add ConsumePurchase effect (#3784) * [Oztechan/CCC#3769] Add Android themed icon * [Oztechan/CCC#3769] Add Android themed icon * [Oztechan/CCC#3772] Regenerate the android icon with webp * [Oztechan/CCC#3772] Regenerate the android icon with webp * [Oztechan/CCC#3774] Add transparency instead of black in monochrome icon * [Oztechan/CCC#3776] User iOS single size App icon * [Oztechan/CCC#3776] Use iOS single size App icon * [Oztechan/CCC#3778] Return back to gradle 8.9 * [Oztechan/CCC#3781] Rename onRestorePurchase to onRestoreOrConsumePurchase * [Oztechan/CCC#3781] Rename onRestorePurchase to onRestoreOrConsumePurchase * [Oztechan/CCC#3783] Add ConsumePurchase effect --- .../ccc/android/ui/mobile/content/premium/PremiumBottomSheet.kt | 1 + .../com/oztechan/ccc/client/viewmodel/premium/PremiumSEED.kt | 2 ++ 2 files changed, 3 insertions(+) diff --git a/android/ui/mobile/src/main/kotlin/com/oztechan/ccc/android/ui/mobile/content/premium/PremiumBottomSheet.kt b/android/ui/mobile/src/main/kotlin/com/oztechan/ccc/android/ui/mobile/content/premium/PremiumBottomSheet.kt index abd365950b..fd003dc6af 100644 --- a/android/ui/mobile/src/main/kotlin/com/oztechan/ccc/android/ui/mobile/content/premium/PremiumBottomSheet.kt +++ b/android/ui/mobile/src/main/kotlin/com/oztechan/ccc/android/ui/mobile/content/premium/PremiumBottomSheet.kt @@ -112,6 +112,7 @@ class PremiumBottomSheet : BaseVBBottomSheetDialogFragment billingManager.consumePurchase(viewEffect.token) } }.launchIn(viewLifecycleOwner.lifecycleScope) diff --git a/client/viewmodel/premium/src/commonMain/kotlin/com/oztechan/ccc/client/viewmodel/premium/PremiumSEED.kt b/client/viewmodel/premium/src/commonMain/kotlin/com/oztechan/ccc/client/viewmodel/premium/PremiumSEED.kt index 823714b8fb..acd07cc9a9 100644 --- a/client/viewmodel/premium/src/commonMain/kotlin/com/oztechan/ccc/client/viewmodel/premium/PremiumSEED.kt +++ b/client/viewmodel/premium/src/commonMain/kotlin/com/oztechan/ccc/client/viewmodel/premium/PremiumSEED.kt @@ -38,4 +38,6 @@ sealed class PremiumEffect : BaseEffect { val premiumType: PremiumType, val isRestorePurchase: Boolean ) : PremiumEffect() + + data class ConsumePurchase(val token: String) : PremiumEffect() } From 4146d55ed6b0f664e00b4dac5adf1a875349da33 Mon Sep 17 00:00:00 2001 From: Mustafa Ozhan Date: Sun, 18 Aug 2024 14:23:25 +0200 Subject: [PATCH 82/89] [Oztechan/CCC#3785] Implement Consume product logic (#3786) --- .../viewmodel/premium/PremiumViewModel.kt | 41 ++++++++++++------- 1 file changed, 26 insertions(+), 15 deletions(-) diff --git a/client/viewmodel/premium/src/commonMain/kotlin/com/oztechan/ccc/client/viewmodel/premium/PremiumViewModel.kt b/client/viewmodel/premium/src/commonMain/kotlin/com/oztechan/ccc/client/viewmodel/premium/PremiumViewModel.kt index edf684ef17..f1b8f96807 100644 --- a/client/viewmodel/premium/src/commonMain/kotlin/com/oztechan/ccc/client/viewmodel/premium/PremiumViewModel.kt +++ b/client/viewmodel/premium/src/commonMain/kotlin/com/oztechan/ccc/client/viewmodel/premium/PremiumViewModel.kt @@ -7,6 +7,7 @@ package com.oztechan.ccc.client.viewmodel.premium import co.touchlab.kermit.Logger import com.github.submob.scopemob.whether import com.oztechan.ccc.client.core.shared.util.isNotPassed +import com.oztechan.ccc.client.core.shared.util.isPassed import com.oztechan.ccc.client.core.viewmodel.BaseData import com.oztechan.ccc.client.core.viewmodel.SEEDViewModel import com.oztechan.ccc.client.storage.app.AppStorage @@ -37,21 +38,31 @@ class PremiumViewModel( override fun onRestoreOrConsumePurchase(oldPurchaseList: List) { Logger.d { "PremiumViewModel onRestorePurchase" } - oldPurchaseList - .maxByOrNull { - it.type.calculatePremiumEnd(it.date) - }?.whether( - { it.type.calculatePremiumEnd(it.date).isNotPassed() }, - { it.date > appStorage.premiumEndDate }, - { PremiumType.getPurchaseIds().any { id -> id == it.type.data.id } } - )?.run { - onPremiumActivated( - adType = PremiumType.getById(type.data.id), - startDate = this.date, - isRestorePurchase = true - ) - setState { copy(loading = false) } - } + + // Consume old purchases + oldPurchaseList.filter { + it.type.calculatePremiumEnd(it.date).isPassed() + }.forEach { + sendEffect { PremiumEffect.ConsumePurchase(it.purchaseToken) } + } + + // Restore purchase if not already activated + oldPurchaseList.filter { + it.type.calculatePremiumEnd(it.date).isNotPassed() + }.maxByOrNull { + it.type.calculatePremiumEnd(it.date) + }?.whether( + { it.date > appStorage.premiumEndDate }, + { PremiumType.getPurchaseIds().any { id -> id == it.type.data.id } } + )?.let { + onPremiumActivated( + adType = PremiumType.getById(it.type.data.id), + startDate = it.date, + isRestorePurchase = true + ) + } + + setState { copy(loading = false) } } override fun onAddPurchaseMethods(premiumDataList: List) { From bed590c6748f58bb63002cbd62ae6ef393003245 Mon Sep 17 00:00:00 2001 From: Mustafa Ozhan Date: Sun, 18 Aug 2024 22:56:47 +0200 Subject: [PATCH 83/89] [Oztechan/CCC#3787] Cover Restore and Consume Product logic (#3788) * [Oztechan/CCC#3787] Cover Restore and Consume Product logic * [Oztechan/CCC#3787] Cover Restore and Consume Product logic --- .../viewmodel/premium/PremiumViewModelTest.kt | 23 +++++++++++++++---- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/client/viewmodel/premium/src/commonTest/kotlin/com/oztechan/ccc/client/viewmodel/premium/PremiumViewModelTest.kt b/client/viewmodel/premium/src/commonTest/kotlin/com/oztechan/ccc/client/viewmodel/premium/PremiumViewModelTest.kt index b1118f72c9..e9914c12c5 100644 --- a/client/viewmodel/premium/src/commonTest/kotlin/com/oztechan/ccc/client/viewmodel/premium/PremiumViewModelTest.kt +++ b/client/viewmodel/premium/src/commonTest/kotlin/com/oztechan/ccc/client/viewmodel/premium/PremiumViewModelTest.kt @@ -100,6 +100,8 @@ internal class PremiumViewModelTest { val now = nowAsLong() + // onRestoreOrConsumePurchase should activate the premium with the product which has farthest end date + // if there is a valid old purchase viewModel.effect.onSubscription { viewModel.event.onRestoreOrConsumePurchase( listOf( @@ -113,10 +115,14 @@ internal class PremiumViewModelTest { assertTrue { it.isRestorePurchase } assertFalse { viewModel.state.value.loading } - verify { appStorage.premiumEndDate = it.premiumType.calculatePremiumEnd(now) } + verify { appStorage.premiumEndDate = PremiumType.YEAR.calculatePremiumEnd(now) } + verify(VerifyMode.not) { + appStorage.premiumEndDate = PremiumType.MONTH.calculatePremiumEnd(now) + } } - // onRestorePurchase shouldn't do anything if all the old purchases out of dated + // onRestoreOrConsumePurchase shouldn't do anything + // if all the old purchases doesn't have later end date than the current premium end date even if they are valid var oldPurchase = OldPurchase(nowAsLong(), PremiumType.MONTH, "") every { appStorage.premiumEndDate } @@ -128,14 +134,21 @@ internal class PremiumViewModelTest { appStorage.premiumEndDate = oldPurchase.type.calculatePremiumEnd(oldPurchase.date) } - // onRestorePurchase shouldn't do anything if the old purchase is already expired + // onRestoreOrConsumePurchase should consume product if the old purchase is already expired + val token = "token" oldPurchase = - OldPurchase(nowAsLong() - (32.days.inWholeMilliseconds), PremiumType.MONTH, "") + OldPurchase(nowAsLong() - (32.days.inWholeMilliseconds), PremiumType.MONTH, token) every { appStorage.premiumEndDate } .returns(0) - viewModel.event.onRestoreOrConsumePurchase(listOf(oldPurchase)) + viewModel.effect.onSubscription { + viewModel.event.onRestoreOrConsumePurchase(listOf(oldPurchase)) + }.firstOrNull().let { + assertNotNull(it) + assertIs(it) + assertTrue { it.token == token } + } verify(VerifyMode.not) { appStorage.premiumEndDate = oldPurchase.type.calculatePremiumEnd(oldPurchase.date) From b707f788917ef91d69459c10dd01f484b82fac25 Mon Sep 17 00:00:00 2001 From: Mustafa Ozhan Date: Sun, 18 Aug 2024 23:18:37 +0200 Subject: [PATCH 84/89] [Oztechan/CCC#3789] Remove duplicated monochrome drawable (#3790) --- .../ic_launcher_foreground_monochrome.xml | 75 ------------------- 1 file changed, 75 deletions(-) delete mode 100644 android/ui/mobile/src/main/res/drawable/ic_launcher_foreground_monochrome.xml diff --git a/android/ui/mobile/src/main/res/drawable/ic_launcher_foreground_monochrome.xml b/android/ui/mobile/src/main/res/drawable/ic_launcher_foreground_monochrome.xml deleted file mode 100644 index ebedfc88f4..0000000000 --- a/android/ui/mobile/src/main/res/drawable/ic_launcher_foreground_monochrome.xml +++ /dev/null @@ -1,75 +0,0 @@ - - - - - - - - - - - - - - - - - - - From a526a88e9a77b91e28a0dd8fb927c6a3a7c762b7 Mon Sep 17 00:00:00 2001 From: Mustafa Ozhan Date: Mon, 19 Aug 2024 19:10:43 +0200 Subject: [PATCH 85/89] [Oztechan/CCC#3791] Replace app icon and snack bar icon (#3792) --- .../src/main/res/drawable/ic_splash.xml | 2 +- .../main/res/layout/layout_slide_intro.xml | 2 +- .../moko-resources/images/ic_app_logo@2x.png | Bin 17619 -> 9515 bytes .../images/ic_dialog_and_snackbar@2x.png | Bin 6994 -> 7224 bytes 4 files changed, 2 insertions(+), 2 deletions(-) mode change 100755 => 100644 client/core/res/src/commonMain/moko-resources/images/ic_app_logo@2x.png mode change 100755 => 100644 client/core/res/src/commonMain/moko-resources/images/ic_dialog_and_snackbar@2x.png diff --git a/android/ui/mobile/src/main/res/drawable/ic_splash.xml b/android/ui/mobile/src/main/res/drawable/ic_splash.xml index 427f5f7ee9..fbe3cb5f45 100755 --- a/android/ui/mobile/src/main/res/drawable/ic_splash.xml +++ b/android/ui/mobile/src/main/res/drawable/ic_splash.xml @@ -4,7 +4,7 @@ diff --git a/android/ui/mobile/src/main/res/layout/layout_slide_intro.xml b/android/ui/mobile/src/main/res/layout/layout_slide_intro.xml index 1bd10ff456..a791856d6a 100644 --- a/android/ui/mobile/src/main/res/layout/layout_slide_intro.xml +++ b/android/ui/mobile/src/main/res/layout/layout_slide_intro.xml @@ -15,7 +15,7 @@ android:layout_width="@dimen/height_width_app_logo" android:layout_height="@dimen/height_width_app_logo" android:layout_marginTop="@dimen/margin_top_slide_items" - android:src="@drawable/ic_launcher_foreground" + android:src="@drawable/ic_app_logo" tools:ignore="ContentDescription" /> -yi0@-)GLuoqJ~P+`0F@UNO4bD#Qe|1ONaKtEs-w0{{^E7X;wppg(4w zpY72f{CBFxPyl%P@LvP*a8dW6J88U>UVG`g+k5#~d)fg$K0bVJ-JGE|*6-~2+&vw# z4y0)TfEiGGA^*xZ8@cS`OFz>gcC?z2ft;%LuW52=QRho(GjlA(!U(nMj`#t=7!Sf< z!+FmFQeN6)Z zR=53p8HF=5?yDM4m$}MF)w!4>&SLc2fQV#&0f2N$kO+wIBEke%7cIcHF04jE zYFc#;eTnT_W9t(uCZgs~8d9x`;~#QF+{ zAcw%Hm(CeoNnSvxIwmRM*q%+7}XeU*oB^UGD56bb-)`itM>2PInlcd&6(6+brNHsL@%ThuK{TM=GS>j;F{=jO47DYRuZG71++0&)sX}b433%TlXii z6-I6XGaBIcOf|M(c@BxfEC-#1t9~14iGVi_sc^C-CgUBa*HgAo*?ibz^*8Lm$wBJ~ zgv+=D#_-;IV<1WHK^#0l40dO2)gQ)zziZrsjK-~)8-lfwPZ8fW0o~l`^Q@ z(T~qCVpS$Q7WPJGT>>zud#FwxJzZP38~8~Z>i{?+bOC!==TR)+-TvLnpBQAV|#UXn_1e|6}#(YI&|vdf^B%`v*?dMb6Fts{tfR;)qQ_@yFCW zJJ>x!7p6Uu+*Iq;G=x?@YK3r0JZfAt!|xddJmZz}LjQk*KoDwwe$~a-l8d%m2|#?# zD@tDrs`~M-u|z(lY{YL$kBRQ>o%prd9)>jtje<}Me!!|QYk7GEzuEoXD&MOX9^n^P z6p-*i>TiM{Wn>kxfQQiuk6J;G=c(aQF+ykPmB0Wq0nVAPBK7p2o@{DNZxo}Hg@3tL|5x+0=LyQ>254oJ({flzG?BNEdeM?N zNzFuO7okD8)mwsn+OvMnxO#N#fTR-(k=04H>#T7V4lgL}9@QlB+!>Zy#UW_^Y>o>+ zzKtzhFDYI!XlZHF&YpM3k#d@!jxrTA6nchDHAXIor12~U4QS1koJ!{jXCs4xLx$=@ z{Fd8LN0VkH&iar10!E}lIt=&So`(m;C+n5Jb7Yt!)t7s_%M`Cl3e>b2e*5=+)_9b(Cs3mWp;ZyBayTcaH*~E zzS1@!wg(I#Tf8=N_CmiCh&VGx4DO-smISkABs;b}jZ^757xcZH);aRZ3}$8>rWmb1 zr6OKk=V(wGnK${$w|1Y>bTkz;xX$ngvq>&Wt*h+t62;Bi!n#@xVmz~EGJnk-a+UBV zj8)lj=osCY=4dkl%#zR5Gli_P+4$Hc3Y(dzvX`A0>=D^*=sBAxv> z!1)>FBKqA;=ivGj?Ktoml;piwk_?Y7NycSjSA}Y$jQG@Zj4D^ zW|`mYNgX~3`now%qBx(nO7(T+_V=$ix7M5CocdCoR3_s~IlpjxZINWb>0K{o9&Dg2 zGz#dDr9KhRd4f9YU(A&G7vO)_g{pX*e<^HCCwEre2Bh)lCX&+3G6WdlT1*0ebYBqrB#MB2lqF)~91+uwNELTD; zoXuy`Rkt>b+6w2sJy#*v+ThKRa#psREciQ|)O_%stD;g38XyfbAY>@S_5&wUY)qI) zrh7{yY6xU$;>#Sa*0f)I=|Br5eCh4TDgaPW5aA?{$lZqB-PJJtV~xn}069`b#G|Kz z(R+>s0LH0VtxE?{{ge)KAJ#dn_g3!9XBrb|oMvQ_i@*6Esy1!=xi;_5fQf*}97%JL zW23IyU$v{UM_@UY;)#`D`hh;F@4f2`Yir3ee3+f6oDmjM(vjwad86B#n}qshi@Z{H z$triZIslF*Pku@bm_3;EOLH0Po0;`M6%kjXEfZ`e9d z27%-(sdDeUTq_R=xyvXu>82sZv5e?lp`;?8xwdRx`3-Z^-~Ov#vMA=hYz>8ZnP7(I z|2g&_TXt)%T3oM9+Pr1D_YE15s<9|TKaSl1UhUn|+h`+;fD&%7h#mdJ=@6#-af1Hl zlf^?6@{sVe@{Rae182x=kBD4Hkj{wL-6KZL~ zuxj71q8dD0IaTIA6U3$s`h`E3(ffV-*@phPe_^Q8CusH2VqQT ze0bD$*t(f^)n8V2=5(=limTnxX>HS1G2*&^;T!)(V6bhO5o%zLc{&z8@EmP%j};ty zvW;<#%z|1Db5-&fPp)7Vc@ymV=!n6S9q4uvtyp3ER@c;NWO?rz5W5l5d3A?hF&`+J zKFV%mGPLu&v$8G|xfc|>4$7CcP14}M-bURo$KW1z2EqJ2r@m`Yj!KA62Nkokzw(H9 zabY$)Jtex~)>oj+wV4}m?ETn3>H8bw%R$VwA^c;J-sPGxC+`H?0AXQjfWYKF{E3!f zoZWCnUdT<6>6#L>!IdSpWAuYUnD;!(Mx#w-OR~HBR+2G0jQbN#OgI> zXiCVMvwsg(B|{&dk(j6w_S~5Jk*gSP3^b4jZSF=SZD(<9<{$*we z-BW@P^=n_TS1YWWaZ04{m95G^(C=7Ux29R)c6WGMGa{0~)>TH_F@CTpeShT{sRc0x5akYmDQJi_3 zcN28`TH*=>&}N!`bZZHxVq;ji1zt$DwHCRx9Tv2A-QR{QsHHeZw{}!i-0lrn zUX6UPl)k=uQ)PMa6@wq7F#1NcEu?98>mD0=asuj}os&dNr7Ci$Cw84A5z~keCuFv- z%e}&wh%@3b_x-aw!WZ`AceOAaxI*Zz(RI1KuXYPiI{4Fnip-{ z-tN6;bXF`n@74sYG`e4+9aPQ}y!V^RMb>v2c2XC?TIcVMFafU?nMA&36)17$*&|FV zimHI~s`2?>WiFTiX}J9F2JhRm&?b3KL^?h|K$}kM2uNKrWj8`m$)>o^D1@#k{$B>0 z-hu_$P4OE)Z2IkFW(_Nwa3R1VQkLMvd-d1v>3jL%5i-Hprw*t7Jl5vb)D;t1KZZ{H z#zH3leFq@DQ?B&}!hQX7O)vU9-70t!$Wn*^ov+1VY|V_q#9!x{%o z>Bj~6!2{qDD%QCF26@(}36QGCT;yTK%SZg&`uD9yqhBjIkX>IEu#MO)32PT<;bZah zG*=K3!NI`gc!f}l;Z5+%uRZvQHJul2!G%tT*j||CrPL;pnq;K3-g=oBhK+tO#&pl$ zufUD(Hy)@f>yC-}s9ry!zK}wex$PTw`PmiL$ata>9aWz zAzH3*pk2ng&wf@$9v`_|*g_)_4jb$FUOBildw95C5K{#Y6EcBU(D$*_wL)`<6E54o z@k_jbUC?f*Gviu{lcjK>FW!I}kYt0JSsAU|$!OIcYfM+$v6@+5gfT#=7(V%~$e7d& zO>MH{z#qL-D3$?lGajY$p3YP&;e*0Gw#Fsmv^AvVo|BjBDWt!}g@f|J2-3Hgm43I< zhI`l~4=*ZOBxda0=&M?l)hQx&BCiQG>=FsDg`IqH;Qf`D67__*lITkvThle_w{bIq zBUAB#5{oD*>|qB1O05A*)b5Ql5RzvALX495G&8IJ@hq%(8Bl=(@MmN6b$@ z{$4i@HTDcVc8+t{Hd^+aImY|gGczYS=fKV+-SL-TB-c6h+;6=GZ8f1_p)caEMEPK2RG%Owps%`{-Y0wg5OD7~D_%vRY0c|~`(x<3N%5X7Z zgY&AD^#seC<5_KjKXo(_`}*9~|Hi)>?|}ddGhyhWO???37SJ2>$Y>2SAdc{6k%TSz z=KL%}99Rd?CXuRVtTra-Vd)b&e=DPVlk(VJCg7(ff_k+y(15C`rX}d_xhc#5fDioe z$lx$EW87*-W`1ne88yQIidT@_nYTS@*O=$SdtVm`7oI*%O4OdQAqVG#eii$3%?S?_ z4shzqvERp0^pRKa@=F=}tI=eFaco$hO=%x#7vtf;AsQqg7BF6AyrYy;_|N?mx7fbM zQg+{k%0k9iuw;hmJ%Ir-%ZV0xxZwA0btKMylN@N%BHaf72GH@~^rdVLZ8DBXHnoHh zTQtvdhdGXV#&w-O85jib08JQu$ZXNr`lfV$|IoZeKR?3~4^!Bg&-W|-_j!&E!4tl$l1x=<$Wd~jUQuD#;apFN zE~l;ZX>Of&@UevTbMQn9NdME^U#T`##gN4K?MyH0L&MC-b^w4k;hsX@ITJS^1D zQ9Nrf5>cRGf%bHte=t(cQZmu43)4ngrL`?iO)pSxUt&}2ty^TJ*X4O`gb@edrPxaT zoPt@9bn7!LN9t_qXy5?p9ml6%)tep4^}LB^?|*Snu4H~{#R9rH)HYpZYh{M)$H~R{ zTCSo-M*2}uXxp#tB>K@#+eA8}EJUkRV`o%M>4f@sfLiIlq#kwD@0>#}G}RBKPs0La zY6?o=oT)iH6`yY>IPz4`fisT-YmGs!tZd-7#o2E%4&#>{pWJk&RClQpnY0Igqii1< z&{dS@txEw8ZgZHs7iF~T<^)Q6M3=bKX)~6 zji5da2RnG--JW-xJP2Us96@!CaFd&9r=Lpb9g?`+;ZdH+ z^ghXckVntx&Ie`1@#;f9?(D|n)5!4o8b^VRZ{PPzF5KqQsZXsM{)oJMFR{NiE|wcI zCDz>&!dTRk?EOo`h@$;eu8W&y*V(YRWRBQ7D_2r!5)1f~%DN5NdybSUkMRbqg6bPQ z7fZ65_&-dv1fXt)Vq1({Ry<5f8@xS>ZBBGEpQkz4&T_wemPinfgPa$+{DddHy4qNl zr?>kw;)Q}-2x0Racq90r>ZKr!;&LfRnN9-$H2B{aO?5PtIgsR;d@C!tzcM->yHC{r z+E`#`velMl3f^y`T(}k54O^g}Tn{Dv(rDd369FPs;KKKq;fgsv_2(->w8q6IQFU|% z+bEmsLt}YHY5|~j@?}EY_BfxVs9att8=Ll~I3F1xog|CezA9+9Zyqz0#}_MfjXK1NGU=iXxnCiEp}8!$~`8wY5=%Gp*ZhY5CCQ**Gx}x*{{T$Jf})D9ekE z*NA5JTE6$H+_&6Qzrbj>o^BI&egX#NE2(HBG>LJ-pU6f#%T(}B3Vjk>-&X`9HVI7vJ^A60EzHMT^4(S_ z767abbH}|tv0^<8ztuMm! zTW*<6STP6DmE|Ysbm?Y*aDu)udeIa2b%LcNf5^_1U(lnUdo^zzml|)@IHG0%m8ZTa z5@KShG=TOS*ttG4dRn-Vq;&d6L<`0Q$(~7Wn%xYFxE}*UD3>cJE(c&X@g@2^*j?P- z=R!Lx@|+(R*8(3D@8t_Ad`L^s`;89}XM+$1hB-LEDjsYN+OixiEt}^mPDj|2kE5V_ zD{jm<-$*v|JuN}#h!GwZe7teGt=0C4no9rjdmvqKX|B0txpd8~f95pCfHy#Z^@G63$7is$ z*hG3|SQnXvy~bx0LLR$Ih6BM1x}1uGEmqE2Uno>;FmKRAbViYW)UQ?|uNdKiP zd6hBHkqHNpK3)H%H*)yxI$(aA=TUp(aW7Xv;Bs+k)C;zY({ZKKP7@isB}TT35*EGe z`nP{oeH7q1@=Ei5M4vyXfXRix>h3KUv90Yp`VQm@{&^2^ZyG19z7m9yQmbX52y1;> z*vZtnxmakP%};zPKYlw`%trg*dDkEm`4%ouL_vr7_bXF<-TNHiCtNHTwXyR1^I!|` zb9;kaIh&-S*MY&4J1$UIrQb!8K02$y6(ObsAYRe+Uqn1@6~k+; z-sm)2rl#+jCI4Kg9DGg0V~$}3aB@n1{~&o}vdSDGJ_!8EFy$@9a`q$}&HB`K`O7sj zJU2$H{>#$>w1j0c*(z7s$!S|!iowb+^cOB_mEQr~WX*Ew*sSN6*nKVZ=G88Wy3$Vx zq6DF&Dw**)S^WH*(!k9h@Wex+MmLojW|NYX#{Mq-)GC2RriZ ziM((>_kBdIB&Yqz{}B;@Eps`w=gM8v@kLbVyET}GNVKTOstl2d$3o9y`@8CF_<2Q9 zbnDo+UG>Xy4;u&C_RaF+5^y0yoIkI$+|?*OJY)TvD&{~aHbDOvmM+}8a{awl&nVh* z|8mv$jZ*m=Fn@hS29OW=yl@HfdBTv{Qt|I6_S~8upQDIrl<=lu+G38#w29uX^ND)D z*5?8syp!kUubaBeb{*$TNe-0=v3DC;&MwjNcmmWDeJLJBw-&d= zfvk{3v;xy9``y-`1qYL?RESQ2U()l6H8Z)lk7)7+(^e)bVLX-*6>N2srSAA zG+twR7R}+hBVP3#x_N5v+BEmj3_RjqRZRKA2EQQv63Qaqz){_3SK84AjpiQp=xN(< zy6uTL!_?W*F%{2t?MnL)D71CRl+!HTx@_!t2qPA!TGxFXCHoegCKhyS^KiRteNY59 zO<0=g;H&Air9K4e8sy0gJ?@l|dKzzn4RXPl00HmlLD4-wx3?R5`Eg`YSZn0WZDcQf zvNcDbNmLW~N>zxj;4cDbXbgXFf1|FBNKZg|`|885=(4T;P-WB>@&Rr$_VD*q`4ufY zYShLOSKOFjjGhRQlM3JW!g=#AiHxAuwW@`SxG^%^JVY;|!wKD^5-9iwR!PRTXCOY;MTPLzB%`%N@^)@K$_=B^&6!+-vmdeekBKd zaRfM_j}EeIE^uRUOb$OT^xL4yox}xbMY#I*FOg$%fmRfmx5J~^AjcE`cjBBSC!|@U zdt@9VQP@gtWe4eCRI;PM#iGbXfGLchp|4JPlo{s{FXuv*BB$LJScW!T0+X3YCW}}^ z`;iGHa#f^hexfVbi~hrkxR(E1_Yr?S7@|geJ`nUhgw`Tazqf{g)ZW`Vu@&RE^&@fGE-5yqxm1|`J@Uo^+!@lF&}w}tF~+K#Hj5RDir{!zn>qnGn_ynH54;{izwl$NyUX z87ly&(jUT1U5RDu``Dl_D6zxw0MZRV<7C!x3cPe*HDSD-{K>zk{j^Gg1ONpS%3WAD zLja6=ioQN@oOha#^P@W3dY`ts{bjyJ4Sb12T_s!^19C7DuuZhtY9M+`4?=?lYj7c` zNmN6E-hYU92GQF(;)tk(FjFMi|G@6~NT)e8jNa`B<%~B#hqRi4z|Vhw;5J+J{b*b} zvBt0srUz9UOwbtjAKI>ab~5sm<%}4O>c>Aj zx>;y+&Ui~Os)=T?;5`i@10>Oe0>O$Lg1=xVssh$h469#JbEd#Q8>hKYYNZ{1xsX$> zvIRR%^bNofL$hNP@LI06q*k9nYV_MEe~{hur}|j5ng0(Ffd(zI1Yy$FVhZ{rgJw6x zGjEh!yj$aI9Kplh8VAOG?~Vsr7|NUu*nuu=I9}tPyv<`*cC6s*`Nf)hEu^|aV4WAVzmifjNZ{bqDigacrCv7X$!jc5 z5_%6f&!r#!3-~%$!NtRc5@-}_@UzwnK}kmrPVqXSf*(px(iM}?*+^s}VU;4jmuE3* zfeTKTufi0Z0n=v&eIH_YwRIB004ZIl=!Ix006;XfdDud@F%TH+7);W%It^i4*;M(4&luJ z8oUl;C@uaI@C`r#peL6pT?5a2v6s+r0st7u{u@B|VnJ8%B&@TftSIb01ROFAUX?es z19%G8SybIw#LmXX#MT)g;%H*vY+_98X5nm3EG{Xlpca6H4FC`WB!B);abG>pHgne= zTJYcUYN>cM#2k0L?81(=iKZR~DnrN}1q%@eKgp9Bgo z-S+r=#$25|T6SH6-Z}=O>?y(ERW(TN8SrRl7zkuDrW^+|NxdXsbyS^*P67 z=zc$j;Aya{#c2zDIv-*7?F%M!<81iGvGq-w3+=B=pjl-lU^{0d*XBCSXOAKQ8)Yzl zLV1vYcg}-l2JQ5KuI%>1Uglev(Jp|?YQ81A5H_R3{TS3^en07Q^0g|n(SH)5bkC@{ z&SW+kW{cO)$s&q#_JpR4exW&Y=d4+9yS-kpanZWc$-A!>+sMJ9Q8kFsOIwaF-V9tKgb19-HxL$;~dNRuTLqzoVC$w zz*fol)UrJMQXw2zfl}rih{#s@D*mjgm|RhL##meR{Dv&D3*<`6o`!7;$x-}iX7lpP z#R=Q&pVa6x5E7J6M%sp$^Pl@QVK1L?D2yaQu6s_TFx9^6 zxsime-D21_S464__KuBtc|NCW@)5p@NUbKIEJcrPSAeUVST(^Zzsn_&C1SE%N5Jxx z0+yZ^f}5V7Nz#aVwAjb%w4eRs-ZUyIhW`(njmG9NLihdA9;fXY)C-^8XR#hVHXoLr z&+}&XOQ%T9E%KI83hnEDbZy0PwHXtZtB1xoi0#Y6wWCKX-=_$$lLXo$ZxFRU^Pm|O ztkr~LF?9S0rx^aMzK?#=pif>qll8r<0~y=B8H+k++VuZoxL`|PX0btn4{Xa^YH44) ztW#|FJNwxXD13r(($0Mg+lYO6sW(`p+8==d~%gbZrPz@vtzla}&@LDl2McY#C!#`8+oNl*i8(tk&wvYYT_~ zNgx zakF-Oih%9mqt(Oj1uSOBJ7DwB*_(x{-1;=UmKmdA zL7&_6K`Il;2jtSxEd8xPqCa}ybIC26$Eq&qB~YX4od4yS80;~aD356W>_D~^feZBOh+Ng}RSiC))xss%TmFzn0ntG_0pf*5YoKsKT7ak` z4hlhEKQ%fN-d_sQuC|Dj1Dv}ZO;x?-osN0q3&Jl?3yGrNJB(1~nqMiF z&_3(YFdHsayfZhqv#-=tc5TlN;xZ6Rl&cuR<6S>;&IS)zon*@ z+q-Y&=~m5P!y^+DKj#pZpN=CfWHE#00uwNxevTj!3e@QJ=TXvkcQ5AL%wUoag>-Ou zJ8^@Q`*DRtjY4MdqJ9=z#`d0l^iZ~XLxbvXkRJ62B7Tx4NPI_=#Ha6TOw|$8%zOK} zL{4-}*Ra(6s_7gCufNlPp95)oIx+f(p;|{Yzp8G=ZB2~`^xKTB?BQQnSVg*NF5t7_ zfTn#EBF*hOW#02hJC1CtjmZ6c zA=DTyQC`vcTK64?U=$bOe;A@Ww@Z58X}+hO^%rntUlyw6^ciwE?QI|@CiwBtPu==; zhgC9kgumu^_uX!YXfdVBET6@~sH%Gv40}(A(V4QQZa7n7-YXJSn3_{~Xr#{3)#!IP{U-&Ytcuy=k58ygxH? z5%|1CpEh)BU-j-T)%DBdhef&x%dDxLrvsm{>)Q45FVO96uRPT-6CtE6HJrjS`YI{I`15YnL>2BWv9ArMs@ zX}VC|O#MohLH9sI$;RG^~C*JY?8d zOUoH7X4uFIc(Y$lruXihayV?gX}Ab%@p*_nN(&jCzU6rDU~-)CbvgS@KaIw0h1WE@ ze{g{elr<^*coIg(sfn&1jso61KOHWQU?#=LDk>cNTv`^Z&YIF>zAmC2awL{@d{b|4 z*@u-}f(GxQaqIUUCdgy?O$6!eIEO-?9oGtmu5@yFk+J9kv5}&K0HL0z8X!eenHWkw z{L>{<$G|F#wp%%)cchjtYDIe=-fw3|aLM~4>eMf;#LF$&vJ|5iwo=uI39r?9^w~UP zN?gwyw6}gFwaO}Rlnmj1Iqm{@yTOiXTAJFf&Gih*g?rB=5wb6E~pTyEz0 z6lf^O8eQXjlnIlF`ELCYo0eF>@o9T-K@k1^40~Az#XI(gUyv1zi^~=bH=s{;=@&{g z@2{WgrkKs#?V(HOI|;@sTJ`p8BLk3q0F@XGL=7X;CKI z@iS-u2~A#JBwfVn?FB_eojT9}E~Jm9d&GPz{)e4x*UaUYp)mCFRo8~es8V_%3=|&E zgY-{$#4khzW&C9DDoz%jx~4CY|2EcAA-RPJn>pSrZGcq%DHW5wZ$NZ@N`K8#%N=KC zg`jbG@;A2++qAb$~$Z9m))xW*dey%n4J*7rtlQ$PavFith_-l;{Nte(}OCy!9cskTc_?rA*Xd0#ki)N zYst$NYH;$L`TJ}4SB4csny{ScNjsIO|?WB{1S;Ei0?ykm9?beA;? zU+aDzk^#7~84}~Nx8vk{!Uy(GZeEo!Q?~RxsLdv_LRYM9*({0%cJx2<$=>dtKi%&& zC2P_ALs&~3*X(K>4-K5JFFCgiM!F%BlhyJN0#?jPY1qOuYdW(M2EuNxE2kATRfkhr z1pTFNy#ZFv>QtY;XC%?XCnmFXm%StcAC6x=LPU>*QP6ODcSCN|1w0_oM`8>XZm{hw z@E$+jC1bN>k|1Wjaq2Z9iYhMqaYeim+NF_99M5s(80>+W;D9+BlfjYx10~UA;+Wsj zBPWZA;X=17ciZ#&UGEm&fIW9`NIQyDA)TE0%QvefC(rE8Imi!^dNORY~O zyd7Pn1ivHCVsfi+fXRx@Ny$eJc-ytpJ%Qk?rR>+4`P7Q@@w&bjLwM-iuHNBG##sBb zY?LJ579#phiU+>8Y)52+Mz8Ktf8%SmOPAT@^1h3he%s{Kq@U+g)0iU2d%{#DC~(2p zaJa}p+ij>gtHoa6kUnd=TSUC|Gvbi)$d9n?6Y1jVmMm*x>Rt+XMMI{bh@tCs#`se- zwBuFnholAdh+L6^Z6i81fvC2%;KT*nyFyBdk=tB-4KuJtIBRjdwylxDPs=adn_hBh=H=6a}v$oTwWUs1?S>G)K9ZU*(=D{MiFLlPBqz)&$W9eEp# zXc`9Kvb29XmuN)3eDrJ$6$+lCu%3oHhgUF*6iS3;{@9OB65hY%zx-@Eah@z?r$~hn zQk3SNXt=BB?=UJ3H!YJ2F+(qww4#*M-OY>Ad(k(bf5il2X2wE%tlzROo*NDK;=9-> zM!SVt!I9}g^l>sM+?o9tC%6}#=ItMExpEPS~>KYLDwg^~nbITQ8R zP6aY3J_0Zye)+Zp`O$MDynaos8!Tw}h>l49JW%>=wtrjuHpjCu@cTN6o69!w41({6 zQRdwfE&R$7LveS2-{#*46&ddH^YMvsvzdzf^LE?cD2STRU-hQbdq>pt0!vP{9~Q&B zcg?-ia!_%iea2)c&X#GQi5WoJ;^RZP*+NjxHr@Qqetp&sr3Fao^@zEd)1X82 zED2W3Lt|{Yn6@mn@)(Q-fr8^ViH6lW!X`_!%fCA(Csl_C7o-X^MN5)P4qfi1c>@U5E? zU=Z-}^!yBQwR`hfK|yhO}tCHe2DeKRDR38lenK)6+R--?w-EBSG=rT7HQe z@Jw#fx-RgkN3RpO8c@9&hlnE~U;M{d*xfzT6YQqpc>vNt$Ot&3e=U!E!P4_^U%ni~ z^>lO}+-9hC;kK68mxqE$<$^`ys|@zl7`k8WN>CBUJcWE2D=c!J1)j8BXV*~LYfg8l z?ETeQsoIy`xvj+w+UKNCzOYf_?}CiERv(ws=VKoydKy0xYW3o(ypw7?*bKVWcmqE! zLur}Y9*fr+_6}W3KL}<6bVS=TuWsPu^ad)~dXp1GxXm`dmB?i%G_IfQP511U`oQAw zey<v7~R_E_Odf>Zxk+D#64{M<2} zFm>9n-3fHk@a$`w{HXaLG`UajvVjBx*R2B4a|q$Bi>yhOscYs&%N6LD8vH6*DLDoa zL95o=g;pcUGM&1E-f?SxUOv~0XRYqT4vpIrxF1cULaXf3T5mSxlVV4os}wkTYCLsx zpJh6aJTL#Q>O|sb+mNKhZ(w3^*gd71Z~a}KXl=R_+h>i z7z@q)7=sL4<~D_J6dZk^1RFI~B` z;keVJ9Q{Sty+2a|oETJBnWIE2qTz|T_HaqPL6)=O)Kyvrkrb0ciRJGV9zU&E2OpZC zCnPM|ROrA9QKG5GUtW7WUli!n=<7IPO4MI5u$4-mvH+K_u6gxN+J8|-ZSc;pV?(!T z*v&w%^h1NZ6x+LfE@NbfeGqrm;tlE(7sm~>a`L5sDRdlY{u<)$%=+v}^48ub~ z1a$Wq{1~8=^%)l=HclHgRKx&L5ZzM==UL%lniOL`uN;4Jw>!N$R;WT@L+;yP20jc* zs~`m6UKLwf84x{sL9)D8jfnQ@^f6TI%8joxW@_wD z;6%irT{tozc!RQrI#g@4sXL_rU?FiwW80BfNwssN9x@DLFlDQ=!`rU~zBiDz1_6ZW z!ij=RyaeZ*uv(*;T6Wz2G1qe0^$`}ERk?ARf2iXfGo;U!1$Y^ayu?xgfl7ywaZ!D5 zX1Z(Fd=ekv^Jfj$5rfCaE(L;7B4>@eJyr|I_f{(>*T?{4Z{szDNHWQwZRm}F3OpIC z+)vkX08VrXB>?o>_p;ZV_#&k?9i_W#}T;Ti{F zY~fYQy?x9ew7ZcK_ZNUx1QRa-jBi4!oyO2?+zUlv!Isj)@W*82i(N6^{dq!t;rT?Z zVdNtUK&%*Br$)c3*JQ>)9Q-NnxMzZWGxV6ropMSbDdj_tg*BNmwme%1cXylLZ@PCi zYvkQ#fFDv^++}-|*9txC2bN2azK|5~fv)2=o$y6qC>E{p)$nze>Q~PBUdQmQH|F`D zA6~`9uj9Pz$f$?`B4l2ON9}SN8r<^luP&~HQa4ZUa3p^OJl;MZ?6f`^D};wNvpJV% z#DEIG+dO7;yCFz);ehV$&ijdh!H1|}eJ-2aRcnr56dXhtuq0y4!tAwbTp%3yWbpXG zU_o3|o&+a{{>T0)gQ1Y9=mO8;abTVx3 zi+=>?+AY-Vz#80Wn z`gOgVQp6Itw9kywKHZJmJy~4(o*}`SCPgHOz&MO1-okzTBBqET7K1Y^?bng3_3>8L z1k5nny&{2X;|$il-4N6De1*L8WQ}bTCHHPShIKvT{bMEn4jI(f>v21+KVIWQNJOIT z@X?p)-k-gc%R{66$YN4I_RZ{Y=fR;UWh^y=N zuiD+tU&IO%wCq|VxATNlYo2Sg7V*j=`^9Vd_BdXlhBaT2R zpjGYAEeq?-Mn>EhsJ086@u_HO4}am;h=D*d6zH>x2|vX}A((v6%xl!!gWvi|FMOV; z9pR(+*=j<&V3C0OEEzb=)=YpEZV%)Ae}7j{UfiWLX^ss{NKhJ7=EIH+Ov`Ly(CwFgt@dkmc1Ztl*iEaED z4jbsE&7oh1lqe11w*KI(Y`FEd$@)p0-%y z7Vjo6y`L-^ZTF^xumjhKJTW$G0HI+aH#x39O5cuJ;iv!j!Kf-c%d#{spx#6!W-2Epyy<-V@r>e@6 z6hW9leL@oUC|?}v!6DJ0S<^Cj&t8ee?S0QeJ7dwLy11zzk#VuwY%DE-{o@M=1STn0 zkGBIOBbt=4B#b@&nM6;t7gYXA4u~IIVnq? zX-2=OJ=~QI7I_6t#nEa%kLcwYeP6fpTCm5$m1v5Hrj|I6lBf7}H3u3U;}Txxc!IDM zh#E%+$5L~L^_i{~TJWEyy@+O~bmsUuqghm*VN^tazy%BxyOgV*m}74*_ySVLhYt0s zML{YLgpxPyW3`soJPea0?|__!ZoStdr|&-cI8+IEy;i7^!WQ}{qKfZ-;NkQ84Xa-| ze>oUCw!zWTl9O^q<-KV~Go)hp6UG$8&+R4iPois6!S3vb_Z8w*F|BW zE-xPEFl2(U>EX5WqyKaS4S%l{1KiOueSy}QTnl@w-k22V_@z^(3aT&>;>ci%1EU0s zL_+=BFID$e-5Ifs#6V`H9=bS_Kg7oq$6f!dh@tk)Qi=|XV=^mhaS~P3M-}i8n=5Rp zVBfMCB*I?j@q)WS1LdOxNEC}Dr_3{Gx@I>3s%UpKNnZ|?S6F9q;OA2*0onrt%Y2JM zMcH09T8RZ^vRh~N`T;~7Q<-!6!{^^B6LievYd!2(aaPzZLNNf-an~SMB!U%_B?Jz< zH16*S{86TVG48lk(R1}YP#tz$!ZM)+1d6`m(LnbmS!c7%3h+7p-(G-5>DotA16()n zhR}pB*JnIt6j9#v-oE=G7^!L~?-$r#V+B_kkxEzS!UA&gxY)jBt|%QgmZBA=Gqcqn z_!Pxqf;Ezcqb8n3mp<|>YjQ0MJuMHC7M%NeJNK9V#^>E72aJ>y^ydp~Hmt!CT6oxD zIny_JEif+S;1!RyxLV2j@s5j*tt?HTdcTNn=|d5$pSK|MyX!rPSF(5?js(o~C;CZM z^2(`(`G|;UARw;k=@TFTAXH9Zx4`$|J2KMm;b(6UiAtr%a&rIP zypt3AIl=HR*N&6uK7T$=6Ha>*yGi3NZ zaosG0^tUklu|FPx3~nmt)k``HM@)6>%hla?##v&@Tg(veRaoBDrLU*pOv>!Aj)S&q zguBcbnHU+#GlHG+YscE)?Xp4Bs|jFUvFZl39XjsY*Y6QS8R~wqBgp=Ab}2779rqf? z<|UW^aM#8#y~e1kESz&x`4vfgy2dyEk>KmqfPBX&BTY?0=$Arq7H{(u&a>OvB}G+@ z76ggO3ES(eUy(P2^Z*K-Q(lO=cYU-q{wp=g zW}6G|h5I4w%Rs%804|Ps9zzraYUVignD3`n zF<5Hlz6og(7Bz1~KDxApOYzS>LiNrg@^t3@1(Wze*ys;?dIte|c^m>NyH~1z?I?a? z;-MT~(euUEf36WDt#Io^loLCgN8NK#0itje-?;xw56EA>X%rzuj?wZfmHA~02G!;H zA9P@oEGOQw=ccG`h!~qd@1&QuH)+491ct}2(-j!*joMPo^b6t7S#ty+gnydTQ|Q>a z3d_UUx0%sRW(=3<@V0l#ysV#WGkf{=w?tsrn!RdrwLAYP)fq3Z;7TdcTS%#e?+Xs{ zVs;K%YPj5oMG3T6<217UzREFjOv>J4#p*!~H=HFwkynMPuEWB!&xKm5)KN|MVjYPSG(J>ilL=?VQi9>;MTp=!^@d#x+HlAehkW8_qkTT{^ ze&jeBC@h@;@p(7~22vU_%$`KFT0c2zKs64_aM3qPihcJ%R!o1q7e zifOrx&EstTT?K~4bgq|u29*=jd^yQ$m=MH(dW!`wySA)Y7LB`&xSBR9>OVRnAgY4A zm{aSuc8{jrj~MbQJv!53p{!Yl1JYpB^yv+Z8Cq3nc_yFq4~kTs5yz_s$tG4C%u)YNZF z{|7d;g=+4KkY1uXg?*69abzcj&-z6njqSpY?Y+sxm|IixXV^nqU?us4?r9gYehnp* z5(hJ$tSF6uW4!Mr16MJ=act`!t7+Mz!>UM7P1U^k zr&qnwOM&P3EwMd?as8y{L3$?On^v~s52>!%fU2h&)LBSPKY+Fze8B@FxOk97X>rB1_Eq;qt+N4=Tr>53uvMTLkx5B&qS`5K5p=8HDx~v9%j`Dy!wBsN?G4Vb%9zU!e1j+$e+73Ep6=iWi zY+!yfewX!8qCg&wGs(|@14o||`{m26hLf(&i`LYdsoiP-xb10atAy&rFQCm9T`wU< zcMdjetGl8?j*04|VYzQWlHYNAq~;>|tIpPwojX=CufN2~6*(FP2DyS_GVVKC*kCac z{~gFq8L;3LS!Sl=@LnBR0M>gXmGwxu`M)cu3_*PV`9MU>5=-uqPOg6xI9v-Dix$NW z)$o4Lfq@y#(Id6^%eY;7>gg;bv|Z6Tp}eo-pwmo?C#Zk*1xa`N;(1>s=jWWdk;+$` z=wYTtzg`Hr%Z9z#uHS!a+!=bqi6NLI=fTIALlgpig~>nd%i6T96xReav!}x21g{Gy zky=0t&$=jfP3N3g(Du&bl?(&JQ7WpmBZ}C0gv!{@hX=Av)t&+Wa{ACBuzwS*&`N*b zEC;khH6sv7Xadk8QmKI!K#A`@IOTxvX#WjKy+Nv|JfjI5-b6_wF$1=o*ovu9+U>?m z4kcBKBL5v7Zc(~?Hz5Dk`bo?Y)+o<; zwS2`imBSj8FaU#&i5j{v0vl9OP)1`}O~)e)=d2^X1dUW0^cF~(7*|^N5k_#v>-kM5 zG+7#Y+rrzY>g^;@bRu0Kq}RWfr^MGu*p>x^Sq;tV+uaT3Zp=PoKiOmp%UXkDwEVV% z7?%`RVXL5`MhAC28o5uSHGYZ)8?dC~NvAH*saApy0YF3F)!?#2k}HiW*fsq9*_r7k z@CwE|Qq)ySKxbP!zj;jQbXFr8u)OrO+pUd_rLlo4A!BN^N%uPS{Lls~B`x(hG-J2-tKyQND_be4oQ>U{T^R@&@7VerK_g(QGXEn*Eo8O_m%s zEE47Qd8q97Y?;E=&P1sWNZBR)Z0S1YsQ!uQY63N^WNWX)*Ery^8B)gbF(u?oNBv=0*t6*;4Ph&zsZ3cvl|_xZPiL6{-nzO}Z~l2bTj1dEyR!-M_X123Y6+nHHa zUI`bHvL;^e0!A%{ule8U>}rjF8uF#mbH|~Iz&2j?qJBK?lztokljsWsTS-nr9}uau z^pB3VHm|h_u`4E~M?id@rS*EVXWO3J!NRkaniT{}V=<(1+qlVu5uxbVm^!_zF+N{B z=hD^;t2J@sS;=iYElq8An7n5lD+77w3ytKQ*(KVKqK#oEltM3VDr`~KCg`;)l? ziQGjZp7!j4P=g_|fQgjkm#Ep4SUF||0}9Spn!Vv@i}BHmL-j!UwWV4QX&Fcf(uzFJQRtb2 zFo$+6jWRk;|K@dR^!HJ)&yr*3(1^TuM9STqidhjg7zWy)UXuwY2I}b<4GZn3yE;za zj{uyFguuuGeU40=p!^n~X{ zIx#|j9dQ~hXv|WgfT%u zMgjy*=V=VdU(8vpOb^%kNEf?ZC`_eWe-|LR}~x zpOqn3jLnEK=hF8mcxeKTE9`YgvJ_v9!Fp18@q3TCDR1dTUVDtFoU}5&NEmF23JlLF`)JI^h#vE ziHmCB9u5zW6Qo&0fOdtH-(vIoL)gyqm|NhK%S*t5zf&3WEtBnU%%1b+oqM6CU z7U;JB+nGBI`lKmQLzJY%C1){#@XoFV%(cE()ONmi+=}^qbXok_$4SHJ`1tb& z!@53GiHSR#8bzOo2R0fS&&<0X+lEV!%cgcsGRH@|T|X>hfSrfEN;8=;UJIk|V|R|2Y>t zT1(X$EyfmvnmQV7%0Z@rsYpPXcM9&D6AOb38jtv~#MG)yHKzyOc<>d!WpX4namF4# zD3JQ$e#Dd|ztR$P7g^A>=2Q%bM4|FmblN$!N72?5lP~~&h(4!%Ln{AX1QG9y*3}0kV7X0CgWUoFoQbA56GIQ__RR_puTVs(KzUlR`H6*zmYyCf?~$$o zuLP9fDRon${_N09JQ0mBf(D8Nb01NHSJGY=DKfs16?_gn zwv7Hi=1Am7C3D6XI`FcJe;#is{hp{)m=nVrl+fhA@98N)&9Q)UE#n?rCO5M?*RjFQ z5mncR2Ux4)C5}II=69_+Lknt6_6FlF&2a!%r3wL6WgCcFpCNux~CxY%TPBkR(t^u4lW68>71S+B7Ks zLR9d@1^X#1@Y{?~s-p36QZ{aRI_&Wn1k$GJP(jME=)YW~XaJIoOfK&b%j~A!9a&z@ zYKM58);0sgL1T7dgH9t^P+!_dLX)G5x-1G>7WZKVv=S`F7E&$+ub$k<>7Rv7)|!W zw(Kp+1pTr&g97T`pRUHDB&Hej@~Q%_A$Ng)7-PbgjFqk&NiG&O7V=H?67J3M%-hQaMtilOl?^@+RKahp5YErrOr= zTyFW^@n@5&7jptNG1%Lgg0}BJgOgBzDM+xjc59>j;z|~A%wWl0A~s^cgbmH_Orkc5 zCK*02NpU^MtoS8nje7wT*V-9m@|pIfI%AV}-aKnn2d-Z@~f|d^HuL%y^LGt3nm9X_?!j-0qbmLG-k*r(>_}^ zd$gIMg)xV2IEY0*#excEK95Mi)C**@X3c_zjXTxkP>9R!O~uSS3k40O&xUu(Mk6~< zMaxLZ&L89hi+p|C9R!B(MowI_yyI;pRNn{$LcygK)z9zJVO5F4jabh>vk;iSowaqm zPYr)Mlx(#Eo&~Tjas@(mtP{}_`%#R*XAj*zi20@_25SOhzNVl{8EDmTozN%CpHp;VKMz@ z|4YXa6~K@hmHd}&(Pp_nl%RvU+S(7ke&Q(@Yvipff&?ZdGi>nom0P(I&({Nb+V(kp zM5%FRJtRJ6J7nEZ;LV&MRTRqc5qBO34}Tn1O}qD3kYv`zA37l?6}%X*fVHcoE2ZyS zqXO{xS~)t{#i=(Q%v@;c`c_>+L*FWd4G}gFuyN75?+7j z*~RBsGbW+S0RI8I46a{ojU@@of;r7wcK>>EeI-M>d~PR&6}i&6aMUOn7pegQd?_P$ zWTWb`Vw-Yux9u-~{zB7AYuf!ugzF1P+Ilo zxvT=|k)IH3Vya)i=6Ton=e$p=k~&5VQA{NJh)Z_<&&24!&WV6>9aTl{68Xu|Ih<(z zoM8zcUBQT8RC3m0>^lt&H5FaOUNa{Sq6{8qq>x~)E&5peNxkjo8+ zfH;9q7HDWu_5l9K0{hVrY$m@K<0@0-B^rRBp9b{?JEBk@SfH)q*8)mY>XT{vUU*Z) z5k-xv_qbOGzhX3Z`}OuVM5Wf*Us&H^EhbvEPu;kwI#RKB4e+j@|BgC6r~X)^k# zFoo>MXh^dHAYt@vMdB_lFXQ}ZcTd=52e!7bi+SW)A*mc+>up7Uu+cd4`+DlwCpK99*AdWvyhldM~(>$O4157bjbG$@1;KA|yp1q_y zm4!RcoGzyYS4?ig_cYk}ZTiniLv`gO5XFgU@^I43PmQEBPM0y z6(q{snB9LwPsj|Rxm|PP7RV6O*Oi-YF*XMMZpc$fVWo`ON9NQP@$b>g4(}}}Fcf&U zqz5-D>iFvYcy5DIRdt_OjZnng1%Whio9P*KC|g_MwjvvHKIs~G@KL=*e}I{a7}-ZR zme^OqKSNQ|`F`HtLOrK?qNC|@JkDifOH7GT$}C?qB2mtz@eG~YBxK}^jsMs;$wkAl zL8OL4U*`^)8M5KH?{-x4B`1=HK*BlmgpWy_V>U7=0onQ|Q}qVdS6Hv^uPvAsYuC)7 z4Gc)$-g9_)yeH**o+6QZG~y;_A5ttyxYO?t;?Dkh0~od&0}V-gH0Aw&>^z?tQsel? z9Te!vVfm7icMW7DfL0~))1uR&OHA?onv3=8o#o)_R?ID1(yQV6dJDs-a5*E;tPZQC zsj#oKW8K)_Bt#8-;~58n-V}Jvug%-H-6gqmu~U`*!cSVvxR6Fgh091E^EWVLdWq23 za7c}htzy9a-LYD=Ay}=PJF8=TnGx_MuOVmc;i1MtAe|)5{wmmWGj{tfk7tQ&kU%cO-XyZ?ghvA^8QSvJ;sH+~f zIzsb=mZ;5#Z+2xp;6r>Fi@v4pQ~^MelGwN`hV{Q2&ZEt zd-&%75sB~`UCs!Grla{k)EBAy8{~G_wEjfO6VviVDkYUKQ9*)jZrFmFo&Mj?i2QsJ zVJZN$X*P_o>?b41K_cmX3yviG`P{5438@LwZ!jWp9!R2a-fS`YTF?m^xZvBqU-bZA z)OSK97$ifb#0W{rn$<5Og8rRH>hOUg)SP(r_=vhjBsk6ldf-TDOIAf3x1A+J$DtKB zy+{ToAy%F$TXSeHslR5n-qXj83rLyL3TEu3AcE@JQUXO3XEC8?N5_7kLIk0txe!zy z^p6-&wwA^F2lD-|06_!3{CvvGWDhSDfTT+W$LS<6KbOG#+&Z7@s*2NO#$olr>E};{ zj}LaU1&76gZZM)LN{xaL?&Rnosv5X1P|-0somd@qEH*pV$_mWoWtbf{j4qcBg_?IP5mPtSJ9*erEauDTns%rD`#z zi>e$bdQVmW)Kdg%PFhM~VQ%hfzu=${1*N~LsFo@{AQge6FZKF5n$sc5OG-*h@^d~r zc3|%vxoIh>?jf?%{i;>~9z*f)xvLw#k*XXM7QpI$nWGbjL`20W{LaTO;7qf{8g4L| zRMlXVPC`kqHT8w2;c(b>TSa+ZMM=?yoQ$-W^U_kX-3{Lc*xi4tt$_N&fgYm(YAXRl zJta{6GPz%d_+g_)28M)RWbySKZ#G-QjAm1S!C*3~1{FnBQ4|@nAn8Gk9f8nwgs$Uq zx?C=&qtsqmo^LBJ+f!PU|8e@!!w20xe06Vcul1@u1n^kn?+OLbm?dBY%x(o>cE74W zSKTi~Q4}ROB09`3C?vsbu|y~a)z=*{D$N6lx1$SPt8_V>Ic3EKCyR2k^4*Sa;qK9O zcLR61d;aQ|z1HWtryGA)DS+BapxPQR)aw1swf;A{zpGIM^?V5uNzX9?PXDdl@HKY> zukQKlkNIo&`l2fuCS9lmXhabhYBhdiz0cKp%0nsvNl$6~qF&?IYQ0>wlz`Sq!-p=4 z1L%$hr8Hp`sI^{=SpiZ3NP4mYs8#}cz4xL!8h&>wfTolIjWl*e4g(~;!2ECQMRzrN zZ&Cow-H+ns_bQRJMhP_bUPi)7Boc{4B9TZW5{X12kw_#Gi9{liNF)-8L?Y>Q{vS6A VKQIv0(8d4&002ovPDHLkV1oF`DJlQ} diff --git a/client/core/res/src/commonMain/moko-resources/images/ic_dialog_and_snackbar@2x.png b/client/core/res/src/commonMain/moko-resources/images/ic_dialog_and_snackbar@2x.png old mode 100755 new mode 100644 index 8b29025aac7714265d3b068b0d1d5ed4f34daad9..1c4581b7b1f436eb35eabfb0462ef655a9a5c0ff GIT binary patch literal 7224 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 Si5jZv2dFA(D%QwbhyNeqoXJ@L literal 6994 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 UYG-_oJ}U#%m9>>>6s*Gk50G5*h5!Hn From 283e3e018fd6fed08b15f588dcaaabb8c0c093ee Mon Sep 17 00:00:00 2001 From: Mustafa Ozhan Date: Mon, 19 Aug 2024 19:37:24 +0200 Subject: [PATCH 86/89] [Oztechan/CCC#3793] Replace launchImage (#3795) --- .../launchImage.imageset/launchImage.png | Bin 23438 -> 19841 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/ios/CCC/Resources/Assets.xcassets/launchImage.imageset/launchImage.png b/ios/CCC/Resources/Assets.xcassets/launchImage.imageset/launchImage.png index 2d3ac2753f22c63e484356221560cfcf0b03b08d..ee40782d975ecf561238f3296cd7e51d72dd372a 100644 GIT binary patch literal 19841 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ř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 literal 23438 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 Date: Mon, 19 Aug 2024 19:37:38 +0200 Subject: [PATCH 87/89] [Oztechan/CCC#1457] Lock file maintenance (#3794) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: Mustafa Ozhan --- ios/Gemfile.lock | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/ios/Gemfile.lock b/ios/Gemfile.lock index fa7f10e0ad..4b1a23c0ba 100644 --- a/ios/Gemfile.lock +++ b/ios/Gemfile.lock @@ -10,16 +10,16 @@ GEM artifactory (3.0.17) atomos (0.1.3) aws-eventstream (1.3.0) - aws-partitions (1.963.0) - aws-sdk-core (3.201.4) + aws-partitions (1.965.0) + aws-sdk-core (3.201.5) aws-eventstream (~> 1, >= 1.3.0) aws-partitions (~> 1, >= 1.651.0) - aws-sigv4 (~> 1.8) + aws-sigv4 (~> 1.9) jmespath (~> 1, >= 1.6.1) aws-sdk-kms (1.88.0) aws-sdk-core (~> 3, >= 3.201.0) aws-sigv4 (~> 1.5) - aws-sdk-s3 (1.157.0) + aws-sdk-s3 (1.158.0) aws-sdk-core (~> 3, >= 3.201.0) aws-sdk-kms (~> 1) aws-sigv4 (~> 1.5) @@ -154,7 +154,7 @@ GEM os (>= 0.9, < 2.0) signet (>= 0.16, < 2.a) highline (2.0.3) - http-cookie (1.0.6) + http-cookie (1.0.7) domain_name (~> 0.5) httpclient (2.8.3) jmespath (1.6.2) @@ -178,7 +178,7 @@ GEM trailblazer-option (>= 0.1.1, < 0.2.0) uber (< 0.2.0) retriable (3.1.2) - rexml (3.3.4) + rexml (3.3.5) strscan rouge (2.0.7) ruby2_keywords (0.0.5) From ae26a3525c24aa60a07f16a04d7a7b385f4d62ac Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 19 Aug 2024 19:39:48 +0200 Subject: [PATCH 88/89] [Oztechan/CCC#1457] Update dependency com.google.android.gms:play-services-ads to v23.3.0 (#3765) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: Mustafa Ozhan --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index fa8dcbaa83..611e9b9dee 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -23,7 +23,7 @@ googleServices = "4.4.2" firebasePer = "21.0.1" firebasePerPlugin = "1.4.2" firebaseCrashlyticsPlugin = "3.0.2" -googleAds = "23.2.0" +googleAds = "23.3.0" googleUmp = "2.2.0" huaweiAds = "3.4.73.301" huaweiOsm = "1.3.35" From e984f6b17e26dc755ed0463d31fae1bd812c1a72 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 19 Aug 2024 19:44:08 +0200 Subject: [PATCH 89/89] [Oztechan/CCC#1457] Update dependency com.google.android.ump:user-messaging-platform to v3 (#3701) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: Mustafa Ozhan --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 611e9b9dee..d02d944de2 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -24,7 +24,7 @@ firebasePer = "21.0.1" firebasePerPlugin = "1.4.2" firebaseCrashlyticsPlugin = "3.0.2" googleAds = "23.3.0" -googleUmp = "2.2.0" +googleUmp = "3.0.0" huaweiAds = "3.4.73.301" huaweiOsm = "1.3.35" navigation = "2.7.7"