Merge pull request #1223 from tw-mosip/internal-release-01-02-2024

[Release 01-02-2024] User data backup and restore and Gender Mag issues
This commit is contained in:
Swati Goel
2024-02-02 20:51:33 +05:30
committed by GitHub
143 changed files with 5406 additions and 1264 deletions

5
.env
View File

@@ -14,8 +14,11 @@ APPLICATION_THEME=orange
#environment can be changed if it is toggled #environment can be changed if it is toggled
CREDENTIAL_REGISTRY_EDIT=true CREDENTIAL_REGISTRY_EDIT=true
#DataBackup can enable if it is toggled #DataBackup can enable if it is toggled
DATA_BACKUP=false BACKUP_AND_RESTORE=true
DEBUG_MODE=false DEBUG_MODE=false
#supported languages( en, fil, ar, hi, kn, ta) #supported languages( en, fil, ar, hi, kn, ta)
APPLICATION_LANGUAGE=en APPLICATION_LANGUAGE=en
#INJI MOBILE CLIENT ID
GOOGLE_ANDROID_CLIENT_ID='<client_id>'

View File

@@ -105,6 +105,7 @@ jobs:
RELEASE_KEYSTORE_PASSWORD: '${{ secrets.INJI_ANDROID_RELEASE_STOREPASS }}' RELEASE_KEYSTORE_PASSWORD: '${{ secrets.INJI_ANDROID_RELEASE_STOREPASS }}'
INJI_ANDROID_PLAY_STORE_CONFIG_JSON: ${{ secrets.INJI_ANDROID_PLAY_STORE_CONFIG_JSON }} INJI_ANDROID_PLAY_STORE_CONFIG_JSON: ${{ secrets.INJI_ANDROID_PLAY_STORE_CONFIG_JSON }}
SLACK_WEBHOOK_URL: '${{ secrets.SLACK_WEBHOOK_INJI_TEAM }}' SLACK_WEBHOOK_URL: '${{ secrets.SLACK_WEBHOOK_INJI_TEAM }}'
GOOGLE_ANDROID_CLIENT_ID: ${{secrets.INJI_GOOGLE_CLIENT_ID}}
build-android-beta: build-android-beta:
if: ${{ inputs.release == 'beta' && (inputs.buildFor == 'Both[Android and IOS]' || inputs.buildFor == 'Android') }} if: ${{ inputs.release == 'beta' && (inputs.buildFor == 'Both[Android and IOS]' || inputs.buildFor == 'Android') }}
@@ -130,6 +131,7 @@ jobs:
RELEASE_KEYSTORE_PASSWORD: '${{ secrets.INJI_ANDROID_RELEASE_STOREPASS }}' RELEASE_KEYSTORE_PASSWORD: '${{ secrets.INJI_ANDROID_RELEASE_STOREPASS }}'
INJI_ANDROID_PLAY_STORE_CONFIG_JSON: ${{ secrets.INJI_ANDROID_PLAY_STORE_CONFIG_JSON }} INJI_ANDROID_PLAY_STORE_CONFIG_JSON: ${{ secrets.INJI_ANDROID_PLAY_STORE_CONFIG_JSON }}
SLACK_WEBHOOK_URL: '${{ secrets.SLACK_WEBHOOK_INJI_TEAM }}' SLACK_WEBHOOK_URL: '${{ secrets.SLACK_WEBHOOK_INJI_TEAM }}'
GOOGLE_ANDROID_CLIENT_ID: ${{secrets.INJI_GOOGLE_CLIENT_ID}}
build-ios: build-ios:
if: ${{ inputs.buildFor == 'Both[Android and IOS]' || inputs.buildFor == 'IOS'}} if: ${{ inputs.buildFor == 'Both[Android and IOS]' || inputs.buildFor == 'IOS'}}

190
.github/workflows/ui-automation.yml vendored Normal file
View File

@@ -0,0 +1,190 @@
name: UI - Automation
run-name: ${{ inputs.runName }}
on:
workflow_dispatch:
inputs:
runName:
description: 'Name the run for Actions & DeviceFarm'
required: true
default: 'Ex: Sanity/Regression[ENV]'
type: string
buildFor:
description: 'Trigger test case run for'
required: true
default: 'Both[Android and IOS]'
type: choice
options:
- Both[Android and IOS]
- Android
- IOS
testType:
description: 'Test type Sanity/Regression'
required: true
default: 'sanity'
type: choice
options:
- sanity
- regression
backendServiceUrl:
description: 'Mimoto and Esignet backend service URL'
required: true
default: 'https://api.sandbox.mosip.net'
type: string
jobs:
android-ui-automation:
if: ${{ github.event.inputs.buildFor == 'Both[Android and IOS]' || github.event.inputs.buildFor == 'Android'}}
name: Trigger android run
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3.1.0
- uses: actions/setup-node@v3
with:
node-version: '18.x'
- name: Cache npm dependencies
uses: actions/cache@v3.3.1
with:
path: '~/.npm'
key: ${{ runner.os }}-npm-${{ hashFiles('**/package-lock.json') }}
restore-keys: |
${{ runner.os }}-npm-
- name: Install npm dependencies
run: |
npm ci
- name: Generate Android keystore
run: |
echo "$ANDROID_KEYSTORE_FILE" > release.keystore.b64
base64 -d -i release.keystore.b64 > android/app/release.keystore
env:
ANDROID_KEYSTORE_FILE: ${{ secrets.INJI_ANDROID_RELEASE_KEYSTORE }}
- name: Create Android Build
run: |
npx jetify
cd android/scripts
./android-build.sh
env:
MIMOTO_HOST: ${{ github.event.inputs.backendServiceUrl }}
ESIGNET_HOST: ${{ github.event.inputs.backendServiceUrl }}
APPLICATION_THEME: 'orange'
CREDENTIAL_REGISTRY_EDIT: 'false'
RELEASE_KEYSTORE_ALIAS: 'androidreleasekey'
RELEASE_KEYSTORE_PASSWORD: "${{ secrets.INJI_ANDROID_RELEASE_STOREPASS }}"
- name: Configure AWS CLI
run: |
aws configure set aws_access_key_id ${{ secrets.AWS_DEVICE_FARM_ACCESS_KEY }}
aws configure set aws_secret_access_key ${{ secrets.AWS_DEVICE_FARM_SECRET_KEY }}
aws configure set region us-west-2
- name: Android - Automation
id: android-run
run: |
cd injitest/scripts/ui_automation
./automation_trigger.sh "Android" "$RUN_NAME-Android" "$TEST_TYPE"
env:
RUN_NAME: ${{ github.event.inputs.runName }}
TEST_TYPE: ${{ github.event.inputs.testType }}
- name: Download Android Artifacts
run: |
cd injitest/scripts/ui_automation
./download_artifacts.sh "$RUN_ARN" "Android"
- name: Upload Artifact to Actions
uses: actions/upload-artifact@v3.1.1
with:
name: Android-Artifacts
path: injitest/scripts/ui_automation/artifacts/android_artifacts/
retention-days: 10
# - name: Update slack channel
# if: always()
# uses: 8398a7/action-slack@v3
# with:
# status: ${{ job.status }}
# fields: repo,message,author,commit,workflow,job
# env:
# SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_INJI_TEAM }}
ios-ui-automation:
if: ${{ github.event.inputs.buildFor == 'Both[Android and IOS]' || github.event.inputs.buildFor == 'IOS'}}
name: Trigger ios run
runs-on: macos-13
steps:
- uses: actions/checkout@v3.1.0
- uses: actions/setup-node@v3
with:
node-version: '18.x'
- name: Cache npm dependencies
uses: actions/cache@v3.3.1
with:
path: '~/.npm'
key: ${{ runner.os }}-npm-${{ hashFiles('**/package-lock.json') }}
restore-keys: |
${{ runner.os }}-npm-
- name: Install npm dependencies
run: |
npm ci
- name: Create iOS Build
run: |
cd ios
pod install && pod install
fastlane ios_ui_automation_build
env:
MIMOTO_HOST: ${{ github.event.inputs.backendServiceUrl }}
ESIGNET_HOST: ${{ github.event.inputs.backendServiceUrl }}
APPLICATION_THEME: 'orange'
APP_FLAVOR: 'residentapp'
CREDENTIAL_REGISTRY_EDIT: 'false'
INJI_IOS_TEMP_KEYCHAIN_PASSWORD: '${{ secrets.INJI_IOS_TEMP_KEYCHAIN_PASSWORD }}'
INJI_IOS_TEMP_KEYCHAIN_USER: '${{ secrets.INJI_IOS_TEMP_KEYCHAIN_USER }}'
GIT_AUTHORIZATION: '${{ secrets.GIT_AUTHORIZATION }}'
APPLE_KEY_ID: '${{ secrets.APPLE_KEY_ID }}'
APPLE_ISSUER_ID: '${{ secrets.APPLE_ISSUER_ID }}'
APPLE_KEY_CONTENT: '${{ secrets.APPLE_KEY_CONTENT }}'
MATCH_PASSWORD: '${{ secrets.INJI_IOS_MATCH_PASSWORD }}'
- name: Configure AWS CLI
run: |
aws configure set aws_access_key_id ${{ secrets.AWS_DEVICE_FARM_ACCESS_KEY }}
aws configure set aws_secret_access_key ${{ secrets.AWS_DEVICE_FARM_SECRET_KEY }}
aws configure set region us-west-2
- name: IOS - Automation
run: |
cd injitest/scripts/ui_automation
./automation_trigger.sh "IOS" "$RUN_NAME-IOS" "$TEST_TYPE"
env:
RUN_NAME: ${{ github.event.inputs.runName }}
TEST_TYPE: ${{ github.event.inputs.testType }}
- name: Download IOS Artifacts
run: |
cd injitest/scripts/ui_automation
./download_artifacts.sh "$RUN_ARN" "IOS"
- name: Upload Artifact to Actions
uses: actions/upload-artifact@v3.1.1
with:
name: IOS-Artifacts
path: injitest/scripts/ui_automation/artifacts/ios_artifacts/
retention-days: 10
# - name: Update slack channel
# if: always()
# uses: 8398a7/action-slack@v3
# with:
# status: ${{ job.status }}
# fields: repo,message,author,commit,workflow,job
# env:
# SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_INJI_TEAM }}

View File

@@ -2,7 +2,7 @@ fileignoreconfig:
- filename: package.json - filename: package.json
checksum: 4770aabfda162fbc0b9a8c53d7dee483ce29b82c6cd3e17e81e3e628d93dbadc checksum: 4770aabfda162fbc0b9a8c53d7dee483ce29b82c6cd3e17e81e3e628d93dbadc
- filename: package-lock.json - filename: package-lock.json
checksum: e4569b3ec846749ae56bd9ad907c6cd05c27ab111475ceb501e667ec38367609 checksum: 4e96631f1fa326fe49fd48c1ab7ab3eae5808376bb28f477d82e7671d335fd0c
- filename: lib/jsonld-signatures/suites/ed255192018/ed25519.ts - filename: lib/jsonld-signatures/suites/ed255192018/ed25519.ts
checksum: 493b6e31144116cb612c24d98b97d8adcad5609c0a52c865a6847ced0a0ddc3a checksum: 493b6e31144116cb612c24d98b97d8adcad5609c0a52c865a6847ced0a0ddc3a
- filename: components/PasscodeVerify.tsx - filename: components/PasscodeVerify.tsx
@@ -24,7 +24,7 @@ fileignoreconfig:
- filename: screens/BiometricScreenController.ts - filename: screens/BiometricScreenController.ts
checksum: 4a424adbd2d2404c9d968c54607885af643a07e09acc4a2d37c6e7a7952c4945 checksum: 4a424adbd2d2404c9d968c54607885af643a07e09acc4a2d37c6e7a7952c4945
- filename: screens/Home/IntroSlidersScreen.tsx - filename: screens/Home/IntroSlidersScreen.tsx
checksum: 9ff212530850e9f921f91d406c01f67ea5dd2a44e9cdb5e63d977749c7a7c5bd checksum: af4a7e2d04b1141b7c32acfabeb3213a32eaca2a8e8f61e6958b6c97219dce57
- filename: machines/issuersMachine.ts - filename: machines/issuersMachine.ts
checksum: 742b8ff561dca61be08ab0b9aef3997ad5d043df298a84c17349dc0206ddcee6 checksum: 742b8ff561dca61be08ab0b9aef3997ad5d043df298a84c17349dc0206ddcee6
- filename: machines/issuersMachine.typegen.ts - filename: machines/issuersMachine.typegen.ts
@@ -36,15 +36,11 @@ fileignoreconfig:
- filename: shared/telemetry/TelemetryUtils.js - filename: shared/telemetry/TelemetryUtils.js
checksum: ffe9aac2dcc590b98b0d588885c088eff189504ade653a77f74b67312bfd27ad checksum: ffe9aac2dcc590b98b0d588885c088eff189504ade653a77f74b67312bfd27ad
- filename: shared/fileStorage.ts - filename: shared/fileStorage.ts
checksum: 5c4c9bc78446e6b25bf6e6ac276918757d6275a27ba93d253338ca629ebc0240 checksum: 451e8873a635d955fe426d9a5fcf191f2d4fd74984a1a4518760e2d10e9e1817
- filename: shared/storage.ts
checksum: 837dda0fd0a3e160e62f10df44003d29e29dfce897550a85a8e74fe77a2a06db
- filename: screens/Issuers/IssuersScreen.tsx - filename: screens/Issuers/IssuersScreen.tsx
checksum: 9c53e3770dbefe26e0de67ee4b7d5cc9c52d9823cbb136a1a5104dcb0a101071 checksum: 9c53e3770dbefe26e0de67ee4b7d5cc9c52d9823cbb136a1a5104dcb0a101071
- filename: ios/Podfile.lock - filename: ios/Podfile.lock
checksum: 1da328d6edcd284799be962d59281b120a5bb2a6873ca6a01da321857e59a7d3 checksum: c9bb3501f86e3ac35c7522ed1028b0fa726723c86d395bb159d5f96a21e50159
- filename: screens/Home/IntroSlidersScreen.tsx
checksum: 72ef913857448ef05763e52e32356faa2d1f3de8130a1c638d1897f44823031f
- filename: shared/commonUtil.ts - filename: shared/commonUtil.ts
checksum: 4a53bb615f2ea0fbf687bd7027c4c246e819dd88bc273941ed611e763d9d2356 checksum: 4a53bb615f2ea0fbf687bd7027c4c246e819dd88bc273941ed611e763d9d2356
- filename: screens/Home/MyVcs/GetIdInputModal.tsx - filename: screens/Home/MyVcs/GetIdInputModal.tsx
@@ -56,7 +52,7 @@ fileignoreconfig:
- filename: machines/store.typegen.ts - filename: machines/store.typegen.ts
checksum: 6d22bc5c77398316b943c512c208ce0846a9fff674c1ccac79e07f21962acd5f checksum: 6d22bc5c77398316b943c512c208ce0846a9fff674c1ccac79e07f21962acd5f
- filename: shared/telemetry/TelemetryConstants.js - filename: shared/telemetry/TelemetryConstants.js
checksum: df7619021aa023fa62ade9efb60a80fc9c6901da8c52f563014d3f51497c190c checksum: fd8dc3a69cdef68855dc5f0531d8e634bfa2621bb4dc22f85b8247512a349c4c
- filename: machines/VCItemMachine/EsignetMosipVCItem/EsignetMosipVCItemMachine.ts - filename: machines/VCItemMachine/EsignetMosipVCItem/EsignetMosipVCItemMachine.ts
checksum: cca7657da3a1a91b63e0a10605545d1e0d3d152b083a55f9dbb9eed893646e4b checksum: cca7657da3a1a91b63e0a10605545d1e0d3d152b083a55f9dbb9eed893646e4b
- filename: machines/VCItemMachine/ExistingMosipVCItem/ExistingMosipVCItemMachine.ts - filename: machines/VCItemMachine/ExistingMosipVCItem/ExistingMosipVCItemMachine.ts
@@ -68,11 +64,9 @@ fileignoreconfig:
- filename: shared/telemetry/TelemetryUtils.js - filename: shared/telemetry/TelemetryUtils.js
checksum: a0686e9a5c006176fd720b84bc36ca947db1422caf65c90cd0c2d1102a9e96df checksum: a0686e9a5c006176fd720b84bc36ca947db1422caf65c90cd0c2d1102a9e96df
- filename: ios/fastlane/Fastfile - filename: ios/fastlane/Fastfile
checksum: 78edb7772ca7bf64fc0c603cb82771c793e03afff37ccbbfd1b9f578ec0e5369 checksum: a4e3772dc67a07ecbcfc58be0d6d4f7fa799cec7ac25bd269ac29459c8669ca4
- filename: machines/bleShare/scan/scanMachine.ts - filename: machines/bleShare/scan/scanMachine.ts
checksum: a514c958ca3da3c5b22a1a95ad680af8f05fb22638fab79b3842aa8fcc1b4a17 checksum: a514c958ca3da3c5b22a1a95ad680af8f05fb22638fab79b3842aa8fcc1b4a17
- filename: locales/spa.json
checksum: eac9685c6b205ece5759e414669d27ad7ce383453d7b5e7d9f5ce75d290cc860
- filename: screens/PasscodeScreen.tsx - filename: screens/PasscodeScreen.tsx
checksum: 5d3003027b245234f8c00bfc98836f1fb90a5d9525ffacf61c53f3d50954aa6a checksum: 5d3003027b245234f8c00bfc98836f1fb90a5d9525ffacf61c53f3d50954aa6a
- filename: screens/PasscodeScreen.tsx - filename: screens/PasscodeScreen.tsx
@@ -87,16 +81,12 @@ fileignoreconfig:
checksum: 9970da0ea685018a90f7306fb88945d135dd019439099dd56b6109d915a8a24f checksum: 9970da0ea685018a90f7306fb88945d135dd019439099dd56b6109d915a8a24f
- filename: assets/Flip_Camera_Icon.svg - filename: assets/Flip_Camera_Icon.svg
checksum: 736b5a7ddb86bd4376229ce198dbf8a663e7ac89fc3311bd4f19afd4a2b36ffd checksum: 736b5a7ddb86bd4376229ce198dbf8a663e7ac89fc3311bd4f19afd4a2b36ffd
- filename: ios/fastlane/Fastfile
checksum: 086080bc7a04accf5094c457b5acf84d9fec5d7dfa72eaaaf02e433ecf4f996b
- filename: assets/Finger_Print_Icon.svg - filename: assets/Finger_Print_Icon.svg
checksum: 776d4fe4fc4b54d185ccf97daf0511b9fe2c0e0f7c1a809047020e5e8a100db6 checksum: 776d4fe4fc4b54d185ccf97daf0511b9fe2c0e0f7c1a809047020e5e8a100db6
- filename: android/app/build.gradle - filename: android/app/build.gradle
checksum: d5409b8eda2e1bf5b2552a909595a9e0aea4fd4e7572cf1746c99eee1583b83a checksum: d5409b8eda2e1bf5b2552a909595a9e0aea4fd4e7572cf1746c99eee1583b83a
- filename: .github/workflows/push-triggers.yml - filename: .github/workflows/push-triggers.yml
checksum: abc19ea38c8d7b79f15695d015709cc88a34a995181aaf12bc8344f940f3cbc4 checksum: abc19ea38c8d7b79f15695d015709cc88a34a995181aaf12bc8344f940f3cbc4
- filename: ios/fastlane/Fastfile
checksum: 086080bc7a04accf5094c457b5acf84d9fec5d7dfa72eaaaf02e433ecf4f996b
- filename: android/fastlane/Fastfile - filename: android/fastlane/Fastfile
checksum: a25f155bcbbae7ab09563637c23771f7349738f12a6ddc8ae71c29c61ed535af checksum: a25f155bcbbae7ab09563637c23771f7349738f12a6ddc8ae71c29c61ed535af
- filename: .github/workflows/internal-build.yml - filename: .github/workflows/internal-build.yml
@@ -105,58 +95,92 @@ fileignoreconfig:
checksum: f4e8a054fc4168e08bc9e9fe3e644cebabacdfc31ef0cbe36dd281766f47df5e checksum: f4e8a054fc4168e08bc9e9fe3e644cebabacdfc31ef0cbe36dd281766f47df5e
- filename: screens/Home/MyVcs/IdInputModal.tsx - filename: screens/Home/MyVcs/IdInputModal.tsx
checksum: 7ee46d8ef4761c0e9b59f3e602e6e30be5f47221817c819e91ab10ca2203089f checksum: 7ee46d8ef4761c0e9b59f3e602e6e30be5f47221817c819e91ab10ca2203089f
- filename: .env
checksum: d3023fb22734e6c7bd626f24007ba7b93e791cb0bcb8a086cb8e99f04bc31c7c
- filename: machines/backup.ts
checksum: d4b95b075ce39ed80b119014188f8903dbb46d46dd19a3757eea2ae8a06ba7ad
- filename: machines/backup.typegen.ts
checksum: 4ae5dbf36353cb7568a278628256e68caded071f1e91d6e1b25ac9aefb1f81cf
- filename: screens/Settings/BackupController.tsx - filename: screens/Settings/BackupController.tsx
checksum: 054665c377b4a8e246ae1bfb419ab86d0cb1c120ae92cdc27ceed9cf1f39679b checksum: 054665c377b4a8e246ae1bfb419ab86d0cb1c120ae92cdc27ceed9cf1f39679b
- filename: screens/Settings/BackupViaPassword.tsx - filename: screens/Settings/BackupViaPassword.tsx
checksum: 5fb2f98fb8a4efeb6b691b8a29e62eba64a99e9b2129bc0af1d11bc56bdfb374 checksum: 5fb2f98fb8a4efeb6b691b8a29e62eba64a99e9b2129bc0af1d11bc56bdfb374
- filename: screens/Settings/DataBackup.tsx
checksum: 6f3eaf26a58712b3ddd36dfa49d0d608eb873455ca91374545148c23e36fd43b
- filename: shared/constants.ts - filename: shared/constants.ts
checksum: 062fb9bc4ba7dc7c91558caee5a4fd41ba748b0dcd108c62b50a2fdd06eaa289 checksum: ae922a7acafab9c42746bd54e194c44532af81122837594c397713cef6922ca0
- filename: shared/commonUtil.ts - filename: shared/commonUtil.ts
checksum: 4f353f525ce0d2c9c7caf734aa9ce4a7a5ce8d526528a491974052256b8cbe76
- filename: screens/Settings/BackupController.tsx
checksum: d2a355356bcaf8f7ef3b53ba93710cec15fefd0fdf31efd779eebd2bfab61c19 checksum: d2a355356bcaf8f7ef3b53ba93710cec15fefd0fdf31efd779eebd2bfab61c19
- filename: shared/constants.ts
checksum: 3961940d2df158b6c287cb689b8841d278eae273a4e5553ae2ae612340f8b8c8
- filename: shared/api.ts - filename: shared/api.ts
checksum: 96a87e2128c30d16526cb1cb91b7da58f266d8c32d830adff11ca4d04e8c459f checksum: 96a87e2128c30d16526cb1cb91b7da58f266d8c32d830adff11ca4d04e8c459f
- filename: machines/backupWithEncryption.ts - filename: machines/backupWithEncryption.ts
checksum: 038c12d30b2312fcbd9230a1c6ddb494d2e561fe0d09741335fa80ab67e2c550 checksum: 038c12d30b2312fcbd9230a1c6ddb494d2e561fe0d09741335fa80ab67e2c550
- filename: machines/backupWithEncryption.typegen.ts - filename: machines/backupWithEncryption.typegen.ts
checksum: f5f9a71082e3f30f89e98a7913535327b31b942709ee8b5efb40e18c73ddee2a checksum: f5f9a71082e3f30f89e98a7913535327b31b942709ee8b5efb40e18c73ddee2a
- filename: screens/Home/MyVcs/OtpVerificationModal.tsx - filename: screens/Home/MyVcs/OtpVerificationModal.tsx
checksum: 1db1f39701019383e1e40e6ed5278177e6c9bb3d28def0935cf6d4bd9e41e63a checksum: 1db1f39701019383e1e40e6ed5278177e6c9bb3d28def0935cf6d4bd9e41e63a
- filename: screens/Home/MyVcs/GetIdInputModal.tsx - filename: screens/Home/MyVcs/GetIdInputModal.tsx
checksum: e85d18cd3349e0127f1cc7173fcdfd31824e609508512a613997a73756cd4dec checksum: e85d18cd3349e0127f1cc7173fcdfd31824e609508512a613997a73756cd4dec
- filename: .github/workflows/android-custom-build.yml - filename: .github/workflows/android-custom-build.yml
checksum: 4d155c6e5468effb0b82e62f6878f2bd7ff7e7c9540e16bdd28cb81b80672ac3 checksum: 4d155c6e5468effb0b82e62f6878f2bd7ff7e7c9540e16bdd28cb81b80672ac3
- filename: .github/workflows/push-triggers.yml - filename: .github/workflows/push-triggers.yml
checksum: 4a031b46646aa982c8f40e4c7fe0bd3e05a76a6af1ff1c2de7350ba6ebf9a839 checksum: 4a031b46646aa982c8f40e4c7fe0bd3e05a76a6af1ff1c2de7350ba6ebf9a839
- filename: screens/Home/IntroSlidersScreen.tsx
checksum: 24b993e0406a49ace5b95dd05f7c4702220ec3d3f3fc2e774f20c023ef73822a
- filename: .env
checksum: 4259c7c600ef49bfca798a7807a03afe9fefb1a04efd3adf224397c18117a8c1
- filename: ios/Podfile.lock
checksum: f32d1580e34e354c0eb27d53d2d1c2b766b0902fc6366c407d84c24d6d8d38e3
- filename: package-lock.json
checksum: 2fb6ce0541ab33a7a981213911d7af60cf4c8144bf0d1587522ce22a48b104d6
- filename: components/VC/Views/VCCardViewContent.tsx - filename: components/VC/Views/VCCardViewContent.tsx
checksum: 02655ff3d7f8a8ea4f3664485f98c961802c598242ec44408594a2ddb721fa5e checksum: 02655ff3d7f8a8ea4f3664485f98c961802c598242ec44408594a2ddb721fa5e
- filename: screens/Home/IntroSlidersScreen.tsx
checksum: 99aad6f5e474f4d5dfa563245d7b627f5fed28a1a4fe8879cc8b8cc538a66f4e
- filename: shared/storage.ts
checksum: fa967759d765432926475a5534c26adfa61727c8e3334c795d7ee1e5b2dd0e1f
- filename: shared/constants.ts
checksum: ae922a7acafab9c42746bd54e194c44532af81122837594c397713cef6922ca0
- filename: shared/fileStorage.ts
checksum: 451e8873a635d955fe426d9a5fcf191f2d4fd74984a1a4518760e2d10e9e1817
- filename: screens/Settings/BackupController.tsx - filename: screens/Settings/BackupController.tsx
checksum: daf682b5616e45bd7b9a7c76becc617fea56be83124c3c4db838c2046e977481 checksum: 4a031b46646aa982c8f40e4c7fe0bd3e05a76a6af1ff1c2de7350ba6ebf9a839
version: "" - filename: machines/backupRestore.ts
checksum: 3ad985af5b88d949bad3ebb598b644d6fcb21de3f739300658bc44aa20915a00
- filename: machines/backupRestore.typegen.ts
checksum: 4a732b953dc97b9949a131039deadfdada4728c2fc7e5c4f1c89dd8101d595c5
- filename: machines/settings.typegen.ts
checksum: e4ae05822f1b1c23f3f70d03dd46fd8f29ba6b52d40f2f24c121f536fbb5f2c4
- filename: .env
checksum: 399e4dadae9dbd22612f48c8583fd64d6f07e9e1fcb0b57a1a8874b056da4b6c
- filename: .github/workflows/ui-automation.yml
checksum: 0b26a5dcb7524ba15d6aaeaf04f2ef94be9d25ef702d9072d6628bcd58e50f36
- filename: injitest/src/test/java/androidTestCases/PinVcTest.java
checksum: cf9ddace5e416970eec6f078567e7fe16c12f357e667ebd8f1018089b117d61f
- filename: injitest/src/test/java/androidTestCases/NoNetworkAndroidTest.java
checksum: c300122d39af06f68ecd0b6dc287daa0370fc6b744072944ddcc7fe4ded79fb3
- filename: injitest/src/test/java/androidTestCases/CredentialRegistryTest.java
checksum: 126ad4f513d5e417fdc3ccbace187315b8aae4399806d3259421f8bca7d41254
- filename: injitest/src/test/java/iosTestCases/NoNetworkIosTest.java
checksum: 698b2fed274f17a6daa76b0558bb0a733825fa224144f42aecb4affb8e3897a8
- filename: ios/fastlane/Fastfile
checksum: a4e3772dc67a07ecbcfc58be0d6d4f7fa799cec7ac25bd269ac29459c8669ca4
- filename: shared/storage.ts
checksum: 5700dbefff3da97dc85be1d171bd80a3e72d6f488e77db4044a14520cbc1642a
- filename: injitest/src/test/java/iosTestCases/CredentialRegistryTest.java
checksum: b0808e0c511412cde21fd169a9bbeaf3b77cb48f25418e12d341cc3ce1df5898
- filename: machines/backupAndRestore/backupAndRestore.ts
checksum: 846117cf13554ffde8544200ca597ceb820363c87bfbe57cffaedadc168b49ce
- filename: machines/backupAndRestore/backupAndRestore.typegen.ts
checksum: 509b9660553990841883c54f8986971f21c7315e7450c455bba2766738c58bee
- filename: machines/backupAndRestore/backup.ts
checksum: a0cad5f0e2633dc11a9eba031408e03dd62b2b94c00fa82d9cb29d3721b68e70
- filename: machines/backupAndRestore/backup.typegen.ts
checksum: 0d751a7dec88014b831835784f138ff73d0aeb09008d5c4fbd66d1114f2bb1c4
- filename: components/BackupAndRestoreAllScreenBanner.tsx
checksum: 2c98e7e83959c9dac4dd12da32f81483c3d334bd05e279637cf465475fbf54b8
checksum: f26489ce4ac607884437ad06c3117cc34d6cbcbcd3dd5719790fbe01a0853ee5
- filename: machines/backup.ts
checksum: df40cc92db9e459ab19d8382713afb24ae89c88a944623bbc21a7e6b9bc327a3
- filename: locales/en.json
checksum: 881b12057430b1b465306f6171d8a1c025c69909a29b6f9c405f70c2990ac4f4
- filename: locales/hin.json
checksum: 69bffc48c583a985ed6853988ca9f4a559adbdf14f4763f197e982a3684f3bad
- filename: locales/kan.json
checksum: f62d0d6cfd1454b396583ea7d0f438bcabd200c6af68f1327a7dfc3f5177d6d5
- filename: locales/ara.json
checksum: 89e413bc5884783f0601f8a22855f3da0cdd0ac9e9f80a1edd4e6a5fb10d94d4
- filename: locales/tam.json
checksum: 1beed968fa5d67d57961dbbaaade3596caaf543adb90847b40a558d0b50397bd
- filename: locales/spa.json
checksum: a03c5fa839d761f7bf5bbf0ea9bbd48da57116430a99e1d22f0e7184435d468c
- filename: locales/fil.json
checksum: 29193fd3b14b7332bf7a485f659197002f29a58af88ed0653cae262e7254c84d
- filename: screens/Home/IntroSlidersScreen.tsx
checksum: af4a7e2d04b1141b7c32acfabeb3213a32eaca2a8e8f61e6958b6c97219dce57
- filename: screens/Home/MyVcs/GetIdInputModal.tsx
checksum: 067664e19817d3aba98b0cfa68ef57a04958a982ee23b96b612e4bf466a73890
- filename: screens/PasscodeScreen.tsx
checksum: 9af4308001e7e260ffffd26955ca49df3b388e34686509371e23dd837b11d030
- filename: screens/Home/MyVcs/IdInputModal.tsx
checksum: b735aedc84164d03c199fe89ccbf9df58f8997bfb4f60e7058a22bfe952fda3e
- filename: .github/workflows/ui-automation.yml
checksum: 0b26a5dcb7524ba15d6aaeaf04f2ef94be9d25ef702d9072d6628bcd58e50f36
version: ""

View File

@@ -9,6 +9,7 @@ PLAY_CONSOLE_RELEASE_DESCRIPTION = ENV["BUILD_DESCRIPTION"]
SLACK_URL = ENV["SLACK_WEBHOOK_URL"] SLACK_URL = ENV["SLACK_WEBHOOK_URL"]
CREDENTIAL_REGISTRY_EDIT = ENV["CREDENTIAL_REGISTRY_EDIT"] CREDENTIAL_REGISTRY_EDIT = ENV["CREDENTIAL_REGISTRY_EDIT"]
APP_FLAVOR = ENV["APP_FLAVOR"] APP_FLAVOR = ENV["APP_FLAVOR"]
GOOGLE_ANDROID_CLIENT_ID = ENV["GOOGLE_ANDROID_CLIENT_ID"]
def generate_app_bundle_id() def generate_app_bundle_id()
flavor = APP_FLAVOR flavor = APP_FLAVOR

3
assets/Backup.svg Normal file
View File

@@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" width="78.143" height="56.742" viewBox="0 0 78.143 56.742">
<path id="cloud_upload_FILL0_wght400_GRAD0_opsz48" d="M58.648-742.258a17.938,17.938,0,0,1-13.142-5.506A17.938,17.938,0,0,1,40-760.906a18.532,18.532,0,0,1,4.4-12.21,17.75,17.75,0,0,1,11.322-6.349,24.071,24.071,0,0,1,8.347-14.075A23.062,23.062,0,0,1,79.249-799a22.15,22.15,0,0,1,16.827,7.237,24.474,24.474,0,0,1,6.793,17.36v2.131a14.364,14.364,0,0,1,10.833,4.129,14.514,14.514,0,0,1,4.44,10.878A14.432,14.432,0,0,1,113.7-746.7a14.432,14.432,0,0,1-10.567,4.44h-21.4a5.111,5.111,0,0,1-3.73-1.6,5.111,5.111,0,0,1-1.6-3.729V-770.5l-7.37,7.37-3.818-3.818L79.071-780.8l13.853,13.853-3.818,3.818-7.37-7.37v22.91h21.4a9.321,9.321,0,0,0,6.837-2.842,9.32,9.32,0,0,0,2.842-6.837,9.321,9.321,0,0,0-2.842-6.837,9.321,9.321,0,0,0-6.837-2.842H97.541V-774.4a19.09,19.09,0,0,0-5.372-13.586,17.539,17.539,0,0,0-13.275-5.683,17.68,17.68,0,0,0-13.32,5.683A19.006,19.006,0,0,0,60.157-774.4H58.47a12.611,12.611,0,0,0-9.324,3.863,13.046,13.046,0,0,0-3.818,9.546,12.988,12.988,0,0,0,3.9,9.457,12.752,12.752,0,0,0,9.419,3.952H71.079v5.328ZM79.071-768.009Z" transform="translate(-40 799)" fill="#f2801d"/>
</svg>

After

Width:  |  Height:  |  Size: 1.2 KiB

View File

@@ -0,0 +1,6 @@
<svg xmlns="http://www.w3.org/2000/svg" width="41" height="41" viewBox="0 0 41 41">
<g id="Group_58174" data-name="Group 58174" transform="translate(-34 -456)">
<circle id="Ellipse_1228" data-name="Ellipse 1228" cx="20.5" cy="20.5" r="20.5" transform="translate(34 456)" fill="#eaf7e1"/>
<path id="cloud_done_FILL0_wght300_GRAD0_opsz24" d="M68.852-767.843l5.3-5.3-1.085-1.085L68.837-770l-2.12-2.12-1.069,1.069ZM65-765a4.858,4.858,0,0,1-3.537-1.441A4.743,4.743,0,0,1,60-769.951a5,5,0,0,1,1.175-3.264,4.6,4.6,0,0,1,3-1.691,6.25,6.25,0,0,1,2.255-3.668A6.321,6.321,0,0,1,70.5-780a6.271,6.271,0,0,1,4.607,1.894A6.271,6.271,0,0,1,77-773.5v.5h.308a3.865,3.865,0,0,1,2.637,1.271A3.9,3.9,0,0,1,81-769a3.86,3.86,0,0,1-1.164,2.837A3.86,3.86,0,0,1,77-765Zm0-1.5H77a2.414,2.414,0,0,0,1.775-.725A2.414,2.414,0,0,0,79.5-769a2.414,2.414,0,0,0-.725-1.775A2.414,2.414,0,0,0,77-771.5H75.5v-2a4.82,4.82,0,0,0-1.463-3.538A4.82,4.82,0,0,0,70.5-778.5a4.82,4.82,0,0,0-3.538,1.463A4.82,4.82,0,0,0,65.5-773.5H65a3.373,3.373,0,0,0-2.475,1.025A3.373,3.373,0,0,0,61.5-770a3.373,3.373,0,0,0,1.025,2.475A3.373,3.373,0,0,0,65-766.5ZM70.5-772.5Z" transform="translate(-16.003 1248.998)" fill="#179f22"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.2 KiB

BIN
assets/Intro_Backup.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 70 KiB

BIN
assets/Intro_Share.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 73 KiB

View File

Before

Width:  |  Height:  |  Size: 22 KiB

After

Width:  |  Height:  |  Size: 22 KiB

View File

Before

Width:  |  Height:  |  Size: 96 KiB

After

Width:  |  Height:  |  Size: 96 KiB

View File

@@ -0,0 +1,23 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="153" height="153" viewBox="0 0 153 153">
<defs>
<filter id="Rectangle_6853" x="0" y="0" width="153" height="153" filterUnits="userSpaceOnUse">
<feOffset dy="3" input="SourceAlpha"/>
<feGaussianBlur stdDeviation="7.5" result="blur"/>
<feFlood flood-opacity="0.059"/>
<feComposite operator="in" in2="blur"/>
<feComposite in="SourceGraphic"/>
</filter>
</defs>
<g id="success_message_icon" transform="translate(22 19.5)">
<g transform="matrix(1, 0, 0, 1, -22, -19.5)" filter="url(#Rectangle_6853)">
<rect id="Rectangle_6853-2" data-name="Rectangle 6853" width="108" height="108" rx="54" transform="translate(22.5 19.5)" fill="#fff"/>
</g>
<rect id="Rectangle_6846" data-name="Rectangle 6846" width="96" height="96" rx="48" transform="translate(6.5 6)" fill="rgba(157,32,32,0.08)"/>
<g id="pending_activation_icon" transform="translate(-1328.424 -1133.959)">
<g id="Group_57154" data-name="Group 57154" transform="translate(1366.33 1167.162)">
<path id="gpp_maybe_FILL0_wght400_GRAD0_opsz48" d="M24.594,45.435a20.364,20.364,0,0,1-11.927-8.427A24.6,24.6,0,0,1,8,22.514V10.173L24.594,3.95l16.594,6.223V22.514a24.6,24.6,0,0,1-4.667,14.494A20.364,20.364,0,0,1,24.594,45.435Z" transform="translate(-8 -3.95)" fill="#db2e2e"/>
<path id="gpp_maybe_FILL0_wght400_GRAD0_opsz48-2" data-name="gpp_maybe_FILL0_wght400_GRAD0_opsz48" d="M16.9,26.751a1.768,1.768,0,1,0-1.243-.518A1.695,1.695,0,0,0,16.9,26.751Zm-1.553-6.939h3.107V9.093H15.347ZM16.9,19.19Z" transform="translate(-0.306 1.601)" fill="#fff"/>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.7 KiB

3
assets/Restore.svg Normal file
View File

@@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" width="24.994" height="24.994" viewBox="0 0 24.994 24.994">
<path id="history_FILL0_wght400_GRAD0_opsz48" d="M132.393-815.006a11.869,11.869,0,0,1-8.783-3.662,12.168,12.168,0,0,1-3.61-8.869h2.083a10.191,10.191,0,0,0,2.985,7.394,9.844,9.844,0,0,0,7.325,3.055,10.1,10.1,0,0,0,7.464-3.09,10.268,10.268,0,0,0,3.055-7.5,9.7,9.7,0,0,0-3.09-7.273,10.34,10.34,0,0,0-7.429-2.968,9.44,9.44,0,0,0-4.426,1.076,12.073,12.073,0,0,0-3.593,2.847h3.645v2.083h-7.255v-7.221h2.083v3.68a13.211,13.211,0,0,1,4.287-3.333A11.809,11.809,0,0,1,132.393-840a12.4,12.4,0,0,1,4.895.972,12.825,12.825,0,0,1,4.009,2.656,12.467,12.467,0,0,1,2.708,3.94,11.968,11.968,0,0,1,.989,4.86,12.214,12.214,0,0,1-.989,4.895,12.565,12.565,0,0,1-2.708,3.992,12.92,12.92,0,0,1-4.009,2.69A12.213,12.213,0,0,1,132.393-815.006Zm4.443-6.839-5.346-5.277v-7.429h2.083v6.561l4.756,4.652Z" transform="translate(-120 840)" fill="#f2801d"/>
</svg>

After

Width:  |  Height:  |  Size: 933 B

View File

@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" width="28px" height="28px"><path fill="#1e88e5" d="M38.59,39c-0.535,0.93-0.298,1.68-1.195,2.197C36.498,41.715,35.465,42,34.39,42H13.61 c-1.074,0-2.106-0.285-3.004-0.802C9.708,40.681,9.945,39.93,9.41,39l7.67-9h13.84L38.59,39z"/><path fill="#fbc02d" d="M27.463,6.999c1.073-0.002,2.104-0.716,3.001-0.198c0.897,0.519,1.66,1.27,2.197,2.201l10.39,17.996 c0.537,0.93,0.807,1.967,0.808,3.002c0.001,1.037-1.267,2.073-1.806,3.001l-11.127-3.005l-6.924-11.993L27.463,6.999z"/><path fill="#e53935" d="M43.86,30c0,1.04-0.27,2.07-0.81,3l-3.67,6.35c-0.53,0.78-1.21,1.4-1.99,1.85L30.92,30H43.86z"/><path fill="#4caf50" d="M5.947,33.001c-0.538-0.928-1.806-1.964-1.806-3c0.001-1.036,0.27-2.073,0.808-3.004l10.39-17.996 c0.537-0.93,1.3-1.682,2.196-2.2c0.897-0.519,1.929,0.195,3.002,0.197l3.459,11.009l-6.922,11.989L5.947,33.001z"/><path fill="#1565c0" d="M17.08,30l-6.47,11.2c-0.78-0.45-1.46-1.07-1.99-1.85L4.95,33c-0.54-0.93-0.81-1.96-0.81-3H17.08z"/><path fill="#2e7d32" d="M30.46,6.8L24,18L17.53,6.8c0.78-0.45,1.66-0.73,2.6-0.79L27.46,6C28.54,6,29.57,6.28,30.46,6.8z"/></svg>

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

@@ -0,0 +1,40 @@
import React from 'react';
import {Image} from 'react-native';
import {Column, Row, Text} from './ui';
import {Theme} from './ui/styleUtils';
import {ProfileInfo} from '../shared/googleCloudUtils';
import {useTranslation} from 'react-i18next';
import testIDProps from '../shared/commonUtil';
export const AccountInformation: React.FC<ProfileInfo> = ({email, picture}) => {
const {t} = useTranslation('AccountSelection');
return (
<Row style={{marginBottom: 21, columnGap: 11}}>
<Column align="center">
<Image
{...testIDProps('associatedAccountPicture')}
style={{height: 40, width: 40, borderRadius: 45}}
source={{
uri: picture,
}}
/>
</Column>
<Column>
<Row>
<Text
testID="associatedAccount"
style={{color: Theme.Colors.helpText, fontSize: 12}}>
{t('associatedAccount')}
</Text>
</Row>
<Row>
<Text
testID="associatedAccountEmail"
style={{fontSize: 13, fontFamily: 'Helvetica Neue'}}>
{email}
</Text>
</Row>
</Column>
</Row>
);
};

View File

@@ -0,0 +1,72 @@
import React from 'react';
import {useBackupScreen} from '../screens/backupAndRestore/BackupController';
import {BannerNotification} from './BannerNotification';
import {Theme} from './ui/styleUtils';
import {useTranslation} from 'react-i18next';
import {useBackupRestoreScreen} from '../screens/Settings/BackupRestoreController';
export const BackupAndRestoreAllScreenBanner: React.FC = () => {
const backUpController = useBackupScreen();
const restoreController = useBackupRestoreScreen();
const {t} = useTranslation('BackupAndRestoreBanner');
function backupFailure() {
const translation = t(
`backupFailure.${backUpController.backupErrorReason}`,
);
return (
<BannerNotification
message={translation}
onClosePress={backUpController.DISMISS}
key={`backupFailure-${backUpController.backupErrorReason}`}
testId={`backupFailure-${backUpController.backupErrorReason}`}
customStyle={Theme.Styles.dataBackupFailure}
/>
);
}
function restoreFailure() {
const translation = t(
`restoreFailure.${restoreController.restoreErrorReason}`,
);
return (
<BannerNotification
key={`restoreFailure-${restoreController.restoreErrorReason}`}
message={translation}
onClosePress={restoreController.DISMISS}
testId={`restoreFailure-${restoreController.restoreErrorReason}`}
customStyle={Theme.Styles.dataBackupFailure}
/>
);
}
return (
<>
{backUpController.isBackingUpSuccess && (
<BannerNotification
message={t('backupSuccessful')}
onClosePress={backUpController.DISMISS}
key={'dataBackupSuccess'}
testId={'dataBackupSuccess'}
customStyle={Theme.Styles.dataBackupSuccess}
/>
)}
{backUpController.isBackingUpFailure && backupFailure()}
{restoreController.isBackUpRestoreSuccess && (
<BannerNotification
message={t('restoreSuccessful')}
onClosePress={restoreController.DISMISS}
key={'restoreBackupSuccess'}
testId={'restoreBackupSuccess'}
customStyle={Theme.Styles.dataBackupSuccess}
/>
)}
{restoreController.isBackUpRestoreFailure && restoreFailure()}
</>
);
};

View File

@@ -7,13 +7,19 @@ import testIDProps from '../shared/commonUtil';
export const BannerNotification: React.FC<BannerNotificationProps> = props => { export const BannerNotification: React.FC<BannerNotificationProps> = props => {
return ( return (
<View {...testIDProps(props.testId)}> <View {...testIDProps(props.testId)} style={props.customStyle}>
<Row style={Theme.Styles.downloadingVcPopUp}> <Row
style={
props.customStyle
? Theme.Styles
.backupRestoreBanner /* TODO: rename to style without mentioning any specific flow */
: Theme.Styles.downloadingVcPopUp
}>
<Text color={Theme.Colors.whiteText} weight="semibold" size="smaller"> <Text color={Theme.Colors.whiteText} weight="semibold" size="smaller">
{props.message} {props.message}
</Text> </Text>
<Icon <Icon
testID="close" {...testIDProps('close')}
name="close" name="close"
onPress={props.onClosePress} onPress={props.onClosePress}
color={Theme.Colors.whiteText} color={Theme.Colors.whiteText}
@@ -28,4 +34,5 @@ export interface BannerNotificationProps {
message: string; message: string;
onClosePress: () => void; onClosePress: () => void;
testId: string; testId: string;
customStyle?: Object;
} }

View File

@@ -15,7 +15,7 @@ export const CloudSignOn: React.FC<CloudSignOnProps> = props => {
}); });
useEffect(() => { useEffect(() => {
if (response.type == 'success') { if (response?.type == 'success') {
CloudStorage.setGoogleDriveAccessToken( CloudStorage.setGoogleDriveAccessToken(
response.authentication.accessToken, response.authentication.accessToken,
); );
@@ -37,6 +37,7 @@ export const CloudSignOn: React.FC<CloudSignOnProps> = props => {
} }
}); });
}} }}
margin={[0, 0, 0, 0]}
/> />
); );
}; };

View File

@@ -1,15 +1,40 @@
import React, {useState} from 'react'; import React, {useEffect, useState} from 'react';
import {useTranslation} from 'react-i18next'; import {useTranslation} from 'react-i18next';
import {Pressable} from 'react-native'; import {Linking, Pressable} from 'react-native';
import {Modal} from './ui/Modal'; import {Modal} from './ui/Modal';
import {ScrollView} from 'react-native-gesture-handler'; import {ScrollView} from 'react-native-gesture-handler';
import {Column, Text} from './ui'; import {Column, Text} from './ui';
import {Theme} from './ui/styleUtils'; import {Theme} from './ui/styleUtils';
import {BackupAndRestoreAllScreenBanner} from './BackupAndRestoreAllScreenBanner';
import getAllConfigurations from '../shared/commonprops/commonProps';
export const HelpScreen: React.FC<HelpScreenProps> = props => { export const HelpScreen: React.FC<HelpScreenProps> = props => {
const {t} = useTranslation('HelpScreen'); const {t} = useTranslation('HelpScreen');
const [showHelpPage, setShowHelpPage] = useState(false); const [showHelpPage, setShowHelpPage] = useState(false);
var [injiHelpUrl, setInjiHelpUrl] = useState('');
useEffect(() => {
getAllConfigurations().then(response => {
setInjiHelpUrl(response.aboutInjiUrl);
});
}, []);
const hyperLinkString = (
word: string,
urlString: string,
extension?: string,
) => {
return (
<Text
style={Theme.TextStyles.urlLinkText}
onPress={() => {
urlString && Linking.openURL(urlString + extension);
}}>
{t(word)}
</Text>
);
};
return ( return (
<React.Fragment> <React.Fragment>
@@ -28,42 +53,108 @@ export const HelpScreen: React.FC<HelpScreenProps> = props => {
onDismiss={() => { onDismiss={() => {
setShowHelpPage(!showHelpPage); setShowHelpPage(!showHelpPage);
}}> }}>
<BackupAndRestoreAllScreenBanner />
<ScrollView> <ScrollView>
<Column fill padding="10" align="space-between"> <Column fill padding="10" align="space-between">
<Text margin="7" style={Theme.TextStyles.header}> <Text style={Theme.TextStyles.helpHeader}>{t('whatIsAnId?')}</Text>
{t('whatIsDigitalCredential?')} <Text style={Theme.TextStyles.helpDetails}>{t('detail-10')}</Text>
<Text style={Theme.TextStyles.helpHeader}>
{t('whatAreTheDifferentTypesOfId?')}
</Text>
<Text margin="5">
<Text style={Theme.TextStyles.helpDetails}>{t('detail-11')}</Text>
<Text
style={Theme.TextStyles.urlLinkText}
onPress={() => {
Linking.openURL(
'https://docs.mosip.io/1.2.0/id-lifecycle-management/identifiers',
);
}}>
{t('here')}
</Text>
</Text>
<Text style={Theme.TextStyles.helpHeader}>
{t('whereCanIFindTheseIds?')}
</Text>
<Text style={Theme.TextStyles.helpDetails}>{t('detail-12a')}</Text>
<Text style={Theme.TextStyles.helpDetails}>{t('detail-12b')}</Text>
<Text style={Theme.TextStyles.helpDetails}>{t('detail-12c')}</Text>
<Text style={Theme.TextStyles.helpHeader}>
{t('whatIsaDigitalCredential?')}
</Text> </Text>
<Text style={Theme.TextStyles.helpDetails}>{t('detail-1')}</Text> <Text style={Theme.TextStyles.helpDetails}>{t('detail-1')}</Text>
<Text margin="7" style={Theme.TextStyles.header}> <Text style={Theme.TextStyles.helpHeader}>
{t('whatCanDoWithDigitalCredential?')} {t('whatCanWeDoWithDigitalCredential?')}
</Text> </Text>
<Text style={Theme.TextStyles.helpDetails}>{t('detail-2')}</Text> <Text style={Theme.TextStyles.helpDetails}>{t('detail-2')}</Text>
<Text margin="7" style={Theme.TextStyles.header}> <Text style={Theme.TextStyles.helpHeader}>
{t('whatIsAVerifiableCredential?')}
</Text>
<Text style={Theme.TextStyles.helpDetails}>{t('detail-15')}</Text>
<Text style={Theme.TextStyles.helpHeader}>
{t('howToAddCard?')} {t('howToAddCard?')}
</Text> </Text>
<Text style={Theme.TextStyles.helpDetails}>{t('detail-3')}</Text> <Text style={Theme.TextStyles.helpDetails}>
<Text margin="7" style={Theme.TextStyles.header}> {t('detail-3')}
{t('howToRemoveCardFromWallet?')} {hyperLinkString(
'here',
injiHelpUrl,
'/end-user-guide#downloading-vc',
)}
</Text> </Text>
<Text style={Theme.TextStyles.helpDetails}>{t('detail-4')}</Text> <Text style={Theme.TextStyles.helpHeader}>
<Text margin="7" style={Theme.TextStyles.header}> {t('canIAddMultipleCards?')}
{t('canWeAddMultipleCards?')}
</Text> </Text>
<Text style={Theme.TextStyles.helpDetails}>{t('detail-5')}</Text> <Text style={Theme.TextStyles.helpDetails}>{t('detail-5')}</Text>
<Text margin="7" style={Theme.TextStyles.header}> <Text style={Theme.TextStyles.helpHeader}>
{t('howToShareCard?')} {t('whyDoesMyVcSayActivationIsPending?')}
</Text> </Text>
<Text style={Theme.TextStyles.helpDetails}>{t('detail-6')}</Text> <Text style={Theme.TextStyles.helpDetails}>
<Text margin="7" style={Theme.TextStyles.header}> {t('detail-13')}
{t('howToActivateCardForOnlineLogin?')} {hyperLinkString(
'here',
injiHelpUrl,
'/end-user-guide#activating-a-vc',
)}
</Text>
<Text style={Theme.TextStyles.helpHeader}>
{t('whatDoYouMeanByActivatedForOnlineLogin?')}
</Text>
<Text style={Theme.TextStyles.helpDetails}>
{t('detail-14a')}
{hyperLinkString(
'here',
injiHelpUrl,
'/overview/features/feature-workflows#id-4.-qr-code-login-process',
)}
</Text>
<Text style={Theme.TextStyles.helpDetails}>{t('detail-14b')}</Text>
<Text style={Theme.TextStyles.helpHeader}>
{t('howToActivateACardForOnlineLogin?')}
</Text> </Text>
<Text style={Theme.TextStyles.helpDetails}>{t('detail-7')}</Text> <Text style={Theme.TextStyles.helpDetails}>{t('detail-7')}</Text>
<Text margin="7" style={Theme.TextStyles.header}> <Text style={Theme.TextStyles.helpHeader}>
{t('howToViewActivity?')} {t('howToShareACard?')}
</Text>
<Text style={Theme.TextStyles.helpDetails}>{t('detail-6')}</Text>
<Text style={Theme.TextStyles.header}>
{t('howToRemoveACardFromTheWallet?')}
</Text>
<Text style={Theme.TextStyles.helpDetails}>
{t('detail-4a')}
{hyperLinkString(
'here',
injiHelpUrl,
'/end-user-guide#deleting-a-vc',
)}
{t('detail-4b')}
</Text>
<Text style={Theme.TextStyles.helpHeader}>
{t('howToViewActivityLogs?')}
</Text> </Text>
<Text style={Theme.TextStyles.helpDetails}>{t('detail-8')}</Text> <Text style={Theme.TextStyles.helpDetails}>{t('detail-8')}</Text>
<Text margin="7" style={Theme.TextStyles.header}> <Text style={Theme.TextStyles.helpHeader}>
{t('whatCanDoBiometricsChanged?')} {t('whatHappensWhenAndroidKeystoreBiometricIsChanged?')}
</Text> </Text>
<Text style={Theme.TextStyles.helpDetails}>{t('detail-9')}</Text> <Text style={Theme.TextStyles.helpDetails}>{t('detail-9')}</Text>
</Column> </Column>

View File

@@ -0,0 +1,70 @@
import React from 'react';
import {View} from 'react-native';
import {Column, Row, Text} from './ui';
import {Theme} from './ui/styleUtils';
import testIDProps from '../shared/commonUtil';
export const SectionLayout: React.FC<SectionLayoutProps> = ({
headerIcon,
headerText,
children,
testId,
marginBottom,
}) => {
return (
<View
{...testIDProps(testId)}
style={{
marginLeft: 18,
marginRight: 18,
marginTop: 16,
marginBottom,
rowGap: 2,
}}>
<Row
style={{
alignItems: 'center',
padding: 16,
backgroundColor: Theme.Colors.whiteBackgroundColor,
borderTopLeftRadius: 6,
borderTopRightRadius: 6,
}}>
{headerIcon}
<Text
style={{
justifyContent: 'center',
paddingLeft: 12,
fontFamily: 'Inter_500Medium',
fontWeight: '600',
fontSize: 14,
letterSpacing: 0,
lineHeight: 17,
}}
testID={`${testId}Header`}>
{headerText}
</Text>
</Row>
<Row
style={{
padding: 16,
backgroundColor: Theme.Colors.whiteBackgroundColor,
borderBottomLeftRadius: 6,
borderBottomRightRadius: 6,
}}>
<Column fill>{children}</Column>
</Row>
</View>
);
};
SectionLayout.defaultProps = {
marginBottom: 0,
};
export type SectionLayoutProps = {
headerIcon: React.ReactNode;
headerText: string;
children: React.ReactNode;
testId: string;
marginBottom?: number;
};

View File

@@ -4,7 +4,6 @@ import React from 'react';
import {setTextColor} from './VCUtils'; import {setTextColor} from './VCUtils';
import LinearGradient from 'react-native-linear-gradient'; import LinearGradient from 'react-native-linear-gradient';
import ShimmerPlaceHolder from 'react-native-shimmer-placeholder'; import ShimmerPlaceHolder from 'react-native-shimmer-placeholder';
import {Tooltip} from 'react-native-elements';
export const VCItemField = ({ export const VCItemField = ({
verifiableCredential, verifiableCredential,
@@ -39,25 +38,23 @@ export const VCItemField = ({
style={[Theme.Styles.subtitle]}> style={[Theme.Styles.subtitle]}>
{fieldName} {fieldName}
</Text> </Text>
<Tooltip {Array.isArray(fieldValue) ? (
toggleOnPress={fieldValue.length > 20} fieldValue.map(field => (
containerStyle={{ <Text
width: 200, testID={`${fieldName}Value`}
height: null, weight="semibold"
overflow: 'hidden', style={[Theme.Styles.subtitle, setTextColor(wellknown)]}>
}} {field}
skipAndroidStatusBar={true} </Text>
backgroundColor={Theme.Colors.Icon} ))
popover={<Text>{fieldValue}</Text>}> ) : (
<Text <Text
testID={`${fieldName}Value`} testID={`${fieldName}Value`}
weight="semibold" weight="semibold"
numLines={1}
ellipsizeMode={'tail'}
style={[Theme.Styles.subtitle, setTextColor(wellknown)]}> style={[Theme.Styles.subtitle, setTextColor(wellknown)]}>
{fieldValue} {fieldValue}
</Text> </Text>
</Tooltip> )}
</Column> </Column>
); );
}; };

View File

@@ -58,8 +58,13 @@ export const getFieldValue = (
return getLocalizedField( return getLocalizedField(
getFullAddress(verifiableCredential?.credentialSubject), getFullAddress(verifiableCredential?.credentialSubject),
); );
default: default: {
return getLocalizedField(verifiableCredential?.credentialSubject[field]); const fieldValue = verifiableCredential?.credentialSubject[field];
if (Array.isArray(fieldValue) && typeof fieldValue[0] != Object) {
return fieldValue;
}
return getLocalizedField(fieldValue);
}
} }
}; };

View File

@@ -1,5 +1,5 @@
import {useFocusEffect} from '@react-navigation/native'; import {useFocusEffect} from '@react-navigation/native';
import React from 'react'; import React, {Fragment} from 'react';
import {useTranslation} from 'react-i18next'; import {useTranslation} from 'react-i18next';
import {BackHandler, Dimensions, View} from 'react-native'; import {BackHandler, Dimensions, View} from 'react-native';
import {Button, Column, Row, Text} from '.'; import {Button, Column, Row, Text} from '.';
@@ -10,31 +10,69 @@ import {Modal} from './Modal';
export const Error: React.FC<ErrorProps> = props => { export const Error: React.FC<ErrorProps> = props => {
const {t} = useTranslation('common'); const {t} = useTranslation('common');
const tryAgainButtonProps = {
onPress: props.tryAgain,
title: t(props.tryAgainButtonTranslationKey),
testID: props.tryAgainButtonTranslationKey,
};
if (!props.goBackButtonVisible) {
tryAgainButtonProps['width'] = Dimensions.get('screen').width * 0.54;
tryAgainButtonProps['type'] = 'outline';
}
const errorContent = () => { const errorContent = () => {
return ( return (
<View style={{alignItems: 'center'}}> <Fragment>
<View> <View style={{alignItems: 'center'}}>
<Row align="center" style={Theme.ErrorStyles.image}> <View>
{props.image} <Row align="center" style={Theme.ErrorStyles.image}>
</Row> {props.image}
<Text style={Theme.ErrorStyles.title} testID="errorTitle"> </Row>
{props.title} <Text style={Theme.ErrorStyles.title} testID="errorTitle">
</Text> {props.title}
<Text style={Theme.ErrorStyles.message} testID="errorMessage"> </Text>
{props.message} <Text style={Theme.ErrorStyles.message} testID="errorMessage">
</Text> {props.message}
</Text>
{props.helpText && (
<Text style={Theme.ErrorStyles.message} testID="errorHelpText">
{props.helpText}
</Text>
)}
</View>
{!props.alignActionsOnEnd && (
<Fragment>
{props.tryAgain && <Button {...tryAgainButtonProps} />}
{props.goBackButtonVisible && (
<Button
onPress={props.goBack}
width={Dimensions.get('screen').width * 0.54}
title={t('goBack')}
type="clear"
testID="goBack"
/>
)}
</Fragment>
)}
</View> </View>
{props.tryAgain && ( {props.alignActionsOnEnd && (
<Button <Column fill crossAlign="center" align="flex-end">
onPress={props.tryAgain} <Row style={{marginHorizontal: 30}}>
width={Dimensions.get('screen').width * 0.54} {props.tryAgain && (
title={t('tryAgain')} <Button styles={{borderRadius: 9}} {...tryAgainButtonProps} />
type="outline" )}
testID="tryAgain" </Row>
/> <Row>
<Button
onPress={props.goBack}
title={t('goBack')}
type="clear"
testID="goBack"
/>
</Row>
</Column>
)} )}
</View> </Fragment>
); );
}; };
@@ -62,8 +100,12 @@ export const Error: React.FC<ErrorProps> = props => {
...Theme.ModalStyles.modal, ...Theme.ModalStyles.modal,
backgroundColor: Theme.Colors.whiteBackgroundColor, backgroundColor: Theme.Colors.whiteBackgroundColor,
}} }}
showClose={props.showClose}
{...testIDProps(props.testID)}> {...testIDProps(props.testID)}>
<Column fill safe align="space-evenly"> <Column
fill
safe
align={props.alignActionsOnEnd ? 'space-around' : 'space-evenly'}>
{errorContent()} {errorContent()}
</Column> </Column>
</Modal> </Modal>
@@ -86,16 +128,25 @@ export const Error: React.FC<ErrorProps> = props => {
Error.defaultProps = { Error.defaultProps = {
isModal: false, isModal: false,
goBackButtonVisible: false,
alignActionsOnEnd: false,
showClose: true,
tryAgainButtonTranslationKey: 'tryAgain',
}; };
export interface ErrorProps { export interface ErrorProps {
isModal?: boolean; isModal?: boolean;
isVisible: boolean; isVisible: boolean;
showClose?: boolean;
alignActionsOnEnd?: boolean;
title: string; title: string;
message: string; message: string;
helpText?: string;
image: React.ReactElement; image: React.ReactElement;
goBack?: () => void; goBack?: () => void;
goBackButtonVisible?: boolean;
tryAgain: null | (() => void); tryAgain: null | (() => void);
tryAgainButtonTranslationKey?: string;
testID: string; testID: string;
onDismiss?: () => void; onDismiss?: () => void;
} }

View File

@@ -93,4 +93,5 @@ interface LayoutProps {
pY?: number | string | undefined; pY?: number | string | undefined;
pX?: number | string | undefined; pX?: number | string | undefined;
safe?: boolean; safe?: boolean;
children: React.ReactNode;
} }

View File

@@ -1,11 +1,9 @@
import React, {Fragment, useEffect} from 'react'; import React, {Fragment, useEffect} from 'react';
import {useTranslation} from 'react-i18next'; import {useTranslation} from 'react-i18next';
import {BackHandler, SafeAreaView, View} from 'react-native'; import {BackHandler, SafeAreaView, View} from 'react-native';
import Spinner from 'react-native-spinkit';
import {Button, Centered, Column, Row, Text} from '../../components/ui'; import {Button, Centered, Column, Row, Text} from '../../components/ui';
import {Theme} from './styleUtils'; import {Theme} from './styleUtils';
import testIDProps from '../../shared/commonUtil'; import {LoaderAnimation} from './LoaderAnimation';
import {SvgImage} from './svg';
export const Loader: React.FC<LoaderProps> = props => { export const Loader: React.FC<LoaderProps> = props => {
const {t} = useTranslation('ScanScreen'); const {t} = useTranslation('ScanScreen');
@@ -50,14 +48,7 @@ export const Loader: React.FC<LoaderProps> = props => {
crossAlign="center" crossAlign="center"
fill> fill>
<Column margin="24 0" align="space-around"> <Column margin="24 0" align="space-around">
{SvgImage.ProgressIcon()} <LoaderAnimation />
<View {...testIDProps('threeDotsLoader')}>
<Spinner
type="ThreeBounce"
color={Theme.Colors.Loading}
style={{marginLeft: 6}}
/>
</View>
</Column> </Column>
{(props.isHintVisible || props.onCancel) && ( {(props.isHintVisible || props.onCancel) && (
<Column style={Theme.SelectVcOverlayStyles.timeoutHintContainer}> <Column style={Theme.SelectVcOverlayStyles.timeoutHintContainer}>

View File

@@ -0,0 +1,29 @@
import React, {Fragment} from 'react';
import {View} from 'react-native';
import Spinner from 'react-native-spinkit';
import {Theme} from './styleUtils';
import testIDProps from '../../shared/commonUtil';
import {SvgImage} from './svg';
export const LoaderAnimation: React.FC<LoaderAnimationProps> = ({showLogo}) => {
return (
<Fragment>
{showLogo && SvgImage.ProgressIcon()}
<View {...testIDProps('threeDotsLoader')}>
<Spinner
type="ThreeBounce"
color={Theme.Colors.Loading}
style={{marginLeft: 6}}
/>
</View>
</Fragment>
);
};
LoaderAnimation.defaultProps = {
showLogo: true,
};
interface LoaderAnimationProps {
showLogo?: boolean;
}

View File

@@ -42,12 +42,9 @@ export const Modal: React.FC<ModalProps> = props => {
<Row <Row
fill fill
align={props.headerLeft ? 'flex-start' : 'center'} align={props.headerLeft ? 'flex-start' : 'center'}
margin={'16 0 0 0'}> margin={props.arrowLeft ? '16 0 0 -15' : '16 0 0 10'}>
<Column> <Column>
<Text <Text testID={props.testID} style={Theme.TextStyles.header}>
testID={props.testID}
style={Theme.TextStyles.header}
margin="0 0 0 -15">
{props.headerTitle || props.headerLeft} {props.headerTitle || props.headerLeft}
</Text> </Text>
{!props.requester ? ( {!props.requester ? (
@@ -110,4 +107,5 @@ export interface ModalProps {
headerLeft?: React.ReactElement; headerLeft?: React.ReactElement;
arrowLeft?: boolean; arrowLeft?: boolean;
onShow?: () => void; onShow?: () => void;
children: React.ReactNode;
} }

View File

@@ -22,7 +22,8 @@ export const Text: React.FC<TextProps> = (props: TextProps) => {
style={textStyles} style={textStyles}
numberOfLines={props.numLines} numberOfLines={props.numLines}
ellipsizeMode={props.ellipsizeMode} ellipsizeMode={props.ellipsizeMode}
accessible={props.accessible}> accessible={props.accessible}
onPress={props.onPress}>
{props.children} {props.children}
</RNText> </RNText>
); );
@@ -41,4 +42,5 @@ interface TextProps {
ellipsizeMode?: 'head' | 'middle' | 'tail' | 'clip' | undefined; ellipsizeMode?: 'head' | 'middle' | 'tail' | 'clip' | undefined;
style?: StyleProp<TextStyle>; style?: StyleProp<TextStyle>;
accessible?: boolean | true; accessible?: boolean | true;
onPress?: () => void;
} }

View File

@@ -0,0 +1,41 @@
import React from 'react';
import {View} from 'react-native';
import {Text} from '../ui/Text';
export const Timestamp: React.FC<TimestampProps> = props => {
function formattedDate(): React.ReactNode {
const date = new Date(props.time);
const day = date.getDate();
const month = date.toLocaleString('default', {month: 'long'});
const year = date.getFullYear();
const formattedHours = (date.getHours() % 12 || 12)
.toString()
.padStart(2, '0');
const formattedMinutes = date.getMinutes().toString().padStart(2, '0');
const period = date.getHours() >= 12 ? 'PM' : 'AM';
return `${day} ${month} ${year}, ${formattedHours}:${formattedMinutes} ${period}`;
}
return (
<View>
<Text
testID={`${props.testId}Time`}
size="regular"
style={{
fontFamily: 'Inter_500Medium',
fontWeight: '600',
fontSize: 14,
letterSpacing: 0,
lineHeight: 17,
}}>
{formattedDate()}
</Text>
</View>
);
};
interface TimestampProps {
time: number;
testId: string;
}

View File

@@ -23,8 +23,12 @@ import SuccessLogo from '../../assets/Success_Message_Icon1.svg';
import NoInternetConnection from '../../assets/No_Internet_Connection.svg'; import NoInternetConnection from '../../assets/No_Internet_Connection.svg';
import SomethingWentWrong from '../../assets/Something_Went_Wrong.svg'; import SomethingWentWrong from '../../assets/Something_Went_Wrong.svg';
import MagnifierZoom from '../../assets/Magnifier_Zoom.svg'; import MagnifierZoom from '../../assets/Magnifier_Zoom.svg';
import GoogleDriveIcon from '../../assets/google-drive-28.svg';
import {displayType} from '../../machines/issuersMachine'; import {displayType} from '../../machines/issuersMachine';
import {IssuerProps} from '../openId4VCI/Issuer'; import {IssuerProps} from '../openId4VCI/Issuer';
import Backup from '../../assets/Backup.svg';
import Restore from '../../assets/Restore.svg';
import PermissionDenied from '../../assets/Permission_Denied.svg';
import { import {
EsignetMosipVCItemContentProps, EsignetMosipVCItemContentProps,
ExistingMosipVCItemContentProps, ExistingMosipVCItemContentProps,
@@ -32,6 +36,7 @@ import {
import {VCMetadata} from '../../shared/VCMetadata'; import {VCMetadata} from '../../shared/VCMetadata';
import {VerifiableCredential} from '../../types/VC/ExistingMosipVC/vc'; import {VerifiableCredential} from '../../types/VC/ExistingMosipVC/vc';
import {ProfileIcon} from '../ProfileIcon'; import {ProfileIcon} from '../ProfileIcon';
import CloudUploadDoneIcon from '../../assets/Cloud_Upload_Done_Icon.svg';
export class SvgImage { export class SvgImage {
static MosipLogo(props: LogoProps) { static MosipLogo(props: LogoProps) {
@@ -231,10 +236,34 @@ export class SvgImage {
); );
} }
static DataBackupIcon(width, height) {
return (
<Backup
{...testIDProps('dataBackupIcon')}
color1={Theme.Colors.linearGradientStart}
color2={Theme.Colors.linearGradientEnd}
width={width}
height={height}
/>
);
}
static RestoreIcon() {
return <Restore {...testIDProps('restoreIcon')} />;
}
static SuccessLogo() { static SuccessLogo() {
return <SuccessLogo {...testIDProps('SuccessLogo')} />; return <SuccessLogo {...testIDProps('SuccessLogo')} />;
} }
static PermissionDenied() {
return <PermissionDenied {...testIDProps('permissionDeniedImage')} />;
}
static CloudUploadDoneIcon() {
return <CloudUploadDoneIcon {...testIDProps('cloudUploadDoneIcon')} />;
}
static NoInternetConnection() { static NoInternetConnection() {
return ( return (
<NoInternetConnection {...testIDProps('noInternetConnectionImage')} /> <NoInternetConnection {...testIDProps('noInternetConnectionImage')} />
@@ -248,6 +277,16 @@ export class SvgImage {
static MagnifierZoom() { static MagnifierZoom() {
return <MagnifierZoom />; return <MagnifierZoom />;
} }
static GoogleDriveIcon(width, height) {
return (
<GoogleDriveIcon
width={width}
height={height}
{...testIDProps('googleDriveIcon')}
/>
);
}
} }
function getIssuerLogo(props: displayType) { function getIssuerLogo(props: displayType) {

View File

@@ -25,6 +25,7 @@ const Colors = {
DimGray: '#737373', DimGray: '#737373',
platinumGrey: '#EDEDED', platinumGrey: '#EDEDED',
Orange: '#F2811D', Orange: '#F2811D',
Blue: '#0000FF',
LightGrey: '#F7F7F7', LightGrey: '#F7F7F7',
ShadeOfGrey: '#6F6F6F', ShadeOfGrey: '#6F6F6F',
mediumDarkGrey: '#7B7B7B', mediumDarkGrey: '#7B7B7B',
@@ -128,6 +129,7 @@ export const DefaultTheme = {
warningLogoBgColor: Colors.warningLogoBg, warningLogoBgColor: Colors.warningLogoBg,
tooltipIcon: Colors.toolTip, tooltipIcon: Colors.toolTip,
toolTipPointerColor: Colors.toolTipPointer, toolTipPointerColor: Colors.toolTipPointer,
urlLink: Colors.Orange,
}, },
Styles: StyleSheet.create({ Styles: StyleSheet.create({
title: { title: {
@@ -218,6 +220,27 @@ export const DefaultTheme = {
position: 'relative', position: 'relative',
paddingHorizontal: 12, paddingHorizontal: 12,
}, },
backupRestoreBanner: {
alignItems: 'center',
justifyContent: 'space-between',
height: 39,
position: 'relative',
paddingHorizontal: 12,
},
dataBackupFailure: {
justifyContent: 'space-between',
backgroundColor: Colors.Red,
height: 39,
position: 'relative',
paddingHorizontal: 12,
},
dataBackupSuccess: {
justifyContent: 'space-between',
backgroundColor: Colors.Green,
height: 39,
position: 'relative',
paddingHorizontal: 12,
},
homeScreenContainer: { homeScreenContainer: {
alignItems: 'center', alignItems: 'center',
justifyContent: 'center', justifyContent: 'center',
@@ -555,7 +578,7 @@ export const DefaultTheme = {
}, },
idInputContainer: { idInputContainer: {
marginTop: 20, marginTop: 20,
marginRight: Dimensions.get('window').width * 0.26, width: Dimensions.get('window').width * 0.86,
}, },
idInputPicker: { idInputPicker: {
width: Dimensions.get('window').width * 0.32, width: Dimensions.get('window').width * 0.32,
@@ -654,6 +677,19 @@ export const DefaultTheme = {
height: 50, height: 50,
marginTop: -10, marginTop: -10,
}, },
keyboardAvoidStyle: {
flex: 1,
paddingVertical: 40,
paddingHorizontal: 24,
alignItems: 'center',
justifyContent: 'space-between',
},
passwordKeyboardAvoidStyle: {
flex: 1,
backgroundColor: Colors.White,
paddingVertical: 40,
paddingHorizontal: 24,
},
}), }),
QrCodeStyles: StyleSheet.create({ QrCodeStyles: StyleSheet.create({
magnifierZoom: { magnifierZoom: {
@@ -748,11 +784,23 @@ export const DefaultTheme = {
fontFamily: 'Inter_600SemiBold', fontFamily: 'Inter_600SemiBold',
lineHeight: 18, lineHeight: 18,
}, },
helpHeader: {
color: Colors.Black,
fontFamily: 'Inter_700Bold',
fontSize: 18,
lineHeight: 19,
paddingTop: 5,
margin: 7,
},
helpDetails: { helpDetails: {
margin: 5, margin: 5,
color: Colors.Gray44, color: Colors.Gray44,
fontFamily: 'Inter_600SemiBold', fontFamily: 'Inter_600SemiBold',
}, },
urlLinkText: {
color: Colors.Orange,
fontFamily: 'Inter_600SemiBold',
},
aboutDetails: { aboutDetails: {
color: Colors.Black, color: Colors.Black,
fontSize: 18, fontSize: 18,
@@ -1029,12 +1077,47 @@ export const DefaultTheme = {
marginVertical: 6, marginVertical: 6,
}, },
}), }),
BackupStyles: StyleSheet.create({
newStyles: {
backgroundColor: Colors.Orange,
paddingHorizontal: 10,
borderRadius: 3,
},
}),
UpdateModalStyles: StyleSheet.create({ UpdateModalStyles: StyleSheet.create({
modal: { modal: {
width: Dimensions.get('screen').width, width: Dimensions.get('screen').width,
height: Dimensions.get('screen').height, height: Dimensions.get('screen').height,
}, },
}), }),
BackupAndRestoreStyles: StyleSheet.create({
backupProgressText: {
fontFamily: 'Inter_400Regular',
fontSize: 14,
color: Colors.Gray44,
},
backupProcessInfo: {
fontWeight: 'bold',
paddingHorizontal: 20,
textAlign: 'center',
},
cloudInfo: {
paddingHorizontal: 20,
textAlign: 'center',
paddingVertical: 15,
},
cloudLabel: {
fontWeight: '600',
paddingHorizontal: 10,
textAlign: 'center',
paddingTop: 15,
fontFamily: 'Inter_500Medium',
fontSize: 14,
letterSpacing: 0,
lineHeight: 17,
minHeight: 50,
},
}),
TextEditOverlayStyles: StyleSheet.create({ TextEditOverlayStyles: StyleSheet.create({
overlay: { overlay: {
elevation: 5, elevation: 5,
@@ -1417,10 +1500,11 @@ export const DefaultTheme = {
ICON_LARGE_SIZE: 33, ICON_LARGE_SIZE: 33,
CloseCard: require('../../../assets/Card_Bg1.png'), CloseCard: require('../../../assets/Card_Bg1.png'),
OpenCard: require('../../../assets/Card_Bg1.png'), OpenCard: require('../../../assets/Card_Bg1.png'),
sharingIntro: require('../../../assets/Intro_Secure_Sharing.png'), IntroWelcome: require('../../../assets/Intro_Unlock.png'),
walletIntro: require('../../../assets/Intro_Wallet_Binding.png'), SecureSharing: require('../../../assets/Intro_Secure_Sharing.png'),
IntroScanner: require('../../../assets/Intro_Scanner.png'), DigitalWallet: require('../../../assets/Intro_Wallet.png'),
protectPrivacy: require('../../../assets/Intro_Unlock_Method.png'), IntroShare: require('../../../assets/Intro_Share.png'),
IntroBackup: require('../../../assets/Intro_Backup.png'),
elevation(level: ElevationLevel): ViewStyle { elevation(level: ElevationLevel): ViewStyle {
// https://ethercreative.github.io/react-native-shadow-generator/ // https://ethercreative.github.io/react-native-shadow-generator/

View File

@@ -25,6 +25,7 @@ const Colors = {
DimGray: '#737373', DimGray: '#737373',
platinumGrey: '#EDEDED', platinumGrey: '#EDEDED',
Orange: '#F2811D', Orange: '#F2811D',
Blue: '#0000FF',
LightOrange: '#FDF1E6', LightOrange: '#FDF1E6',
LightGrey: '#FAF9FF', LightGrey: '#FAF9FF',
ShadeOfGrey: '#6F6F6F', ShadeOfGrey: '#6F6F6F',
@@ -131,6 +132,7 @@ export const PurpleTheme = {
warningLogoBgColor: Colors.warningLogoBg, warningLogoBgColor: Colors.warningLogoBg,
tooltipIcon: Colors.tooltip, tooltipIcon: Colors.tooltip,
toolTipPointerColor: Colors.toolTipPointer, toolTipPointerColor: Colors.toolTipPointer,
urlLink: Colors.Purple,
}, },
Styles: StyleSheet.create({ Styles: StyleSheet.create({
title: { title: {
@@ -223,6 +225,27 @@ export const PurpleTheme = {
position: 'relative', position: 'relative',
paddingHorizontal: 12, paddingHorizontal: 12,
}, },
backupRestoreBanner: {
alignItems: 'center',
justifyContent: 'space-between',
height: 39,
position: 'relative',
paddingHorizontal: 12,
},
dataBackupFailure: {
justifyContent: 'space-between',
backgroundColor: Colors.Red,
height: 39,
position: 'relative',
paddingHorizontal: 12,
},
dataBackupSuccess: {
justifyContent: 'space-between',
backgroundColor: Colors.Green,
height: 39,
position: 'relative',
paddingHorizontal: 12,
},
homeScreenContainer: { homeScreenContainer: {
alignItems: 'center', alignItems: 'center',
justifyContent: 'center', justifyContent: 'center',
@@ -559,7 +582,7 @@ export const PurpleTheme = {
}, },
idInputContainer: { idInputContainer: {
marginTop: 20, marginTop: 20,
marginRight: Dimensions.get('window').width * 0.26, width: Dimensions.get('window').width * 0.86,
}, },
idInputPicker: { idInputPicker: {
width: Dimensions.get('window').width * 0.32, width: Dimensions.get('window').width * 0.32,
@@ -658,6 +681,19 @@ export const PurpleTheme = {
height: 50, height: 50,
marginTop: -10, marginTop: -10,
}, },
keyboardAvoidStyle: {
flex: 1,
paddingVertical: 40,
paddingHorizontal: 24,
alignItems: 'center',
justifyContent: 'space-between',
},
passwordKeyboardAvoidStyle: {
flex: 1,
backgroundColor: Colors.White,
paddingVertical: 40,
paddingHorizontal: 24,
},
}), }),
QrCodeStyles: StyleSheet.create({ QrCodeStyles: StyleSheet.create({
magnifierZoom: { magnifierZoom: {
@@ -752,11 +788,23 @@ export const PurpleTheme = {
fontFamily: 'Inter_600SemiBold', fontFamily: 'Inter_600SemiBold',
lineHeight: 18, lineHeight: 18,
}, },
helpHeader: {
color: Colors.Black,
fontFamily: 'Inter_700Bold',
fontSize: 18,
lineHeight: 19,
paddingTop: 5,
margin: 7,
},
helpDetails: { helpDetails: {
margin: 5, margin: 5,
color: Colors.Gray44, color: Colors.Gray44,
fontFamily: 'Inter_600SemiBold', fontFamily: 'Inter_600SemiBold',
}, },
urlLinkText: {
color: Colors.Purple,
fontFamily: 'Inter_600SemiBold',
},
aboutDetails: { aboutDetails: {
color: Colors.Black, color: Colors.Black,
fontSize: 18, fontSize: 18,
@@ -1034,12 +1082,47 @@ export const PurpleTheme = {
marginVertical: 6, marginVertical: 6,
}, },
}), }),
BackupStyles: StyleSheet.create({
newStyles: {
backgroundColor: Colors.Orange,
paddingHorizontal: 10,
borderRadius: 3,
},
}),
UpdateModalStyles: StyleSheet.create({ UpdateModalStyles: StyleSheet.create({
modal: { modal: {
width: Dimensions.get('screen').width, width: Dimensions.get('screen').width,
height: Dimensions.get('screen').height, height: Dimensions.get('screen').height,
}, },
}), }),
BackupAndRestoreStyles: StyleSheet.create({
backupProgressText: {
fontFamily: 'Inter_400Regular',
fontSize: 14,
color: Colors.Gray44,
},
backupProcessInfo: {
fontWeight: 'bold',
paddingHorizontal: 20,
textAlign: 'center',
},
cloudInfo: {
paddingHorizontal: 20,
textAlign: 'center',
paddingVertical: 15,
},
cloudLabel: {
fontWeight: '600',
paddingHorizontal: 10,
textAlign: 'center',
paddingTop: 15,
fontFamily: 'Inter_500Medium',
fontSize: 14,
letterSpacing: 0,
lineHeight: 17,
minHeight: 50,
},
}),
TextEditOverlayStyles: StyleSheet.create({ TextEditOverlayStyles: StyleSheet.create({
overlay: { overlay: {
elevation: 5, elevation: 5,
@@ -1428,10 +1511,11 @@ export const PurpleTheme = {
ICON_LARGE_SIZE: 33, ICON_LARGE_SIZE: 33,
CloseCard: require('../../../assets/Card_Bg1.png'), CloseCard: require('../../../assets/Card_Bg1.png'),
OpenCard: require('../../../assets/Card_Bg1.png'), OpenCard: require('../../../assets/Card_Bg1.png'),
sharingIntro: require('../../../assets/Intro_Secure_Sharing.png'), IntroWelcome: require('../../../assets/Intro_Unlock.png'),
walletIntro: require('../../../assets/Intro_Wallet_Binding.png'), SecureSharing: require('../../../assets/Intro_Secure_Sharing.png'),
IntroScanner: require('../../../assets/Intro_Scanner.png'), DigitalWallet: require('../../../assets/Intro_Wallet.png'),
protectPrivacy: require('../../../assets/Intro_Unlock_Method.png'), IntroShare: require('../../../assets/Intro_Share.png'),
IntroBackup: require('../../../assets/Intro_Backup.png'),
elevation(level: ElevationLevel): ViewStyle { elevation(level: ElevationLevel): ViewStyle {
// https://ethercreative.github.io/react-native-shadow-generator/ // https://ethercreative.github.io/react-native-shadow-generator/

View File

@@ -0,0 +1,50 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="All Test Suite">
<listeners>
<listener class-name="inji.listeners.Listeners" />
</listeners>
<test verbose="2" preserve-order="true" name="android">
<classes>
<class name="androidTestCases.UnlockWithPasscodeTest">
<methods>
<include name="logoutAndLoginWithPasscode" />
<include name="loginWithInvalidPasscode" />
</methods>
</class>
<class name="androidTestCases.VcDownloadAndVerifyUsingUinTest">
<methods>
<include name="downloadAndVerifyVcUsingUin" />
<include name="downloadMultipleVcUsingDifferentUin" />
</methods>
</class>
<class name="androidTestCases.VcDownloadAndVerifyUsingVidTest">
<methods>
<include name="downloadAndVerifyVcUsingVid" />
</methods>
</class>
<class name="androidTestCases.GenerateUinOrVidTest">
<methods>
<include name="generateUinOrVidUsingAid" />
</methods>
</class>
<class name="androidTestCases.ActivateVcTest">
<methods>
<include name="activateVc" />
</methods>
</class>
<class name="androidTestCases.ChangeLanguageTest">
<methods>
<include name="changeLanguageToArabic" />
</methods>
</class>
<class name="androidTestCases.PinVcTest">
<methods>
<include name="pinVc" />
<include name="VerifyCameraOpenAfterPinVc" />
<include name="downloadVcViaEsignetAndPinUnpin" />
</methods>
</class>
</classes>
</test>
</suite>

49
injitest/iosSanity.xml Normal file
View File

@@ -0,0 +1,49 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="All Test Suite">
<listeners>
<listener class-name="inji.listeners.Listeners" />
</listeners>
<test verbose="2" preserve-order="true" name="ios">
<classes>
<class name="iosTestCases.UnlockWithPasscodeTest">
<methods>
<include name="logoutAndLoginWithPasscode" />
<include name="loginWithInvalidPasscode" />
</methods>
</class>
<class name="iosTestCases.VcDownloadAndVerifyUsingUinTest">
<methods>
<include name="downloadAndVerifyVcUsingUin" />
<include name="downloadMultipleVcUsingDifferentUin" />
</methods>
</class>
<class name="iosTestCases.VcDownloadAndVerifyUsingVidTest">
<methods>
<include name="downloadAndVerifyVcUsingVid" />
</methods>
</class>
<class name="iosTestCases.GenerateUinOrVidTest">
<methods>
<include name="generateUinOrVidUsingAid" />
</methods>
</class>
<class name="iosTestCases.ActivateVcTest">
<methods>
<include name="activateVc" />
</methods>
</class>
<class name="iosTestCases.ChangeLanguageTest">
<methods>
<include name="changeLanguageToArabic" />
</methods>
</class>
<class name="iosTestCases.PinVcTest">
<methods>
<include name="pinVc" />
<include name="downloadVcViaEsignetAndPinUnpin" />
</methods>
</class>
</classes>
</test>
</suite>

View File

@@ -30,6 +30,7 @@
</developer> </developer>
</developers> </developers>
<properties> <properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>11</maven.compiler.source> <maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target> <maven.compiler.target>11</maven.compiler.target>
</properties> </properties>

View File

@@ -0,0 +1,155 @@
#!/bin/bash -e
# Get input parameters
PLATFORM=$1
RUN_NAME=$2
TEST_TYPE=$3
# Constants
PROJECT_ARN="arn:aws:devicefarm:us-west-2:931337674770:project:b356580b-c561-4fd2-bfdf-8993aebafc5a"
TEST_PACKAGE_FILE_TYPE="APPIUM_JAVA_TESTNG_TEST_PACKAGE"
# Variables to be set later
APP_UPLOAD_ARN=""
DEVICE_POOL_ARN=""
TEST_PACKAGE_ARN=""
# Function to set paths and configurations based on platform
configure_platform() {
local platform=$1
local project_path=$(pwd)
# Set default values
DEVICE_POOL_NAME=""
APP_NAME=""
APP_TYPE=""
TEST_PACKAGE_NAME=""
TEST_SPEC_ARN=""
TEST_PACKAGE_PATH=""
APP_PATH=""
# Get the absolute package path
cd "$project_path/target"
local package_path=$(pwd)
TEST_PACKAGE_PATH="$package_path/zip-with-dependencies.zip"
cd "$project_path"
# Configure based on platform
if [ "$platform" = "Android" ]; then
# Android configuration
DEVICE_POOL_NAME="ANDROID DEVICE POOL"
APP_NAME="Inji_universal.apk"
APP_TYPE="ANDROID_APP"
TEST_PACKAGE_NAME="Android-Test"
TEST_SPEC_ARN="arn:aws:devicefarm:us-west-2::upload:100e31e8-12ac-11e9-ab14-d663b5a4a920"
cd "$project_path/../android/app/build/outputs/apk/residentapp/release"
local app_path=$(pwd)
APP_PATH="$app_path/Inji_universal.apk"
cd "$project_path"
else
# iOS configuration
DEVICE_POOL_NAME="IOS DEVICE POOL"
APP_NAME="Inji.ipa"
APP_TYPE="IOS_APP"
TEST_PACKAGE_NAME="IOS-Test"
TEST_SPEC_ARN="arn:aws:devicefarm:us-west-2::upload:100e31e8-12ac-11e9-ab14-d663bd873c82"
cd "$project_path/../ios"
local app_path=$(pwd)
APP_PATH="$app_path/Inji.ipa"
cd "$project_path"
fi
}
# Update XML based on platform
update_xml_configuration() {
#Go to file path
cd ../../src/main/resources
#Update the testng file
if [ "$PLATFORM" = 'Android' ]; then
if [ "$TEST_TYPE" = 'sanity' ]; then
cat androidSanity.txt > testng.xml
else
cat androidRegression.txt > testng.xml
fi
elif [ "$PLATFORM" = 'IOS' ]; then
if [ "$TEST_TYPE" = 'sanity' ]; then
cat iosSanity.txt > testng.xml
else
cat iosRegression.txt > testng.xml
fi
fi
#Move back to original path
cd ../../../
}
#upload artifacts to device farm
upload_to_device_farm() {
local project_arn=$1
local file_path=$2
local file_name=$3
local file_type=$4
#Get upload URL Link
response=$(aws devicefarm create-upload --project-arn "$project_arn" --name "$file_name" --type "$file_type" --query 'upload.{url: url, arn: arn}' --output json)
upload_url=$(echo "$response" | jq -r '.url')
#Upload the file to the link
curl -T $file_path "$upload_url"
#Return the upload arn
echo "$response" | jq -r '.arn'
}
#trigger the run
start_run_on_device_farm() {
local project_arn=$1
local app_arn=$2
local device_pool_arn=$3
local test_package_arn=$4
local test_spec_arn=$5
local run_name=$6
#Start the run
run_arn=$(aws devicefarm schedule-run --project-arn "$project_arn" --app-arn "$app_arn" --device-pool-arn "$device_pool_arn" --name "$run_name" --test testSpecArn=$test_spec_arn,type=APPIUM_JAVA_TESTNG,testPackageArn="$test_package_arn" --query run.arn --output text)
#Return the run arn
echo "$run_arn"
}
# #rewrite the xml file
update_xml_configuration
# # #build the test jar
mvn clean package -DskipTests=true
# Configure defaults based on platform
configure_platform "$PLATFORM"
#upload the jar and apk
TEST_PACKAGE_ARN=$(upload_to_device_farm $PROJECT_ARN $TEST_PACKAGE_PATH $TEST_PACKAGE_NAME $TEST_PACKAGE_FILE_TYPE)
echo "Test arn is ------ $TEST_PACKAGE_ARN"
#upload the app file
APP_UPLOAD_ARN=$(upload_to_device_farm $PROJECT_ARN $APP_PATH $APP_NAME $APP_TYPE)
echo "App arn is ------ $APP_UPLOAD_ARN"
#list device pools and filter by name
DEVICE_POOL_ARN=$(aws devicefarm list-device-pools --arn $PROJECT_ARN --query "devicePools[?name=='$DEVICE_POOL_NAME'].arn" --output text)
echo "Device pool arn is ------ $DEVICE_POOL_ARN"
# Wait for app upload to complete to start the run
sleep 100
#Start the run
RUN_ARN=$(start_run_on_device_farm $PROJECT_ARN $APP_UPLOAD_ARN $DEVICE_POOL_ARN $TEST_PACKAGE_ARN $TEST_SPEC_ARN $RUN_NAME)
echo "RUN_ARN=$RUN_ARN" >> $GITHUB_ENV
echo "Run Started Successfully!"
echo "RUN ARN IS ---> $RUN_ARN"

View File

@@ -0,0 +1,65 @@
#!/bin/bash -e
RUN_ARN=$1
PLATFORM=$2
ARTIFACT_DIRECTORY=""
get_directory_name() {
local platform=$1
case "$platform" in
"Android") echo "android_artifacts" ;;
"IOS") echo "ios_artifacts" ;;
*) return 1 ;;
esac
}
wait_for_run_completion() {
local run_arn=$1
while true; do
run_status=$(aws devicefarm get-run --arn "$run_arn" --query 'run.status' --output text)
if [ "$run_status" == "COMPLETED" ]; then
echo "Run completed..."
sleep 120 # wait for 2 minutes to process the artifacts
break
fi
echo "Waiting for the run to complete..."
sleep 180 # wait for 3 minutes before checking again
done
}
download_customer_artifacts() {
local run_arn=$1
ARTIFACT_DIRECTORY=$(get_directory_name "$PLATFORM")
mkdir -p "artifacts/$ARTIFACT_DIRECTORY"
response=$(aws devicefarm list-artifacts --arn "arn:aws:devicefarm:us-west-2:931337674770:run:b356580b-c561-4fd2-bfdf-8993aebafc5a/36910efb-e008-49f7-ac59-5eb8a22dd293" --type FILE --query 'artifacts[?name==`Customer Artifacts`].[url]' --output json)
url=$(echo "$response" | jq -r '.[0][0]')
cd "artifacts/$ARTIFACT_DIRECTORY"
echo "Downloading customer artifact from $url"
curl -JL "$url" -o "$PLATFORM.zip"
echo "$(pwd)"
echo "$(ls -l)"
echo "Artifacts downloaded successfully"
}
download_videos() {
local run_arn=$1
aws devicefarm list-artifacts --arn "$run_arn" --type VIDEO --query 'artifacts[].[url, name]' --output text | while read -r url name; do
echo "Downloading video $name from $url"
curl -o "artifacts/$ARTIFACT_DIRECTORY/$name" "$url"
done
}
# Wait for run completion
wait_for_run_completion "$RUN_ARN"
# Download customer artifacts after run completion
download_customer_artifacts "$RUN_ARN"
# Download videos after run completion
#download_videos "$RUN_ARN"

View File

@@ -26,8 +26,8 @@ public class AboutInjiPage extends BasePage {
@iOSXCUITFindBy(accessibility = "arrowLeft") @iOSXCUITFindBy(accessibility = "arrowLeft")
private WebElement backButton; private WebElement backButton;
@AndroidFindBy(uiAutomator = "new UiSelector().textContains(\"Click here\")") @AndroidFindBy(accessibility = "clickHere")
@iOSXCUITFindBy(accessibility = "Click here") @iOSXCUITFindBy(accessibility = "clickHere")
public WebElement clickHereButton; public WebElement clickHereButton;
public AboutInjiPage(AppiumDriver driver) { public AboutInjiPage(AppiumDriver driver) {

View File

@@ -27,19 +27,10 @@ public class AddNewCardPage extends BasePage{
@iOSXCUITFindBy(accessibility = "Continue") @iOSXCUITFindBy(accessibility = "Continue")
private WebElement continueButton; private WebElement continueButton;
@AndroidFindBy(xpath = "(//android.widget.TextView)[4]") @AndroidFindBy(accessibility = "issuersScreenDescription")
@iOSXCUITFindBy(accessibility = "issuersScreenDescription") @iOSXCUITFindBy(accessibility = "issuersScreenDescription")
private WebElement addNewCardGuideMessage; private WebElement addNewCardGuideMessage;
@AndroidFindBy(xpath = "(//android.widget.TextView)[5]")//remove once get accesibility id
private WebElement addNewCardGuideMessageForEsignet;
@AndroidFindBy(uiAutomator = "new UiSelector().textContains(\"Mangyaring piliin ang iyong gustong tagabigay mula sa mga opsyon sa ibaba upang magdagdag ng bagong card.\")")
private WebElement addNewCardGuideMessageInFillpino;
@AndroidFindBy(uiAutomator = "new UiSelector().textContains(\"नया कार्ड जोड़ने के लिए कृपया नीचे दिए गए विकल्पों में से अपना पसंदीदा जारीकर्ता चुनें।\")")
private WebElement addNewCardGuideMessageInHindi;
@AndroidFindBy(accessibility = "issuerDescription-Mosip") @AndroidFindBy(accessibility = "issuerDescription-Mosip")
@iOSXCUITFindBy(accessibility = "issuerDescription-Mosip") @iOSXCUITFindBy(accessibility = "issuerDescription-Mosip")
private WebElement issuerDescriptionMosip; private WebElement issuerDescriptionMosip;
@@ -58,23 +49,10 @@ public class AddNewCardPage extends BasePage{
public String verifyLanguageForAddNewCardGuideMessage(){ public String verifyLanguageForAddNewCardGuideMessage(){
return getTextFromLocator(addNewCardGuideMessage); return getTextFromLocator(addNewCardGuideMessage);
// switch (language) {
// case "Hindi":
// boolean isMessagePresentInHindi = (actualText.equalsIgnoreCase("नया कार्ड जोड़ने के लिए कृपया नीचे दिए गए विकल्पों में से अपना पसंदीदा जारीकर्ता चुनें।")==true) ? true : false;
// return isMessagePresentInHindi ;
// case "English":
// boolean isMessagePresentInEnglish = (actualText.equalsIgnoreCase("Please choose your preferred issuer from the options below to add a new card.")==true) ? true : false;
// return isMessagePresentInEnglish ;
// case "Filipino":
// boolean isMessagePresentInFilipino = (actualText.equalsIgnoreCase("Mangyaring piliin ang iyong gustong tagabigay mula sa mga opsyon sa ibaba upang magdagdag ng bagong card.")==true) ? true : false;
// return isMessagePresentInFilipino ;
// }
// return false;
} }
public boolean isAddNewCardPageGuideMessageForEsignetDisplayed() { public boolean isAddNewCardPageGuideMessageForEsignetDisplayed() {
return this.isElementDisplayed(addNewCardGuideMessageForEsignet); return this.isElementDisplayed(addNewCardGuideMessage);
} }
public boolean isAddNewCardPageLoaded() { public boolean isAddNewCardPageLoaded() {
@@ -128,11 +106,11 @@ public class AddNewCardPage extends BasePage{
} }
public boolean isAddNewCardGuideMessageDisplayedInFillopin() { public boolean isAddNewCardGuideMessageDisplayedInFillopin() {
return this.isElementDisplayed(addNewCardGuideMessageInFillpino); return this.isElementDisplayed(addNewCardGuideMessage);
} }
public boolean isAddNewCardGuideMessageDisplayedInHindi() { public boolean isAddNewCardGuideMessageDisplayedInHindi() {
return this.isElementDisplayed(addNewCardGuideMessageInHindi); return this.isElementDisplayed(addNewCardGuideMessage);
} }
public boolean isIssuerDescriptionMosipDisplayed() { public boolean isIssuerDescriptionMosipDisplayed() {
return this.isElementDisplayed(issuerDescriptionMosip); return this.isElementDisplayed(issuerDescriptionMosip);

View File

@@ -3,6 +3,7 @@ package inji.pages;
import io.appium.java_client.AppiumDriver; import io.appium.java_client.AppiumDriver;
import io.appium.java_client.pagefactory.AppiumFieldDecorator; import io.appium.java_client.pagefactory.AppiumFieldDecorator;
import org.openqa.selenium.By; import org.openqa.selenium.By;
import org.openqa.selenium.StaleElementReferenceException;
import org.openqa.selenium.WebElement; import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.PageFactory; import org.openqa.selenium.support.PageFactory;
import org.openqa.selenium.support.ui.ExpectedConditions; import org.openqa.selenium.support.ui.ExpectedConditions;
@@ -10,6 +11,8 @@ import org.openqa.selenium.support.ui.WebDriverWait;
import static java.time.Duration.ofSeconds; import static java.time.Duration.ofSeconds;
import java.time.Duration;
public class BasePage { public class BasePage {
protected AppiumDriver driver; protected AppiumDriver driver;
@@ -122,4 +125,22 @@ public class BasePage {
this.waitForElementToBeVisible(element); this.waitForElementToBeVisible(element);
return element.getText(); return element.getText();
} }
protected String retrieToGetElement(WebElement element) {
int maxRetries = 3;
String text = null;
for (int i = 0; i < maxRetries; i++) {
try {
text = getTextFromLocator(element);
break;
} catch (StaleElementReferenceException e) {
if (i == maxRetries - 1) {
throw e;
}
}
}
return text;
}
} }

View File

@@ -13,8 +13,8 @@ public class ConfirmPasscode extends BasePage {
private WebElement confirmPasscode; private WebElement confirmPasscode;
@AndroidFindBy(xpath = "//*[contains(@text,'Passcode did not match.')]") @AndroidFindBy(accessibility = "PasscodeError")
@iOSXCUITFindBy(accessibility = "Passcode did not match.") @iOSXCUITFindBy(accessibility = "PasscodeError")
private WebElement invalidPasscode; private WebElement invalidPasscode;
public ConfirmPasscode(AppiumDriver driver) { public ConfirmPasscode(AppiumDriver driver) {

View File

@@ -38,9 +38,14 @@ public class CredentialRegistryPage extends BasePage {
@iOSXCUITFindBy(accessibility = "cancel") @iOSXCUITFindBy(accessibility = "cancel")
public WebElement cancelButton; public WebElement cancelButton;
@AndroidFindBy(uiAutomator = "new UiSelector().resourceId(\"iconIcon\")") @AndroidFindBy(accessibility = "arrowLeft")
@iOSXCUITFindBy(accessibility = "arrowLeft") @iOSXCUITFindBy(accessibility = "arrowLeft")
public WebElement backArrow; public WebElement backArrow;
@AndroidFindBy(accessibility = "credentialRegistryErrorMessage")
@iOSXCUITFindBy(accessibility = "credentialRegistryErrorMessage")
public WebElement credentialRegistryErrorMessage;
public CredentialRegistryPage(AppiumDriver driver) { public CredentialRegistryPage(AppiumDriver driver) {
super(driver); super(driver);
@@ -49,6 +54,10 @@ public class CredentialRegistryPage extends BasePage {
public boolean isCredentialRegistryTextBoxHeaderDisplayed() { public boolean isCredentialRegistryTextBoxHeaderDisplayed() {
return this.isElementDisplayed(credentialRegistryTextBoxHeader); return this.isElementDisplayed(credentialRegistryTextBoxHeader);
} }
public boolean isCredentialRegistryErrorMessageDisplayed() {
return this.isElementDisplayed(credentialRegistryErrorMessage);
}
public boolean isCredentialRegistryTextBoxHeaderInFilipinoDisplayed() { public boolean isCredentialRegistryTextBoxHeaderInFilipinoDisplayed() {
return this.isElementDisplayed(credentialRegistryTextBoxHeaderInFilipino); return this.isElementDisplayed(credentialRegistryTextBoxHeaderInFilipino);

View File

@@ -25,13 +25,13 @@ public class EsignetLoginPage extends BasePage {
@AndroidFindBy(xpath = "//*[contains(@text,'Enter Your VID')]") @AndroidFindBy(xpath = "//*[contains(@text,'Enter Your VID')]")
private WebElement enterYourVidTextHeader; private WebElement enterYourVidTextHeader;
@AndroidFindBy(xpath = "//android.widget.EditText[@resource-id=\"Otp_mosip-vid\"]") @AndroidFindBy(uiAutomator = "UiSelector().className(\"android.widget.EditText\").instance(1)")
private WebElement enterIdTextBox; private WebElement enterIdTextBox;
@AndroidFindBy(xpath = "//android.widget.Button[@resource-id=\"get_otp\"]") @AndroidFindBy(uiAutomator = "new UiSelector().className(\"android.widget.Button\").instance(1)")
private WebElement getOtpButton; private WebElement getOtpButton;
@AndroidFindBy(xpath = "//android.widget.Button[@resource-id=\"verify_otp\"]") @AndroidFindBy(uiAutomator = "new UiSelector().className(\"android.widget.Button\").instance(1)")
private WebElement verifyButton; private WebElement verifyButton;
@AndroidFindBy(xpath = "//*[contains(@text,'OTP has been sent to your registered Mobile Number')]") @AndroidFindBy(xpath = "//*[contains(@text,'OTP has been sent to your registered Mobile Number')]")

View File

@@ -7,8 +7,8 @@ import org.openqa.selenium.WebElement;
public class GenerateUinOrVidPage extends BasePage { public class GenerateUinOrVidPage extends BasePage {
@AndroidFindBy(xpath = "//*[contains(@text,'Retrieve your UIN/VID')]") @AndroidFindBy(accessibility = "getIdHeader")
@iOSXCUITFindBy(iOSClassChain = "**/XCUIElementTypeStaticText[`label == \"Retrieve your UIN/VID\"`]") @iOSXCUITFindBy(accessibility = "getIdHeader")
private WebElement retrieveUinVidText; private WebElement retrieveUinVidText;
@AndroidFindBy(accessibility = "getIdInputModalIndividualId") @AndroidFindBy(accessibility = "getIdInputModalIndividualId")

View File

@@ -22,31 +22,16 @@ public class HassleFreeAuthenticationPage extends BasePage {
public HassleFreeAuthenticationPage(AppiumDriver driver) { public HassleFreeAuthenticationPage(AppiumDriver driver) {
super(driver); super(driver);
} }
BasePage basePage = new BasePage(driver);
public String verifyLanguageforHassleFreeAuthenticationPageLoaded(){ public String verifyLanguageforHassleFreeAuthenticationPageLoaded(){
basePage.retrieToGetElement(hassleFreeAuthenticationText);
return getTextFromLocator(hassleFreeAuthenticationText); return getTextFromLocator(hassleFreeAuthenticationText);
// switch (language) {
// case "English":
// boolean isHederLoadedInEnglish = (actualText.equalsIgnoreCase("Hassle free authentication")==true) ? true : false;
// return isHederLoadedInEnglish ;
// case "Hindi":
// boolean isHederLoadedInHindi = (actualText.equalsIgnoreCase("परेशानी मुक्त प्रमाणीकरण")==true) ? true : false;
// return isHederLoadedInHindi ;
// case "Filipino":
// boolean isHederLoadedInFilipino = (actualText.equalsIgnoreCase("Walang problema sa pagpapatotoo")==true) ? true : false;
// return isHederLoadedInFilipino ;
// case "Tamil":
// boolean isHederLoadedInTamil = (actualText.equalsIgnoreCase("தொந்தரவு இல்லாத அங்கீகாரம்")==true) ? true : false;
// return isHederLoadedInTamil ;
// case "Kannada":
// boolean isHederLoadedInKannada = (actualText.equalsIgnoreCase("ಜಗಳ ಮುಕ್ತ ದೃಢೀಕರಣ")==true) ? true : false;
// return isHederLoadedInKannada ;
// }
// return false;
} }
public String getHassleFreeAuthenticationDescription() { public String getHassleFreeAuthenticationDescription() {
basePage.retrieToGetElement(hassleFreeAuthenticationDescription);
return this.getTextFromLocator(hassleFreeAuthenticationDescription); return this.getTextFromLocator(hassleFreeAuthenticationDescription);
} }

View File

@@ -11,7 +11,7 @@ public class HelpPage extends BasePage {
@iOSXCUITFindBy(accessibility = "helpScreen") @iOSXCUITFindBy(accessibility = "helpScreen")
private WebElement helpText; private WebElement helpText;
@AndroidFindBy(uiAutomator = "new UiSelector().resourceId(\"iconIcon\")") @AndroidFindBy(accessibility = "close")
@iOSXCUITFindBy(accessibility = "close") @iOSXCUITFindBy(accessibility = "close")
private WebElement crossIcon; private WebElement crossIcon;

View File

@@ -5,8 +5,11 @@ import io.appium.java_client.AppiumDriver;
import io.appium.java_client.pagefactory.AndroidFindBy; import io.appium.java_client.pagefactory.AndroidFindBy;
import io.appium.java_client.pagefactory.iOSXCUITFindBy; import io.appium.java_client.pagefactory.iOSXCUITFindBy;
import org.openqa.selenium.By; import org.openqa.selenium.By;
import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.WebElement; import org.openqa.selenium.WebElement;
import com.google.common.collect.ImmutableMap;
import java.util.List; import java.util.List;
public class HistoryPage extends BasePage { public class HistoryPage extends BasePage {
@@ -80,7 +83,7 @@ public class HistoryPage extends BasePage {
} }
return false; return false;
} }
public boolean verifyActivityLogHeader(String vcNumber, Target os) { public boolean verifyActivityLogHeader(String vcNumber, Target os) {
switch (os) { switch (os) {
case ANDROID: case ANDROID:

View File

@@ -4,7 +4,11 @@ import io.appium.java_client.AppiumDriver;
import io.appium.java_client.pagefactory.AndroidFindBy; import io.appium.java_client.pagefactory.AndroidFindBy;
import io.appium.java_client.pagefactory.iOSXCUITFindBy; import io.appium.java_client.pagefactory.iOSXCUITFindBy;
import org.openqa.selenium.By; import org.openqa.selenium.By;
import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.WebElement; import org.openqa.selenium.WebElement;
import org.openqa.selenium.remote.RemoteWebElement;
import com.google.common.collect.ImmutableMap;
public class HomePage extends BasePage { public class HomePage extends BasePage {
@AndroidFindBy(accessibility = "plusIcon") @AndroidFindBy(accessibility = "plusIcon")
@@ -55,9 +59,13 @@ public class HomePage extends BasePage {
@iOSXCUITFindBy(accessibility = "errorTitle") @iOSXCUITFindBy(accessibility = "errorTitle")
private WebElement noInternetConnection; private WebElement noInternetConnection;
@AndroidFindBy(accessibility = "scan") @AndroidFindBy(accessibility = "share")
@iOSXCUITFindBy(accessibility = "scan") @iOSXCUITFindBy(accessibility = "share")
private WebElement scanButton; private WebElement shareButton;
@AndroidFindBy(uiAutomator = "new UiSelector().className(\"android.widget.TextView\").instance(6);")// fix with accecibility
@iOSXCUITFindBy(accessibility = "share")
private WebElement shareButtonByForText;
@AndroidFindBy(accessibility = "nationalCard") @AndroidFindBy(accessibility = "nationalCard")
@iOSXCUITFindBy(accessibility = "nationalCard") @iOSXCUITFindBy(accessibility = "nationalCard")
@@ -137,20 +145,6 @@ public class HomePage extends BasePage {
public String verifyLanguageForNoVCDownloadedPageLoaded(){ public String verifyLanguageForNoVCDownloadedPageLoaded(){
return getTextFromLocator(bringYourDigitalIdentity); return getTextFromLocator(bringYourDigitalIdentity);
// switch (language) {
// case "English":
// boolean isEnglishMatch = (actualText.equalsIgnoreCase("Bring your digital identity")==true) ? true : false;
// return isEnglishMatch ;
// case "Hindi":
// boolean isHindiMatch = (actualText.equalsIgnoreCase("अपनी डिजिटल आईडी लाओ")==true) ? true : false;
// return isHindiMatch ;
// case "Filipino":
// boolean isFilipinoMatch = (actualText.equalsIgnoreCase("Dalhin ang Iyong Digital ID")==true) ? true : false;
// return isFilipinoMatch ;
//
// }
// return false;
} }
public boolean verifyLanguageForNoInternetConnectionDisplayed(String language){ public boolean verifyLanguageForNoInternetConnectionDisplayed(String language){
@@ -171,9 +165,13 @@ public class HomePage extends BasePage {
return false; return false;
} }
public ScanPage clickOnScanButton() { public SharePage clickOnShareButton() {
clickOnElement(scanButton); clickOnElement(shareButton);
return new ScanPage(driver); return new SharePage(driver);
}
public String getShareButton() {
return getTextFromLocator(shareButtonByForText);
} }
public boolean isIdTypeDisplayed() { public boolean isIdTypeDisplayed() {

View File

@@ -31,12 +31,12 @@ public class MoreOptionsPage extends BasePage {
@iOSXCUITFindBy(accessibility = "profileAuthenticated") @iOSXCUITFindBy(accessibility = "profileAuthenticated")
private WebElement activatedForOnlineLoginButton; private WebElement activatedForOnlineLoginButton;
@AndroidFindBy(uiAutomator = "new UiSelector().resourceId(\"iconIcon\")") @AndroidFindBy(accessibility = "close")
@iOSXCUITFindBy(iOSClassChain = "**/XCUIElementTypeOther[`label == \"\uE5CD\"`][1]") @iOSXCUITFindBy(accessibility = "Close")
private WebElement closeButton; private WebElement closeButton;
@AndroidFindBy(uiAutomator = "new UiSelector().textContains(\"Something is wrong. Please try again later!\")") @AndroidFindBy(uiAutomator = "new UiSelector().textContains(\"Something is wrong. Please try again later!\")")
@iOSXCUITFindBy(iOSClassChain = "**/XCUIElementTypeOther[`label == \"Something is wrong. Please try again later!\"`]") @iOSXCUITFindBy(accessibility = "walletBindingErrorTitle")
public WebElement somethingIsWrongPopup; public WebElement somethingIsWrongPopup;
public MoreOptionsPage(AppiumDriver driver) { public MoreOptionsPage(AppiumDriver driver) {

View File

@@ -16,11 +16,11 @@ public class OtpVerificationPage extends BasePage {
@iOSXCUITFindBy(accessibility = "otpVerificationError") @iOSXCUITFindBy(accessibility = "otpVerificationError")
private WebElement invalidOtpMessage; private WebElement invalidOtpMessage;
@AndroidFindBy(xpath = "//*[contains(@text,'Something is wrong. Please try again later!')]") @AndroidFindBy(accessibility = "walletBindingErrorTitle")
@iOSXCUITFindBy(iOSClassChain = "**/XCUIElementTypeStaticText[`label == \"Something is wrong. Please try again later!\"`]") @iOSXCUITFindBy(iOSClassChain = "**/XCUIElementTypeStaticText[`label == \"Something is wrong. Please try again later!\"`]")
private WebElement invalidOtpMessageInVcActivation; private WebElement invalidOtpMessageInVcActivation;
@AndroidFindBy(xpath = "//*[contains(@text,'Cancel')]") @AndroidFindBy(xpath = "cancel")
@iOSXCUITFindBy(accessibility = "cancel") @iOSXCUITFindBy(accessibility = "cancel")
private WebElement cancelButton; private WebElement cancelButton;
@@ -44,7 +44,7 @@ public class OtpVerificationPage extends BasePage {
@iOSXCUITFindBy(iOSClassChain = "**/XCUIElementTypeStaticText[`label == \"VID not available in database\"`]") @iOSXCUITFindBy(iOSClassChain = "**/XCUIElementTypeStaticText[`label == \"VID not available in database\"`]")
private WebElement vidNotAvailableMessage; private WebElement vidNotAvailableMessage;
@AndroidFindBy(accessibility = "resendCode") @AndroidFindBy(uiAutomator = "new UiSelector().resourceId(\"resendCodeView\")") //as parent component has correct property
@iOSXCUITFindBy(accessibility = "resendCode") @iOSXCUITFindBy(accessibility = "resendCode")
private WebElement resendCodeButton; private WebElement resendCodeButton;
@@ -102,8 +102,12 @@ public class OtpVerificationPage extends BasePage {
return this.isElementDisplayed(vidNotAvailableMessage); return this.isElementDisplayed(vidNotAvailableMessage);
} }
public boolean verifyResendCodeButtonDisplayed() { public boolean verifyResendCodeButtonDisplayedEnabled() {
return this.isElementDisplayed(resendCodeButton); return this.isElementEnabled(resendCodeButton);
}
public void clickOnResendButton() {
clickOnElement(resendCodeButton);
} }
public boolean confirmPopupHeaderDisplayed() { public boolean confirmPopupHeaderDisplayed() {
@@ -111,6 +115,11 @@ public class OtpVerificationPage extends BasePage {
} }
public boolean verifyOtpVerificationTimerCompleted() { public boolean verifyOtpVerificationTimerCompleted() {
return this.WaitTillElementVisible(otpVerificationTimer, 230); return this.WaitTillElementVisible(otpVerificationTimer, 190);
}
public boolean verifyOtpVerificationTimerDisplayedAfterClickOnResend() {
return this.isElementDisplayed(otpVerificationTimer);
} }
} }

View File

@@ -7,7 +7,10 @@ import org.openqa.selenium.WebElement;
import inji.utils.IosUtil; import inji.utils.IosUtil;
public class ReceiveCardPage extends BasePage { public class ReceiveCardPage extends BasePage {
@AndroidFindBy(accessibility = "showQrCode") @AndroidFindBy(uiAutomator = "new UiSelector().textContains(\"Allow\")")
private WebElement allowButton;
@AndroidFindBy(accessibility = "showQrCode")
private WebElement receiveCardHeader; private WebElement receiveCardHeader;
@AndroidFindBy(uiAutomator = "new UiSelector().textContains(\"Ipakita ang QR code na ito para humiling ng resident card\")") @AndroidFindBy(uiAutomator = "new UiSelector().textContains(\"Ipakita ang QR code na ito para humiling ng resident card\")")
@@ -26,6 +29,11 @@ public class ReceiveCardPage extends BasePage {
super(driver); super(driver);
} }
public void clickOnAllowButton() {
if (isElementDisplayed(bluetoothPopUp)) {
clickOnElement(allowButton);
}
}
public boolean isReceiveCardHeaderDisplayed() { public boolean isReceiveCardHeaderDisplayed() {
return this.isElementDisplayed(receiveCardHeader); return this.isElementDisplayed(receiveCardHeader);
} }

View File

@@ -10,8 +10,8 @@ import org.openqa.selenium.WebElement;
public class RetrieveIdPage extends BasePage { public class RetrieveIdPage extends BasePage {
@AndroidFindBy(accessibility = "retreiveIdHeader") @AndroidFindBy(accessibility = "retrieveIdHeader")
@iOSXCUITFindBy(accessibility = "retreiveIdHeader") @iOSXCUITFindBy(accessibility = "retrieveIdHeader")
private WebElement retrieveIdText; private WebElement retrieveIdText;
@AndroidFindBy(accessibility = "idInputModalIndividualId") @AndroidFindBy(accessibility = "idInputModalIndividualId")
@@ -45,6 +45,13 @@ public class RetrieveIdPage extends BasePage {
@AndroidFindBy(xpath = "//*[contains(@text,'AID is not ready yet')]") @AndroidFindBy(xpath = "//*[contains(@text,'AID is not ready yet')]")
@iOSXCUITFindBy(accessibility = "AID is not ready yet") @iOSXCUITFindBy(accessibility = "AID is not ready yet")
private WebElement aidIsNotReadyYetMessage; private WebElement aidIsNotReadyYetMessage;
@AndroidFindBy(xpath = "//*[contains(@text,'Select ID type and enter the MOSIP provided UIN or VID you')]")
@iOSXCUITFindBy(accessibility = "Select ID type and enter the MOSIP provided UIN or VID you wish to download. In the next step, you will be asked to enter OTP.")
private WebElement downloadIdGuideMessage;
@AndroidFindBy(accessibility = "IdInputToolTipInfo")
private WebElement infoIcon;
public RetrieveIdPage(AppiumDriver driver) { public RetrieveIdPage(AppiumDriver driver) {
super(driver); super(driver);
@@ -53,6 +60,17 @@ public class RetrieveIdPage extends BasePage {
public boolean isRetrieveIdPageLoaded() { public boolean isRetrieveIdPageLoaded() {
return this.isElementDisplayed(retrieveIdText); return this.isElementDisplayed(retrieveIdText);
} }
public boolean isInfoIconDisplayed() {
return this.isElementDisplayed(infoIcon);
}
public void clickInfoIcon() {
clickOnElement(infoIcon);
}
public String getRetrieveIdPageHeader() {
return this.getTextFromLocator(retrieveIdText);
}
public RetrieveIdPage setEnterIdTextBox(String uinOrVid) { public RetrieveIdPage setEnterIdTextBox(String uinOrVid) {
clickOnElement(generateCardButton); clickOnElement(generateCardButton);
@@ -69,6 +87,14 @@ public class RetrieveIdPage extends BasePage {
this.clickOnElement(getItNowText); this.clickOnElement(getItNowText);
return new GenerateUinOrVidPage(driver); return new GenerateUinOrVidPage(driver);
} }
public String verifyGetItTextDisplayed() {
return this.getTextFromLocator(getItNowText);
}
public boolean verifyDownloadIdPageGuideMessage() {
return this.isElementDisplayed(downloadIdGuideMessage);
}
public boolean isInvalidUinMassageLoaded() { public boolean isInvalidUinMassageLoaded() {
return this.isElementDisplayed(invalidUin); return this.isElementDisplayed(invalidUin);
@@ -83,9 +109,9 @@ public class RetrieveIdPage extends BasePage {
switch (os) { switch (os) {
case ANDROID: case ANDROID:
clickOnElement(spinnerButton);
for (int i = 0; i < maxRetries; i++) { for (int i = 0; i < maxRetries; i++) {
try { try {
clickOnElement(spinnerButton);
clickOnElement(vidDropDownValueAndroid); clickOnElement(vidDropDownValueAndroid);
return this; return this;
} catch (StaleElementReferenceException e) { } catch (StaleElementReferenceException e) {

View File

@@ -22,31 +22,16 @@ public class SecureSharingPage extends BasePage {
public SecureSharingPage(AppiumDriver driver) { public SecureSharingPage(AppiumDriver driver) {
super(driver); super(driver);
} }
BasePage basePage = new BasePage(driver);
public String verifyLanguageforSecureSharingPageLoaded(){ public String verifyLanguageforSecureSharingPageLoaded(){
basePage.retrieToGetElement(secureSharingText);
return getTextFromLocator(secureSharingText); return getTextFromLocator(secureSharingText);
// switch (language) {
// case "English":
// boolean isHederLoadedInEnglish = (actualText.equalsIgnoreCase("Secure Sharing")==true) ? true : false;
// return isHederLoadedInEnglish ;
// case "Hindi":
// boolean isHederLoadedInHindi = (actualText.equalsIgnoreCase("सुरक्षित साझाकरण")==true) ? true : false;
// return isHederLoadedInHindi ;
// case "Filipino":
// boolean isHederLoadedInFilipino = (actualText.equalsIgnoreCase("Mabilis na pagpasok")==true) ? true : false;
// return isHederLoadedInFilipino ;
// case "Tamil":
// boolean isHederLoadedInTamil = (actualText.equalsIgnoreCase("பாதுகாப்பான பகிர்வு")==true) ? true : false;
// return isHederLoadedInTamil ;
// case "Kannada":
// boolean isHederLoadedInKannada = (actualText.equalsIgnoreCase("ಸುರಕ್ಷಿತ ಹಂಚಿಕೆ")==true) ? true : false;
// return isHederLoadedInKannada ;
// }
// return false;
} }
public String getSecureSharingDescription() { public String getSecureSharingDescription() {
basePage.retrieToGetElement(secureSharingDescription);
return this.getTextFromLocator(secureSharingDescription); return this.getTextFromLocator(secureSharingDescription);
} }

View File

@@ -76,7 +76,7 @@ public class SettingsPage extends BasePage {
@AndroidFindBy(xpath = "//*[contains(@text,'Tumanggap ng Card')]") @AndroidFindBy(xpath = "//*[contains(@text,'Tumanggap ng Card')]")
public WebElement receiveCardInfilipinoLanguageText; public WebElement receiveCardInfilipinoLanguageText;
@AndroidFindBy(xpath = "(//*[@resource-id=\"padView\"])[3]") @AndroidFindBy(accessibility = "ar")
@iOSXCUITFindBy(accessibility = "عربى") @iOSXCUITFindBy(accessibility = "عربى")
private WebElement arabicLanguageButton; private WebElement arabicLanguageButton;

View File

@@ -7,7 +7,7 @@ import org.openqa.selenium.WebElement;
import inji.utils.IosUtil; import inji.utils.IosUtil;
public class ScanPage extends BasePage { public class SharePage extends BasePage {
@AndroidFindBy(accessibility = "camera") @AndroidFindBy(accessibility = "camera")
private WebElement camera; private WebElement camera;
@@ -17,6 +17,9 @@ public class ScanPage extends BasePage {
@AndroidFindBy(uiAutomator = "new UiSelector().textContains(\"Allow\")") @AndroidFindBy(uiAutomator = "new UiSelector().textContains(\"Allow\")")
private WebElement allowButton; private WebElement allowButton;
@AndroidFindBy(uiAutomator = "new UiSelector().textContains(\"Deny\")")
private WebElement denyButton;
@AndroidFindBy(accessibility = "noShareableVcs") @AndroidFindBy(accessibility = "noShareableVcs")
@iOSXCUITFindBy(accessibility = "noShareableVcs") @iOSXCUITFindBy(accessibility = "noShareableVcs")
@@ -27,18 +30,28 @@ public class ScanPage extends BasePage {
@AndroidFindBy(accessibility = "holdPhoneSteadyMessage") @AndroidFindBy(accessibility = "holdPhoneSteadyMessage")
private WebElement holdCameraSteady; private WebElement holdCameraSteady;
@AndroidFindBy(accessibility = "bluetoothIsTurnedOffMessage")
private WebElement bluetoothIsTurnedOffMessage;
public ScanPage(AppiumDriver driver) { public SharePage(AppiumDriver driver) {
super(driver); super(driver);
} }
public ScanPage acceptPermissionPopupBluetooth() { public SharePage acceptPermissionPopupBluetooth() {
if (isElementDisplayed(allowButton)) { if (isElementDisplayed(allowButton)) {
clickOnElement(allowButton); clickOnElement(allowButton);
} }
return this; return this;
} }
public SharePage denyPermissionPopupBluetooth() {
if (isElementDisplayed(denyButton)) {
clickOnElement(denyButton);
}
return this;
}
public boolean isCameraOpen() { public boolean isCameraOpen() {
return isElementDisplayed(camera); return isElementDisplayed(camera);
} }
@@ -46,6 +59,10 @@ public class ScanPage extends BasePage {
public boolean isNoShareableCardsMessageDisplayed() { public boolean isNoShareableCardsMessageDisplayed() {
return isElementDisplayed(noShareableCards); return isElementDisplayed(noShareableCards);
} }
public String isBluetoothIsTurnedOffMessageDisplayed() {
return getTextFromLocator(bluetoothIsTurnedOffMessage);
}
public boolean isCameraPageLoaded() { public boolean isCameraPageLoaded() {
return this.isElementEnabled(holdCameraSteady); return this.isElementEnabled(holdCameraSteady);

View File

@@ -22,32 +22,15 @@ public class TrustedDigitalWalletPage extends BasePage {
public TrustedDigitalWalletPage(AppiumDriver driver) { public TrustedDigitalWalletPage(AppiumDriver driver) {
super(driver); super(driver);
} }
BasePage basePage = new BasePage(driver);
public String verifyLanguageforTrustedDigitalWalletPageLoaded(){ public String verifyLanguageforTrustedDigitalWalletPageLoaded(){
basePage.retrieToGetElement(trustedDigitalWalletText);
return getTextFromLocator(trustedDigitalWalletText); return getTextFromLocator(trustedDigitalWalletText);
//
// switch (language) {
// case "English":
// boolean isHederLoadedInEnglish = (actualText.equalsIgnoreCase("Trusted Digital Wallet")==true) ? true : false;
// return isHederLoadedInEnglish ;
// case "Hindi":
// boolean isHederLoadedInHindi = (actualText.equalsIgnoreCase("विश्वसनीय डिजिटल वॉलेट")==true) ? true : false;
// return isHederLoadedInHindi ;
// case "Filipino":
// boolean isHederLoadedInFilipino = (actualText.equalsIgnoreCase("Pinagkakatiwalaang Digital Wallet")==true) ? true : false;
// return isHederLoadedInFilipino ;
// case "Tamil":
// boolean isHederLoadedInTamil = (actualText.equalsIgnoreCase("நம்பகமான டிஜிட்டல் வாலட்")==true) ? true : false;
// return isHederLoadedInTamil ;
// case "Kannada":
// boolean isHederLoadedInKannada = (actualText.equalsIgnoreCase("ವಿಶ್ವಾಸಾರ್ಹ ಡಿಜಿಟಲ್ ವಾಲೆಟ್")==true) ? true : false;
// return isHederLoadedInKannada ;
// }
// return false;
} }
public String getTrustedDigitalWalletDescription() { public String getTrustedDigitalWalletDescription() {
basePage.retrieToGetElement(trustedDigitalWalletDescription);
return this.getTextFromLocator(trustedDigitalWalletDescription); return this.getTextFromLocator(trustedDigitalWalletDescription);
} }

View File

@@ -24,36 +24,21 @@ public class WelcomePage extends BasePage {
@iOSXCUITFindBy(xpath = "(//XCUIElementTypeOther[@name=\"Susunod\" or @name=\"next\" or @name=\"अगला\" or @name=\"ಮುಂದೆ\" or @name=\"அடுத்தது\"])[4]\n") @iOSXCUITFindBy(xpath = "(//XCUIElementTypeOther[@name=\"Susunod\" or @name=\"next\" or @name=\"अगला\" or @name=\"ಮುಂದೆ\" or @name=\"அடுத்தது\"])[4]\n")
private WebElement nextButton; private WebElement nextButton;
@AndroidFindBy(uiAutomator = "new UiSelector().textContains(\"Back\")") @AndroidFindBy(accessibility = "back")
@iOSXCUITFindBy(iOSClassChain = "**/XCUIElementTypeButton[`label == \"Back\"`][1]") @iOSXCUITFindBy(iOSClassChain = "**/XCUIElementTypeButton[`label == \"Back\"`][1]")
public WebElement backButton; public WebElement backButton;
public WelcomePage(AppiumDriver driver) { public WelcomePage(AppiumDriver driver) {
super(driver); super(driver);
} }
BasePage basePage = new BasePage(driver);
public String verifyLanguageforWelcomePageLoaded(){ public String verifyLanguageforWelcomePageLoaded(){
return getTextFromLocator(welcomeText); return getTextFromLocator(welcomeText);
// switch (language) {
// case "Hindi":
// boolean isHederLoadedInHindi = (actualText.equalsIgnoreCase("सुरक्षित साझाकरण!")==true) ? true : false;
// return isHederLoadedInHindi ;
// case "Filipino":
// boolean isHederLoadedInFilipino = (actualText.equalsIgnoreCase("Ligtas na Pagbabahagi!")==true) ? true : false;
// return isHederLoadedInFilipino ;
// case "Tamil":
// boolean isHederLoadedInTamil = (actualText.equalsIgnoreCase("பாதுகாப்பான பகிர்வு!")==true) ? true : false;
// return isHederLoadedInTamil ;
// case "Kannada":
// boolean isHederLoadedInKannada = (actualText.equalsIgnoreCase("ಸುರಕ್ಷಿತ ಹಂಚಿಕೆ!")==true) ? true : false;
// return isHederLoadedInKannada ;
// }
// Assert.fail("noCaseFound");
// return false;
} }
public boolean isWelcomePageLoaded() { public boolean isWelcomePageLoaded() {
basePage.retrieToGetElement(welcomeText);
return this.isElementDisplayed(welcomeText); return this.isElementDisplayed(welcomeText);
} }
@@ -68,6 +53,7 @@ public class WelcomePage extends BasePage {
} }
public String getWelcomeDescription() { public String getWelcomeDescription() {
basePage.retrieToGetElement(welcomeTextDescription);
return this.getTextFromLocator(welcomeTextDescription); return this.getTextFromLocator(welcomeTextDescription);
} }

View File

@@ -38,6 +38,23 @@ public class AndroidUtil {
} }
} }
public static void disableBluetooth() {
try {
ProcessBuilder processBuilder=null;
String osName = System.getProperty("os.name");
if (osName.contains("Windows")) {
processBuilder = new ProcessBuilder("cmd.exe", "/c", "adb shell cmd bluetooth_manager disable");
} else {
processBuilder = new ProcessBuilder("/bin/bash", "-c", "adb shell cmd bluetooth_manager disable");
}
processBuilder.redirectErrorStream(true);
processBuilder.start();
} catch (IOException e) {
e.printStackTrace();
}
}
public static void ForceStopeApp() { public static void ForceStopeApp() {
try { try {
ProcessBuilder processBuilder=null; ProcessBuilder processBuilder=null;

View File

@@ -106,7 +106,7 @@ public class JsonUtil {
try { try {
File f = new File(TestRunner.getResourcePath() + "/" + "resources/"+document); File f = new File(TestRunner.getResourcePath() + "/"+document);
if (f.exists()) { if (f.exists()) {
InputStream is = new FileInputStream(f); InputStream is = new FileInputStream(f);

View File

@@ -61,4 +61,10 @@ public class PropertiesReader {
public String getAppiumServerStartStatus() { public String getAppiumServerStartStatus() {
return getProperty("startAppiumServer"); return getProperty("startAppiumServer");
} }
public static String getTestData()
{
return JsonUtil.readJsonFileText("personaData.json");
}
} }

View File

@@ -24,13 +24,13 @@ public class TestDataReader {
case "invalidOtp": case "invalidOtp":
return "666666"; return "666666";
case "newuin": case "newuin":
return "2492180164"; return "2176493605";
case "revokevid": case "revokevid":
return "6205860394830280"; return "6205860394830280";
case "vid": case "vid":
return "8349769368792139"; return "8349769368792139";
case "newaid": case "newaid":
return "10001101410012320231225215314"; return "10007100470009820240117074603";
case "invalidpasscode": case "invalidpasscode":
return "123456"; return "123456";
case "invaliduin": case "invaliduin":
@@ -66,7 +66,7 @@ public class TestDataReader {
case "invalidenv": case "invalidenv":
return "https://api.dev3.mosip"; return "https://api.dev3.mosip";
case "isDeviceFarmRun": case "isDeviceFarmRun":
return "false"; return "true";
default: default:
return "Key not found"; return "Key not found";
} }

View File

@@ -0,0 +1,162 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="All Test Suite">
<listeners>
<listener class-name="inji.listeners.Listeners" />
</listeners>
<test verbose="2" preserve-order="true" name="android">
<classes>
<class name="androidTestCases.VcDownloadAndVerifyUsingUinTest">
<methods>
<include name="downloadAndVerifyVcUsingUin" />
<include name="downloadWithEmptyUin" />
<include name="generateMultipleVcWithSameUin" />
<include name="downloadMultipleVcUsingDifferentUin" />
<include name="verifyInvalidUinErrorMessage" />
<include name="verifyOtpTimeOutAndGoBack" />
<include name="DownloadMultipleVcAndForceStopeAndAgainInvokeApp" />
</methods>
</class>
<class name="androidTestCases.VerifyWelcomePagesTest">
<methods>
<include name="verifyWelcomePagesContent" />
<include name="verifyWelcomePagesFromInjiTourGuide" />
<include name="verifyGoBackFromInjiTourGuide" />
<include name="verifyClickOnBackFromInjiTourGuide" />
</methods>
</class>
<class name="androidTestCases.VcDownloadAndVerifyUsingVidTest">
<methods>
<include name="downloadAndVerifyVcUsingVid" />
<include name="downloadTwoVcDeleteOneUsingVid" />
<include name="verifyInvalidVidErrorMessage" />
<include name="downloadAndVerifyVcUsingRevokeVid" />
<include name="DownloadMultipleVcAndForceStopeAndAgainInvokeAppViaVid" />
</methods>
</class>
<class name="androidTestCases.UnlockWithPasscodeTest">
<methods>
<include name="logoutAndLoginWithPasscode" />
<include name="loginWithInvalidPasscode" />
</methods>
</class>
<class name="androidTestCases.VerifyHelpPageTest">
<methods>
<include name="verifyHelpPage" />
</methods>
</class>
<class name="androidTestCases.DeletingVcTest">
<methods>
<include name="deleteVcAndVerifyInHistory" />
<include name="cancelDeleteVc" />
<include name="DownloadingDeletedVc" />
</methods>
</class>
<class name="androidTestCases.VerifyHistoryTest">
<methods>
<include name="downloadVcAndVerifyHistory" />
<include name="verifyActivationFailedRecordInHistory" />
<include name="verifyActivationFailedRecordInHistoryFromDetailedView" />
<include name="activateVcAndVerifyInHistory" />
</methods>
</class>
<class name="androidTestCases.GenerateUinOrVidTest">
<methods>
<include name="generateUinOrVidUsingAid" />
<include name="goBackToGenerateUinOrVidUsingAidFromOtpVerificationPage" />
</methods>
</class>
<class name="androidTestCases.ActivateVcTest">
<methods>
<include name="activateVc" />
<include name="noPreDownloadedVCAndNoHistoryInFreshInstallation" />
<include name="verifyInvalidOtpMessage" />
<include name="verifyTuvaliVersion" />
</methods>
</class>
<class name="androidTestCases.PinVcTest">
<methods>
<include name="pinVc" />
<include name="verifyMessageAfterDenyBluetoothPopup" />
<include name="VerifyCameraOpenAfterPinVc" />
<include name="downloadVcViaEsignetAndPinUnpin" />
</methods>
</class>
<class name="androidTestCases.ChangeLanguageTest">
<methods>
<include name="changeLanguage" />
<include name="languageShouldBeInNativeLanguages" />
<include name="verifyTuvaliVersion" />
<include name="changeLanguageToArabic" />
<include name="changeLanguageToFilipionAndSearchIssuer" />
<include name="changeLanguageToFilipionAndSearchIssuerEnterIncompleteName" />
<include name="changeLanguageToHindiAndSearchIssuer" />
<include name="changeLanguageToFilipionAndcheckInjiTour" />
<include name="changeLanguageToHindiAndcheckInjiTour" />
<include name="changeLanguageToTamilAndcheckInjiTour" />
<include name="changeLanguageToKannadAndcheckInjiTour" />
</methods>
</class>
<class name="androidTestCases.ShareVcTest">
<methods>
<include name="noCardsAvailableToShare" />
<include name="verifyReceivedCardTabPresent" />
</methods>
</class>
<class name="androidTestCases.NoNetworkAndroidTest">
<methods>
<include name="setupPasscodeAndDownloadCardWithoutInternet" />
<include name="openCameraOnFlightMode" />
<include name="activateVcWithoutInternet" />
<include name="verifyListOfLanguagesInOfflineMode" />
<include name="deleteDownloadedVcInOfflineMode" />
<include name="verifyHelpPageOfflineMode" />
<include name="openQrOffline" />
<include name="verifyRecivedCardOffline" />
<include name="downloadCardWithoutInternetRetryWithInternet" />
<include name="downloadVcUsingUinViaEsignetWithoutInternate" />
<include name="downloadVcUsingUinViaEsignetNoInternateWhileDownloading" />
<include name="downloadVcViaEsignetAndPinUnpinWithNoNetwork" />
<include name="downloadVcUsingUinViaEsignetNoInternateOpenScan" />
<include name="downloadVcInOtherLanguageViaEsignetWithoutInternet" />
<include name="changeLanguageToTamilWithoutNetwork" />
<include name="verifyVcIssuerListWithoutNetwork" />
</methods>
</class>
<class name="androidTestCases.CredentialRegistryTest">
<methods>
<include name="downloadAndVerifyVcInNewEnv" />
<include name="cancelChangeEnvAndVerify" />
<include name="generateUinInNewEnv" />
<include name="downloadAndVerifyVcInInvalidEnv" />
<include name="retrivingUinInNewEnv" />
<include name="retrivingUinInOtherEnv" />
<include name="downloadAndVerifyVcInTwoEnv" />
<include name="downloadVcAndActivateItInOtherEnv" />
<include name="downloadAndVerifyVcInNewEnvForEsignet" />
<include name="downloadAndVerifyVcInInvalidEnvForEsignet" />
<include name="downloadAndVerifyVcInInvalidEnvForEsignetInFillpino" />
<include name="downloadVcInNewEnvAndVerifyInDetailedVcViewPage" />
</methods>
</class>
<class name="androidTestCases.ReceiveCardTest">
<methods>
<include name="verifyRecivedCardAndQrCode" />
<include name="verifyRecivedCardAndQrCodeInFilipinoLanguage" />
</methods>
</class>
<class name="androidTestCases.VcDownloadAndVerifyUsingEsignetTest">
<methods>
<include name="downloadAndVerifyVcUsingUinViaEsignet" />
<include name="downloadAndVerifyVcUsingVidViaEsignet" />
</methods>
</class>
<class name="androidTestCases.AboutInjiTest">
<methods>
<include name="copyAppId" />
</methods>
</class>
</classes>
</test>
</suite>

View File

@@ -0,0 +1,50 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="All Test Suite">
<listeners>
<listener class-name="inji.listeners.Listeners" />
</listeners>
<test verbose="2" preserve-order="true" name="android">
<classes>
<class name="androidTestCases.UnlockWithPasscodeTest">
<methods>
<include name="logoutAndLoginWithPasscode" />
<include name="loginWithInvalidPasscode" />
</methods>
</class>
<class name="androidTestCases.VcDownloadAndVerifyUsingUinTest">
<methods>
<include name="downloadAndVerifyVcUsingUin" />
<include name="downloadMultipleVcUsingDifferentUin" />
</methods>
</class>
<class name="androidTestCases.VcDownloadAndVerifyUsingVidTest">
<methods>
<include name="downloadAndVerifyVcUsingVid" />
</methods>
</class>
<class name="androidTestCases.GenerateUinOrVidTest">
<methods>
<include name="generateUinOrVidUsingAid" />
</methods>
</class>
<class name="androidTestCases.ActivateVcTest">
<methods>
<include name="activateVc" />
</methods>
</class>
<class name="androidTestCases.ChangeLanguageTest">
<methods>
<include name="changeLanguageToArabic" />
</methods>
</class>
<class name="androidTestCases.PinVcTest">
<methods>
<include name="pinVc" />
<include name="VerifyCameraOpenAfterPinVc" />
<include name="downloadVcViaEsignetAndPinUnpin" />
</methods>
</class>
</classes>
</test>
</suite>

View File

@@ -0,0 +1,16 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="All Test Suite">
<listeners>
<listener class-name="inji.listeners.Listeners"/>
</listeners>
<test verbose="2" preserve-order="true" name="ios">
<classes>
<class name="iosTestCases.UnlockWithPasscodeTest">
<methods>
<include name="logoutAndLoginWithPasscode"/>
</methods>
</class>
</classes>
</test>
</suite>

View File

@@ -0,0 +1,49 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="All Test Suite">
<listeners>
<listener class-name="inji.listeners.Listeners" />
</listeners>
<test verbose="2" preserve-order="true" name="ios">
<classes>
<class name="iosTestCases.UnlockWithPasscodeTest">
<methods>
<include name="logoutAndLoginWithPasscode" />
<include name="loginWithInvalidPasscode" />
</methods>
</class>
<class name="iosTestCases.VcDownloadAndVerifyUsingUinTest">
<methods>
<include name="downloadAndVerifyVcUsingUin" />
<include name="downloadMultipleVcUsingDifferentUin" />
</methods>
</class>
<class name="iosTestCases.VcDownloadAndVerifyUsingVidTest">
<methods>
<include name="downloadAndVerifyVcUsingVid" />
</methods>
</class>
<class name="iosTestCases.GenerateUinOrVidTest">
<methods>
<include name="generateUinOrVidUsingAid" />
</methods>
</class>
<class name="iosTestCases.ActivateVcTest">
<methods>
<include name="activateVc" />
</methods>
</class>
<class name="iosTestCases.ChangeLanguageTest">
<methods>
<include name="changeLanguageToArabic" />
</methods>
</class>
<class name="iosTestCases.PinVcTest">
<methods>
<include name="pinVc" />
<include name="downloadVcViaEsignetAndPinUnpin" />
</methods>
</class>
</classes>
</test>
</suite>

View File

@@ -0,0 +1,13 @@
[
{
"DateOfBirth": "2005/12/01",
"VID": "3978248315374925",
"EmailID": "Br.Ri.7510@mailinator.com",
"Address": "?=",
"PhoneNumber": "+6574137633",
"fullName": "Brecken Ritchie",
"Gender": "MLE",
"UIN": "2150892709",
"ID": "24"
}
]

View File

@@ -1,146 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="All Test Suite">
<listeners>
<listener class-name="inji.listeners.Listeners"/>
</listeners>
<test verbose="2" preserve-order="true" name="ios">
<classes>
<!--<class name="iosTestCases.AboutInjiTest">
<methods>
<include name="copyAppId"/>
</methods>
</class>-->
<class name="iosTestCases.ActivateVcTest">
<methods>
<include name="activateVc"/>
<include name="noPreDownloadedVCAndNoHistoryInFreshInstallation"/>
<include name="verifyInvalidOtpMessage"/>
<include name="activateVcFromDetailedViewPage"/>
</methods>
</class>
<class name="iosTestCases.ChangeLanguageTest">
<methods>
<include name="changeLanguage"/>
<include name="languageShouldBeInNativeLanguages"/>
<include name="verifyTuvaliVersion"/>
<include name="changeLanguageToArabic"/>
<include name="changeLanguageToFilipionAndSearchIssuer"/>
<include name="changeLanguageToFilipionAndSearchIssuerEnterIncompleteName"/>
<include name="changeLanguageToHindiAndSearchIssuer"/>
<include name="changeLanguageToFilipionAndcheckInjiTour"/>
<include name="changeLanguageToHindiAndcheckInjiTour"/>
<include name="changeLanguageToTamilAndcheckInjiTour"/>
<include name="changeLanguageToKannadAndcheckInjiTour"/>
</methods>
</class>
<class name="iosTestCases.CredentialRegistryTest">
<methods>
<!-- <include name="downloadAndVerifyVcInNewEnv"/>-->
<include name="cancelChangeEnvAndVerify"/>
<!-- <include name="downloadAndVerifyVcInInvalidEnv"/>-->
<!-- <include name="generateUinInNewEnv"/>-->
<include name="retrivingUinInOtherEnv"/>
<!-- <include name="downloadAndVerifyVcInTwoEnv"/>-->
<!-- <include name="downloadVcAndActivateItInOtherEnv"/>-->
<!-- <include name="downloadAndVerifyVcInNewEnvForEsignet"/>-->
<!-- <include name="downloadAndVerifyVcInInvalidEnvForEsignet"/>-->
<!-- <include name="downloadAndVerifyVcInInvalidEnvForEsignetInFillpino"/>-->
</methods>
</class>
<class name="iosTestCases.DeletingVcTest">
<methods>
<include name="deleteVcAndVerifyInHistory"/>
<include name="cancelDeleteVc"/>
<include name="DownloadingDeletedVc"/>
</methods>
</class>
<class name="iosTestCases.GenerateUinOrVidTest">
<methods>
<include name="generateUinOrVidUsingAid"/>
<include name="goBackToGenerateUinOrVidUsingAidFromOtpVerificationPage"/>
</methods>
</class>
<class name="iosTestCases.NoNetworkIosTest">
<methods>
<!-- <include name="setupPasscodeAndDownloadCardWithoutInternet"/>-->
<!-- <include name="openCameraOnFlightMode"/>-->
<!-- <include name="activateVcWithoutInternet"/>-->
<include name="verifyListOfLanguagesInOfflineMode"/>
<include name="verifyHelpPageOfflineMode"/>
<include name="deleteDownloadedVcInOfflineMode"/>
<include name="openQrOffline"/>
<!-- <include name="verifyRecivedCardOffline"/>-->
<!-- <include name="downloadCardWithoutInternetRetryWithInternet"/>-->
</methods>
</class>
<class name="iosTestCases.PinVcTest">
<methods>
<include name="pinVc"/>
<!-- <include name="VerifyCameraOpenAfterPinVc"/>-->
<!-- <include name="downloadVcViaEsignetAndPinUnpin"/>-->
</methods>
</class>
<class name="iosTestCases.ShareVcTest">
<methods>
<include name="noCardsAvailableToShare"/>
<include name="verifyReceivedCardTabPresent"/>
</methods>
</class>
<class name="iosTestCases.UnlockWithPasscodeTest">
<methods>
<include name="logoutAndLoginWithPasscode"/>
<include name="loginWithInvalidPasscode"/>
</methods>
</class>
<!-- <class name="iosTestCases.VcDownloadAndVerifyUsingEsignetTest">-->
<!-- <methods>-->
<!-- <include name="downloadAndVerifyVcUsingUinViaEsignet"/>-->
<!-- <include name="downloadAndVerifyVcUsingVidViaEsignet"/>-->
<!-- </methods>-->
<!-- </class>-->
<class name="iosTestCases.VcDownloadAndVerifyUsingUinTest">
<methods>
<include name="downloadAndVerifyVcUsingUin"/>
<include name="downloadMultipleVcUsingDifferentUin"/>
<include name="downloadWithEmptyUin"/>
<include name="generateMultipleVcWithSameUin"/>
<include name="verifyInvalidUinErrorMessage"/>
<include name="verifyOtpTimeOutAndGoBack"/>
</methods>
</class>
<class name="iosTestCases.VcDownloadAndVerifyUsingVidTest">
<methods>
<include name="downloadAndVerifyVcUsingVid"/>
<include name="downloadTwoVcDeleteOneUsingVid"/>
<include name="verifyInvalidVidErrorMessage"/>
<include name="downloadAndVerifyVcUsingRevokeVid"/>
</methods>
</class>
<class name="iosTestCases.VerifyHelpPageTest">
<methods>
<include name="verifyHelpPage"/>
</methods>
</class>
<class name="iosTestCases.VerifyHistoryTest">
<methods>
<include name="downloadVcAndVerifyHistory"/>
<include name="verifyActivationFailedRecordInHistory"/>
<include name="verifyActivationFailedRecordInHistoryFromDetailedView"/>
<include name="activateVcAndVerifyInHistory"/>
<!-- <include name="downloadAndVerifyHistoryUsingUinViaEsignet"/>-->
<!-- <include name="downloadAndVerifyHistoryUsingVidViaEsignet"/>-->
</methods>
</class>
<class name="iosTestCases.VerifyWelcomePagesTest">
<methods>
<include name="verifyWelcomePagesContent"/>
<include name="verifyWelcomePagesFromInjiTourGuide"/>
<include name="verifyGoBackFromInjiTourGuide"/>
<include name="verifyClickOnBackFromInjiTourGuide"/>
</methods>
</class>
</classes>
</test>
</suite>

View File

@@ -159,13 +159,13 @@ public class ChangeLanguageTest extends AndroidBaseTest {
assertEquals(addNewCardPage.verifyLanguageForAddNewCardGuideMessage(),"Mangyaring piliin ang iyong gustong tagabigay mula sa mga opsyon sa ibaba upang magdagdag ng bagong card."); assertEquals(addNewCardPage.verifyLanguageForAddNewCardGuideMessage(),"Mangyaring piliin ang iyong gustong tagabigay mula sa mga opsyon sa ibaba upang magdagdag ng bagong card.");
assertTrue(addNewCardPage.isIssuerSearchBarDisplayedInFilipino(),"verify if search bar is displayed in filipino"); assertTrue(addNewCardPage.isIssuerSearchBarDisplayedInFilipino(),"verify if search bar is displayed in filipino");
addNewCardPage.sendTextInIssuerSearchBar("uin"); addNewCardPage.sendTextInIssuerSearchBar("I-download ang Mga Kredensyal ng MOSIP ");
assertTrue(addNewCardPage.isDownloadViaUinDisplayed(),"verify if download via uin vid aid"); assertTrue(addNewCardPage.isDownloadViaUinDisplayed(),"verify if download via uin vid aid");
addNewCardPage.clickOnBack(); addNewCardPage.clickOnBack();
homePage.downloadCard(); homePage.downloadCard();
addNewCardPage.sendTextInIssuerSearchBar("e-signet"); addNewCardPage.sendTextInIssuerSearchBar("I-download ang Mga Kredensyal ng MOSIP");
assertTrue(addNewCardPage.isDownloadViaEsignetDisplayed(),"verify if download via e-signet is displayed"); assertTrue(addNewCardPage.isDownloadViaEsignetDisplayed(),"verify if download via e-signet is displayed");
} }
@@ -202,13 +202,13 @@ public class ChangeLanguageTest extends AndroidBaseTest {
assertEquals(addNewCardPage.verifyLanguageForAddNewCardGuideMessage(),"Mangyaring piliin ang iyong gustong tagabigay mula sa mga opsyon sa ibaba upang magdagdag ng bagong card."); assertEquals(addNewCardPage.verifyLanguageForAddNewCardGuideMessage(),"Mangyaring piliin ang iyong gustong tagabigay mula sa mga opsyon sa ibaba upang magdagdag ng bagong card.");
assertTrue(addNewCardPage.isIssuerSearchBarDisplayedInFilipino(),"verify if search bar is displayed in filipino"); assertTrue(addNewCardPage.isIssuerSearchBarDisplayedInFilipino(),"verify if search bar is displayed in filipino");
addNewCardPage.sendTextInIssuerSearchBar("ui"); addNewCardPage.sendTextInIssuerSearchBar("otp");
assertTrue(addNewCardPage.isDownloadViaUinDisplayed(),"verify if download via uin vid aid"); assertTrue(addNewCardPage.isDownloadViaUinDisplayed(),"verify if download via uin vid aid");
addNewCardPage.clickOnBack(); addNewCardPage.clickOnBack();
homePage.downloadCard(); homePage.downloadCard();
addNewCardPage.sendTextInIssuerSearchBar("e-si"); addNewCardPage.sendTextInIssuerSearchBar("I-download ang");
assertTrue(addNewCardPage.isDownloadViaEsignetDisplayed(),"verify if download via e-signet is displayed"); assertTrue(addNewCardPage.isDownloadViaEsignetDisplayed(),"verify if download via e-signet is displayed");
} }
@@ -245,14 +245,14 @@ public class ChangeLanguageTest extends AndroidBaseTest {
assertEquals(addNewCardPage.verifyLanguageForAddNewCardGuideMessage(),"नया कार्ड जोड़ने के लिए कृपया नीचे दिए गए विकल्पों में से अपना पसंदीदा जारीकर्ता चुनें।"); assertEquals(addNewCardPage.verifyLanguageForAddNewCardGuideMessage(),"नया कार्ड जोड़ने के लिए कृपया नीचे दिए गए विकल्पों में से अपना पसंदीदा जारीकर्ता चुनें।");
assertTrue(addNewCardPage.isIssuerSearchBarDisplayedInHindi(),"verify if search bar is displayed in hindi"); assertTrue(addNewCardPage.isIssuerSearchBarDisplayedInHindi(),"verify if search bar is displayed in hindi");
addNewCardPage.sendTextInIssuerSearchBar("uin"); addNewCardPage.sendTextInIssuerSearchBar("OTP के माध्यम से MOSIP क्रेडेंशियल डाउनलोड करें");
assertTrue(addNewCardPage.isDownloadViaUinDisplayedInHindi(),"verify if download via uin vid aid displayed in hindi"); assertTrue(addNewCardPage.isDownloadViaUinDisplayedInHindi(),"verify if download via uin vid aid displayed in hindi");
addNewCardPage.clickOnBack(); addNewCardPage.clickOnBack();
homePage.downloadCard(); homePage.downloadCard();
addNewCardPage.sendTextInIssuerSearchBar("ई-हस्ताक्षर"); addNewCardPage.sendTextInIssuerSearchBar("MOSIP क्रेडेंशियल डाउनलोड करेंं");
assertTrue(addNewCardPage.isDownloadViaEsignetDisplayedInHindi(),"verify if download via e-signet is displayed"); assertTrue(addNewCardPage.isDownloadViaEsignetDisplayedInHindi(),"verify if download via e-signet is displayed");
} }
@@ -302,6 +302,8 @@ public class ChangeLanguageTest extends AndroidBaseTest {
HassleFreeAuthenticationPage hassleFreeAuthenticationPage = new HassleFreeAuthenticationPage(driver); HassleFreeAuthenticationPage hassleFreeAuthenticationPage = new HassleFreeAuthenticationPage(driver);
assertEquals(hassleFreeAuthenticationPage.verifyLanguageforHassleFreeAuthenticationPageLoaded(), "Walang problema sa pagpapatotoo"); assertEquals(hassleFreeAuthenticationPage.verifyLanguageforHassleFreeAuthenticationPageLoaded(), "Walang problema sa pagpapatotoo");
assertEquals(hassleFreeAuthenticationPage.getHassleFreeAuthenticationDescription(), "I-authenticate ang iyong sarili nang madali gamit ang nakaimbak na digital na kredensyal."); assertEquals(hassleFreeAuthenticationPage.getHassleFreeAuthenticationDescription(), "I-authenticate ang iyong sarili nang madali gamit ang nakaimbak na digital na kredensyal.");
hassleFreeAuthenticationPage.clickOnGoBack();
assertEquals(homePage.getShareButton(), "Ibahagi");
} }
@Test @Test
@@ -350,6 +352,8 @@ public class ChangeLanguageTest extends AndroidBaseTest {
HassleFreeAuthenticationPage hassleFreeAuthenticationPage = new HassleFreeAuthenticationPage(driver); HassleFreeAuthenticationPage hassleFreeAuthenticationPage = new HassleFreeAuthenticationPage(driver);
assertEquals(hassleFreeAuthenticationPage.verifyLanguageforHassleFreeAuthenticationPageLoaded(), "परेशानी मुक्त प्रमाणीकरण"); assertEquals(hassleFreeAuthenticationPage.verifyLanguageforHassleFreeAuthenticationPageLoaded(), "परेशानी मुक्त प्रमाणीकरण");
assertEquals(hassleFreeAuthenticationPage.getHassleFreeAuthenticationDescription(), "संग्रहीत डिजिटल क्रेडेंशियल का उपयोग करके आसानी से स्वयं को प्रमाणित करें।"); assertEquals(hassleFreeAuthenticationPage.getHassleFreeAuthenticationDescription(), "संग्रहीत डिजिटल क्रेडेंशियल का उपयोग करके आसानी से स्वयं को प्रमाणित करें।");
hassleFreeAuthenticationPage.clickOnGoBack();
assertEquals(homePage.getShareButton(), "शेयर करना");
} }
@Test @Test
@@ -398,6 +402,8 @@ public class ChangeLanguageTest extends AndroidBaseTest {
HassleFreeAuthenticationPage hassleFreeAuthenticationPage = new HassleFreeAuthenticationPage(driver); HassleFreeAuthenticationPage hassleFreeAuthenticationPage = new HassleFreeAuthenticationPage(driver);
assertEquals(hassleFreeAuthenticationPage.verifyLanguageforHassleFreeAuthenticationPageLoaded(), "தொந்தரவு இல்லாத அங்கீகாரம்"); assertEquals(hassleFreeAuthenticationPage.verifyLanguageforHassleFreeAuthenticationPageLoaded(), "தொந்தரவு இல்லாத அங்கீகாரம்");
assertEquals(hassleFreeAuthenticationPage.getHassleFreeAuthenticationDescription(), "சேமிக்கப்பட்ட டிஜிட்டல் நற்சான்றிதழைப் பயன்படுத்தி உங்களை எளிதாக அங்கீகரிக்கவும்."); assertEquals(hassleFreeAuthenticationPage.getHassleFreeAuthenticationDescription(), "சேமிக்கப்பட்ட டிஜிட்டல் நற்சான்றிதழைப் பயன்படுத்தி உங்களை எளிதாக அங்கீகரிக்கவும்.");
hassleFreeAuthenticationPage.clickOnGoBack();
assertEquals(homePage.getShareButton(), "பகிர்");
} }
@Test @Test
@@ -446,6 +452,8 @@ public class ChangeLanguageTest extends AndroidBaseTest {
HassleFreeAuthenticationPage hassleFreeAuthenticationPage = new HassleFreeAuthenticationPage(driver); HassleFreeAuthenticationPage hassleFreeAuthenticationPage = new HassleFreeAuthenticationPage(driver);
assertEquals(hassleFreeAuthenticationPage.verifyLanguageforHassleFreeAuthenticationPageLoaded(), "ಜಗಳ ಮುಕ್ತ ದೃಢೀಕರಣ"); assertEquals(hassleFreeAuthenticationPage.verifyLanguageforHassleFreeAuthenticationPageLoaded(), "ಜಗಳ ಮುಕ್ತ ದೃಢೀಕರಣ");
assertEquals(hassleFreeAuthenticationPage.getHassleFreeAuthenticationDescription(), "ಸಂಗ್ರಹಿಸಿದ ಡಿಜಿಟಲ್ ರುಜುವಾತುಗಳನ್ನು ಬಳಸಿಕೊಂಡು ಸುಲಭವಾಗಿ ನಿಮ್ಮನ್ನು ದೃಢೀಕರಿಸಿ."); assertEquals(hassleFreeAuthenticationPage.getHassleFreeAuthenticationDescription(), "ಸಂಗ್ರಹಿಸಿದ ಡಿಜಿಟಲ್ ರುಜುವಾತುಗಳನ್ನು ಬಳಸಿಕೊಂಡು ಸುಲಭವಾಗಿ ನಿಮ್ಮನ್ನು ದೃಢೀಕರಿಸಿ.");
hassleFreeAuthenticationPage.clickOnGoBack();
assertEquals(homePage.getShareButton(), "ಹಂಚಿಕೊಳ್ಳಿ");
} }

View File

@@ -69,6 +69,7 @@ public class CredentialRegistryTest extends AndroidBaseTest {
assertTrue(moreOptionsPage.isVcActivatedForOnlineLogin(), "Verify if VC is activated"); assertTrue(moreOptionsPage.isVcActivatedForOnlineLogin(), "Verify if VC is activated");
moreOptionsPage.clickOnCloseButton(); moreOptionsPage.clickOnCloseButton();
assertTrue(homePage.isNameDisplayed(TestDataReader.readData("fullName")), "Verify if full name is displayed");
DetailedVcViewPage detailedVcViewPage = homePage.openDetailedVcView(TestDataReader.readData("fullName")); DetailedVcViewPage detailedVcViewPage = homePage.openDetailedVcView(TestDataReader.readData("fullName"));
assertTrue(detailedVcViewPage.isCredentialRegistryTextDisplayed(),"Verify if is credential registry text displayed"); assertTrue(detailedVcViewPage.isCredentialRegistryTextDisplayed(),"Verify if is credential registry text displayed");
assertEquals(detailedVcViewPage.getCredentialRegistryValue(), TestDataReader.readData("newEnv"), "Verify changed env is displayed in detailed vc"); assertEquals(detailedVcViewPage.getCredentialRegistryValue(), TestDataReader.readData("newEnv"), "Verify changed env is displayed in detailed vc");
@@ -140,11 +141,7 @@ public class CredentialRegistryTest extends AndroidBaseTest {
assertTrue(credentialRegistryPage.isCredentialRegistryTextBoxHeaderDisplayed(), "Verify if CredentialRegistry page is displayed"); assertTrue(credentialRegistryPage.isCredentialRegistryTextBoxHeaderDisplayed(), "Verify if CredentialRegistry page is displayed");
credentialRegistryPage.setEnterIdTextBox(TestDataReader.readData("invalidenv")).clickOnSaveButton(); credentialRegistryPage.setEnterIdTextBox(TestDataReader.readData("invalidenv")).clickOnSaveButton();
assertTrue(settingsPage.isSettingPageLoaded(), "Verify if setting page is displayed"); assertTrue(credentialRegistryPage.isCredentialRegistryErrorMessageDisplayed(), "Verify if error message is displayed");
credentialRegistryPage.clickOnBackArrow();
AddNewCardPage addNewCardPage = homePage.downloadCard();
assertTrue(homePage.verifyLanguageForNoInternetConnectionDisplayed("English"), "Verify if no internet connection is displayed");
} }
@Test @Test
@@ -239,7 +236,7 @@ public class CredentialRegistryTest extends AndroidBaseTest {
GenerateUinOrVidPage generateUinOrVidPage = retrieveIdPage.clickOnGetItNowText(); GenerateUinOrVidPage generateUinOrVidPage = retrieveIdPage.clickOnGetItNowText();
assertTrue(generateUinOrVidPage.isGenerateUinOrVidPageLoaded(), "Verify if generate uin or vid page page is displayed"); assertTrue(generateUinOrVidPage.isGenerateUinOrVidPageLoaded(), "Verify if generate uin or vid page page is displayed");
OtpVerificationPage otpVerification = generateUinOrVidPage.enterApplicationID(TestDataReader.readData("aid")).clickOnGetUinOrVidButton(); generateUinOrVidPage.enterApplicationID(TestDataReader.readData("aid")).clickOnGetUinOrVidButton();
assertTrue(retrieveIdPage.isAidIsNotReadyYetErrorDisplayed(), "Verify if aid is not ready displayed"); assertTrue(retrieveIdPage.isAidIsNotReadyYetErrorDisplayed(), "Verify if aid is not ready displayed");
} }
@@ -370,7 +367,7 @@ public class CredentialRegistryTest extends AndroidBaseTest {
PleaseConfirmPopupPage pleaseConfirmPopupPage = moreOptionsPage.clickOnActivationPending(); PleaseConfirmPopupPage pleaseConfirmPopupPage = moreOptionsPage.clickOnActivationPending();
assertTrue(pleaseConfirmPopupPage.isPleaseConfirmPopupPageLoaded(), "Verify if pop up page is displayed"); assertTrue(pleaseConfirmPopupPage.isPleaseConfirmPopupPageLoaded(), "Verify if pop up page is displayed");
OtpVerificationPage otpVerificationPage = pleaseConfirmPopupPage.clickOnConfirmButton(); pleaseConfirmPopupPage.clickOnConfirmButton();
assertTrue(moreOptionsPage.isSomethingIsWrongPopupVisible(), "Verify if somthing went wrong please try again popup displayed"); assertTrue(moreOptionsPage.isSomethingIsWrongPopupVisible(), "Verify if somthing went wrong please try again popup displayed");
} }
@@ -469,11 +466,7 @@ public class CredentialRegistryTest extends AndroidBaseTest {
assertTrue(credentialRegistryPage.isCredentialRegistryTextBoxHeaderDisplayed(), "Verify if CredentialRegistry page is displayed"); assertTrue(credentialRegistryPage.isCredentialRegistryTextBoxHeaderDisplayed(), "Verify if CredentialRegistry page is displayed");
credentialRegistryPage.setEnterIdTextBox(TestDataReader.readData("invalidenv")).enterUrlToEsignetHostTextBox(TestDataReader.readData("invalidenv")).clickOnSaveButton(); credentialRegistryPage.setEnterIdTextBox(TestDataReader.readData("invalidenv")).enterUrlToEsignetHostTextBox(TestDataReader.readData("invalidenv")).clickOnSaveButton();
assertTrue(settingsPage.isSettingPageLoaded(), "Verify if setting page is displayed"); assertTrue(credentialRegistryPage.isCredentialRegistryErrorMessageDisplayed(), "Verify if error message is displayed");
credentialRegistryPage.clickOnBackArrow();
AddNewCardPage addNewCardPage = homePage.downloadCard();
assertTrue(homePage.verifyLanguageForNoInternetConnectionDisplayed(null), "Verify if no internet connection is displayed");
} }
@Test @Test
@@ -507,11 +500,99 @@ public class CredentialRegistryTest extends AndroidBaseTest {
assertTrue(credentialRegistryPage.isCredentialRegistryTextBoxHeaderInFilipinoDisplayed(), "Verify if CredentialRegistry page is displayed"); assertTrue(credentialRegistryPage.isCredentialRegistryTextBoxHeaderInFilipinoDisplayed(), "Verify if CredentialRegistry page is displayed");
credentialRegistryPage.setEnterIdTextBox(TestDataReader.readData("invalidenv")).enterUrlToEsignetHostTextBox(TestDataReader.readData("invalidenv")).clickOnSaveButton(); credentialRegistryPage.setEnterIdTextBox(TestDataReader.readData("invalidenv")).enterUrlToEsignetHostTextBox(TestDataReader.readData("invalidenv")).clickOnSaveButton();
assertTrue(settingsPage.isSettingPageLoadedInFilipion(), "Verify if setting page is displayed in filipino"); assertTrue(credentialRegistryPage.isCredentialRegistryErrorMessageDisplayed(), "Verify if error message is displayed");
credentialRegistryPage.clickOnBackArrow(); }
@Test
public void downloadVcInNewEnvAndVerifyInDetailedVcViewPage() throws InterruptedException {
ChooseLanguagePage chooseLanguagePage = new ChooseLanguagePage(driver);
assertTrue(chooseLanguagePage.isChooseLanguagePageLoaded(), "Verify if choose language page is displayed");
WelcomePage welcomePage = chooseLanguagePage.clickOnSavePreference();
assertTrue(welcomePage.isWelcomePageLoaded(), "Verify if welcome page is loaded");
AppUnlockMethodPage appUnlockMethodPage = welcomePage.clickOnSkipButton();
assertTrue(appUnlockMethodPage.isAppUnlockMethodPageLoaded(), "Verify if app unlocked page is displayed");
SetPasscode setPasscode = appUnlockMethodPage.clickOnUsePasscode();
assertTrue(setPasscode.isSetPassCodePageLoaded(), "Verify if set passcode page is displayed");
ConfirmPasscode confirmPasscode = setPasscode.enterPasscode(TestDataReader.readData("passcode"), Target.ANDROID);
assertTrue(confirmPasscode.isConfirmPassCodePageLoaded(), "Verify if confirm passcode page is displayed");
HomePage homePage = confirmPasscode.enterPasscodeInConfirmPasscodePage(TestDataReader.readData("passcode"), Target.ANDROID);
assertTrue(homePage.isHomePageLoaded(), "Verify if home page is displayed");
SettingsPage settingsPage = homePage.clickOnSettingIcon();
assertTrue(settingsPage.isSettingPageLoaded(), "Verify if setting page is displayed");
CredentialRegistryPage credentialRegistryPage =settingsPage.clickOnCredentialRegistry();
assertTrue(credentialRegistryPage.isCredentialRegistryTextBoxHeaderDisplayed(), "Verify if CredentialRegistry page is displayed");
credentialRegistryPage.setEnterIdTextBox(TestDataReader.readData("newEnv")).clickOnSaveButton();
assertTrue(settingsPage.isSettingPageLoaded(), "Verify if setting page is displayed");
credentialRegistryPage.clickOnBackArrow();
AddNewCardPage addNewCardPage = homePage.downloadCard(); AddNewCardPage addNewCardPage = homePage.downloadCard();
assertTrue(homePage.verifyLanguageForNoInternetConnectionDisplayed("Filipino"), "Verify if no internet connection is displayed in filipino");
assertTrue(addNewCardPage.isAddNewCardPageLoaded(), "Verify if add new card page is displayed");
RetrieveIdPage retrieveIdPage = addNewCardPage.clickOnDownloadViaUin();
assertTrue(retrieveIdPage.isRetrieveIdPageLoaded(), "Verify if retrieve id page is displayed");
OtpVerificationPage otpVerification = retrieveIdPage.setEnterIdTextBox(TestDataReader.readData("newuin")).clickOnGenerateCardButton();
assertTrue(otpVerification.isOtpVerificationPageLoaded(), "Verify if otp verification page is displayed");
otpVerification.enterOtp(TestDataReader.readData("otp"), Target.ANDROID);
assertTrue(homePage.isNameDisplayed(TestDataReader.readData("fullName")), "Verify if full name is displayed");
MoreOptionsPage moreOptionsPage = homePage.clickOnMoreOptionsButton();
assertTrue(moreOptionsPage.isMoreOptionsPageLoaded(), "Verify if more options page is displayed");
PleaseConfirmPopupPage pleaseConfirmPopupPage = moreOptionsPage.clickOnActivationPending();
assertTrue(pleaseConfirmPopupPage.isPleaseConfirmPopupPageLoaded(), "Verify if pop up page is displayed");
OtpVerificationPage otpVerificationPage = pleaseConfirmPopupPage.clickOnConfirmButton();
assertTrue(otpVerificationPage.isOtpVerificationPageLoaded(), "Verify if otp verification page is displayed");
otpVerificationPage.enterOtp(TestDataReader.readData("otp"), Target.ANDROID);
assertTrue(moreOptionsPage.isVcActivatedForOnlineLogin(), "Verify if VC is activated");
moreOptionsPage.clickOnCloseButton();
assertTrue(homePage.isNameDisplayed(TestDataReader.readData("fullName")), "Verify if full name is displayed");
DetailedVcViewPage detailedVcViewPage = homePage.openDetailedVcView(TestDataReader.readData("fullName"));
assertTrue(detailedVcViewPage.isCredentialRegistryTextDisplayed(),"Verify if is credential registry text displayed");
assertEquals(detailedVcViewPage.getCredentialRegistryValue(), TestDataReader.readData("newEnv"), "Verify changed env is displayed in detailed vc");
detailedVcViewPage.clickOnBackArrow();
homePage.clickOnSettingIcon();
assertTrue(settingsPage.isSettingPageLoaded(), "Verify if setting page is displayed");
settingsPage.clickOnCredentialRegistry();
assertTrue(credentialRegistryPage.isCredentialRegistryTextBoxHeaderDisplayed(), "Verify if CredentialRegistry page is displayed");
credentialRegistryPage.setEnterIdTextBox(TestDataReader.readData("injiEnv")).clickOnSaveButton();
assertTrue(settingsPage.isSettingPageLoaded(), "Verify if setting page is displayed");
credentialRegistryPage.clickOnBackArrow();
homePage.downloadCard();
assertTrue(addNewCardPage.isAddNewCardPageLoaded(), "Verify if add new card page is displayed");
addNewCardPage.clickOnDownloadViaUin();
assertTrue(retrieveIdPage.isRetrieveIdPageLoaded(), "Verify if retrieve id page is displayed");
retrieveIdPage.setEnterIdTextBox(TestDataReader.readData("uin")).clickOnGenerateCardButton();
assertTrue(otpVerification.isOtpVerificationPageLoaded(), "Verify if otp verification page is displayed");
otpVerification.enterOtp(TestDataReader.readData("otp"), Target.ANDROID);
assertTrue(homePage.isNameDisplayed(TestDataReader.readData("fullName")), "Verify if full name is displayed");
homePage.openDetailedVcView(TestDataReader.readData("fullName"));
assertTrue(detailedVcViewPage.isCredentialRegistryTextDisplayed(),"Verify if is credential registry text displayed");
assertEquals(detailedVcViewPage.getCredentialRegistryValue(), TestDataReader.readData("injiEnv"), "Verify inji env is displayed in detailed vc");
} }
} }

View File

@@ -61,7 +61,7 @@ public class DeletingVcTest extends AndroidBaseTest {
historyPage.verifyHistory(TestDataReader.readData("uin") + " Removed from wallet", Target.ANDROID); historyPage.verifyHistory(TestDataReader.readData("uin") + " Removed from wallet", Target.ANDROID);
assertTrue(historyPage.verifyDeleteHistory(TestDataReader.readData("uin"), Target.ANDROID), "Verify if deleted history is displayed"); assertTrue(historyPage.verifyDeleteHistory(TestDataReader.readData("uin"), Target.ANDROID), "Verify if deleted history is displayed");
ScanPage scanPage = homePage.clickOnScanButton(); SharePage scanPage = homePage.clickOnShareButton();
assertTrue(scanPage.isNoShareableCardsMessageDisplayed(), "Verify if no shareable cards are available message is displayed"); assertTrue(scanPage.isNoShareableCardsMessageDisplayed(), "Verify if no shareable cards are available message is displayed");
} }

View File

@@ -7,6 +7,7 @@ import inji.pages.*;
import inji.utils.TestDataReader; import inji.utils.TestDataReader;
import org.testng.annotations.Test; import org.testng.annotations.Test;
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertTrue; import static org.testng.Assert.assertTrue;
import static org.testng.Assert.assertTrue; import static org.testng.Assert.assertTrue;
@@ -39,6 +40,7 @@ public class GenerateUinOrVidTest extends AndroidBaseTest {
RetrieveIdPage retrieveIdPage = addNewCardPage.clickOnDownloadViaUin(); RetrieveIdPage retrieveIdPage = addNewCardPage.clickOnDownloadViaUin();
assertTrue(retrieveIdPage.isRetrieveIdPageLoaded(), "Verify if retrieve id page is displayed"); assertTrue(retrieveIdPage.isRetrieveIdPageLoaded(), "Verify if retrieve id page is displayed");
assertEquals(retrieveIdPage.verifyGetItTextDisplayed(),"Get it now using your AID.");
GenerateUinOrVidPage generateUinOrVidPage = retrieveIdPage.clickOnGetItNowText(); GenerateUinOrVidPage generateUinOrVidPage = retrieveIdPage.clickOnGetItNowText();
assertTrue(generateUinOrVidPage.isGenerateUinOrVidPageLoaded(), "Verify if generate uin or vid page page is displayed"); assertTrue(generateUinOrVidPage.isGenerateUinOrVidPageLoaded(), "Verify if generate uin or vid page page is displayed");

View File

@@ -86,7 +86,7 @@ public class NoNetworkAndroidTest extends AndroidBaseTest {
assertTrue(homePage.isNameDisplayed(TestDataReader.readData("fullName")), "Verify if full name is displayed"); assertTrue(homePage.isNameDisplayed(TestDataReader.readData("fullName")), "Verify if full name is displayed");
AndroidUtil.enableAirplaneMode(); AndroidUtil.enableAirplaneMode();
assertTrue(homePage.clickOnScanButton().acceptPermissionPopupBluetooth().isCameraOpen()); assertTrue(homePage.clickOnShareButton().acceptPermissionPopupBluetooth().isCameraOpen());
AndroidUtil.disableAirplaneMode(); AndroidUtil.disableAirplaneMode();
} }
@Test @Test
@@ -532,7 +532,7 @@ public class NoNetworkAndroidTest extends AndroidBaseTest {
assertTrue(homePage.isNameDisplayed(TestDataReader.readData("fullName")), "Verify if full name is displayed"); assertTrue(homePage.isNameDisplayed(TestDataReader.readData("fullName")), "Verify if full name is displayed");
AndroidUtil.enableAirplaneMode(); AndroidUtil.enableAirplaneMode();
assertTrue(homePage.clickOnScanButton().acceptPermissionPopupBluetooth().isCameraOpen()); assertTrue(homePage.clickOnShareButton().acceptPermissionPopupBluetooth().isCameraOpen());
AndroidUtil.disableAirplaneMode(); AndroidUtil.disableAirplaneMode();
} }
@@ -638,4 +638,39 @@ public class NoNetworkAndroidTest extends AndroidBaseTest {
assertTrue(homePage.verifyLanguageForNoInternetConnectionDisplayed("Tamil"), "Verify if try again in tamil is displayed"); assertTrue(homePage.verifyLanguageForNoInternetConnectionDisplayed("Tamil"), "Verify if try again in tamil is displayed");
} }
@Test
public void verifyVcIssuerListWithoutNetwork() throws InterruptedException {
ChooseLanguagePage chooseLanguagePage = new ChooseLanguagePage(driver);
assertTrue(chooseLanguagePage.isChooseLanguagePageLoaded(), "Verify if choose language page is displayed");
WelcomePage welcomePage = chooseLanguagePage.clickOnSavePreference();
assertTrue(welcomePage.isWelcomePageLoaded(), "Verify if welcome page is loaded");
AppUnlockMethodPage appUnlockMethodPage = welcomePage.clickOnSkipButton();
assertTrue(appUnlockMethodPage.isAppUnlockMethodPageLoaded(), "Verify if app unlocked page is displayed");
SetPasscode setPasscode = appUnlockMethodPage.clickOnUsePasscode();
assertTrue(setPasscode.isSetPassCodePageLoaded(), "Verify if set passcode page is displayed");
ConfirmPasscode confirmPasscode = setPasscode.enterPasscode(TestDataReader.readData("passcode"), Target.ANDROID);
assertTrue(confirmPasscode.isConfirmPassCodePageLoaded(), "Verify if confirm passcode page is displayed");
HomePage homePage = confirmPasscode.enterPasscodeInConfirmPasscodePage(TestDataReader.readData("passcode"), Target.ANDROID);
assertTrue(homePage.isHomePageLoaded(), "Verify if home page is displayed");
AddNewCardPage addNewCardPage = homePage.downloadCard();
assertTrue(addNewCardPage.isAddNewCardPageLoaded(), "Verify if add new card page is displayed");
AndroidUtil.enableAirplaneMode();
addNewCardPage.clickOnBack();
homePage.downloadCard();
assertTrue(addNewCardPage.isIssuerDescriptionMosipDisplayed(), "Verify if issuer description mosip displayed");
assertTrue(addNewCardPage.isIssuerDescriptionEsignetDisplayed(), "Verify if issuer description esignet displayed");
AndroidUtil.disableAirplaneMode();
}
} }

View File

@@ -4,9 +4,11 @@ import BaseTest.AndroidBaseTest;
import inji.api.BaseTestCase; import inji.api.BaseTestCase;
import inji.constants.Target; import inji.constants.Target;
import inji.pages.*; import inji.pages.*;
import inji.utils.AndroidUtil;
import inji.utils.TestDataReader; import inji.utils.TestDataReader;
import org.testng.annotations.Test; import org.testng.annotations.Test;
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertTrue; import static org.testng.Assert.assertTrue;
import static org.testng.Assert.assertTrue; import static org.testng.Assert.assertTrue;
@@ -99,7 +101,7 @@ public class PinVcTest extends AndroidBaseTest {
moreOptionsPage.clickOnPinOrUnPinCard(); moreOptionsPage.clickOnPinOrUnPinCard();
assertTrue(homePage.isPinIconDisplayed(), "Verify if pin icon on vc is displayed"); assertTrue(homePage.isPinIconDisplayed(), "Verify if pin icon on vc is displayed");
ScanPage scanPage=homePage.clickOnScanButton(); SharePage scanPage=homePage.clickOnShareButton();
scanPage.acceptPermissionPopupBluetooth(); scanPage.acceptPermissionPopupBluetooth();
assertTrue(scanPage.isCameraPageLoaded(), "Verify camera page is displayed"); assertTrue(scanPage.isCameraPageLoaded(), "Verify camera page is displayed");
@@ -177,4 +179,50 @@ public class PinVcTest extends AndroidBaseTest {
} }
@Test
public void verifyMessageAfterDenyBluetoothPopup() throws InterruptedException {
ChooseLanguagePage chooseLanguagePage = new ChooseLanguagePage(driver);
assertTrue(chooseLanguagePage.isChooseLanguagePageLoaded(), "Verify if choose language page is displayed");
WelcomePage welcomePage = chooseLanguagePage.clickOnSavePreference();
assertTrue(welcomePage.isWelcomePageLoaded(), "Verify if welcome page is loaded");
AppUnlockMethodPage appUnlockMethodPage = welcomePage.clickOnSkipButton();
assertTrue(appUnlockMethodPage.isAppUnlockMethodPageLoaded(), "Verify if app unlocked page is displayed");
SetPasscode setPasscode = appUnlockMethodPage.clickOnUsePasscode();
assertTrue(setPasscode.isSetPassCodePageLoaded(), "Verify if set passcode page is displayed");
ConfirmPasscode confirmPasscode = setPasscode.enterPasscode(TestDataReader.readData("passcode"), Target.ANDROID);
assertTrue(confirmPasscode.isConfirmPassCodePageLoaded(), "Verify if confirm passcode page is displayed");
HomePage homePage = confirmPasscode.enterPasscodeInConfirmPasscodePage(TestDataReader.readData("passcode"), Target.ANDROID);
assertTrue(homePage.isHomePageLoaded(), "Verify if home page is displayed");
AddNewCardPage addNewCardPage = homePage.downloadCard();
assertTrue(addNewCardPage.isAddNewCardPageLoaded(), "Verify if add new card page is displayed");
RetrieveIdPage retrieveIdPage = addNewCardPage.clickOnDownloadViaUin();
assertTrue(retrieveIdPage.isRetrieveIdPageLoaded(), "Verify if retrieve id page is displayed");
OtpVerificationPage otpVerification = retrieveIdPage.setEnterIdTextBox(TestDataReader.readData("uin")).clickOnGenerateCardButton();
assertTrue(otpVerification.isOtpVerificationPageLoaded(), "Verify if otp verification page is displayed");
otpVerification.enterOtp(BaseTestCase.getOtp(), Target.ANDROID);
assertTrue(homePage.isNameDisplayed(TestDataReader.readData("fullName")), "Verify if full name is displayed");
MoreOptionsPage moreOptionsPage = homePage.clickOnMoreOptionsButton();
assertTrue(moreOptionsPage.isMoreOptionsPageLoaded(), "Verify if more options page is displayed");
moreOptionsPage.clickOnPinOrUnPinCard();
assertTrue(homePage.isPinIconDisplayed(), "Verify if pin icon on vc is displayed");
SharePage scanPage=homePage.clickOnShareButton();
AndroidUtil.disableBluetooth();
scanPage.denyPermissionPopupBluetooth();
assertEquals(scanPage.isBluetoothIsTurnedOffMessageDisplayed(),"bluetooth is turned off, please turn it ON from quick settings menu");
}
} }

View File

@@ -35,6 +35,8 @@ public class ReceiveCardTest extends AndroidBaseTest {
SettingsPage settingsPage = homePage.clickOnSettingIcon(); SettingsPage settingsPage = homePage.clickOnSettingIcon();
ReceiveCardPage receiveCardPage = settingsPage.clickOnReceiveCard(); ReceiveCardPage receiveCardPage = settingsPage.clickOnReceiveCard();
receiveCardPage.clickOnAllowButton();
assertTrue(receiveCardPage.isReceiveCardHeaderDisplayed(), "Verify if QR code header is displayed"); assertTrue(receiveCardPage.isReceiveCardHeaderDisplayed(), "Verify if QR code header is displayed");
assertTrue(receiveCardPage.isWaitingForConnectionDisplayed(), "Verify if waiting for connection displayed"); assertTrue(receiveCardPage.isWaitingForConnectionDisplayed(), "Verify if waiting for connection displayed");
} }

View File

@@ -30,7 +30,7 @@ public class ShareVcTest extends AndroidBaseTest {
HomePage homePage = confirmPasscode.enterPasscodeInConfirmPasscodePage(TestDataReader.readData("passcode"), Target.ANDROID); HomePage homePage = confirmPasscode.enterPasscodeInConfirmPasscodePage(TestDataReader.readData("passcode"), Target.ANDROID);
assertTrue(homePage.isHomePageLoaded(), "Verify if home page is displayed"); assertTrue(homePage.isHomePageLoaded(), "Verify if home page is displayed");
ScanPage scanPage = homePage.clickOnScanButton(); SharePage scanPage = homePage.clickOnShareButton();
assertTrue(scanPage.isNoShareableCardsMessageDisplayed(), "Verify if no shareable cards are available message is displayed"); assertTrue(scanPage.isNoShareableCardsMessageDisplayed(), "Verify if no shareable cards are available message is displayed");
} }

View File

@@ -38,7 +38,7 @@ public class VcDownloadAndVerifyUsingEsignetTest extends AndroidBaseTest {
assertTrue(addNewCardPage.isIssuerDescriptionMosipDisplayed(), "Verify if issuer description mosip displayed"); assertTrue(addNewCardPage.isIssuerDescriptionMosipDisplayed(), "Verify if issuer description mosip displayed");
assertTrue(addNewCardPage.isIssuerDescriptionEsignetDisplayed(), "Verify if issuer description esignet displayed"); assertTrue(addNewCardPage.isIssuerDescriptionEsignetDisplayed(), "Verify if issuer description esignet displayed");
assertTrue(addNewCardPage.isIssuerSearchBarDisplayed(), "Verify if issuer search bar displayed"); assertTrue(addNewCardPage.isIssuerSearchBarDisplayed(), "Verify if issuer search bar displayed");
addNewCardPage.sendTextInIssuerSearchBar("e-signet"); addNewCardPage.sendTextInIssuerSearchBar("Download MOSIP Credentials");
assertTrue(addNewCardPage.isAddNewCardPageLoaded(), "Verify if add new card page is displayed"); assertTrue(addNewCardPage.isAddNewCardPageLoaded(), "Verify if add new card page is displayed");
assertTrue(addNewCardPage.isAddNewCardPageGuideMessageForEsignetDisplayed(), "Verify if add new card guide message displayed"); assertTrue(addNewCardPage.isAddNewCardPageGuideMessageForEsignetDisplayed(), "Verify if add new card guide message displayed");
assertTrue(addNewCardPage.isDownloadViaEsignetDisplayed(), "Verify if download via uin displayed"); assertTrue(addNewCardPage.isDownloadViaEsignetDisplayed(), "Verify if download via uin displayed");

View File

@@ -5,12 +5,24 @@ import inji.api.BaseTestCase;
import inji.constants.Target; import inji.constants.Target;
import inji.pages.*; import inji.pages.*;
import inji.utils.AndroidUtil; import inji.utils.AndroidUtil;
import inji.utils.IosUtil;
import inji.utils.TestDataReader; import inji.utils.TestDataReader;
import org.testng.annotations.Test;
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertTrue; import static org.testng.Assert.assertTrue;
import static org.testng.Assert.*; import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import org.openqa.selenium.By;
import org.openqa.selenium.Dimension;
import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.WebElement;
import org.testng.annotations.Test;
import com.google.common.collect.ImmutableMap;
public class VcDownloadAndVerifyUsingUinTest extends AndroidBaseTest { public class VcDownloadAndVerifyUsingUinTest extends AndroidBaseTest {
@Test @Test
@@ -39,10 +51,15 @@ public class VcDownloadAndVerifyUsingUinTest extends AndroidBaseTest {
assertTrue(addNewCardPage.isIssuerDescriptionMosipDisplayed(), "Verify if issuer description mosip displayed"); assertTrue(addNewCardPage.isIssuerDescriptionMosipDisplayed(), "Verify if issuer description mosip displayed");
assertTrue(addNewCardPage.isIssuerDescriptionEsignetDisplayed(), "Verify if issuer description esignet displayed"); assertTrue(addNewCardPage.isIssuerDescriptionEsignetDisplayed(), "Verify if issuer description esignet displayed");
assertTrue(addNewCardPage.isIssuerSearchBarDisplayed(), "Verify if issuer search bar displayed"); assertTrue(addNewCardPage.isIssuerSearchBarDisplayed(), "Verify if issuer search bar displayed");
addNewCardPage.sendTextInIssuerSearchBar("uin"); addNewCardPage.sendTextInIssuerSearchBar("Download MOSIP Credentials");
RetrieveIdPage retrieveIdPage = addNewCardPage.clickOnDownloadViaUin(); RetrieveIdPage retrieveIdPage = addNewCardPage.clickOnDownloadViaUin();
assertTrue(retrieveIdPage.isRetrieveIdPageLoaded(), "Verify if retrieve id page is displayed"); assertTrue(retrieveIdPage.isRetrieveIdPageLoaded(), "Verify if retrieve id page is displayed");
assertEquals(retrieveIdPage.getRetrieveIdPageHeader(),"Download your ID");
assertTrue(retrieveIdPage.verifyDownloadIdPageGuideMessage(), "Verify if retrieve id page guide message is displayed");
assertTrue(retrieveIdPage.isInfoIconDisplayed(), "Verify if info icon is displayed");
//retrieveIdPage.clickInfoIcon();
OtpVerificationPage otpVerification = retrieveIdPage.setEnterIdTextBox(TestDataReader.readData("uin")).clickOnGenerateCardButton(); OtpVerificationPage otpVerification = retrieveIdPage.setEnterIdTextBox(TestDataReader.readData("uin")).clickOnGenerateCardButton();
assertTrue(otpVerification.isOtpVerificationPageLoaded(), "Verify if otp verification page is displayed"); assertTrue(otpVerification.isOtpVerificationPageLoaded(), "Verify if otp verification page is displayed");
@@ -264,7 +281,9 @@ public class VcDownloadAndVerifyUsingUinTest extends AndroidBaseTest {
assertTrue(otpVerification.isOtpVerificationPageLoaded(), "Verify if otp verification page is displayed"); assertTrue(otpVerification.isOtpVerificationPageLoaded(), "Verify if otp verification page is displayed");
assertTrue(otpVerification.verifyOtpVerificationTimerCompleted(), "Verify timer has stop for otp verification"); assertTrue(otpVerification.verifyOtpVerificationTimerCompleted(), "Verify timer has stop for otp verification");
assertTrue(otpVerification.verifyResendCodeButtonDisplayed(), "Verify if resend code is displayed"); assertTrue(otpVerification.verifyResendCodeButtonDisplayedEnabled(), "Verify if resend code is enabled");
otpVerification.clickOnResendButton();
assertTrue(otpVerification.verifyOtpVerificationTimerDisplayedAfterClickOnResend(), "verify is You can resend the code displayed again after click on resend button ");
otpVerification.clickOnCrossIcon(); otpVerification.clickOnCrossIcon();
assertTrue(otpVerification.confirmPopupHeaderDisplayed(), "Verify if comfirm popup displayed"); assertTrue(otpVerification.confirmPopupHeaderDisplayed(), "Verify if comfirm popup displayed");
@@ -295,10 +314,7 @@ public class VcDownloadAndVerifyUsingUinTest extends AndroidBaseTest {
AddNewCardPage addNewCardPage = homePage.downloadCard(); AddNewCardPage addNewCardPage = homePage.downloadCard();
assertTrue(addNewCardPage.isAddNewCardPageLoaded(), "Verify if add new card page is displayed"); assertTrue(addNewCardPage.isAddNewCardPageLoaded(), "Verify if add new card page is displayed");
assertTrue(addNewCardPage.isIssuerDescriptionMosipDisplayed(), "Verify if issuer description mosip displayed");
assertTrue(addNewCardPage.isIssuerDescriptionEsignetDisplayed(), "Verify if issuer description esignet displayed");
assertTrue(addNewCardPage.isIssuerSearchBarDisplayed(), "Verify if issuer search bar displayed"); assertTrue(addNewCardPage.isIssuerSearchBarDisplayed(), "Verify if issuer search bar displayed");
addNewCardPage.sendTextInIssuerSearchBar("uin");
RetrieveIdPage retrieveIdPage = addNewCardPage.clickOnDownloadViaUin(); RetrieveIdPage retrieveIdPage = addNewCardPage.clickOnDownloadViaUin();
assertTrue(retrieveIdPage.isRetrieveIdPageLoaded(), "Verify if retrieve id page is displayed"); assertTrue(retrieveIdPage.isRetrieveIdPageLoaded(), "Verify if retrieve id page is displayed");

View File

@@ -4,10 +4,18 @@ import BaseTest.AndroidBaseTest;
import inji.constants.Target; import inji.constants.Target;
import inji.pages.*; import inji.pages.*;
import inji.utils.TestDataReader; import inji.utils.TestDataReader;
import io.appium.java_client.PerformsTouchActions;
import io.appium.java_client.TouchAction;
import io.appium.java_client.touch.offset.PointOption;
import org.testng.annotations.Test; import org.testng.annotations.Test;
import com.google.common.collect.ImmutableMap;
import static org.testng.Assert.assertTrue; import static org.testng.Assert.assertTrue;
import org.openqa.selenium.JavascriptExecutor;
import static org.testng.Assert.*; import static org.testng.Assert.*;
public class VerifyHelpPageTest extends AndroidBaseTest { public class VerifyHelpPageTest extends AndroidBaseTest {
@@ -36,13 +44,10 @@ public class VerifyHelpPageTest extends AndroidBaseTest {
HelpPage helpPage = homePage.clickOnHelpIcon(); HelpPage helpPage = homePage.clickOnHelpIcon();
assertEquals(helpPage.isHelpPageContentEmpty(),false,"verifying text is not empty"); assertEquals(helpPage.isHelpPageContentEmpty(),false,"verifying text is not empty");
// helpPage.scrollPerformInHelpPage();
// assertTrue(helpPage.isBiometricIsChangeTextDescription(), "Verify if biometric is text change displayed");
assertTrue(helpPage.isHelpPageLoaded(), "Verify if help page is displayed"); assertTrue(helpPage.isHelpPageLoaded(), "Verify if help page is displayed");
helpPage.exitHelpPage(); helpPage.exitHelpPage();
assertTrue(homePage.isHomePageLoaded(), "Verify if home page is displayed"); assertTrue(homePage.isHomePageLoaded(), "Verify if home page is displayed");
} }

View File

@@ -159,13 +159,13 @@ public class ChangeLanguageTest extends IosBaseTest {
assertEquals(addNewCardPage.verifyLanguageForAddNewCardGuideMessage(),"Mangyaring piliin ang iyong gustong tagabigay mula sa mga opsyon sa ibaba upang magdagdag ng bagong card."); assertEquals(addNewCardPage.verifyLanguageForAddNewCardGuideMessage(),"Mangyaring piliin ang iyong gustong tagabigay mula sa mga opsyon sa ibaba upang magdagdag ng bagong card.");
assertTrue(addNewCardPage.isIssuerSearchBarDisplayedInFilipino(),"verify if search bar is displayed in filipino"); assertTrue(addNewCardPage.isIssuerSearchBarDisplayedInFilipino(),"verify if search bar is displayed in filipino");
addNewCardPage.sendTextInIssuerSearchBar("uin"); addNewCardPage.sendTextInIssuerSearchBar("I-download ang Mga Kredensyal ng MOSIP ");
assertTrue(addNewCardPage.isDownloadViaUinDisplayed(),"verify if download via uin vid aid"); assertTrue(addNewCardPage.isDownloadViaUinDisplayed(),"verify if download via uin vid aid");
addNewCardPage.clickOnBack(); addNewCardPage.clickOnBack();
homePage.downloadCard(); homePage.downloadCard();
addNewCardPage.sendTextInIssuerSearchBar("e-signet"); addNewCardPage.sendTextInIssuerSearchBar("I-download ang Mga Kredensyal ng MOSIP");
assertTrue(addNewCardPage.isDownloadViaEsignetDisplayed(),"verify if download via e-signet is displayed"); assertTrue(addNewCardPage.isDownloadViaEsignetDisplayed(),"verify if download via e-signet is displayed");
} }
@@ -202,13 +202,13 @@ public class ChangeLanguageTest extends IosBaseTest {
assertEquals(addNewCardPage.verifyLanguageForAddNewCardGuideMessage(),"Mangyaring piliin ang iyong gustong tagabigay mula sa mga opsyon sa ibaba upang magdagdag ng bagong card."); assertEquals(addNewCardPage.verifyLanguageForAddNewCardGuideMessage(),"Mangyaring piliin ang iyong gustong tagabigay mula sa mga opsyon sa ibaba upang magdagdag ng bagong card.");
assertTrue(addNewCardPage.isIssuerSearchBarDisplayedInFilipino(),"verify if search bar is displayed in filipino"); assertTrue(addNewCardPage.isIssuerSearchBarDisplayedInFilipino(),"verify if search bar is displayed in filipino");
addNewCardPage.sendTextInIssuerSearchBar("ui"); addNewCardPage.sendTextInIssuerSearchBar("otp");
assertTrue(addNewCardPage.isDownloadViaUinDisplayed(),"verify if download via uin vid aid"); assertTrue(addNewCardPage.isDownloadViaUinDisplayed(),"verify if download via uin vid aid");
addNewCardPage.clickOnBack(); addNewCardPage.clickOnBack();
homePage.downloadCard(); homePage.downloadCard();
addNewCardPage.sendTextInIssuerSearchBar("e-si"); addNewCardPage.sendTextInIssuerSearchBar("I-download ang");
assertTrue(addNewCardPage.isDownloadViaEsignetDisplayed(),"verify if download via e-signet is displayed"); assertTrue(addNewCardPage.isDownloadViaEsignetDisplayed(),"verify if download via e-signet is displayed");
} }
@@ -245,14 +245,14 @@ public class ChangeLanguageTest extends IosBaseTest {
assertEquals(addNewCardPage.verifyLanguageForAddNewCardGuideMessage(),"नया कार्ड जोड़ने के लिए कृपया नीचे दिए गए विकल्पों में से अपना पसंदीदा जारीकर्ता चुनें।"); assertEquals(addNewCardPage.verifyLanguageForAddNewCardGuideMessage(),"नया कार्ड जोड़ने के लिए कृपया नीचे दिए गए विकल्पों में से अपना पसंदीदा जारीकर्ता चुनें।");
assertTrue(addNewCardPage.isIssuerSearchBarDisplayedInHindi(),"verify if search bar is displayed in hindi"); assertTrue(addNewCardPage.isIssuerSearchBarDisplayedInHindi(),"verify if search bar is displayed in hindi");
addNewCardPage.sendTextInIssuerSearchBar("uin"); addNewCardPage.sendTextInIssuerSearchBar("OTP के माध्यम से MOSIP क्रेडेंशियल डाउनलोड करें");
assertTrue(addNewCardPage.isDownloadViaUinDisplayedInHindi(),"verify if download via uin vid aid displayed in hindi"); assertTrue(addNewCardPage.isDownloadViaUinDisplayedInHindi(),"verify if download via uin vid aid displayed in hindi");
addNewCardPage.clickOnBack(); addNewCardPage.clickOnBack();
homePage.downloadCard(); homePage.downloadCard();
addNewCardPage.sendTextInIssuerSearchBar("ई-हस्ताक्षर"); addNewCardPage.sendTextInIssuerSearchBar("MOSIP क्रेडेंशियल डाउनलोड करेंं");
assertTrue(addNewCardPage.isDownloadViaEsignetDisplayedInHindi(),"verify if download via e-signet is displayed"); assertTrue(addNewCardPage.isDownloadViaEsignetDisplayedInHindi(),"verify if download via e-signet is displayed");
} }
@@ -302,6 +302,8 @@ public class ChangeLanguageTest extends IosBaseTest {
HassleFreeAuthenticationPage hassleFreeAuthenticationPage = new HassleFreeAuthenticationPage(driver); HassleFreeAuthenticationPage hassleFreeAuthenticationPage = new HassleFreeAuthenticationPage(driver);
assertEquals(hassleFreeAuthenticationPage.verifyLanguageforHassleFreeAuthenticationPageLoaded(), "Walang problema sa pagpapatotoo"); assertEquals(hassleFreeAuthenticationPage.verifyLanguageforHassleFreeAuthenticationPageLoaded(), "Walang problema sa pagpapatotoo");
assertEquals(hassleFreeAuthenticationPage.getHassleFreeAuthenticationDescription(), "I-authenticate ang iyong sarili nang madali gamit ang nakaimbak na digital na kredensyal."); assertEquals(hassleFreeAuthenticationPage.getHassleFreeAuthenticationDescription(), "I-authenticate ang iyong sarili nang madali gamit ang nakaimbak na digital na kredensyal.");
hassleFreeAuthenticationPage.clickOnGoBack();
assertEquals(homePage.getShareButton(), "Ibahagi");
} }
@Test @Test
@@ -350,6 +352,8 @@ public class ChangeLanguageTest extends IosBaseTest {
HassleFreeAuthenticationPage hassleFreeAuthenticationPage = new HassleFreeAuthenticationPage(driver); HassleFreeAuthenticationPage hassleFreeAuthenticationPage = new HassleFreeAuthenticationPage(driver);
assertEquals(hassleFreeAuthenticationPage.verifyLanguageforHassleFreeAuthenticationPageLoaded(), "परेशानी मुक्त प्रमाणीकरण"); assertEquals(hassleFreeAuthenticationPage.verifyLanguageforHassleFreeAuthenticationPageLoaded(), "परेशानी मुक्त प्रमाणीकरण");
assertEquals(hassleFreeAuthenticationPage.getHassleFreeAuthenticationDescription(), "संग्रहीत डिजिटल क्रेडेंशियल का उपयोग करके आसानी से स्वयं को प्रमाणित करें।"); assertEquals(hassleFreeAuthenticationPage.getHassleFreeAuthenticationDescription(), "संग्रहीत डिजिटल क्रेडेंशियल का उपयोग करके आसानी से स्वयं को प्रमाणित करें।");
hassleFreeAuthenticationPage.clickOnGoBack();
assertEquals(homePage.getShareButton(), "शेयर करना");
} }
@Test @Test
@@ -398,6 +402,9 @@ public class ChangeLanguageTest extends IosBaseTest {
HassleFreeAuthenticationPage hassleFreeAuthenticationPage = new HassleFreeAuthenticationPage(driver); HassleFreeAuthenticationPage hassleFreeAuthenticationPage = new HassleFreeAuthenticationPage(driver);
assertEquals(hassleFreeAuthenticationPage.verifyLanguageforHassleFreeAuthenticationPageLoaded(), "தொந்தரவு இல்லாத அங்கீகாரம்"); assertEquals(hassleFreeAuthenticationPage.verifyLanguageforHassleFreeAuthenticationPageLoaded(), "தொந்தரவு இல்லாத அங்கீகாரம்");
assertEquals(hassleFreeAuthenticationPage.getHassleFreeAuthenticationDescription(), "சேமிக்கப்பட்ட டிஜிட்டல் நற்சான்றிதழைப் பயன்படுத்தி உங்களை எளிதாக அங்கீகரிக்கவும்."); assertEquals(hassleFreeAuthenticationPage.getHassleFreeAuthenticationDescription(), "சேமிக்கப்பட்ட டிஜிட்டல் நற்சான்றிதழைப் பயன்படுத்தி உங்களை எளிதாக அங்கீகரிக்கவும்.");
hassleFreeAuthenticationPage.clickOnGoBack();
assertEquals(homePage.getShareButton(), "பகிர்");
} }
@Test @Test
@@ -446,6 +453,8 @@ public class ChangeLanguageTest extends IosBaseTest {
HassleFreeAuthenticationPage hassleFreeAuthenticationPage = new HassleFreeAuthenticationPage(driver); HassleFreeAuthenticationPage hassleFreeAuthenticationPage = new HassleFreeAuthenticationPage(driver);
assertEquals(hassleFreeAuthenticationPage.verifyLanguageforHassleFreeAuthenticationPageLoaded(), "ಜಗಳ ಮುಕ್ತ ದೃಢೀಕರಣ"); assertEquals(hassleFreeAuthenticationPage.verifyLanguageforHassleFreeAuthenticationPageLoaded(), "ಜಗಳ ಮುಕ್ತ ದೃಢೀಕರಣ");
assertEquals(hassleFreeAuthenticationPage.getHassleFreeAuthenticationDescription(), "ಸಂಗ್ರಹಿಸಿದ ಡಿಜಿಟಲ್ ರುಜುವಾತುಗಳನ್ನು ಬಳಸಿಕೊಂಡು ಸುಲಭವಾಗಿ ನಿಮ್ಮನ್ನು ದೃಢೀಕರಿಸಿ."); assertEquals(hassleFreeAuthenticationPage.getHassleFreeAuthenticationDescription(), "ಸಂಗ್ರಹಿಸಿದ ಡಿಜಿಟಲ್ ರುಜುವಾತುಗಳನ್ನು ಬಳಸಿಕೊಂಡು ಸುಲಭವಾಗಿ ನಿಮ್ಮನ್ನು ದೃಢೀಕರಿಸಿ.");
hassleFreeAuthenticationPage.clickOnGoBack();
assertEquals(homePage.getShareButton(), "ಹಂಚಿಕೊಳ್ಳಿ");
} }

View File

@@ -68,6 +68,7 @@ public class CredentialRegistryTest extends IosBaseTest {
assertTrue(moreOptionsPage.isVcActivatedForOnlineLogin(), "Verify if VC is activated"); assertTrue(moreOptionsPage.isVcActivatedForOnlineLogin(), "Verify if VC is activated");
moreOptionsPage.clickOnCloseButton(); moreOptionsPage.clickOnCloseButton();
assertTrue(homePage.isNameDisplayed(TestDataReader.readData("fullName")), "Verify if full name is displayed");
DetailedVcViewPage detailedVcViewPage = homePage.openDetailedVcView(TestDataReader.readData("fullName")); DetailedVcViewPage detailedVcViewPage = homePage.openDetailedVcView(TestDataReader.readData("fullName"));
assertTrue(detailedVcViewPage.isCredentialRegistryTextDisplayed(),"Verify if is credential registry text displayed"); assertTrue(detailedVcViewPage.isCredentialRegistryTextDisplayed(),"Verify if is credential registry text displayed");
assertEquals(detailedVcViewPage.getCredentialRegistryValue(), TestDataReader.readData("newEnv"), "Verify changed env is displayed in detailed vc"); assertEquals(detailedVcViewPage.getCredentialRegistryValue(), TestDataReader.readData("newEnv"), "Verify changed env is displayed in detailed vc");
@@ -139,11 +140,7 @@ public class CredentialRegistryTest extends IosBaseTest {
assertTrue(credentialRegistryPage.isCredentialRegistryTextBoxHeaderDisplayed(), "Verify if CredentialRegistry page is displayed"); assertTrue(credentialRegistryPage.isCredentialRegistryTextBoxHeaderDisplayed(), "Verify if CredentialRegistry page is displayed");
credentialRegistryPage.setEnterIdTextBox(TestDataReader.readData("invalidenv")).clickOnSaveButton().clickOnSaveButton(); credentialRegistryPage.setEnterIdTextBox(TestDataReader.readData("invalidenv")).clickOnSaveButton().clickOnSaveButton();
assertTrue(settingsPage.isSettingPageLoaded(), "Verify if setting page is displayed"); assertTrue(credentialRegistryPage.isCredentialRegistryErrorMessageDisplayed(), "Verify if error message is displayed");
credentialRegistryPage.clickOnBackArrow();
AddNewCardPage addNewCardPage = homePage.downloadCard();
assertTrue(homePage.verifyLanguageForNoInternetConnectionDisplayed("English"), "Verify if no internet connection is displayed");
} }
@Test @Test
@@ -468,11 +465,7 @@ public class CredentialRegistryTest extends IosBaseTest {
assertTrue(credentialRegistryPage.isCredentialRegistryTextBoxHeaderDisplayed(), "Verify if CredentialRegistry page is displayed"); assertTrue(credentialRegistryPage.isCredentialRegistryTextBoxHeaderDisplayed(), "Verify if CredentialRegistry page is displayed");
credentialRegistryPage.setEnterIdTextBox(TestDataReader.readData("invalidenv")).enterUrlToEsignetHostTextBox(TestDataReader.readData("invalidenv")).clickOnSaveButton().clickOnSaveButton(); credentialRegistryPage.setEnterIdTextBox(TestDataReader.readData("invalidenv")).enterUrlToEsignetHostTextBox(TestDataReader.readData("invalidenv")).clickOnSaveButton().clickOnSaveButton();
assertTrue(settingsPage.isSettingPageLoaded(), "Verify if setting page is displayed"); assertTrue(credentialRegistryPage.isCredentialRegistryErrorMessageDisplayed(), "Verify if error message is displayed");
credentialRegistryPage.clickOnBackArrow();
AddNewCardPage addNewCardPage = homePage.downloadCard();
assertTrue(homePage.verifyLanguageForNoInternetConnectionDisplayed("English"), "Verify if no internet connection is displayed");
} }
@Test @Test
@@ -517,11 +510,98 @@ public class CredentialRegistryTest extends IosBaseTest {
assertTrue(credentialRegistryPage.isCredentialRegistryTextBoxHeaderInFilipinoDisplayed(), "Verify if CredentialRegistry page is displayed"); assertTrue(credentialRegistryPage.isCredentialRegistryTextBoxHeaderInFilipinoDisplayed(), "Verify if CredentialRegistry page is displayed");
credentialRegistryPage.setEnterIdTextBox(TestDataReader.readData("invalidenv")).enterUrlToEsignetHostTextBox(TestDataReader.readData("invalidenv")).clickOnSaveButton(); credentialRegistryPage.setEnterIdTextBox(TestDataReader.readData("invalidenv")).enterUrlToEsignetHostTextBox(TestDataReader.readData("invalidenv")).clickOnSaveButton();
assertTrue(settingsPage.isSettingPageLoadedInFilipion(), "Verify if setting page is displayed in filipino"); assertTrue(credentialRegistryPage.isCredentialRegistryErrorMessageDisplayed(), "Verify if error message is displayed");
credentialRegistryPage.clickOnBackArrow(); }
@Test
public void downloadVcInNewEnvAndVerifyInDetailedVcViewPage() throws InterruptedException {
ChooseLanguagePage chooseLanguagePage = new ChooseLanguagePage(driver);
assertTrue(chooseLanguagePage.isChooseLanguagePageLoaded(), "Verify if choose language page is displayed");
WelcomePage welcomePage = chooseLanguagePage.clickOnSavePreference();
assertTrue(welcomePage.isWelcomePageLoaded(), "Verify if welcome page is loaded");
AppUnlockMethodPage appUnlockMethodPage = welcomePage.clickOnSkipButton();
assertTrue(appUnlockMethodPage.isAppUnlockMethodPageLoaded(), "Verify if app unlocked page is displayed");
SetPasscode setPasscode = appUnlockMethodPage.clickOnUsePasscode();
assertTrue(setPasscode.isSetPassCodePageLoaded(), "Verify if set passcode page is displayed");
ConfirmPasscode confirmPasscode = setPasscode.enterPasscode(TestDataReader.readData("passcode"), Target.IOS);
assertTrue(confirmPasscode.isConfirmPassCodePageLoaded(), "Verify if confirm passcode page is displayed");
HomePage homePage = confirmPasscode.enterPasscodeInConfirmPasscodePage(TestDataReader.readData("passcode"), Target.IOS);
assertTrue(homePage.isHomePageLoaded(), "Verify if home page is displayed");
SettingsPage settingsPage = homePage.clickOnSettingIcon();
assertTrue(settingsPage.isSettingPageLoaded(), "Verify if setting page is displayed");
CredentialRegistryPage credentialRegistryPage =settingsPage.clickOnCredentialRegistry();
assertTrue(credentialRegistryPage.isCredentialRegistryTextBoxHeaderDisplayed(), "Verify if CredentialRegistry page is displayed");
credentialRegistryPage.setEnterIdTextBox(TestDataReader.readData("newEnv")).clickOnSaveButton();
assertTrue(settingsPage.isSettingPageLoaded(), "Verify if setting page is displayed");
credentialRegistryPage.clickOnBackArrow();
AddNewCardPage addNewCardPage = homePage.downloadCard(); AddNewCardPage addNewCardPage = homePage.downloadCard();
assertTrue(homePage.verifyLanguageForNoInternetConnectionDisplayed("Filipino"), "Verify if no internet connection is displayed in filipino");
assertTrue(addNewCardPage.isAddNewCardPageLoaded(), "Verify if add new card page is displayed");
RetrieveIdPage retrieveIdPage = addNewCardPage.clickOnDownloadViaUin();
assertTrue(retrieveIdPage.isRetrieveIdPageLoaded(), "Verify if retrieve id page is displayed");
OtpVerificationPage otpVerification = retrieveIdPage.setEnterIdTextBox(TestDataReader.readData("newuin")).clickOnGenerateCardButton();
assertTrue(otpVerification.isOtpVerificationPageLoaded(), "Verify if otp verification page is displayed");
otpVerification.enterOtp(TestDataReader.readData("otp"), Target.IOS);
assertTrue(homePage.isNameDisplayed(TestDataReader.readData("fullName")), "Verify if full name is displayed");
MoreOptionsPage moreOptionsPage = homePage.clickOnMoreOptionsButton();
assertTrue(moreOptionsPage.isMoreOptionsPageLoaded(), "Verify if more options page is displayed");
PleaseConfirmPopupPage pleaseConfirmPopupPage = moreOptionsPage.clickOnActivationPending();
assertTrue(pleaseConfirmPopupPage.isPleaseConfirmPopupPageLoaded(), "Verify if pop up page is displayed");
OtpVerificationPage otpVerificationPage = pleaseConfirmPopupPage.clickOnConfirmButton();
assertTrue(otpVerificationPage.isOtpVerificationPageLoaded(), "Verify if otp verification page is displayed");
otpVerificationPage.enterOtp(TestDataReader.readData("otp"), Target.IOS);
assertTrue(moreOptionsPage.isVcActivatedForOnlineLogin(), "Verify if VC is activated");
moreOptionsPage.clickOnCloseButton();
assertTrue(homePage.isNameDisplayed(TestDataReader.readData("fullName")), "Verify if full name is displayed");
DetailedVcViewPage detailedVcViewPage = homePage.openDetailedVcView(TestDataReader.readData("fullName"));
assertTrue(detailedVcViewPage.isCredentialRegistryTextDisplayed(),"Verify if is credential registry text displayed");
assertEquals(detailedVcViewPage.getCredentialRegistryValue(), TestDataReader.readData("newEnv"), "Verify changed env is displayed in detailed vc");
detailedVcViewPage.clickOnBackArrow();
homePage.clickOnSettingIcon();
assertTrue(settingsPage.isSettingPageLoaded(), "Verify if setting page is displayed");
settingsPage.clickOnCredentialRegistry();
assertTrue(credentialRegistryPage.isCredentialRegistryTextBoxHeaderDisplayed(), "Verify if CredentialRegistry page is displayed");
credentialRegistryPage.setEnterIdTextBox(TestDataReader.readData("injiEnv")).clickOnSaveButton();
assertTrue(settingsPage.isSettingPageLoaded(), "Verify if setting page is displayed");
credentialRegistryPage.clickOnBackArrow();
homePage.downloadCard();
assertTrue(addNewCardPage.isAddNewCardPageLoaded(), "Verify if add new card page is displayed");
addNewCardPage.clickOnDownloadViaUin();
assertTrue(retrieveIdPage.isRetrieveIdPageLoaded(), "Verify if retrieve id page is displayed");
retrieveIdPage.setEnterIdTextBox(TestDataReader.readData("uin")).clickOnGenerateCardButton();
assertTrue(otpVerification.isOtpVerificationPageLoaded(), "Verify if otp verification page is displayed");
otpVerification.enterOtp(TestDataReader.readData("otp"), Target.IOS);
assertTrue(homePage.isNameDisplayed(TestDataReader.readData("fullName")), "Verify if full name is displayed");
homePage.openDetailedVcView(TestDataReader.readData("fullName"));
assertTrue(detailedVcViewPage.isCredentialRegistryTextDisplayed(),"Verify if is credential registry text displayed");
assertEquals(detailedVcViewPage.getCredentialRegistryValue(), TestDataReader.readData("injiEnv"), "Verify inji env is displayed in detailed vc");
} }
} }

View File

@@ -7,6 +7,7 @@ import inji.pages.*;
import inji.utils.TestDataReader; import inji.utils.TestDataReader;
import org.testng.annotations.Test; import org.testng.annotations.Test;
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertTrue; import static org.testng.Assert.assertTrue;
public class GenerateUinOrVidTest extends IosBaseTest { public class GenerateUinOrVidTest extends IosBaseTest {
@@ -37,6 +38,7 @@ public class GenerateUinOrVidTest extends IosBaseTest {
RetrieveIdPage retrieveIdPage = addNewCardPage.clickOnDownloadViaUin(); RetrieveIdPage retrieveIdPage = addNewCardPage.clickOnDownloadViaUin();
assertTrue(retrieveIdPage.isRetrieveIdPageLoaded(), "Verify if retrieve id page is displayed"); assertTrue(retrieveIdPage.isRetrieveIdPageLoaded(), "Verify if retrieve id page is displayed");
assertEquals(retrieveIdPage.verifyGetItTextDisplayed(),"Get it now using your AID.");
GenerateUinOrVidPage generateUinOrVidPage = retrieveIdPage.clickOnGetItNowText(); GenerateUinOrVidPage generateUinOrVidPage = retrieveIdPage.clickOnGetItNowText();
assertTrue(generateUinOrVidPage.isGenerateUinOrVidPageLoaded(), "Verify if generate uin or vid page page is displayed"); assertTrue(generateUinOrVidPage.isGenerateUinOrVidPageLoaded(), "Verify if generate uin or vid page page is displayed");

View File

@@ -4,10 +4,12 @@ import BaseTest.IosBaseTest;
import inji.api.BaseTestCase; import inji.api.BaseTestCase;
import inji.constants.Target; import inji.constants.Target;
import inji.pages.*; import inji.pages.*;
import inji.utils.AndroidUtil;
import inji.utils.IosUtil; import inji.utils.IosUtil;
import inji.utils.TestDataReader; import inji.utils.TestDataReader;
import org.testng.annotations.Test; import org.testng.annotations.Test;
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertTrue; import static org.testng.Assert.assertTrue;
public class NoNetworkIosTest extends IosBaseTest { public class NoNetworkIosTest extends IosBaseTest {
@@ -46,7 +48,7 @@ public class NoNetworkIosTest extends IosBaseTest {
assertTrue(homePage.verifyLanguageForTryAgainButtonDisplayed("English"), "Verify if Try again button displayed"); assertTrue(homePage.verifyLanguageForTryAgainButtonDisplayed("English"), "Verify if Try again button displayed");
addNewCardPage.clickOnBack(); addNewCardPage.clickOnBack();
assertTrue(homePage.verifyLanguageForNoInternetConnectionDisplayed("English"), "Verify if VC is removed"); assertEquals(homePage.verifyLanguageForNoVCDownloadedPageLoaded(), "Bring your digital identity");
} }
@Test @Test
@@ -82,9 +84,9 @@ public class NoNetworkIosTest extends IosBaseTest {
assertTrue(homePage.isNameDisplayed(TestDataReader.readData("fullName")), "Verify if full name is displayed"); assertTrue(homePage.isNameDisplayed(TestDataReader.readData("fullName")), "Verify if full name is displayed");
IosUtil.enableAirplaneMode(); AndroidUtil.enableAirplaneMode();
assertTrue(homePage.clickOnScanButton().acceptPermissionPopupBluetooth().isCameraOpen()); assertTrue(homePage.clickOnShareButton().acceptPermissionPopupBluetooth().isCameraOpen());
IosUtil.disableAirplaneMode(); AndroidUtil.disableAirplaneMode();
} }
@Test @Test
@@ -238,8 +240,9 @@ public class NoNetworkIosTest extends IosBaseTest {
pleaseConfirmPopupPage.clickOnConfirmButton(); pleaseConfirmPopupPage.clickOnConfirmButton();
IosUtil.disableAirplaneMode(); AndroidUtil.disableAirplaneMode();
assertTrue(homePage.verifyLanguageForNoInternetConnectionDisplayed("English"), "Verify if VC is removed"); assertEquals(homePage.verifyLanguageForNoVCDownloadedPageLoaded(), "Bring your digital identity");
} }
@Test @Test
@@ -350,4 +353,39 @@ public class NoNetworkIosTest extends IosBaseTest {
homePage.clickOnTryAgainButton(); homePage.clickOnTryAgainButton();
assertTrue(addNewCardPage.isAddNewCardPageLoaded(), "Verify if add new card page is displayed"); assertTrue(addNewCardPage.isAddNewCardPageLoaded(), "Verify if add new card page is displayed");
} }
@Test
public void verifyVcIssuerListWithoutNetwork() throws InterruptedException {
ChooseLanguagePage chooseLanguagePage = new ChooseLanguagePage(driver);
assertTrue(chooseLanguagePage.isChooseLanguagePageLoaded(), "Verify if choose language page is displayed");
WelcomePage welcomePage = chooseLanguagePage.clickOnSavePreference();
assertTrue(welcomePage.isWelcomePageLoaded(), "Verify if welcome page is loaded");
AppUnlockMethodPage appUnlockMethodPage = welcomePage.clickOnSkipButton();
assertTrue(appUnlockMethodPage.isAppUnlockMethodPageLoaded(), "Verify if app unlocked page is displayed");
SetPasscode setPasscode = appUnlockMethodPage.clickOnUsePasscode();
assertTrue(setPasscode.isSetPassCodePageLoaded(), "Verify if set passcode page is displayed");
ConfirmPasscode confirmPasscode = setPasscode.enterPasscode(TestDataReader.readData("passcode"), Target.IOS);
assertTrue(confirmPasscode.isConfirmPassCodePageLoaded(), "Verify if confirm passcode page is displayed");
HomePage homePage = confirmPasscode.enterPasscodeInConfirmPasscodePage(TestDataReader.readData("passcode"), Target.IOS);
assertTrue(homePage.isHomePageLoaded(), "Verify if home page is displayed");
AddNewCardPage addNewCardPage = homePage.downloadCard();
assertTrue(addNewCardPage.isAddNewCardPageLoaded(), "Verify if add new card page is displayed");
AndroidUtil.enableAirplaneMode();
addNewCardPage.clickOnBack();
homePage.downloadCard();
assertTrue(addNewCardPage.isIssuerDescriptionMosipDisplayed(), "Verify if issuer description mosip displayed");
assertTrue(addNewCardPage.isIssuerDescriptionEsignetDisplayed(), "Verify if issuer description esignet displayed");
AndroidUtil.disableAirplaneMode();
}
} }

View File

@@ -4,9 +4,11 @@ import BaseTest.IosBaseTest;
import inji.api.BaseTestCase; import inji.api.BaseTestCase;
import inji.constants.Target; import inji.constants.Target;
import inji.pages.*; import inji.pages.*;
import inji.utils.AndroidUtil;
import inji.utils.TestDataReader; import inji.utils.TestDataReader;
import org.testng.annotations.Test; import org.testng.annotations.Test;
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertTrue; import static org.testng.Assert.assertTrue;
public class PinVcTest extends IosBaseTest { public class PinVcTest extends IosBaseTest {
@@ -94,8 +96,9 @@ public class PinVcTest extends IosBaseTest {
moreOptionsPage.clickOnPinOrUnPinCard(); moreOptionsPage.clickOnPinOrUnPinCard();
assertTrue(homePage.isPinIconDisplayed(), "Verify if pin icon on vc is displayed"); assertTrue(homePage.isPinIconDisplayed(), "Verify if pin icon on vc is displayed");
ScanPage scanPage=homePage.clickOnScanButton();
SharePage scanPage=homePage.clickOnShareButton();
assertTrue(scanPage.isCameraPageLoaded(), "Verify camera page is displayed"); assertTrue(scanPage.isCameraPageLoaded(), "Verify camera page is displayed");
assertTrue(scanPage.isFlipCameraClickable(),"Verify if flip camera is enabled"); assertTrue(scanPage.isFlipCameraClickable(),"Verify if flip camera is enabled");
} }
@@ -171,4 +174,50 @@ public class PinVcTest extends IosBaseTest {
} }
@Test
public void verifyMessageAfterDenyBluetoothPopup() throws InterruptedException {
ChooseLanguagePage chooseLanguagePage = new ChooseLanguagePage(driver);
assertTrue(chooseLanguagePage.isChooseLanguagePageLoaded(), "Verify if choose language page is displayed");
WelcomePage welcomePage = chooseLanguagePage.clickOnSavePreference();
assertTrue(welcomePage.isWelcomePageLoaded(), "Verify if welcome page is loaded");
AppUnlockMethodPage appUnlockMethodPage = welcomePage.clickOnSkipButton();
assertTrue(appUnlockMethodPage.isAppUnlockMethodPageLoaded(), "Verify if app unlocked page is displayed");
SetPasscode setPasscode = appUnlockMethodPage.clickOnUsePasscode();
assertTrue(setPasscode.isSetPassCodePageLoaded(), "Verify if set passcode page is displayed");
ConfirmPasscode confirmPasscode = setPasscode.enterPasscode(TestDataReader.readData("passcode"), Target.IOS);
assertTrue(confirmPasscode.isConfirmPassCodePageLoaded(), "Verify if confirm passcode page is displayed");
HomePage homePage = confirmPasscode.enterPasscodeInConfirmPasscodePage(TestDataReader.readData("passcode"), Target.IOS);
assertTrue(homePage.isHomePageLoaded(), "Verify if home page is displayed");
AddNewCardPage addNewCardPage = homePage.downloadCard();
assertTrue(addNewCardPage.isAddNewCardPageLoaded(), "Verify if add new card page is displayed");
RetrieveIdPage retrieveIdPage = addNewCardPage.clickOnDownloadViaUin();
assertTrue(retrieveIdPage.isRetrieveIdPageLoaded(), "Verify if retrieve id page is displayed");
OtpVerificationPage otpVerification = retrieveIdPage.setEnterIdTextBox(TestDataReader.readData("uin")).clickOnGenerateCardButton();
assertTrue(otpVerification.isOtpVerificationPageLoaded(), "Verify if otp verification page is displayed");
otpVerification.enterOtp(BaseTestCase.getOtp(), Target.IOS);
assertTrue(homePage.isNameDisplayed(TestDataReader.readData("fullName")), "Verify if full name is displayed");
MoreOptionsPage moreOptionsPage = homePage.clickOnMoreOptionsButton();
assertTrue(moreOptionsPage.isMoreOptionsPageLoaded(), "Verify if more options page is displayed");
moreOptionsPage.clickOnPinOrUnPinCard();
assertTrue(homePage.isPinIconDisplayed(), "Verify if pin icon on vc is displayed");
SharePage scanPage=homePage.clickOnShareButton();
AndroidUtil.disableBluetooth();
scanPage.denyPermissionPopupBluetooth();
assertEquals(scanPage.isBluetoothIsTurnedOffMessageDisplayed(),"bluetooth is turned off, please turn it on from quick settings menu");
}
} }

View File

@@ -30,7 +30,7 @@ public class ShareVcTest extends IosBaseTest {
HomePage homePage = confirmPasscode.enterPasscodeInConfirmPasscodePage(TestDataReader.readData("passcode"), Target.IOS); HomePage homePage = confirmPasscode.enterPasscodeInConfirmPasscodePage(TestDataReader.readData("passcode"), Target.IOS);
assertTrue(homePage.isHomePageLoaded(), "Verify if home page is displayed"); assertTrue(homePage.isHomePageLoaded(), "Verify if home page is displayed");
ScanPage scanPage = homePage.clickOnScanButton(); SharePage scanPage = homePage.clickOnShareButton();
assertTrue(scanPage.isNoShareableCardsMessageDisplayed(), "Verify if no shareable cards are available message is displayed"); assertTrue(scanPage.isNoShareableCardsMessageDisplayed(), "Verify if no shareable cards are available message is displayed");
} }

View File

@@ -37,7 +37,7 @@ public class VcDownloadAndVerifyUsingEsignetTest extends IosBaseTest {
assertTrue(addNewCardPage.isIssuerDescriptionMosipDisplayed(), "Verify if issuer description mosip displayed"); assertTrue(addNewCardPage.isIssuerDescriptionMosipDisplayed(), "Verify if issuer description mosip displayed");
assertTrue(addNewCardPage.isIssuerDescriptionEsignetDisplayed(), "Verify if issuer description esignet displayed"); assertTrue(addNewCardPage.isIssuerDescriptionEsignetDisplayed(), "Verify if issuer description esignet displayed");
assertTrue(addNewCardPage.isIssuerSearchBarDisplayed(), "Verify if issuer search bar displayed"); assertTrue(addNewCardPage.isIssuerSearchBarDisplayed(), "Verify if issuer search bar displayed");
addNewCardPage.sendTextInIssuerSearchBar("e-signet"); addNewCardPage.sendTextInIssuerSearchBar("Download MOSIP Credentials");
assertTrue(addNewCardPage.isAddNewCardPageLoaded(), "Verify if add new card page is displayed"); assertTrue(addNewCardPage.isAddNewCardPageLoaded(), "Verify if add new card page is displayed");
assertEquals(addNewCardPage.verifyLanguageForAddNewCardGuideMessage(), "Please choose your preferred issuer from the options below to add a new card."); assertEquals(addNewCardPage.verifyLanguageForAddNewCardGuideMessage(), "Please choose your preferred issuer from the options below to add a new card.");
assertTrue(addNewCardPage.isDownloadViaUinDisplayed(), "Verify if download via uin displayed"); assertTrue(addNewCardPage.isDownloadViaUinDisplayed(), "Verify if download via uin displayed");

View File

@@ -37,13 +37,15 @@ public class VcDownloadAndVerifyUsingUinTest extends IosBaseTest {
assertTrue(addNewCardPage.isIssuerDescriptionMosipDisplayed(), "Verify if issuer description mosip displayed"); assertTrue(addNewCardPage.isIssuerDescriptionMosipDisplayed(), "Verify if issuer description mosip displayed");
assertTrue(addNewCardPage.isIssuerDescriptionEsignetDisplayed(), "Verify if issuer description esignet displayed"); assertTrue(addNewCardPage.isIssuerDescriptionEsignetDisplayed(), "Verify if issuer description esignet displayed");
assertTrue(addNewCardPage.isIssuerSearchBarDisplayed(), "Verify if issuer search bar displayed"); assertTrue(addNewCardPage.isIssuerSearchBarDisplayed(), "Verify if issuer search bar displayed");
addNewCardPage.sendTextInIssuerSearchBar("uin"); addNewCardPage.sendTextInIssuerSearchBar("Download MOSIP Credentials");
RetrieveIdPage retrieveIdPage = addNewCardPage.clickOnDownloadViaUin(); RetrieveIdPage retrieveIdPage = addNewCardPage.clickOnDownloadViaUin();
//we will remove below line once bug is fixed https://mosip.atlassian.net/browse/INJI-712 //we will remove below line once bug is fixed https://mosip.atlassian.net/browse/INJI-712
addNewCardPage.clickOnDownloadViaUin(); addNewCardPage.clickOnDownloadViaUin();
assertTrue(retrieveIdPage.isRetrieveIdPageLoaded(), "Verify if retrieve id page is displayed"); assertTrue(retrieveIdPage.isRetrieveIdPageLoaded(), "Verify if retrieve id page is displayed");
assertEquals(retrieveIdPage.getRetrieveIdPageHeader(),"Download your ID");
assertTrue(retrieveIdPage.verifyDownloadIdPageGuideMessage(), "Verify if retrieve id page guide message is displayed");
OtpVerificationPage otpVerification = retrieveIdPage.setEnterIdTextBox(TestDataReader.readData("uin")).clickOnGenerateCardButton(); OtpVerificationPage otpVerification = retrieveIdPage.setEnterIdTextBox(TestDataReader.readData("uin")).clickOnGenerateCardButton();
assertTrue(otpVerification.isOtpVerificationPageLoaded(), "Verify if otp verification page is displayed"); assertTrue(otpVerification.isOtpVerificationPageLoaded(), "Verify if otp verification page is displayed");
@@ -265,7 +267,7 @@ public class VcDownloadAndVerifyUsingUinTest extends IosBaseTest {
assertTrue(otpVerification.isOtpVerificationPageLoaded(), "Verify if otp verification page is displayed"); assertTrue(otpVerification.isOtpVerificationPageLoaded(), "Verify if otp verification page is displayed");
assertTrue(otpVerification.verifyOtpVerificationTimerCompleted(), "Verify timer has stop for otp verification"); assertTrue(otpVerification.verifyOtpVerificationTimerCompleted(), "Verify timer has stop for otp verification");
assertTrue(otpVerification.verifyResendCodeButtonDisplayed(), "Verify if resend code is displayed"); assertTrue(otpVerification.verifyOtpVerificationTimerDisplayedAfterClickOnResend(), "Verify if resend code is displayed");
otpVerification.clickOnCrossIcon(); otpVerification.clickOnCrossIcon();
assertTrue(otpVerification.confirmPopupHeaderDisplayed(), "Verify if comfirm popup displayed"); assertTrue(otpVerification.confirmPopupHeaderDisplayed(), "Verify if comfirm popup displayed");

View File

@@ -1,11 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd"> <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="All Test Suite" parallel="tests" thread-count="2"> <suite name="All Test Suite">
<listeners> <listeners>
<listener class-name="inji.listeners.Listeners" /> <listener class-name="inji.listeners.Listeners" />
</listeners> </listeners>
<test verbose="2" preserve-order="true" name="android"> <test verbose="2" preserve-order="true" name="android">
<parameter name="platformName" value="ANDROID" />
<classes> <classes>
<class name="androidTestCases.VcDownloadAndVerifyUsingUinTest"> <class name="androidTestCases.VcDownloadAndVerifyUsingUinTest">
<methods> <methods>
@@ -15,6 +14,7 @@
<include name="downloadMultipleVcUsingDifferentUin" /> <include name="downloadMultipleVcUsingDifferentUin" />
<include name="verifyInvalidUinErrorMessage" /> <include name="verifyInvalidUinErrorMessage" />
<include name="verifyOtpTimeOutAndGoBack" /> <include name="verifyOtpTimeOutAndGoBack" />
<include name="DownloadMultipleVcAndForceStopeAndAgainInvokeApp" />
</methods> </methods>
</class> </class>
<class name="androidTestCases.VerifyWelcomePagesTest"> <class name="androidTestCases.VerifyWelcomePagesTest">
@@ -31,6 +31,7 @@
<include name="downloadTwoVcDeleteOneUsingVid" /> <include name="downloadTwoVcDeleteOneUsingVid" />
<include name="verifyInvalidVidErrorMessage" /> <include name="verifyInvalidVidErrorMessage" />
<include name="downloadAndVerifyVcUsingRevokeVid" /> <include name="downloadAndVerifyVcUsingRevokeVid" />
<include name="DownloadMultipleVcAndForceStopeAndAgainInvokeAppViaVid" />
</methods> </methods>
</class> </class>
<class name="androidTestCases.UnlockWithPasscodeTest"> <class name="androidTestCases.UnlockWithPasscodeTest">
@@ -76,8 +77,10 @@
<class name="androidTestCases.PinVcTest"> <class name="androidTestCases.PinVcTest">
<methods> <methods>
<include name="pinVc" /> <include name="pinVc" />
<include name="verifyMessageAfterDenyBluetoothPopup" />
<include name="VerifyCameraOpenAfterPinVc" /> <include name="VerifyCameraOpenAfterPinVc" />
<include name="downloadVcViaEsignetAndPinUnpin" /> <include name="downloadVcViaEsignetAndPinUnpin" />
</methods> </methods>
</class> </class>
<class name="androidTestCases.ChangeLanguageTest"> <class name="androidTestCases.ChangeLanguageTest">
@@ -101,7 +104,7 @@
<include name="verifyReceivedCardTabPresent" /> <include name="verifyReceivedCardTabPresent" />
</methods> </methods>
</class> </class>
<!--<class name="androidTestCases.NoNetworkAndroidTest"> <class name="androidTestCases.NoNetworkAndroidTest">
<methods> <methods>
<include name="setupPasscodeAndDownloadCardWithoutInternet" /> <include name="setupPasscodeAndDownloadCardWithoutInternet" />
<include name="openCameraOnFlightMode" /> <include name="openCameraOnFlightMode" />
@@ -118,6 +121,7 @@
<include name="downloadVcUsingUinViaEsignetNoInternateOpenScan" /> <include name="downloadVcUsingUinViaEsignetNoInternateOpenScan" />
<include name="downloadVcInOtherLanguageViaEsignetWithoutInternet" /> <include name="downloadVcInOtherLanguageViaEsignetWithoutInternet" />
<include name="changeLanguageToTamilWithoutNetwork" /> <include name="changeLanguageToTamilWithoutNetwork" />
<include name="verifyVcIssuerListWithoutNetwork" />
</methods> </methods>
</class> </class>
<class name="androidTestCases.CredentialRegistryTest"> <class name="androidTestCases.CredentialRegistryTest">
@@ -133,8 +137,9 @@
<include name="downloadAndVerifyVcInNewEnvForEsignet" /> <include name="downloadAndVerifyVcInNewEnvForEsignet" />
<include name="downloadAndVerifyVcInInvalidEnvForEsignet" /> <include name="downloadAndVerifyVcInInvalidEnvForEsignet" />
<include name="downloadAndVerifyVcInInvalidEnvForEsignetInFillpino" /> <include name="downloadAndVerifyVcInInvalidEnvForEsignetInFillpino" />
<include name="downloadVcInNewEnvAndVerifyInDetailedVcViewPage" />
</methods> </methods>
</class>--> </class>
<class name="androidTestCases.ReceiveCardTest"> <class name="androidTestCases.ReceiveCardTest">
<methods> <methods>
<include name="verifyRecivedCardAndQrCode" /> <include name="verifyRecivedCardAndQrCode" />

View File

@@ -271,12 +271,14 @@
"${PODS_ROOT}/Target Support Files/Pods-Inji/Pods-Inji-resources.sh", "${PODS_ROOT}/Target Support Files/Pods-Inji/Pods-Inji-resources.sh",
"${PODS_CONFIGURATION_BUILD_DIR}/EXConstants/EXConstants.bundle", "${PODS_CONFIGURATION_BUILD_DIR}/EXConstants/EXConstants.bundle",
"${PODS_CONFIGURATION_BUILD_DIR}/EXUpdates/EXUpdates.bundle", "${PODS_CONFIGURATION_BUILD_DIR}/EXUpdates/EXUpdates.bundle",
"${PODS_CONFIGURATION_BUILD_DIR}/GoogleSignIn/GoogleSignIn.bundle",
"${PODS_CONFIGURATION_BUILD_DIR}/React-Core/AccessibilityResources.bundle", "${PODS_CONFIGURATION_BUILD_DIR}/React-Core/AccessibilityResources.bundle",
); );
name = "[CP] Copy Pods Resources"; name = "[CP] Copy Pods Resources";
outputPaths = ( outputPaths = (
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/EXConstants.bundle", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/EXConstants.bundle",
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/EXUpdates.bundle", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/EXUpdates.bundle",
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/GoogleSignIn.bundle",
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/AccessibilityResources.bundle", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/AccessibilityResources.bundle",
); );
runOnlyForDeploymentPostprocessing = 0; runOnlyForDeploymentPostprocessing = 0;
@@ -557,4 +559,4 @@
/* End XCConfigurationList section */ /* End XCConfigurationList section */
}; };
rootObject = 83CBB9F71A601CBA00E9B192 /* Project object */; rootObject = 83CBB9F71A601CBA00E9B192 /* Project object */;
} }

View File

@@ -42,6 +42,12 @@ PODS:
- ExpoModulesCore - ExpoModulesCore
- Expo (49.0.16): - Expo (49.0.16):
- ExpoModulesCore - ExpoModulesCore
- ExpoAdapterGoogleSignIn (10.1.1):
- ExpoModulesCore
- GoogleSignIn (~> 7.0)
- React-Core
- ExpoCrypto (12.6.0):
- ExpoModulesCore
- ExpoKeepAwake (12.3.0): - ExpoKeepAwake (12.3.0):
- ExpoModulesCore - ExpoModulesCore
- ExpoLocalAuthentication (13.3.0): - ExpoLocalAuthentication (13.3.0):
@@ -53,6 +59,8 @@ PODS:
- React-Core - React-Core
- React-RCTAppDelegate - React-RCTAppDelegate
- ReactCommon/turbomodule/core - ReactCommon/turbomodule/core
- ExpoWebBrowser (12.5.0):
- ExpoModulesCore
- EXSplashScreen (0.22.0): - EXSplashScreen (0.22.0):
- ExpoModulesCore - ExpoModulesCore
- RCT-Folly (= 2021.07.22.00) - RCT-Folly (= 2021.07.22.00)
@@ -79,6 +87,14 @@ PODS:
- ReactCommon/turbomodule/core (= 0.71.8) - ReactCommon/turbomodule/core (= 0.71.8)
- fmt (6.2.1) - fmt (6.2.1)
- glog (0.3.5) - glog (0.3.5)
- GoogleSignIn (7.0.0):
- AppAuth (~> 1.5)
- GTMAppAuth (< 3.0, >= 1.3)
- GTMSessionFetcher/Core (< 4.0, >= 1.1)
- GTMAppAuth (2.0.0):
- AppAuth/Core (~> 1.6)
- GTMSessionFetcher/Core (< 4.0, >= 1.5)
- GTMSessionFetcher/Core (3.2.0)
- GzipSwift (5.1.1) - GzipSwift (5.1.1)
- hermes-engine (0.71.8): - hermes-engine (0.71.8):
- hermes-engine/Pre-built (= 0.71.8) - hermes-engine/Pre-built (= 0.71.8)
@@ -350,6 +366,9 @@ PODS:
- react-native-app-auth (7.0.0): - react-native-app-auth (7.0.0):
- AppAuth (~> 1.6) - AppAuth (~> 1.6)
- React-Core - React-Core
- react-native-cloud-storage (1.2.2):
- RCT-Folly (= 2021.07.22.00)
- React-Core
- react-native-location (2.5.0): - react-native-location (2.5.0):
- React - React
- react-native-mmkv-storage (0.9.1): - react-native-mmkv-storage (0.9.1):
@@ -470,6 +489,9 @@ PODS:
- React-Core - React-Core
- RNGestureHandler (2.9.0): - RNGestureHandler (2.9.0):
- React-Core - React-Core
- RNGoogleSignin (10.1.1):
- GoogleSignIn (~> 7.0)
- React-Core
- RNKeychain (8.0.0): - RNKeychain (8.0.0):
- React-Core - React-Core
- RNLocalize (3.0.2): - RNLocalize (3.0.2):
@@ -490,7 +512,7 @@ PODS:
- RNZipArchive/Core (6.1.0): - RNZipArchive/Core (6.1.0):
- React-Core - React-Core
- SSZipArchive (~> 2.2) - SSZipArchive (~> 2.2)
- secure-keystore (0.1.5): - secure-keystore (0.1.6):
- React-Core - React-Core
- SSZipArchive (2.4.3) - SSZipArchive (2.4.3)
- TensorFlowLiteC (2.12.0): - TensorFlowLiteC (2.12.0):
@@ -527,10 +549,13 @@ DEPENDENCIES:
- EXJSONUtils (from `../node_modules/expo-json-utils/ios`) - EXJSONUtils (from `../node_modules/expo-json-utils/ios`)
- EXManifests (from `../node_modules/expo-manifests/ios`) - EXManifests (from `../node_modules/expo-manifests/ios`)
- Expo (from `../node_modules/expo`) - Expo (from `../node_modules/expo`)
- "ExpoAdapterGoogleSignIn (from `../node_modules/@react-native-google-signin/google-signin/expo/ios`)"
- ExpoCrypto (from `../node_modules/expo-crypto/ios`)
- ExpoKeepAwake (from `../node_modules/expo-keep-awake/ios`) - ExpoKeepAwake (from `../node_modules/expo-keep-awake/ios`)
- ExpoLocalAuthentication (from `../node_modules/expo-local-authentication/ios`) - ExpoLocalAuthentication (from `../node_modules/expo-local-authentication/ios`)
- ExpoLocalization (from `../node_modules/expo-localization/ios`) - ExpoLocalization (from `../node_modules/expo-localization/ios`)
- ExpoModulesCore (from `../node_modules/expo-modules-core`) - ExpoModulesCore (from `../node_modules/expo-modules-core`)
- ExpoWebBrowser (from `../node_modules/expo-web-browser/ios`)
- EXSplashScreen (from `../node_modules/expo-splash-screen/ios`) - EXSplashScreen (from `../node_modules/expo-splash-screen/ios`)
- EXStructuredHeaders (from `../node_modules/expo-structured-headers/ios`) - EXStructuredHeaders (from `../node_modules/expo-structured-headers/ios`)
- EXUpdates (from `../node_modules/expo-updates/ios`) - EXUpdates (from `../node_modules/expo-updates/ios`)
@@ -560,6 +585,7 @@ DEPENDENCIES:
- React-jsinspector (from `../node_modules/react-native/ReactCommon/jsinspector`) - React-jsinspector (from `../node_modules/react-native/ReactCommon/jsinspector`)
- React-logger (from `../node_modules/react-native/ReactCommon/logger`) - React-logger (from `../node_modules/react-native/ReactCommon/logger`)
- react-native-app-auth (from `../node_modules/react-native-app-auth`) - react-native-app-auth (from `../node_modules/react-native-app-auth`)
- react-native-cloud-storage (from `../node_modules/react-native-cloud-storage`)
- react-native-location (from `../node_modules/react-native-location`) - react-native-location (from `../node_modules/react-native-location`)
- react-native-mmkv-storage (from `../node_modules/react-native-mmkv-storage`) - react-native-mmkv-storage (from `../node_modules/react-native-mmkv-storage`)
- "react-native-netinfo (from `../node_modules/@react-native-community/netinfo`)" - "react-native-netinfo (from `../node_modules/@react-native-community/netinfo`)"
@@ -588,6 +614,7 @@ DEPENDENCIES:
- RNDeviceInfo (from `../node_modules/react-native-device-info`) - RNDeviceInfo (from `../node_modules/react-native-device-info`)
- RNFS (from `../node_modules/react-native-fs`) - RNFS (from `../node_modules/react-native-fs`)
- RNGestureHandler (from `../node_modules/react-native-gesture-handler`) - RNGestureHandler (from `../node_modules/react-native-gesture-handler`)
- "RNGoogleSignin (from `../node_modules/@react-native-google-signin/google-signin`)"
- RNKeychain (from `../node_modules/react-native-keychain`) - RNKeychain (from `../node_modules/react-native-keychain`)
- RNLocalize (from `../node_modules/react-native-localize`) - RNLocalize (from `../node_modules/react-native-localize`)
- RNPermissions (from `../node_modules/react-native-permissions`) - RNPermissions (from `../node_modules/react-native-permissions`)
@@ -607,6 +634,9 @@ SPEC REPOS:
- CatCrypto - CatCrypto
- CrcSwift - CrcSwift
- fmt - fmt
- GoogleSignIn
- GTMAppAuth
- GTMSessionFetcher
- GzipSwift - GzipSwift
- libevent - libevent
- MMKV - MMKV
@@ -648,6 +678,10 @@ EXTERNAL SOURCES:
:path: "../node_modules/expo-manifests/ios" :path: "../node_modules/expo-manifests/ios"
Expo: Expo:
:path: "../node_modules/expo" :path: "../node_modules/expo"
ExpoAdapterGoogleSignIn:
:path: "../node_modules/@react-native-google-signin/google-signin/expo/ios"
ExpoCrypto:
:path: "../node_modules/expo-crypto/ios"
ExpoKeepAwake: ExpoKeepAwake:
:path: "../node_modules/expo-keep-awake/ios" :path: "../node_modules/expo-keep-awake/ios"
ExpoLocalAuthentication: ExpoLocalAuthentication:
@@ -656,6 +690,8 @@ EXTERNAL SOURCES:
:path: "../node_modules/expo-localization/ios" :path: "../node_modules/expo-localization/ios"
ExpoModulesCore: ExpoModulesCore:
:path: "../node_modules/expo-modules-core" :path: "../node_modules/expo-modules-core"
ExpoWebBrowser:
:path: "../node_modules/expo-web-browser/ios"
EXSplashScreen: EXSplashScreen:
:path: "../node_modules/expo-splash-screen/ios" :path: "../node_modules/expo-splash-screen/ios"
EXStructuredHeaders: EXStructuredHeaders:
@@ -710,6 +746,8 @@ EXTERNAL SOURCES:
:path: "../node_modules/react-native/ReactCommon/logger" :path: "../node_modules/react-native/ReactCommon/logger"
react-native-app-auth: react-native-app-auth:
:path: "../node_modules/react-native-app-auth" :path: "../node_modules/react-native-app-auth"
react-native-cloud-storage:
:path: "../node_modules/react-native-cloud-storage"
react-native-location: react-native-location:
:path: "../node_modules/react-native-location" :path: "../node_modules/react-native-location"
react-native-mmkv-storage: react-native-mmkv-storage:
@@ -766,6 +804,8 @@ EXTERNAL SOURCES:
:path: "../node_modules/react-native-fs" :path: "../node_modules/react-native-fs"
RNGestureHandler: RNGestureHandler:
:path: "../node_modules/react-native-gesture-handler" :path: "../node_modules/react-native-gesture-handler"
RNGoogleSignin:
:path: "../node_modules/@react-native-google-signin/google-signin"
RNKeychain: RNKeychain:
:path: "../node_modules/react-native-keychain" :path: "../node_modules/react-native-keychain"
RNLocalize: RNLocalize:
@@ -808,10 +848,13 @@ SPEC CHECKSUMS:
EXJSONUtils: 6802be4282d42b97c51682468ddc1026a06f8276 EXJSONUtils: 6802be4282d42b97c51682468ddc1026a06f8276
EXManifests: cf66451b11b2c2f6464917528d792759f7fd6ce0 EXManifests: cf66451b11b2c2f6464917528d792759f7fd6ce0
Expo: fcfd60c1ed6806dee5103b210335ae0c72f675ed Expo: fcfd60c1ed6806dee5103b210335ae0c72f675ed
ExpoAdapterGoogleSignIn: 6c55782832b7fbdc2c27dac05ef00445c103b8f3
ExpoCrypto: 42485127a5968dda6f67ac5f2b42d3c0af31d7db
ExpoKeepAwake: be4cbd52d9b177cde0fd66daa1913afa3161fc1d ExpoKeepAwake: be4cbd52d9b177cde0fd66daa1913afa3161fc1d
ExpoLocalAuthentication: 32919307c66fb3661caefa07e7811a95a7539d7b ExpoLocalAuthentication: 32919307c66fb3661caefa07e7811a95a7539d7b
ExpoLocalization: f26cd431ad9ea3533c5b08c4fabd879176a794bb ExpoLocalization: f26cd431ad9ea3533c5b08c4fabd879176a794bb
ExpoModulesCore: d9d45dcbb86a5dba2ec62253267720cb58516f75 ExpoModulesCore: d9d45dcbb86a5dba2ec62253267720cb58516f75
ExpoWebBrowser: b6e56949734089d75f758f21cfe93fad02bd828c
EXSplashScreen: 5ed09ea490155ef603d007d9f194c9e04a4b7980 EXSplashScreen: 5ed09ea490155ef603d007d9f194c9e04a4b7980
EXStructuredHeaders: 324cc3130571d2696357fafd8be7fd9a0b5fdf6e EXStructuredHeaders: 324cc3130571d2696357fafd8be7fd9a0b5fdf6e
EXUpdates: 8f03b362414e8f9f0998f8a6d6c9fc00f2a9d2f2 EXUpdates: 8f03b362414e8f9f0998f8a6d6c9fc00f2a9d2f2
@@ -820,6 +863,9 @@ SPEC CHECKSUMS:
FBReactNativeSpec: 0d9a4f4de7ab614c49e98c00aedfd3bfbda33d59 FBReactNativeSpec: 0d9a4f4de7ab614c49e98c00aedfd3bfbda33d59
fmt: ff9d55029c625d3757ed641535fd4a75fedc7ce9 fmt: ff9d55029c625d3757ed641535fd4a75fedc7ce9
glog: 04b94705f318337d7ead9e6d17c019bd9b1f6b1b glog: 04b94705f318337d7ead9e6d17c019bd9b1f6b1b
GoogleSignIn: b232380cf495a429b8095d3178a8d5855b42e842
GTMAppAuth: 99fb010047ba3973b7026e45393f51f27ab965ae
GTMSessionFetcher: 41b9ef0b4c08a6db4b7eb51a21ae5183ec99a2c8
GzipSwift: 893f3e48e597a1a4f62fafcb6514220fcf8287fa GzipSwift: 893f3e48e597a1a4f62fafcb6514220fcf8287fa
hermes-engine: 47986d26692ae75ee7a17ab049caee8864f855de hermes-engine: 47986d26692ae75ee7a17ab049caee8864f855de
libevent: 4049cae6c81cdb3654a443be001fb9bdceff7913 libevent: 4049cae6c81cdb3654a443be001fb9bdceff7913
@@ -845,6 +891,7 @@ SPEC CHECKSUMS:
React-jsinspector: c712f9e3bb9ba4122d6b82b4f906448b8a281580 React-jsinspector: c712f9e3bb9ba4122d6b82b4f906448b8a281580
React-logger: 342f358b8decfbf8f272367f4eacf4b6154061be React-logger: 342f358b8decfbf8f272367f4eacf4b6154061be
react-native-app-auth: 1d12b6874a24152715a381d8e9149398ce7c2c95 react-native-app-auth: 1d12b6874a24152715a381d8e9149398ce7c2c95
react-native-cloud-storage: 3af86738f814201ddaede5ce2b01b90e6eca867b
react-native-location: 5a40ec1cc6abf2f6d94df979f98ec76c3a415681 react-native-location: 5a40ec1cc6abf2f6d94df979f98ec76c3a415681
react-native-mmkv-storage: cfb6854594cfdc5f7383a9e464bb025417d1721c react-native-mmkv-storage: cfb6854594cfdc5f7383a9e464bb025417d1721c
react-native-netinfo: 2517ad504b3d303e90d7a431b0fcaef76d207983 react-native-netinfo: 2517ad504b3d303e90d7a431b0fcaef76d207983
@@ -873,6 +920,7 @@ SPEC CHECKSUMS:
RNDeviceInfo: aad3c663b25752a52bf8fce93f2354001dd185aa RNDeviceInfo: aad3c663b25752a52bf8fce93f2354001dd185aa
RNFS: 4ac0f0ea233904cb798630b3c077808c06931688 RNFS: 4ac0f0ea233904cb798630b3c077808c06931688
RNGestureHandler: 071d7a9ad81e8b83fe7663b303d132406a7d8f39 RNGestureHandler: 071d7a9ad81e8b83fe7663b303d132406a7d8f39
RNGoogleSignin: aac5c1ec73422109dec1da770247a1e410dcc620
RNKeychain: 4f63aada75ebafd26f4bc2c670199461eab85d94 RNKeychain: 4f63aada75ebafd26f4bc2c670199461eab85d94
RNLocalize: dbea38dcb344bf80ff18a1757b1becf11f70cae4 RNLocalize: dbea38dcb344bf80ff18a1757b1becf11f70cae4
RNPermissions: f1b49dd05fa9b83993cd05a9ee115247944d8f1a RNPermissions: f1b49dd05fa9b83993cd05a9ee115247944d8f1a
@@ -880,7 +928,7 @@ SPEC CHECKSUMS:
RNSecureRandom: 07efbdf2cd99efe13497433668e54acd7df49fef RNSecureRandom: 07efbdf2cd99efe13497433668e54acd7df49fef
RNSVG: 07dbd870b0dcdecc99b3a202fa37c8ca163caec2 RNSVG: 07dbd870b0dcdecc99b3a202fa37c8ca163caec2
RNZipArchive: ef9451b849c45a29509bf44e65b788829ab07801 RNZipArchive: ef9451b849c45a29509bf44e65b788829ab07801
secure-keystore: 21c03ba81520aefa99621383770ce00b3e306c72 secure-keystore: 78bf735f42b9d19418568dadbb92712c19a5812e
SSZipArchive: fe6a26b2a54d5a0890f2567b5cc6de5caa600aef SSZipArchive: fe6a26b2a54d5a0890f2567b5cc6de5caa600aef
TensorFlowLiteC: 20785a69299185a379ba9852b6625f00afd7984a TensorFlowLiteC: 20785a69299185a379ba9852b6625f00afd7984a
TensorFlowLiteObjC: 9a46a29a76661c513172cfffd3bf712b11ef25c3 TensorFlowLiteObjC: 9a46a29a76661c513172cfffd3bf712b11ef25c3
@@ -890,4 +938,4 @@ SPEC CHECKSUMS:
PODFILE CHECKSUM: 01f58b130fa221dabb14b2d82d981ef24dcaba53 PODFILE CHECKSUM: 01f58b130fa221dabb14b2d82d981ef24dcaba53
COCOAPODS: 1.12.1 COCOAPODS: 1.14.2

View File

@@ -91,6 +91,50 @@ end
platform :ios do platform :ios do
lane :ios_ui_automation_build do
keychain_name = TEMP_KEYCHAIN_USER
keychain_password = TEMP_KEYCHAIN_PASSWORD
ensure_temp_keychain(keychain_name, keychain_password)
api_key = app_store_connect_api_key(
key_id: "#{APPLE_KEY_ID}",
issuer_id: "#{APPLE_ISSUER_ID}",
key_content: "#{APPLE_KEY_CONTENT}",
duration: 1200,
in_house: false,
is_key_content_base64: true
)
match(
type: 'appstore',
app_identifier: "#{generate_app_bundle_id}",
git_basic_authorization: Base64.strict_encode64("#{GIT_AUTHORIZATION}"),
readonly: false,
keychain_name: keychain_name,
keychain_password: keychain_password,
api_key: api_key
)
profile_mapping = Actions.lane_context[SharedValues::MATCH_PROVISIONING_PROFILE_MAPPING]
gym(
configuration: "Release",
workspace: "Inji.xcworkspace",
scheme: "Inji",
export_method: "app-store",
export_options: {
provisioningProfiles: {
"#{generate_app_bundle_id}" => "match AppStore #{generate_app_bundle_id}"
}
}
)
delete_temp_keychain(keychain_name)
end
lane :beta do lane :beta do
keychain_name = TEMP_KEYCHAIN_USER keychain_name = TEMP_KEYCHAIN_USER
keychain_password = TEMP_KEYCHAIN_PASSWORD keychain_password = TEMP_KEYCHAIN_PASSWORD

View File

@@ -189,24 +189,41 @@
}, },
"HelpScreen": { "HelpScreen": {
"header": "يساعد", "header": "يساعد",
"whatIsDigitalCredential?": "ما هو الاعتماد الرقمي؟", "here": " هنا. ",
"whatIsaDigitalCredential?": "ما هو الاعتماد الرقمي؟",
"detail-1": "بيانات الاعتماد الرقمية هي النسخة الرقمية لبطاقة الهوية الفعلية الخاصة بك", "detail-1": "بيانات الاعتماد الرقمية هي النسخة الرقمية لبطاقة الهوية الفعلية الخاصة بك",
"whatCanDoWithDigitalCredential?": "ماذا يمكننا أن نفعل ببيانات الاعتماد الرقمية؟", "whatCanWeDoWithDigitalCredential?": "ماذا يمكننا أن نفعل ببيانات الاعتماد الرقمية؟",
"detail-2": "يمكنك الاستفادة من مختلف الخدمات الحكومية والخاصة باستخدام بيانات الاعتماد الرقمية الخاصة بك.", "detail-2": "يمكنك الاستفادة من مختلف الخدمات الحكومية والخاصة باستخدام بيانات الاعتماد الرقمية الخاصة بك.",
"howToAddCard?": "كيف تضيف بطاقة؟", "howToAddCard?": "كيف تضيف بطاقة؟",
"detail-3": "لإضافة بطاقة ، انقر فوق الزر '+' في الصفحة الرئيسية وحدد الخيار المناسب.", "detail-3": "يمكن تنزيل المعرفات إلى محفظة إنجي المتنقلة كبيانات اعتماد يمكن التحقق منها. لمعرفة كيفية تنزيل VCs بمعرفات مختلفة، يرجى القراءة",
"howToRemoveCardFromWallet?": "كيف تشارك البطاقة؟", "howToRemoveACardFromTheWallet?": "كيفية إزالة البطاقة من المحفظة؟",
"detail-4": "اسحب لليسار على البطاقة> انقر فوق المزيد> إزالة من المحفظة", "detail-4a": "يمكنك الضغط على...(قائمة كرات اللحم) الموجودة على البطاقة في الصفحة الرئيسية واختيار خيار إزالة من المحفظة لإزالة البطاقة من المحفظة. لمعرفة المزيد، يرجى القراءة",
"canWeAddMultipleCards?": "هل يمكننا إضافة عدة بطاقات؟", "detail-4b": "يرجى ملاحظة أنه يمكن تنزيل نفس البطاقة مرة أخرى.",
"canIAddMultipleCards?": "هل يمكنني إضافة بطاقات متعددة؟",
"detail-5": "نعم ، يمكنك إضافة عدة بطاقات إلى المحفظة بالنقر فوق الزر '+' في الصفحة الرئيسية.", "detail-5": "نعم ، يمكنك إضافة عدة بطاقات إلى المحفظة بالنقر فوق الزر '+' في الصفحة الرئيسية.",
"howToShareCard?": "كيف تشارك البطاقة؟", "howToShareACard?": "كيف تشارك البطاقة؟",
"detail-6": "انقر فوق الزر 'مشاركة' وقم بمسح رمز الاستجابة السريعة ضوئيًا من الطرف الطالب. بمجرد إنشاء الاتصال ، ستتم مشاركة البطاقة.", "detail-6": "انقر فوق الزر 'مشاركة' وقم بمسح رمز الاستجابة السريعة ضوئيًا من الطرف الطالب. بمجرد إنشاء الاتصال ، ستتم مشاركة البطاقة.",
"howToActivateCardForOnlineLogin?": "كيف يتم تفعيل البطاقة لتسجيل الدخول عبر الإنترنت؟", "howToActivateACardForOnlineLogin?": "كيف يتم تفعيل البطاقة لتسجيل الدخول عبر الإنترنت؟",
"detail-7": "بعد إضافة بطاقة إلى المحفظة بنجاح ، انقر فوق 'تعليق التنشيط لتسجيل الدخول عبر الإنترنت' على البطاقة. عند النقر فوق 'تنشيط' ، ستكون البطاقة جاهزة للاستخدام لتسجيل الدخول عبر الإنترنت.", "detail-7": "بعد إضافة بطاقة إلى المحفظة بنجاح ، انقر فوق 'تعليق التنشيط لتسجيل الدخول عبر الإنترنت' على البطاقة. عند النقر فوق 'تنشيط' ، ستكون البطاقة جاهزة للاستخدام لتسجيل الدخول عبر الإنترنت.",
"howToViewActivity?": "كيفية عرض سجلات النشاط؟", "howToViewActivityLogs?": "كيفية عرض سجلات النشاط؟",
"detail-8": "في الصفحة الرئيسية ، انقر فوق 'المحفوظات' لعرض تفاصيل نشاط المستخدم.", "detail-8": "في الصفحة الرئيسية ، انقر فوق 'المحفوظات' لعرض تفاصيل نشاط المستخدم.",
"whatCanDoBiometricsChanged?": "ماذا يحدث عندما يتم تغيير المقاييس الحيوية لمخزن مفاتيح ذكري المظهر؟", "whatHappensWhenAndroidKeystoreBiometricIsChanged?": "ماذا يحدث عندما يتم تغيير المقاييس الحيوية لمخزن مفاتيح ذكري المظهر؟",
"detail-9": "يحتوي ملف تخزين مفاتيح ذكري المظهر على معلومات مهمة مثل المفاتيح الخاصة لإثباتات الهوية. عندما تقوم بتغيير القياسات الحيوية الخاصة بك ، فإن المفاتيح القديمة لم تعد آمنة. للحفاظ على أمان الأشياء ، نقوم بإزالة إثبات الهوية الموقعة بواسطة تلك المفاتيح القديمة. يمكنك ببساطة تنزيل إثباتات هويتك مرة أخرى ، وسيتم توقيعها بأحدث المفاتيح وأكثرها أمانًا." "detail-9": "يحتوي ملف تخزين مفاتيح ذكري المظهر على معلومات مهمة مثل المفاتيح الخاصة لإثباتات الهوية. عندما تقوم بتغيير القياسات الحيوية الخاصة بك ، فإن المفاتيح القديمة لم تعد آمنة. للحفاظ على أمان الأشياء ، نقوم بإزالة إثبات الهوية الموقعة بواسطة تلك المفاتيح القديمة. يمكنك ببساطة تنزيل إثباتات هويتك مرة أخرى ، وسيتم توقيعها بأحدث المفاتيح وأكثرها أمانًا.",
"whatIsAnId?":"ما هو المعرف؟",
"detail-10":"الهوية هي أي وثيقة يمكن أن تثبت هوية الشخص. في سياق MOSIP، المعرفات هي مقابض رقمية أبجدية رقمية للهويات في النظام. في حين يتم تمثيل هوية الشخص كمجموعة من سمات السيرة الذاتية والبيومترية التي يمكنها تحديد هوية الشخص بشكل فريد، تتم الإشارة إلى الهوية باستخدام المعرفات.",
"whatAreTheDifferentTypesOfId?": "ما هي أنواع مختلفة من معرف؟",
"detail-11":"في سياق MOSIP، المعرفات المختلفة هي UIN وVID وAID. اقرأ المزيد عنهم",
"whereCanIFindTheseIds?":"أين يمكنني أن أجد هذه المعرفات؟",
"detail-12a": "كجزء من عملية التسجيل (التسجيل)، عند تسجيل المعلومات الديموغرافية والقياسات الحيوية للمقيم بنجاح، يتم تخصيص معرف التسجيل (AID) للمقيم. يتم أيضًا إصدار (طباعة) قسيمة إقرار تحتوي على التفاصيل التي تم التقاطها وبطاقة الهوية للمقيم كدليل على التسجيل.",
"detail-12b": "عند المعالجة الناجحة، يتم تخصيص رقم تعريف فريد (UIN) للمقيم ويتم إرسال إشعار إلى المقيم على رقم الهاتف المسجل و/أو البريد الإلكتروني.",
"detail-12c": "VID / Virtual ID هو معرف اسم مستعار تم تكوينه للاستخدام مرة واحدة وغير قابل للربط. نظرًا لاستخدامها في معاملات المصادقة، يجب أن تكون هذه المعرفات معروفة للمستخدم فقط أو يتم إنشاؤها بمشاركته.",
"whyDoesMyVcSayActivationIsPending?":"لماذا يقول VC الخاص بي أن التنشيط معلق؟",
"detail-13": "بمجرد تنزيل عملة VC إلى محفظتك، فهي غير مرتبطة بعد بهوية المستخدم ولهذا السبب يقول VC الخاص بك أن التنشيط معلق. يعد ربط عملة VC الخاصة بك بمحفظتك (باستخدام رمز المرور أو القياسات الحيوية) أمرًا ضروريًا لضمان أعلى مستوى من الأمان. لتفعيل VC الخاص بك، يرجى اتباع الخطوات",
"whatDoYouMeanByActivatedForOnlineLogin?": "ماذا تقصد بتفعيل تسجيل الدخول عبر الإنترنت؟",
"detail-14a": "1. بمجرد ربط VC بالمحفظة بنجاح، يمكنك أن ترى أنه تم تنشيطه لتسجيل الدخول عبر الإنترنت مما يعني أنه يمكن الآن استخدام VC هذا في عملية تسجيل الدخول QR. لمعرفة المزيد حول تسجيل الدخول باستخدام رمز الاستجابة السريعة، يرجى القراءة",
"detail-14b": "2. يجب أن تكون الأسئلة والأجوبة قابلة للقراءة والفهم حتى عندما يقوم المستخدم بتغيير اللغة في تطبيق INJI.",
"whatIsAVerifiableCredential?": "ما هي بيانات الاعتماد التي يمكن التحقق منها؟",
"detail-15": "بيانات الاعتماد التي يمكن التحقق منها عبارة عن معلومات موقعة رقميًا تمثل بيانًا أدلى به المُصدر حول موضوع ما ويتضمن عادةً تفاصيل ديموغرافية. تعتبر شركات رأس المال الاستثماري آمنة وجديرة بالثقة في مختلف التفاعلات عبر الإنترنت."
}, },
"AddVcModal": { "AddVcModal": {
"requestingCredential": "جارٍ طلب بيانات الاعتماد...", "requestingCredential": "جارٍ طلب بيانات الاعتماد...",
@@ -322,14 +339,16 @@
} }
}, },
"OnboardingOverlay": { "OnboardingOverlay": {
"stepOneTitle": شاركة آمنة!", "stepOneTitle": رحباً!",
"stepOneText": "احتفظ ببيانات الاعتماد الرقمية الخاصة بك معك في جميع الأوقات. يساعدك Inji على إدارتها واستخدامها بشكل فعال. للبدء ، أضف بطاقات إلى ملف التعريف الخاص بك.", "stepOneText": "احتفظ ببيانات اعتمادك الرقمية معك في جميع الأوقات. ",
"stepTwoTitle": "المحفظة الرقمية الموثوقة", "stepTwoTitle": "المشاركة الآمنة",
"stepTwoText": "قم بتخزين وحمل جميع بطاقاتك المهمة في محفظة واحدة موثوق بها.", "stepTwoText": "شارك بطاقاتك بأمان وبطريقة خالية من المتاعب واستفد من الخدمات المتنوعة.",
"stepThreeTitle": "مشاركة آمنة", "stepThreeTitle": "المحفظة الرقمية الموثوقة",
"stepThreeText": "شارك بطاقاتك بأمان وبطريقة خالية من المتاعب واستفد من الخدمات المتنوعة.", "stepThreeText": "قم بتخزين وحمل جميع بطاقاتك المهمة في محفظة واحدة موثوقة.",
"stepFourTitle": "مصادقة خالية من المتاعب", "stepFourTitle": "الوصول السريع",
"stepFourText": "قم بمصادقة نفسك بسهولة باستخدام بيانات الاعتماد الرقمية المخزنة.", "stepFourText": "قم بالمصادقة على نفسك بسهولة باستخدام بيانات الاعتماد الرقمية المخزنة.",
"stepFiveTitle": "نسخ إحتياطي للبيانات",
"stepFiveText": "قم بحماية بياناتك بسهولة باستخدام النسخة الاحتياطية لدينا",
"getStarted": "البدء", "getStarted": "البدء",
"goBack": "عُد", "goBack": "عُد",
"back": "خلف", "back": "خلف",
@@ -579,6 +598,63 @@
} }
} }
}, },
"DataBackupScreen": {
"dataBackupAndRestore": "اسنرجاع البيانات",
"new": "جديد",
"loadingTitle": "جارٍ تحميل الإعداد",
"loadingSubtitle": "تحميل...",
"errors": {
"permissionDenied": {
"title": "تم رفض الإذن!",
"message": "لقد لاحظنا أنك قمت بإلغاء إنشاء إعدادات النسخ الاحتياطي للبيانات. نوصي بشدة بإعادة النظر في إعدادات النسخ الاحتياطي للبيانات لضمان توفر البيانات الخاصة بك.",
"helpText": "انقر فوق \"تكوين الإعدادات\" لإعداد النسخ الاحتياطي للبيانات الآن، أو \"إلغاء\" للعودة إلى شاشة الإعدادات."
},
"noInternetConnection": {
"title": "لا يوجد اتصال بالإنترنت",
"message": "الرجاء التحقق من اتصالك وإعادة المحاولة"
}
}
},
"BackupAndRestoreBanner": {
"backupSuccessful": "تمت عملية النسخ الاحتياطي الخاصة بك بنجاح!",
"backupFailure": {
"networkError": "بسبب <الاتصال غير المستقر>، لم نتمكن من إجراء النسخ الاحتياطي للبيانات. الرجاء معاودة المحاولة في وقت لاحق.",
"technicalError": "بسبب خطأ فني، لم نتمكن من إجراء النسخ الاحتياطي للبيانات. الرجاء معاودة المحاولة في وقت لاحق.",
"noDataForBackup": "عذرًا، ولكن لا توجد بيانات متاحة لإجراء نسخ احتياطي في الوقت الحالي.",
"storageLimitReached": "يتعذر علينا إكمال عملية النسخ الاحتياطي نظرًا لعدم توفر مساحة تخزين كافية على جهازك. يرجى تحرير مساحة عن طريق حذف الملفات أو التطبيقات غير الضرورية، ثم حاول مرة أخرى."
},
"restoreSuccessful": "تمت عملية الاستعادة بنجاح!",
"restoreFailure": {
"networkError": "بسبب الاتصال غير المستقر، لم نتمكن من استعادة البيانات. الرجاء معاودة المحاولة في وقت لاحق.",
"technicalError": "بسبب خطأ فني، لم نتمكن من استعادة البيانات. الرجاء معاودة المحاولة في وقت لاحق."
}
},
"AccountSelection": {
"backupProcessInfo": "أنت على بعد خطوات قليلة من إجراء نسخ احتياطي لبياناتك",
"cloudInfo": "To initiate the data backup, please tap on the “Proceed” button to link your Google Drive with Inji.",
"googleDriveTitle": "جوجل درايف",
"loadingSubtitle": "تحميل...",
"proceed": "يتابع",
"goBack": "عُد",
"associatedAccount": "الحساب المرتبط"
},
"BackupAndRestore": {
"title": "اسنرجاع البيانات",
"backupProgressState": "جاري النسخ الاحتياطي...",
"lastBackupDetails": "تفاصيل النسخ الاحتياطي الأخير",
"backupInProgress": "لا يزال بإمكانك استخدام التطبيق أثناء إجراء النسخ الاحتياطي للبيانات. سيؤدي إغلاق التطبيق إلى إنهاء عملية النسخ الاحتياطي للبيانات.",
"noBackup": "قم بعمل نسخة احتياطية لبياناتك على Google Drive. يمكنك استعادتها عند إعادة تثبيت INJI.",
"storage": "سيتم تخزين النسخة الاحتياطية في Google Drive المرتبط بحساب Gmail الذي اخترته.",
"backup": "دعم",
"size": "مقاس:",
"restore": "يعيد",
"restoreInProgress": "نحن نستعيد بياناتك، يرجى عدم إغلاق التطبيق. قد يستغرق هذا ما يصل إلى <X> دقيقة بناءً على بياناتك.",
"restoreInfo": "استعادة بياناتك من Google Drive",
"driveSettings": "إعدادات جوجل درايف",
"successBanner": "تمت عملية النسخ الاحتياطي الخاصة بك بنجاح!",
"backupFailed": "فشل النسخ الاحتياطي",
"ok": "نعم"
},
"WelcomeScreen": { "WelcomeScreen": {
"title": "حل هوية مفتوحة المصدر", "title": "حل هوية مفتوحة المصدر",
"unlockApplication": "فتح التطبيق", "unlockApplication": "فتح التطبيق",
@@ -625,4 +701,4 @@
"description": "يرجى استخدام بصمة الإصبع لفتح التطبيق" "description": "يرجى استخدام بصمة الإصبع لفتح التطبيق"
} }
} }
} }

View File

@@ -190,24 +190,41 @@
}, },
"HelpScreen": { "HelpScreen": {
"header": "Help", "header": "Help",
"whatIsDigitalCredential?": "What is a digital credential?", "here":" here. ",
"whatIsaDigitalCredential?": "What is a digital credential?",
"detail-1": "A digital credential is the digital version of your physical Identity card", "detail-1": "A digital credential is the digital version of your physical Identity card",
"whatCanDoWithDigitalCredential?": "What can we do with digital credentials?", "whatCanWeDoWithDigitalCredential?": "What can we do with digital credentials?",
"detail-2": "You can avail various Government and private services using your digital credentials.", "detail-2": "You can avail various Government and private services using your digital credentials.",
"howToAddCard?": "How to add a card?", "howToAddCard?": "How to add a card?",
"detail-3": "To add a card, click on '+' button on the Home page and select the appropriate option.", "detail-3": "IDs can be downloaded to INJI Mobile Wallet as Verifiable Credentials. To know how to download VCs with various IDs please read",
"howToRemoveCardFromWallet?": "How to share a card?", "howToRemoveACardFromTheWallet?": "How to remove a card from the wallet?",
"detail-4": "Swipe left on the card > click on More > Remove from Wallet", "detail-4a": "You can click on ...(meatballs menu) on a card in the Home page and choose Remove from Wallet option to remove a card from the wallet. To know more, please read",
"canWeAddMultipleCards?": "Can we add multiple cards?", "detail-4b": " Please note that, the same card can be downloaded again.",
"canIAddMultipleCards?": "Can I add multiple cards?",
"detail-5": "Yes, you can add multiple cards to the wallet by clicking on '+' button on the Home page.", "detail-5": "Yes, you can add multiple cards to the wallet by clicking on '+' button on the Home page.",
"howToShareCard?": "How to share a card?", "howToShareACard?": "How to share a card?",
"detail-6": "Click on 'Share' button and scan the QR code from the requesting party. Once the connection is established, the card will be shared.", "detail-6": "Click on 'Share' button and scan the QR code from the requesting party. Once the connection is established, the card will be shared.",
"howToActivateCardForOnlineLogin?": "How to activate a card for online login?", "howToActivateACardForOnlineLogin?": "How to activate a card for online login?",
"detail-7": "After successfully adding a card to the wallet, click on 'Activation pending for Online login' on the card. On clicking on 'Activate', the card will be ready to be used for online login.", "detail-7": "After successfully adding a card to the wallet, click on 'Activation pending for Online login' on the card. On clicking on 'Activate', the card will be ready to be used for online login.",
"howToViewActivity?": "How to view activity logs?", "howToViewActivityLogs?": "How to view activity logs?",
"detail-8": "On the Home page, click on 'History' to view the details of the user's activitie.", "detail-8": "On the Home page, click on 'History' to view the details of the user's activitie.",
"whatCanDoBiometricsChanged?": "What happens when Android keystore biometric is changed?", "whatHappensWhenAndroidKeystoreBiometricIsChanged?": "What happens when Android keystore biometric is changed?",
"detail-9": "The Android keystore holds important information like private keys for identity proofs. When you change your biometrics, old keys are no longer safe. To keep things secure, we remove identity proofs signed by those old keys. You can simply download your identity proofs again, and they will be signed with the latest, safer keys." "detail-9": "The Android keystore holds important information like private keys for identity proofs. When you change your biometrics, old keys are no longer safe. To keep things secure, we remove identity proofs signed by those old keys. You can simply download your identity proofs again, and they will be signed with the latest, safer keys.",
"whatIsAnId?":"What is an ID?",
"detail-10":"An ID is any document that can prove a persons identity. In the context of MOSIP, identifiers are alphanumeric digital handles for identities in the system. While a person's identity is represented as a collection of biographic and biometric attributes that can uniquely identify the person, the identity is referred to using identifiers.",
"whatAreTheDifferentTypesOfId?": "What are the different types of ID?",
"detail-11":"In the context of MOSIP, different IDs are UIN, VID, and AID. Read more about them",
"whereCanIFindTheseIds?":"Where can I find these IDs?",
"detail-12a": "As part of the enrolment (registration) process, upon registering the demographic information and biometrics of the resident successfully, a registration ID (AID) is allocated to the resident. An acknowledgment slip containing the captured details and the AID is also issued (printed) to the resident as proof of registration.",
"detail-12b": "Upon successful processing, a Unique Identification Number (UIN) is allocated to the resident and a notification is sent to the resident on the registered phone number and/or email.",
"detail-12c": "VID / Virtual ID is an alias identifier configured for one-time usage and is not linkable. Since these are used for authentication transactions, such identifiers are to be known to the user only or generated with their participation.",
"whyDoesMyVcSayActivationIsPending?":"Why does my VC say Activation is pending?",
"detail-13": "Once VC is downloaded to your wallet, it is not yet bound with the users identity which is why your VC says Activation Pending. Binding your VC to your wallet (with your passcode or biometrics) is crucial to ensure the highest level of security. To activate your VC, please follow the steps",
"whatDoYouMeanByActivatedForOnlineLogin?": "What do you mean by Activated for Online login?",
"detail-14a": "1. Once the VC is successfully binded with the wallet, you can see that it is Activated for Online login which means this VC can now be used for the QR login process. To know more about QR code login, please read",
"detail-14b": "2. The Q&A should be readable and understandable even when the user changes the language in the INJI app.",
"whatIsAVerifiableCredential?": "What is a Verifiable Credential?",
"detail-15": "A Verifiable Credential is a digitally signed piece of information that represents a statement made by the issuer about a subject and typically includes demographic details. VCs are secure and trustworthy in various online interactions."
}, },
"AddVcModal": { "AddVcModal": {
"requestingCredential": "Requesting credential...", "requestingCredential": "Requesting credential...",
@@ -325,12 +342,14 @@
"OnboardingOverlay": { "OnboardingOverlay": {
"stepOneTitle": "Welcome!", "stepOneTitle": "Welcome!",
"stepOneText": "Keep your digital credential with you at all times. Inji helps you manage and use them effectively. To get started, add cards to your profile.", "stepOneText": "Keep your digital credential with you at all times. Inji helps you manage and use them effectively. To get started, add cards to your profile.",
"stepTwoTitle": "Trusted Digital Wallet", "stepTwoTitle": "Secure Sharing",
"stepTwoText": "Store and carry all your important cards in a single trusted wallet.", "stepTwoText": "Share your cards securely in a hassle free way and avail various services.",
"stepThreeTitle": "Secure Sharing", "stepThreeTitle": "Trusted Digital Wallet",
"stepThreeText": "Share your cards securely in a hassle free way and avail various services.", "stepThreeText": "Store and carry all your important cards in a single trusted wallet.",
"stepFourTitle": "Hassle free authentication", "stepFourTitle": "Quick Access",
"stepFourText": "Authenticate yourself with ease using the stored digital credential.", "stepFourText": "Authenticate yourself with ease using the stored digital credential.",
"stepFiveTitle": "Backup Data",
"stepFiveText": "Protect your data with ease using our Backup & Restore feature. Safely store your VCs against loss or accidents by creating regular backups and recover it effortlessly whenever needed for seamless continuity.",
"getStarted": "Get Started", "getStarted": "Get Started",
"goBack": "Go Back", "goBack": "Go Back",
"back": "Back", "back": "Back",
@@ -583,6 +602,63 @@
} }
} }
}, },
"DataBackupScreen": {
"dataBackupAndRestore": "Backup & Restore",
"new": "New",
"loadingTitle": "Loading setting up",
"loadingSubtitle": "Loading...",
"errors": {
"permissionDenied": {
"title": "Permission Denied!",
"message": "We noticed that you've cancelled the creation of data backup settings. We strongly recommend revisiting the data backup settings to ensure your data availability. ",
"helpText": "Click “Configure Settings” to set up data backup now, or “Cancel” to go back to settings screen."
},
"noInternetConnection": {
"title": "No internet connection",
"message": "Please check your connection and retry"
}
}
},
"BackupAndRestoreBanner": {
"backupSuccessful": "Your backup was successful!",
"backupFailure": {
"networkError": "Due to Unstable Connection, we were unable to perform data backup. Please try again later.",
"technicalError": "Due to Technical Error, we were unable to perform data backup. Please try again later.",
"noDataForBackup": "We're sorry, but there is no data available to back up at the moment.",
"storageLimitReached": "We're unable to complete the backup process due to insufficient storage space on your device. Please free up space by deleting unnecessary files or apps, and try again."
},
"restoreSuccessful": "Your restore was successful!",
"restoreFailure": {
"networkError": "Due to Unstable Connection, we were unable to restore data. Please try again later.",
"technicalError": "Due to Technical Error, we were unable to restore the data. Please try again later."
}
},
"AccountSelection": {
"backupProcessInfo": "Youre just a few steps away from backing up your data",
"cloudInfo": "To initiate the data backup, please tap on the “Proceed” button to link your Google Drive with Inji.",
"googleDriveTitle": "Google Drive",
"loadingSubtitle": "Loading...",
"proceed": "Proceed",
"goBack": "Go Back",
"associatedAccount": "Associated account"
},
"BackupAndRestore": {
"title": "Backup & Restore",
"backupProgressState": "Backup in progress...",
"lastBackupDetails": "Last Backup Details",
"backupInProgress": "You can still use the application while data backup is in progress. Closing the app will terminate the data backup process.",
"noBackup": "Backup your Data to Google Drive. You can restore them when you reinstall INJI.",
"storage": "The backup will be stored in the Google Drive associated to your chosen gmail account.",
"backup": "Backup",
"size": "Size: ",
"restore": "Restore",
"restoreInProgress": "Were restoring your data, please do not close the application. This might take upto <X> minutes based on your data.",
"restoreInfo": "Restore your data from Google Drive",
"driveSettings": "Google Drive Settings",
"successBanner": "Your backup was successful!",
"backupFailed": "Backup Failed",
"ok": "OK"
},
"WelcomeScreen": { "WelcomeScreen": {
"title": "Open Source Identity Solution", "title": "Open Source Identity Solution",
"unlockApplication": "Unlock Application", "unlockApplication": "Unlock Application",
@@ -610,6 +686,8 @@
"dismiss": "Dismiss", "dismiss": "Dismiss",
"editLabel": "Edit {{label}}", "editLabel": "Edit {{label}}",
"tryAgain": "Try again", "tryAgain": "Try again",
"goBack": "Go Back",
"configureSettings": "Configure Settings",
"ignore": "Ignore", "ignore": "Ignore",
"camera": { "camera": {
"errors": { "errors": {
@@ -629,4 +707,4 @@
"description": "Please use fingerprint to unlock the app" "description": "Please use fingerprint to unlock the app"
} }
} }
} }

View File

@@ -188,24 +188,41 @@
}, },
"HelpScreen": { "HelpScreen": {
"header": "Tulong", "header": "Tulong",
"whatIsDigitalCredential?": "Ano ang isang digital na kredensyal?", "here": " dito. ",
"whatIsaDigitalCredential?": "Ano ang isang digital na kredensyal?",
"detail-1": "Ang digital na kredensyal ay ang digital na bersyon ng iyong pisikal na Identity card", "detail-1": "Ang digital na kredensyal ay ang digital na bersyon ng iyong pisikal na Identity card",
"whatCanDoWithDigitalCredential?": "Ano ang maaari nating gawin sa mga digital na kredensyal?", "whatCanWeDoWithDigitalCredential?": "Ano ang maaari nating gawin sa mga digital na kredensyal?",
"detail-2": "Maaari kang makakuha ng iba't ibang serbisyo ng Pamahalaan at pribadong gamit ang iyong mga digital na kredensyal.", "detail-2": "Maaari kang makakuha ng iba't ibang serbisyo ng Pamahalaan at pribadong gamit ang iyong mga digital na kredensyal.",
"howToAddCard?": "Paano magdagdag ng card?", "howToAddCard?": "Paano magdagdag ng card?",
"detail-3": "Upang magdagdag ng card, mag-click sa '+' na button sa Home page at piliin ang naaangkop na opsyon.", "detail-3": "Maaaring ma-download ang mga ID sa INJI Mobile Wallet bilang Mga Nabe-verify na Kredensyal. Para malaman kung paano mag-download ng mga VC na may iba't ibang ID mangyaring basahin ",
"howToRemoveCardFromWallet?": "Paano magbahagi ng card?", "howToRemoveACardFromTheWallet?": "Paano mag-alis ng card mula sa wallet?",
"detail-4": "Mag-swipe pakaliwa sa card > mag-click sa Higit pa > Alisin sa Wallet", "detail-4a": "Maaari kang mag-click sa ...(meatballs menu) sa isang card sa Home page at piliin ang Remove from Wallet na opsyon para mag-alis ng card mula sa wallet. Upang malaman ang higit pa, mangyaring basahin",
"canWeAddMultipleCards?": "Maaari ba tayong magdagdag ng maraming card?", "detail-4b": "Pakitandaan na, maaaring i-download muli ang parehong card.",
"canIAddMultipleCards?": "Maaari ba akong magdagdag ng maraming card?",
"detail-5": "Oo, maaari kang magdagdag ng maraming card sa wallet sa pamamagitan ng pag-click sa '+' na button sa Home page.", "detail-5": "Oo, maaari kang magdagdag ng maraming card sa wallet sa pamamagitan ng pag-click sa '+' na button sa Home page.",
"howToShareCard?": "Paano magbahagi ng card?", "howToShareACard?": "Paano magbahagi ng card?",
"detail-6": "Mag-click sa pindutang 'Ibahagi' at i-scan ang QR code mula sa humihiling na partido. Kapag naitatag na ang koneksyon, ibabahagi ang card.", "detail-6": "Mag-click sa pindutang 'Ibahagi' at i-scan ang QR code mula sa humihiling na partido. Kapag naitatag na ang koneksyon, ibabahagi ang card.",
"howToActivateCardForOnlineLogin?": "Paano i-activate ang isang card para sa online na pag-login?", "howToActivateACardForOnlineLogin?": "Paano i-activate ang isang card para sa online na pag-login?",
"detail-7": "Matapos matagumpay na magdagdag ng card sa wallet, mag-click sa 'Activation pending for Online login' sa card. Sa pag-click sa 'I-activate', ang card ay handa nang gamitin para sa online na pag-login.", "detail-7": "Matapos matagumpay na magdagdag ng card sa wallet, mag-click sa 'Activation pending for Online login' sa card. Sa pag-click sa 'I-activate', ang card ay handa nang gamitin para sa online na pag-login.",
"howToViewActivity?": "Paano tingnan ang mga log ng aktibidad?", "howToViewActivityLogs?": "Paano tingnan ang mga log ng aktibidad?",
"detail-8": "Sa Home page, mag-click sa 'Kasaysayan' upang tingnan ang mga detalye ng aktibidad ng user.", "detail-8": "Sa Home page, mag-click sa 'Kasaysayan' upang tingnan ang mga detalye ng aktibidad ng user.",
"whatCanDoBiometricsChanged?": "Ano ang mangyayari kapag binago ang biometric ng Android keystore?", "whatHappensWhenAndroidKeystoreBiometricIsChanged?": "Ano ang mangyayari kapag binago ang biometric ng Android keystore?",
"detail-9": "Ang Android keystore ay nagtataglay ng mahalagang impormasyon tulad ng mga pribadong key para sa mga patunay ng pagkakakilanlan. Kapag binago mo ang iyong biometrics, hindi na ligtas ang mga lumang key. Upang panatilihing secure ang mga bagay, inaalis namin ang mga patunay ng pagkakakilanlan na nilagdaan ng mga lumang key na iyon. Maaari mo lamang i-download muli ang iyong mga patunay ng pagkakakilanlan, at lalagdaan ang mga ito gamit ang pinakabago, mas ligtas na mga susi." "detail-9": "Ang Android keystore ay nagtataglay ng mahalagang impormasyon tulad ng mga pribadong key para sa mga patunay ng pagkakakilanlan. Kapag binago mo ang iyong biometrics, hindi na ligtas ang mga lumang key. Upang panatilihing secure ang mga bagay, inaalis namin ang mga patunay ng pagkakakilanlan na nilagdaan ng mga lumang key na iyon. Maaari mo lamang i-download muli ang iyong mga patunay ng pagkakakilanlan, at lalagdaan ang mga ito gamit ang pinakabago, mas ligtas na mga susi.",
"whatIsAnId?":"Ano ang ID?",
"detail-10":"Ang ID ay anumang dokumento na maaaring patunayan ang pagkakakilanlan ng isang tao. Sa konteksto ng MOSIP, ang mga identifier ay alphanumeric digital handle para sa mga pagkakakilanlan sa system. Habang ang pagkakakilanlan ng isang tao ay kinakatawan bilang isang koleksyon ng mga biographic at biometric na katangian na maaaring natatanging makilala ang tao, ang pagkakakilanlan ay tinutukoy gamit ang mga identifier.",
"whatAreTheDifferentTypesOfId?": "Ano ang iba't ibang uri ng ID?",
"detail-11":"Sa konteksto ng MOSIP, ang iba't ibang ID ay UIN, VID, at AID. Magbasa pa tungkol sa kanila",
"whereCanIFindTheseIds?":"Saan ko mahahanap ang mga ID na ito?",
"detail-12a": "Bilang bahagi ng proseso ng pagpapatala (pagpaparehistro), kapag matagumpay na nairehistro ang demograpikong impormasyon at biometrics ng residente, isang registration ID (AID) ang inilalaan sa residente. Ang isang acknowledgement slip na naglalaman ng mga nakuhang detalye at ang AID ay ibinibigay din (naka-print) sa residente bilang patunay ng pagpaparehistro.",
"detail-12b": "Sa matagumpay na pagproseso, ang isang Unique Identification Number (UIN) ay ilalaan sa residente at isang abiso ang ipapadala sa residente sa nakarehistrong numero ng telepono at/o email.",
"detail-12c": "Ang VID / Virtual ID ay isang alias identifier na na-configure para sa isang beses na paggamit at hindi nali-link. Dahil ginagamit ang mga ito para sa mga transaksyon sa pagpapatotoo, ang mga naturang identifier ay dapat malaman lamang ng user o bubuo sa kanilang paglahok.",
"whyDoesMyVcSayActivationIsPending?":"Bakit sinasabi ng aking VC na nakabinbin ang Activation?",
"detail-13": "Kapag na-download na ang VC sa iyong wallet, hindi pa ito nakatali sa pagkakakilanlan ng user kung kaya't sinasabi ng iyong VC na Nakabinbin ang Aktibidad. Ang pagbubuklod ng iyong VC sa iyong wallet (kasama ang iyong passcode o biometrics) ay napakahalaga upang matiyak ang pinakamataas na antas ng seguridad. Upang i-activate ang iyong VC, mangyaring sundin ang mga hakbang",
"whatDoYouMeanByActivatedForOnlineLogin?": "Ano ang ibig mong sabihin sa Activated for Online login?",
"detail-14a": "1. Kapag matagumpay na na-binded ang VC sa wallet, makikita mo na ito ay Activated for Online login which means itong VC ay magagamit na para sa QR login process. Upang malaman ang higit pa tungkol sa pag-login sa QR code, mangyaring basahin",
"detail-14b": "2. Ang Q&A ay dapat na nababasa at naiintindihan kahit na binago ng user ang wika sa INJI app.",
"whatIsAVerifiableCredential?": "Ano ang isang Napapatunayang Kredensyal?",
"detail-15": "Ang Nabe-verify na Kredensyal ay isang digitally sign na piraso ng impormasyon na kumakatawan sa isang pahayag na ginawa ng nagbigay tungkol sa isang paksa at kadalasang kinabibilangan ng mga detalye ng demograpiko. Ang mga VC ay ligtas at mapagkakatiwalaan sa iba't ibang online na pakikipag-ugnayan."
}, },
"AddVcModal": { "AddVcModal": {
"requestingCredential": "Humihiling ng kredensyal...", "requestingCredential": "Humihiling ng kredensyal...",
@@ -321,16 +338,18 @@
} }
}, },
"OnboardingOverlay": { "OnboardingOverlay": {
"stepOneTitle": "Ligtas na Pagbabahagi!", "stepOneTitle": "Maligayang pagdating!",
"stepOneText": "Ibahagi at tumanggap ng card nang mabilis gamit ang camera ng iyong telepono upang mag-scan ng mga QR code", "stepOneText": "Panatilihin ang iyong digital na kredensyal sa iyo sa lahat ng oras. ",
"stepTwoTitle": "Pinagkakatiwalaang Digital Wallet", "stepTwoTitle": "Ligtas na Pagbabahagi",
"stepTwoText": "Panatilihin ang iyong digital na kredensyal sa iyo sa lahat ng oras", "stepTwoText": "Ibahagi ang iyong mga card nang ligtas sa isang walang problemang paraan at mag-avail ng iba't ibang serbisyo.",
"stepThreeTitle": "Mabilis na pagpasok", "stepThreeTitle": "Pinagkakatiwalaang Digital Wallet",
"stepThreeText": "Kapag nabuo na, ang card ay ligtas na iniimbak sa iyong mobile.", "stepThreeText": "Itabi at dalhin ang lahat ng iyong mahahalagang card sa isang pinagkakatiwalaang wallet.",
"stepFourTitle": "Walang problema sa pagpapatotoo", "stepFourTitle": "Mabilis na pagpasok",
"stepFourText": "I-authenticate ang iyong sarili nang madali gamit ang nakaimbak na digital na kredensyal.", "stepFourText": "I-authenticate ang iyong sarili nang madali gamit ang nakaimbak na digital na kredensyal.",
"stepFiveTitle": "Backup na Data",
"stepFiveText": "Protektahan ang iyong data nang madali gamit ang aming Backup",
"getStarted": "Magsimula", "getStarted": "Magsimula",
"goBack": "bumalik ka", "goBack": "Bumalik ka",
"back": "Bumalik", "back": "Bumalik",
"skip": "Laktawan", "skip": "Laktawan",
"next": "Susunod" "next": "Susunod"
@@ -582,6 +601,63 @@
} }
} }
}, },
"DataBackupScreen": {
"dataBackupAndRestore": "I-backup at I-restore",
"new": "Bago",
"loadingTitle": "Nilo-load ang pag-set up",
"loadingSubtitle": "Naglo-load...",
"errors": {
"permissionDenied": {
"title": "Tinanggihan ang Pahintulot!",
"message": "Napansin namin na kinansela mo ang paggawa ng mga setting ng backup ng data. Lubos naming inirerekumenda na muling bisitahin ang mga setting ng pag-back up ng data upang matiyak ang availability ng iyong data.",
"helpText": "I-click ang \"I-configure ang Mga Setting\" upang i-set up ang pag-backup ng data ngayon, o \"Kanselahin\" upang bumalik sa screen ng mga setting."
},
"noInternetConnection": {
"title": "Pakisuri ang iyong koneksyon at subukang muli",
"message": "Mangyaring kumonekta sa internet at subukang muli."
}
}
},
"BackupAndRestoreBanner": {
"backupSuccessful": "Ang iyong backup ay matagumpay!",
"backupFailure": {
"networkError": "Dahil sa Hindi Matatag na Koneksyon, hindi namin nagawang isagawa ang pag-backup ng data. Pakisubukang muli sa ibang pagkakataon.",
"technicalError": "Dahil sa Technical Error, hindi namin nagawang magsagawa ng pag-backup ng data. Subukang muli mamaya.",
"noDataForBackup": "Ikinalulungkot namin, ngunit walang data na magagamit upang i-back up sa ngayon.",
"storageLimitReached":"Hindi namin makumpleto ang proseso ng pag-backup dahil sa hindi sapat na espasyo sa storage sa iyong device. Mangyaring magbakante ng espasyo sa pamamagitan ng pagtanggal ng mga hindi kinakailangang file o app, at subukang muli."
},
"restoreSuccessful": "Ang iyong pag-restore ay matagumpay!",
"restoreFailure": {
"networkError": "Dahil sa Hindi Matatag na Koneksyon, hindi namin naibalik ang data. Subukang muli mamaya.",
"technicalError": "Dahil sa Technical Error, hindi namin naibalik ang data. Subukang muli mamaya."
}
},
"AccountSelection": {
"backupProcessInfo": "Ilang hakbang ka na lang mula sa pag-back up ng iyong data",
"cloudInfo": "Upang simulan ang pag-backup ng data, mangyaring mag-tap sa button na `Magpatuloy` upang i-link ang iyong Google Drive sa Inji.",
"googleDriveTitle": "Google Drive",
"loadingSubtitle": "Naglo-load...",
"proceed": "Magpatuloy",
"goBack": "Bumalik ka",
"associatedAccount": "Kaugnay na account"
},
"BackupAndRestore": {
"title": "Backup at Restore",
"backupProgressState": "Isinasagawa ang pag-backup...",
"lastBackupDetails": "Mga Detalye ng Huling Backup",
"backupInProgress": "Maaari mo pa ring gamitin ang application habang isinasagawa ang pag-backup ng data. Ang pagsasara ng app ay magwawakas sa proseso ng pag-backup ng data.",
"noBackup": "I-backup ang iyong Data sa Google Drive. Maaari mong ibalik ang mga ito kapag na-install mong muli ang INJI.",
"storage": "Ang backup ay maiimbak sa Google Drive na nauugnay sa iyong napiling gmail account.",
"backup": "Backup",
"size": "Size: ",
"restore": "Ibalik",
"restoreInProgress": "Ibinabalik namin ang iyong data, mangyaring huwag isara ang application. Maaaring tumagal ito ng hanggang <X> minuto batay sa iyong data.",
"restoreInfo": "Ibalik ang iyong data mula sa Google Drive",
"driveSettings": "Mga Setting ng Google Drive",
"successBanner": "Ang iyong backup ay matagumpay!",
"backupFailed": "Nabigo ang pag-backup",
"ok": "OK"
},
"WelcomeScreen": { "WelcomeScreen": {
"title": "Open Source Identity Solution", "title": "Open Source Identity Solution",
"unlockApplication": "I-unlock ang Application", "unlockApplication": "I-unlock ang Application",
@@ -628,4 +704,4 @@
"description": "Mangyaring gumamit ng fingerprint upang i-unlock ang app" "description": "Mangyaring gumamit ng fingerprint upang i-unlock ang app"
} }
} }
} }

View File

@@ -186,24 +186,41 @@
}, },
"HelpScreen": { "HelpScreen": {
"header": "मदद", "header": "मदद",
"whatIsDigitalCredential?": "डिजिटल क्रेडेंशियल क्या है?", "here": " यहाँ। ",
"whatIsaDigitalCredential?": "डिजिटल क्रेडेंशियल क्या है?",
"detail-1": "डिजिटल क्रेडेंशियल आपके भौतिक पहचान पत्र का डिजिटल संस्करण है", "detail-1": "डिजिटल क्रेडेंशियल आपके भौतिक पहचान पत्र का डिजिटल संस्करण है",
"whatCanDoWithDigitalCredential?": "हम डिजिटल क्रेडेंशियल्स के साथ क्या कर सकते हैं?", "whatCanWeDoWithDigitalCredential?": "हम डिजिटल क्रेडेंशियल्स के साथ क्या कर सकते हैं?",
"detail-2": "आप अपने डिजिटल क्रेडेंशियल्स का उपयोग करके विभिन्न सरकारी और निजी सेवाओं का लाभ उठा सकते हैं।", "detail-2": "आप अपने डिजिटल क्रेडेंशियल्स का उपयोग करके विभिन्न सरकारी और निजी सेवाओं का लाभ उठा सकते हैं।",
"howToAddCard?": "कार्ड कैसे जोड़ें?", "howToAddCard?": "कार्ड कैसे जोड़ें?",
"detail-3": "कार्ड जोड़ने के लिए होम पेज पर '+' बटन पर क्लिक करें और उचित विकल्प चुनें", "detail-3": "आईडी को INJI मोबाइल वॉलेट में सत्यापन योग्य क्रेडेंशियल के रूप में डाउनलोड किया जा सकता है। विभिन्न आईडी के साथ वीसी डाउनलोड करने का तरीका जानने के लिए कृपया पढ़ें ",
"howToRemoveCardFromWallet?": "कार्ड कैसे साझा करें?", "howToRemoveACardFromTheWallet?": "वॉलेट से कार्ड कैसे निकालें?",
"detail-4": "कार्ड पर बाईं ओर स्वाइप करें > अधिक > वॉलेट से निकालें पर क्लिें", "detail-4a": "आप होम पेज में कार्ड पर ...(मीटबॉल मेनू) पर क्लिक कर सकते हैं और वॉलेट से कार्ड हटाने के लिए वॉलेट से निकालें विकल्प चुन सकते हैं। अधिक जानने के लिृपया पढ़ें",
"canWeAddMultipleCards?": "कया हम अनेक कार्ड जोड़ सकत हैं?", "detail-4b": "कृपया ध्यान दें कि, उसी कार्ड को दोबारा डाउनलोड किया जा सकत है",
"canIAddMultipleCards?": "क्या मैं एकाधिक कार्ड जोड़ सकता हूँ?",
"detail-5": "हां, आप होम पेज पर '+' बटन पर क्लिक करके वॉलेट में कई कार्ड जोड़ सकते हैं।", "detail-5": "हां, आप होम पेज पर '+' बटन पर क्लिक करके वॉलेट में कई कार्ड जोड़ सकते हैं।",
"howToShareCard?": "कार्ड कैसे साझा करें?", "howToShareACard?": "कार्ड कैसे साझा करें?",
"detail-6": "'शेयर' बटन पर क्लिक करें और अनुरोध करने वाले पक्ष से क्यूआर कोड स्कैन करें। एक बार कनेक्शन स्थापित हो जाने पर, कार्ड साझा किया जाएगा।", "detail-6": "'शेयर' बटन पर क्लिक करें और अनुरोध करने वाले पक्ष से क्यूआर कोड स्कैन करें। एक बार कनेक्शन स्थापित हो जाने पर, कार्ड साझा किया जाएगा।",
"howToActivateCardForOnlineLogin?": "ऑनलाइन लॉगिन के लिए कार्ड कैसे सक्रिय करें?", "howToActivateACardForOnlineLogin?": "ऑनलाइन लॉगिन के लिए कार्ड कैसे सक्रिय करें?",
"detail-7": "वॉलेट में सफलतापूर्वक कार्ड जोड़ने के बाद, कार्ड पर 'ऑनलाइन लॉगिन के लिए सक्रियण लंबित' पर क्लिक करें। 'एक्टिवेट' पर क्लिक करने पर, कार्ड ऑनलाइन लॉगिन के लिए उपयोग के लिए तैयार हो जाएगा।", "detail-7": "वॉलेट में सफलतापूर्वक कार्ड जोड़ने के बाद, कार्ड पर 'ऑनलाइन लॉगिन के लिए सक्रियण लंबित' पर क्लिक करें। 'एक्टिवेट' पर क्लिक करने पर, कार्ड ऑनलाइन लॉगिन के लिए उपयोग के लिए तैयार हो जाएगा।",
"howToViewActivity?": "गतिविधि लॉग कैसे देखें?", "howToViewActivityLogs?": "गतिविधि लॉग कैसे देखें?",
"detail-8": "होम पेज पर, उपयोगकर्ता की गतिविधि का विवरण देखने के लिए 'इतिहास' पर क्लिक करें।", "detail-8": "होम पेज पर, उपयोगकर्ता की गतिविधि का विवरण देखने के लिए 'इतिहास' पर क्लिक करें।",
"whatCanDoBiometricsChanged?": "क्या होता है जब एंड्रॉइड कीस्टोर बायोमेट्रिक बदल दिया जाता है?", "whatHappensWhenAndroidKeystoreBiometricIsChanged?": "क्या होता है जब एंड्रॉइड कीस्टोर बायोमेट्रिक बदल दिया जाता है?",
"detail-9": "एंड्रॉइड कीस्टोर में पहचान प्रमाण के लिए निजी कुंजी जैसी महत्वपूर्ण जानकारी होती है। जब आप अपना बायोमेट्रिक्स बदलते हैं, तो पुरानी चाबियाँ सुरक्षित नहीं रह जाती हैं। चीजों को सुरक्षित रखने के लिए, हम उन पुरानी चाबियों द्वारा हस्ताक्षरित पहचान प्रमाण हटा देते हैं। आप बस अपने पहचान प्रमाण दोबारा डाउनलोड कर सकते हैं, और उन पर नवीनतम, सुरक्षित कुंजी के साथ हस्ताक्षर किए जाएंगे।" "detail-9": "एंड्रॉइड कीस्टोर में पहचान प्रमाण के लिए निजी कुंजी जैसी महत्वपूर्ण जानकारी होती है। जब आप अपना बायोमेट्रिक्स बदलते हैं, तो पुरानी चाबियाँ सुरक्षित नहीं रह जाती हैं। चीजों को सुरक्षित रखने के लिए, हम उन पुरानी चाबियों द्वारा हस्ताक्षरित पहचान प्रमाण हटा देते हैं। आप बस अपने पहचान प्रमाण दोबारा डाउनलोड कर सकते हैं, और उन पर नवीनतम, सुरक्षित कुंजी के साथ हस्ताक्षर किए जाएंगे।",
"whatIsAnId?":"आईडी क्या है?",
"detail-10":"आईडी कोई भी दस्तावेज़ है जो किसी व्यक्ति की पहचान साबित कर सकता है। एमओएसआईपी के संदर्भ में, पहचानकर्ता सिस्टम में पहचान के लिए अल्फ़ान्यूमेरिक डिजिटल हैंडल हैं। जबकि किसी व्यक्ति की पहचान को जीवनी और बायोमेट्रिक विशेषताओं के संग्रह के रूप में दर्शाया जाता है जो विशिष्ट रूप से व्यक्ति की पहचान कर सकता है, पहचान को पहचानकर्ताओं का उपयोग करने के लिए संदर्भित किया जाता है।",
"whatAreTheDifferentTypesOfId?": "आईडी के विभिन्न प्रकार क्या हैं?",
"detail-11":"मोसिप के संदर्भ में, अलग-अलग आईडी UIN, VID और AID हैं। उनके बारे में और पढ़ें",
"whereCanIFindTheseIds?":"मुझे ये आईडी कहां मिल सकती हैं?",
"detail-12a": "नामांकन (पंजीकरण) प्रक्रिया के भाग के रूप में, निवासी की जनसांख्यिकीय जानकारी और बायोमेट्रिक्स को सफलतापूर्वक पंजीकृत करने पर, निवासी को एक पंजीकरण आईडी (एआईडी) आवंटित की जाती है। पंजीकरण के प्रमाण के रूप में निवासी को एक पावती पर्ची भी जारी (मुद्रित) की जाती है जिसमें कैप्चर किए गए विवरण और एआईडी शामिल होते हैं।",
"detail-12b": "सफल प्रसंस्करण पर, निवासी को एक विशिष्ट पहचान संख्या (यूआईएन) आवंटित की जाती है और निवासी को पंजीकृत फोन नंबर और/या ईमेल पर एक अधिसूचना भेजी जाती है।",
"detail-12c": "वीआईडी/वर्चुअल आईडी एक उपनाम पहचानकर्ता है जिसे एक बार उपयोग के लिए कॉन्फ़िगर किया गया है और यह लिंक करने योग्य नहीं है। चूंकि इनका उपयोग प्रमाणीकरण लेनदेन के लिए किया जाता है, इसलिए ऐसे पहचानकर्ताओं को केवल उपयोगकर्ता को ही पता होना चाहिए या उनकी भागीदारी से उत्पन्न किया जाना चाहिए।",
"whyDoesMyVcSayActivationIsPending?":"मेरा वीसी यह क्यों कहता है कि सक्रियण लंबित है?",
"detail-13": "एक बार वीसी आपके वॉलेट में डाउनलोड हो जाने के बाद, यह अभी तक उपयोगकर्ता की पहचान से बंधा नहीं है, यही कारण है कि आपका वीसी सक्रियण लंबित कहता है। उच्चतम स्तर की सुरक्षा सुनिश्चित करने के लिए अपने वीसी को अपने वॉलेट (पासकोड या बायोमेट्रिक्स के साथ) से जोड़ना महत्वपूर्ण है। अपने वीसी को सक्रिय करने के लिए, कृपया चरणों का पालन करें",
"whatDoYouMeanByActivatedForOnlineLogin?": "ऑनलाइन लॉगिन के लिए सक्रिय से आपका क्या तात्पर्य है?",
"detail-14a": "1. एक बार जब वीसी सफलतापूर्वक वॉलेट से जुड़ जाता है, तो आप देख सकते हैं कि यह ऑनलाइन लॉगिन के लिए सक्रिय है, जिसका अर्थ है कि इस वीसी का उपयोग अब क्यूआर लॉगिन प्रक्रिया के लिए किया जा सकता है। क्यूआर कोड लॉगिन के बारे में अधिक जानने के लिए कृपया पढ़ें",
"detail-14b": "2. उपयोगकर्ता द्वारा INJI ऐप में भाषा बदलने पर भी प्रश्नोत्तर पठनीय और समझने योग्य होना चाहिए।",
"whatIsAVerifiableCredential?": "सत्यापन योग्य क्रेडेंशियल क्या है?",
"detail-15": "सत्यापन योग्य क्रेडेंशियल डिजिटल रूप से हस्ताक्षरित जानकारी का एक टुकड़ा है जो किसी विषय के बारे में जारीकर्ता द्वारा दिए गए बयान का प्रतिनिधित्व करता है और इसमें आम तौर पर जनसांख्यिकीय विवरण शामिल होते हैं। वीसी विभिन्न ऑनलाइन इंटरैक्शन में सुरक्षित और भरोसेमंद हैं।"
}, },
"AddVcModal": { "AddVcModal": {
"requestingCredential": "क्रेडेंशियल का अनुरोध कर रहा है...", "requestingCredential": "क्रेडेंशियल का अनुरोध कर रहा है...",
@@ -320,14 +337,16 @@
} }
}, },
"OnboardingOverlay": { "OnboardingOverlay": {
"stepOneTitle": "सुरक्षित साझाकरण!", "stepOneTitle": "स्वागत!",
"stepOneText": "अपना डिजिटल क्रेडेंशियल हर समय अपने पास रखें। इंजी आपको उन्हें प्रभावी ढंग से प्रबंधित करने और उपयोग करने में मदद करता है। आरंभ करने के लिए, अपनी प्रोफ़ाइल में कार्ड जोड़ें।", "stepOneText": "अपना डिजिटल क्रेडेंशियल हर समय अपने पास रखें। ",
"stepTwoTitle": "विश्वसनीय डिजिटल वॉलेट", "stepTwoTitle": "सुरक्षित साझाकरण",
"stepTwoText": "अपने सभी महत्वपूर्ण कार्डों को एक ही विश्वसनीय वॉलेट में रखें और रखें।", "stepTwoText": "परेशानी मुक्त तरीके से अपने कार्ड सुरक्षित रूप से साझा करें और विभिन्न सेवाओं का लाभ उठाएं।",
"stepThreeTitle": "सुरक्षित साझाकरण", "stepThreeTitle": "विश्वसनीय डिजिटल वॉलेट",
"stepThreeText": "परेशानी मुक्त तरीके से अपने कार्ड सुरक्षित रूप से साझा करें और विभिन्न सेवाओं का लाभ उठाएं।", "stepThreeText": "अपने सभी महत्वपूर्ण कार्डों को एक ही विश्वसनीय वॉलेट में रखें और रखें।",
"stepFourTitle": "परेशानी मुक्त प्रमाणीकरण", "stepFourTitle": "त्वरित ऐक्सेस",
"stepFourText": "संग्रहीत डिजिटल क्रेडेंशियल का उपयोग करके आसानी से स्वयं को प्रमाणित करें।", "stepFourText": "संग्रहीत डिजिटल क्रेडेंशियल का उपयोग करके आसानी से स्वयं को प्रमाणित करें।",
"stepFiveTitle": "बैकअप डेटा",
"stepFiveText": "हमारे बैकअप का उपयोग करके आसानी से अपने डेटा को सुरक्षित रखें",
"getStarted": "शुरू हो जाओ", "getStarted": "शुरू हो जाओ",
"goBack": "वापस जाओ", "goBack": "वापस जाओ",
"back": "पीछे", "back": "पीछे",
@@ -579,6 +598,63 @@
} }
} }
}, },
"DataBackupScreen": {
"dataBackupAndRestore": "बैकअप बहाल",
"new": "नया",
"loadingTitle": "सेटिंग लोड हो रही है",
"loadingSubtitle": "लोड हो रहा है...",
"errors": {
"permissionDenied": {
"title": "अनुमति नहीं मिली!",
"message": "हमने देखा है कि आपने डेटा बैकअप सेटिंग्स का निर्माण रद्द कर दिया है। हम आपके डेटा की उपलब्धता सुनिश्चित करने के लिए डेटा बैकअप सेटिंग्स पर दोबारा गौर करने की दृढ़ता से अनुशंसा करते हैं।",
"helpText": "अभी डेटा बैकअप सेट करने के लिए \"कॉन्फ़िगर सेटिंग्स\" पर क्लिक करें, या सेटिंग्स स्क्रीन पर वापस जाने के लिए \"रद्द करें\" पर क्लिक करें।"
},
"noInternetConnection": {
"title": "कोई इंटरनेट कनेक्शन नहीं",
"message": "कृपया अपना कनेक्शन जांचें और पुनः प्रयास करें"
}
}
},
"BackupAndRestoreBanner": {
"backupSuccessful": "आपका बैकअप सफल रहा!",
"backupFailure": {
"networkError": "अस्थिर कनेक्शन के कारण, हम डेटा बैकअप करने में असमर्थ थे। कृपया बाद में पुनः प्रयास करें।",
"technicalError": "तकनीकी त्रुटि के कारण, हम डेटा बैकअप करने में असमर्थ थे। कृपया बाद में पुन: प्रयास करें।",
"noDataForBackup": "हमें खेद है, लेकिन इस समय बैकअप के लिए कोई डेटा उपलब्ध नहीं है।",
"storageLimitReached": "आपके डिवाइस पर अपर्याप्त संग्रहण स्थान के कारण हम बैकअप प्रक्रिया पूरी करने में असमर्थ हैं। कृपया अनावश्यक फ़ाइलें या ऐप्स हटाकर स्थान खाली करें और पुनः प्रयास करें।"
},
"restoreSuccessful": "आपका पुनर्स्थापना सफल रहा!",
"restoreFailure": {
"networkError": "अस्थिर कनेक्शन के कारण, हम डेटा पुनर्स्थापित करने में असमर्थ थे। कृपया बाद में पुन: प्रयास करें।",
"technicalError": "तकनीकी त्रुटि के कारण, हम डेटा को पुनर्स्थापित करने में असमर्थ थे। कृपया बाद में पुन: प्रयास करें।"
}
},
"AccountSelection": {
"backupProcessInfo": "आप अपने डेटा का बैकअप लेने से बस कुछ ही कदम दूर हैं",
"cloudInfo": "डेटा बैकअप शुरू करने के लिए, कृपया अपने Google ड्राइव को Inji से लिंक करने के लिए `आगे बढ़ें` बटन पर टैप करें।",
"googleDriveTitle": "गूगल हाँकना",
"loadingSubtitle": "लोड हो रहा है...",
"proceed": "आगे बढ़ना",
"goBack": "वापस जाओ",
"associatedAccount": "संबद्ध खाता"
},
"BackupAndRestore": {
"title": "बैकअप और पुनर्स्थापना",
"backupProgressState": "बैकअप प्रगति पर है...",
"lastBackupDetails": "अंतिम बैकअप विवरण",
"backupInProgress": "जब डेटा बैकअप चल रहा हो तब भी आप एप्लिकेशन का उपयोग कर सकते हैं। ऐप बंद करने से डेटा बैकअप प्रक्रिया समाप्त हो जाएगी।",
"noBackup": "अपने डेटा का Google ड्राइव पर बैकअप लें। INJI को पुनः इंस्टॉल करने पर आप उन्हें पुनर्स्थापित कर सकते हैं।",
"storage": "बैकअप आपके चुने हुए जीमेल खाते से जुड़े Google ड्राइव में संग्रहीत किया जाएगा।",
"backup": "बैकअप",
"size": "आकार: ",
"restore": "पुनर्स्थापित करें",
"restoreInProgress": "हम आपका डेटा पुनर्स्थापित कर रहे हैं, कृपया एप्लिकेशन को बंद न करें। आपके डेटा के आधार पर इसमें <X> मिनट तक का समय लग सकता है।",
"restoreInfo": "Google ड्राइव से अपना डेटा पुनर्स्थापित करें",
"driveSettings": "Google ड्राइव सेटिंग्स",
"successBanner": "आपका बैकअप सफल रहा!",
"backupFailed": "बैकअप विफल",
"ok": "ठीक है"
},
"WelcomeScreen": { "WelcomeScreen": {
"title": "ओपन सोर्स आइडेंटिटी सॉल्यूशन", "title": "ओपन सोर्स आइडेंटिटी सॉल्यूशन",
"unlockApplication": "एप्लिकेशन अनलॉक करें", "unlockApplication": "एप्लिकेशन अनलॉक करें",
@@ -623,4 +699,4 @@
"description": "कृपया ऐप को अनलॉक करने के लिए फिंगरप्रिंट का उपयोग करें" "description": "कृपया ऐप को अनलॉक करने के लिए फिंगरप्रिंट का उपयोग करें"
} }
} }
} }

View File

@@ -90,7 +90,7 @@
"offlineAuthDisabledMessage": "ಆನ್‌ಲೈನ್ ದೃಢೀಕರಣಕ್ಕಾಗಿ ಬಳಸಲು ಈ ರುಜುವಾತುಗಳನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಲು ಇಲ್ಲಿ ಕ್ಲಿಕ್ ಮಾಡಿ.", "offlineAuthDisabledMessage": "ಆನ್‌ಲೈನ್ ದೃಢೀಕರಣಕ್ಕಾಗಿ ಬಳಸಲು ಈ ರುಜುವಾತುಗಳನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಲು ಇಲ್ಲಿ ಕ್ಲಿಕ್ ಮಾಡಿ.",
"viewActivityLog": "ಚಟುವಟಿಕೆ ಲಾಗ್ ಅನ್ನು ವೀಕ್ಷಿಸಿ", "viewActivityLog": "ಚಟುವಟಿಕೆ ಲಾಗ್ ಅನ್ನು ವೀಕ್ಷಿಸಿ",
"removeFromWallet": "ಕೈಚೀಲದಿಂದ ತೆಗೆದುಹಾಕಿ", "removeFromWallet": "ಕೈಚೀಲದಿಂದ ತೆಗೆದುಹಾಕಿ",
"revokeId": "ID ಹಿಂತೆಗೆದುಕೊಳ್ಳಿ", "revokeId": "ಐಡಿ ಹಿಂತೆಗೆದುಕೊಳ್ಳಿ",
"revokeMessage": "ಈ ಪ್ರೊಫೈಲ್‌ಗಾಗಿ ವರ್ಚುವಲ್ ಐಡಿಯನ್ನು ಹಿಂತೆಗೆದುಕೊಳ್ಳಿ" "revokeMessage": "ಈ ಪ್ರೊಫೈಲ್‌ಗಾಗಿ ವರ್ಚುವಲ್ ಐಡಿಯನ್ನು ಹಿಂತೆಗೆದುಕೊಳ್ಳಿ"
}, },
"WalletBinding": { "WalletBinding": {
@@ -185,24 +185,41 @@
}, },
"HelpScreen": { "HelpScreen": {
"header": "ಸಹಾಯ", "header": "ಸಹಾಯ",
"whatIsDigitalCredential?": "ಡಿಜಿಟಲ್ ರುಜುವಾತು ಎಂದರೇನು?", "here": " ಇಲ್ಲಿ. ",
"whatIsaDigitalCredential?": "ಡಿಜಿಟಲ್ ರುಜುವಾತು ಎಂದರೇನು?",
"detail-1": "ಡಿಜಿಟಲ್ ರುಜುವಾತು ನಿಮ್ಮ ಭೌತಿಕ ಗುರುತಿನ ಚೀಟಿಯ ಡಿಜಿಟಲ್ ಆವೃತ್ತಿಯಾಗಿದೆ", "detail-1": "ಡಿಜಿಟಲ್ ರುಜುವಾತು ನಿಮ್ಮ ಭೌತಿಕ ಗುರುತಿನ ಚೀಟಿಯ ಡಿಜಿಟಲ್ ಆವೃತ್ತಿಯಾಗಿದೆ",
"whatCanDoWithDigitalCredential?": "ಡಿಜಿಟಲ್ ರುಜುವಾತುಗಳೊಂದಿಗೆ ನಾವು ಏನು ಮಾಡಬಹುದು?", "whatCanWeDoWithDigitalCredential?": "ಡಿಜಿಟಲ್ ರುಜುವಾತುಗಳೊಂದಿಗೆ ನಾವು ಏನು ಮಾಡಬಹುದು?",
"detail-2": "ನಿಮ್ಮ ಡಿಜಿಟಲ್ ರುಜುವಾತುಗಳನ್ನು ಬಳಸಿಕೊಂಡು ನೀವು ವಿವಿಧ ಸರ್ಕಾರಿ ಮತ್ತು ಖಾಸಗಿ ಸೇವೆಗಳನ್ನು ಪಡೆಯಬಹುದು.", "detail-2": "ನಿಮ್ಮ ಡಿಜಿಟಲ್ ರುಜುವಾತುಗಳನ್ನು ಬಳಸಿಕೊಂಡು ನೀವು ವಿವಿಧ ಸರ್ಕಾರಿ ಮತ್ತು ಖಾಸಗಿ ಸೇವೆಗಳನ್ನು ಪಡೆಯಬಹುದು.",
"howToAddCard?": "ಕಾರ್ಡ್ ಅನ್ನು ಹೇಗೆ ಸೇರಿಸುವುದು?", "howToAddCard?": "ಕಾರ್ಡ್ ಅನ್ನು ಹೇಗೆ ಸೇರಿಸುವುದು?",
"detail-3": "ಕಾರ್ಡ್ ಸೇರಿಸಲು, ಮುಖಪುಟದಲ್ಲಿ '+' ಬಟನ್ ಕ್ಲಿಕ್ ಮಾಡಿ ಮತ್ತು ಸೂಕ್ತವಾದ ಆಯ್ಕೆಯನ್ನು ಆರಿಸಿ.", "detail-3": "ಐಡಿಗಳನ್ನು ಪರಿಶೀಲಿಸಬಹುದಾದ ರುಜುವಾತುಗಳಂತೆ INJI ಮೊಬೈಲ್ ವಾಲೆಟ್‌ಗೆ ಡೌನ್‌ಲೋಡ್ ಮಾಡಬಹುದು. ವಿವಿಧ ಐಡಿ ಗಳೊಂದಿಗೆ VC ಗಳನ್ನು ಡೌನ್‌ಲೋಡ್ ಮಾಡುವುದು ಹೇಗೆ ಎಂದು ತಿಳಿಯಲು ದಯವಿಟ್ಟು ಓದಿ ",
"howToRemoveCardFromWallet?": "ಕಾರ್ಡ್ ಹಂಚಿಕೊಳ್ಳುವುದು ಹೇಗೆ?", "howToRemoveACardFromTheWallet?": "ವ್ಯಾಲೆಟ್ನಿಂದ ಕಾರ್ಡ್ ಅನ್ನು ಹೇಗೆ ತೆಗೆದುಹಾಕುವುದು?",
"detail-4": "ಕಾರ್ಡ್‌ನಲ್ಲಿ ಎಡಕ್ಕೆ ಸ್ವೈಪ್ ಮಾಡಿ > ಇನ್ನಷ್ಟು ಕ್ಲಿಕ್ ಮಾಡಿ > ವಾಲೆಟ್‌ನಿಂದ ತೆಗೆದುಹಾಕಿ", "detail-4a": "ನೀವು ಮುಖಪುಟದಲ್ಲಿ ಕಾರ್ಡ್‌ನಲ್ಲಿ ...(ಮೀಟ್‌ಬಾಲ್ಸ್ ಮೆನು) ಅನ್ನು ಕ್ಲಿಕ್ ಮಾಡಬಹುದು ಮತ್ತು ವ್ಯಾಲೆಟ್‌ನಿಂದ ಕಾರ್ಡ್ ಅನ್ನು ತೆಗೆದುಹಾಕಲು ವಾಲೆಟ್‌ನಿಂದ ತೆಗೆದುಹಾಕಿ ಆಯ್ಕೆಯನ್ನು ಆರಿಸಿ. ಇನ್ನಷ್ಟು ತಿಳಿಯಲು, ದಯವಿಟ್ಟು ಓದಿ",
"canWeAddMultipleCards?": "ನಾವು ಬಹು ಕಾರ್ಡ್‌ಗಳನ್ನು ಸೇರಿಸಬಹುದೇ?", "detail-4b": "ಅದೇ ಕಾರ್ಡ್ನ್ನು ಮತ್ತೆ ಡೌನ್‌ಲೋಡ್ ಮಾಡಬಹುದು ಎಂಬುದನ್ನು ದಯವಿಟ್ಟು ಗಮನಿಸಿ.",
"canIAddMultipleCards?": "ನಾನು ಬಹು ಕಾರ್ಡ್‌ಗಳನ್ನು ಸೇರಿಸಬಹುದೇ?",
"detail-5": "ಹೌದು, ಮುಖಪುಟದಲ್ಲಿ '+' ಬಟನ್ ಕ್ಲಿಕ್ ಮಾಡುವ ಮೂಲಕ ನೀವು ಬಹು ಕಾರ್ಡ್‌ಗಳನ್ನು ವ್ಯಾಲೆಟ್‌ಗೆ ಸೇರಿಸಬಹುದು.", "detail-5": "ಹೌದು, ಮುಖಪುಟದಲ್ಲಿ '+' ಬಟನ್ ಕ್ಲಿಕ್ ಮಾಡುವ ಮೂಲಕ ನೀವು ಬಹು ಕಾರ್ಡ್‌ಗಳನ್ನು ವ್ಯಾಲೆಟ್‌ಗೆ ಸೇರಿಸಬಹುದು.",
"howToShareCard?": "ಕಾರ್ಡ್ ಹಂಚಿಕೊಳ್ಳುವುದು ಹೇಗೆ?", "howToShareACard?": "ಕಾರ್ಡ್ ಹಂಚಿಕೊಳ್ಳುವುದು ಹೇಗೆ?",
"detail-6": "'ಹಂಚಿಕೊಳ್ಳಿ' ಬಟನ್ ಕ್ಲಿಕ್ ಮಾಡಿ ಮತ್ತು ವಿನಂತಿಸಿದ ಪಕ್ಷದಿಂದ QR ಕೋಡ್ ಅನ್ನು ಸ್ಕ್ಯಾನ್ ಮಾಡಿ. ಸಂಪರ್ಕವನ್ನು ಸ್ಥಾಪಿಸಿದ ನಂತರ, ಕಾರ್ಡ್ ಅನ್ನು ಹಂಚಿಕೊಳ್ಳಲಾಗುತ್ತದೆ.", "detail-6": "'ಹಂಚಿಕೊಳ್ಳಿ' ಬಟನ್ ಕ್ಲಿಕ್ ಮಾಡಿ ಮತ್ತು ವಿನಂತಿಸಿದ ಪಕ್ಷದಿಂದ QR ಕೋಡ್ ಅನ್ನು ಸ್ಕ್ಯಾನ್ ಮಾಡಿ. ಸಂಪರ್ಕವನ್ನು ಸ್ಥಾಪಿಸಿದ ನಂತರ, ಕಾರ್ಡ್ ಅನ್ನು ಹಂಚಿಕೊಳ್ಳಲಾಗುತ್ತದೆ.",
"howToActivateCardForOnlineLogin?": "ಆನ್‌ಲೈನ್ ಲಾಗಿನ್‌ಗಾಗಿ ಕಾರ್ಡ್ ಅನ್ನು ಹೇಗೆ ಸಕ್ರಿಯಗೊಳಿಸುವುದು?", "howToActivateACardForOnlineLogin?": "ಆನ್‌ಲೈನ್ ಲಾಗಿನ್‌ಗಾಗಿ ಕಾರ್ಡ್ ಅನ್ನು ಹೇಗೆ ಸಕ್ರಿಯಗೊಳಿಸುವುದು?",
"detail-7": "ವ್ಯಾಲೆಟ್‌ಗೆ ಕಾರ್ಡ್ ಅನ್ನು ಯಶಸ್ವಿಯಾಗಿ ಸೇರಿಸಿದ ನಂತರ, ಕಾರ್ಡ್‌ನಲ್ಲಿರುವ 'ಆನ್‌ಲೈನ್ ಲಾಗಿನ್‌ಗಾಗಿ ಆಕ್ಟಿವೇಶನ್ ಪೆಂಡಿಂಗ್' ಅನ್ನು ಕ್ಲಿಕ್ ಮಾಡಿ. 'ಸಕ್ರಿಯಗೊಳಿಸು' ಕ್ಲಿಕ್ ಮಾಡಿದಾಗ, ಕಾರ್ಡ್ ಆನ್‌ಲೈನ್ ಲಾಗಿನ್‌ಗೆ ಬಳಸಲು ಸಿದ್ಧವಾಗುತ್ತದೆ.", "detail-7": "ವ್ಯಾಲೆಟ್‌ಗೆ ಕಾರ್ಡ್ ಅನ್ನು ಯಶಸ್ವಿಯಾಗಿ ಸೇರಿಸಿದ ನಂತರ, ಕಾರ್ಡ್‌ನಲ್ಲಿರುವ 'ಆನ್‌ಲೈನ್ ಲಾಗಿನ್‌ಗಾಗಿ ಆಕ್ಟಿವೇಶನ್ ಪೆಂಡಿಂಗ್' ಅನ್ನು ಕ್ಲಿಕ್ ಮಾಡಿ. 'ಸಕ್ರಿಯಗೊಳಿಸು' ಕ್ಲಿಕ್ ಮಾಡಿದಾಗ, ಕಾರ್ಡ್ ಆನ್‌ಲೈನ್ ಲಾಗಿನ್‌ಗೆ ಬಳಸಲು ಸಿದ್ಧವಾಗುತ್ತದೆ.",
"howToViewActivity?": "ಚಟುವಟಿಕೆ ಲಾಗ್‌ಗಳನ್ನು ವೀಕ್ಷಿಸುವುದು ಹೇಗೆ?", "howToViewActivityLogs?": "ಚಟುವಟಿಕೆ ಲಾಗ್‌ಗಳನ್ನು ವೀಕ್ಷಿಸುವುದು ಹೇಗೆ?",
"detail-8": "ಮುಖಪುಟದಲ್ಲಿ, ಬಳಕೆದಾರರ ಚಟುವಟಿಕೆಯ ವಿವರಗಳನ್ನು ವೀಕ್ಷಿಸಲು 'ಇತಿಹಾಸ' ಕ್ಲಿಕ್ ಮಾಡಿ.", "detail-8": "ಮುಖಪುಟದಲ್ಲಿ, ಬಳಕೆದಾರರ ಚಟುವಟಿಕೆಯ ವಿವರಗಳನ್ನು ವೀಕ್ಷಿಸಲು 'ಇತಿಹಾಸ' ಕ್ಲಿಕ್ ಮಾಡಿ.",
"whatCanDoBiometricsChanged?": "ಆಂಡ್ರಾಯ್ಡ್ ಕೀಸ್ಟೋರ್ ಬಯೋಮೆಟ್ರಿಕ್ ಅನ್ನು ಬದಲಾಯಿಸಿದಾಗ ಏನಾಗುತ್ತದೆ?", "whatHappensWhenAndroidKeystoreBiometricIsChanged?": "ಆಂಡ್ರಾಯ್ಡ್ ಕೀಸ್ಟೋರ್ ಬಯೋಮೆಟ್ರಿಕ್ ಅನ್ನು ಬದಲಾಯಿಸಿದಾಗ ಏನಾಗುತ್ತದೆ?",
"detail-9": "ಆಂಡ್ರಾಯ್ಡ್ ಕೀಸ್ಟೋರ್ ಗುರುತಿನ ಪುರಾವೆಗಳಿಗಾಗಿ ಖಾಸಗಿ ಕೀಗಳಂತಹ ಪ್ರಮುಖ ಮಾಹಿತಿಯನ್ನು ಹೊಂದಿದೆ. ನಿಮ್ಮ ಬಯೋಮೆಟ್ರಿಕ್ಸ್ ಅನ್ನು ನೀವು ಬದಲಾಯಿಸಿದಾಗ, ಹಳೆಯ ಕೀಗಳು ಇನ್ನು ಮುಂದೆ ಸುರಕ್ಷಿತವಾಗಿರುವುದಿಲ್ಲ. ವಿಷಯಗಳನ್ನು ಸುರಕ್ಷಿತವಾಗಿರಿಸಲು, ಆ ಹಳೆಯ ಕೀಗಳಿಂದ ಸಹಿ ಮಾಡಿದ ಗುರುತಿನ ಪುರಾವೆಗಳನ್ನು ನಾವು ತೆಗೆದುಹಾಕುತ್ತೇವೆ. ನಿಮ್ಮ ಗುರುತಿನ ಪುರಾವೆಗಳನ್ನು ನೀವು ಸರಳವಾಗಿ ಡೌನ್‌ಲೋಡ್ ಮಾಡಬಹುದು ಮತ್ತು ಅವುಗಳನ್ನು ಇತ್ತೀಚಿನ, ಸುರಕ್ಷಿತ ಕೀಗಳೊಂದಿಗೆ ಸಹಿ ಮಾಡಲಾಗುತ್ತದೆ." "detail-9": "ಆಂಡ್ರಾಯ್ಡ್ ಕೀಸ್ಟೋರ್ ಗುರುತಿನ ಪುರಾವೆಗಳಿಗಾಗಿ ಖಾಸಗಿ ಕೀಗಳಂತಹ ಪ್ರಮುಖ ಮಾಹಿತಿಯನ್ನು ಹೊಂದಿದೆ. ನಿಮ್ಮ ಬಯೋಮೆಟ್ರಿಕ್ಸ್ ಅನ್ನು ನೀವು ಬದಲಾಯಿಸಿದಾಗ, ಹಳೆಯ ಕೀಗಳು ಇನ್ನು ಮುಂದೆ ಸುರಕ್ಷಿತವಾಗಿರುವುದಿಲ್ಲ. ವಿಷಯಗಳನ್ನು ಸುರಕ್ಷಿತವಾಗಿರಿಸಲು, ಆ ಹಳೆಯ ಕೀಗಳಿಂದ ಸಹಿ ಮಾಡಿದ ಗುರುತಿನ ಪುರಾವೆಗಳನ್ನು ನಾವು ತೆಗೆದುಹಾಕುತ್ತೇವೆ. ನಿಮ್ಮ ಗುರುತಿನ ಪುರಾವೆಗಳನ್ನು ನೀವು ಸರಳವಾಗಿ ಡೌನ್‌ಲೋಡ್ ಮಾಡಬಹುದು ಮತ್ತು ಅವುಗಳನ್ನು ಇತ್ತೀಚಿನ, ಸುರಕ್ಷಿತ ಕೀಗಳೊಂದಿಗೆ ಸಹಿ ಮಾಡಲಾಗುತ್ತದೆ.",
"whatIsAnId?":"ಐಡಿ ಎಂದರೇನು?",
"detail-10":"ಐಡಿ ಎನ್ನುವುದು ವ್ಯಕ್ತಿಯ ಗುರುತನ್ನು ಸಾಬೀತುಪಡಿಸುವ ಯಾವುದೇ ದಾಖಲೆಯಾಗಿದೆ. MOSIP ನ ಸಂದರ್ಭದಲ್ಲಿ, ಗುರುತಿಸುವಿಕೆಗಳು ವ್ಯವಸ್ಥೆಯಲ್ಲಿನ ಗುರುತುಗಳಿಗಾಗಿ ಆಲ್ಫಾನ್ಯೂಮರಿಕ್ ಡಿಜಿಟಲ್ ಹ್ಯಾಂಡಲ್‌ಗಳಾಗಿವೆ. ವ್ಯಕ್ತಿಯ ಗುರುತನ್ನು ವ್ಯಕ್ತಿಯನ್ನು ಅನನ್ಯವಾಗಿ ಗುರುತಿಸಬಲ್ಲ ಜೀವನಚರಿತ್ರೆಯ ಮತ್ತು ಬಯೋಮೆಟ್ರಿಕ್ ಗುಣಲಕ್ಷಣಗಳ ಸಂಗ್ರಹವಾಗಿ ಪ್ರತಿನಿಧಿಸಲಾಗುತ್ತದೆ, ಗುರುತನ್ನು ಗುರುತಿಸುವಿಕೆಗಳನ್ನು ಬಳಸುವುದನ್ನು ಉಲ್ಲೇಖಿಸಲಾಗುತ್ತದೆ.",
"whatAreTheDifferentTypesOfId?": "ಐಡಿ ಯ ವಿವಿಧ ಪ್ರಕಾರಗಳು ಯಾವುವು?",
"detail-11":"MOSIP ನ ಸಂದರ್ಭದಲ್ಲಿ, ವಿಭಿನ್ನ ಐಡಿ ಗಳು UIN, VID ಮತ್ತು AID. ಅವರ ಬಗ್ಗೆ ಇನ್ನಷ್ಟು ಓದಿ",
"whereCanIFindTheseIds?":"ನಾನು ಈ ಐಡಿಗಳನ್ನು ಎಲ್ಲಿ ಹುಡುಕಬಹುದು?",
"detail-12a": "ನೋಂದಣಿ (ನೋಂದಣಿ) ಪ್ರಕ್ರಿಯೆಯ ಭಾಗವಾಗಿ, ಜನಸಂಖ್ಯಾ ಮಾಹಿತಿ ಮತ್ತು ನಿವಾಸಿಗಳ ಬಯೋಮೆಟ್ರಿಕ್ಸ್ ಅನ್ನು ಯಶಸ್ವಿಯಾಗಿ ನೋಂದಾಯಿಸಿದ ನಂತರ, ನೋಂದಣಿ ಐಡಿ (AID) ಅನ್ನು ನಿವಾಸಿಗೆ ಹಂಚಲಾಗುತ್ತದೆ. ಸೆರೆಹಿಡಿಯಲಾದ ವಿವರಗಳನ್ನು ಒಳಗೊಂಡಿರುವ ಸ್ವೀಕೃತಿ ಚೀಟಿ ಮತ್ತು AID ಅನ್ನು ನೋಂದಣಿಯ ಪುರಾವೆಯಾಗಿ ನಿವಾಸಿಗೆ ನೀಡಲಾಗುತ್ತದೆ (ಮುದ್ರಿತ).",
"detail-12b": "ಯಶಸ್ವಿ ಪ್ರಕ್ರಿಯೆಯ ನಂತರ, ನಿವಾಸಿಗೆ ವಿಶಿಷ್ಟ ಗುರುತಿನ ಸಂಖ್ಯೆ (UIN) ಅನ್ನು ಹಂಚಲಾಗುತ್ತದೆ ಮತ್ತು ನೋಂದಾಯಿತ ಫೋನ್ ಸಂಖ್ಯೆ ಮತ್ತು/ಅಥವಾ ಇಮೇಲ್‌ನಲ್ಲಿ ನಿವಾಸಿಗೆ ಅಧಿಸೂಚನೆಯನ್ನು ಕಳುಹಿಸಲಾಗುತ್ತದೆ.",
"detail-12c": "VID/ ವರ್ಚುವಲ್ ಐಡಿ ಒಂದು-ಬಾರಿ ಬಳಕೆಗಾಗಿ ಕಾನ್ಫಿಗರ್ ಮಾಡಲಾದ ಅಲಿಯಾಸ್ ಐಡೆಂಟಿಫೈಯರ್ ಆಗಿದೆ ಮತ್ತು ಲಿಂಕ್ ಮಾಡಲಾಗುವುದಿಲ್ಲ. ಇವುಗಳನ್ನು ದೃಢೀಕರಣ ವಹಿವಾಟುಗಳಿಗಾಗಿ ಬಳಸಲಾಗುವುದರಿಂದ, ಅಂತಹ ಗುರುತಿಸುವಿಕೆಗಳು ಬಳಕೆದಾರರಿಗೆ ಮಾತ್ರ ತಿಳಿದಿರಬೇಕು ಅಥವಾ ಅವರ ಭಾಗವಹಿಸುವಿಕೆಯೊಂದಿಗೆ ರಚಿಸಲ್ಪಡುತ್ತವೆ.",
"whyDoesMyVcSayActivationIsPending?":"ಸಕ್ರಿಯಗೊಳಿಸುವಿಕೆ ಬಾಕಿಯಿದೆ ಎಂದು ನನ್ನ VC ಏಕೆ ಹೇಳುತ್ತಾರೆ?",
"detail-13": "ಒಮ್ಮೆ VC ಅನ್ನು ನಿಮ್ಮ ವ್ಯಾಲೆಟ್‌ಗೆ ಡೌನ್‌ಲೋಡ್ ಮಾಡಿದರೆ, ಅದು ಇನ್ನೂ ಬಳಕೆದಾರರ ಗುರುತಿನೊಂದಿಗೆ ಬದ್ಧವಾಗಿಲ್ಲ, ಅದಕ್ಕಾಗಿಯೇ ನಿಮ್ಮ VC ಸಕ್ರಿಯಗೊಳಿಸುವಿಕೆ ಬಾಕಿಯಿದೆ ಎಂದು ಹೇಳುತ್ತದೆ. ನಿಮ್ಮ ವ್ಯಾಲೆಟ್‌ಗೆ (ನಿಮ್ಮ ಪಾಸ್ಕೋಡ್ ಅಥವಾ ಬಯೋಮೆಟ್ರಿಕ್ಸ್‌ನೊಂದಿಗೆ) ನಿಮ್ಮ VC ಅನ್ನು ಬಂಧಿಸುವುದು ಅತ್ಯುನ್ನತ ಮಟ್ಟದ ಭದ್ರತೆಯನ್ನು ಖಚಿತಪಡಿಸಿಕೊಳ್ಳಲು ನಿರ್ಣಾಯಕವಾಗಿದೆ. ನಿಮ್ಮ VC ಅನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಲು, ದಯವಿಟ್ಟು ಹಂತಗಳನ್ನು ಅನುಸರಿಸಿ",
"whatDoYouMeanByActivatedForOnlineLogin?": "ಆನ್‌ಲೈನ್ ಲಾಗಿನ್‌ಗಾಗಿ ಸಕ್ರಿಯಗೊಳಿಸಲಾಗಿದೆ ಎಂಬುದರ ಅರ್ಥವೇನು?",
"detail-14a": "1. VC ಅನ್ನು ವ್ಯಾಲೆಟ್‌ನೊಂದಿಗೆ ಯಶಸ್ವಿಯಾಗಿ ಬಂಧಿಸಿದ ನಂತರ, ಅದನ್ನು ಆನ್‌ಲೈನ್ ಲಾಗಿನ್‌ಗಾಗಿ ಸಕ್ರಿಯಗೊಳಿಸಲಾಗಿದೆ ಎಂದು ನೀವು ನೋಡಬಹುದು ಅಂದರೆ ಈ VC ಅನ್ನು ಈಗ QR ಲಾಗಿನ್ ಪ್ರಕ್ರಿಯೆಗೆ ಬಳಸಬಹುದು. QR ಕೋಡ್ ಲಾಗಿನ್ ಬಗ್ಗೆ ಇನ್ನಷ್ಟು ತಿಳಿದುಕೊಳ್ಳಲು, ದಯವಿಟ್ಟು ಓದಿ",
"detail-14b": "2. ಇಂಜಿ ಅಪ್ಲಿಕೇಶನ್‌ನಲ್ಲಿ ಬಳಕೆದಾರರು ಭಾಷೆಯನ್ನು ಬದಲಾಯಿಸಿದಾಗಲೂ ಪ್ರಶ್ನೋತ್ತರವು ಓದಬಲ್ಲ ಮತ್ತು ಅರ್ಥವಾಗುವಂತಿರಬೇಕು.",
"whatIsAVerifiableCredential?": "ಪರಿಶೀಲಿಸಬಹುದಾದ ರುಜುವಾತು ಎಂದರೇನು?",
"detail-15": "ಪರಿಶೀಲಿಸಬಹುದಾದ ರುಜುವಾತು ಎನ್ನುವುದು ಡಿಜಿಟಲ್ ಸಹಿ ಮಾಡಿದ ಮಾಹಿತಿಯಾಗಿದ್ದು ಅದು ವಿಷಯದ ಬಗ್ಗೆ ನೀಡುವವರು ಮಾಡಿದ ಹೇಳಿಕೆಯನ್ನು ಪ್ರತಿನಿಧಿಸುತ್ತದೆ ಮತ್ತು ಸಾಮಾನ್ಯವಾಗಿ ಜನಸಂಖ್ಯಾ ವಿವರಗಳನ್ನು ಒಳಗೊಂಡಿರುತ್ತದೆ. ವಿವಿಧ ಆನ್‌ಲೈನ್ ಸಂವಹನಗಳಲ್ಲಿ VC ಗಳು ಸುರಕ್ಷಿತ ಮತ್ತು ವಿಶ್ವಾಸಾರ್ಹವಾಗಿವೆ."
}, },
"AddVcModal": { "AddVcModal": {
"requestingCredential": "ರುಜುವಾತುಗಳನ್ನು ವಿನಂತಿಸಲಾಗುತ್ತಿದೆ...", "requestingCredential": "ರುಜುವಾತುಗಳನ್ನು ವಿನಂತಿಸಲಾಗುತ್ತಿದೆ...",
@@ -215,18 +232,18 @@
"invalidOtp": "OTP ಅಮಾನ್ಯವಾಗಿದೆ", "invalidOtp": "OTP ಅಮಾನ್ಯವಾಗಿದೆ",
"expiredOtp": "OTP ಅವಧಿ ಮುಗಿದಿದೆ", "expiredOtp": "OTP ಅವಧಿ ಮುಗಿದಿದೆ",
"invalidUin": "UIN ಅಮಾನ್ಯವಾಗಿದೆ", "invalidUin": "UIN ಅಮಾನ್ಯವಾಗಿದೆ",
"invalidVid": "VID ಅಮಾನ್ಯವಾಗಿದೆ", "invalidVid": "VIDಅಮಾನ್ಯವಾಗಿದೆ",
"missingUin": "ನಮೂದಿಸಿದ UIN ಅನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಲಾಗಿದೆ/ನಿರ್ಬಂಧಿಸಲಾಗಿದೆ. ಮುಂದುವರಿಯಲು ದಯವಿಟ್ಟು ಮಾನ್ಯವಾದ UIN ಅನ್ನು ನಮೂದಿಸಿ", "missingUin": "ನಮೂದಿಸಿದ UIN ಅನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಲಾಗಿದೆ/ನಿರ್ಬಂಧಿಸಲಾಗಿದೆ. ಮುಂದುವರಿಯಲು ದಯವಿಟ್ಟು ಮಾನ್ಯವಾದ UIN ಅನ್ನು ನಮೂದಿಸಿ",
"missingVid": "VID ಡೇಟಾಬೇಸ್‌ನಲ್ಲಿ ಲಭ್ಯವಿಲ್ಲ", "missingVid": "VIDಡೇಟಾಬೇಸ್ನಲ್ಲಿ ಲಭ್ಯವಿಲ್ಲ",
"noMessageAvailable": "ಸ್ವಲ್ಪ ಸಮಯದ ನಂತರ ಪ್ರಯತ್ನಿಸಿ", "noMessageAvailable": "ಸ್ವಲ್ಪ ಸಮಯದ ನಂತರ ಪ್ರಯತ್ನಿಸಿ",
"whileGeneratingOtpErrorIsOccured": "OTP ರಚಿಸುವಾಗ ದೋಷ ಸಂಭವಿಸಿದೆ", "whileGeneratingOtpErrorIsOccured": "OTP ರಚಿಸುವಾಗ ದೋಷ ಸಂಭವಿಸಿದೆ",
"networkRequestFailed": "ನೆಟ್‌ವರ್ಕ್ ವಿನಂತಿ ವಿಫಲವಾಗಿದೆ", "networkRequestFailed": "ನೆಟ್‌ವರ್ಕ್ ವಿನಂತಿ ವಿಫಲವಾಗಿದೆ",
"deactivatedVid": "ನಮೂದಿಸಿದ VID ನಿಷ್ಕ್ರಿಯಗೊಂಡಿದೆ/ಅವಧಿ ಮೀರಿದೆ. ಮುಂದುವರೆಯಲು ದಯವಿಟ್ಟು ಮಾನ್ಯವಾದ VID ಅನ್ನು ನಮೂದಿಸಿ" "deactivatedVid": "ನಮೂದಿಸಿದ VIDನಿಷ್ಕ್ರಿಯಗೊಡಿದೆ/ಅವಧಿ ಮೀರಿದೆ. ಮುಂದುವರೆಯಲು ದಯವಿಟ್ಟು ಮಾನ್ಯವಾದ VIDಅನ್ನು ನಮೂದಿಸಿ"
} }
} }
}, },
"GetVcModal": { "GetVcModal": {
"retrievingId": "ID ಮರುಪಡೆಯಲಾಗುತ್ತಿದೆ", "retrievingId": "ಐಡಿ ಮರುಪಡೆಯಲಾಗುತ್ತಿದೆ",
"errors": { "errors": {
"input": { "input": {
"empty": "ಇನ್ಪುಟ್ ಖಾಲಿ ಇರುವಂತಿಲ್ಲ", "empty": "ಇನ್ಪುಟ್ ಖಾಲಿ ಇರುವಂತಿಲ್ಲ",
@@ -254,12 +271,12 @@
"enterApplicationId": "შეიყვანეთ განაცხადის ID", "enterApplicationId": "შეიყვანეთ განაცხადის ID",
"requestingOTP": "OTP-ის მოთხოვნა...", "requestingOTP": "OTP-ის მოთხოვნა...",
"toolTipTitle": "Რა ვთქვი?", "toolTipTitle": "Რა ვთქვი?",
"toolTipDescription": "განაცხადის ID (AID) ეხება უნიკალურ იდენტიფიკატორს, რომელიც მიცემულია რეზიდენტს პირადობის მოწმობის სასიცოცხლო ციკლის ნებისმიერი მოვლენის დროს, როგორიცაა პირადობის მოწმობის გაცემა, ID განახლება ან დაკარგული პირადობის მოძიება, რეგისტრაციის ცენტრში. ", "toolTipDescription": "განაცხადის ಐಡಿ (AID) ეხება უნიკალურ იდენტიფიკატორს, რომელიც მიცემულია რეზიდენტს პირადობის მოწმობის სასიცოცხლო ციკლის ნებისმიერი მოვლენის დროს, როგორიცაა პირადობის მოწმობის გაცემა, ಐಡಿ განახლება ან დაკარგული პირადობის მოძიება, რეგისტრაციის ცენტრში. ",
"getUIN": "მიიღეთ UIN/VID" "getUIN": "მიიღეთ UIN/VID"
}, },
"IdInputModal": { "IdInputModal": {
"header": "ჩამოტვირთეთ თქვენი ID", "header": "ჩამოტვირთეთ თქვენი ID",
"guideLabel": "აირჩიეთ ID ტიპი და შეიყვანეთ MOSIP მოწოდებული UIN ან VID, რომლის ჩამოტვირთვაც გსურთ. ", "guideLabel": "აირჩიეთ ಐಡಿ ტიპი და შეიყვანეთ MOSIP მოწოდებული UIN ან VID, რომლის ჩამოტვირთვაც გსურთ. ",
"generateVc": "ბარათის გენერირება", "generateVc": "ბარათის გენერირება",
"downloadID": "ჩამოტვირთვის ID", "downloadID": "ჩამოტვირთვის ID",
"enterId": "შედი {{idType}}", "enterId": "შედი {{idType}}",
@@ -268,7 +285,7 @@
"requestingOTP": "OTP-ის მოთხოვნა...", "requestingOTP": "OTP-ის მოთხოვნა...",
"toolTipTitle": "Რა არის {{idType}}?", "toolTipTitle": "Რა არის {{idType}}?",
"toolTipUINDescription": "უნიკალური საიდენტიფიკაციო ნომერი (UIN), როგორც სახელიდან ჩანს, არის უნიკალური ნომერი, რომელიც ენიჭება რეზიდენტს. ", "toolTipUINDescription": "უნიკალური საიდენტიფიკაციო ნომერი (UIN), როგორც სახელიდან ჩანს, არის უნიკალური ნომერი, რომელიც ენიჭება რეზიდენტს. ",
"toolTipVIDDescription": "VID / ვირტუალური ID არის ალიას იდენტიფიკატორი, რომელიც შეიძლება გამოყენებულ იქნას ავთენტიფიკაციის ტრანზაქციებისთვის. " "toolTipVIDDescription": "VID/ ვირტუალური ಐಡಿ არის ალიას იდენტიფიკატორი, რომელიც შეიძლება გამოყენებულ იქნას ავთენტიფიკაციის ტრანზაქციებისთვის. "
}, },
"OtpVerificationModal": { "OtpVerificationModal": {
"title": "OTP ಪರಿಶೀಲನೆ", "title": "OTP ಪರಿಶೀಲನೆ",
@@ -312,14 +329,16 @@
} }
}, },
"OnboardingOverlay": { "OnboardingOverlay": {
"stepOneTitle": "ಸುರಕ್ಷಿತ ಹಂಚಿಕೆ!", "stepOneTitle": "ಸ್ವಾಗತ!",
"stepOneText": "ನಿಮ್ಮ ಡಿಜಿಟಲ್ ರುಜುವಾತುಗಳನ್ನು ಯಾವಾಗಲೂ ನಿಮ್ಮೊಂದಿಗೆ ಇರಿಸಿಕೊಳ್ಳಿ. ಅವುಗಳನ್ನು ಪರಿಣಾಮಕಾರಿಯಾಗಿ ನಿರ್ವಹಿಸಲು ಮತ್ತು ಬಳಸಲು ಇಂಜಿ ನಿಮಗೆ ಸಹಾಯ ಮಾಡುತ್ತದೆ. ಪ್ರಾರಂಭಿಸಲು, ನಿಮ್ಮ ಪ್ರೊಫೈಲ್‌ಗೆ ಕಾರ್ಡ್‌ಗಳನ್ನು ಸೇರಿಸಿ.", "stepOneText": "ನಿಮ್ಮ ಡಿಜಿಟಲ್ ರುಜುವಾತುಗಳನ್ನು ಯಾವಾಗಲೂ ನಿಮ್ಮೊಂದಿಗೆ ಇರಿಸಿಕೊಳ್ಳಿ. ",
"stepTwoTitle": "ವಿಶ್ವಾಸಾರ್ಹ ಡಿಜಿಟಲ್ ವಾಲೆಟ್", "stepTwoTitle": "ಸುರಕ್ಷಿತ ಹಂಚಿಕೆ",
"stepTwoText": "ನಿಮ್ಮ ಎಲ್ಲಾ ಪ್ರಮುಖ ಕಾರ್ಡ್‌ಗಳನ್ನು ಒಂದೇ ವಿಶ್ವಾಸಾರ್ಹ ವ್ಯಾಲೆಟ್‌ನಲ್ಲಿ ಸಂಗ್ರಹಿಸಿ ಮತ್ತು ಒಯ್ಯಿರಿ.", "stepTwoText": "ನಿಮ್ಮ ಕಾರ್ಡ್‌ಗಳನ್ನು ಜಗಳ ಮುಕ್ತ ರೀತಿಯಲ್ಲಿ ಸುರಕ್ಷಿತವಾಗಿ ಹಂಚಿಕೊಳ್ಳಿ ಮತ್ತು ವಿವಿಧ ಸೇವೆಗಳನ್ನು ಪಡೆದುಕೊಳ್ಳಿ.",
"stepThreeTitle": "ಸುರಕ್ಷಿತ ಹಂಚಿಕೆ", "stepThreeTitle": "ವಿಶ್ವಾಸಾರ್ಹ ಡಿಜಿಟಲ್ ವಾಲೆಟ್",
"stepThreeText": "ನಿಮ್ಮ ಕಾರ್ಡ್‌ಗಳನ್ನು ಜಗಳ ಮುಕ್ತ ರೀತಿಯಲ್ಲಿ ಸುರಕ್ಷಿತವಾಗಿ ಹಂಚಿಕೊಳ್ಳಿ ಮತ್ತು ವಿವಿಧ ಸೇವೆಗಳನ್ನು ಪಡೆದುಕೊಳ್ಳಿ.", "stepThreeText": "ನಿಮ್ಮ ಎಲ್ಲಾ ಪ್ರಮುಖ ಕಾರ್ಡ್‌ಗಳನ್ನು ಒಂದೇ ವಿಶ್ವಾಸಾರ್ಹ ವ್ಯಾಲೆಟ್‌ನಲ್ಲಿ ಸಂಗ್ರಹಿಸಿ ಮತ್ತು ಒಯ್ಯಿರಿ.",
"stepFourTitle": "ಜಗಳ ಮುಕ್ತ ದೃಢೀಕರಣ", "stepFourTitle": "ತ್ವರಿತ ಪ್ರವೇಶ",
"stepFourText": "ಸಂಗ್ರಹಿಸಿದ ಡಿಜಿಟಲ್ ರುಜುವಾತುಗಳನ್ನು ಬಳಸಿಕೊಂಡು ಸುಲಭವಾಗಿ ನಿಮ್ಮನ್ನು ದೃಢೀಕರಿಸಿ.", "stepFourText": "ಸಂಗ್ರಹಿಸಿದ ಡಿಜಿಟಲ್ ರುಜುವಾತುಗಳನ್ನು ಬಳಸಿಕೊಂಡು ಸುಲಭವಾಗಿ ನಿಮ್ಮನ್ನು ದೃಢೀಕರಿಸಿ.",
"stepFiveTitle": "ಬ್ಯಾಕಪ್ ಡೇಟಾ",
"stepFiveText": "ನಮ್ಮ ಬ್ಯಾಕಪ್ ಅನ್ನು ಬಳಸಿಕೊಂಡು ನಿಮ್ಮ ಡೇಟಾವನ್ನು ಸುಲಭವಾಗಿ ರಕ್ಷಿಸಿ",
"getStarted": "ಪ್ರಾರಂಭಿಸಿ", "getStarted": "ಪ್ರಾರಂಭಿಸಿ",
"goBack": "ಹಿಂದೆ ಹೋಗು", "goBack": "ಹಿಂದೆ ಹೋಗು",
"back": "ಹಿಂದೆ", "back": "ಹಿಂದೆ",
@@ -333,7 +352,7 @@
"noReceivedVcsText": "ಕಾರ್ಡ್ ಸ್ವೀಕರಿಸಲು ಕೆಳಗಿನ ವಿನಂತಿಯ ಮೇಲೆ ಟ್ಯಾಪ್ ಮಾಡಿ" "noReceivedVcsText": "ಕಾರ್ಡ್ ಸ್ವೀಕರಿಸಲು ಕೆಳಗಿನ ವಿನಂತಿಯ ಮೇಲೆ ಟ್ಯಾಪ್ ಮಾಡಿ"
}, },
"ViewVcModal": { "ViewVcModal": {
"title": "ID ವಿವರಗಳು", "title": "ಐಡಿ ವಿವರಗಳು",
"inProgress": "ಪ್ರಗತಿಯಲ್ಲಿದೆ", "inProgress": "ಪ್ರಗತಿಯಲ್ಲಿದೆ",
"cancel": "ರದ್ದುಮಾಡು", "cancel": "ರದ್ದುಮಾಡು",
"lock": "ಲಾಕ್", "lock": "ಲಾಕ್",
@@ -341,14 +360,14 @@
"rename": "ಮರುಹೆಸರಿಸು", "rename": "ಮರುಹೆಸರಿಸು",
"delete": "ಅಳಿಸು", "delete": "ಅಳಿಸು",
"revoke": "ಹಿಂತೆಗೆದುಕೊಳ್ಳಿ", "revoke": "ಹಿಂತೆಗೆದುಕೊಳ್ಳಿ",
"revoking": "ನಿಮ್ಮ ವ್ಯಾಲೆಟ್ VID {{vid}} ಜೊತೆಗೆ ರುಜುವಾತುಗಳನ್ನು ಒಳಗೊಂಡಿದೆ. ಇದನ್ನು ಹಿಂತೆಗೆದುಕೊಳ್ಳುವುದರಿಂದ ಅದನ್ನು ಸ್ವಯಂಚಾಲಿತವಾಗಿ ವ್ಯಾಲೆಟ್‌ನಿಂದ ತೆಗೆದುಹಾಕಲಾಗುತ್ತದೆ. ನೀವು ಮುಂದುವರೆಯಲು ಖಚಿತವಾಗಿ ಬಯಸುವಿರಾ?", "revoking": "ನಿಮ್ಮ ವ್ಯಾಲೆಟ್ VID{{vid}} ಜೊತೆಗೆ ರುಜುವಾತುಗಳನ್ನು ಒಳಗೊಂಡಿದೆ. ಇದನ್ನು ಹಿಂತೆಗೆದುಕೊಳ್ಳುವುದರಿಂದ ಅದನ್ನು ಸ್ವಯಂಚಾಲಿತವಾಗಿ ವ್ಯಾಲೆಟ್‌ನಿಂದ ತೆಗೆದುಹಾಕಲಾಗುತ್ತದೆ. ನೀವು ಮುಂದುವರೆಯಲು ಖಚಿತವಾಗಿ ಬಯಸುವಿರಾ?",
"requestingOtp": "ಒಟಿಪಿಯನ್ನು ವಿನಂತಿಸಲಾಗುತ್ತಿದೆ...", "requestingOtp": "ಒಟಿಪಿಯನ್ನು ವಿನಂತಿಸಲಾಗುತ್ತಿದೆ...",
"activated": "ಆನ್‌ಲೈನ್ ದೃಢೀಕರಣಕ್ಕಾಗಿ ರುಜುವಾತುಗಳನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಲಾಗಿದೆ.", "activated": "ಆನ್‌ಲೈನ್ ದೃಢೀಕರಣಕ್ಕಾಗಿ ರುಜುವಾತುಗಳನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಲಾಗಿದೆ.",
"redirecting": "ಮರುನಿರ್ದೇಶಿಸಲಾಗುತ್ತಿದೆ...", "redirecting": "ಮರುನಿರ್ದೇಶಿಸಲಾಗುತ್ತಿದೆ...",
"success": { "success": {
"unlocked": "ಕಾರ್ಡ್ ಅನ್ನು ಯಶಸ್ವಿಯಾಗಿ ಅನ್‌ಲಾಕ್ ಮಾಡಲಾಗಿದೆ", "unlocked": "ಕಾರ್ಡ್ ಅನ್ನು ಯಶಸ್ವಿಯಾಗಿ ಅನ್‌ಲಾಕ್ ಮಾಡಲಾಗಿದೆ",
"locked": "ಕಾರ್ಡ್ ಯಶಸ್ವಿಯಾಗಿ ಲಾಕ್ ಆಗಿದೆ", "locked": "ಕಾರ್ಡ್ ಯಶಸ್ವಿಯಾಗಿ ಲಾಕ್ ಆಗಿದೆ",
"revoked": "VID {{vid}} ಅನ್ನು ಹಿಂಪಡೆಯಲಾಗಿದೆ. ಅದೇ ಒಳಗೊಂಡಿರುವ ಯಾವುದೇ ರುಜುವಾತುಗಳನ್ನು ವ್ಯಾಲೆಟ್‌ನಿಂದ ಸ್ವಯಂಚಾಲಿತವಾಗಿ ತೆಗೆದುಹಾಕಲಾಗುತ್ತದೆ" "revoked": "VID{{vid}} ಅನ್ನು ಹಿಂಪಡೆಯಲಾಗಿದೆ. ಅದೇ ಒಳಗೊಂಡಿರುವ ಯಾವುದೇ ರುಜುವಾತುಗಳನ್ನು ವ್ಯಾಲೆಟ್‌ನಿಂದ ಸ್ವಯಂಚಾಲಿತವಾಗಿ ತೆಗೆದುಹಾಕಲಾಗುತ್ತದೆ"
} }
}, },
"MainLayout": { "MainLayout": {
@@ -371,7 +390,7 @@
"confirmation": "ದೃಢೀಕರಣ", "confirmation": "ದೃಢೀಕರಣ",
"checkDomain": "ಅಲ್ಲದೆ, ವಿಳಾಸ ಪಟ್ಟಿಯಲ್ಲಿ ಲಾಕ್ ಐಕಾನ್ ಇದೆಯೇ ಎಂದು ಪರಿಶೀಲಿಸಿ.", "checkDomain": "ಅಲ್ಲದೆ, ವಿಳಾಸ ಪಟ್ಟಿಯಲ್ಲಿ ಲಾಕ್ ಐಕಾನ್ ಇದೆಯೇ ಎಂದು ಪರಿಶೀಲಿಸಿ.",
"domainHead": "https://", "domainHead": "https://",
"selectId": "ID ಆಯ್ಕೆಮಾಡಿ", "selectId": "ಐಡಿ ಆಯ್ಕೆಮಾಡಿ",
"noBindedVc": "ಪರಿಶೀಲಿಸಲು ಯಾವುದೇ ಬೈಂಡೆಡ್ ಕಾರ್ಡ್ ಲಭ್ಯವಿಲ್ಲ", "noBindedVc": "ಪರಿಶೀಲಿಸಲು ಯಾವುದೇ ಬೈಂಡೆಡ್ ಕಾರ್ಡ್ ಲಭ್ಯವಿಲ್ಲ",
"back": "ಹಿಂದೆ ಹೋಗು", "back": "ಹಿಂದೆ ಹೋಗು",
"confirm": "ದೃಢೀಕರಿಸಿ", "confirm": "ದೃಢೀಕರಿಸಿ",
@@ -571,6 +590,63 @@
} }
} }
}, },
"DataBackupScreen": {
"dataBackupAndRestore": "ಬ್ಯಾಕಪ್ ಮತ್ತು ಮರುಸ್ಥಾಪಿಸಿ",
"new": "ಹೊಸದು",
"loadingTitle": "ಸ್ಥಾಪನೆಯನ್ನು ಲೋಡ್ ಮಾಡಲಾಗುತ್ತಿದೆ",
"loadingSubtitle": "ಲೋಡ್ ಆಗುತ್ತಿದೆ...",
"errors": {
"permissionDenied": {
"title": "ಅವಕಾಶ ನೀಡಲಾಗಿಲ್ಲ!",
"message": "ಡೇಟಾ ಬ್ಯಾಕಪ್ ಸೆಟ್ಟಿಂಗ್‌ಗಳ ರಚನೆಯನ್ನು ನೀವು ರದ್ದುಗೊಳಿಸಿರುವುದನ್ನು ನಾವು ಗಮನಿಸಿದ್ದೇವೆ. ನಿಮ್ಮ ಡೇಟಾ ಲಭ್ಯತೆಯನ್ನು ಖಚಿತಪಡಿಸಿಕೊಳ್ಳಲು ಡೇಟಾ ಬ್ಯಾಕಪ್ ಸೆಟ್ಟಿಂಗ್‌ಗಳನ್ನು ಮರುಪರಿಶೀಲಿಸುವಂತೆ ನಾವು ಬಲವಾಗಿ ಶಿಫಾರಸು ಮಾಡುತ್ತೇವೆ.",
"helpText": "ಇದೀಗ ಡೇಟಾ ಬ್ಯಾಕಪ್ ಅನ್ನು ಹೊಂದಿಸಲು \"ಸೆಟ್ಟಿಂಗ್‌ಗಳನ್ನು ಕಾನ್ಫಿಗರ್ ಮಾಡಿ\" ಅಥವಾ ಸೆಟ್ಟಿಂಗ್‌ಗಳ ಪರದೆಗೆ ಹಿಂತಿರುಗಲು \"ರದ್ದುಮಾಡು\" ಕ್ಲಿಕ್ ಮಾಡಿ."
},
"noInternetConnection": {
"title": "ಇಂಟರ್ನೆಟ್ ಸಂಪರ್ಕವಿಲ್ಲ",
"message": "ದಯವಿಟ್ಟು ನಿಮ್ಮ ಸಂಪರ್ಕವನ್ನು ಪರಿಶೀಲಿಸಿ ಮತ್ತು ಮರುಪ್ರಯತ್ನಿಸಿ"
}
}
},
"BackupAndRestoreBanner": {
"backupSuccessful": "ನಿಮ್ಮ ಬ್ಯಾಕಪ್ ಯಶಸ್ವಿಯಾಗಿದೆ!",
"backupFailure": {
"networkError": "ಅಸ್ಥಿರ ಸಂಪರ್ಕ ಕಾರಣ, ನಮಗೆ ಡೇಟಾ ಬ್ಯಾಕಪ್ ಮಾಡಲು ಸಾಧ್ಯವಾಗಲಿಲ್ಲ. ದಯವಿಟ್ಟು ನಂತರ ಮತ್ತೆ ಪ್ರಯತ್ನಿಸಿ.",
"technicalError": "ತಾಂತ್ರಿಕ ದೋಷದಿಂದಾಗಿ, ಡೇಟಾ ಬ್ಯಾಕಪ್ ಮಾಡಲು ನಮಗೆ ಸಾಧ್ಯವಾಗಲಿಲ್ಲ. ದಯವಿಟ್ಟು ನಂತರ ಮತ್ತೆ ಪ್ರಯತ್ನಿಸಿ.",
"noDataForBackup": "ನಮ್ಮನ್ನು ಕ್ಷಮಿಸಿ, ಆದರೆ ಸದ್ಯಕ್ಕೆ ಬ್ಯಾಕಪ್ ಮಾಡಲು ಯಾವುದೇ ಡೇಟಾ ಲಭ್ಯವಿಲ್ಲ.",
"storageLimitReached": "ನಿಮ್ಮ ಸಾಧನದಲ್ಲಿ ಸಾಕಷ್ಟು ಸಂಗ್ರಹಣೆ ಸ್ಥಳಾವಕಾಶವಿಲ್ಲದ ಕಾರಣ ಬ್ಯಾಕಪ್ ಪ್ರಕ್ರಿಯೆಯನ್ನು ಪೂರ್ಣಗೊಳಿಸಲು ನಮಗೆ ಸಾಧ್ಯವಾಗುತ್ತಿಲ್ಲ. ದಯವಿಟ್ಟು ಅನಗತ್ಯ ಫೈಲ್‌ಗಳು ಅಥವಾ ಅಪ್ಲಿಕೇಶನ್‌ಗಳನ್ನು ಅಳಿಸುವ ಮೂಲಕ ಜಾಗವನ್ನು ಮುಕ್ತಗೊಳಿಸಿ ಮತ್ತು ಮತ್ತೆ ಪ್ರಯತ್ನಿಸಿ."
},
"restoreSuccessful": "ನಿಮ್ಮ ಮರುಸ್ಥಾಪನೆ ಯಶಸ್ವಿಯಾಗಿದೆ!",
"restoreFailure": {
"networkError": "ಅಸ್ಥಿರ ಸಂಪರ್ಕದ ಕಾರಣ, ನಮಗೆ ಡೇಟಾವನ್ನು ಮರುಸ್ಥಾಪಿಸಲು ಸಾಧ್ಯವಾಗಲಿಲ್ಲ. ದಯವಿಟ್ಟು ನಂತರ ಮತ್ತೆ ಪ್ರಯತ್ನಿಸಿ.",
"technicalError": "ತಾಂತ್ರಿಕ ದೋಷದಿಂದಾಗಿ, ಡೇಟಾವನ್ನು ಮರುಸ್ಥಾಪಿಸಲು ನಮಗೆ ಸಾಧ್ಯವಾಗಲಿಲ್ಲ. ದಯವಿಟ್ಟು ನಂತರ ಮತ್ತೆ ಪ್ರಯತ್ನಿಸಿ."
}
},
"AccountSelection": {
"backupProcessInfo": "ನಿಮ್ಮ ಡೇಟಾವನ್ನು ಬ್ಯಾಕಪ್ ಮಾಡಲು ನೀವು ಕೆಲವೇ ಹಂತಗಳ ದೂರದಲ್ಲಿರುವಿರಿ",
"cloudInfo": "ಡೇಟಾ ಬ್ಯಾಕಪ್ ಅನ್ನು ಪ್ರಾರಂಭಿಸಲು, Inji ಜೊತೆಗೆ ನಿಮ್ಮ Google ಡ್ರೈವ್ ಅನ್ನು ಲಿಂಕ್ ಮಾಡಲು `ಮುಂದುವರಿಯಿರಿ` ಬಟನ್ ಅನ್ನು ಟ್ಯಾಪ್ ಮಾಡಿ.",
"googleDriveTitle": "ಗೂಗಲ್ ಡ್ರೈವ್",
"loadingSubtitle": "ಲೋಡ್ ಆಗುತ್ತಿದೆ...",
"proceed": "ಮುಂದುವರೆಯಲು",
"goBack": "ಹಿಂದೆ ಹೋಗು",
"associatedAccount": "ಸಂಬಂಧಿತ ಖಾತೆ"
},
"BackupAndRestore": {
"title": "ಬ್ಯಾಕಪ್ ಮತ್ತು ಮರುಸ್ಥಾಪನೆ",
"backupProgressState": "ಬ್ಯಾಕಪ್ ಪ್ರಗತಿಯಲ್ಲಿದೆ...",
"lastBackupDetails": "ಕೊನೆಯ ಬ್ಯಾಕಪ್ ವಿವರಗಳು",
"backupInProgress": "ಡೇಟಾ ಬ್ಯಾಕಪ್ ಪ್ರಗತಿಯಲ್ಲಿರುವಾಗಲೂ ನೀವು ಅಪ್ಲಿಕೇಶನ್ ಅನ್ನು ಬಳಸಬಹುದು. ಅಪ್ಲಿಕೇಶನ್ ಅನ್ನು ಮುಚ್ಚುವುದರಿಂದ ಡೇಟಾ ಬ್ಯಾಕಪ್ ಪ್ರಕ್ರಿಯೆಯನ್ನು ಕೊನೆಗೊಳಿಸುತ್ತದೆ.",
"noBackup": "Google ಡ್ರೈವ್‌ಗೆ ನಿಮ್ಮ ಡೇಟಾವನ್ನು ಬ್ಯಾಕಪ್ ಮಾಡಿ. ನೀವು INJI ಅನ್ನು ಮರುಸ್ಥಾಪಿಸಿದಾಗ ನೀವು ಅವುಗಳನ್ನು ಮರುಸ್ಥಾಪಿಸಬಹುದು.",
"storage": "ನಿಮ್ಮ ಆಯ್ಕೆಮಾಡಿದ gmail ಖಾತೆಗೆ ಸಂಯೋಜಿತವಾಗಿರುವ Google ಡ್ರೈವ್‌ನಲ್ಲಿ ಬ್ಯಾಕಪ್ ಅನ್ನು ಸಂಗ್ರಹಿಸಲಾಗುತ್ತದೆ.",
"backup": "ಬ್ಯಾಕಪ್",
"size": "ಗಾತ್ರ: ",
"restore": "ಮರುಸ್ಥಾಪಿಸು",
"restoreInProgress": "ನಾವು ನಿಮ್ಮ ಡೇಟಾವನ್ನು ಮರುಸ್ಥಾಪಿಸುತ್ತಿದ್ದೇವೆ, ದಯವಿಟ್ಟು ಅಪ್ಲಿಕೇಶನ್ ಅನ್ನು ಮುಚ್ಚಬೇಡಿ. ಇದು ನಿಮ್ಮ ಡೇಟಾವನ್ನು ಆಧರಿಸಿ <X> ನಿಮಿಷಗಳವರೆಗೆ ತೆಗೆದುಕೊಳ್ಳಬಹುದು.",
"restoreInfo": "Google ಡ್ರೈವ್‌ನಿಂದ ನಿಮ್ಮ ಡೇಟಾವನ್ನು ಮರುಸ್ಥಾಪಿಸಿ",
"driveSettings": "Google Drive Settings",
"successBanner": "ನಿಮ್ಮ ಬ್ಯಾಕಪ್ ಯಶಸ್ವಿಯಾಗಿದೆ!",
"backupFailed": "ಬ್ಯಾಕಪ್ ವಿಫಲವಾಗಿದೆ",
"ok": "ಸರಿ"
},
"WelcomeScreen": { "WelcomeScreen": {
"title": "ಓಪನ್ ಸೋರ್ಸ್ ಐಡೆಂಟಿಟಿ ಸೊಲ್ಯೂಷನ್", "title": "ಓಪನ್ ಸೋರ್ಸ್ ಐಡೆಂಟಿಟಿ ಸೊಲ್ಯೂಷನ್",
"unlockApplication": "ಅಪ್ಲಿಕೇಶನ್ ಅನ್ಲಾಕ್ ಮಾಡಿ", "unlockApplication": "ಅಪ್ಲಿಕೇಶನ್ ಅನ್ಲಾಕ್ ಮಾಡಿ",
@@ -617,4 +693,4 @@
"description": "ಅಪ್ಲಿಕೇಶನ್ ಅನ್‌ಲಾಕ್ ಮಾಡಲು ಫಿಂಗರ್‌ಪ್ರಿಂಟ್ ಬಳಸಿ" "description": "ಅಪ್ಲಿಕೇಶನ್ ಅನ್‌ಲಾಕ್ ಮಾಡಲು ಫಿಂಗರ್‌ಪ್ರಿಂಟ್ ಬಳಸಿ"
} }
} }
} }

View File

@@ -187,24 +187,41 @@
}, },
"HelpScreen": { "HelpScreen": {
"header": "Ayuda", "header": "Ayuda",
"whatIsDigitalCredential?": "¿Qué es una credencial digital?", "here": " aquí. ",
"whatIsaDigitalCredential?": "¿Qué es una credencial digital?",
"detail-1": "Una credencial digital es la versión digital de su cédula de identidad física.", "detail-1": "Una credencial digital es la versión digital de su cédula de identidad física.",
"whatCanDoWithDigitalCredential?": "¿Qué podemos hacer con las credenciales digitales?", "whatCanWeDoWithDigitalCredential?": "¿Qué podemos hacer con las credenciales digitales?",
"detail-2": "Puede aprovechar varios servicios gubernamentales y privados utilizando sus credenciales digitales.", "detail-2": "Puede aprovechar varios servicios gubernamentales y privados utilizando sus credenciales digitales.",
"howToAddCard?": "¿Cómo agregar una tarjeta?", "howToAddCard?": "¿Cómo agregar una tarjeta?",
"detail-3": "Para agregar una tarjeta, haga clic en el botón ' ' en la página de inicio y seleccione la opción adecuada.", "detail-3": "Las identificaciones se pueden descargar a INJI Mobile Wallet como credenciales verificables. Para saber cómo descargar VC con varios ID, lea ",
"howToRemoveCardFromWallet?": "¿Cómo compartir una tarjeta?", "howToRemoveACardFromTheWallet?": "¿Cómo sacar una tarjeta de la billetera?",
"detail-4": "Desliza la tarjeta hacia la izquierda > haz clic en Más > Eliminar de Wallet", "detail-4a": "Puede hacer clic en... (menú de albóndigas) en una tarjeta en la página de inicio y elegir la opción Eliminar de la billetera para eliminar una tarjeta de la billetera. Para saber más, por favor lea",
"canWeAddMultipleCards?": "¿Podemos agregar varias tarjetas?", "detail-4b": "Tenga en cuenta que la misma tarjeta se puede descargar nuevamente.",
"canIAddMultipleCards?": "¿Puedo agregar varias tarjetas?",
"detail-5": "Sí, puede agregar varias tarjetas a la billetera haciendo clic en el botón ' ' en la página de inicio.", "detail-5": "Sí, puede agregar varias tarjetas a la billetera haciendo clic en el botón ' ' en la página de inicio.",
"howToShareCard?": "¿Cómo compartir una tarjeta?", "howToShareACard?": "¿Cómo compartir una tarjeta?",
"detail-6": "Haga clic en el botón 'Compartir' y escanee el código QR del solicitante. ", "detail-6": "Haga clic en el botón 'Compartir' y escanee el código QR del solicitante. ",
"howToActivateCardForOnlineLogin?": "¿Cómo activar una tarjeta para iniciar sesión en línea?", "howToActivateACardForOnlineLogin?": "¿Cómo activar una tarjeta para iniciar sesión en línea?",
"detail-7": "Después de agregar exitosamente una tarjeta a la billetera, haga clic en 'Activación pendiente para inicio de sesión en línea' en la tarjeta. ", "detail-7": "Después de agregar exitosamente una tarjeta a la billetera, haga clic en 'Activación pendiente para inicio de sesión en línea' en la tarjeta. ",
"howToViewActivity?": "¿Cómo ver los registros de actividad?", "howToViewActivityLogs?": "¿Cómo ver los registros de actividad?",
"detail-8": "En la página de inicio, haga clic en 'Historial' para ver los detalles de la actividad del usuario.", "detail-8": "En la página de inicio, haga clic en 'Historial' para ver los detalles de la actividad del usuario.",
"whatCanDoBiometricsChanged?": "¿Qué sucede cuando se cambia la biometría del almacén de claves de Android?", "whatHappensWhenAndroidKeystoreBiometricIsChanged?": "¿Qué sucede cuando se cambia la biometría del almacén de claves de Android?",
"detail-9": "El almacén de claves de Android contiene información importante, como claves privadas para pruebas de identidad. " "detail-9": "El almacén de claves de Android contiene información importante, como claves privadas para pruebas de identidad.",
"whatIsAnId?":"¿Qué es una identificación?",
"detail-10":"Un documento de identidad es cualquier documento que pueda acreditar la identidad de una persona. En el contexto de MOSIP, los identificadores son identificadores digitales alfanuméricos para identidades en el sistema. Si bien la identidad de una persona se representa como una colección de atributos biográficos y biométricos que pueden identificar de forma única a la persona, se hace referencia a la identidad mediante identificadores.",
"whatAreTheDifferentTypesOfId?": "¿Cuáles son los diferentes tipos de identificación?",
"detail-11":"En el contexto de MOSIP, diferentes ID son UIN, VI y AID. Leer más sobre ellos",
"whereCanIFindTheseIds?":"¿Dónde puedo encontrar estas identificaciones?",
"detail-12a": "Como parte del proceso de inscripción (registro), al registrar exitosamente la información demográfica y biométrica del residente, se le asigna una identificación de registro (AID). También se emite (imprime) al residente un comprobante de acuse de recibo que contiene los detalles capturados y la AID como prueba de registro.",
"detail-12b": "Tras el procesamiento exitoso, se asigna un Número de identificación único (UIN) al residente y se le envía una notificación al número de teléfono y/o correo electrónico registrado.",
"detail-12c": "VID/ID virtual es un identificador de alias configurado para uso único y no se puede vincular. Dado que se utilizan para transacciones de autenticación, dichos identificadores deben ser conocidos únicamente por el usuario o generarse con su participación.",
"whyDoesMyVcSayActivationIsPending?":"¿Por qué mi VC dice que la activación está pendiente?",
"detail-13": "Una vez que se descarga el VC en su billetera, aún no está vinculado a la identidad del usuario, por lo que su VC dice Activación pendiente. Vincular su VC a su billetera (con su contraseña o datos biométricos) es crucial para garantizar el más alto nivel de seguridad. Para activar su VC, siga los pasos",
"whatDoYouMeanByActivatedForOnlineLogin?": "¿Qué quiere decir con Activado para iniciar sesión en línea?",
"detail-14a": "1. Una vez que el VC se vincule exitosamente con la billetera, podrá ver que está activado para iniciar sesión en línea, lo que significa que este VC ahora se puede usar para el proceso de inicio de sesión QR. Para saber más sobre el inicio de sesión con código QR, lea",
"detail-14b": "2. Las preguntas y respuestas deben ser legibles y comprensibles incluso cuando el usuario cambia el idioma en la aplicación INJI.",
"whatIsAVerifiableCredential?": "¿Qué es una credencial verificable?",
"detail-15": "Una credencial verificable es una pieza de información firmada digitalmente que representa una declaración hecha por el emisor sobre un tema y generalmente incluye detalles demográficos. Los capitalistas de riesgo son seguros y confiables en diversas interacciones en línea."
}, },
"AddVcModal": { "AddVcModal": {
"requestingCredential": "Solicitando credencial...", "requestingCredential": "Solicitando credencial...",
@@ -322,12 +339,14 @@
"OnboardingOverlay": { "OnboardingOverlay": {
"stepOneTitle": "¡Bienvenido!", "stepOneTitle": "¡Bienvenido!",
"stepOneText": "Lleva contigo tu credencial digital en todo momento. ", "stepOneText": "Lleva contigo tu credencial digital en todo momento. ",
"stepTwoTitle": "Monedero digital confiable", "stepTwoTitle": "Compartir de forma segura",
"stepTwoText": "Guarde y lleve todas sus tarjetas importantes en una única billetera de confianza.", "stepTwoText": "Comparta sus tarjetas de forma segura y sin complicaciones y aproveche varios servicios.",
"stepThreeTitle": "Compartir de forma segura", "stepThreeTitle": "Monedero digital confiable",
"stepThreeText": "Comparta sus tarjetas de forma segura y sin complicaciones y aproveche varios servicios.", "stepThreeText": "Almacene y lleve todas sus tarjetas importantes en una única billetera de confianza.",
"stepFourTitle": "Autenticación sin problemas", "stepFourTitle": "Acceso rapido",
"stepFourText": "Autentíquese fácilmente utilizando la credencial digital almacenada.", "stepFourText": "Autentíquese fácilmente utilizando la credencial digital almacenada.",
"stepFiveTitle": "Los datos de copia de seguridad",
"stepFiveText": "Proteja sus datos con facilidad utilizando nuestra copia de seguridad",
"getStarted": "Empezar", "getStarted": "Empezar",
"goBack": "Regresa", "goBack": "Regresa",
"back": "Atrás", "back": "Atrás",
@@ -577,6 +596,63 @@
}, },
"ignore": "Ignorar" "ignore": "Ignorar"
}, },
"DataBackupScreen": {
"dataBackupAndRestore": "Copia de seguridad de restauracion",
"new": "Nueva",
"loadingTitle": "Cargando configuración",
"loadingSubtitle": "Cargando...",
"errors": {
"permissionDenied": {
"title": "¡Permiso denegado!",
"message": "Notamos que canceló la creación de la configuración de copia de seguridad de datos. Recomendamos encarecidamente revisar la configuración de la copia de seguridad de datos para garantizar la disponibilidad de sus datos.",
"helpText": "Haga clic en \"Configurar ajustes\" para configurar la copia de seguridad de datos ahora, o \"Cancelar\" para volver a la pantalla de configuración."
},
"noInternetConnection": {
"title": "Sin conexión a Internet",
"message": "Por favor verifique su conexión y vuelva a intentarlo"
}
}
},
"BackupAndRestoreBanner": {
"backupSuccessful": "¡Su copia de seguridad fue exitosa!",
"backupFailure": {
"networkError": "Debido a Conexión inestable, no pudimos realizar la copia de seguridad de los datos. Vuelve a intentarlo más tarde.",
"technicalError": "Debido a un error técnico, no pudimos realizar una copia de seguridad de los datos. Por favor, inténtelo de nuevo más tarde.",
"noDataForBackup": "Lo sentimos, pero no hay datos disponibles para realizar una copia de seguridad en este momento.",
"storageLimitReached": "No podemos completar el proceso de copia de seguridad debido a que no hay suficiente espacio de almacenamiento en su dispositivo. Libere espacio eliminando archivos o aplicaciones innecesarios y vuelva a intentarlo."
},
"restoreSuccessful": "¡Tu restauración fue exitosa!",
"restoreFailure": {
"networkError": "Debido a una conexión inestable, no pudimos restaurar los datos. Por favor, inténtelo de nuevo más tarde.",
"technicalError": "Debido a un error técnico, no pudimos restaurar los datos. Por favor, inténtelo de nuevo más tarde."
}
},
"AccountSelection": {
"backupProcessInfo": "Estás a solo unos pasos de hacer una copia de seguridad de tus datos",
"cloudInfo": "Para iniciar la copia de seguridad de los datos, toque el botón `Continuar` para vincular su Google Drive con Inji.",
"googleDriveTitle": "Google Drive",
"loadingSubtitle": "Cargando...",
"proceed": "Proceder",
"goBack": "Regresa",
"associatedAccount": "Cuenta asociada"
},
"BackupAndRestore": {
"title": "Copia de seguridad y restauración",
"backupProgressState": "Copia de seguridad en progreso...",
"lastBackupDetails": "Detalles de la última copia de seguridad",
"backupInProgress": "Aún puedes usar la aplicación mientras se realiza la copia de seguridad de los datos. Cerrar la aplicación finalizará el proceso de copia de seguridad de los datos.",
"noBackup": "Haga una copia de seguridad de sus datos en Google Drive. Puede restaurarlos cuando reinstale INJI.",
"storage": "La copia de seguridad se almacenará en Google Drive asociado a su cuenta de Gmail elegida.",
"backup": "Copia de seguridad",
"size": "Tamaño: ",
"restore": "Restaurar",
"restoreInProgress": "Estamos restaurando tus datos, no cierres la aplicación. Esto puede tardar hasta <X> minutos según tus datos.",
"restoreInfo": "Restaura tus datos desde Google Drive",
"driveSettings": "Configuración de Google Drive",
"successBanner": "¡Su copia de seguridad fue exitosa!",
"backupFailed": "Copia de seguridad fallida",
"ok": "bien"
},
"SetupLanguage": { "SetupLanguage": {
"header": "Elige lengua", "header": "Elige lengua",
"description": "Selecciona tu idioma preferido", "description": "Selecciona tu idioma preferido",
@@ -609,4 +685,4 @@
"description": "Utilice la huella digital para desbloquear la aplicación." "description": "Utilice la huella digital para desbloquear la aplicación."
} }
} }
} }

View File

@@ -185,24 +185,41 @@
}, },
"HelpScreen": { "HelpScreen": {
"header": "உதவி", "header": "உதவி",
"whatIsDigitalCredential?": "டிஜிட்டல் நற்சான்றிதழ் என்றால் என்ன?", "here": " இங்கே. ",
"whatIsaDigitalCredential?": "டிஜிட்டல் நற்சான்றிதழ் என்றால் என்ன?",
"detail-1": "டிஜிட்டல் நற்சான்றிதழ் என்பது உங்கள் உடல் அடையாள அட்டையின் டிஜிட்டல் பதிப்பாகும்", "detail-1": "டிஜிட்டல் நற்சான்றிதழ் என்பது உங்கள் உடல் அடையாள அட்டையின் டிஜிட்டல் பதிப்பாகும்",
"whatCanDoWithDigitalCredential?": "டிஜிட்டல் சான்றுகளை வைத்து நாம் என்ன செய்ய முடியும்?", "whatCanWeDoWithDigitalCredential?": "டிஜிட்டல் சான்றுகளை வைத்து நாம் என்ன செய்ய முடியும்?",
"detail-2": "உங்கள் டிஜிட்டல் சான்றுகளைப் பயன்படுத்தி பல்வேறு அரசு மற்றும் தனியார் சேவைகளைப் பெறலாம்.", "detail-2": "உங்கள் டிஜிட்டல் சான்றுகளைப் பயன்படுத்தி பல்வேறு அரசு மற்றும் தனியார் சேவைகளைப் பெறலாம்.",
"howToAddCard?": "அட்டையை எவ்வாறு சேர்ப்பது?", "howToAddCard?": "அட்டையை எவ்வாறு சேர்ப்பது?",
"detail-3": "கார்டைச் சேர்க்க, முகப்புப் பக்கத்தில் உள்ள '+' பொத்தானைக் கிளிக் செய்து, பொருத்தமான விருப்பத்தைத் தேர்ந்தெடுக்கவும்.", "detail-3": "ஐடிகளை சரிபார்க்கக்கூடிய சான்றுகளாக INJI மொபைல் வாலட்டில் பதிவிறக்கம் செய்யலாம். பல்வேறு ஐடிகளைக் கொண்ட VCகளை எவ்வாறு பதிவிறக்குவது என்பதை அறிய, தயவுசெய்து படிக்கவும் ",
"howToRemoveCardFromWallet?": "ஒரு அட்டையை எவ்வாறு பகிர்வது?", "howToRemoveACardFromTheWallet?": "பணப்பையில் இருந்து அட்டையை எவ்வாறு அகற்றுவது?",
"detail-4": "கார்டில் இடதுபுறமாக ஸ்வைப் செய்யவும் > மேலும் என்பதைக் கிளிக் செய்யவும் > வாலட்டில் இருந்து அகற்று", "detail-4a": "முகப்புப் பக்கத்தில் உள்ள கார்டில் ...(மீட்பால்ஸ் மெனு) என்பதைக் கிளிக் செய்து, பணப்பையிலிருந்து அட்டையை அகற்ற, வாலட்டில் இருந்து அகற்று விருப்பத்தைத் தேர்வுசெய்யலாம். மேலும் அறிய, படிக்கவும்",
"canWeAddMultipleCards?": "பல அட்டைகளைச் சேர்க்கலாமா?", "detail-4b": "அதே அட்டையை மீண்டும் பதிவிறக்கம் செய்யலாம் என்பதை நினைவில் கொள்ளவும்.",
"canIAddMultipleCards?": "நான் பல அட்டைகளைச் சேர்க்கலாமா?",
"detail-5": "ஆம், முகப்புப் பக்கத்தில் உள்ள '+' பொத்தானைக் கிளிக் செய்வதன் மூலம் பல அட்டைகளை வாலட்டில் சேர்க்கலாம்.", "detail-5": "ஆம், முகப்புப் பக்கத்தில் உள்ள '+' பொத்தானைக் கிளிக் செய்வதன் மூலம் பல அட்டைகளை வாலட்டில் சேர்க்கலாம்.",
"howToShareCard?": "ஒரு அட்டையை எவ்வாறு பகிர்வது?", "howToShareACard?": "ஒரு அட்டையை எவ்வாறு பகிர்வது?",
"detail-6": "'பகிர்' பொத்தானைக் கிளிக் செய்து, கோரும் தரப்பினரிடமிருந்து QR குறியீட்டை ஸ்கேன் செய்யவும். இணைப்பு நிறுவப்பட்டதும், அட்டை பகிரப்படும்.", "detail-6": "'பகிர்' பொத்தானைக் கிளிக் செய்து, கோரும் தரப்பினரிடமிருந்து QR குறியீட்டை ஸ்கேன் செய்யவும். இணைப்பு நிறுவப்பட்டதும், அட்டை பகிரப்படும்.",
"howToActivateCardForOnlineLogin?": "ஆன்லைன் உள்நுழைவுக்கான அட்டையை எவ்வாறு செயல்படுத்துவது?", "howToActivateACardForOnlineLogin?": "ஆன்லைன் உள்நுழைவுக்கான அட்டையை எவ்வாறு செயல்படுத்துவது?",
"detail-7": "வாலட்டில் கார்டை வெற்றிகரமாகச் சேர்த்த பிறகு, கார்டில் உள்ள 'ஆன்லைன் உள்நுழைவுக்கான ஆக்டிவேஷன் பெண்டிங்' என்பதைக் கிளிக் செய்யவும். 'செயல்படுத்து' என்பதைக் கிளிக் செய்தால், ஆன்லைன் உள்நுழைவுக்கு கார்டு தயாராக இருக்கும்.", "detail-7": "வாலட்டில் கார்டை வெற்றிகரமாகச் சேர்த்த பிறகு, கார்டில் உள்ள 'ஆன்லைன் உள்நுழைவுக்கான ஆக்டிவேஷன் பெண்டிங்' என்பதைக் கிளிக் செய்யவும். 'செயல்படுத்து' என்பதைக் கிளிக் செய்தால், ஆன்லைன் உள்நுழைவுக்கு கார்டு தயாராக இருக்கும்.",
"howToViewActivity?": "செயல்பாட்டுப் பதிவுகளை எவ்வாறு பார்ப்பது?", "howToViewActivityLogs?": "செயல்பாட்டுப் பதிவுகளை எவ்வாறு பார்ப்பது?",
"detail-8": "முகப்புப் பக்கத்தில், பயனரின் செயல்பாட்டின் விவரங்களைப் பார்க்க, 'வரலாறு' என்பதைக் கிளிக் செய்யவும்.", "detail-8": "முகப்புப் பக்கத்தில், பயனரின் செயல்பாட்டின் விவரங்களைப் பார்க்க, 'வரலாறு' என்பதைக் கிளிக் செய்யவும்.",
"whatCanDoBiometricsChanged?": "ஆண்ட்ராய்டு கீஸ்டோர் பயோமெட்ரிக் மாற்றப்பட்டால் என்ன நடக்கும்?", "whatHappensWhenAndroidKeystoreBiometricIsChanged?": "ஆண்ட்ராய்டு கீஸ்டோர் பயோமெட்ரிக் மாற்றப்பட்டால் என்ன நடக்கும்?",
"detail-9": "அடையாளச் சான்றுகளுக்கான தனிப்பட்ட விசைகள் போன்ற முக்கியமான தகவல்களை ஆண்ட்ராய்டு கீஸ்டோர் வைத்திருக்கிறது. உங்கள் பயோமெட்ரிக்ஸை மாற்றினால், பழைய விசைகள் இனி பாதுகாப்பாக இருக்காது. விஷயங்களைப் பாதுகாப்பாக வைத்திருக்க, அந்தப் பழைய சாவிகளால் கையொப்பமிடப்பட்ட அடையாளச் சான்றுகளை அகற்றுவோம். உங்கள் அடையாளச் சான்றுகளை மீண்டும் பதிவிறக்கம் செய்யலாம், மேலும் அவை சமீபத்திய, பாதுகாப்பான விசைகளுடன் கையொப்பமிடப்படும்." "detail-9": "அடையாளச் சான்றுகளுக்கான தனிப்பட்ட விசைகள் போன்ற முக்கியமான தகவல்களை ஆண்ட்ராய்டு கீஸ்டோர் வைத்திருக்கிறது. உங்கள் பயோமெட்ரிக்ஸை மாற்றினால், பழைய விசைகள் இனி பாதுகாப்பாக இருக்காது. விஷயங்களைப் பாதுகாப்பாக வைத்திருக்க, அந்தப் பழைய சாவிகளால் கையொப்பமிடப்பட்ட அடையாளச் சான்றுகளை அகற்றுவோம். உங்கள் அடையாளச் சான்றுகளை மீண்டும் பதிவிறக்கம் செய்யலாம், மேலும் அவை சமீபத்திய, பாதுகாப்பான விசைகளுடன் கையொப்பமிடப்படும்.",
"whatIsAnId?":"ஐடி என்றால் என்ன?",
"detail-10":"ஐடி என்பது ஒரு நபரின் அடையாளத்தை நிரூபிக்கக்கூடிய எந்த ஆவணமாகும். MOSIP இன் சூழலில், அடையாளங்காட்டிகள் அமைப்பில் உள்ள அடையாளங்களுக்கான எண்ணெழுத்து டிஜிட்டல் கைப்பிடிகள் ஆகும். ஒரு நபரின் அடையாளம் தனிப்பட்ட முறையில் நபரை அடையாளம் காணக்கூடிய சுயசரிதை மற்றும் பயோமெட்ரிக் பண்புக்கூறுகளின் தொகுப்பாக குறிப்பிடப்பட்டாலும், அடையாளம் அடையாளங்காட்டிகளைப் பயன்படுத்துவதாகக் குறிப்பிடப்படுகிறது.",
"whatAreTheDifferentTypesOfId?": "பல்வேறு வகையான ஐடி என்ன?",
"detail-11":"MOSIP இன் சூழலில், வெவ்வேறு ஐடிகள் UIN, VID மற்றும் AID ஆகும். அவர்களைப் பற்றி மேலும் படிக்கவும்",
"whereCanIFindTheseIds?":"இந்த ஐடிகளை நான் எங்கே காணலாம்?",
"detail-12a": "பதிவுசெய்தல் (பதிவு) செயல்முறையின் ஒரு பகுதியாக, வசிப்பவரின் மக்கள்தொகைத் தகவல் மற்றும் பயோமெட்ரிக்ஸை வெற்றிகரமாகப் பதிவுசெய்த பிறகு, குடியிருப்பாளருக்கு ஒரு பதிவு ஐடி (AID) ஒதுக்கப்படுகிறது. கைப்பற்றப்பட்ட விவரங்கள் மற்றும் எய்ட் அடங்கிய ஒப்புகை சீட்டு, பதிவு செய்யப்பட்டதற்கான ஆதாரமாக குடியிருப்பாளருக்கு வழங்கப்படுகிறது (அச்சிடப்பட்டது).",
"detail-12b": "வெற்றிகரமான செயலாக்கத்தில், குடியிருப்பாளருக்கு ஒரு தனித்துவ அடையாள எண் (UIN) ஒதுக்கப்பட்டு, பதிவு செய்யப்பட்ட தொலைபேசி எண் மற்றும்/அல்லது மின்னஞ்சலில் குடியிருப்பாளருக்கு ஒரு அறிவிப்பு அனுப்பப்படும்.",
"detail-12c": "விஐடி / விர்ச்சுவல் ஐடி என்பது ஒரு முறை பயன்பாட்டிற்காக கட்டமைக்கப்பட்ட மாற்று அடையாளங்காட்டியாகும் மற்றும் இணைக்க முடியாது. இவை அங்கீகார பரிவர்த்தனைகளுக்குப் பயன்படுத்தப்படுவதால், அத்தகைய அடையாளங்காட்டிகள் பயனருக்கு மட்டுமே தெரிந்திருக்க வேண்டும் அல்லது அவர்களின் பங்கேற்புடன் உருவாக்கப்பட வேண்டும்.",
"whyDoesMyVcSayActivationIsPending?":"செயல்படுத்தல் நிலுவையில் இருப்பதாக எனது VC ஏன் கூறுகிறார்?",
"detail-13": "உங்கள் வாலட்டில் VC பதிவிறக்கம் செய்யப்பட்டவுடன், அது இன்னும் பயனரின் அடையாளத்துடன் பிணைக்கப்படவில்லை, அதனால்தான் உங்கள் VC செயல்படுத்தல் நிலுவையில் உள்ளது எனக் கூறுகிறது. உங்கள் பணப்பையுடன் (உங்கள் கடவுக்குறியீடு அல்லது பயோமெட்ரிக்ஸுடன்) உங்கள் VC ஐ பிணைப்பது மிக உயர்ந்த அளவிலான பாதுகாப்பை உறுதிசெய்ய முக்கியமானது. உங்கள் VC ஐச் செயல்படுத்த, படிகளைப் பின்பற்றவும்",
"whatDoYouMeanByActivatedForOnlineLogin?": "ஆன்லைன் உள்நுழைவுக்காக செயல்படுத்தப்பட்டது என்பதன் அர்த்தம் என்ன?",
"detail-14a": "1. VC வெற்றிகரமாக பணப்பையுடன் பிணைக்கப்பட்டவுடன், அது ஆன்லைன் உள்நுழைவுக்காக செயல்படுத்தப்பட்டிருப்பதை நீங்கள் பார்க்கலாம், அதாவது இந்த VC இப்போது QR உள்நுழைவு செயல்முறைக்கு பயன்படுத்தப்படலாம். QR குறியீடு உள்நுழைவு பற்றி மேலும் அறிய, தயவுசெய்து படிக்கவும்",
"detail-14b": "2. INJI பயன்பாட்டில் பயனர் மொழியை மாற்றும்போது கூட கேள்வி பதில் படிக்கக்கூடியதாகவும் புரிந்துகொள்ளக்கூடியதாகவும் இருக்க வேண்டும்.",
"whatIsAVerifiableCredential?": "சரிபார்க்கக்கூடிய நற்சான்றிதழ் என்றால் என்ன?",
"detail-15": "சரிபார்க்கக்கூடிய நற்சான்றிதழ் என்பது டிஜிட்டல் கையொப்பமிடப்பட்ட தகவலாகும், இது ஒரு விஷயத்தைப் பற்றி வழங்குபவரின் அறிக்கையைப் பிரதிபலிக்கிறது மற்றும் பொதுவாக மக்கள்தொகை விவரங்களை உள்ளடக்கியது. பல்வேறு ஆன்லைன் தொடர்புகளில் VCகள் பாதுகாப்பானவை மற்றும் நம்பகமானவை."
}, },
"AddVcModal": { "AddVcModal": {
"requestingCredential": "நற்சான்றிதழைக் கோருகிறது...", "requestingCredential": "நற்சான்றிதழைக் கோருகிறது...",
@@ -318,16 +335,18 @@
} }
}, },
"OnboardingOverlay": { "OnboardingOverlay": {
"stepOneTitle": "பாதுகாப்பான பகிர்வு!", "stepOneTitle": "வரவேற்பு!",
"stepOneText": "உங்கள் டிஜிட்டல் நற்சான்றிதழை எப்போதும் உங்களுடன் வைத்திருக்கவும். அவற்றை திறம்பட நிர்வகிக்கவும் பயன்படுத்தவும் இன்ஜி உதவுகிறது. தொடங்குவதற்கு, உங்கள் சுயவிவரத்தில் கார்டுகளைச் சேர்க்கவும்.", "stepOneText": "உங்கள் டிஜிட்டல் நற்சான்றிதழை எப்போதும் உங்களுடன் வைத்திருக்கவும். ",
"stepTwoTitle": "நம்பகமான டிஜிட்டல் வாலட்", "stepTwoTitle": "பாதுகாப்பான பகிர்வு",
"stepTwoText": "உங்கள் முக்கியமான கார்டுகளை ஒரே நம்பகமான பணப்பையில் சேமித்து எடுத்துச் செல்லுங்கள்.", "stepTwoText": "தொந்தரவு இல்லாத வகையில் உங்கள் கார்டுகளைப் பாதுகாப்பாகப் பகிர்ந்து, பல்வேறு சேவைகளைப் பெறுங்கள்.",
"stepThreeTitle": "பாதுகாப்பான பகிர்வு", "stepThreeTitle": "நம்பகமான டிஜிட்டல் வாலட்",
"stepThreeText": "தொந்தரவு இல்லாத வகையில் உங்கள் கார்டுகளைப் பாதுகாப்பாகப் பகிர்ந்து, பல்வேறு சேவைகளைப் பெறுங்கள்.", "stepThreeText": "உங்கள் முக்கியமான கார்டுகளை ஒரே நம்பகமான பணப்பையில் சேமித்து எடுத்துச் செல்லுங்கள்.",
"stepFourTitle": "தொந்தரவு இல்லாத அங்கீகாரம்", "stepFourTitle": "விரைவான அணுகல்",
"stepFourText": "சேமிக்கப்பட்ட டிஜிட்டல் நற்சான்றிதழைப் பயன்படுத்தி உங்களை எளிதாக அங்கீகரிக்கவும்.", "stepFourText": "சேமிக்கப்பட்ட டிஜிட்டல் நற்சான்றிதழைப் பயன்படுத்தி உங்களை எளிதாக அங்கீகரிக்கவும்.",
"getStarted": "தொடங்கு", "stepFiveTitle": "காப்பு தரவு",
"goBack": "திரும்பி போ", "stepFiveText": "எங்கள் காப்புப்பிரதியைப் பயன்படுத்தி உங்கள் தரவை எளிதாகப் பாதுகாக்கவும்",
"getStarted": "தொடங்குங்கள்",
"goBack": "திரும்பி செல்",
"back": "மீண்டும்", "back": "மீண்டும்",
"skip": "தவிர்க்கவும்", "skip": "தவிர்க்கவும்",
"next": "அடுத்தது" "next": "அடுத்தது"
@@ -577,6 +596,63 @@
} }
} }
}, },
"DataBackupScreen": {
"dataBackupAndRestore": "காப்புப்பிரதி & மீட்டமை",
"new": "புதியது",
"loadingTitle": "அமைவை ஏற்றுகிறது",
"loadingSubtitle": "ஏற்றுகிறது...",
"errors": {
"permissionDenied": {
"title": "அனுமதி மறுக்கப்பட்டது!",
"message": "தரவு காப்புப் பிரதி அமைப்புகளை உருவாக்குவதை நீங்கள் ரத்து செய்துவிட்டதை நாங்கள் கவனித்தோம். உங்கள் தரவு கிடைப்பதை உறுதிசெய்ய, தரவு காப்புப்பிரதி அமைப்புகளை மீண்டும் பார்வையிடுமாறு கடுமையாகப் பரிந்துரைக்கிறோம்.",
"helpText": "இப்போது தரவு காப்புப்பிரதியை அமைக்க `அமைப்புகளை உள்ளமை` என்பதைக் கிளிக் செய்யவும் அல்லது அமைப்புகள் திரைக்குச் செல்ல `ரத்துசெய்` என்பதைக் கிளிக் செய்யவும்."
},
"noInternetConnection": {
"title": "இணைய இணைப்பு இல்லை",
"message": "உங்கள் இணைப்பைச் சரிபார்த்து மீண்டும் முயற்சிக்கவும்"
}
}
},
"BackupAndRestoreBanner": {
"backupSuccessful": "உங்கள் காப்புப்பிரதி வெற்றிகரமாக இருந்தது!",
"backupFailure": {
"networkError": "நிலையற்ற இணைப்பு காரணமாக, தரவு காப்புப்பிரதியை எங்களால் செய்ய முடியவில்லை. பிறகு முயற்சிக்கவும்.",
"technicalError": "தொழில்நுட்பப் பிழை காரணமாக, தரவு காப்புப் பிரதி எடுக்க முடியவில்லை. பிறகு முயற்சிக்கவும்.",
"noDataForBackup": "மன்னிக்கவும், தற்போது காப்புப் பிரதி எடுக்க தரவு எதுவும் இல்லை.",
"storageLimitReached": "உங்கள் சாதனத்தில் போதுமான சேமிப்பிடம் இல்லாததால், காப்புப் பிரதி செயல்முறையை எங்களால் முடிக்க முடியவில்லை. தேவையற்ற கோப்புகள் அல்லது பயன்பாடுகளை நீக்கி இடத்தை காலி செய்து, மீண்டும் முயற்சிக்கவும்."
},
"restoreSuccessful": "உங்கள் மீட்டெடுப்பு வெற்றிகரமாக இருந்தது!",
"restoreFailure": {
"networkError": "நிலையற்ற இணைப்பு காரணமாக, எங்களால் தரவை மீட்டெடுக்க முடியவில்லை. பிறகு முயற்சிக்கவும்.",
"technicalError": "தொழில்நுட்பப் பிழை காரணமாக, தரவை மீட்டெடுக்க முடியவில்லை. பிறகு முயற்சிக்கவும்."
}
},
"AccountSelection": {
"backupProcessInfo": "உங்கள் தரவை காப்புப் பிரதி எடுக்க இன்னும் சில படிகள் உள்ளன",
"cloudInfo": "தரவு காப்புப்பிரதியைத் தொடங்க, உங்கள் கூகிள் இயக்ககத்தை Inji உடன் இணைக்க, `தொடரவும்' பொத்தானைத் தட்டவும்.",
"googleDriveTitle": "கூகிள் இயக்ககம்",
"loadingSubtitle": "ஏற்றுகிறது...",
"proceed": "தொடரவும்",
"goBack": "திரும்பி செல்",
"associatedAccount": "தொடர்புடைய கணக்கு"
},
"BackupAndRestore": {
"title": "காப்புப்பிரதி & மீட்டமை",
"backupProgressState": "காப்புப்பிரதி செயலில் உள்ளது...",
"lastBackupDetails": "கடைசி காப்பு விவரங்கள்",
"backupInProgress": "தரவு காப்புப்பிரதி செயலில் இருக்கும்போது நீங்கள் பயன்பாட்டைப் பயன்படுத்தலாம். பயன்பாட்டை மூடுவது தரவு காப்புப்பிரதி செயல்முறையை நிறுத்தும்.",
"noBackup": "உங்கள் தரவை Google இயக்ககத்தில் காப்புப் பிரதி எடுக்கவும். நீங்கள் INJI ஐ மீண்டும் நிறுவும் போது அவற்றை மீட்டெடுக்கலாம்.",
"storage": "நீங்கள் தேர்ந்தெடுத்த ஜிமெயில் கணக்குடன் தொடர்புடைய Google இயக்ககத்தில் காப்புப்பிரதி சேமிக்கப்படும்.",
"backup": "காப்புப்பிரதி",
"size": "அளவு: ",
"restore": "மீட்டமை",
"restoreInProgress": "உங்கள் தரவை மீட்டெடுக்கிறோம், தயவுசெய்து பயன்பாட்டை மூட வேண்டாம். இதற்கு உங்கள் தரவின் அடிப்படையில் <X> நிமிடங்கள் ஆகலாம்.",
"restoreInfo": "Google இயக்ககத்திலிருந்து உங்கள் தரவை மீட்டெடுக்கவும்",
"driveSettings": "Google இயக்கக அமைப்புகள்",
"successBanner": "உங்கள் காப்புப்பிரதி வெற்றிகரமாக இருந்தது!",
"backupFailed": "காப்புப்பிரதி தோல்வியடைந்தது",
"ok": "சரி"
},
"WelcomeScreen": { "WelcomeScreen": {
"title": "திறந்த மூல அடையாள தீர்வு", "title": "திறந்த மூல அடையாள தீர்வு",
"unlockApplication": "பயன்பாட்டைத் திறக்கவும்", "unlockApplication": "பயன்பாட்டைத் திறக்கவும்",
@@ -623,4 +699,4 @@
"description": "பயன்பாட்டைத் திறக்க கைரேகையைப் பயன்படுத்தவும்" "description": "பயன்பாட்டைத் திறக்க கைரேகையைப் பயன்படுத்தவும்"
} }
} }
} }

View File

@@ -1,5 +1,5 @@
import NetInfo, {NetInfoStateType} from '@react-native-community/netinfo'; import NetInfo, {NetInfoStateType} from '@react-native-community/netinfo';
import {AppState, AppStateStatus, Platform} from 'react-native'; import {AppState, AppStateStatus} from 'react-native';
import {getDeviceId, getDeviceName} from 'react-native-device-info'; import {getDeviceId, getDeviceName} from 'react-native-device-info';
import {assign, EventFrom, send, spawn, StateFrom} from 'xstate'; import {assign, EventFrom, send, spawn, StateFrom} from 'xstate';
import {createModel} from 'xstate/lib/model'; import {createModel} from 'xstate/lib/model';
@@ -25,7 +25,11 @@ import {
SETTINGS_STORE_KEY, SETTINGS_STORE_KEY,
} from '../shared/constants'; } from '../shared/constants';
import {logState} from '../shared/commonUtil'; import {logState} from '../shared/commonUtil';
import {backupMachine, createBackupMachine} from './backup'; import {backupMachine, createBackupMachine} from './backupAndRestore/backup';
import {
backupRestoreMachine,
createBackupRestoreMachine,
} from './backupRestore';
const model = createModel( const model = createModel(
{ {
@@ -266,6 +270,11 @@ export const appMachine = model.createMachine(
backupMachine.id, backupMachine.id,
); );
serviceRefs.backupRestore = spawn(
createBackupRestoreMachine(serviceRefs),
backupRestoreMachine.id,
);
serviceRefs.activityLog = spawn( serviceRefs.activityLog = spawn(
createActivityLogMachine(serviceRefs), createActivityLogMachine(serviceRefs),
activityLogMachine.id, activityLogMachine.id,
@@ -300,6 +309,7 @@ export const appMachine = model.createMachine(
context.serviceRefs.activityLog.subscribe(logState); context.serviceRefs.activityLog.subscribe(logState);
context.serviceRefs.scan.subscribe(logState); context.serviceRefs.scan.subscribe(logState);
context.serviceRefs.backup.subscribe(logState); context.serviceRefs.backup.subscribe(logState);
context.serviceRefs.backupRestore.subscribe(logState);
if (isAndroid()) { if (isAndroid()) {
context.serviceRefs.request.subscribe(logState); context.serviceRefs.request.subscribe(logState);

Some files were not shown because too many files have changed in this diff Show More