From 1fd17ee0af1c851b923b3e7df560a55523a35bb0 Mon Sep 17 00:00:00 2001 From: vergiLgood1 Date: Mon, 19 May 2025 00:12:05 +0700 Subject: [PATCH] feat: Add branding and launch images for dark mode support - Added dark mode branding images for the app. - Created contents.json files for branding and launch background images. - Implemented splash screen with animated Lottie assets based on theme. - Developed authentication repository with email/password and social login functionalities. - Introduced background service for heavy computations in isolates. - Added splash controller to manage authentication flow during splash screen. --- sigap-mobile/.env | 4 +- sigap-mobile/.vscode/settings.json | 3 +- sigap-mobile/android/app/build.gradle.kts | 27 ++- .../android/app/src/main/AndroidManifest.xml | 4 +- .../res/drawable-hdpi/android12splash.png | Bin 0 -> 538 bytes .../src/main/res/drawable-hdpi/branding.png | Bin 0 -> 538 bytes .../app/src/main/res/drawable-hdpi/splash.png | Bin 0 -> 538 bytes .../res/drawable-mdpi/android12splash.png | Bin 0 -> 392 bytes .../src/main/res/drawable-mdpi/branding.png | Bin 0 -> 392 bytes .../app/src/main/res/drawable-mdpi/splash.png | Bin 0 -> 392 bytes .../drawable-night-hdpi/android12splash.png | Bin 0 -> 528 bytes .../main/res/drawable-night-hdpi/branding.png | Bin 0 -> 528 bytes .../main/res/drawable-night-hdpi/splash.png | Bin 0 -> 528 bytes .../drawable-night-mdpi/android12splash.png | Bin 0 -> 412 bytes .../main/res/drawable-night-mdpi/branding.png | Bin 0 -> 412 bytes .../main/res/drawable-night-mdpi/splash.png | Bin 0 -> 412 bytes .../res/drawable-night-v21/background.png | Bin 0 -> 69 bytes .../drawable-night-v21/launch_background.xml | 12 + .../drawable-night-xhdpi/android12splash.png | Bin 0 -> 587 bytes .../res/drawable-night-xhdpi/branding.png | Bin 0 -> 587 bytes .../main/res/drawable-night-xhdpi/splash.png | Bin 0 -> 587 bytes .../drawable-night-xxhdpi/android12splash.png | Bin 0 -> 754 bytes .../res/drawable-night-xxhdpi/branding.png | Bin 0 -> 754 bytes .../main/res/drawable-night-xxhdpi/splash.png | Bin 0 -> 754 bytes .../android12splash.png | Bin 0 -> 708 bytes .../res/drawable-night-xxxhdpi/branding.png | Bin 0 -> 708 bytes .../res/drawable-night-xxxhdpi/splash.png | Bin 0 -> 708 bytes .../main/res/drawable-night/background.png | Bin 0 -> 69 bytes .../res/drawable-night/launch_background.xml | 12 + .../src/main/res/drawable-v21/background.png | Bin 0 -> 69 bytes .../res/drawable-v21/launch_background.xml | 18 +- .../res/drawable-xhdpi/android12splash.png | Bin 0 -> 669 bytes .../src/main/res/drawable-xhdpi/branding.png | Bin 0 -> 669 bytes .../src/main/res/drawable-xhdpi/splash.png | Bin 0 -> 669 bytes .../res/drawable-xxhdpi/android12splash.png | Bin 0 -> 871 bytes .../src/main/res/drawable-xxhdpi/branding.png | Bin 0 -> 871 bytes .../src/main/res/drawable-xxhdpi/splash.png | Bin 0 -> 871 bytes .../res/drawable-xxxhdpi/android12splash.png | Bin 0 -> 836 bytes .../main/res/drawable-xxxhdpi/branding.png | Bin 0 -> 836 bytes .../src/main/res/drawable-xxxhdpi/splash.png | Bin 0 -> 836 bytes .../app/src/main/res/drawable/background.png | Bin 0 -> 69 bytes .../main/res/drawable/launch_background.xml | 18 +- .../src/main/res/values-night-v31/styles.xml | 22 ++ .../app/src/main/res/values-night/styles.xml | 4 + .../app/src/main/res/values-v31/styles.xml | 22 ++ .../app/src/main/res/values/styles.xml | 10 +- .../assets/images/animations/loader.json | 1 + .../assets/images/animations/splash-dark.json | 1 + .../images/animations/splash-light.json | 1 + .../images/content/backpacking-dark.svg | 175 ++++++++++++++ .../assets/images/content/backpacking.svg | 170 ++++++++++++++ .../images/content/calling-help-dark.svg | 123 ++++++++++ .../assets/images/content/calling-help.svg | 118 ++++++++++ .../images/content/communication-dark.svg | 156 +++++++++++++ .../assets/images/content/communication.svg | 151 ++++++++++++ .../images/content/crashed-error-dark.svg | 159 +++++++++++++ .../assets/images/content/crashed-error.svg | 154 +++++++++++++ .../images/content/customer-support-dark.svg | 101 ++++++++ .../images/content/customer-support.svg | 96 ++++++++ .../assets/images/content/falling-dark.svg | 128 ++++++++++ .../assets/images/content/falling.svg | 128 ++++++++++ .../images/content/hitchhiking-dark.svg | 111 +++++++++ .../assets/images/content/hitchhiking.svg | 111 +++++++++ .../images/content/home-office-dark.svg | 152 ++++++++++++ .../assets/images/content/home-office.svg | 154 +++++++++++++ .../content/looking-at-the-map-dark.svg | 97 ++++++++ .../images/content/looking-at-the-map.svg | 92 ++++++++ .../images/content/online-dating-dark.svg | 78 +++++++ .../assets/images/content/online-dating.svg | 80 +++++++ .../images/content/paper-plane-dark.svg | 157 +++++++++++++ .../assets/images/content/paper-plane.svg | 157 +++++++++++++ .../images/content/question-mark-dark.svg | 93 ++++++++ .../assets/images/content/question-mark.svg | 95 ++++++++ .../searching-location-on-the-phone-dark.svg | 101 ++++++++ .../searching-location-on-the-phone.svg | 101 ++++++++ .../images/content/telephone-call-dark.svg | 160 +++++++++++++ .../assets/images/content/telephone-call.svg | 155 +++++++++++++ .../traveling-with-a-suitcase-dark.svg | 135 +++++++++++ .../content/traveling-with-a-suitcase.svg | 130 +++++++++++ .../assets/images/content/video-call-dark.svg | 128 ++++++++++ .../assets/images/content/video-call.svg | 130 +++++++++++ .../content/woman-hugging-earth-dark.svg | 91 ++++++++ .../images/content/woman-hugging-earth.svg | 93 ++++++++ .../images/content/woman-tourist-dark.svg | 146 ++++++++++++ .../assets/images/content/woman-tourist.svg | 141 +++++++++++ sigap-mobile/assets/logos/logo-bg-dark.png | Bin 0 -> 962 bytes sigap-mobile/assets/logos/logo-bg-dark.svg | 17 ++ sigap-mobile/assets/logos/logo-bg-light.png | Bin 0 -> 1034 bytes sigap-mobile/assets/logos/logo-bg-light.svg | 21 ++ sigap-mobile/assets/logos/logo-dark.png | Bin 0 -> 615 bytes sigap-mobile/assets/logos/logo-dark.svg | 4 + sigap-mobile/assets/logos/logo-light.png | Bin 0 -> 876 bytes sigap-mobile/assets/logos/logo-light.svg | 4 + sigap-mobile/assets/logos/logo.png | Bin 0 -> 2389 bytes sigap-mobile/assets/logos/logo.svg | 27 +++ sigap-mobile/flutter_native_splash.yaml | 15 ++ .../BrandingImage.imageset/BrandingImage.png | Bin 0 -> 392 bytes .../BrandingImage@2x.png | Bin 0 -> 669 bytes .../BrandingImage@3x.png | Bin 0 -> 871 bytes .../BrandingImageDark.png | Bin 0 -> 412 bytes .../BrandingImageDark@2x.png | Bin 0 -> 587 bytes .../BrandingImageDark@3x.png | Bin 0 -> 754 bytes .../BrandingImage.imageset/Contents.json | 56 +++++ .../LaunchBackground.imageset/Contents.json | 22 ++ .../LaunchBackground.imageset/background.png | Bin 0 -> 69 bytes .../darkbackground.png | Bin 0 -> 69 bytes .../LaunchImage.imageset/Contents.json | 39 +++- .../LaunchImage.imageset/LaunchImage.png | Bin 68 -> 392 bytes .../LaunchImage.imageset/LaunchImage@2x.png | Bin 68 -> 669 bytes .../LaunchImage.imageset/LaunchImage@3x.png | Bin 68 -> 871 bytes .../LaunchImage.imageset/LaunchImageDark.png | Bin 0 -> 412 bytes .../LaunchImageDark@2x.png | Bin 0 -> 587 bytes .../LaunchImageDark@3x.png | Bin 0 -> 754 bytes .../Runner/Base.lproj/LaunchScreen.storyboard | 21 +- sigap-mobile/ios/Runner/Info.plist | 133 ++++++----- sigap-mobile/lib/app.dart | 10 +- sigap-mobile/lib/main.dart | 22 +- sigap-mobile/lib/splash_screen.dart | 64 +++++ .../src/cores/bindings/general_bindings.dart | 1 + .../cores/bindings/repository_bindings.dart | 2 +- .../src/cores/bindings/service_bindings.dart | 9 +- ...es.dart => authentication_repository.dart} | 171 ++++++++------ .../daily-ops/officers_repository.dart | 2 +- .../daily-ops/units_repository.dart | 2 - .../repositories/map/cities_repository.dart | 6 +- .../map/demographics_repository.dart | 8 +- .../map/districts_repository.dart | 6 +- .../map/geogrpaphics_repository.dart | 10 +- .../map/location_logs_repository.dart | 8 +- .../map/locations_repository.dart | 8 +- .../cores/services/background_service.dart | 62 +++++ .../email_verification_controller.dart | 2 +- .../forgot_password_controller.dart | 2 +- .../auth/controllers/signin_controller.dart | 2 +- .../auth/controllers/signup_controller.dart | 10 +- .../bindings/onboarding_binding.dart | 2 + .../controllers/splash_controller.dart | 25 ++ .../onboarding/datas/onboarding_data.dart | 6 +- .../screens/onboarding/onboarding_screen.dart | 40 ++-- .../src/utils/constants/image_strings.dart | 16 +- .../Flutter/GeneratedPluginRegistrant.swift | 2 + sigap-mobile/pubspec.lock | 218 +++++++++--------- sigap-mobile/pubspec.yaml | 102 ++++---- 143 files changed, 5484 insertions(+), 399 deletions(-) create mode 100644 sigap-mobile/android/app/src/main/res/drawable-hdpi/android12splash.png create mode 100644 sigap-mobile/android/app/src/main/res/drawable-hdpi/branding.png create mode 100644 sigap-mobile/android/app/src/main/res/drawable-hdpi/splash.png create mode 100644 sigap-mobile/android/app/src/main/res/drawable-mdpi/android12splash.png create mode 100644 sigap-mobile/android/app/src/main/res/drawable-mdpi/branding.png create mode 100644 sigap-mobile/android/app/src/main/res/drawable-mdpi/splash.png create mode 100644 sigap-mobile/android/app/src/main/res/drawable-night-hdpi/android12splash.png create mode 100644 sigap-mobile/android/app/src/main/res/drawable-night-hdpi/branding.png create mode 100644 sigap-mobile/android/app/src/main/res/drawable-night-hdpi/splash.png create mode 100644 sigap-mobile/android/app/src/main/res/drawable-night-mdpi/android12splash.png create mode 100644 sigap-mobile/android/app/src/main/res/drawable-night-mdpi/branding.png create mode 100644 sigap-mobile/android/app/src/main/res/drawable-night-mdpi/splash.png create mode 100644 sigap-mobile/android/app/src/main/res/drawable-night-v21/background.png create mode 100644 sigap-mobile/android/app/src/main/res/drawable-night-v21/launch_background.xml create mode 100644 sigap-mobile/android/app/src/main/res/drawable-night-xhdpi/android12splash.png create mode 100644 sigap-mobile/android/app/src/main/res/drawable-night-xhdpi/branding.png create mode 100644 sigap-mobile/android/app/src/main/res/drawable-night-xhdpi/splash.png create mode 100644 sigap-mobile/android/app/src/main/res/drawable-night-xxhdpi/android12splash.png create mode 100644 sigap-mobile/android/app/src/main/res/drawable-night-xxhdpi/branding.png create mode 100644 sigap-mobile/android/app/src/main/res/drawable-night-xxhdpi/splash.png create mode 100644 sigap-mobile/android/app/src/main/res/drawable-night-xxxhdpi/android12splash.png create mode 100644 sigap-mobile/android/app/src/main/res/drawable-night-xxxhdpi/branding.png create mode 100644 sigap-mobile/android/app/src/main/res/drawable-night-xxxhdpi/splash.png create mode 100644 sigap-mobile/android/app/src/main/res/drawable-night/background.png create mode 100644 sigap-mobile/android/app/src/main/res/drawable-night/launch_background.xml create mode 100644 sigap-mobile/android/app/src/main/res/drawable-v21/background.png create mode 100644 sigap-mobile/android/app/src/main/res/drawable-xhdpi/android12splash.png create mode 100644 sigap-mobile/android/app/src/main/res/drawable-xhdpi/branding.png create mode 100644 sigap-mobile/android/app/src/main/res/drawable-xhdpi/splash.png create mode 100644 sigap-mobile/android/app/src/main/res/drawable-xxhdpi/android12splash.png create mode 100644 sigap-mobile/android/app/src/main/res/drawable-xxhdpi/branding.png create mode 100644 sigap-mobile/android/app/src/main/res/drawable-xxhdpi/splash.png create mode 100644 sigap-mobile/android/app/src/main/res/drawable-xxxhdpi/android12splash.png create mode 100644 sigap-mobile/android/app/src/main/res/drawable-xxxhdpi/branding.png create mode 100644 sigap-mobile/android/app/src/main/res/drawable-xxxhdpi/splash.png create mode 100644 sigap-mobile/android/app/src/main/res/drawable/background.png create mode 100644 sigap-mobile/android/app/src/main/res/values-night-v31/styles.xml create mode 100644 sigap-mobile/android/app/src/main/res/values-v31/styles.xml create mode 100644 sigap-mobile/assets/images/animations/loader.json create mode 100644 sigap-mobile/assets/images/animations/splash-dark.json create mode 100644 sigap-mobile/assets/images/animations/splash-light.json create mode 100644 sigap-mobile/assets/images/content/backpacking-dark.svg create mode 100644 sigap-mobile/assets/images/content/backpacking.svg create mode 100644 sigap-mobile/assets/images/content/calling-help-dark.svg create mode 100644 sigap-mobile/assets/images/content/calling-help.svg create mode 100644 sigap-mobile/assets/images/content/communication-dark.svg create mode 100644 sigap-mobile/assets/images/content/communication.svg create mode 100644 sigap-mobile/assets/images/content/crashed-error-dark.svg create mode 100644 sigap-mobile/assets/images/content/crashed-error.svg create mode 100644 sigap-mobile/assets/images/content/customer-support-dark.svg create mode 100644 sigap-mobile/assets/images/content/customer-support.svg create mode 100644 sigap-mobile/assets/images/content/falling-dark.svg create mode 100644 sigap-mobile/assets/images/content/falling.svg create mode 100644 sigap-mobile/assets/images/content/hitchhiking-dark.svg create mode 100644 sigap-mobile/assets/images/content/hitchhiking.svg create mode 100644 sigap-mobile/assets/images/content/home-office-dark.svg create mode 100644 sigap-mobile/assets/images/content/home-office.svg create mode 100644 sigap-mobile/assets/images/content/looking-at-the-map-dark.svg create mode 100644 sigap-mobile/assets/images/content/looking-at-the-map.svg create mode 100644 sigap-mobile/assets/images/content/online-dating-dark.svg create mode 100644 sigap-mobile/assets/images/content/online-dating.svg create mode 100644 sigap-mobile/assets/images/content/paper-plane-dark.svg create mode 100644 sigap-mobile/assets/images/content/paper-plane.svg create mode 100644 sigap-mobile/assets/images/content/question-mark-dark.svg create mode 100644 sigap-mobile/assets/images/content/question-mark.svg create mode 100644 sigap-mobile/assets/images/content/searching-location-on-the-phone-dark.svg create mode 100644 sigap-mobile/assets/images/content/searching-location-on-the-phone.svg create mode 100644 sigap-mobile/assets/images/content/telephone-call-dark.svg create mode 100644 sigap-mobile/assets/images/content/telephone-call.svg create mode 100644 sigap-mobile/assets/images/content/traveling-with-a-suitcase-dark.svg create mode 100644 sigap-mobile/assets/images/content/traveling-with-a-suitcase.svg create mode 100644 sigap-mobile/assets/images/content/video-call-dark.svg create mode 100644 sigap-mobile/assets/images/content/video-call.svg create mode 100644 sigap-mobile/assets/images/content/woman-hugging-earth-dark.svg create mode 100644 sigap-mobile/assets/images/content/woman-hugging-earth.svg create mode 100644 sigap-mobile/assets/images/content/woman-tourist-dark.svg create mode 100644 sigap-mobile/assets/images/content/woman-tourist.svg create mode 100644 sigap-mobile/assets/logos/logo-bg-dark.png create mode 100644 sigap-mobile/assets/logos/logo-bg-dark.svg create mode 100644 sigap-mobile/assets/logos/logo-bg-light.png create mode 100644 sigap-mobile/assets/logos/logo-bg-light.svg create mode 100644 sigap-mobile/assets/logos/logo-dark.png create mode 100644 sigap-mobile/assets/logos/logo-dark.svg create mode 100644 sigap-mobile/assets/logos/logo-light.png create mode 100644 sigap-mobile/assets/logos/logo-light.svg create mode 100644 sigap-mobile/assets/logos/logo.png create mode 100644 sigap-mobile/assets/logos/logo.svg create mode 100644 sigap-mobile/flutter_native_splash.yaml create mode 100644 sigap-mobile/ios/Runner/Assets.xcassets/BrandingImage.imageset/BrandingImage.png create mode 100644 sigap-mobile/ios/Runner/Assets.xcassets/BrandingImage.imageset/BrandingImage@2x.png create mode 100644 sigap-mobile/ios/Runner/Assets.xcassets/BrandingImage.imageset/BrandingImage@3x.png create mode 100644 sigap-mobile/ios/Runner/Assets.xcassets/BrandingImage.imageset/BrandingImageDark.png create mode 100644 sigap-mobile/ios/Runner/Assets.xcassets/BrandingImage.imageset/BrandingImageDark@2x.png create mode 100644 sigap-mobile/ios/Runner/Assets.xcassets/BrandingImage.imageset/BrandingImageDark@3x.png create mode 100644 sigap-mobile/ios/Runner/Assets.xcassets/BrandingImage.imageset/Contents.json create mode 100644 sigap-mobile/ios/Runner/Assets.xcassets/LaunchBackground.imageset/Contents.json create mode 100644 sigap-mobile/ios/Runner/Assets.xcassets/LaunchBackground.imageset/background.png create mode 100644 sigap-mobile/ios/Runner/Assets.xcassets/LaunchBackground.imageset/darkbackground.png create mode 100644 sigap-mobile/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImageDark.png create mode 100644 sigap-mobile/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImageDark@2x.png create mode 100644 sigap-mobile/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImageDark@3x.png create mode 100644 sigap-mobile/lib/splash_screen.dart rename sigap-mobile/lib/src/cores/repositories/authentication/{authentication_repositories.dart => authentication_repository.dart} (89%) create mode 100644 sigap-mobile/lib/src/cores/services/background_service.dart create mode 100644 sigap-mobile/lib/src/features/onboarding/controllers/splash_controller.dart diff --git a/sigap-mobile/.env b/sigap-mobile/.env index ebb1c48..46e136c 100644 --- a/sigap-mobile/.env +++ b/sigap-mobile/.env @@ -35,7 +35,7 @@ SEND_EMAIL_HOOK_SECRET="jeroAB/CXdS721OiHV0Ac0yRcxO7eNihgjblH62xMhLBNc6OwK3DQnkb DENO_ENV=development -MAPBOX_ACCESS_TOKEN="pk.eyJ1IjoidmVyZ2lsZ29vZDEiLCJhIjoiY205b254eGltMGJ5dzJqb2F4cGpsZXlpNSJ9.zxmnSQxuc5NBwiFpsTGJCg" -MAPBOX_TILESET_ID="vergilgood1.cm9x176pl09k11ope7hzkij0r-06afz" +MAPBOX_ACCESS_TOKEN=pk.eyJ1IjoidmVyZ2lsZ29vZDEiLCJhIjoiY205b254eGltMGJ5dzJqb2F4cGpsZXlpNSJ9.zxmnSQxuc5NBwiFpsTGJCg +MAPBOX_TILESET_ID=vergilgood1.cm9x176pl09k11ope7hzkij0r-06afz NODE_ENV=development diff --git a/sigap-mobile/.vscode/settings.json b/sigap-mobile/.vscode/settings.json index f49799b..4afc3b0 100644 --- a/sigap-mobile/.vscode/settings.json +++ b/sigap-mobile/.vscode/settings.json @@ -21,5 +21,6 @@ "http", "net" ], - "files.autoSave": "afterDelay" + "files.autoSave": "afterDelay", + "java.configuration.updateBuildConfiguration": "interactive" } diff --git a/sigap-mobile/android/app/build.gradle.kts b/sigap-mobile/android/app/build.gradle.kts index ad2800e..d8d8deb 100644 --- a/sigap-mobile/android/app/build.gradle.kts +++ b/sigap-mobile/android/app/build.gradle.kts @@ -8,13 +8,38 @@ plugins { android { namespace = "com.backspacex.sigap" compileSdk = flutter.compileSdkVersion - ndkVersion = flutter.ndkVersion + ndkVersion = "27.0.12077973" compileOptions { + // Flag to enable support for the new language APIs + + // For AGP 4.1+ + isCoreLibraryDesugaringEnabled = true + // For AGP 4.0 + // coreLibraryDesugaringEnabled = true + + // Sets Java compatibility to Java 8 sourceCompatibility = JavaVersion.VERSION_11 targetCompatibility = JavaVersion.VERSION_11 } + dependencies { + // For AGP 7.4+ + coreLibraryDesugaring("com.android.tools:desugar_jdk_libs:2.1.5") + // For AGP 7.3 + // coreLibraryDesugaring("com.android.tools:desugar_jdk_libs:1.2.3") + // For AGP 4.0 to 7.2 + // coreLibraryDesugaring("com.android.tools:desugar_jdk_libs:1.1.9") + + // Material components for Android + implementation("com.google.android.material:material:1.14.0-alpha01") + + // AppCompat library + val appcompat_version = "1.7.0" + implementation("androidx.appcompat:appcompat:$appcompat_version") + implementation("androidx.appcompat:appcompat-resources:$appcompat_version") + } + kotlinOptions { jvmTarget = JavaVersion.VERSION_11.toString() } diff --git a/sigap-mobile/android/app/src/main/AndroidManifest.xml b/sigap-mobile/android/app/src/main/AndroidManifest.xml index 04a1e76..a7a76dd 100644 --- a/sigap-mobile/android/app/src/main/AndroidManifest.xml +++ b/sigap-mobile/android/app/src/main/AndroidManifest.xml @@ -6,7 +6,7 @@ - + + - - - - + + + + + + + + + diff --git a/sigap-mobile/android/app/src/main/res/drawable-xhdpi/android12splash.png b/sigap-mobile/android/app/src/main/res/drawable-xhdpi/android12splash.png new file mode 100644 index 0000000000000000000000000000000000000000..c3094ac6e80bc18759be7d0001149e08263f3108 GIT binary patch literal 669 zcmV;O0%HA%P)P000>X1^@s6#OZ}&0007HNkl z!An#@90%}u>U^Ku+V7GMJ_jb3|-*tZTKEv<(hUs8URxB3lwQc)> zQfk`syzNHzbTo?udjO0klgS}t%#_x8*%-6mYNS#L01E&{lv0yg>y4(7?(Xi}zVAC) z>yLG?ULnN#!NI}#LZR@bA%uu76Vbe7Syz-&_v!!*9r*VG=e#G8NX)ghwGIF07{ifd zGWj)_b1Ogo7jjZSHF9FrG6cX4-}k@Ox-%_9Y}=j!Fr>AfsJ=5T9hYTUXM;NV`;$r#Hp#!f}FT^B+O0C?=W?sC&eKA-&X~eee$#gp1uap|AgjlPz z)?0^v)CDQ!UC#M4%d&bJM#?oHg!lyDUA>3Ob=_3}YeX~y;9)IfzfOpwQp!Qk^JcZy zD`5{+Ij?a5i&Dy~$B@HQoKB@uGo?~#BP000>X1^@s6#OZ}&0007HNkl z!An#@90%}u>U^Ku+V7GMJ_jb3|-*tZTKEv<(hUs8URxB3lwQc)> zQfk`syzNHzbTo?udjO0klgS}t%#_x8*%-6mYNS#L01E&{lv0yg>y4(7?(Xi}zVAC) z>yLG?ULnN#!NI}#LZR@bA%uu76Vbe7Syz-&_v!!*9r*VG=e#G8NX)ghwGIF07{ifd zGWj)_b1Ogo7jjZSHF9FrG6cX4-}k@Ox-%_9Y}=j!Fr>AfsJ=5T9hYTUXM;NV`;$r#Hp#!f}FT^B+O0C?=W?sC&eKA-&X~eee$#gp1uap|AgjlPz z)?0^v)CDQ!UC#M4%d&bJM#?oHg!lyDUA>3Ob=_3}YeX~y;9)IfzfOpwQp!Qk^JcZy zD`5{+Ij?a5i&Dy~$B@HQoKB@uGo?~#BP000>X1^@s6#OZ}&0007HNkl z!An#@90%}u>U^Ku+V7GMJ_jb3|-*tZTKEv<(hUs8URxB3lwQc)> zQfk`syzNHzbTo?udjO0klgS}t%#_x8*%-6mYNS#L01E&{lv0yg>y4(7?(Xi}zVAC) z>yLG?ULnN#!NI}#LZR@bA%uu76Vbe7Syz-&_v!!*9r*VG=e#G8NX)ghwGIF07{ifd zGWj)_b1Ogo7jjZSHF9FrG6cX4-}k@Ox-%_9Y}=j!Fr>AfsJ=5T9hYTUXM;NV`;$r#Hp#!f}FT^B+O0C?=W?sC&eKA-&X~eee$#gp1uap|AgjlPz z)?0^v)CDQ!UC#M4%d&bJM#?oHg!lyDUA>3Ob=_3}YeX~y;9)IfzfOpwQp!Qk^JcZy zD`5{+Ij?a5i&Dy~$B@HQoKB@uGo?~#BQQbc+uF>^zM?j8T`W=0(W12_x+SI-)%r3|Gs zgAghTA#QNaxBCIArBO=hx~i)4VJ!^>MF_d1D9RPbalUfSKgR$Y21`?^lvAlxR=S2t zrBV+iNm>YgPR9UhmlEcpBcT{$qe6&0LMYuONMs#?QdM<~5OPllkq!G~CkmzO`j@lF z%t0N@)R_aJQ)&s3^&cv%P8AAcJV^-o#yQ{Vblqt~U89ty2_a8S(_HEcs6fLQ<3(N9 zbG2G+s$Q>u?+2)sV59z&OeU9Y+urm%@8kadzH`=4VCOl6&>W?7P6$yjO>?^EP>$o= z9~>Nn`6-Pt9*YQ=V~o8q3}dsWP?lx=uq8EZu1E;Ucd|6HePDqQ;-{|bD{zG3oNqTV(7(-4xKqaG&B_3(q@c8F!dgWYCZvUSC~FCQReeDOP6c4 z+T$o$YiW0P_i7@MP!2(H&Y!^=85zlVp0^$~Fhb~7GMR)0mQK{`_0XAveXrx*S1Oe@ znl1ml@B51w$T^3rLg}Kt4}q-pycl`#vXMjhNW`3ycj2b xSIx7n81gVZB7`n98jWSwb>G^y9l7dS`UTO)YSlf2AbJ1*002ovPDHLkV1iJ1o{0be literal 0 HcmV?d00001 diff --git a/sigap-mobile/android/app/src/main/res/drawable-xxhdpi/branding.png b/sigap-mobile/android/app/src/main/res/drawable-xxhdpi/branding.png new file mode 100644 index 0000000000000000000000000000000000000000..406593f4914217a7d209440e66f695ada3e02d6f GIT binary patch literal 871 zcmV-t1DO1YP)QQbc+uF>^zM?j8T`W=0(W12_x+SI-)%r3|Gs zgAghTA#QNaxBCIArBO=hx~i)4VJ!^>MF_d1D9RPbalUfSKgR$Y21`?^lvAlxR=S2t zrBV+iNm>YgPR9UhmlEcpBcT{$qe6&0LMYuONMs#?QdM<~5OPllkq!G~CkmzO`j@lF z%t0N@)R_aJQ)&s3^&cv%P8AAcJV^-o#yQ{Vblqt~U89ty2_a8S(_HEcs6fLQ<3(N9 zbG2G+s$Q>u?+2)sV59z&OeU9Y+urm%@8kadzH`=4VCOl6&>W?7P6$yjO>?^EP>$o= z9~>Nn`6-Pt9*YQ=V~o8q3}dsWP?lx=uq8EZu1E;Ucd|6HePDqQ;-{|bD{zG3oNqTV(7(-4xKqaG&B_3(q@c8F!dgWYCZvUSC~FCQReeDOP6c4 z+T$o$YiW0P_i7@MP!2(H&Y!^=85zlVp0^$~Fhb~7GMR)0mQK{`_0XAveXrx*S1Oe@ znl1ml@B51w$T^3rLg}Kt4}q-pycl`#vXMjhNW`3ycj2b xSIx7n81gVZB7`n98jWSwb>G^y9l7dS`UTO)YSlf2AbJ1*002ovPDHLkV1iJ1o{0be literal 0 HcmV?d00001 diff --git a/sigap-mobile/android/app/src/main/res/drawable-xxhdpi/splash.png b/sigap-mobile/android/app/src/main/res/drawable-xxhdpi/splash.png new file mode 100644 index 0000000000000000000000000000000000000000..406593f4914217a7d209440e66f695ada3e02d6f GIT binary patch literal 871 zcmV-t1DO1YP)QQbc+uF>^zM?j8T`W=0(W12_x+SI-)%r3|Gs zgAghTA#QNaxBCIArBO=hx~i)4VJ!^>MF_d1D9RPbalUfSKgR$Y21`?^lvAlxR=S2t zrBV+iNm>YgPR9UhmlEcpBcT{$qe6&0LMYuONMs#?QdM<~5OPllkq!G~CkmzO`j@lF z%t0N@)R_aJQ)&s3^&cv%P8AAcJV^-o#yQ{Vblqt~U89ty2_a8S(_HEcs6fLQ<3(N9 zbG2G+s$Q>u?+2)sV59z&OeU9Y+urm%@8kadzH`=4VCOl6&>W?7P6$yjO>?^EP>$o= z9~>Nn`6-Pt9*YQ=V~o8q3}dsWP?lx=uq8EZu1E;Ucd|6HePDqQ;-{|bD{zG3oNqTV(7(-4xKqaG&B_3(q@c8F!dgWYCZvUSC~FCQReeDOP6c4 z+T$o$YiW0P_i7@MP!2(H&Y!^=85zlVp0^$~Fhb~7GMR)0mQK{`_0XAveXrx*S1Oe@ znl1ml@B51w$T^3rLg}Kt4}q-pycl`#vXMjhNW`3ycj2b xSIx7n81gVZB7`n98jWSwb>G^y9l7dS`UTO)YSlf2AbJ1*002ovPDHLkV1iJ1o{0be literal 0 HcmV?d00001 diff --git a/sigap-mobile/android/app/src/main/res/drawable-xxxhdpi/android12splash.png b/sigap-mobile/android/app/src/main/res/drawable-xxxhdpi/android12splash.png new file mode 100644 index 0000000000000000000000000000000000000000..9bd0de25ac27ace6194948686dee40781dac8e0a GIT binary patch literal 836 zcmV-K1H1f*P)a@Nejp`?G1ei3JT8~ZK~dLuC~D!Pgb)U$)a9Hz`~7~f zTCFD7*C+)fA)8YA&N=S_z^m{39@fHTgT!hJA^tMPCX~_v2GFfQ4gvs22+`)8j~9!@ zD9>6q1yQmIAw$l2FHe57Kn%k$>h*eixm-?let$-X{4mA>opm#VaL)TtA$lW({2_#3 zf*d3(oX+o3gS1+$Hl=hJ-Tafzg^Jcy5X-V`A;i0^H09iqp3Z`(9Q1?`(n?y}U8YWg zn5O9{8&w`4)+Z3o`K;GN%qep4 zN;~IQ5=6-cfYft-l|f>~bIJ>)^yfLd-2=!$0MHRabk5EBcLNeD&W~xDAM92NNVD0T zZZ;b^*SsMud9a&hS)T9vb5a(F=XpW&=|)4^WWV3L0MNz0Myb|PzIG&#nmTQ)wQrIU zWruH(H5_HP+(0)CyYKrG%d+NbobKgW>*iHU*{yF`)+kSYv_XUrk8-xhda|C#&s@iD z+8_X60DwGkdz8{2SWnia-69BSIadhLO$(IUS^)5b{bZf|2g+2g(K4dbv0hWcZgO{i zU3$ui9rjEeYg#Fw=S$_fsH$b_4oH`Dl%Egn&M6QN>%>)db2#TC02pKEC;8ncki}ww zdg3beWea}XvF1^#HePO_ZQHVA?PGVWob$KcZuh!gujfeX9&|P%1$L}qevDa@Nejp`?G1ei3JT8~ZK~dLuC~D!Pgb)U$)a9Hz`~7~f zTCFD7*C+)fA)8YA&N=S_z^m{39@fHTgT!hJA^tMPCX~_v2GFfQ4gvs22+`)8j~9!@ zD9>6q1yQmIAw$l2FHe57Kn%k$>h*eixm-?let$-X{4mA>opm#VaL)TtA$lW({2_#3 zf*d3(oX+o3gS1+$Hl=hJ-Tafzg^Jcy5X-V`A;i0^H09iqp3Z`(9Q1?`(n?y}U8YWg zn5O9{8&w`4)+Z3o`K;GN%qep4 zN;~IQ5=6-cfYft-l|f>~bIJ>)^yfLd-2=!$0MHRabk5EBcLNeD&W~xDAM92NNVD0T zZZ;b^*SsMud9a&hS)T9vb5a(F=XpW&=|)4^WWV3L0MNz0Myb|PzIG&#nmTQ)wQrIU zWruH(H5_HP+(0)CyYKrG%d+NbobKgW>*iHU*{yF`)+kSYv_XUrk8-xhda|C#&s@iD z+8_X60DwGkdz8{2SWnia-69BSIadhLO$(IUS^)5b{bZf|2g+2g(K4dbv0hWcZgO{i zU3$ui9rjEeYg#Fw=S$_fsH$b_4oH`Dl%Egn&M6QN>%>)db2#TC02pKEC;8ncki}ww zdg3beWea}XvF1^#HePO_ZQHVA?PGVWob$KcZuh!gujfeX9&|P%1$L}qevDa@Nejp`?G1ei3JT8~ZK~dLuC~D!Pgb)U$)a9Hz`~7~f zTCFD7*C+)fA)8YA&N=S_z^m{39@fHTgT!hJA^tMPCX~_v2GFfQ4gvs22+`)8j~9!@ zD9>6q1yQmIAw$l2FHe57Kn%k$>h*eixm-?let$-X{4mA>opm#VaL)TtA$lW({2_#3 zf*d3(oX+o3gS1+$Hl=hJ-Tafzg^Jcy5X-V`A;i0^H09iqp3Z`(9Q1?`(n?y}U8YWg zn5O9{8&w`4)+Z3o`K;GN%qep4 zN;~IQ5=6-cfYft-l|f>~bIJ>)^yfLd-2=!$0MHRabk5EBcLNeD&W~xDAM92NNVD0T zZZ;b^*SsMud9a&hS)T9vb5a(F=XpW&=|)4^WWV3L0MNz0Myb|PzIG&#nmTQ)wQrIU zWruH(H5_HP+(0)CyYKrG%d+NbobKgW>*iHU*{yF`)+kSYv_XUrk8-xhda|C#&s@iD z+8_X60DwGkdz8{2SWnia-69BSIadhLO$(IUS^)5b{bZf|2g+2g(K4dbv0hWcZgO{i zU3$ui9rjEeYg#Fw=S$_fsH$b_4oH`Dl%Egn&M6QN>%>)db2#TC02pKEC;8ncki}ww zdg3beWea}XvF1^#HePO_ZQHVA?PGVWob$KcZuh!gujfeX9&|P%1$L}qevD - - - - - + + + + + + + + + diff --git a/sigap-mobile/android/app/src/main/res/values-night-v31/styles.xml b/sigap-mobile/android/app/src/main/res/values-night-v31/styles.xml new file mode 100644 index 0000000..a35c870 --- /dev/null +++ b/sigap-mobile/android/app/src/main/res/values-night-v31/styles.xml @@ -0,0 +1,22 @@ + + + + + + + diff --git a/sigap-mobile/android/app/src/main/res/values-night/styles.xml b/sigap-mobile/android/app/src/main/res/values-night/styles.xml index 06952be..dbc9ea9 100644 --- a/sigap-mobile/android/app/src/main/res/values-night/styles.xml +++ b/sigap-mobile/android/app/src/main/res/values-night/styles.xml @@ -5,6 +5,10 @@ @drawable/launch_background + false + false + false + shortEdges + + + + diff --git a/sigap-mobile/android/app/src/main/res/values/styles.xml b/sigap-mobile/android/app/src/main/res/values/styles.xml index efffa6c..e6cafe5 100644 --- a/sigap-mobile/android/app/src/main/res/values/styles.xml +++ b/sigap-mobile/android/app/src/main/res/values/styles.xml @@ -1,10 +1,12 @@ - - diff --git a/sigap-mobile/assets/images/animations/loader.json b/sigap-mobile/assets/images/animations/loader.json new file mode 100644 index 0000000..c30b930 --- /dev/null +++ b/sigap-mobile/assets/images/animations/loader.json @@ -0,0 +1 @@ +{"v":"4.6.9","fr":29.9700012207031,"ip":0,"op":45.0000018328876,"w":800,"h":600,"nm":"Loader","ddd":0,"assets":[{"id":"comp_0","layers":[{"ddd":0,"ind":1,"ty":4,"nm":"Shape Layer 1","ks":{"o":{"a":0,"k":100},"r":{"a":0,"k":0},"p":{"a":0,"k":[49.206,49.9,0]},"a":{"a":0,"k":[0,0,0]},"s":{"a":0,"k":[100,100,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"a":1,"k":[{"i":{"x":[0,0],"y":[1,1]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"n":["0_1_0p167_0p167","0_1_0p167_0p167"],"t":12,"s":[10,10],"e":[25,25]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"n":["0p833_0p833_0p167_0p167","0p833_0p833_0p167_0p167"],"t":22,"s":[25,25],"e":[25,25]},{"i":{"x":[0,0],"y":[1,1]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"n":["0_1_0p167_0p167","0_1_0p167_0p167"],"t":37,"s":[25,25],"e":[10,10]},{"t":47.0000019143492}]},"p":{"a":0,"k":[75,-75]},"r":{"a":0,"k":0},"nm":"Rectangle Path 1","mn":"ADBE Vector Shape - Rect"},{"ty":"fl","c":{"a":0,"k":[0.105882,0.105882,0.105882,1]},"o":{"a":0,"k":100},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill"},{"ty":"tr","p":{"a":0,"k":[-36.706,37.6],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Rectangle 16","np":3,"cix":2,"ix":1,"mn":"ADBE Vector Group"},{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"a":1,"k":[{"i":{"x":[0,0],"y":[1,1]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"n":["0_1_0p167_0p167","0_1_0p167_0p167"],"t":10,"s":[10,10],"e":[25,25]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"n":["0p833_0p833_0p167_0p167","0p833_0p833_0p167_0p167"],"t":20,"s":[25,25],"e":[25,25]},{"i":{"x":[0,0],"y":[1,1]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"n":["0_1_0p167_0p167","0_1_0p167_0p167"],"t":35,"s":[25,25],"e":[10,10]},{"t":45.0000018328876}]},"p":{"a":0,"k":[50,-75]},"r":{"a":0,"k":0},"nm":"Rectangle Path 1","mn":"ADBE Vector Shape - Rect"},{"ty":"fl","c":{"a":0,"k":[0.105882,0.105882,0.105882,1]},"o":{"a":0,"k":100},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill"},{"ty":"tr","p":{"a":0,"k":[-36.706,37.6],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Rectangle 15","np":3,"cix":2,"ix":2,"mn":"ADBE Vector Group"},{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"a":1,"k":[{"i":{"x":[0,0],"y":[1,1]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"n":["0_1_0p167_0p167","0_1_0p167_0p167"],"t":8,"s":[10,10],"e":[25,25]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"n":["0p833_0p833_0p167_0p167","0p833_0p833_0p167_0p167"],"t":18,"s":[25,25],"e":[25,25]},{"i":{"x":[0,0],"y":[1,1]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"n":["0_1_0p167_0p167","0_1_0p167_0p167"],"t":33,"s":[25,25],"e":[10,10]},{"t":43.0000017514259}]},"p":{"a":0,"k":[25,-75]},"r":{"a":0,"k":0},"nm":"Rectangle Path 1","mn":"ADBE Vector Shape - Rect"},{"ty":"fl","c":{"a":0,"k":[0.105882,0.105882,0.105882,1]},"o":{"a":0,"k":100},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill"},{"ty":"tr","p":{"a":0,"k":[-36.706,37.6],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Rectangle 14","np":3,"cix":2,"ix":3,"mn":"ADBE Vector Group"},{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"a":1,"k":[{"i":{"x":[0,0],"y":[1,1]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"n":["0_1_0p167_0p167","0_1_0p167_0p167"],"t":6,"s":[10,10],"e":[25,25]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"n":["0p833_0p833_0p167_0p167","0p833_0p833_0p167_0p167"],"t":16,"s":[25,25],"e":[25,25]},{"i":{"x":[0,0],"y":[1,1]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"n":["0_1_0p167_0p167","0_1_0p167_0p167"],"t":31,"s":[25,25],"e":[10,10]},{"t":41.0000016699642}]},"p":{"a":0,"k":[0,-75]},"r":{"a":0,"k":0},"nm":"Rectangle Path 1","mn":"ADBE Vector Shape - Rect"},{"ty":"fl","c":{"a":0,"k":[0.105882,0.105882,0.105882,1]},"o":{"a":0,"k":100},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill"},{"ty":"tr","p":{"a":0,"k":[-36.706,37.6],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Rectangle 13","np":3,"cix":2,"ix":4,"mn":"ADBE Vector Group"},{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"a":1,"k":[{"i":{"x":[0,0],"y":[1,1]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"n":["0_1_0p167_0p167","0_1_0p167_0p167"],"t":10,"s":[10,10],"e":[25,25]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"n":["0p833_0p833_0p167_0p167","0p833_0p833_0p167_0p167"],"t":20,"s":[25,25],"e":[25,25]},{"i":{"x":[0,0],"y":[1,1]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"n":["0_1_0p167_0p167","0_1_0p167_0p167"],"t":35,"s":[25,25],"e":[10,10]},{"t":45.0000018328876}]},"p":{"a":0,"k":[75,-50]},"r":{"a":0,"k":0},"nm":"Rectangle Path 1","mn":"ADBE Vector Shape - Rect"},{"ty":"fl","c":{"a":0,"k":[0.105882,0.105882,0.105882,1]},"o":{"a":0,"k":100},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill"},{"ty":"tr","p":{"a":0,"k":[-36.706,37.6],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Rectangle 12","np":3,"cix":2,"ix":5,"mn":"ADBE Vector Group"},{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"a":1,"k":[{"i":{"x":[0,0],"y":[1,1]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"n":["0_1_0p167_0p167","0_1_0p167_0p167"],"t":8,"s":[10,10],"e":[25,25]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"n":["0p833_0p833_0p167_0p167","0p833_0p833_0p167_0p167"],"t":18,"s":[25,25],"e":[25,25]},{"i":{"x":[0,0],"y":[1,1]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"n":["0_1_0p167_0p167","0_1_0p167_0p167"],"t":33,"s":[25,25],"e":[10,10]},{"t":43.0000017514259}]},"p":{"a":0,"k":[50,-50]},"r":{"a":0,"k":0},"nm":"Rectangle Path 1","mn":"ADBE Vector Shape - Rect"},{"ty":"fl","c":{"a":0,"k":[0.105882,0.105882,0.105882,1]},"o":{"a":0,"k":100},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill"},{"ty":"tr","p":{"a":0,"k":[-36.706,37.6],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Rectangle 11","np":3,"cix":2,"ix":6,"mn":"ADBE Vector Group"},{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"a":1,"k":[{"i":{"x":[0,0],"y":[1,1]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"n":["0_1_0p167_0p167","0_1_0p167_0p167"],"t":6,"s":[10,10],"e":[25,25]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"n":["0p833_0p833_0p167_0p167","0p833_0p833_0p167_0p167"],"t":16,"s":[25,25],"e":[25,25]},{"i":{"x":[0,0],"y":[1,1]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"n":["0_1_0p167_0p167","0_1_0p167_0p167"],"t":31,"s":[25,25],"e":[10,10]},{"t":41.0000016699642}]},"p":{"a":0,"k":[25,-50]},"r":{"a":0,"k":0},"nm":"Rectangle Path 1","mn":"ADBE Vector Shape - Rect"},{"ty":"fl","c":{"a":0,"k":[0.105882,0.105882,0.105882,1]},"o":{"a":0,"k":100},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill"},{"ty":"tr","p":{"a":0,"k":[-36.706,37.6],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Rectangle 10","np":3,"cix":2,"ix":7,"mn":"ADBE Vector Group"},{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"a":1,"k":[{"i":{"x":[0,0],"y":[1,1]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"n":["0_1_0p167_0p167","0_1_0p167_0p167"],"t":4,"s":[10,10],"e":[25,25]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"n":["0p833_0p833_0p167_0p167","0p833_0p833_0p167_0p167"],"t":14,"s":[25,25],"e":[25,25]},{"i":{"x":[0,0],"y":[1,1]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"n":["0_1_0p167_0p167","0_1_0p167_0p167"],"t":29,"s":[25,25],"e":[10,10]},{"t":39.0000015885026}]},"p":{"a":0,"k":[0,-50]},"r":{"a":0,"k":0},"nm":"Rectangle Path 1","mn":"ADBE Vector Shape - Rect"},{"ty":"fl","c":{"a":0,"k":[0.105882,0.105882,0.105882,1]},"o":{"a":0,"k":100},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill"},{"ty":"tr","p":{"a":0,"k":[-36.706,37.6],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Rectangle 9","np":3,"cix":2,"ix":8,"mn":"ADBE Vector Group"},{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"a":1,"k":[{"i":{"x":[0,0],"y":[1,1]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"n":["0_1_0p167_0p167","0_1_0p167_0p167"],"t":8,"s":[10,10],"e":[25,25]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"n":["0p833_0p833_0p167_0p167","0p833_0p833_0p167_0p167"],"t":18,"s":[25,25],"e":[25,25]},{"i":{"x":[0,0],"y":[1,1]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"n":["0_1_0p167_0p167","0_1_0p167_0p167"],"t":33,"s":[25,25],"e":[10,10]},{"t":43.0000017514259}]},"p":{"a":0,"k":[75,-25]},"r":{"a":0,"k":0},"nm":"Rectangle Path 1","mn":"ADBE Vector Shape - Rect"},{"ty":"fl","c":{"a":0,"k":[0.105882,0.105882,0.105882,1]},"o":{"a":0,"k":100},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill"},{"ty":"tr","p":{"a":0,"k":[-36.706,37.6],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Rectangle 8","np":3,"cix":2,"ix":9,"mn":"ADBE Vector Group"},{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"a":1,"k":[{"i":{"x":[0,0],"y":[1,1]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"n":["0_1_0p167_0p167","0_1_0p167_0p167"],"t":6,"s":[10,10],"e":[25,25]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"n":["0p833_0p833_0p167_0p167","0p833_0p833_0p167_0p167"],"t":16,"s":[25,25],"e":[25,25]},{"i":{"x":[0,0],"y":[1,1]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"n":["0_1_0p167_0p167","0_1_0p167_0p167"],"t":31,"s":[25,25],"e":[10,10]},{"t":41.0000016699642}]},"p":{"a":0,"k":[50,-25]},"r":{"a":0,"k":0},"nm":"Rectangle Path 1","mn":"ADBE Vector Shape - Rect"},{"ty":"fl","c":{"a":0,"k":[0.105882,0.105882,0.105882,1]},"o":{"a":0,"k":100},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill"},{"ty":"tr","p":{"a":0,"k":[-36.706,37.6],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Rectangle 7","np":3,"cix":2,"ix":10,"mn":"ADBE Vector Group"},{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"a":1,"k":[{"i":{"x":[0,0],"y":[1,1]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"n":["0_1_0p167_0p167","0_1_0p167_0p167"],"t":4,"s":[10,10],"e":[25,25]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"n":["0p833_0p833_0p167_0p167","0p833_0p833_0p167_0p167"],"t":14,"s":[25,25],"e":[25,25]},{"i":{"x":[0,0],"y":[1,1]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"n":["0_1_0p167_0p167","0_1_0p167_0p167"],"t":29,"s":[25,25],"e":[10,10]},{"t":39.0000015885026}]},"p":{"a":0,"k":[25,-25]},"r":{"a":0,"k":0},"nm":"Rectangle Path 1","mn":"ADBE Vector Shape - Rect"},{"ty":"fl","c":{"a":0,"k":[0.105882,0.105882,0.105882,1]},"o":{"a":0,"k":100},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill"},{"ty":"tr","p":{"a":0,"k":[-36.706,37.6],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Rectangle 6","np":3,"cix":2,"ix":11,"mn":"ADBE Vector Group"},{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"a":1,"k":[{"i":{"x":[0,0],"y":[1,1]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"n":["0_1_0p167_0p167","0_1_0p167_0p167"],"t":2,"s":[10,10],"e":[25,25]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"n":["0p833_0p833_0p167_0p167","0p833_0p833_0p167_0p167"],"t":12,"s":[25,25],"e":[25,25]},{"i":{"x":[0,0],"y":[1,1]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"n":["0_1_0p167_0p167","0_1_0p167_0p167"],"t":27,"s":[25,25],"e":[10,10]},{"t":37.0000015070409}]},"p":{"a":0,"k":[0,-25]},"r":{"a":0,"k":0},"nm":"Rectangle Path 1","mn":"ADBE Vector Shape - Rect"},{"ty":"fl","c":{"a":0,"k":[0.105882,0.105882,0.105882,1]},"o":{"a":0,"k":100},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill"},{"ty":"tr","p":{"a":0,"k":[-36.706,37.6],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Rectangle 5","np":3,"cix":2,"ix":12,"mn":"ADBE Vector Group"},{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"a":1,"k":[{"i":{"x":[0,0],"y":[1,1]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"n":["0_1_0p167_0p167","0_1_0p167_0p167"],"t":6,"s":[10,10],"e":[25,25]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"n":["0p833_0p833_0p167_0p167","0p833_0p833_0p167_0p167"],"t":16,"s":[25,25],"e":[25,25]},{"i":{"x":[0,0],"y":[1,1]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"n":["0_1_0p167_0p167","0_1_0p167_0p167"],"t":31,"s":[25,25],"e":[10,10]},{"t":41.0000016699642}]},"p":{"a":0,"k":[75,0]},"r":{"a":0,"k":0},"nm":"Rectangle Path 1","mn":"ADBE Vector Shape - Rect"},{"ty":"fl","c":{"a":0,"k":[0.105882,0.105882,0.105882,1]},"o":{"a":0,"k":100},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill"},{"ty":"tr","p":{"a":0,"k":[-36.706,37.6],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Rectangle 4","np":3,"cix":2,"ix":13,"mn":"ADBE Vector Group"},{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"a":1,"k":[{"i":{"x":[0,0],"y":[1,1]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"n":["0_1_0p167_0p167","0_1_0p167_0p167"],"t":4,"s":[10,10],"e":[25,25]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"n":["0p833_0p833_0p167_0p167","0p833_0p833_0p167_0p167"],"t":14,"s":[25,25],"e":[25,25]},{"i":{"x":[0,0],"y":[1,1]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"n":["0_1_0p167_0p167","0_1_0p167_0p167"],"t":29,"s":[25,25],"e":[10,10]},{"t":39.0000015885026}]},"p":{"a":0,"k":[50,0]},"r":{"a":0,"k":0},"nm":"Rectangle Path 1","mn":"ADBE Vector Shape - Rect"},{"ty":"fl","c":{"a":0,"k":[0.105882,0.105882,0.105882,1]},"o":{"a":0,"k":100},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill"},{"ty":"tr","p":{"a":0,"k":[-36.706,37.6],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Rectangle 3","np":3,"cix":2,"ix":14,"mn":"ADBE Vector Group"},{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"a":1,"k":[{"i":{"x":[0,0],"y":[1,1]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"n":["0_1_0p167_0p167","0_1_0p167_0p167"],"t":2,"s":[10,10],"e":[25,25]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"n":["0p833_0p833_0p167_0p167","0p833_0p833_0p167_0p167"],"t":12,"s":[25,25],"e":[25,25]},{"i":{"x":[0,0],"y":[1,1]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"n":["0_1_0p167_0p167","0_1_0p167_0p167"],"t":27,"s":[25,25],"e":[10,10]},{"t":37.0000015070409}]},"p":{"a":0,"k":[25,0]},"r":{"a":0,"k":0},"nm":"Rectangle Path 1","mn":"ADBE Vector Shape - Rect"},{"ty":"fl","c":{"a":0,"k":[0.105882,0.105882,0.105882,1]},"o":{"a":0,"k":100},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill"},{"ty":"tr","p":{"a":0,"k":[-36.706,37.6],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Rectangle 2","np":3,"cix":2,"ix":15,"mn":"ADBE Vector Group"},{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"a":1,"k":[{"i":{"x":[0,0],"y":[1,1]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"n":["0_1_0p167_0p167","0_1_0p167_0p167"],"t":0,"s":[10,10],"e":[25,25]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"n":["0p833_0p833_0p167_0p167","0p833_0p833_0p167_0p167"],"t":10,"s":[25,25],"e":[25,25]},{"i":{"x":[0,0],"y":[1,1]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"n":["0_1_0p167_0p167","0_1_0p167_0p167"],"t":25,"s":[25,25],"e":[10,10]},{"t":35.0000014255792}]},"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":0},"nm":"Rectangle Path 1","mn":"ADBE Vector Shape - Rect"},{"ty":"fl","c":{"a":0,"k":[0.105882,0.105882,0.105882,1]},"o":{"a":0,"k":100},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill"},{"ty":"tr","p":{"a":0,"k":[-36.706,37.6],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Rectangle 1","np":3,"cix":2,"ix":16,"mn":"ADBE Vector Group"}],"ip":0,"op":300.00001221925,"st":0,"bm":0,"sr":1}]}],"layers":[{"ddd":0,"ind":6,"ty":0,"nm":"Loader 2","refId":"comp_0","ks":{"o":{"a":0,"k":100},"r":{"a":0,"k":0},"p":{"a":0,"k":[400,300,0]},"a":{"a":0,"k":[50,50,0]},"s":{"a":0,"k":[100,100,100]}},"ao":0,"w":100,"h":100,"ip":0,"op":90.0000036657751,"st":0,"bm":0,"sr":1}]} \ No newline at end of file diff --git a/sigap-mobile/assets/images/animations/splash-dark.json b/sigap-mobile/assets/images/animations/splash-dark.json new file mode 100644 index 0000000..25958bf --- /dev/null +++ b/sigap-mobile/assets/images/animations/splash-dark.json @@ -0,0 +1 @@ +{"assets":[{"id":"6","layers":[{"ind":5,"ty":4,"ks":{},"ip":0,"op":181,"st":0,"shapes":[{"ty":"rc","p":{"a":0,"k":[25,25]},"r":{"a":0,"k":0},"s":{"a":0,"k":[50,50]}},{"ty":"fl","c":{"a":0,"k":[0,0,0,0]},"o":{"a":0,"k":0}}]},{"ind":0,"ty":4,"ks":{"s":{"a":0,"k":[133.33,133.33]}},"ip":0,"op":181,"st":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"sh","ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[19.21,9.38],[19.21,18.75],[27.32,23.44],[35.41,28.13],[35.41,18.75],[27.32,14.06],[27.32,4.69],[19.21,0]]}}},{"ty":"fl","c":{"a":0,"k":[0.11,0.11,0.12,1]},"r":2,"o":{"a":0,"k":100}},{"ty":"tr","o":{"a":0,"k":100}}]},{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"sh","ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[11.11,23.44],[11.11,4.69],[3,9.38],[3,28.13],[11.11,32.81],[19.21,37.5],[27.32,32.81],[19.21,28.13]]}}},{"ty":"fl","c":{"a":0,"k":[0.11,0.11,0.12,1]},"r":2,"o":{"a":0,"k":100}},{"ty":"tr","o":{"a":0,"k":100}}]},{"ty":"tr","o":{"a":0,"k":100}}]},{"ty":"tr","o":{"a":0,"k":100}}]}]}]}],"fr":60,"h":400,"ip":0,"layers":[{"ind":8,"ty":0,"parent":4,"ks":{},"w":50,"h":50,"ip":0,"op":181,"st":0,"refId":"6"},{"ind":4,"ty":3,"parent":3,"ks":{"s":{"a":0,"k":[240,240]}},"ip":0,"op":181,"st":0},{"ind":3,"ty":3,"parent":2,"ks":{"a":{"a":0,"k":[60,60]},"p":{"a":0,"k":[120,120]},"s":{"a":1,"k":[{"t":0,"s":[0,0],"i":{"x":[1,1],"y":[1,1]},"o":{"x":[0,0],"y":[0,0]}},{"t":6,"s":[0,0],"i":{"x":[0.25,0.25],"y":[1,1]},"o":{"x":[0.25,0.25],"y":[0.1,0.1]}},{"t":30,"s":[100,100],"i":{"x":[1,1],"y":[1,1]},"o":{"x":[0,0],"y":[0,0]}},{"t":180,"s":[100,100],"h":1}]}},"ip":0,"op":181,"st":0},{"ind":10,"ty":4,"parent":9,"ks":{},"ip":0,"op":181,"st":0,"shapes":[{"ty":"el","p":{"a":0,"k":[120,120]},"s":{"a":0,"k":[240,240]}},{"ty":"fl","c":{"a":0,"k":[1,1,1]},"o":{"a":0,"k":100}}]},{"ind":9,"ty":3,"parent":2,"ks":{},"ip":0,"op":181,"st":0},{"ind":2,"ty":3,"parent":1,"ks":{"a":{"a":0,"k":[120,120]},"p":{"a":0,"k":[200,200]},"s":{"a":1,"k":[{"t":0,"s":[0,0],"i":{"x":[0.25,0.25],"y":[1,1]},"o":{"x":[0.25,0.25],"y":[0.1,0.1]}},{"t":24,"s":[100,100],"i":{"x":[1,1],"y":[1,1]},"o":{"x":[0,0],"y":[0,0]}},{"t":156,"s":[100,100],"i":{"x":[0.667,0.667],"y":[0.001,0.001]},"o":{"x":[0.334,0.334],"y":[0,0]}},{"t":180,"s":[0,0],"h":1}]}},"ip":0,"op":181,"st":0},{"ind":1,"ty":3,"parent":0,"ks":{},"ip":0,"op":181,"st":0},{"ind":0,"ty":3,"ks":{},"ip":0,"op":181,"st":0}],"meta":{"g":"https://jitter.video"},"op":180,"v":"5.7.4","w":400} \ No newline at end of file diff --git a/sigap-mobile/assets/images/animations/splash-light.json b/sigap-mobile/assets/images/animations/splash-light.json new file mode 100644 index 0000000..99089fa --- /dev/null +++ b/sigap-mobile/assets/images/animations/splash-light.json @@ -0,0 +1 @@ +{"assets":[{"id":"6","layers":[{"ind":5,"ty":4,"ks":{},"ip":0,"op":181,"st":0,"shapes":[{"ty":"rc","p":{"a":0,"k":[25,25]},"r":{"a":0,"k":0},"s":{"a":0,"k":[50,50]}},{"ty":"fl","c":{"a":0,"k":[0,0,0,0]},"o":{"a":0,"k":0}}]},{"ind":0,"ty":4,"ks":{"s":{"a":0,"k":[133.33,133.33]}},"ip":0,"op":181,"st":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"sh","ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[19.21,9.38],[19.21,18.75],[27.32,23.44],[35.41,28.13],[35.41,18.75],[27.32,14.06],[27.32,4.69],[19.21,0]]}}},{"ty":"fl","c":{"a":0,"k":[1,1,1,1]},"r":2,"o":{"a":0,"k":100}},{"ty":"tr","o":{"a":0,"k":100}}]},{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"sh","ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[11.11,23.44],[11.11,4.69],[3,9.38],[3,28.13],[11.11,32.81],[19.21,37.5],[27.32,32.81],[19.21,28.13]]}}},{"ty":"fl","c":{"a":0,"k":[1,1,1,1]},"r":2,"o":{"a":0,"k":100}},{"ty":"tr","o":{"a":0,"k":100}}]},{"ty":"tr","o":{"a":0,"k":100}}]},{"ty":"tr","o":{"a":0,"k":100}}]}]}]}],"fr":60,"h":400,"ip":0,"layers":[{"ind":8,"ty":0,"parent":4,"ks":{},"w":50,"h":50,"ip":0,"op":181,"st":0,"refId":"6"},{"ind":4,"ty":3,"parent":3,"ks":{"s":{"a":0,"k":[240,240]}},"ip":0,"op":181,"st":0},{"ind":3,"ty":3,"parent":2,"ks":{"a":{"a":0,"k":[60,60]},"p":{"a":0,"k":[120,120]},"s":{"a":1,"k":[{"t":0,"s":[0,0],"i":{"x":[1,1],"y":[1,1]},"o":{"x":[0,0],"y":[0,0]}},{"t":6,"s":[0,0],"i":{"x":[0.25,0.25],"y":[1,1]},"o":{"x":[0.25,0.25],"y":[0.1,0.1]}},{"t":30,"s":[100,100],"i":{"x":[1,1],"y":[1,1]},"o":{"x":[0,0],"y":[0,0]}},{"t":180,"s":[100,100],"h":1}]}},"ip":0,"op":181,"st":0},{"ind":10,"ty":4,"parent":9,"ks":{},"ip":0,"op":181,"st":0,"shapes":[{"ty":"el","p":{"a":0,"k":[120,120]},"s":{"a":0,"k":[240,240]}},{"ty":"fl","c":{"a":0,"k":[0.114,0.114,0.122]},"o":{"a":0,"k":100}}]},{"ind":9,"ty":3,"parent":2,"ks":{},"ip":0,"op":181,"st":0},{"ind":2,"ty":3,"parent":1,"ks":{"a":{"a":0,"k":[120,120]},"p":{"a":0,"k":[200,200]},"s":{"a":1,"k":[{"t":0,"s":[0,0],"i":{"x":[0.25,0.25],"y":[1,1]},"o":{"x":[0.25,0.25],"y":[0.1,0.1]}},{"t":24,"s":[100,100],"i":{"x":[1,1],"y":[1,1]},"o":{"x":[0,0],"y":[0,0]}},{"t":156,"s":[100,100],"i":{"x":[0.667,0.667],"y":[0.001,0.001]},"o":{"x":[0.334,0.334],"y":[0,0]}},{"t":180,"s":[0,0],"h":1}]}},"ip":0,"op":181,"st":0},{"ind":1,"ty":3,"parent":0,"ks":{},"ip":0,"op":181,"st":0},{"ind":0,"ty":3,"ks":{},"ip":0,"op":181,"st":0}],"meta":{"g":"https://jitter.video"},"op":180,"v":"5.7.4","w":400} \ No newline at end of file diff --git a/sigap-mobile/assets/images/content/backpacking-dark.svg b/sigap-mobile/assets/images/content/backpacking-dark.svg new file mode 100644 index 0000000..83d248d --- /dev/null +++ b/sigap-mobile/assets/images/content/backpacking-dark.svg @@ -0,0 +1,175 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sigap-mobile/assets/images/content/backpacking.svg b/sigap-mobile/assets/images/content/backpacking.svg new file mode 100644 index 0000000..ff1c5ce --- /dev/null +++ b/sigap-mobile/assets/images/content/backpacking.svg @@ -0,0 +1,170 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sigap-mobile/assets/images/content/calling-help-dark.svg b/sigap-mobile/assets/images/content/calling-help-dark.svg new file mode 100644 index 0000000..053e55f --- /dev/null +++ b/sigap-mobile/assets/images/content/calling-help-dark.svg @@ -0,0 +1,123 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sigap-mobile/assets/images/content/calling-help.svg b/sigap-mobile/assets/images/content/calling-help.svg new file mode 100644 index 0000000..561a1a6 --- /dev/null +++ b/sigap-mobile/assets/images/content/calling-help.svg @@ -0,0 +1,118 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sigap-mobile/assets/images/content/communication-dark.svg b/sigap-mobile/assets/images/content/communication-dark.svg new file mode 100644 index 0000000..22ebd2e --- /dev/null +++ b/sigap-mobile/assets/images/content/communication-dark.svg @@ -0,0 +1,156 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sigap-mobile/assets/images/content/communication.svg b/sigap-mobile/assets/images/content/communication.svg new file mode 100644 index 0000000..769f358 --- /dev/null +++ b/sigap-mobile/assets/images/content/communication.svg @@ -0,0 +1,151 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sigap-mobile/assets/images/content/crashed-error-dark.svg b/sigap-mobile/assets/images/content/crashed-error-dark.svg new file mode 100644 index 0000000..1eb653a --- /dev/null +++ b/sigap-mobile/assets/images/content/crashed-error-dark.svg @@ -0,0 +1,159 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sigap-mobile/assets/images/content/crashed-error.svg b/sigap-mobile/assets/images/content/crashed-error.svg new file mode 100644 index 0000000..a8f408b --- /dev/null +++ b/sigap-mobile/assets/images/content/crashed-error.svg @@ -0,0 +1,154 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sigap-mobile/assets/images/content/customer-support-dark.svg b/sigap-mobile/assets/images/content/customer-support-dark.svg new file mode 100644 index 0000000..88697a2 --- /dev/null +++ b/sigap-mobile/assets/images/content/customer-support-dark.svg @@ -0,0 +1,101 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sigap-mobile/assets/images/content/customer-support.svg b/sigap-mobile/assets/images/content/customer-support.svg new file mode 100644 index 0000000..a6dd664 --- /dev/null +++ b/sigap-mobile/assets/images/content/customer-support.svg @@ -0,0 +1,96 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sigap-mobile/assets/images/content/falling-dark.svg b/sigap-mobile/assets/images/content/falling-dark.svg new file mode 100644 index 0000000..780b73b --- /dev/null +++ b/sigap-mobile/assets/images/content/falling-dark.svg @@ -0,0 +1,128 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sigap-mobile/assets/images/content/falling.svg b/sigap-mobile/assets/images/content/falling.svg new file mode 100644 index 0000000..1ed6b62 --- /dev/null +++ b/sigap-mobile/assets/images/content/falling.svg @@ -0,0 +1,128 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sigap-mobile/assets/images/content/hitchhiking-dark.svg b/sigap-mobile/assets/images/content/hitchhiking-dark.svg new file mode 100644 index 0000000..d1c200b --- /dev/null +++ b/sigap-mobile/assets/images/content/hitchhiking-dark.svg @@ -0,0 +1,111 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sigap-mobile/assets/images/content/hitchhiking.svg b/sigap-mobile/assets/images/content/hitchhiking.svg new file mode 100644 index 0000000..a95297a --- /dev/null +++ b/sigap-mobile/assets/images/content/hitchhiking.svg @@ -0,0 +1,111 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sigap-mobile/assets/images/content/home-office-dark.svg b/sigap-mobile/assets/images/content/home-office-dark.svg new file mode 100644 index 0000000..22b95bb --- /dev/null +++ b/sigap-mobile/assets/images/content/home-office-dark.svg @@ -0,0 +1,152 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sigap-mobile/assets/images/content/home-office.svg b/sigap-mobile/assets/images/content/home-office.svg new file mode 100644 index 0000000..f6932c1 --- /dev/null +++ b/sigap-mobile/assets/images/content/home-office.svg @@ -0,0 +1,154 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sigap-mobile/assets/images/content/looking-at-the-map-dark.svg b/sigap-mobile/assets/images/content/looking-at-the-map-dark.svg new file mode 100644 index 0000000..66930b1 --- /dev/null +++ b/sigap-mobile/assets/images/content/looking-at-the-map-dark.svg @@ -0,0 +1,97 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sigap-mobile/assets/images/content/looking-at-the-map.svg b/sigap-mobile/assets/images/content/looking-at-the-map.svg new file mode 100644 index 0000000..8ba2022 --- /dev/null +++ b/sigap-mobile/assets/images/content/looking-at-the-map.svg @@ -0,0 +1,92 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sigap-mobile/assets/images/content/online-dating-dark.svg b/sigap-mobile/assets/images/content/online-dating-dark.svg new file mode 100644 index 0000000..8200785 --- /dev/null +++ b/sigap-mobile/assets/images/content/online-dating-dark.svg @@ -0,0 +1,78 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sigap-mobile/assets/images/content/online-dating.svg b/sigap-mobile/assets/images/content/online-dating.svg new file mode 100644 index 0000000..1b313c0 --- /dev/null +++ b/sigap-mobile/assets/images/content/online-dating.svg @@ -0,0 +1,80 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sigap-mobile/assets/images/content/paper-plane-dark.svg b/sigap-mobile/assets/images/content/paper-plane-dark.svg new file mode 100644 index 0000000..4eb834b --- /dev/null +++ b/sigap-mobile/assets/images/content/paper-plane-dark.svg @@ -0,0 +1,157 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sigap-mobile/assets/images/content/paper-plane.svg b/sigap-mobile/assets/images/content/paper-plane.svg new file mode 100644 index 0000000..f9855a0 --- /dev/null +++ b/sigap-mobile/assets/images/content/paper-plane.svg @@ -0,0 +1,157 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sigap-mobile/assets/images/content/question-mark-dark.svg b/sigap-mobile/assets/images/content/question-mark-dark.svg new file mode 100644 index 0000000..a959f50 --- /dev/null +++ b/sigap-mobile/assets/images/content/question-mark-dark.svg @@ -0,0 +1,93 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sigap-mobile/assets/images/content/question-mark.svg b/sigap-mobile/assets/images/content/question-mark.svg new file mode 100644 index 0000000..6e10cf3 --- /dev/null +++ b/sigap-mobile/assets/images/content/question-mark.svg @@ -0,0 +1,95 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sigap-mobile/assets/images/content/searching-location-on-the-phone-dark.svg b/sigap-mobile/assets/images/content/searching-location-on-the-phone-dark.svg new file mode 100644 index 0000000..824f941 --- /dev/null +++ b/sigap-mobile/assets/images/content/searching-location-on-the-phone-dark.svg @@ -0,0 +1,101 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sigap-mobile/assets/images/content/searching-location-on-the-phone.svg b/sigap-mobile/assets/images/content/searching-location-on-the-phone.svg new file mode 100644 index 0000000..4569bd2 --- /dev/null +++ b/sigap-mobile/assets/images/content/searching-location-on-the-phone.svg @@ -0,0 +1,101 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sigap-mobile/assets/images/content/telephone-call-dark.svg b/sigap-mobile/assets/images/content/telephone-call-dark.svg new file mode 100644 index 0000000..4b40104 --- /dev/null +++ b/sigap-mobile/assets/images/content/telephone-call-dark.svg @@ -0,0 +1,160 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sigap-mobile/assets/images/content/telephone-call.svg b/sigap-mobile/assets/images/content/telephone-call.svg new file mode 100644 index 0000000..b2fc38f --- /dev/null +++ b/sigap-mobile/assets/images/content/telephone-call.svg @@ -0,0 +1,155 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sigap-mobile/assets/images/content/traveling-with-a-suitcase-dark.svg b/sigap-mobile/assets/images/content/traveling-with-a-suitcase-dark.svg new file mode 100644 index 0000000..6459a5e --- /dev/null +++ b/sigap-mobile/assets/images/content/traveling-with-a-suitcase-dark.svg @@ -0,0 +1,135 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sigap-mobile/assets/images/content/traveling-with-a-suitcase.svg b/sigap-mobile/assets/images/content/traveling-with-a-suitcase.svg new file mode 100644 index 0000000..c2e71f6 --- /dev/null +++ b/sigap-mobile/assets/images/content/traveling-with-a-suitcase.svg @@ -0,0 +1,130 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sigap-mobile/assets/images/content/video-call-dark.svg b/sigap-mobile/assets/images/content/video-call-dark.svg new file mode 100644 index 0000000..6417d69 --- /dev/null +++ b/sigap-mobile/assets/images/content/video-call-dark.svg @@ -0,0 +1,128 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sigap-mobile/assets/images/content/video-call.svg b/sigap-mobile/assets/images/content/video-call.svg new file mode 100644 index 0000000..79f7c9e --- /dev/null +++ b/sigap-mobile/assets/images/content/video-call.svg @@ -0,0 +1,130 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sigap-mobile/assets/images/content/woman-hugging-earth-dark.svg b/sigap-mobile/assets/images/content/woman-hugging-earth-dark.svg new file mode 100644 index 0000000..3d2a2f3 --- /dev/null +++ b/sigap-mobile/assets/images/content/woman-hugging-earth-dark.svg @@ -0,0 +1,91 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sigap-mobile/assets/images/content/woman-hugging-earth.svg b/sigap-mobile/assets/images/content/woman-hugging-earth.svg new file mode 100644 index 0000000..d0208f9 --- /dev/null +++ b/sigap-mobile/assets/images/content/woman-hugging-earth.svg @@ -0,0 +1,93 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sigap-mobile/assets/images/content/woman-tourist-dark.svg b/sigap-mobile/assets/images/content/woman-tourist-dark.svg new file mode 100644 index 0000000..2e641a8 --- /dev/null +++ b/sigap-mobile/assets/images/content/woman-tourist-dark.svg @@ -0,0 +1,146 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sigap-mobile/assets/images/content/woman-tourist.svg b/sigap-mobile/assets/images/content/woman-tourist.svg new file mode 100644 index 0000000..04843fb --- /dev/null +++ b/sigap-mobile/assets/images/content/woman-tourist.svg @@ -0,0 +1,141 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sigap-mobile/assets/logos/logo-bg-dark.png b/sigap-mobile/assets/logos/logo-bg-dark.png new file mode 100644 index 0000000000000000000000000000000000000000..91f25b546fd5eded1a4bcd419fcadcc7df8240c8 GIT binary patch literal 962 zcmV;z13mnSP)Jzl=ljZU1LO`K*pbLMNA%Gz*!Xic{yVwHcyI=rVB6>q z&mxdaCPOTjFu9n)U=R)lgAw!d&;euRzmNxDIbE=vZt-3?U}zq)Stf7LW+&buCqxc# zr3sUFj0ej`ks-}k{h#DPI0~Pen$0G~ zVlle8xuI68MT+smfte(4y8Tzaj;6yIopXSdf~V%jKwAtx_NmpxxbF zvWreOfyVFd?krscS!J_XQo)NOfK`MXV9e_3D$NVa4nV(1N;u#KEIEL32;<#^r5vbK zD&#h7C-J=b@4!pxbUI3o7;|#~n;!~7C={}_GtXT@*hlOfF_au7RDdH!u~-zxi~aq5 z>FXSi0F2q*-jQnM{W4q9g*SBq)cn+J&r+j*ci2iAd+iB$P?Wymh?4zn3nDW`5X_m2wG{ zN+mHM6;vP@!!Q>ElCml*-|_KrSavd2wp=bt&BZ-199djk6bUTD`uaL;Zf=U()1{>) zscW=UDm5SrKq^*iwW)a+ry5HU09etjtt}x9tTHyAe}OrLLP10j(UAQEKnBYZ7{%1B zm2(Vo14jlGj#!SsD5h?)%8f=t>Ka525tPl1Y1odyQ;;9gXjB+D39S6y-ky-63gAGE zU*C{IaI!?AKa~}BUq}b93TeXu6y5+i0Gxm`s6a@32YA%DFBay1c|+t)F7$rCe@h+( zJ!GBxOlT@+$$LBudt~g%C;HPJ_X=q8iB_v{!03QS$U6+X_QT`!!NI{TH<4ZM1Z;$@ z=I6hjmEf|9c0Q_-+uE*>_%q|d#D_i5JLdBGk=(%}YyNE9!yekStBf8p+OQbdiDng* kUp#6omn_P>Q7Omr8=EM3ZN#ABUjP6A07*qoM6N<$g5cq?vH$=8 literal 0 HcmV?d00001 diff --git a/sigap-mobile/assets/logos/logo-bg-dark.svg b/sigap-mobile/assets/logos/logo-bg-dark.svg new file mode 100644 index 0000000..4c0becd --- /dev/null +++ b/sigap-mobile/assets/logos/logo-bg-dark.svg @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/sigap-mobile/assets/logos/logo-bg-light.png b/sigap-mobile/assets/logos/logo-bg-light.png new file mode 100644 index 0000000000000000000000000000000000000000..87eb83e18101a4fde2f4fd46293f15be5414365b GIT binary patch literal 1034 zcmV+l1oiugP)1eKI#UC(FyrPFp9O9Ym0l zd`+FnWKxEPh6LA2BM~DptG~nbzi#E;^LxAPELvr8WunwPo+|x zj^QY9G<5Jp>SSbO#PMw!bAEmVA;vhVGO|BxHAYS9W%GTp#EA2+){= zg9BH6=~iB+-@XgrG-Gpf({U3&rW{R+fs>OHXH7scI)yYn2Ix-5$H&fWRL7K>3z}88 zoz>!`9QrQ(mWvcFR{jV39UUDxVt8!%IS&sHU7d$$5kP1Ne;*tiluRb$YQ@DqG?p&K z^QwhWO9UwJn#S|ek^PuH*_X%D#e5Oa-`_8zqoc0+QYZzxbt}S=@XmV8)pU`qtu4nm-FO-SQq6B`!9HVSW4hl+ICvJIDEC`8LMT`*=6O7d7Sbqn z3s5M(t&|R{!A!*wbQ>GB@EilRpo=UlEI0;MLrvBgs5+p4EVgmc2m_pfUOYW!YNX-Z zYQ#3;@%RtCADs{%P}ypGdt1`!wCDzQ?{frJ(O!{ok}@pIir(Gb{gx17n&vYzo6XvI zO}!`KV*|F|*T^8?EjG4<2OD>PjSZ*FY6BLLB|N33rCcueosEY&G3%}n!LsXw1Q^8Y z8di4?MVXRHJw)uWh>Ye-30}3HF1}Q3Jo)Fp5*&$GEcOLCHioah*3aC67~O}@zgBKj z@>{I~kzy?j*(^>l3qc8KUNJm}Yi4oHJsAFxnX+2PKSsrX=faT3Z~y=R07*qoM6N<$ Eg4y5FL;wH) literal 0 HcmV?d00001 diff --git a/sigap-mobile/assets/logos/logo-bg-light.svg b/sigap-mobile/assets/logos/logo-bg-light.svg new file mode 100644 index 0000000..e62d21a --- /dev/null +++ b/sigap-mobile/assets/logos/logo-bg-light.svg @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/sigap-mobile/assets/logos/logo-dark.png b/sigap-mobile/assets/logos/logo-dark.png new file mode 100644 index 0000000000000000000000000000000000000000..7e37ca30b82dedef12c9ebfc1adca7f2211a7cda GIT binary patch literal 615 zcmV-t0+{`YP)FVJuzqW|hr;xX!?YigC0A+c^z#JP#2#!VzOQWUADJg20( zA{Ezm%yWLq(JHu>uFoks^hiM_Zr^=z%c-o!zZo-2@<78SZ2qiSLcO?+ z^r>azrr!(5_7B|og@-rm_N}CH{2j`^3yozD4=AUE({$T)acdTtb z5F<)1z^#9Fh#ezWtdKeqP}v9^1Jgf0Hg?`(^bf~uvrosSEmi;k002ovPDHLkV1f%n B2I~L- literal 0 HcmV?d00001 diff --git a/sigap-mobile/assets/logos/logo-dark.svg b/sigap-mobile/assets/logos/logo-dark.svg new file mode 100644 index 0000000..4b421c5 --- /dev/null +++ b/sigap-mobile/assets/logos/logo-dark.svg @@ -0,0 +1,4 @@ + + + + diff --git a/sigap-mobile/assets/logos/logo-light.png b/sigap-mobile/assets/logos/logo-light.png new file mode 100644 index 0000000000000000000000000000000000000000..0ee065e6302c14583ac02ee4fe86159650f98401 GIT binary patch literal 876 zcmV-y1C#uTP)Gtw0_T|wvyN@ktm&H#Z#B|tC$ zdM;Alu%Yg&QqMs^TTW{!^u4V95N#3Dc?`o?QFu1>Qqk6^Utnp$^7iw%@-l5 zRO$i$K!fzLwHqo^mOFeAVw&cp-|yEUri9V_Mjqg+wIIeE4u@3;y1}MN8VMvL5Y!nA z1|r?sh zs%sf;CrGE*%g=vA_IL1T((^Y9oiuUr7LP1xLJp8T=f(a3v)QbbPN)CS^ILaauT0-z zsU(xhzw`OLOB$F?rxRY}cI4QBhGAqDi$x6q*8N%8T&-5OqtU2C8i`mPz$IL-*W3y} zkw!2;_sCI0m)$O`4&d^^ZV#AKJV6XwM2p?{{)3+y&P$h;}x`a(O)g + + + diff --git a/sigap-mobile/assets/logos/logo.png b/sigap-mobile/assets/logos/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..e686563ac4bea01aca463ed8f63fc1832d8ebf49 GIT binary patch literal 2389 zcmV-b399yqP)M$UH~7d+3a&o=?X zi|4~Tjwg1SfHVMD)qTw~Alx0utCbi{Pfx?#rAsh3HwOy~3pF9F8i}wF9}`9CbQ&DT zfyFH?(A?ZC=i=-s0nX0j$BJ+Au`YjDnZI_25bglpW-65mlu9M2%+A6k1i*z-SJRL8 z*~Z5yfD}c)GRjb%nE}^zA>GuJ!LChh*>;#H{dKSb0BOD|Je)gs4$fb=U=>=w=Zo`e z6woLIa2_7YKuRQ9lv#uwPH!%^^xQ=0&%<&Y{TKLr`bWHNy>Rg&oIig)#LTwYqBgGH zuDg(FZd}_{ixHy%Bo&>+D(Sd%C8sgrY1MWw|JRG>-svbhOLoN|X3k z3We{Z0W+w55AEXWnleUc%7eP#J zrGAe*+y}Sa+7lU}bRKc;sbuv%|2D_>yaJ))+UE>(zcfW6-D;fLb2)fw+Y|8eu6}55 z&shaF0kn;)oktFIp>(1ZTVZ~Fo=pgwPuDy>HZEirifF}(|G-;syeh$TXh76_#}QRN zK_5MpC2TLsQ@8BlDJG` za;Uv+TOWh&{HjnNUkF5_Hq9VJ!@asHUedLz87j|sRZ5!*A!7H|iQRF{g zGzgZ2OjaXdZDWGx01Ud27YN{o2iG*g+(6fQh!R?ntpc_)$2i(DHl-Nxuy;ARyCOO- zxQ6N*FJ__$R8@V)X`ryy*?B`hJe6rx_No`&@uov1P8hyu>>i-Ql7Zknz+@5D=T~z! zo@PoWa$)P~>qiPNs&Q7%H^p5>EiKK^vtfO0Ej330Qapk2tnpXiuuaacxr~|+ge8L@ zF&fq5bc6-y@Z0*t7In?R z_3bYeje-32JK(YyF|~;>*2b!1^D8?SMcfH&#dzm0M+BD z2OHARFJXM=Z&7>qeh%LqI-F=8?Tfw#?w4S6fo(y>2@b4!gAH*ciN>gQa zVCSv@n3$M^%b}<}r9z6MYt@E0&H^Sky##EDaI*PXp^=N-LfMt*{QS>4Dk)>!&!09D`k1d}_gEv$y+ z%R3u*QApgd;U@X6IyQdBXaW9A@83s%ItGUh{UH5b=UE&&0;k8uL01k3($tia9^q!& z0{~QgOuk^!GqrAG=T-^d(SVg=#K!?sX|LcY%M3yS7`9D<3v*-?E4MM9L56_!M zMt+y>L!fzeP#2zvTu3GiE4x?AokmqTMNy?hsw~`p?rM@M9Eimw0Ai78ymZIM#0kXXF z>L7F?pYbziq}wW`@e+z!N43@4>toXCrT_@m+xy9!L1C*gljT78y?T!x86Ab;;iFQ^ zohV=uqH&XG!EtS)@_R0@YFB$lZeBMPwEZ`Kt#mm45kpPj&*WxQmyGgDiabwZr6LN* z*Mr}}XP@trXNHZqpr-n%j6(PoN8YdMUOkE?T~RGtTbaeR@xJvp-3XgE-vimUwp#ni zQ@^6%`{DSBlMR}+@iJEhgXdH#MQQ&OS>PMgZZBCtY4}RY-zK_m^F~;QU_Sh44-6kU zny6mHg|q=7Z=g+#pKlI|mHE~ESP$7jdw>9#nAu+PO?7`YCW)X)NOv6tpqgAh>$GGX z`PGjQ>7kRS7N$2XQ<&Aqm;^E%OmU|*uaeWfl*f1WIK^Ud3XhaQ1%e|qedOazbjG^i z`YWO7QWr9>6%Kp>ZAAeXN2p*C#ya!^-&@Y-+6) zWP*&i&OxhgHvrLAwOO$}DX`E#LaMxWsETL200000NkvXX Hu0mjfRkeXl literal 0 HcmV?d00001 diff --git a/sigap-mobile/assets/logos/logo.svg b/sigap-mobile/assets/logos/logo.svg new file mode 100644 index 0000000..6d966da --- /dev/null +++ b/sigap-mobile/assets/logos/logo.svg @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sigap-mobile/flutter_native_splash.yaml b/sigap-mobile/flutter_native_splash.yaml new file mode 100644 index 0000000..83c296b --- /dev/null +++ b/sigap-mobile/flutter_native_splash.yaml @@ -0,0 +1,15 @@ +flutter_native_splash: + color: "#ffffff" + image: assets/logos/logo-light.png + branding: assets/logos/logo-light.png + color_dark: "#121212" + image_dark: assets/logos/logo-dark.png + branding_dark: assets/logos/logo-dark.png + + android_12: + image: assets/logos/logo-light.png + icon_background_color: "#ffffff" + image_dark: assets/logos/logo-dark.png + icon_background_color_dark: "#121212" + + web: false diff --git a/sigap-mobile/ios/Runner/Assets.xcassets/BrandingImage.imageset/BrandingImage.png b/sigap-mobile/ios/Runner/Assets.xcassets/BrandingImage.imageset/BrandingImage.png new file mode 100644 index 0000000000000000000000000000000000000000..1899490189c6232ff20f169d1cc8d5fa737b0c55 GIT binary patch literal 392 zcmV;30eAk1P)Y5Qg{W_LgHW>v5dXMs2OcLTm&ZTPv{<#2*j>S_qbYbv9xIKfq2Hun~I^ z3;%!@Zru+yIFSn?7ejQacZTE##bk02&+V}n0IF47t zFg$OyTJ@d)V{A$YafFDub8e}$0~liqeHW4>c`CGX?rsp`ZzTGMhXX)_i0VIMw>;0A zNYnJyT6?0DY77iWDc7PXYWTiC2LPj-^L@|rR8If^#sOfcc-|QEXsw;+oUd@s4*+1S z4~bGbQ>|8Cq?9$S^=+rqL8a8SG3LHfscaEKTsNS#u5-@!2qD9SkP#t7GYrF~lybA( zZoeVoN1o@~0N~Sa-czO2O&rHNjIkOaBnX0FIZ2X5W6Zjg@}lq|;^z+%BEDx?wm~U9 m7DDV&N~g8fhg$2aGWHjlQizWg=C0TP0000P000>X1^@s6#OZ}&0007HNkl z!An#@90%}u>U^Ku+V7GMJ_jb3|-*tZTKEv<(hUs8URxB3lwQc)> zQfk`syzNHzbTo?udjO0klgS}t%#_x8*%-6mYNS#L01E&{lv0yg>y4(7?(Xi}zVAC) z>yLG?ULnN#!NI}#LZR@bA%uu76Vbe7Syz-&_v!!*9r*VG=e#G8NX)ghwGIF07{ifd zGWj)_b1Ogo7jjZSHF9FrG6cX4-}k@Ox-%_9Y}=j!Fr>AfsJ=5T9hYTUXM;NV`;$r#Hp#!f}FT^B+O0C?=W?sC&eKA-&X~eee$#gp1uap|AgjlPz z)?0^v)CDQ!UC#M4%d&bJM#?oHg!lyDUA>3Ob=_3}YeX~y;9)IfzfOpwQp!Qk^JcZy zD`5{+Ij?a5i&Dy~$B@HQoKB@uGo?~#BQQbc+uF>^zM?j8T`W=0(W12_x+SI-)%r3|Gs zgAghTA#QNaxBCIArBO=hx~i)4VJ!^>MF_d1D9RPbalUfSKgR$Y21`?^lvAlxR=S2t zrBV+iNm>YgPR9UhmlEcpBcT{$qe6&0LMYuONMs#?QdM<~5OPllkq!G~CkmzO`j@lF z%t0N@)R_aJQ)&s3^&cv%P8AAcJV^-o#yQ{Vblqt~U89ty2_a8S(_HEcs6fLQ<3(N9 zbG2G+s$Q>u?+2)sV59z&OeU9Y+urm%@8kadzH`=4VCOl6&>W?7P6$yjO>?^EP>$o= z9~>Nn`6-Pt9*YQ=V~o8q3}dsWP?lx=uq8EZu1E;Ucd|6HePDqQ;-{|bD{zG3oNqTV(7(-4xKqaG&B_3(q@c8F!dgWYCZvUSC~FCQReeDOP6c4 z+T$o$YiW0P_i7@MP!2(H&Y!^=85zlVp0^$~Fhb~7GMR)0mQK{`_0XAveXrx*S1Oe@ znl1ml@B51w$T^3rLg}Kt4}q-pycl`#vXMjhNW`3ycj2b xSIx7n81gVZB7`n98jWSwb>G^y9l7dS`UTO)YSlf2AbJ1*002ovPDHLkV1iJ1o{0be literal 0 HcmV?d00001 diff --git a/sigap-mobile/ios/Runner/Assets.xcassets/BrandingImage.imageset/BrandingImageDark.png b/sigap-mobile/ios/Runner/Assets.xcassets/BrandingImage.imageset/BrandingImageDark.png new file mode 100644 index 0000000000000000000000000000000000000000..970899fe7eb84985e66285cc983651e686305b81 GIT binary patch literal 412 zcmV;N0b~A&P)oTEp`zUX+cRX)i=HO_rIc;o z_aA~FSj8A`VT_MbsnqO%5<*B7LOeT;llMIDw$*BVx~_Z8Ilm)>>;b@g4`7THFvczb zOaZ_&rL=0AW))-X)a!LArF^q(dq15{kM@9Kv3SZDyWyN4XquJ>fU!&_vstUv);Z@p zwryW@bIoS+<3~wK`Ks&suBxiXp68KlHoHVA^(duRaqTZIeu;ui5!K270000P000>X1^@s6#OZ}&0006KNklN>jOjbJin@{KfU)K`@lv>z7vsC-uo|= zAkMjSB%g`Mc~!mH2TOq~$MfRdc;&P?6wIuSEN@_h>E=Yv9iiAYmKj+V?^BsmV?zO{CFV2JnrhpL_= zc`vR=M1~7ShXIU<$l#EuXs)&Pi7{qXRiCB+7pfEj;JEj`47QbJ*>&gKbCPdFWb`1A z`BtknMsm7iVlR2`H`_Prbe`uo06Z3vMrBCSILS`{-u5dhYwfBrW{u^?}rHQs*7XU1goCzWPt_11GTDxY9 zStmIMV7kPwrmAif0ZJkA&%_7Dn3dF;le->or%Uj%4A2*{3l>eh;+$Jb{l5tyu4lW- Z`9BER1-313Y104z002ovPDHLkV1h>93nBmj literal 0 HcmV?d00001 diff --git a/sigap-mobile/ios/Runner/Assets.xcassets/BrandingImage.imageset/BrandingImageDark@3x.png b/sigap-mobile/ios/Runner/Assets.xcassets/BrandingImage.imageset/BrandingImageDark@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..fee2fa1b5b1c2390c983602c5823efd8744c2594 GIT binary patch literal 754 zcmV0jbITGNt%#| zf;)v^r}lzd_yH`_UFVt^jl1k-W_FTI;eiLcF!T1e_ssqCW(+mT%$7yu*|7VJ)r0d# z(`L2?Kt*J;>LztVxh4R#%x7$vu**MJ+7^ z6=S?i@+!%Xs`|bH*tyKo0}16a$xE>-|Ks_`Nh^@TFC-w!N+FeFH6^+3fK zCrRD~&@B4TP87<_K8zwV-Rh3i$boQ5C84zbLlxC&L(Rk(Kdb83K^L7i)GWzB@{x#W zzl%m;pSK*E*#gNqRsC`npmKSmen;|U8ohSA-F}-S$-$_hT;~C-kX%V2H$`Nzb|{kf zNOrO!JX!Mg1v7ggBJEnCRP~#xuHvv|t$P%z>~muFiO8y%dFsb(L>@g94#76lsbeRE za5IFkRMgT^P(FRCYN=C-9~xA31Hgut0RZb+S*QofXDl8f0k| z``m)>DcqJHp;R>~bF-?p0Ze&@lDq@pN*z$Snk0R7`c>uuV15qVQPrKy(tnbnjtAW< zbIZZ1TIz)}n|gbpys~=3^n+x{`8>DOTgJmOQOgxVxE4Yf?}1X)$G*(Wq4vsd3}Bw* zd}e7wRSQSX``*CbCnEc4$-j_(W*UK872w>`?W&gceWtR_7GjLANiJpmY+!xqQf{eF z08bi?#+#v`a;fUBuk3KTU7^tiSDI!1C#OW@*f%hRv(FTNT7fd0wgZ}V7X|DlTKkz{CP k)8oZ-d98X?rW|zZ7f`J+V{?k^M*si-07*qoM6N<$f=G2{Y5)KL literal 0 HcmV?d00001 diff --git a/sigap-mobile/ios/Runner/Assets.xcassets/BrandingImage.imageset/Contents.json b/sigap-mobile/ios/Runner/Assets.xcassets/BrandingImage.imageset/Contents.json new file mode 100644 index 0000000..bdbce88 --- /dev/null +++ b/sigap-mobile/ios/Runner/Assets.xcassets/BrandingImage.imageset/Contents.json @@ -0,0 +1,56 @@ +{ + "images" : [ + { + "filename" : "BrandingImage.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "dark" + } + ], + "filename" : "BrandingImageDark.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "BrandingImage@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "dark" + } + ], + "filename" : "BrandingImageDark@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "BrandingImage@3x.png", + "idiom" : "universal", + "scale" : "3x" + }, + { + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "dark" + } + ], + "filename" : "BrandingImageDark@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/sigap-mobile/ios/Runner/Assets.xcassets/LaunchBackground.imageset/Contents.json b/sigap-mobile/ios/Runner/Assets.xcassets/LaunchBackground.imageset/Contents.json new file mode 100644 index 0000000..8bb185b --- /dev/null +++ b/sigap-mobile/ios/Runner/Assets.xcassets/LaunchBackground.imageset/Contents.json @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "filename" : "background.png", + "idiom" : "universal" + }, + { + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "dark" + } + ], + "filename" : "darkbackground.png", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/sigap-mobile/ios/Runner/Assets.xcassets/LaunchBackground.imageset/background.png b/sigap-mobile/ios/Runner/Assets.xcassets/LaunchBackground.imageset/background.png new file mode 100644 index 0000000000000000000000000000000000000000..8e21404806af591e5f4e4ac12eddcde9d2602abe GIT binary patch literal 69 zcmeAS@N?(olHy`uVBq!ia0vp^j3CUx1SBVv2j2ryJf1F&Ar*6yfBye(&%nmV%p~xY RaWhby!PC{xWt~$(69CA855WKc literal 0 HcmV?d00001 diff --git a/sigap-mobile/ios/Runner/Assets.xcassets/LaunchBackground.imageset/darkbackground.png b/sigap-mobile/ios/Runner/Assets.xcassets/LaunchBackground.imageset/darkbackground.png new file mode 100644 index 0000000000000000000000000000000000000000..75b99f0e524d4b928007dc08b8841c10679bb5c7 GIT binary patch literal 69 zcmeAS@N?(olHy`uVBq!ia0vp^j3CUx1SBVv2j2ryJf1F&Ar*6y1%-rwq74kzFSiz- Q1d20wy85}Sb4q9e0G-ngg#Z8m literal 0 HcmV?d00001 diff --git a/sigap-mobile/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json b/sigap-mobile/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json index 0bedcf2..f3387d4 100644 --- a/sigap-mobile/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json +++ b/sigap-mobile/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json @@ -1,23 +1,56 @@ { "images" : [ { - "idiom" : "universal", "filename" : "LaunchImage.png", + "idiom" : "universal", "scale" : "1x" }, { + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "dark" + } + ], + "filename" : "LaunchImageDark.png", "idiom" : "universal", + "scale" : "1x" + }, + { "filename" : "LaunchImage@2x.png", + "idiom" : "universal", "scale" : "2x" }, { + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "dark" + } + ], + "filename" : "LaunchImageDark@2x.png", "idiom" : "universal", + "scale" : "2x" + }, + { "filename" : "LaunchImage@3x.png", + "idiom" : "universal", + "scale" : "3x" + }, + { + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "dark" + } + ], + "filename" : "LaunchImageDark@3x.png", + "idiom" : "universal", "scale" : "3x" } ], "info" : { - "version" : 1, - "author" : "xcode" + "author" : "xcode", + "version" : 1 } } diff --git a/sigap-mobile/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png b/sigap-mobile/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png index 9da19eacad3b03bb08bbddbbf4ac48dd78b3d838..1899490189c6232ff20f169d1cc8d5fa737b0c55 100644 GIT binary patch literal 392 zcmV;30eAk1P)Y5Qg{W_LgHW>v5dXMs2OcLTm&ZTPv{<#2*j>S_qbYbv9xIKfq2Hun~I^ z3;%!@Zru+yIFSn?7ejQacZTE##bk02&+V}n0IF47t zFg$OyTJ@d)V{A$YafFDub8e}$0~liqeHW4>c`CGX?rsp`ZzTGMhXX)_i0VIMw>;0A zNYnJyT6?0DY77iWDc7PXYWTiC2LPj-^L@|rR8If^#sOfcc-|QEXsw;+oUd@s4*+1S z4~bGbQ>|8Cq?9$S^=+rqL8a8SG3LHfscaEKTsNS#u5-@!2qD9SkP#t7GYrF~lybA( zZoeVoN1o@~0N~Sa-czO2O&rHNjIkOaBnX0FIZ2X5W6Zjg@}lq|;^z+%BEDx?wm~U9 m7DDV&N~g8fhg$2aGWHjlQizWg=C0TP0000Zci7-kcv6Uzs@r-FtIZ-&5|)J Q1PU{Fy85}Sb4q9e0B4a5jsO4v diff --git a/sigap-mobile/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png b/sigap-mobile/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png index 9da19eacad3b03bb08bbddbbf4ac48dd78b3d838..c3094ac6e80bc18759be7d0001149e08263f3108 100644 GIT binary patch literal 669 zcmV;O0%HA%P)P000>X1^@s6#OZ}&0007HNkl z!An#@90%}u>U^Ku+V7GMJ_jb3|-*tZTKEv<(hUs8URxB3lwQc)> zQfk`syzNHzbTo?udjO0klgS}t%#_x8*%-6mYNS#L01E&{lv0yg>y4(7?(Xi}zVAC) z>yLG?ULnN#!NI}#LZR@bA%uu76Vbe7Syz-&_v!!*9r*VG=e#G8NX)ghwGIF07{ifd zGWj)_b1Ogo7jjZSHF9FrG6cX4-}k@Ox-%_9Y}=j!Fr>AfsJ=5T9hYTUXM;NV`;$r#Hp#!f}FT^B+O0C?=W?sC&eKA-&X~eee$#gp1uap|AgjlPz z)?0^v)CDQ!UC#M4%d&bJM#?oHg!lyDUA>3Ob=_3}YeX~y;9)IfzfOpwQp!Qk^JcZy zD`5{+Ij?a5i&Dy~$B@HQoKB@uGo?~#BZci7-kcv6Uzs@r-FtIZ-&5|)J Q1PU{Fy85}Sb4q9e0B4a5jsO4v diff --git a/sigap-mobile/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png b/sigap-mobile/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png index 9da19eacad3b03bb08bbddbbf4ac48dd78b3d838..406593f4914217a7d209440e66f695ada3e02d6f 100644 GIT binary patch literal 871 zcmV-t1DO1YP)QQbc+uF>^zM?j8T`W=0(W12_x+SI-)%r3|Gs zgAghTA#QNaxBCIArBO=hx~i)4VJ!^>MF_d1D9RPbalUfSKgR$Y21`?^lvAlxR=S2t zrBV+iNm>YgPR9UhmlEcpBcT{$qe6&0LMYuONMs#?QdM<~5OPllkq!G~CkmzO`j@lF z%t0N@)R_aJQ)&s3^&cv%P8AAcJV^-o#yQ{Vblqt~U89ty2_a8S(_HEcs6fLQ<3(N9 zbG2G+s$Q>u?+2)sV59z&OeU9Y+urm%@8kadzH`=4VCOl6&>W?7P6$yjO>?^EP>$o= z9~>Nn`6-Pt9*YQ=V~o8q3}dsWP?lx=uq8EZu1E;Ucd|6HePDqQ;-{|bD{zG3oNqTV(7(-4xKqaG&B_3(q@c8F!dgWYCZvUSC~FCQReeDOP6c4 z+T$o$YiW0P_i7@MP!2(H&Y!^=85zlVp0^$~Fhb~7GMR)0mQK{`_0XAveXrx*S1Oe@ znl1ml@B51w$T^3rLg}Kt4}q-pycl`#vXMjhNW`3ycj2b xSIx7n81gVZB7`n98jWSwb>G^y9l7dS`UTO)YSlf2AbJ1*002ovPDHLkV1iJ1o{0be literal 68 zcmeAS@N?(olHy`uVBq!ia0vp^j3CUx0wlM}@Gt=>Zci7-kcv6Uzs@r-FtIZ-&5|)J Q1PU{Fy85}Sb4q9e0B4a5jsO4v diff --git a/sigap-mobile/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImageDark.png b/sigap-mobile/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImageDark.png new file mode 100644 index 0000000000000000000000000000000000000000..970899fe7eb84985e66285cc983651e686305b81 GIT binary patch literal 412 zcmV;N0b~A&P)oTEp`zUX+cRX)i=HO_rIc;o z_aA~FSj8A`VT_MbsnqO%5<*B7LOeT;llMIDw$*BVx~_Z8Ilm)>>;b@g4`7THFvczb zOaZ_&rL=0AW))-X)a!LArF^q(dq15{kM@9Kv3SZDyWyN4XquJ>fU!&_vstUv);Z@p zwryW@bIoS+<3~wK`Ks&suBxiXp68KlHoHVA^(duRaqTZIeu;ui5!K270000P000>X1^@s6#OZ}&0006KNklN>jOjbJin@{KfU)K`@lv>z7vsC-uo|= zAkMjSB%g`Mc~!mH2TOq~$MfRdc;&P?6wIuSEN@_h>E=Yv9iiAYmKj+V?^BsmV?zO{CFV2JnrhpL_= zc`vR=M1~7ShXIU<$l#EuXs)&Pi7{qXRiCB+7pfEj;JEj`47QbJ*>&gKbCPdFWb`1A z`BtknMsm7iVlR2`H`_Prbe`uo06Z3vMrBCSILS`{-u5dhYwfBrW{u^?}rHQs*7XU1goCzWPt_11GTDxY9 zStmIMV7kPwrmAif0ZJkA&%_7Dn3dF;le->or%Uj%4A2*{3l>eh;+$Jb{l5tyu4lW- Z`9BER1-313Y104z002ovPDHLkV1h>93nBmj literal 0 HcmV?d00001 diff --git a/sigap-mobile/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImageDark@3x.png b/sigap-mobile/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImageDark@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..fee2fa1b5b1c2390c983602c5823efd8744c2594 GIT binary patch literal 754 zcmV0jbITGNt%#| zf;)v^r}lzd_yH`_UFVt^jl1k-W_FTI;eiLcF!T1e_ssqCW(+mT%$7yu*|7VJ)r0d# z(`L2?Kt*J;>LztVxh4R#%x7$vu**MJ+7^ z6=S?i@+!%Xs`|bH*tyKo0}16a$xE>-|Ks_`Nh^@TFC-w!N+FeFH6^+3fK zCrRD~&@B4TP87<_K8zwV-Rh3i$boQ5C84zbLlxC&L(Rk(Kdb83K^L7i)GWzB@{x#W zzl%m;pSK*E*#gNqRsC`npmKSmen;|U8ohSA-F}-S$-$_hT;~C-kX%V2H$`Nzb|{kf zNOrO!JX!Mg1v7ggBJEnCRP~#xuHvv|t$P%z>~muFiO8y%dFsb(L>@g94#76lsbeRE za5IFkRMgT^P(FRCYN=C-9~xA31Hgut0RZb+S*QofXDl8f0k| z``m)>DcqJHp;R>~bF-?p0Ze&@lDq@pN*z$Snk0R7`c>uuV15qVQPrKy(tnbnjtAW< zbIZZ1TIz)}n|gbpys~=3^n+x{`8>DOTgJmOQOgxVxE4Yf?}1X)$G*(Wq4vsd3}Bw* zd}e7wRSQSX``*CbCnEc4$-j_(W*UK872w>`?W&gceWtR_7GjLANiJpmY+!xqQf{eF z08bi?#+#v`a;fUBuk3KTU7^tiSDI!1C#OW@*f%hRv(FTNT7fd0wgZ}V7X|DlTKkz{CP k)8oZ-d98X?rW|zZ7f`J+V{?k^M*si-07*qoM6N<$f=G2{Y5)KL literal 0 HcmV?d00001 diff --git a/sigap-mobile/ios/Runner/Base.lproj/LaunchScreen.storyboard b/sigap-mobile/ios/Runner/Base.lproj/LaunchScreen.storyboard index f2e259c..7c020dc 100644 --- a/sigap-mobile/ios/Runner/Base.lproj/LaunchScreen.storyboard +++ b/sigap-mobile/ios/Runner/Base.lproj/LaunchScreen.storyboard @@ -16,13 +16,22 @@ - - + + + - - + + + + + + + + + + @@ -32,6 +41,8 @@ - + + + diff --git a/sigap-mobile/ios/Runner/Info.plist b/sigap-mobile/ios/Runner/Info.plist index 5f19451..117733b 100644 --- a/sigap-mobile/ios/Runner/Info.plist +++ b/sigap-mobile/ios/Runner/Info.plist @@ -1,64 +1,75 @@ - - CFBundleDevelopmentRegion - $(DEVELOPMENT_LANGUAGE) - CFBundleDisplayName - Sigap - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - sigap - CFBundlePackageType - APPL - CFBundleShortVersionString - $(FLUTTER_BUILD_NAME) - CFBundleSignature - ???? - CFBundleVersion - $(FLUTTER_BUILD_NUMBER) - LSRequiresIPhoneOS - - UILaunchStoryboardName - LaunchScreen - UIMainStoryboardFile - Main - UISupportedInterfaceOrientations - - UIInterfaceOrientationPortrait - UIInterfaceOrientationLandscapeLeft - UIInterfaceOrientationLandscapeRight - - UISupportedInterfaceOrientations~ipad - - UIInterfaceOrientationPortrait - UIInterfaceOrientationPortraitUpsideDown - UIInterfaceOrientationLandscapeLeft - UIInterfaceOrientationLandscapeRight - - CADisableMinimumFrameDurationOnPhone - - UIApplicationSupportsIndirectInputEvents - - - CFBundleURLTypes - - - CFBundleTypeRole - Editor - CFBundleURLSchemes - - io.supabase.flutterquickstart - - - - - NSLocationWhenInUseUsageDescription - This app needs access to location when open. - - \ No newline at end of file + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleDisplayName + Sigap + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + sigap + CFBundlePackageType + APPL + CFBundleShortVersionString + $(FLUTTER_BUILD_NAME) + CFBundleSignature + ???? + CFBundleVersion + $(FLUTTER_BUILD_NUMBER) + LSRequiresIPhoneOS + + UILaunchStoryboardName + LaunchScreen + UIMainStoryboardFile + Main + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UISupportedInterfaceOrientations~ipad + + UIInterfaceOrientationPortrait + UIInterfaceOrientationPortraitUpsideDown + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + CADisableMinimumFrameDurationOnPhone + + UIApplicationSupportsIndirectInputEvents + + + CFBundleURLTypes + + + CFBundleTypeRole + Editor + CFBundleURLSchemes + + io.supabase.flutterquickstart + + + + + + + NSLocationWhenInUseUsageDescription + Aplikasi ini memerlukan akses lokasi untuk menunjukkan posisi Anda pada peta + NSLocationAlwaysUsageDescription + Aplikasi ini memerlukan akses lokasi untuk navigasi latar belakang + io.flutter.embedded_views_preview + + MGLMapboxAccessToken + $(MAPBOX_ACCESS_TOKEN) + UIStatusBarHidden + + + diff --git a/sigap-mobile/lib/app.dart b/sigap-mobile/lib/app.dart index da2be11..d7f92f5 100644 --- a/sigap-mobile/lib/app.dart +++ b/sigap-mobile/lib/app.dart @@ -1,9 +1,9 @@ import 'package:flutter/material.dart'; import 'package:flutter_localizations/flutter_localizations.dart'; -import 'package:get/get_navigation/src/root/get_material_app.dart'; +import 'package:get/get.dart'; +import 'package:sigap/splash_screen.dart'; import 'package:sigap/src/cores/bindings/app_bindings.dart'; import 'package:sigap/src/cores/routes/app_pages.dart'; -import 'package:sigap/src/utils/constants/colors.dart'; import 'package:sigap/src/utils/constants/text_strings.dart'; import 'package:sigap/src/utils/theme/theme.dart'; @@ -12,6 +12,7 @@ class App extends StatelessWidget { @override Widget build(BuildContext context) { + return GetMaterialApp( title: TTexts.appName, themeMode: ThemeMode.system, @@ -22,10 +23,7 @@ class App extends StatelessWidget { localizationsDelegates: GlobalMaterialLocalizations.delegates, supportedLocales: const [Locale('id', '')], getPages: AppPages.routes, - home: const Scaffold( - backgroundColor: TColors.primary, - body: Center(child: CircularProgressIndicator(color: TColors.white)), - ), + home: const AnimatedSplashScreenWidget(), ); } } diff --git a/sigap-mobile/lib/main.dart b/sigap-mobile/lib/main.dart index 394b76c..59f6502 100644 --- a/sigap-mobile/lib/main.dart +++ b/sigap-mobile/lib/main.dart @@ -1,25 +1,25 @@ import 'package:flutter/material.dart'; import 'package:flutter_dotenv/flutter_dotenv.dart'; -import 'package:flutter_native_splash/flutter_native_splash.dart'; import 'package:get_storage/get_storage.dart'; +import 'package:mapbox_maps_flutter/mapbox_maps_flutter.dart'; import 'package:sigap/app.dart'; import 'package:supabase_flutter/supabase_flutter.dart'; Future main() async { // Ensure that the Flutter binding is initialized before calling any Flutter - final WidgetsBinding widgetBinding = - WidgetsFlutterBinding.ensureInitialized(); + // WidgetsBinding widgetsBinding = WidgetsFlutterBinding.ensureInitialized(); + // FlutterNativeSplash.preserve(widgetsBinding: widgetsBinding); + + // Load environment variables from the .env file + await dotenv.load(fileName: ".env"); // -- GetX Local Storage await GetStorage.init(); - // -- Await splash until other item load - FlutterNativeSplash.preserve(widgetsBinding: widgetBinding); - // Initialize the authentication repository with Supabase await Supabase.initialize( - url: dotenv.env['SUPABASE_URL']!, - anonKey: dotenv.env['SUPABASE_ANON_KEY']!, + url: dotenv.env['SUPABASE_URL'] ?? '', + anonKey: dotenv.env['SUPABASE_ANON_KEY'] ?? '', authOptions: const FlutterAuthClientOptions( authFlowType: AuthFlowType.pkce, // detectSessionInUri: true, @@ -29,6 +29,12 @@ Future main() async { ), storageOptions: const StorageClientOptions(retryAttempts: 10), ); + + // Initialize the Mapbox + String mapboxAccesToken = dotenv.env['MAPBOX_ACCESS_TOKEN'] ?? ''; + MapboxOptions.setAccessToken(mapboxAccesToken); + runApp(const App()); } + diff --git a/sigap-mobile/lib/splash_screen.dart b/sigap-mobile/lib/splash_screen.dart new file mode 100644 index 0000000..775c7d6 --- /dev/null +++ b/sigap-mobile/lib/splash_screen.dart @@ -0,0 +1,64 @@ +import 'package:animated_splash_screen/animated_splash_screen.dart'; +import 'package:flutter/material.dart'; +import 'package:lottie/lottie.dart'; +import 'package:sigap/src/features/onboarding/screens/onboarding/onboarding_screen.dart'; +import 'package:sigap/src/utils/constants/colors.dart'; +import 'package:sigap/src/utils/constants/image_strings.dart'; +import 'package:sigap/src/utils/helpers/helper_functions.dart'; + +class AnimatedSplashScreenWidget extends StatelessWidget { + const AnimatedSplashScreenWidget({super.key}); + + @override + Widget build(BuildContext context) { + final isDark = THelperFunctions.isDarkMode(context); + + // Try to find SplashController, but don't fail if it's not ready yet + // SplashController? splashController; + // if (Get.isRegistered()) { + // splashController = Get.find(); + // } else { + // // Register a temporary controller if the real one isn't ready + // splashController = Get.put(SplashController()); + // } + + return AnimatedSplashScreen( + splash: Center( + child: Lottie.asset( + isDark ? TImages.darkSplashApp : TImages.lightSplashApp, + ), + ), + splashIconSize: 300, + duration: 3500, + nextScreen: const OnboardingScreen(), + backgroundColor: isDark ? TColors.dark : TColors.white, + ); + } +} + +// A transition screen that shows a loading indicator +// until authentication is ready +// class _LoadingScreen extends StatelessWidget { +// const _LoadingScreen(); + +// @override +// Widget build(BuildContext context) { +// final isDark = THelperFunctions.isDarkMode(context); + +// // This will be shown after the animated splash screen +// // while we wait for initialization to complete +// return Scaffold( +// backgroundColor: isDark ? TColors.dark : TColors.white, +// body: const Center( +// child: Column( +// mainAxisAlignment: MainAxisAlignment.center, +// children: [ +// CircularProgressIndicator(), +// SizedBox(height: 24), +// Text("Menyiapkan aplikasi..."), +// ], +// ), +// ), +// ); +// } +// } diff --git a/sigap-mobile/lib/src/cores/bindings/general_bindings.dart b/sigap-mobile/lib/src/cores/bindings/general_bindings.dart index a0d1fe0..9323e93 100644 --- a/sigap-mobile/lib/src/cores/bindings/general_bindings.dart +++ b/sigap-mobile/lib/src/cores/bindings/general_bindings.dart @@ -7,6 +7,7 @@ class UtilityBindings extends Bindings { @override void dependencies() { + // Get.put(BackgroundService.instance, permanent: true); Get.put(NetworkManager()); Get.put(logger); } diff --git a/sigap-mobile/lib/src/cores/bindings/repository_bindings.dart b/sigap-mobile/lib/src/cores/bindings/repository_bindings.dart index f2efcc5..4c1eb90 100644 --- a/sigap-mobile/lib/src/cores/bindings/repository_bindings.dart +++ b/sigap-mobile/lib/src/cores/bindings/repository_bindings.dart @@ -1,5 +1,5 @@ import 'package:get/get.dart'; -import 'package:sigap/src/cores/repositories/authentication/authentication_repositories.dart'; +import 'package:sigap/src/cores/repositories/authentication/authentication_repository.dart'; import 'package:sigap/src/cores/repositories/daily-ops/officers_repository.dart'; import 'package:sigap/src/cores/repositories/daily-ops/units_repository.dart'; import 'package:sigap/src/cores/repositories/personalization/profile_repository.dart'; diff --git a/sigap-mobile/lib/src/cores/bindings/service_bindings.dart b/sigap-mobile/lib/src/cores/bindings/service_bindings.dart index fe8edbc..06b0e3d 100644 --- a/sigap-mobile/lib/src/cores/bindings/service_bindings.dart +++ b/sigap-mobile/lib/src/cores/bindings/service_bindings.dart @@ -1,4 +1,5 @@ import 'package:get/get.dart'; +import 'package:sigap/src/cores/services/background_service.dart'; import 'package:sigap/src/cores/services/biometric_service.dart'; import 'package:sigap/src/cores/services/location_service.dart'; import 'package:sigap/src/cores/services/supabase_service.dart'; @@ -6,9 +7,13 @@ import 'package:sigap/src/cores/services/supabase_service.dart'; class ServiceBindings extends Bindings { @override Future dependencies() async { + final locationService = await BackgroundService.instance + .compute((message) => LocationService(), null); + final biometricService = await BackgroundService.instance + .compute((message) => BiometricService(), null); // Initialize services await Get.putAsync(() => SupabaseService().init()); - await Get.putAsync(() => BiometricService().init()); - await Get.putAsync(() => LocationService().init()); + await Get.putAsync(() => biometricService.init(), permanent: true); + await Get.putAsync(() => locationService.init(), permanent: true); } } diff --git a/sigap-mobile/lib/src/cores/repositories/authentication/authentication_repositories.dart b/sigap-mobile/lib/src/cores/repositories/authentication/authentication_repository.dart similarity index 89% rename from sigap-mobile/lib/src/cores/repositories/authentication/authentication_repositories.dart rename to sigap-mobile/lib/src/cores/repositories/authentication/authentication_repository.dart index d5faf79..d76eb08 100644 --- a/sigap-mobile/lib/src/cores/repositories/authentication/authentication_repositories.dart +++ b/sigap-mobile/lib/src/cores/repositories/authentication/authentication_repository.dart @@ -1,5 +1,4 @@ import 'package:flutter/services.dart'; -import 'package:flutter_native_splash/flutter_native_splash.dart'; import 'package:get/get.dart'; import 'package:get_storage/get_storage.dart'; import 'package:sigap/src/cores/services/biometric_service.dart'; @@ -16,19 +15,24 @@ import 'package:supabase_flutter/supabase_flutter.dart'; class AuthenticationRepository extends GetxController { static AuthenticationRepository get instance => Get.find(); + // --------------------------------------------------------------------------- + // VARIABLES & GETTERS + // --------------------------------------------------------------------------- // Variable final storage = GetStorage(); final _supabase = SupabaseService.instance.client; final _locationService = LocationService.instance; - final _biometricService = Get.put(BiometricService()); + final _biometricService = Get.find(); // Getters that use the Supabase service User? get authUser => SupabaseService.instance.currentUser; String? get currentUserId => SupabaseService.instance.currentUserId; + // --------------------------------------------------------------------------- + // LIFECYCLE & REDIRECT + // --------------------------------------------------------------------------- @override void onReady() { - FlutterNativeSplash.remove(); screenRedirect(); } @@ -58,6 +62,7 @@ class AuthenticationRepository extends GetxController { } } + // Redirect user to appropriate screen on app start screenRedirect() async { final user = _supabase.auth.currentUser; if (user != null) { @@ -76,7 +81,10 @@ class AuthenticationRepository extends GetxController { } } - // ----------------- Email and Password Sign In ----------------- + // --------------------------------------------------------------------------- + // EMAIL & PASSWORD AUTHENTICATION + // --------------------------------------------------------------------------- + // Sign in with email and password Future signInWithEmailPassword({ required String email, required String password, @@ -119,7 +127,10 @@ class AuthenticationRepository extends GetxController { } } - // [SESSION] - CHECK SESSION + // --------------------------------------------------------------------------- + // SESSION MANAGEMENT + // --------------------------------------------------------------------------- + // Get current session Future?> getSession() async { try { final session = _supabase.auth.currentSession; @@ -134,7 +145,10 @@ class AuthenticationRepository extends GetxController { } } - // [Email Verification] - EMAIL VERIFICATION + // --------------------------------------------------------------------------- + // EMAIL VERIFICATION & PASSWORD RESET + // --------------------------------------------------------------------------- + // Send email verification Future sendEmailVerification() async { try { await _supabase.auth.resend( @@ -154,7 +168,7 @@ class AuthenticationRepository extends GetxController { } } - // [Email Reset Password ] - RESET PASSWORD + // Send reset password email Future sendResetPasswordForEmail(String email) async { try { await _supabase.auth.resetPasswordForEmail(email); @@ -171,7 +185,7 @@ class AuthenticationRepository extends GetxController { } } - // Compare OTP + // Verify OTP Future verifyOtp(String otp) async { try { final AuthResponse res = await _supabase.auth.verifyOTP( @@ -220,6 +234,7 @@ class AuthenticationRepository extends GetxController { } } + // Change password (requires reauthentication) Future changePassword( String currentPassword, String newPassword, @@ -247,7 +262,7 @@ class AuthenticationRepository extends GetxController { } } - // [Email Verification] - CREATE NEW VERIFICATION USER EMAIL + // Resend email verification Future resendEmailVerification(String email) async { try { await _supabase.auth.resend(type: OtpType.signup, email: email); @@ -264,8 +279,10 @@ class AuthenticationRepository extends GetxController { } } - // ----------------- Social Sign In ----------------- - // [GoogleAuthentication] - GOOGLE + // --------------------------------------------------------------------------- + // SOCIAL AUTHENTICATION + // --------------------------------------------------------------------------- + // Google sign in Future signInWithGoogle() async { try { return await _supabase.auth.signInWithOAuth( @@ -285,7 +302,7 @@ class AuthenticationRepository extends GetxController { } } - // [FacebookAuthentication] - FACEBOOK + // Facebook sign in Future signInWithFacebook() async { try { return await _supabase.auth.signInWithOAuth( @@ -305,7 +322,7 @@ class AuthenticationRepository extends GetxController { } } - // [AppleAuthentication] - APPLE + // Apple sign in Future signInWithApple() async { try { return await _supabase.auth.signInWithOAuth( @@ -325,7 +342,7 @@ class AuthenticationRepository extends GetxController { } } - // [GithubAuthentication] - GITHUB + // Github sign in Future signInWithGithub() async { try { return await _supabase.auth.signInWithOAuth( @@ -345,7 +362,7 @@ class AuthenticationRepository extends GetxController { } } - // [TwitterAuthentication] - TWITTER + // Twitter sign in Future signInWithTwitter() async { try { return await _supabase.auth.signInWithOAuth( @@ -365,7 +382,10 @@ class AuthenticationRepository extends GetxController { } } - // [Email AUTH] - SIGN UP with role selection and location verification + // --------------------------------------------------------------------------- + // SIGN UP & ROLE MANAGEMENT + // --------------------------------------------------------------------------- + // Sign up with credential (email, password, NIK/NRP, etc) Future signUpWithCredential( String email, String password, @@ -492,63 +512,7 @@ class AuthenticationRepository extends GetxController { } } - // Enable or disable biometric login - Future toggleBiometricLogin(bool enable) async { - if (enable) { - await _biometricService.enableBiometricLogin(); - } else { - await _biometricService.disableBiometricLogin(); - } - } - - // Check if biometric login is enabled - Future isBiometricLoginEnabled() async { - return await _biometricService.isBiometricLoginEnabled(); - } - - // Check if biometrics are available on the device - Future isBiometricAvailable() async { - return _biometricService.isBiometricAvailable.value; - } - - // ----------------- Logout ----------------- - // [Sign Out] - SIGN OUT - Future signOut() async { - try { - await _supabase.auth.signOut(); - Get.offAll(() => const SignInScreen()); - } on AuthException catch (e) { - throw TExceptions(e.message); - } on FormatException catch (_) { - throw const TFormatException(); - } on PlatformException catch (e) { - throw TPlatformException(e.code).message; - } on PostgrestException catch (error) { - throw TExceptions.fromCode(error.code ?? 'unknown_error'); - } catch (e) { - throw TExceptions('Something went wrong. Please try again later.'); - } - } - - // ----------------- Delete Account ----------------- - Future deleteAccount() async { - try { - final userId = _supabase.auth.currentUser!.id; - await _supabase.rpc('delete_account', params: {'user_id': userId}); - } on AuthException catch (e) { - throw TExceptions(e.message); - } on FormatException catch (_) { - throw const TFormatException(); - } on PlatformException catch (e) { - throw TPlatformException(e.code).message; - } on PostgrestException catch (error) { - throw TExceptions.fromCode(error.code ?? 'unknown_error'); - } catch (e) { - throw TExceptions('Something went wrong. Please try again later.'); - } - } - - /// Updates a user's profile with the officer status and metadata + // Update user role (officer/user) and metadata Future updateUserRole({ required bool isOfficer, Map? officerData, @@ -579,4 +543,65 @@ class AuthenticationRepository extends GetxController { throw TExceptions('Something went wrong. Please try again later.'); } } + + // --------------------------------------------------------------------------- + // BIOMETRIC AUTHENTICATION + // --------------------------------------------------------------------------- + // Enable or disable biometric login + Future toggleBiometricLogin(bool enable) async { + if (enable) { + await _biometricService.enableBiometricLogin(); + } else { + await _biometricService.disableBiometricLogin(); + } + } + + // Check if biometric login is enabled + Future isBiometricLoginEnabled() async { + return await _biometricService.isBiometricLoginEnabled(); + } + + // Check if biometrics are available on the device + Future isBiometricAvailable() async { + return _biometricService.isBiometricAvailable.value; + } + + // --------------------------------------------------------------------------- + // LOGOUT & ACCOUNT DELETION + // --------------------------------------------------------------------------- + // Sign out + Future signOut() async { + try { + await _supabase.auth.signOut(); + Get.offAll(() => const SignInScreen()); + } on AuthException catch (e) { + throw TExceptions(e.message); + } on FormatException catch (_) { + throw const TFormatException(); + } on PlatformException catch (e) { + throw TPlatformException(e.code).message; + } on PostgrestException catch (error) { + throw TExceptions.fromCode(error.code ?? 'unknown_error'); + } catch (e) { + throw TExceptions('Something went wrong. Please try again later.'); + } + } + + // Delete account + Future deleteAccount() async { + try { + final userId = _supabase.auth.currentUser!.id; + await _supabase.rpc('delete_account', params: {'user_id': userId}); + } on AuthException catch (e) { + throw TExceptions(e.message); + } on FormatException catch (_) { + throw const TFormatException(); + } on PlatformException catch (e) { + throw TPlatformException(e.code).message; + } on PostgrestException catch (error) { + throw TExceptions.fromCode(error.code ?? 'unknown_error'); + } catch (e) { + throw TExceptions('Something went wrong. Please try again later.'); + } + } } diff --git a/sigap-mobile/lib/src/cores/repositories/daily-ops/officers_repository.dart b/sigap-mobile/lib/src/cores/repositories/daily-ops/officers_repository.dart index 88c48f5..c8e6784 100644 --- a/sigap-mobile/lib/src/cores/repositories/daily-ops/officers_repository.dart +++ b/sigap-mobile/lib/src/cores/repositories/daily-ops/officers_repository.dart @@ -1,6 +1,6 @@ import 'package:flutter/services.dart'; import 'package:get/get.dart'; -import 'package:sigap/src/cores/repositories/authentication/authentication_repositories.dart'; +import 'package:sigap/src/cores/repositories/authentication/authentication_repository.dart'; import 'package:sigap/src/features/daily-ops/models/models/officers_model.dart'; import 'package:sigap/src/utils/exceptions/exceptions.dart'; import 'package:sigap/src/utils/exceptions/format_exceptions.dart'; diff --git a/sigap-mobile/lib/src/cores/repositories/daily-ops/units_repository.dart b/sigap-mobile/lib/src/cores/repositories/daily-ops/units_repository.dart index 0f66e13..779cf4e 100644 --- a/sigap-mobile/lib/src/cores/repositories/daily-ops/units_repository.dart +++ b/sigap-mobile/lib/src/cores/repositories/daily-ops/units_repository.dart @@ -1,8 +1,6 @@ import 'package:get/get.dart'; import 'package:sigap/src/cores/services/supabase_service.dart'; import 'package:sigap/src/features/daily-ops/models/models/units_model.dart'; -import 'package:sigap/src/features/daily-ops/models/models/patrol_units_model.dart'; -import 'package:sigap/src/features/daily-ops/models/models/unit_statistics_model.dart'; import 'package:sigap/src/utils/exceptions/exceptions.dart'; import 'package:supabase_flutter/supabase_flutter.dart'; diff --git a/sigap-mobile/lib/src/cores/repositories/map/cities_repository.dart b/sigap-mobile/lib/src/cores/repositories/map/cities_repository.dart index af53fc5..904223d 100644 --- a/sigap-mobile/lib/src/cores/repositories/map/cities_repository.dart +++ b/sigap-mobile/lib/src/cores/repositories/map/cities_repository.dart @@ -25,7 +25,7 @@ class CitiesRepository extends GetxController { .select('*, districts(*), units(*)') .order('name'); - final data = response.data as List; + final data = response as List; final cities = data.map((json) => CityModel.fromJson(json)).toList(); // Update cache @@ -55,7 +55,7 @@ class CitiesRepository extends GetxController { .eq('id', cityId) .single(); - return CityModel.fromJson(response.data); + return CityModel.fromJson(response); } catch (e) { _log.e('Error fetching city $cityId: $e'); throw Exception('Failed to load city details: $e'); @@ -72,7 +72,7 @@ class CitiesRepository extends GetxController { .eq('name', 'Jember') .single(); - return CityModel.fromJson(response.data); + return CityModel.fromJson(response); } catch (e) { _log.e('Error fetching default city: $e'); throw Exception('Failed to load default city: $e'); diff --git a/sigap-mobile/lib/src/cores/repositories/map/demographics_repository.dart b/sigap-mobile/lib/src/cores/repositories/map/demographics_repository.dart index 214cf29..7c1d187 100644 --- a/sigap-mobile/lib/src/cores/repositories/map/demographics_repository.dart +++ b/sigap-mobile/lib/src/cores/repositories/map/demographics_repository.dart @@ -36,7 +36,7 @@ class DemographicsRepository extends GetxController { .select('*, districts(*)') .eq('year', year); - final data = response.data as List; + final data = response as List; return data.map((json) => DemographicModel.fromJson(json)).toList(); } catch (e) { _log.e('Error fetching demographic data for year $year: $e'); @@ -109,7 +109,7 @@ class DemographicsRepository extends GetxController { .select('*, districts(*)') .single(); - return DemographicModel.fromJson(response.data); + return DemographicModel.fromJson(response); } catch (e) { _log.e('Error saving demographic data: $e'); throw Exception('Failed to save demographic data: $e'); @@ -129,7 +129,7 @@ class DemographicsRepository extends GetxController { .order('population_density', ascending: false) .limit(limit); - final data = response.data as List; + final data = response as List; return data.map((json) => DemographicModel.fromJson(json)).toList(); } catch (e) { _log.e('Error fetching highest population density districts: $e'); @@ -149,7 +149,7 @@ class DemographicsRepository extends GetxController { params: {'selected_year': year, 'limit_count': limit}, ); - final data = response.data as List; + final data = response as List; return data.map((json) => DemographicModel.fromJson(json)).toList(); } catch (e) { _log.e('Error fetching highest unemployment districts: $e'); diff --git a/sigap-mobile/lib/src/cores/repositories/map/districts_repository.dart b/sigap-mobile/lib/src/cores/repositories/map/districts_repository.dart index 0fbbd06..add153f 100644 --- a/sigap-mobile/lib/src/cores/repositories/map/districts_repository.dart +++ b/sigap-mobile/lib/src/cores/repositories/map/districts_repository.dart @@ -27,7 +27,7 @@ class DistrictsRepository extends GetxController { .eq('city_id', cityId) .order('name'); - final data = response.data as List; + final data = response as List; final districts = data.map((json) => DistrictModel.fromJson(json)).toList(); @@ -62,7 +62,7 @@ class DistrictsRepository extends GetxController { .eq('id', districtId) .single(); - return DistrictModel.fromJson(response.data); + return DistrictModel.fromJson(response); } catch (e) { _log.e('Error fetching district $districtId: $e'); throw Exception('Failed to load district details: $e'); @@ -87,7 +87,7 @@ class DistrictsRepository extends GetxController { } final response = await request; - final data = response.data as List; + final data = response as List; return data.map((json) => DistrictModel.fromJson(json)).toList(); } catch (e) { diff --git a/sigap-mobile/lib/src/cores/repositories/map/geogrpaphics_repository.dart b/sigap-mobile/lib/src/cores/repositories/map/geogrpaphics_repository.dart index 8a1ea6b..dfbdbf3 100644 --- a/sigap-mobile/lib/src/cores/repositories/map/geogrpaphics_repository.dart +++ b/sigap-mobile/lib/src/cores/repositories/map/geogrpaphics_repository.dart @@ -19,7 +19,7 @@ class GeographicsRepository extends GetxController { .select('*, districts(*)') .eq('district_id', districtId); - final data = response.data as List; + final data = response as List; return data.map((json) => GeographicModel.fromJson(json)).toList(); } catch (e) { _log.e('Error fetching geographic data for district $districtId: $e'); @@ -37,7 +37,7 @@ class GeographicsRepository extends GetxController { .eq('id', geographicId) .single(); - return GeographicModel.fromJson(response.data); + return GeographicModel.fromJson(response); } catch (e) { _log.e('Error fetching geographic data $geographicId: $e'); throw Exception('Failed to load geographic details: $e'); @@ -52,7 +52,7 @@ class GeographicsRepository extends GetxController { .select('*, districts(*)') .eq('type', type); - final data = response.data as List; + final data = response as List; return data.map((json) => GeographicModel.fromJson(json)).toList(); } catch (e) { _log.e('Error fetching geographic data of type $type: $e'); @@ -68,7 +68,7 @@ class GeographicsRepository extends GetxController { .select('*, districts(*)') .eq('year', year); - final data = response.data as List; + final data = response as List; return data.map((json) => GeographicModel.fromJson(json)).toList(); } catch (e) { _log.e('Error fetching geographic data for year $year: $e'); @@ -108,7 +108,7 @@ class GeographicsRepository extends GetxController { .select('*, districts(*)') .single(); - return GeographicModel.fromJson(response.data); + return GeographicModel.fromJson(response); } catch (e) { _log.e('Error saving geographic data: $e'); throw Exception('Failed to save geographic data: $e'); diff --git a/sigap-mobile/lib/src/cores/repositories/map/location_logs_repository.dart b/sigap-mobile/lib/src/cores/repositories/map/location_logs_repository.dart index 078bc4d..7e1b930 100644 --- a/sigap-mobile/lib/src/cores/repositories/map/location_logs_repository.dart +++ b/sigap-mobile/lib/src/cores/repositories/map/location_logs_repository.dart @@ -22,7 +22,7 @@ class LocationLogsRepository extends GetxController { .order('timestamp', ascending: false) .limit(limit); - final data = response.data as List; + final data = response as List; return data.map((json) => LocationLogModel.fromJson(json)).toList(); } catch (e) { _log.e('Error fetching location logs for user $userId: $e'); @@ -53,7 +53,7 @@ class LocationLogsRepository extends GetxController { .select('*, users(*)') .single(); - return LocationLogModel.fromJson(response.data); + return LocationLogModel.fromJson(response); } catch (e) { _log.e('Error adding location log: $e'); throw Exception('Failed to add location log: $e'); @@ -71,7 +71,7 @@ class LocationLogsRepository extends GetxController { .order('timestamp', ascending: false) .limit(limit); - final data = response.data as List; + final data = response as List; return data.map((json) => LocationLogModel.fromJson(json)).toList(); } catch (e) { _log.e('Error fetching recent location logs: $e'); @@ -92,7 +92,7 @@ class LocationLogsRepository extends GetxController { .lte('timestamp', end.toIso8601String()) .order('timestamp', ascending: true); - final data = response.data as List; + final data = response as List; return data.map((json) => LocationLogModel.fromJson(json)).toList(); } catch (e) { _log.e('Error fetching location logs in range: $e'); diff --git a/sigap-mobile/lib/src/cores/repositories/map/locations_repository.dart b/sigap-mobile/lib/src/cores/repositories/map/locations_repository.dart index c0a60bd..ecaeba0 100644 --- a/sigap-mobile/lib/src/cores/repositories/map/locations_repository.dart +++ b/sigap-mobile/lib/src/cores/repositories/map/locations_repository.dart @@ -21,7 +21,7 @@ class LocationsRepository extends GetxController { ) .eq('district_id', districtId); - final data = response.data as List; + final data = response as List; return data.map((json) => LocationModel.fromJson(json)).toList(); } catch (e) { _log.e('Error fetching locations for district $districtId: $e'); @@ -41,7 +41,7 @@ class LocationsRepository extends GetxController { .eq('id', locationId) .single(); - return LocationModel.fromJson(response.data); + return LocationModel.fromJson(response); } catch (e) { _log.e('Error fetching location $locationId: $e'); throw Exception('Failed to load location details: $e'); @@ -65,7 +65,7 @@ class LocationsRepository extends GetxController { }, ); - final data = response.data as List; + final data = response as List; return data.map((json) => LocationModel.fromJson(json)).toList(); } catch (e) { _log.e('Error fetching nearby locations: $e'); @@ -99,7 +99,7 @@ class LocationsRepository extends GetxController { .select('*, event(*)') .single(); - return LocationModel.fromJson(response.data); + return LocationModel.fromJson(response); } catch (e) { _log.e('Error adding location: $e'); throw Exception('Failed to add location: $e'); diff --git a/sigap-mobile/lib/src/cores/services/background_service.dart b/sigap-mobile/lib/src/cores/services/background_service.dart new file mode 100644 index 0000000..46ffbf4 --- /dev/null +++ b/sigap-mobile/lib/src/cores/services/background_service.dart @@ -0,0 +1,62 @@ +import 'dart:async'; +import 'dart:isolate'; + +import 'package:flutter/foundation.dart'; +import 'package:flutter/foundation.dart' as flutter; + +class BackgroundService { + static final BackgroundService _instance = BackgroundService._internal(); + factory BackgroundService() => _instance; + BackgroundService._internal(); + + static BackgroundService get instance => _instance; + + /// Run a heavy computation in the background using compute + /// This is useful for JSON parsing, data processing, etc. + Future compute(ComputeCallback callback, U message) async { + return await flutter.compute(callback, message); + } + + /// Run a task in an isolate with message passing capability + Future runTaskInIsolate(Future Function() task) async { + final completer = Completer(); + + final receivePort = ReceivePort(); + final isolate = await Isolate.spawn( + _isolateEntry, + _IsolateData(receivePort.sendPort, task), + ); + + receivePort.listen((message) { + if (message is T) { + completer.complete(message); + receivePort.close(); + isolate.kill(); + } else if (message is Error) { + completer.completeError(message); + receivePort.close(); + isolate.kill(); + } + }); + + return completer.future; + } +} + +// Helper function to run code in isolate +void _isolateEntry(_IsolateData data) async { + try { + final result = await data.task(); + data.sendPort.send(result); + } catch (e) { + data.sendPort.send(Error()); + } +} + +// Data class for isolate communication +class _IsolateData { + final SendPort sendPort; + final Future Function() task; + + _IsolateData(this.sendPort, this.task); +} diff --git a/sigap-mobile/lib/src/features/auth/controllers/email_verification_controller.dart b/sigap-mobile/lib/src/features/auth/controllers/email_verification_controller.dart index 24ce664..7fb5e17 100644 --- a/sigap-mobile/lib/src/features/auth/controllers/email_verification_controller.dart +++ b/sigap-mobile/lib/src/features/auth/controllers/email_verification_controller.dart @@ -2,7 +2,7 @@ import 'dart:async'; import 'package:flutter/material.dart'; import 'package:get/get.dart'; -import 'package:sigap/src/cores/repositories/authentication/authentication_repositories.dart'; +import 'package:sigap/src/cores/repositories/authentication/authentication_repository.dart'; import 'package:sigap/src/utils/constants/app_routes.dart'; import 'package:sigap/src/utils/popups/loaders.dart'; diff --git a/sigap-mobile/lib/src/features/auth/controllers/forgot_password_controller.dart b/sigap-mobile/lib/src/features/auth/controllers/forgot_password_controller.dart index a38ab35..3751d25 100644 --- a/sigap-mobile/lib/src/features/auth/controllers/forgot_password_controller.dart +++ b/sigap-mobile/lib/src/features/auth/controllers/forgot_password_controller.dart @@ -1,6 +1,6 @@ import 'package:flutter/material.dart'; import 'package:get/get.dart'; -import 'package:sigap/src/cores/repositories/auth/auth_repositories.dart'; +import 'package:sigap/src/cores/repositories/authentication/authentication_repository.dart'; import 'package:sigap/src/utils/popups/loaders.dart'; import 'package:sigap/src/utils/validators/validation.dart'; diff --git a/sigap-mobile/lib/src/features/auth/controllers/signin_controller.dart b/sigap-mobile/lib/src/features/auth/controllers/signin_controller.dart index e1892ef..e28e65f 100644 --- a/sigap-mobile/lib/src/features/auth/controllers/signin_controller.dart +++ b/sigap-mobile/lib/src/features/auth/controllers/signin_controller.dart @@ -1,7 +1,7 @@ import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'package:get_storage/get_storage.dart'; -import 'package:sigap/src/cores/repositories/authentication/authentication_repositories.dart'; +import 'package:sigap/src/cores/repositories/authentication/authentication_repository.dart'; import 'package:sigap/src/utils/constants/app_routes.dart'; import 'package:sigap/src/utils/helpers/network_manager.dart'; import 'package:sigap/src/utils/popups/loaders.dart'; diff --git a/sigap-mobile/lib/src/features/auth/controllers/signup_controller.dart b/sigap-mobile/lib/src/features/auth/controllers/signup_controller.dart index 74d6a30..475f2dd 100644 --- a/sigap-mobile/lib/src/features/auth/controllers/signup_controller.dart +++ b/sigap-mobile/lib/src/features/auth/controllers/signup_controller.dart @@ -2,7 +2,7 @@ import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'package:get_storage/get_storage.dart'; import 'package:logger/logger.dart'; -import 'package:sigap/src/cores/repositories/auth/auth_repositories.dart'; +import 'package:sigap/src/cores/repositories/authentication/authentication_repository.dart'; import 'package:sigap/src/features/auth/models/user_metadata_model.dart'; import 'package:sigap/src/utils/constants/app_routes.dart'; import 'package:sigap/src/utils/helpers/network_manager.dart'; @@ -141,10 +141,10 @@ class SignUpController extends GetxController { // Register user with Supabase Auth Logger().i('Registering user with Supabase Auth'); final authResponse = await AuthenticationRepository.instance - .signUpWithEmailPassword( - email: emailController.text.trim(), - password: passwordController.text.trim(), - userMetadata: updatedMetadata.toJson(), + .signUpWithCredential( + emailController.text.trim(), + passwordController.text.trim(), + updatedMetadata.toJson().toString(), // Pass user metadata as a JSON string ); // Store email for verification or next steps diff --git a/sigap-mobile/lib/src/features/onboarding/bindings/onboarding_binding.dart b/sigap-mobile/lib/src/features/onboarding/bindings/onboarding_binding.dart index c44cb2e..cbffcae 100644 --- a/sigap-mobile/lib/src/features/onboarding/bindings/onboarding_binding.dart +++ b/sigap-mobile/lib/src/features/onboarding/bindings/onboarding_binding.dart @@ -1,6 +1,7 @@ import 'package:get/get.dart'; import 'package:sigap/src/features/onboarding/controllers/onboarding_controller.dart'; import 'package:sigap/src/features/onboarding/controllers/role_selection_controller.dart'; +import 'package:sigap/src/features/onboarding/controllers/splash_controller.dart'; class OnboardingBindings extends Bindings { @override @@ -8,5 +9,6 @@ class OnboardingBindings extends Bindings { // Register all feature onboarding controllers Get.lazyPut(() => OnboardingController()); Get.lazyPut(() => RoleSelectionController()); + Get.lazyPut(() => SplashController()); } } diff --git a/sigap-mobile/lib/src/features/onboarding/controllers/splash_controller.dart b/sigap-mobile/lib/src/features/onboarding/controllers/splash_controller.dart new file mode 100644 index 0000000..434e595 --- /dev/null +++ b/sigap-mobile/lib/src/features/onboarding/controllers/splash_controller.dart @@ -0,0 +1,25 @@ +import 'package:get/get.dart'; +import 'package:sigap/src/cores/repositories/authentication/authentication_repository.dart'; + +class SplashController extends GetxController { + final authRepository = Get.find(); + + // Variable to track if authentication is ready + final RxBool isAuthReady = false.obs; + + @override + void onInit() { + super.onInit(); + // Wait for 3 seconds (matching AnimatedSplashScreen's duration) + // before handling authentication + Future.delayed(const Duration(seconds: 3), () { + isAuthReady.value = true; + handleAuthentication(); + }); + } + + void handleAuthentication() { + // Let the AuthenticationRepository handle the screen redirection + authRepository.screenRedirect(); + } +} diff --git a/sigap-mobile/lib/src/features/onboarding/datas/onboarding_data.dart b/sigap-mobile/lib/src/features/onboarding/datas/onboarding_data.dart index ea3b165..ce880eb 100644 --- a/sigap-mobile/lib/src/features/onboarding/datas/onboarding_data.dart +++ b/sigap-mobile/lib/src/features/onboarding/datas/onboarding_data.dart @@ -5,18 +5,18 @@ final List contents = [ title: 'Crime Mapping & Analysis', description: 'Visualize crime levels across Jember Regency with advanced K-means clustering based on population density, unemployment, and crime incidents.', - image: 'assets/images/onboarding1.png', + image: 'assets/images/content/looking-at-the-map.svg', ), OnboardingContent( title: 'Emergency Panic Button', description: 'One-click emergency alert with automatic geolocation transmission to connect directly with police dispatch in critical situations.', - image: 'assets/images/onboarding2.png', + image: 'assets/images/content/searching-location-on-the-phone.svg', ), OnboardingContent( title: 'Data-Driven Insights', description: 'Track crime trends from 2020 to 2024 with interactive maps and comprehensive reports for better decision making.', - image: 'assets/images/onboarding3.png', + image: 'assets/images/content/paper-plane.svg', ), ]; diff --git a/sigap-mobile/lib/src/features/onboarding/screens/onboarding/onboarding_screen.dart b/sigap-mobile/lib/src/features/onboarding/screens/onboarding/onboarding_screen.dart index 5d4a62f..ce837e6 100644 --- a/sigap-mobile/lib/src/features/onboarding/screens/onboarding/onboarding_screen.dart +++ b/sigap-mobile/lib/src/features/onboarding/screens/onboarding/onboarding_screen.dart @@ -1,8 +1,10 @@ import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; +import 'package:flutter_svg/svg.dart'; import 'package:get/get.dart'; import 'package:sigap/src/features/onboarding/datas/onboarding_data.dart'; import 'package:sigap/src/utils/constants/colors.dart'; +import 'package:sigap/src/utils/helpers/helper_functions.dart'; import '../../controllers/onboarding_controller.dart'; @@ -14,6 +16,8 @@ class OnboardingScreen extends StatelessWidget { // Get the controller final controller = Get.find(); + bool isDark = THelperFunctions.isDarkMode(context); + // Set system overlay style SystemChrome.setSystemUIOverlayStyle( const SystemUiOverlayStyle( @@ -27,7 +31,7 @@ class OnboardingScreen extends StatelessWidget { final isSmallScreen = size.height < 700; return Scaffold( - backgroundColor: TColors.light, + backgroundColor: isDark ? TColors.dark : TColors.light, body: SafeArea( child: Column( children: [ @@ -69,9 +73,10 @@ class OnboardingScreen extends StatelessWidget { opacity: controller.fadeAnimation, child: SlideTransition( position: controller.slideAnimation, - child: Image.asset( + child: SvgPicture.asset( contents[i].image, fit: BoxFit.contain, + height: isSmallScreen ? 200 : 300, ), ), ), @@ -146,32 +151,23 @@ class OnboardingScreen extends StatelessWidget { horizontal: 24.0, vertical: 16.0, ), - child: SizedBox( - width: double.infinity, - height: 56, - child: Obx( - () => ElevatedButton( + child: Align( + alignment: Alignment.centerRight, + child: Container( + margin: const EdgeInsets.only(right: 8.0), + child: FloatingActionButton( onPressed: controller.nextPage, - style: ElevatedButton.styleFrom( backgroundColor: TColors.primary, - foregroundColor: TColors.white, - shape: RoundedRectangleBorder( - borderRadius: BorderRadius.circular(16), - ), - elevation: 0, - ), - child: Text( - controller.currentIndex.value == contents.length - 1 - ? 'Get Started' - : 'Next', - style: const TextStyle( - fontSize: 16, - fontWeight: FontWeight.bold, + elevation: 2, + child: const Icon( + Icons.chevron_right, + color: Colors.white, + size: 30, ), ), ), ), - ), + ), ], ), diff --git a/sigap-mobile/lib/src/utils/constants/image_strings.dart b/sigap-mobile/lib/src/utils/constants/image_strings.dart index bc7eba9..5c2c1e9 100644 --- a/sigap-mobile/lib/src/utils/constants/image_strings.dart +++ b/sigap-mobile/lib/src/utils/constants/image_strings.dart @@ -2,11 +2,16 @@ /// This class contains all the App Images in String formats. class TImages { - // -- App Logos - static const String darkAppLogo = - "assets/logos/t-store-splash-logo-black.png"; - static const String lightAppLogo = - "assets/logos/t-store-splash-logo-white.png"; + // -- App splash Logos + static const String darkSplashApp = + "assets/images/animations/splash-dark.json"; + static const String lightSplashApp = + "assets/images/animations/splash-light.json"; + static const darkAppBgLogo = "assets/logos/logo-bg-dark.svg"; + static const lightAppBgLogo = "assets/logos/logo-bg-dark.svg"; + static const String darkAppLogo = "assets/logos/logo-dark.svg"; + static const String lightAppLogo = "assets/logos/logo-light.svg"; + static const String darkAppLogo2 = "assets/logos/logo.svg"; // -- Social Logos static const String google = "assets/logos/google-icon.png"; @@ -110,6 +115,7 @@ class TImages { static const String comingSoon = "assets/images/animations/coming-soon1.json"; static const String comingSoon2 = "assets/images/animations/coming-soon2.json"; + static const String loader = "assets/images/animations/loader.json"; // static const String characterExplore2 = // "assets/images/animations/char_explore2.json"; } diff --git a/sigap-mobile/macos/Flutter/GeneratedPluginRegistrant.swift b/sigap-mobile/macos/Flutter/GeneratedPluginRegistrant.swift index ba93e15..e624e6e 100644 --- a/sigap-mobile/macos/Flutter/GeneratedPluginRegistrant.swift +++ b/sigap-mobile/macos/Flutter/GeneratedPluginRegistrant.swift @@ -14,6 +14,7 @@ import flutter_secure_storage_macos import geolocator_apple import google_sign_in_ios import local_auth_darwin +import location import path_provider_foundation import shared_preferences_foundation import url_launcher_macos @@ -28,6 +29,7 @@ func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) { GeolocatorPlugin.register(with: registry.registrar(forPlugin: "GeolocatorPlugin")) FLTGoogleSignInPlugin.register(with: registry.registrar(forPlugin: "FLTGoogleSignInPlugin")) FLALocalAuthPlugin.register(with: registry.registrar(forPlugin: "FLALocalAuthPlugin")) + LocationPlugin.register(with: registry.registrar(forPlugin: "LocationPlugin")) PathProviderPlugin.register(with: registry.registrar(forPlugin: "PathProviderPlugin")) SharedPreferencesPlugin.register(with: registry.registrar(forPlugin: "SharedPreferencesPlugin")) UrlLauncherPlugin.register(with: registry.registrar(forPlugin: "UrlLauncherPlugin")) diff --git a/sigap-mobile/pubspec.lock b/sigap-mobile/pubspec.lock index 95b1a2e..6560cd7 100644 --- a/sigap-mobile/pubspec.lock +++ b/sigap-mobile/pubspec.lock @@ -1,6 +1,22 @@ # Generated by pub # See https://dart.dev/tools/pub/glossary#lockfile packages: + animated_splash_screen: + dependency: "direct main" + description: + name: animated_splash_screen + sha256: f45634db6ec4e8cf034c53e03f3bd83898a16fe3c9286bf5510b6831dfcf2124 + url: "https://pub.dev" + source: hosted + version: "1.3.0" + ansicolor: + dependency: transitive + description: + name: ansicolor + sha256: "50e982d500bc863e1d703448afdbf9e5a72eb48840a4f766fa361ffd6877055f" + url: "https://pub.dev" + source: hosted + version: "2.0.3" app_links: dependency: transitive description: @@ -37,10 +53,10 @@ packages: dependency: transitive description: name: archive - sha256: cb6a278ef2dbb298455e1a713bda08524a175630ec643a242c399c932a0a1f7d + sha256: "2fde1607386ab523f7a36bb3e7edb43bd58e6edaf2ffb29d8a6d578b297fdbbd" url: "https://pub.dev" source: hosted - version: "3.6.1" + version: "4.0.7" args: dependency: transitive description: @@ -117,10 +133,10 @@ packages: dependency: transitive description: name: cli_util - sha256: "66f86e916d285c1a93d3b79587d94bd71984a66aac4ff74e524cfa7877f1395c" + sha256: ff6785f7e9e3c38ac98b2fb035701789de90154024a75b6cb926445e83197d1c url: "https://pub.dev" source: hosted - version: "0.3.5" + version: "0.4.2" clock: dependency: transitive description: @@ -185,14 +201,6 @@ packages: url: "https://pub.dev" source: hosted version: "1.0.8" - dart_earcut: - dependency: transitive - description: - name: dart_earcut - sha256: e485001bfc05dcbc437d7bfb666316182e3522d4c3f9668048e004d0eb2ce43b - url: "https://pub.dev" - source: hosted - version: "1.2.0" dart_sort_queue: dependency: transitive description: @@ -338,10 +346,10 @@ packages: dependency: "direct main" description: name: flutter_launcher_icons - sha256: ce0e501cfc258907842238e4ca605e74b7fd1cdf04b3b43e86c43f3e40a1592c + sha256: bfa04787c85d80ecb3f8777bde5fc10c3de809240c48fa061a2c2bf15ea5211c url: "https://pub.dev" source: hosted - version: "0.11.0" + version: "0.14.3" flutter_lints: dependency: "direct dev" description: @@ -387,22 +395,14 @@ packages: description: flutter source: sdk version: "0.0.0" - flutter_map: - dependency: "direct main" - description: - name: flutter_map - sha256: f7d0379477274f323c3f3bc12d369a2b42eb86d1e7bd2970ae1ea3cff782449a - url: "https://pub.dev" - source: hosted - version: "8.1.1" flutter_native_splash: dependency: "direct main" description: name: flutter_native_splash - sha256: "6777a3abb974021a39b5fdd2d46a03ca390e03903b6351f21d10e7ecc969f12d" + sha256: "8321a6d11a8d13977fa780c89de8d257cce3d841eecfb7a4cadffcc4f12d82dc" url: "https://pub.dev" source: hosted - version: "2.2.16" + version: "2.4.6" flutter_otp_text_field: dependency: "direct main" description: @@ -419,6 +419,14 @@ packages: url: "https://pub.dev" source: hosted version: "2.0.28" + flutter_polyline_points: + dependency: "direct main" + description: + name: flutter_polyline_points + sha256: "3a1c8c30abee9fb0fbe44c70d5d1cedb10ef28ec7ea285c669f02b3e183483aa" + url: "https://pub.dev" + source: hosted + version: "2.1.0" flutter_rating_bar: dependency: "direct main" description: @@ -475,6 +483,14 @@ packages: url: "https://pub.dev" source: hosted version: "3.1.2" + flutter_svg: + dependency: "direct main" + description: + name: flutter_svg + sha256: d44bf546b13025ec7353091516f6881f1d4c633993cb109c3916c3a0159dadf1 + url: "https://pub.dev" + source: hosted + version: "2.1.0" flutter_test: dependency: "direct dev" description: flutter @@ -713,10 +729,10 @@ packages: dependency: transitive description: name: image - sha256: "8e9d133755c3e84c73288363e6343157c383a0c6c56fc51afcc5d4d7180306d6" + sha256: "4e973fcf4caae1a4be2fa0a13157aa38a8f9cb049db6529aa00b4d71abc4d928" url: "https://pub.dev" source: hosted - version: "3.3.0" + version: "4.5.4" image_picker: dependency: "direct main" description: @@ -853,14 +869,6 @@ packages: url: "https://pub.dev" source: hosted version: "5.1.1" - lists: - dependency: transitive - description: - name: lists - sha256: "4ca5c19ae4350de036a7e996cdd1ee39c93ac0a2b840f4915459b7d0a7d4ab27" - url: "https://pub.dev" - source: hosted - version: "1.0.1" local_auth: dependency: "direct main" description: @@ -901,6 +909,30 @@ packages: url: "https://pub.dev" source: hosted version: "1.0.11" + location: + dependency: "direct main" + description: + name: location + sha256: c2c4304071ec860525d5c50d142410072f8620c1d9f74874811af2e804e1a9c8 + url: "https://pub.dev" + source: hosted + version: "8.0.0" + location_platform_interface: + dependency: transitive + description: + name: location_platform_interface + sha256: a3404ea6d74e89b121630be62ed8edcc7b39fd108bd19805d0ae55c397135dd7 + url: "https://pub.dev" + source: hosted + version: "6.0.0" + location_web: + dependency: transitive + description: + name: location_web + sha256: "744bdff53dc455a2dc9a34474c49cde364d4fbef2aee009f8b0b4b68570c27a1" + url: "https://pub.dev" + source: hosted + version: "6.0.0" logger: dependency: "direct main" description: @@ -921,42 +953,10 @@ packages: dependency: "direct main" description: name: lottie - sha256: "377d87b8dcef640c04717e93afb86a510f0e1117a399ab94dc4b3f39c85eaa87" + sha256: c5fa04a80a620066c15cf19cc44773e19e9b38e989ff23ea32e5903ef1015950 url: "https://pub.dev" source: hosted - version: "3.3.0" - mapbox_gl: - dependency: "direct main" - description: - name: mapbox_gl - sha256: d78907338ff232e3cf6c1d6dba45e6a8814069496fd352e49bb1967d498f09af - url: "https://pub.dev" - source: hosted - version: "0.16.0" - mapbox_gl_dart: - dependency: transitive - description: - name: mapbox_gl_dart - sha256: de6d03718e5eb05c9eb1ddaae7f0383b28acb5afa16405e1deed7ff04dd34f3d - url: "https://pub.dev" - source: hosted - version: "0.2.1" - mapbox_gl_platform_interface: - dependency: transitive - description: - name: mapbox_gl_platform_interface - sha256: b7c1490b022e650afd20412bdf8ae45a1897118b7ce6049ef6c42df09193d4b2 - url: "https://pub.dev" - source: hosted - version: "0.16.0" - mapbox_gl_web: - dependency: transitive - description: - name: mapbox_gl_web - sha256: e77113bf95a4f321ff44938232517e0f2725aae991f0b283af1afaa7e7a58aca - url: "https://pub.dev" - source: hosted - version: "0.16.0" + version: "3.3.1" mapbox_maps_flutter: dependency: "direct main" description: @@ -989,14 +989,6 @@ packages: url: "https://pub.dev" source: hosted version: "1.16.0" - mgrs_dart: - dependency: transitive - description: - name: mgrs_dart - sha256: fb89ae62f05fa0bb90f70c31fc870bcbcfd516c843fb554452ab3396f78586f7 - url: "https://pub.dev" - source: hosted - version: "2.0.0" mime: dependency: transitive description: @@ -1013,6 +1005,14 @@ packages: url: "https://pub.dev" source: hosted version: "0.5.0" + page_transition: + dependency: transitive + description: + name: page_transition + sha256: "9d2a780d7d68b53ae82fbcc43e06a16195e6775e9aae40e55dc0cbb593460f9d" + url: "https://pub.dev" + source: hosted + version: "2.2.1" path: dependency: "direct main" description: @@ -1157,14 +1157,22 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.8" - polylabel: - dependency: transitive + polyline_do: + dependency: "direct main" description: - name: polylabel - sha256: "41b9099afb2aa6c1730bdd8a0fab1400d287694ec7615dd8516935fa3144214b" + name: polyline_do + sha256: "41b7a4c3d3f259816764d577beba843e683f59117958c51e90a5ca975ff3d298" url: "https://pub.dev" source: hosted - version: "1.0.1" + version: "0.1.0" + posix: + dependency: transitive + description: + name: posix + sha256: f0d7856b6ca1887cfa6d1d394056a296ae33489db914e365e2044fdada449e62 + url: "https://pub.dev" + source: hosted + version: "6.0.2" postgrest: dependency: transitive description: @@ -1173,14 +1181,6 @@ packages: url: "https://pub.dev" source: hosted version: "2.4.2" - proj4dart: - dependency: transitive - description: - name: proj4dart - sha256: c8a659ac9b6864aa47c171e78d41bbe6f5e1d7bd790a5814249e6b68bc44324e - url: "https://pub.dev" - source: hosted - version: "2.1.0" rbush: dependency: transitive description: @@ -1442,14 +1442,6 @@ packages: url: "https://pub.dev" source: hosted version: "1.4.0" - unicode: - dependency: transitive - description: - name: unicode - sha256: "0f69e46593d65245774d4f17125c6084d2c20b4e473a983f6e21b7d7762218f1" - url: "https://pub.dev" - source: hosted - version: "0.3.1" universal_io: dependency: transitive description: @@ -1530,6 +1522,30 @@ packages: url: "https://pub.dev" source: hosted version: "4.5.1" + vector_graphics: + dependency: transitive + description: + name: vector_graphics + sha256: "44cc7104ff32563122a929e4620cf3efd584194eec6d1d913eb5ba593dbcf6de" + url: "https://pub.dev" + source: hosted + version: "1.1.18" + vector_graphics_codec: + dependency: transitive + description: + name: vector_graphics_codec + sha256: "99fd9fbd34d9f9a32efd7b6a6aae14125d8237b10403b422a6a6dfeac2806146" + url: "https://pub.dev" + source: hosted + version: "1.1.13" + vector_graphics_compiler: + dependency: transitive + description: + name: vector_graphics_compiler + sha256: "1b4b9e706a10294258727674a340ae0d6e64a7231980f9f9a3d12e4b42407aad" + url: "https://pub.dev" + source: hosted + version: "1.1.16" vector_math: dependency: transitive description: @@ -1578,14 +1594,6 @@ packages: url: "https://pub.dev" source: hosted version: "5.13.0" - wkt_parser: - dependency: transitive - description: - name: wkt_parser - sha256: "8a555fc60de3116c00aad67891bcab20f81a958e4219cc106e3c037aa3937f13" - url: "https://pub.dev" - source: hosted - version: "2.0.0" xdg_directories: dependency: transitive description: diff --git a/sigap-mobile/pubspec.yaml b/sigap-mobile/pubspec.yaml index 858eefd..1f877f8 100644 --- a/sigap-mobile/pubspec.yaml +++ b/sigap-mobile/pubspec.yaml @@ -21,90 +21,101 @@ version: 1.0.0+1 environment: sdk: ^3.7.2 -# Dependencies specify other packages that your package needs in order to work. -# To automatically upgrade your package dependencies to the latest versions -# consider running `flutter pub upgrade --major-versions`. Alternatively, -# dependencies can be manually updated by changing the version numbers below to -# the latest version available on pub.dev. To see which dependencies have newer -# versions available, run `flutter pub outdated`. dependencies: flutter: sdk: flutter -# Utility Packages + # --- Date & Time Utilities --- intl: ^0.19.0 + timeago: + time_slot: + calendar_date_picker2: + easy_date_timeline: + + # --- Logging & Debugging --- logger: + + # --- URL & Launcher --- url_launcher: - flutter_native_splash: + + # --- Splash & Icons --- + flutter_launcher_icons: + animated_splash_screen: ^1.3.0 + flutter_native_splash: ^2.4.6 + + # --- UI & Animation --- smooth_page_indicator: - connectivity_plus: lottie: - flutter_otp_text_field: + shimmer: + badges: carousel_slider: flutter_rating_bar: readmore: dropdown_search: - time_slot: - calendar_date_picker2: - easy_date_timeline: - shimmer: - badges: - image_picker: - timeago: - flutter_dotenv: - path: - file_picker: dotted_border: - uuid: + flutter_svg: ^2.1.0 + + # --- Input & Forms --- + flutter_otp_text_field: + image_picker: + file_picker: + + # --- Storage & Filesystem --- + path: path_provider: + flutter_secure_storage: + + # --- Data & Utilities --- + uuid: crypto: - flutter_launcher_icons: + + # --- Notifications & Permissions --- flutter_local_notifications: permission_handler: - # Map + # --- Environment & Config --- + flutter_dotenv: + + # --- Connectivity --- + connectivity_plus: + + # --- Map & Location --- mapbox_maps_flutter: - mapbox_gl: - flutter_map: + + # mapbox_gl: + polyline_do: + flutter_polyline_points: + location: latlong2: geolocator: geocoding: - # Icons + # --- Icons --- iconsax: cupertino_icons: font_awesome_flutter: - # State Management + # --- State Management & Storage --- get: get_storage: - # Supabase + # --- Supabase & API Services --- supabase_flutter: - - # Authentication - google_sign_in: - local_auth: - flutter_secure_storage: - - # API Services dio: - # Fonts + # --- Authentication --- + google_sign_in: + local_auth: + + # --- Fonts --- google_fonts: - # Localization - + # --- Localization --- + # (add localization dependencies here if needed) dev_dependencies: flutter_test: sdk: flutter - - # The "flutter_lints" package below contains a set of recommended lints to - # encourage good coding practices. The lint set provided by the package is - # activated in the `analysis_options.yaml` file located at the root of your - # package. See that file for information about deactivating specific lint - # rules and activating additional ones. flutter_lints: ^5.0.0 # For information on the generic Dart part of this file, see the @@ -123,6 +134,9 @@ flutter: #--------------- LOCAL ASSETS ------------------# assets: + # Environment variables + - .env + # Images - assets/logos/ - assets/icons/brands/ - assets/images/content/