From 0e0537e6d430d86b9d874f1020f8757de17b71cd Mon Sep 17 00:00:00 2001 From: Sk Niyaj Ali Date: Tue, 19 Nov 2024 22:47:20 +0530 Subject: [PATCH] fix: Fixed Desktop Build & Added Firebase App Distribution (#1816) * Feat: KMP Library Setup (#1766) * Migrating from hilt to koin (This) (#1764) * Migrating from hilt to koin * Fixed Instance creation error * refactor: Removed Hilt and migrated to Koin This commit removes Hilt and migrates the project to Koin for dependency injection. The following changes were made: - Removed the `AndroidHiltConventionPlugin`. - Added the `AndroidKoinConventionPlugin`. - Updated dependencies to use Koin. - Updated KSP configuration for Koin. - Updated feature modules to use Koin. - Updated common modules to use Koin . - Removed Hilt annotations and replaced them with Koin annotations. - Updated ViewModels to use Koin for dependency injection. - Updated modules to use Koin for dependency injection. * Formatted Dependencies * migrating from hilt to koin clean up commit * Revert "migrating from hilt to koin clean up commit" This reverts commit bb63058e49299a23d4397ef8ed2ff6236418bd7e. --------- Co-authored-by: Sk Niyaj Ali * Feat: KMP Library Setup --------- Co-authored-by: Nagarjuna <99315689+Nagarjuna0033@users.noreply.github.com> * Feat: [:core:model] - Migrated to KMM (#1770) * Feat: [:core:common] KMP Migration (#1768) * Feat: [:core:common] KMP Migration * Updated Usage Declaration * Feat: [:core:datastore] - Migrated to KMP (#1769) * Feat: [:core:network] - Migrated to KMP (#1772) * Feat: [:core:network] - Migrated to KMP * Feat: [:core:data] - Migrated to KMP Library * Feat: [:core:designsystem] - Migrated to KMP with CMP Library (#1774) * Feat: [:core:ui] - Migrated to KMP with CMP Library (#1775) * Feat: [:feature:auth] - Migrated to Kotlin Multiplatform (#1782) * Feat: [:feature:auth] - Migrated to Kotlin Multiplatform * Added Support For Web * Feat: Migrated Passcode Module to KMP (#1783) * Feat: Migrated Home Module to KMP (#1784) * Feat: Migrated Edit Password Module to KMP (#1787) * Feat: Migrated FAQ module to kmp (#1786) * Feat: Migrated Settings Module to KMP (#1785) * Feat: Migrated Profile Module to KMP (#1788) * Feat: Migrated History Module to KMP (#1790) * Feat: Migrated Payments Module to KMP (#1791) * Feat: Migrated Finance Module to KMP (#1792) * Feat: Migrated Accounts Module to KMP (#1793) * Feat: Migrated Accounts Module to KMP * Updated README.md * Update README.md * Feat: Migrated Invoices Module to KMP (#1794) * Feat: Migrated KYC Module to KMP (#1798) * Migrated Notification Module to KMP (#1799) * Feat: Migrated KYC Module to KMP * Feat: Migrated Notification Module to KMP * Feat: Migrated Saved Card Module to KMP (#1800) * Feat: Migrated Receipt Module to KMP (#1801) * fix: Ios Build (#1802) * Feat: Migrated SI Module to KMP (#1803) * Feat: Migrated Request Money Module to KMP (#1807) * Feat: Migrated Send Money Module to KMP (#1808) * Feat: Migrated Make Transfer Module to KMP (#1809) * Feat: Migrated QR Module to KMP (#1810) * Feat: Migrated UPI Setup Module to KMP (#1811) * Feat: Final Clean-up For KMP (#1812) * Feat: Final Cleanup For KMP * Update README.md * Update EditPassword README.md * Update FAQ README.md * Update Finance README.md * Update History README.md * Update Home README.md * Update Invoice README.md * Update KYC README.md * Update Make Transfer README.md * Update Notification README.md * Update Payments README.md * Update Profile README.md * Update Saved Card README.md * Update Send Money README.md * Update Settings README.md * Update SI README.md * Migrating from hilt to koin (This) (#1764) * Migrating from hilt to koin * Fixed Instance creation error * refactor: Removed Hilt and migrated to Koin This commit removes Hilt and migrates the project to Koin for dependency injection. The following changes were made: - Removed the `AndroidHiltConventionPlugin`. - Added the `AndroidKoinConventionPlugin`. - Updated dependencies to use Koin. - Updated KSP configuration for Koin. - Updated feature modules to use Koin. - Updated common modules to use Koin . - Removed Hilt annotations and replaced them with Koin annotations. - Updated ViewModels to use Koin for dependency injection. - Updated modules to use Koin for dependency injection. * Formatted Dependencies * migrating from hilt to koin clean up commit * Revert "migrating from hilt to koin clean up commit" This reverts commit bb63058e49299a23d4397ef8ed2ff6236418bd7e. --------- Co-authored-by: Sk Niyaj Ali * Profile UI redesign (#1767) * Refactor Profile UI * Fixed Build Issue * Profile UI Bug Fix & Improvement * added placeholder for when uri is null cleanup fix spotless test failure * Fix - CI Build Issue --------- Co-authored-by: Sk Niyaj Ali * refactor: Redesign payment screen (#1773) * refactor: Redesign payment screen * resolved detekt error * refactor : changed current theme instead of using NewUi * resolved spotless errors * refactor: Redesign finance screen (#1777) * refactor: Redesign payment screen * resolved detekt error * refactor : changed current theme instead of using NewUi * resolved spotless errors * refactor: Redesign finance screen UI * resolved spotless errors * resolved conflicts * changed structure of accounts screen * refactor padding values in finance screen * fix: dark theme colors (#1789) * fix: dark theme colors * fixed edit icon tint * Fix invoice api (#1797) * Redesign requeset screen UI * fix MissingKoinDefinitionException * removed comments and fixed share qr code bug * fix: Invoice APIs * update readme file (#1804) * update readme file * update readme file * update readme file with how to contribute * Add branch policy (#1805) * update readme file * update readme file * update readme file with how to contribute * update readme file with how to contribute * update readme file with branch Policy --------- Co-authored-by: Rajan Maurya * Migrating from hilt to koin (This) (#1764) * Migrating from hilt to koin * Fixed Instance creation error * refactor: Removed Hilt and migrated to Koin This commit removes Hilt and migrates the project to Koin for dependency injection. The following changes were made: - Removed the `AndroidHiltConventionPlugin`. - Added the `AndroidKoinConventionPlugin`. - Updated dependencies to use Koin. - Updated KSP configuration for Koin. - Updated feature modules to use Koin. - Updated common modules to use Koin . - Removed Hilt annotations and replaced them with Koin annotations. - Updated ViewModels to use Koin for dependency injection. - Updated modules to use Koin for dependency injection. * Formatted Dependencies * migrating from hilt to koin clean up commit * Revert "migrating from hilt to koin clean up commit" This reverts commit bb63058e49299a23d4397ef8ed2ff6236418bd7e. --------- Co-authored-by: Sk Niyaj Ali * Merge kmm-impl to dev * Update make_site.yaml * fix: Fixed Desktop Versioning * - Added Firebase App Distribution --------- Co-authored-by: Nagarjuna <99315689+Nagarjuna0033@users.noreply.github.com> Co-authored-by: Rajan Maurya Co-authored-by: Pronay Sarker Co-authored-by: kapmaurya <152150716+kapmaurya@users.noreply.github.com> --- .github/actions/inflate-secrets/action.yml | 10 ++ ...AppDistributionServiceCredentialsFile.json | 13 +++ .../workflows/internal_or_beta_release.yml | 19 +++- .github/workflows/make_site.yaml | 4 +- .github/workflows/master_dev_ci.yml | 37 ++------ .github/workflows/release_to_production.yml | 1 + .github/workflows/weekly.yaml | 2 +- build.gradle.kts | 1 + core/data/build.gradle.kts | 5 - core/datastore-proto/.gitignore | 1 - core/datastore-proto/README.md | 3 - core/datastore-proto/build.gradle.kts | 43 --------- .../core/datastore/proto/client_info.proto | 13 --- .../core/datastore/proto/role_info.proto | 11 --- .../core/datastore/proto/user_info.proto | 20 ---- core/datastore/build.gradle.kts | 2 +- .../core/datastore/PreferencesMapper.kt | 6 +- .../datastore/UserPreferencesDataSource.kt | 4 +- .../datastore/model}/ClientPreferences.kt | 2 +- .../core/datastore/model}/RolePreferences.kt | 2 +- .../datastore/model}/UserInfoPreferences.kt | 2 +- gradle/libs.versions.toml | 7 ++ mifospay-android/build.gradle.kts | 18 +++- .../prodReleaseRuntimeClasspath.tree.txt | 15 +-- .../prodReleaseRuntimeClasspath.txt | 1 - mifospay-android/google-services.json | 86 +++++------------- mifospay-android/prodRelease-badging.txt | 6 +- .../org/mifospay/ExampleInstrumentedTest.kt | 32 ------- .../mifospay/{ => android}/MainActivity.kt | 2 +- .../org/mifospay/{ => android}/MifosPayApp.kt | 2 +- mifospay-desktop/build.gradle.kts | 38 ++------ mifospay-web/build.gradle.kts | 20 ++-- mifospay-web/src/jsMain/kotlin/Application.kt | 7 +- mifospay-web/src/jsMain/resources/favicon.ico | Bin 0 -> 183045 bytes mifospay-web/src/jsMain/resources/index.html | 30 +++++- .../src/wasmJsMain/resources/favicon.ico | Bin 0 -> 183045 bytes settings.gradle.kts | 1 - 37 files changed, 168 insertions(+), 298 deletions(-) create mode 100644 .github/mockFirebaseAppDistributionServiceCredentialsFile.json delete mode 100644 core/datastore-proto/.gitignore delete mode 100644 core/datastore-proto/README.md delete mode 100644 core/datastore-proto/build.gradle.kts delete mode 100644 core/datastore-proto/src/commonMain/kotlin/proto/org/mifospay/core/datastore/proto/client_info.proto delete mode 100644 core/datastore-proto/src/commonMain/kotlin/proto/org/mifospay/core/datastore/proto/role_info.proto delete mode 100644 core/datastore-proto/src/commonMain/kotlin/proto/org/mifospay/core/datastore/proto/user_info.proto rename core/{datastore-proto/src/commonMain/kotlin/org/mifospay/core/datastore/proto => datastore/src/commonMain/kotlin/org/mifospay/core/datastore/model}/ClientPreferences.kt (97%) rename core/{datastore-proto/src/commonMain/kotlin/org/mifospay/core/datastore/proto => datastore/src/commonMain/kotlin/org/mifospay/core/datastore/model}/RolePreferences.kt (94%) rename core/{datastore-proto/src/commonMain/kotlin/org/mifospay/core/datastore/proto => datastore/src/commonMain/kotlin/org/mifospay/core/datastore/model}/UserInfoPreferences.kt (96%) delete mode 100644 mifospay-android/src/androidTest/java/org/mifospay/ExampleInstrumentedTest.kt rename mifospay-android/src/main/kotlin/org/mifospay/{ => android}/MainActivity.kt (98%) rename mifospay-android/src/main/kotlin/org/mifospay/{ => android}/MifosPayApp.kt (96%) create mode 100644 mifospay-web/src/jsMain/resources/favicon.ico create mode 100644 mifospay-web/src/wasmJsMain/resources/favicon.ico diff --git a/.github/actions/inflate-secrets/action.yml b/.github/actions/inflate-secrets/action.yml index df69f71de..617bd9dca 100644 --- a/.github/actions/inflate-secrets/action.yml +++ b/.github/actions/inflate-secrets/action.yml @@ -10,6 +10,9 @@ inputs: playstore-creds: description: 'The playstore credentials to inflate' required: true + firebase-creds: + description: 'The firebase credentials to inflate' + required: true runs: using: 'composite' steps: @@ -38,3 +41,10 @@ runs: CREDS: ${{ inputs.playstore-creds }} run: | echo $CREDS > mifospay-android/playStorePublishServiceCredentialsFile.json + + - name: Inflate firebaseAppDistributionServiceCredentialsFile.json + shell: bash + env: + CREDS: ${{ inputs.firebase-creds }} + run: | + echo $CREDS > mifospay-android/firebaseAppDistributionServiceCredentialsFile.json \ No newline at end of file diff --git a/.github/mockFirebaseAppDistributionServiceCredentialsFile.json b/.github/mockFirebaseAppDistributionServiceCredentialsFile.json new file mode 100644 index 000000000..9102dc082 --- /dev/null +++ b/.github/mockFirebaseAppDistributionServiceCredentialsFile.json @@ -0,0 +1,13 @@ +{ + "type": "service_account", + "project_id": "mifoswallet-baa0c", + "private_key_id": "private_key_id", + "private_key": "private_key", + "client_email": "client_email", + "client_id": "111380693391682832489", + "auth_uri": "https://accounts.google.com/o/oauth2/auth", + "token_uri": "https://oauth2.googleapis.com/token", + "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs", + "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/firebase-adminsdk-w3hi9%40mifoswallet-baa0c.iam.gserviceaccount.com", + "universe_domain": "googleapis.com" +} diff --git a/.github/workflows/internal_or_beta_release.yml b/.github/workflows/internal_or_beta_release.yml index 19efb8b9f..2fcf1da91 100644 --- a/.github/workflows/internal_or_beta_release.yml +++ b/.github/workflows/internal_or_beta_release.yml @@ -42,7 +42,7 @@ jobs: run: ./gradlew packageReleaseDistributionForCurrentOS app_build: - name: Github, Firebase, and Sentry Release + name: Github, Firebase Release needs: [ build_desktop_app ] runs-on: ubuntu-latest permissions: @@ -76,6 +76,7 @@ jobs: keystore: ${{ secrets.ORIGINAL_KEYSTORE_FILE }} google-services: ${{ secrets.GOOGLESERVICES }} playstore-creds: ${{ secrets.PLAYSTORECREDS }} + firebase-creds: ${{ secrets.FIREBASECREDS }} - uses: ./.github/actions/create-release-notes name: Create Release Notes @@ -121,6 +122,15 @@ jobs: ./mifospay-desktop/build/compose/binaries/main-release/msi/*.msi ./mifospay-desktop/build/compose/binaries/main-release/deb/*.deb ./mifospay-desktop/build/compose/binaries/main-release/dmg/*.dmg + + + - name: ☁️ Deploy to Firebase + env: + KEYSTORE_PASSWORD: ${{ secrets.ORIGINAL_KEYSTORE_FILE_PASSWORD }} + KEYSTORE_ALIAS: ${{ secrets.ORIGINAL_KEYSTORE_ALIAS }} + KEYSTORE_ALIAS_PASSWORD: ${{ secrets.ORIGINAL_KEYSTORE_ALIAS_PASSWORD }} + VERSION_CODE: ${{ steps.rel_number.outputs.version-code }} + run: ./gradlew appDistributionUploadProdRelease --no-configuration-cache - name: Print `git status` run: git status @@ -161,6 +171,7 @@ jobs: keystore: ${{ secrets.UPLOAD_KEYSTORE_FILE }} google-services: ${{ secrets.GOOGLESERVICES }} playstore-creds: ${{ secrets.PLAYSTORECREDS }} + firebase-creds: ${{ secrets.FIREBASECREDS }} - uses: ./.github/actions/create-release-notes name: Create Release Notes @@ -177,6 +188,12 @@ jobs: run: | ./gradlew :mifospay-android:bundleRelease + - name: Archive Build + uses: actions/upload-artifact@v4 + with: + name: release-aabs + path: ./**/*.aab + - name: Deploy to Playstore Internal run: bundle exec fastlane deploy_internal diff --git a/.github/workflows/make_site.yaml b/.github/workflows/make_site.yaml index 8e2ce42ff..199c27fdd 100644 --- a/.github/workflows/make_site.yaml +++ b/.github/workflows/make_site.yaml @@ -25,7 +25,7 @@ jobs: environment: name: github-pages url: ${{ steps.deployment.outputs.page_url }} - runs-on: ubuntu-latest + runs-on: windows-latest steps: - uses: actions/checkout@v4 - uses: actions/setup-java@v4 @@ -46,4 +46,4 @@ jobs: - name: Deploy to GitHub Pages id: deployment - uses: actions/deploy-pages@v4 \ No newline at end of file + uses: actions/deploy-pages@v4 diff --git a/.github/workflows/master_dev_ci.yml b/.github/workflows/master_dev_ci.yml index cc31e1069..c60533cb0 100644 --- a/.github/workflows/master_dev_ci.yml +++ b/.github/workflows/master_dev_ci.yml @@ -64,6 +64,7 @@ jobs: + dependency_guard: needs: setup runs-on: ubuntu-latest @@ -100,32 +101,8 @@ jobs: disable_globbing: true commit_message: "🤖 Updates baselines for Dependency Guard" - tests_and_lint: - needs: setup - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - uses: actions/setup-java@v4 - with: - distribution: 'zulu' - java-version: 17 - - name: Run tests - run: | - ./gradlew :mifospay-android:testDemoDebug -# ./gradlew testDemoDebug :lint:test :mifospay-android:lintProdRelease :lint:lint - - name: Upload reports - if: always() - uses: actions/upload-artifact@v4 - with: - name: test-and-lint-reports - path: | - **/build/reports/lint-results-*.html - **/build/test-results/test*UnitTest/**.xml - - - build: - needs: [ checks, dependency_guard, tests_and_lint ] + needs: [ checks, dependency_guard ] runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 @@ -145,11 +122,11 @@ jobs: - name: Upload APKs uses: actions/upload-artifact@v4 with: - name: APKs + name: Android APKs path: '**/build/outputs/apk/**/*.apk' build_desktop_app: - needs: [ checks, dependency_guard, tests_and_lint ] + needs: [ checks, dependency_guard ] strategy: matrix: os: @@ -174,7 +151,7 @@ jobs: if: matrix.os == 'windows-latest' uses: actions/upload-artifact@v4 with: - name: Windows-App + name: Windows-Apps path: | ./mifospay-desktop/build/compose/binaries/main/exe/*.exe ./mifospay-desktop/build/compose/binaries/main/msi/*.msi @@ -183,12 +160,12 @@ jobs: if: matrix.os == 'ubuntu-latest' uses: actions/upload-artifact@v4 with: - name: Windows-App + name: Linux-App path: './mifospay-desktop/build/compose/binaries/main/deb/*.deb' - name: Upload MacOS App if: matrix.os == 'macos-latest' uses: actions/upload-artifact@v4 with: - name: Windows-App + name: MacOS-App path: './mifospay-desktop/build/compose/binaries/main/dmg/*.dmg' \ No newline at end of file diff --git a/.github/workflows/release_to_production.yml b/.github/workflows/release_to_production.yml index 347ccc4ba..c9360d923 100644 --- a/.github/workflows/release_to_production.yml +++ b/.github/workflows/release_to_production.yml @@ -26,6 +26,7 @@ jobs: keystore: ${{ secrets.ORIGINAL_KEYSTORE_FILE }} google-services: ${{ secrets.GOOGLESERVICES }} playstore-creds: ${{ secrets.PLAYSTORECREDS }} + firebase-creds: ${{ secrets.FIREBASECREDS }} - name: Promote Beta to Production Play Store run: bundle exec fastlane promote_to_production diff --git a/.github/workflows/weekly.yaml b/.github/workflows/weekly.yaml index 992cd0011..e6ff7e291 100644 --- a/.github/workflows/weekly.yaml +++ b/.github/workflows/weekly.yaml @@ -21,7 +21,7 @@ jobs: - name: Tag Weekly Release env: - GITHUB_TOKEN: ${{ secrets.TAG_PUSH_TOKEN }} + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: ./gradlew :reckonTagPush -Preckon.stage=final - name: Trigger Workflow diff --git a/build.gradle.kts b/build.gradle.kts index 84a0026c2..c30d5aa33 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -16,6 +16,7 @@ plugins { alias(libs.plugins.kotlin.parcelize) apply false alias(libs.plugins.dependencyGuard) apply false alias(libs.plugins.firebase.crashlytics) apply false + alias(libs.plugins.firebase.appdistribution) apply false alias(libs.plugins.firebase.perf) apply false alias(libs.plugins.gms) apply false alias(libs.plugins.ksp) apply false diff --git a/core/data/build.gradle.kts b/core/data/build.gradle.kts index 23a406caa..4a9444f8b 100644 --- a/core/data/build.gradle.kts +++ b/core/data/build.gradle.kts @@ -34,11 +34,6 @@ kotlin { implementation(libs.kotlinx.serialization.json) } - commonTest.dependencies { - implementation(libs.multiplatform.settings) - implementation(libs.multiplatform.settings.test) - } - androidMain.dependencies { implementation(libs.androidx.core.ktx) implementation(libs.androidx.tracing.ktx) diff --git a/core/datastore-proto/.gitignore b/core/datastore-proto/.gitignore deleted file mode 100644 index 42afabfd2..000000000 --- a/core/datastore-proto/.gitignore +++ /dev/null @@ -1 +0,0 @@ -/build \ No newline at end of file diff --git a/core/datastore-proto/README.md b/core/datastore-proto/README.md deleted file mode 100644 index 19ed58239..000000000 --- a/core/datastore-proto/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# :core:datastore-proto module -## Dependency graph -![Dependency graph](../../docs/images/graphs/dep_graph_core_datastore_proto.svg) diff --git a/core/datastore-proto/build.gradle.kts b/core/datastore-proto/build.gradle.kts deleted file mode 100644 index 51683868e..000000000 --- a/core/datastore-proto/build.gradle.kts +++ /dev/null @@ -1,43 +0,0 @@ -/* - * Copyright 2024 Mifos Initiative - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. - * - * See https://github.com/openMF/mobile-wallet/blob/master/LICENSE.md - */ -plugins { - alias(libs.plugins.mifospay.kmp.library) - alias(libs.plugins.protobuf) - id("kotlinx-serialization") -} - -android { - namespace = "org.mifos.mobilewallet.mifospay.core.datastore.proto" -} - -// Setup protobuf configuration, generating lite Java and Kotlin classes -protobuf { - protoc { - artifact = libs.protobuf.protoc.get().toString() - } - generateProtoTasks { - all().forEach { task -> - task.builtins { - register("kotlin") { - option("lite") - } - } - } - } -} - -kotlin { - sourceSets { - commonMain.dependencies { - api(libs.protobuf.kotlin.lite) - implementation(libs.kotlinx.serialization.core) - } - } -} \ No newline at end of file diff --git a/core/datastore-proto/src/commonMain/kotlin/proto/org/mifospay/core/datastore/proto/client_info.proto b/core/datastore-proto/src/commonMain/kotlin/proto/org/mifospay/core/datastore/proto/client_info.proto deleted file mode 100644 index f845e980c..000000000 --- a/core/datastore-proto/src/commonMain/kotlin/proto/org/mifospay/core/datastore/proto/client_info.proto +++ /dev/null @@ -1,13 +0,0 @@ -syntax = "proto3"; - -option java_package = "org.mifospay.core.datastore.proto"; -option java_multiple_files = true; - -message Client { - string name = 1; - string image = 2; - string external_id = 3; - int64 client_id = 4; - string display_name = 5; - string mobile_no = 6; -} \ No newline at end of file diff --git a/core/datastore-proto/src/commonMain/kotlin/proto/org/mifospay/core/datastore/proto/role_info.proto b/core/datastore-proto/src/commonMain/kotlin/proto/org/mifospay/core/datastore/proto/role_info.proto deleted file mode 100644 index b9756aa52..000000000 --- a/core/datastore-proto/src/commonMain/kotlin/proto/org/mifospay/core/datastore/proto/role_info.proto +++ /dev/null @@ -1,11 +0,0 @@ -syntax = "proto3"; - -option java_package = "org.mifospay.core.datastore.proto"; -option java_multiple_files = true; - -message Role { - string id = 1; - string name = 2; - string description = 3; - bool disabled = 4; -} \ No newline at end of file diff --git a/core/datastore-proto/src/commonMain/kotlin/proto/org/mifospay/core/datastore/proto/user_info.proto b/core/datastore-proto/src/commonMain/kotlin/proto/org/mifospay/core/datastore/proto/user_info.proto deleted file mode 100644 index 9d38f3d91..000000000 --- a/core/datastore-proto/src/commonMain/kotlin/proto/org/mifospay/core/datastore/proto/user_info.proto +++ /dev/null @@ -1,20 +0,0 @@ -syntax = "proto3"; - -import "proto/org/mifospay/core/datastore/proto/role_info.proto"; - -option java_package = "org.mifospay.core.datastore.proto"; -option java_multiple_files = true; - -message User { - string username = 1; - int64 userId = 2; - string base64EncodedAuthenticationKey = 3; - bool authenticated = 4; - int32 officeId = 5; - string officeName = 6; - repeated Role roles = 7; - repeated string permissions = 8; - repeated int64 clients = 9; - bool shouldRenewPassword = 10; - bool isTwoFactorAuthenticationRequired = 11; -} \ No newline at end of file diff --git a/core/datastore/build.gradle.kts b/core/datastore/build.gradle.kts index 154a4d55b..260a9a00f 100644 --- a/core/datastore/build.gradle.kts +++ b/core/datastore/build.gradle.kts @@ -9,6 +9,7 @@ */ plugins { alias(libs.plugins.mifospay.kmp.library) + id("kotlinx-serialization") } android { @@ -33,7 +34,6 @@ kotlin { implementation(libs.kotlinx.serialization.core) implementation(projects.core.model) implementation(projects.core.common) - implementation(projects.core.datastoreProto) } commonTest.dependencies { diff --git a/core/datastore/src/commonMain/kotlin/org/mifospay/core/datastore/PreferencesMapper.kt b/core/datastore/src/commonMain/kotlin/org/mifospay/core/datastore/PreferencesMapper.kt index 4825e32fc..856c08b04 100644 --- a/core/datastore/src/commonMain/kotlin/org/mifospay/core/datastore/PreferencesMapper.kt +++ b/core/datastore/src/commonMain/kotlin/org/mifospay/core/datastore/PreferencesMapper.kt @@ -9,9 +9,9 @@ */ package org.mifospay.core.datastore -import org.mifospay.core.datastore.proto.ClientPreferences -import org.mifospay.core.datastore.proto.RolePreferences -import org.mifospay.core.datastore.proto.UserInfoPreferences +import org.mifospay.core.datastore.model.ClientPreferences +import org.mifospay.core.datastore.model.RolePreferences +import org.mifospay.core.datastore.model.UserInfoPreferences import org.mifospay.core.model.client.Client import org.mifospay.core.model.user.RoleInfo import org.mifospay.core.model.user.UserInfo diff --git a/core/datastore/src/commonMain/kotlin/org/mifospay/core/datastore/UserPreferencesDataSource.kt b/core/datastore/src/commonMain/kotlin/org/mifospay/core/datastore/UserPreferencesDataSource.kt index 2c8b7a2ad..004a4288d 100644 --- a/core/datastore/src/commonMain/kotlin/org/mifospay/core/datastore/UserPreferencesDataSource.kt +++ b/core/datastore/src/commonMain/kotlin/org/mifospay/core/datastore/UserPreferencesDataSource.kt @@ -22,8 +22,8 @@ import kotlinx.coroutines.flow.map import kotlinx.coroutines.withContext import kotlinx.serialization.ExperimentalSerializationApi import org.mifospay.core.datastore.UserPreferencesDataSource.Companion.DEFAULT_ACCOUNT -import org.mifospay.core.datastore.proto.ClientPreferences -import org.mifospay.core.datastore.proto.UserInfoPreferences +import org.mifospay.core.datastore.model.ClientPreferences +import org.mifospay.core.datastore.model.UserInfoPreferences import org.mifospay.core.model.account.DefaultAccount import org.mifospay.core.model.client.Client import org.mifospay.core.model.client.UpdatedClient diff --git a/core/datastore-proto/src/commonMain/kotlin/org/mifospay/core/datastore/proto/ClientPreferences.kt b/core/datastore/src/commonMain/kotlin/org/mifospay/core/datastore/model/ClientPreferences.kt similarity index 97% rename from core/datastore-proto/src/commonMain/kotlin/org/mifospay/core/datastore/proto/ClientPreferences.kt rename to core/datastore/src/commonMain/kotlin/org/mifospay/core/datastore/model/ClientPreferences.kt index 1bc5477f4..46fc7d75d 100644 --- a/core/datastore-proto/src/commonMain/kotlin/org/mifospay/core/datastore/proto/ClientPreferences.kt +++ b/core/datastore/src/commonMain/kotlin/org/mifospay/core/datastore/model/ClientPreferences.kt @@ -7,7 +7,7 @@ * * See https://github.com/openMF/mobile-wallet/blob/master/LICENSE.md */ -package org.mifospay.core.datastore.proto +package org.mifospay.core.datastore.model import kotlinx.serialization.Serializable diff --git a/core/datastore-proto/src/commonMain/kotlin/org/mifospay/core/datastore/proto/RolePreferences.kt b/core/datastore/src/commonMain/kotlin/org/mifospay/core/datastore/model/RolePreferences.kt similarity index 94% rename from core/datastore-proto/src/commonMain/kotlin/org/mifospay/core/datastore/proto/RolePreferences.kt rename to core/datastore/src/commonMain/kotlin/org/mifospay/core/datastore/model/RolePreferences.kt index 17269b376..04389643b 100644 --- a/core/datastore-proto/src/commonMain/kotlin/org/mifospay/core/datastore/proto/RolePreferences.kt +++ b/core/datastore/src/commonMain/kotlin/org/mifospay/core/datastore/model/RolePreferences.kt @@ -7,7 +7,7 @@ * * See https://github.com/openMF/mobile-wallet/blob/master/LICENSE.md */ -package org.mifospay.core.datastore.proto +package org.mifospay.core.datastore.model import kotlinx.serialization.Serializable diff --git a/core/datastore-proto/src/commonMain/kotlin/org/mifospay/core/datastore/proto/UserInfoPreferences.kt b/core/datastore/src/commonMain/kotlin/org/mifospay/core/datastore/model/UserInfoPreferences.kt similarity index 96% rename from core/datastore-proto/src/commonMain/kotlin/org/mifospay/core/datastore/proto/UserInfoPreferences.kt rename to core/datastore/src/commonMain/kotlin/org/mifospay/core/datastore/model/UserInfoPreferences.kt index 32ab5c4a4..a3268f5fc 100644 --- a/core/datastore-proto/src/commonMain/kotlin/org/mifospay/core/datastore/proto/UserInfoPreferences.kt +++ b/core/datastore/src/commonMain/kotlin/org/mifospay/core/datastore/model/UserInfoPreferences.kt @@ -7,7 +7,7 @@ * * See https://github.com/openMF/mobile-wallet/blob/master/LICENSE.md */ -package org.mifospay.core.datastore.proto +package org.mifospay.core.datastore.model import kotlinx.serialization.Serializable diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 88a3b49e7..ba67c9623 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -68,6 +68,7 @@ fineractSdk = "1.0.3" firebaseBom = "33.6.0" firebaseCrashlyticsPlugin = "3.0.2" firebasePerfPlugin = "1.4.2" +firebaseAppdistributionGradle = "5.0.0" # Kotlin KMP Dependencies kotlin = "2.0.21" @@ -109,6 +110,11 @@ composeNavigation = "2.8.0-alpha10" jbCoreBundle = "1.0.1" jbSavedState = "1.2.2" +# Desktop Version +packageName = "MifosWallet" +packageNamespace = "org.mifospay.desktop" +packageVersion = "1.0.0" + [libraries] accompanist-pager = { group = "com.google.accompanist", name = "accompanist-pager", version.ref = "accompanist" } accompanist-permissions = { module = "com.google.accompanist:accompanist-permissions", version.ref = "accompanist" } @@ -348,6 +354,7 @@ mifos-spotless-plugin = { id = "mifos.spotless.plugin", version = "unspecified" firebase-crashlytics = { id = "com.google.firebase.crashlytics", version.ref = "firebaseCrashlyticsPlugin" } firebase-perf = { id = "com.google.firebase.firebase-perf", version.ref = "firebasePerfPlugin" } +firebase-appdistribution = { id = "com.google.firebase.appdistribution", version.ref = "firebaseAppdistributionGradle" } protobuf = { id = "com.google.protobuf", version.ref = "protobufPlugin" } roborazzi = { id = "io.github.takahirom.roborazzi", version.ref = "roborazzi" } diff --git a/mifospay-android/build.gradle.kts b/mifospay-android/build.gradle.kts index 106ff7daf..f7f54b297 100644 --- a/mifospay-android/build.gradle.kts +++ b/mifospay-android/build.gradle.kts @@ -7,6 +7,7 @@ * * See https://github.com/openMF/mobile-wallet/blob/master/LICENSE.md */ +import com.google.gms.googleservices.GoogleServicesPlugin.GoogleServicesPluginConfig import org.mifospay.MifosBuildType import org.mifospay.dynamicVersion @@ -27,13 +28,15 @@ plugins { alias(libs.plugins.roborazzi) id("com.google.android.gms.oss-licenses-plugin") id("com.google.devtools.ksp") + id("com.google.gms.google-services") + alias(libs.plugins.firebase.appdistribution) } android { - namespace = "org.mifospay" + namespace = "org.mifospay.android" defaultConfig { - applicationId = "org.mifospay" + applicationId = "org.mifospay.android" versionName = project.dynamicVersion versionCode = System.getenv("VERSION_CODE")?.toIntOrNull() ?: 1 vectorDrawables.useSupportLibrary = true @@ -139,4 +142,15 @@ dependencyGuard { modules = true tree = true } +} + +firebaseAppDistribution { + serviceCredentialsFile = "mifospay-android/firebaseAppDistributionServiceCredentialsFile.json" + releaseNotesFile = "./mifospay-android/build/outputs/changelogBeta" + groups = "continuous-deployment" +} + +// Disable to fix memory leak and be compatible with the configuration cache. +configure { + disableVersionCheck = true } \ No newline at end of file diff --git a/mifospay-android/dependencies/prodReleaseRuntimeClasspath.tree.txt b/mifospay-android/dependencies/prodReleaseRuntimeClasspath.tree.txt index 553c93d77..bf5b8af37 100644 --- a/mifospay-android/dependencies/prodReleaseRuntimeClasspath.tree.txt +++ b/mifospay-android/dependencies/prodReleaseRuntimeClasspath.tree.txt @@ -957,16 +957,7 @@ | | | | | +--- org.jetbrains.kotlin:kotlin-stdlib:2.0.20 -> 2.0.21 (*) | | | | | \--- org.jetbrains.kotlinx:kotlinx-serialization-core:1.7.3 (*) | | | | \--- org.jetbrains.kotlin:kotlin-parcelize-runtime:2.0.21 (*) -| | | +--- project :core:common (*) -| | | \--- project :core:datastore-proto -| | | +--- com.google.protobuf:protobuf-kotlin-lite:4.26.0 -| | | | +--- com.google.protobuf:protobuf-javalite:4.26.0 -| | | | \--- org.jetbrains.kotlin:kotlin-stdlib:1.6.0 -> 2.0.21 (*) -| | | +--- org.jetbrains.kotlin:kotlin-stdlib:2.0.21 (*) -| | | +--- io.insert-koin:koin-bom:4.0.0 (*) -| | | +--- io.insert-koin:koin-core:4.0.0 (*) -| | | +--- io.insert-koin:koin-annotations:1.4.0-RC4 (*) -| | | \--- org.jetbrains.kotlinx:kotlinx-serialization-core:1.7.3 (*) +| | | \--- project :core:common (*) | | +--- project :core:model (*) | | +--- org.jetbrains.kotlin:kotlin-stdlib:2.0.21 (*) | | +--- io.insert-koin:koin-bom:4.0.0 (*) @@ -1679,7 +1670,9 @@ | | +--- io.insert-koin:koin-androidx-compose:4.0.0 (*) | | +--- io.insert-koin:koin-androidx-navigation:4.0.0 (*) | | +--- io.insert-koin:koin-core-viewmodel:4.0.0 (*) -| | +--- com.google.protobuf:protobuf-kotlin-lite:4.26.0 (*) +| | +--- com.google.protobuf:protobuf-kotlin-lite:4.26.0 +| | | +--- com.google.protobuf:protobuf-javalite:4.26.0 +| | | \--- org.jetbrains.kotlin:kotlin-stdlib:1.6.0 -> 2.0.21 (*) | | +--- io.insert-koin:koin-core:4.0.0 (*) | | +--- io.insert-koin:koin-annotations:1.4.0-RC4 (*) | | +--- project :core:ui (*) diff --git a/mifospay-android/dependencies/prodReleaseRuntimeClasspath.txt b/mifospay-android/dependencies/prodReleaseRuntimeClasspath.txt index 39e629960..53d3bfa6e 100644 --- a/mifospay-android/dependencies/prodReleaseRuntimeClasspath.txt +++ b/mifospay-android/dependencies/prodReleaseRuntimeClasspath.txt @@ -2,7 +2,6 @@ :core:common :core:data :core:datastore -:core:datastore-proto :core:designsystem :core:domain :core:model diff --git a/mifospay-android/google-services.json b/mifospay-android/google-services.json index 9a4001bd2..0aaf19f25 100644 --- a/mifospay-android/google-services.json +++ b/mifospay-android/google-services.json @@ -1,123 +1,83 @@ { "project_info": { - "project_number": "728434912738", - "project_id": "mifos-mobile-apps", - "storage_bucket": "mifos-mobile-apps.appspot.com" + "project_number": "581746068392", + "project_id": "mifos-wallet", + "storage_bucket": "mifos-wallet.firebasestorage.app" }, "client": [ { "client_info": { - "mobilesdk_app_id": "1:728434912738:android:49282a75468730891a1dbb", + "mobilesdk_app_id": "1:581746068392:android:923dc7e0ae51eab358ab9d", "android_client_info": { - "package_name": "org.mifospay" + "package_name": "org.mifospay.android" } }, - "oauth_client": [ - { - "client_id": "728434912738-4sc51o624viccn8oi14f2mi77tljrdns.apps.googleusercontent.com", - "client_type": 3 - } - ], + "oauth_client": [], "api_key": [ { - "current_key": "AIzaSyCUz3P8uUExMFcPHa1Ga3DBKhjK5zxNn70" + "current_key": "AIzaSyD-ak7NSId25dSXr4cvgj7YVKh0f_4LhG0" } ], "services": { "appinvite_service": { - "other_platform_oauth_client": [ - { - "client_id": "728434912738-4sc51o624viccn8oi14f2mi77tljrdns.apps.googleusercontent.com", - "client_type": 3 - } - ] + "other_platform_oauth_client": [] } } }, { "client_info": { - "mobilesdk_app_id": "1:728434912738:android:ef7156e455c6a1a41a1dbb", + "mobilesdk_app_id": "1:581746068392:android:923dc7e0ae51eab358ab9d", "android_client_info": { - "package_name": "org.mifospay.demo.debug" + "package_name": "org.mifospay.android.demo.debug" } }, - "oauth_client": [ - { - "client_id": "728434912738-4sc51o624viccn8oi14f2mi77tljrdns.apps.googleusercontent.com", - "client_type": 3 - } - ], + "oauth_client": [], "api_key": [ { - "current_key": "AIzaSyCUz3P8uUExMFcPHa1Ga3DBKhjK5zxNn70" + "current_key": "AIzaSyD-ak7NSId25dSXr4cvgj7YVKh0f_4LhG0" } ], "services": { "appinvite_service": { - "other_platform_oauth_client": [ - { - "client_id": "728434912738-4sc51o624viccn8oi14f2mi77tljrdns.apps.googleusercontent.com", - "client_type": 3 - } - ] + "other_platform_oauth_client": [] } } }, { "client_info": { - "mobilesdk_app_id": "1:728434912738:android:0490c291986f0a691a1dbb", + "mobilesdk_app_id": "1:581746068392:android:923dc7e0ae51eab358ab9d", "android_client_info": { - "package_name": "org.mifospay.debug" + "package_name": "org.mifospay.android.debug" } }, - "oauth_client": [ - { - "client_id": "728434912738-4sc51o624viccn8oi14f2mi77tljrdns.apps.googleusercontent.com", - "client_type": 3 - } - ], + "oauth_client": [], "api_key": [ { - "current_key": "AIzaSyCUz3P8uUExMFcPHa1Ga3DBKhjK5zxNn70" + "current_key": "AIzaSyD-ak7NSId25dSXr4cvgj7YVKh0f_4LhG0" } ], "services": { "appinvite_service": { - "other_platform_oauth_client": [ - { - "client_id": "728434912738-4sc51o624viccn8oi14f2mi77tljrdns.apps.googleusercontent.com", - "client_type": 3 - } - ] + "other_platform_oauth_client": [] } } }, { "client_info": { - "mobilesdk_app_id": "1:728434912738:android:48ccd9153349f31e1a1dbb", + "mobilesdk_app_id": "1:581746068392:android:923dc7e0ae51eab358ab9d", "android_client_info": { - "package_name": "org.mifospay.demo" + "package_name": "org.mifospay.android.demo" } }, - "oauth_client": [ - { - "client_id": "728434912738-4sc51o624viccn8oi14f2mi77tljrdns.apps.googleusercontent.com", - "client_type": 3 - } - ], + "oauth_client": [], "api_key": [ { - "current_key": "AIzaSyCUz3P8uUExMFcPHa1Ga3DBKhjK5zxNn70" + "current_key": "AIzaSyD-ak7NSId25dSXr4cvgj7YVKh0f_4LhG0" } ], "services": { "appinvite_service": { - "other_platform_oauth_client": [ - { - "client_id": "728434912738-4sc51o624viccn8oi14f2mi77tljrdns.apps.googleusercontent.com", - "client_type": 3 - } - ] + "other_platform_oauth_client": [] } } } diff --git a/mifospay-android/prodRelease-badging.txt b/mifospay-android/prodRelease-badging.txt index fbaccbcfc..6bb39e10d 100644 --- a/mifospay-android/prodRelease-badging.txt +++ b/mifospay-android/prodRelease-badging.txt @@ -1,4 +1,4 @@ -package: name='org.mifospay' versionCode='1' versionName='0.0.4-beta.0.57' platformBuildVersionName='15' platformBuildVersionCode='35' compileSdkVersion='35' compileSdkVersionCodename='15' +package: name='org.mifospay.android' versionCode='1' versionName='0.0.4-beta.0.62' platformBuildVersionName='15' platformBuildVersionCode='35' compileSdkVersion='35' compileSdkVersionCodename='15' sdkVersion:'26' targetSdkVersion:'34' uses-permission: name='android.permission.INTERNET' @@ -13,7 +13,7 @@ uses-permission: name='android.permission.WAKE_LOCK' uses-permission: name='com.google.android.finsky.permission.BIND_GET_INSTALL_REFERRER_SERVICE' uses-permission: name='android.permission.ACCESS_ADSERVICES_ATTRIBUTION' uses-permission: name='android.permission.ACCESS_ADSERVICES_AD_ID' -uses-permission: name='org.mifospay.DYNAMIC_RECEIVER_NOT_EXPORTED_PERMISSION' +uses-permission: name='org.mifospay.android.DYNAMIC_RECEIVER_NOT_EXPORTED_PERMISSION' application-label:'Mifos Pay' application-label-af:'Mifos Pay' application-label-am:'Mifos Pay' @@ -106,7 +106,7 @@ application-icon-320:'res/mipmap/ic_launcher.png' application-icon-480:'res/mipmap/ic_launcher.png' application-icon-640:'res/mipmap/ic_launcher.png' application: label='Mifos Pay' icon='res/mipmap/ic_launcher.png' -launchable-activity: name='org.mifospay.MainActivity' label='' icon='' +launchable-activity: name='org.mifospay.android.MainActivity' label='' icon='' property: name='android.adservices.AD_SERVICES_CONFIG' resource='res/xml/ga_ad_services_config.xml' uses-library-not-required:'androidx.window.extensions' uses-library-not-required:'androidx.window.sidecar' diff --git a/mifospay-android/src/androidTest/java/org/mifospay/ExampleInstrumentedTest.kt b/mifospay-android/src/androidTest/java/org/mifospay/ExampleInstrumentedTest.kt deleted file mode 100644 index 504fdba19..000000000 --- a/mifospay-android/src/androidTest/java/org/mifospay/ExampleInstrumentedTest.kt +++ /dev/null @@ -1,32 +0,0 @@ -/* - * Copyright 2024 Mifos Initiative - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. - * - * See https://github.com/openMF/mobile-wallet/blob/master/LICENSE.md - */ -package org.mifospay - -import androidx.test.ext.junit.runners.AndroidJUnit4 -import androidx.test.platform.app.InstrumentationRegistry -import org.junit.Assert -import org.junit.Test -import org.junit.runner.RunWith - -/** - * Instrumentation test, which will execute on an Android device. - * - * @see [Testing documentation](http://d.android.com/tools/testing) - */ -@RunWith(AndroidJUnit4::class) -class ExampleInstrumentedTest { - @Test - @Throws(Exception::class) - fun useAppContext() { - // Context of the app under test. - val appContext = InstrumentationRegistry.getInstrumentation().context - Assert.assertEquals("org.mifospay", appContext.packageName) - } -} diff --git a/mifospay-android/src/main/kotlin/org/mifospay/MainActivity.kt b/mifospay-android/src/main/kotlin/org/mifospay/android/MainActivity.kt similarity index 98% rename from mifospay-android/src/main/kotlin/org/mifospay/MainActivity.kt rename to mifospay-android/src/main/kotlin/org/mifospay/android/MainActivity.kt index ea83ed32d..5275e033f 100644 --- a/mifospay-android/src/main/kotlin/org/mifospay/MainActivity.kt +++ b/mifospay-android/src/main/kotlin/org/mifospay/android/MainActivity.kt @@ -7,7 +7,7 @@ * * See https://github.com/openMF/mobile-wallet/blob/master/LICENSE.md */ -package org.mifospay +package org.mifospay.android import android.os.Bundle import androidx.activity.ComponentActivity diff --git a/mifospay-android/src/main/kotlin/org/mifospay/MifosPayApp.kt b/mifospay-android/src/main/kotlin/org/mifospay/android/MifosPayApp.kt similarity index 96% rename from mifospay-android/src/main/kotlin/org/mifospay/MifosPayApp.kt rename to mifospay-android/src/main/kotlin/org/mifospay/android/MifosPayApp.kt index de10c0aba..a85752977 100644 --- a/mifospay-android/src/main/kotlin/org/mifospay/MifosPayApp.kt +++ b/mifospay-android/src/main/kotlin/org/mifospay/android/MifosPayApp.kt @@ -7,7 +7,7 @@ * * See https://github.com/openMF/mobile-wallet/blob/master/LICENSE.md */ -package org.mifospay +package org.mifospay.android import android.app.Application import org.koin.android.ext.koin.androidContext diff --git a/mifospay-desktop/build.gradle.kts b/mifospay-desktop/build.gradle.kts index 054d165cb..6d3a0ca89 100644 --- a/mifospay-desktop/build.gradle.kts +++ b/mifospay-desktop/build.gradle.kts @@ -42,39 +42,17 @@ kotlin { } } -fun String.formatToValidVersion(): String { - // Remove any text after '-' or '+' - val cleanVersion = this.split(Regex("[-+]")).first() - - // Split version numbers - val parts = cleanVersion.split(".") - - return when { - // If starts with 0, change to 1 - parts[0] == "0" -> { - val newParts = parts.toMutableList() - newParts[0] = "1" - // Take only up to 3 parts (MAJOR.MINOR.PATCH) - newParts.take(3).joinToString(".") - } - // If valid, take only up to 3 parts - else -> parts.take(3).joinToString(".") - } -} - -val Project.dynamicVersion - get() = project.version.toString().formatToValidVersion() - -val productName = "MifosWallet" -val productNameSpace = "org.mifos.pay" +val packageName: String = libs.versions.packageName.get() +val packageNameSpace: String = libs.versions.packageNamespace.get() +val packageVersion: String = libs.versions.packageVersion.get() compose.desktop { application { mainClass = "MainKt" nativeDistributions { targetFormats(TargetFormat.Dmg, TargetFormat.Msi, TargetFormat.Exe, TargetFormat.Deb) - packageName = productName - packageVersion = project.dynamicVersion + packageName = this@Build_gradle.packageName + packageVersion = this@Build_gradle.packageVersion description = "Mifos Wallet Desktop Application" copyright = "© 2024 Mifos Initiative. All rights reserved." vendor = "Mifos Initiative" @@ -82,8 +60,8 @@ compose.desktop { includeAllModules = true macOS { - bundleID = productNameSpace - dockName = productName + bundleID = packageNameSpace + dockName = this@Build_gradle.packageName iconFile.set(project.file("icons/ic_launcher.icns")) notarization { val providers = project.providers @@ -94,7 +72,7 @@ compose.desktop { } windows { - menuGroup = productName + menuGroup = this@Build_gradle.packageName shortcut = true dirChooser = true perUserInstall = true diff --git a/mifospay-web/build.gradle.kts b/mifospay-web/build.gradle.kts index 46bc4de05..6e4db8a68 100644 --- a/mifospay-web/build.gradle.kts +++ b/mifospay-web/build.gradle.kts @@ -1,5 +1,4 @@ import org.jetbrains.kotlin.gradle.ExperimentalWasmDsl -import org.jetbrains.kotlin.gradle.targets.js.webpack.KotlinWebpackConfig plugins { alias(libs.plugins.kotlinMultiplatform) @@ -21,19 +20,9 @@ kotlin { @OptIn(ExperimentalWasmDsl::class) wasmJs { moduleName = "mifospay-wasm" - val projectPath: String = project.rootDir.path browser { commonWebpackConfig { outputFileName = "mifospay-wasm.js" - devServer = (devServer ?: KotlinWebpackConfig.DevServer()).apply { - static = (static ?: mutableListOf()).apply { - add(projectPath) - add("$projectPath/mifospay-shared/") - add("$projectPath/mifospay-web/") - add("$projectPath/core/designsystem") - add("$projectPath/core/ui") - } - } } } binaries.executable() @@ -46,11 +35,20 @@ kotlin { dependsOn(commonMain.get()) dependencies { implementation(projects.mifospayShared) + implementation(projects.core.common) + implementation(projects.core.data) + implementation(projects.core.model) + implementation(projects.core.datastore) + implementation(compose.runtime) implementation(compose.ui) implementation(compose.foundation) implementation(compose.material3) implementation(compose.components.resources) + + implementation(libs.multiplatform.settings) + implementation(libs.multiplatform.settings.serialization) + implementation(libs.multiplatform.settings.coroutines) } } diff --git a/mifospay-web/src/jsMain/kotlin/Application.kt b/mifospay-web/src/jsMain/kotlin/Application.kt index a3d5d4954..38556bb99 100644 --- a/mifospay-web/src/jsMain/kotlin/Application.kt +++ b/mifospay-web/src/jsMain/kotlin/Application.kt @@ -2,6 +2,7 @@ import androidx.compose.ui.ExperimentalComposeUiApi import androidx.compose.ui.window.ComposeViewport import kotlinx.browser.document +import org.jetbrains.skiko.wasm.onWasmReady import org.mifospay.shared.MifosPaySharedApp import org.mifospay.shared.di.initKoin @@ -9,7 +10,9 @@ import org.mifospay.shared.di.initKoin fun main() { initKoin() - ComposeViewport(document.body!!) { - MifosPaySharedApp() + onWasmReady { + ComposeViewport(document.body!!) { + MifosPaySharedApp() + } } } \ No newline at end of file diff --git a/mifospay-web/src/jsMain/resources/favicon.ico b/mifospay-web/src/jsMain/resources/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..09036b594cb0920e210b4cc671a66f88ec26ed27 GIT binary patch literal 183045 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 literal 0 HcmV?d00001 diff --git a/mifospay-web/src/jsMain/resources/index.html b/mifospay-web/src/jsMain/resources/index.html index 5df6be6fb..b7c4c1732 100644 --- a/mifospay-web/src/jsMain/resources/index.html +++ b/mifospay-web/src/jsMain/resources/index.html @@ -3,8 +3,36 @@ Mifos Wallet - + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
diff --git a/mifospay-web/src/wasmJsMain/resources/favicon.ico b/mifospay-web/src/wasmJsMain/resources/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..09036b594cb0920e210b4cc671a66f88ec26ed27 GIT binary patch literal 183045 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 literal 0 HcmV?d00001 diff --git a/settings.gradle.kts b/settings.gradle.kts index 19df9d5f1..01128d4d5 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -49,7 +49,6 @@ include(":core:common") include(":core:network") include(":core:network") include(":core:model") -include(":core:datastore-proto") include(":core:analytics") include(":feature:home")