Merge branch 'develop' of https://github.com/mosip/inji into ui-revamp
6
.github/workflows/android-build-verify.yml
vendored
@@ -107,8 +107,10 @@ jobs:
|
||||
|
||||
- name: Run Build using Fastlane
|
||||
run: |
|
||||
cd android/scripts
|
||||
./run-fastlane.sh
|
||||
cd android
|
||||
yes | sudo gem install bundler
|
||||
yes | sudo fastlane install_plugins
|
||||
bundle exec fastlane android_build_verify
|
||||
env:
|
||||
DEBUG_KEYSTORE_ALIAS: androiddebugkey
|
||||
DEBUG_KEYSTORE_PASSWORD: '${{secrets.INJI_ANDROID_DEBUG_STOREPASS}}'
|
||||
32
.github/workflows/android-custom-build.yml
vendored
@@ -83,29 +83,19 @@ jobs:
|
||||
FIREBASE_SECRET: ${{ secrets.GPG_SECRET }}
|
||||
|
||||
- name: Generate keystore
|
||||
run: |
|
||||
keytool \
|
||||
-genkey -v \
|
||||
-storetype PKCS12 \
|
||||
-keyalg RSA \
|
||||
-keysize 2048 \
|
||||
-validity 10000 \
|
||||
-storepass $DEBUG_KEYSTORE_PASSWORD \
|
||||
-keypass $DEBUG_KEYSTORE_PASSWORD \
|
||||
-alias androiddebugkey \
|
||||
-keystore android/app/debug.keystore \
|
||||
-dname "CN=io.mosip.residentapp,OU=,O=,L=,S=,C=US"
|
||||
env:
|
||||
DEBUG_KEYSTORE_PASSWORD: '${{secrets.INJI_ANDROID_DEBUG_STOREPASS}}'
|
||||
|
||||
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: Export variables for keystore
|
||||
run: |
|
||||
cd android/app
|
||||
export DEBUG_KEYSTORE_ALIAS=androiddebugkey
|
||||
export DEBUG_KEYSTORE_PASSWORD=$DEBUG_KEYSTORE_PASSWORD
|
||||
export RELEASE_KEYSTORE_ALIAS=androidreleasekey
|
||||
export RELEASE_KEYSTORE_PASSWORD=$RELEASE_KEYSTORE_PASSWORD
|
||||
env:
|
||||
DEBUG_KEYSTORE_PASSWORD: '${{secrets.INJI_ANDROID_DEBUG_STOREPASS}}'
|
||||
RELEASE_KEYSTORE_PASSWORD: '${{secrets.INJI_ANDROID_RELEASE_STOREPASS}}'
|
||||
|
||||
- name: Bump version code
|
||||
uses: chkfung/android-version-actions@v1.2.1
|
||||
@@ -120,13 +110,13 @@ jobs:
|
||||
env:
|
||||
MIMOTO_HOST: ${{ github.event.inputs.backendServiceUrl }}
|
||||
APPLICATION_THEME: ${{ github.event.inputs.theme }}
|
||||
DEBUG_KEYSTORE_ALIAS: androiddebugkey
|
||||
DEBUG_KEYSTORE_PASSWORD: '${{secrets.INJI_ANDROID_DEBUG_STOREPASS}}'
|
||||
RELEASE_KEYSTORE_ALIAS: androidreleasekey
|
||||
RELEASE_KEYSTORE_PASSWORD: '${{secrets.INJI_ANDROID_RELEASE_STOREPASS}}'
|
||||
CREDENTIAL_REGISTRY_EDIT: ${{ github.event.inputs.registry_edit }}
|
||||
|
||||
- name: Upload Artifact to Actions
|
||||
uses: actions/upload-artifact@v3.1.1
|
||||
with:
|
||||
name: Inji
|
||||
path: android/app/build/outputs/apk/newlogic/debug/
|
||||
path: android/app/build/outputs/apk/mosip/release/
|
||||
retention-days: 10
|
||||
@@ -203,6 +203,10 @@ android {
|
||||
signingConfig signingConfigs.debug
|
||||
}
|
||||
release {
|
||||
lintOptions {
|
||||
checkReleaseBuilds false
|
||||
abortOnError false
|
||||
}
|
||||
// Caution! In production, you need to generate your own keystore file.
|
||||
// see https://reactnative.dev/docs/signed-apk-android.
|
||||
signingConfig signingConfigs.release
|
||||
|
||||
@@ -1,8 +1,15 @@
|
||||
default_platform(:android)
|
||||
|
||||
desc "Verify Build for Android"
|
||||
lane :android_build do
|
||||
lane :android_build_verify do
|
||||
gradle(
|
||||
task: "assembleNewlogicDebug",
|
||||
task: "assembleMosipDebug",
|
||||
)
|
||||
end
|
||||
|
||||
desc "Build for Android"
|
||||
lane :android_build do
|
||||
gradle(
|
||||
task: "assembleMosipRelease",
|
||||
)
|
||||
end
|
||||
|
||||
BIN
assets/icon.png
|
Before Width: | Height: | Size: 39 KiB After Width: | Height: | Size: 27 KiB |
|
Before Width: | Height: | Size: 39 KiB After Width: | Height: | Size: 45 KiB |
@@ -1,4 +1,4 @@
|
||||
import React, { useContext, useRef, useState } from 'react';
|
||||
import React, { useContext, useRef } from 'react';
|
||||
import { useInterpret, useSelector } from '@xstate/react';
|
||||
import { Pressable } from 'react-native';
|
||||
import { ActorRefFrom } from 'xstate';
|
||||
@@ -12,13 +12,16 @@ import {
|
||||
selectEmptyWalletBindingId,
|
||||
selectStoreError,
|
||||
selectIsSavingFailedInIdle,
|
||||
VcItemEvents,
|
||||
selectKebabPopUp,
|
||||
} from '../machines/vcItem';
|
||||
import { VcItemEvents } from '../machines/vcItem';
|
||||
import { ErrorMessageOverlay } from '../components/MessageOverlay';
|
||||
import { Theme } from './ui/styleUtils';
|
||||
import { GlobalContext } from '../shared/GlobalContext';
|
||||
import { VcItemContent } from './VcItemContent';
|
||||
import { VcItemActivationStatus } from './VcItemActivationStatus';
|
||||
import { Row } from './ui';
|
||||
import { KebabPopUp } from './KebabPopUp';
|
||||
|
||||
export const VcItem: React.FC<VcItemProps> = (props) => {
|
||||
const { appService } = useContext(GlobalContext);
|
||||
@@ -35,7 +38,9 @@ export const VcItem: React.FC<VcItemProps> = (props) => {
|
||||
const emptyWalletBindingId = useSelector(service, selectEmptyWalletBindingId);
|
||||
const storeError = useSelector(service, selectStoreError);
|
||||
const isSavingFailedInIdle = useSelector(service, selectIsSavingFailedInIdle);
|
||||
const isKebabPopUp = useSelector(service, selectKebabPopUp);
|
||||
const DISMISS = () => service.send(VcItemEvents.DISMISS());
|
||||
const KEBAB_POPUP = () => service.send(VcItemEvents.KEBAB_POPUP());
|
||||
|
||||
let storeErrorTranslationPath = 'errors.savingFailed';
|
||||
|
||||
@@ -47,6 +52,7 @@ export const VcItem: React.FC<VcItemProps> = (props) => {
|
||||
|
||||
const generatedOn = useSelector(service, selectGeneratedOn);
|
||||
const tag = useSelector(service, selectTag);
|
||||
|
||||
return (
|
||||
<React.Fragment>
|
||||
<Pressable
|
||||
@@ -64,23 +70,32 @@ export const VcItem: React.FC<VcItemProps> = (props) => {
|
||||
tag={tag}
|
||||
selectable={props.selectable}
|
||||
selected={props.selected}
|
||||
iconName={props.iconName && props.iconName}
|
||||
iconType={props.iconType && props.iconType}
|
||||
onPress={() => props.onPress(service)}
|
||||
service={service}
|
||||
iconName={props.iconName}
|
||||
iconType={props.iconType}
|
||||
onPress={() => props.onPress(service)}
|
||||
/>
|
||||
|
||||
{props.activeTab !== 'receivedVcsTab' &&
|
||||
props.activeTab != 'sharingVcScreen' && (
|
||||
<VcItemActivationStatus
|
||||
verifiableCredential={verifiableCredential}
|
||||
emptyWalletBindingId={emptyWalletBindingId}
|
||||
onPress={() => props.onPress(service)}
|
||||
showOnlyBindedVc={props.showOnlyBindedVc}
|
||||
<Row crossAlign="center">
|
||||
{props.activeTab !== 'receivedVcsTab' &&
|
||||
props.activeTab != 'sharingVcScreen' && (
|
||||
<VcItemActivationStatus
|
||||
verifiableCredential={verifiableCredential}
|
||||
emptyWalletBindingId={emptyWalletBindingId}
|
||||
onPress={() => props.onPress(service)}
|
||||
showOnlyBindedVc={props.showOnlyBindedVc}
|
||||
/>
|
||||
)}
|
||||
<Pressable onPress={KEBAB_POPUP}>
|
||||
<KebabPopUp
|
||||
vcKey={props.vcKey}
|
||||
iconName="dots-three-horizontal"
|
||||
iconType="entypo"
|
||||
isVisible={isKebabPopUp}
|
||||
onDismiss={DISMISS}
|
||||
service={service}
|
||||
/>
|
||||
)}
|
||||
</Pressable>
|
||||
</Row>
|
||||
</Pressable>
|
||||
<ErrorMessageOverlay
|
||||
isVisible={isSavingFailedInIdle}
|
||||
|
||||
@@ -1,18 +1,12 @@
|
||||
import React from 'react';
|
||||
import { useTranslation } from 'react-i18next';
|
||||
import { Dimensions, Pressable } from 'react-native';
|
||||
import { Dimensions } from 'react-native';
|
||||
import { Icon } from 'react-native-elements';
|
||||
import { ActorRefFrom } from 'xstate';
|
||||
import {
|
||||
VcItemEvents,
|
||||
selectKebabPopUp,
|
||||
vcItemMachine,
|
||||
} from '../machines/vcItem';
|
||||
import { vcItemMachine } from '../machines/vcItem';
|
||||
import { VerifiableCredential } from '../types/vc';
|
||||
import { Row, Text } from './ui';
|
||||
import { Theme } from './ui/styleUtils';
|
||||
import { KebabPopUp } from './KebabPopUp';
|
||||
import { useSelector } from '@xstate/react';
|
||||
|
||||
const WalletUnverifiedIcon: React.FC = () => {
|
||||
return (
|
||||
@@ -64,19 +58,6 @@ const WalletUnverifiedActivationDetails: React.FC<
|
||||
}
|
||||
children={t('offlineAuthDisabledHeader')}></Text>
|
||||
</Row>
|
||||
|
||||
{props.verifiableCredential && (
|
||||
<Pressable onPress={() => props.onPress()}>
|
||||
<KebabPopUp
|
||||
vcKey={props.vcKey}
|
||||
iconName="dots-three-horizontal"
|
||||
iconType="entypo"
|
||||
isVisible={props.showPopUp}
|
||||
onDismiss={() => props.onDismiss()}
|
||||
service={props.service}
|
||||
/>
|
||||
</Pressable>
|
||||
)}
|
||||
</Row>
|
||||
);
|
||||
};
|
||||
@@ -108,19 +89,6 @@ const WalletVerifiedActivationDetails: React.FC<WalletVerifiedDetailsProps> = (
|
||||
}
|
||||
children={t('profileAuthenticated')}></Text>
|
||||
</Row>
|
||||
|
||||
{props.verifiableCredential && (
|
||||
<Pressable onPress={() => props.onPress()}>
|
||||
<KebabPopUp
|
||||
vcKey={props.vcKey}
|
||||
iconName="dots-three-horizontal"
|
||||
iconType="entypo"
|
||||
isVisible={props.showPopUp}
|
||||
onDismiss={() => props.onDismiss()}
|
||||
service={props.service}
|
||||
/>
|
||||
</Pressable>
|
||||
)}
|
||||
</Row>
|
||||
);
|
||||
};
|
||||
@@ -128,29 +96,18 @@ const WalletVerifiedActivationDetails: React.FC<WalletVerifiedDetailsProps> = (
|
||||
export const VcItemActivationStatus: React.FC<VcItemActivationStatusProps> = (
|
||||
props
|
||||
) => {
|
||||
const isKebabPopUp = useSelector(props.service, selectKebabPopUp);
|
||||
const KEBAB_POPUP = () => props.service.send(VcItemEvents.KEBAB_POPUP());
|
||||
const DISMISS = () => props.service.send(VcItemEvents.DISMISS());
|
||||
return (
|
||||
<Row>
|
||||
{props.emptyWalletBindingId ? (
|
||||
<WalletUnverifiedActivationDetails
|
||||
verifiableCredential={props.verifiableCredential}
|
||||
onPress={KEBAB_POPUP}
|
||||
onDismiss={DISMISS}
|
||||
showPopUp={isKebabPopUp}
|
||||
service={props.service}
|
||||
vcKey={props.vcKey}
|
||||
onPress={props.onPress}
|
||||
/>
|
||||
) : (
|
||||
<WalletVerifiedActivationDetails
|
||||
verifiableCredential={props.verifiableCredential}
|
||||
showOnlyBindedVc={props.showOnlyBindedVc}
|
||||
onPress={KEBAB_POPUP}
|
||||
onDismiss={DISMISS}
|
||||
showPopUp={isKebabPopUp}
|
||||
service={props.service}
|
||||
vcKey={props.vcKey}
|
||||
onPress={props.onPress}
|
||||
/>
|
||||
)}
|
||||
</Row>
|
||||
@@ -159,28 +116,18 @@ export const VcItemActivationStatus: React.FC<VcItemActivationStatusProps> = (
|
||||
|
||||
interface VcItemActivationStatusProps {
|
||||
showOnlyBindedVc: boolean;
|
||||
onPress: () => void;
|
||||
onPress: (vcRef?: ActorRefFrom<typeof vcItemMachine>) => void;
|
||||
verifiableCredential: VerifiableCredential;
|
||||
emptyWalletBindingId: boolean;
|
||||
service: any;
|
||||
vcKey: string;
|
||||
}
|
||||
|
||||
interface WalletVerifiedDetailsProps {
|
||||
showOnlyBindedVc: boolean;
|
||||
onPress: () => void;
|
||||
onDismiss: () => void;
|
||||
onPress: (vcRef?: ActorRefFrom<typeof vcItemMachine>) => void;
|
||||
verifiableCredential: VerifiableCredential;
|
||||
showPopUp: boolean;
|
||||
service: any;
|
||||
vcKey: string;
|
||||
}
|
||||
|
||||
interface WalletUnVerifiedDetailsProps {
|
||||
onPress: () => void;
|
||||
onDismiss: () => void;
|
||||
onPress: (vcRef?: ActorRefFrom<typeof vcItemMachine>) => void;
|
||||
verifiableCredential: VerifiableCredential;
|
||||
showPopUp: boolean;
|
||||
service: any;
|
||||
vcKey: string;
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import React from 'react';
|
||||
import { useTranslation } from 'react-i18next';
|
||||
import { Image, ImageBackground } from 'react-native';
|
||||
import { Image, ImageBackground, View } from 'react-native';
|
||||
import { getLocalizedField } from '../i18n';
|
||||
import { VerifiableCredential } from '../types/vc';
|
||||
import { RotatingIcon } from './RotatingIcon';
|
||||
@@ -9,8 +9,6 @@ import VerifiedIcon from './VerifiedIcon';
|
||||
import { Column, Row, Text } from './ui';
|
||||
import { Theme } from './ui/styleUtils';
|
||||
import { CheckBox, Icon } from 'react-native-elements';
|
||||
import { ActorRefFrom } from 'xstate';
|
||||
import { vcItemMachine } from '../machines/vcItem';
|
||||
|
||||
const getDetails = (arg1, arg2, verifiableCredential) => {
|
||||
if (arg1 === 'Status') {
|
||||
@@ -188,6 +186,9 @@ export const VcItemContent: React.FC<VcItemContentProps> = (props) => {
|
||||
/>
|
||||
</Column>
|
||||
</Row>
|
||||
{!props.verifiableCredential && (
|
||||
<RotatingIcon name="sync" color={Theme.Colors.rotatingIcon} />
|
||||
)}
|
||||
</Column>
|
||||
<VcItemTags tag={props.tag} />
|
||||
</ImageBackground>
|
||||
|
||||
@@ -66,6 +66,12 @@ export const Column = createLayout('column');
|
||||
|
||||
export const Centered = createLayout('column', 'center', 'center');
|
||||
|
||||
export const HorizontallyCentered = createLayout(
|
||||
'column',
|
||||
'flex-start',
|
||||
'center'
|
||||
);
|
||||
|
||||
interface LayoutProps {
|
||||
fill?: boolean;
|
||||
align?: FlexStyle['justifyContent'];
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
export { Text } from './Text';
|
||||
export { Button } from './Button';
|
||||
export { Row, Column, Centered } from './Layout';
|
||||
export { Row, Column, Centered, HorizontallyCentered } from './Layout';
|
||||
|
||||
@@ -141,6 +141,13 @@ export const DefaultTheme = {
|
||||
backgroundColor: Colors.Grey6,
|
||||
borderRadius: 4,
|
||||
},
|
||||
loadingCardDetailsContainer: {
|
||||
flex: 1,
|
||||
flexDirection: 'row',
|
||||
backgroundColor: Colors.Grey6,
|
||||
borderRadius: 4,
|
||||
},
|
||||
cardDetailsContainer: {},
|
||||
bottomTabIconStyle: {
|
||||
padding: 4,
|
||||
width: 36,
|
||||
@@ -280,12 +287,17 @@ export const DefaultTheme = {
|
||||
justifyContent: 'space-between',
|
||||
},
|
||||
logo: {
|
||||
height: 48,
|
||||
width: 40,
|
||||
height: 35,
|
||||
width: 90,
|
||||
},
|
||||
homeCloseCardDetailsHeader: {
|
||||
flex: 1,
|
||||
},
|
||||
cardDetailsHeader: {
|
||||
flex: 1,
|
||||
justifyContent: 'space-between',
|
||||
},
|
||||
mosipLogoContainer: {},
|
||||
details: {
|
||||
width: 290,
|
||||
marginLeft: 110,
|
||||
|
||||
@@ -132,6 +132,18 @@ export const PurpleTheme = {
|
||||
backgroundColor: Colors.Grey6,
|
||||
borderRadius: 4,
|
||||
},
|
||||
loadingCardDetailsContainer: {
|
||||
flex: 1,
|
||||
flexDirection: 'row',
|
||||
backgroundColor: Colors.Grey6,
|
||||
borderRadius: 4,
|
||||
padding: 5,
|
||||
paddingTop: 0,
|
||||
},
|
||||
cardDetailsContainer: {
|
||||
padding: 10,
|
||||
paddingTop: 0,
|
||||
},
|
||||
bottomTabIconStyle: {
|
||||
padding: 4,
|
||||
width: 36,
|
||||
@@ -161,7 +173,6 @@ export const PurpleTheme = {
|
||||
flex: 1,
|
||||
backgroundColor: Colors.Grey6,
|
||||
borderRadius: 4,
|
||||
padding: 5,
|
||||
},
|
||||
closeDetailsContainer: {
|
||||
flex: 1,
|
||||
@@ -206,11 +217,9 @@ export const PurpleTheme = {
|
||||
shadowOpacity: 0.4,
|
||||
shadowRadius: 3,
|
||||
elevation: 4,
|
||||
padding: 10,
|
||||
},
|
||||
backgroundImageContainer: {
|
||||
flex: 1,
|
||||
padding: 10,
|
||||
},
|
||||
successTag: {
|
||||
backgroundColor: Colors.Green,
|
||||
@@ -230,14 +239,35 @@ export const PurpleTheme = {
|
||||
openDetailsHeader: {
|
||||
flex: 1,
|
||||
justifyContent: 'space-between',
|
||||
paddingLeft: 10,
|
||||
paddingTop: 10,
|
||||
},
|
||||
logo: {
|
||||
height: 46,
|
||||
width: 40,
|
||||
height: 33,
|
||||
width: 90,
|
||||
},
|
||||
homeCloseCardDetailsHeader: {
|
||||
loadingCardDetailsHeader: {
|
||||
flex: 1,
|
||||
justifyContent: 'space-between',
|
||||
paddingLeft: 5,
|
||||
paddingTop: 5,
|
||||
},
|
||||
cardDetailsHeader: {
|
||||
flex: 1,
|
||||
justifyContent: 'space-between',
|
||||
paddingLeft: 10,
|
||||
paddingTop: 10,
|
||||
},
|
||||
mosipLogoContainer: {
|
||||
backgroundColor: 'white',
|
||||
borderBottomLeftRadius: 50,
|
||||
borderTopLeftRadius: 50,
|
||||
padding: 2,
|
||||
alignItems: 'center',
|
||||
justifyContent: 'center',
|
||||
},
|
||||
closecardMosipLogo: {
|
||||
alignSelf: 'flex-end',
|
||||
},
|
||||
closecardMosipLogo: {
|
||||
alignSelf: 'flex-end',
|
||||
@@ -249,7 +279,15 @@ export const PurpleTheme = {
|
||||
},
|
||||
openDetailsContainer: {
|
||||
flex: 1,
|
||||
padding: 10,
|
||||
padding: 20,
|
||||
paddingTop: 10,
|
||||
},
|
||||
profileIconBg: {
|
||||
padding: 8,
|
||||
width: 40,
|
||||
height: 40,
|
||||
borderRadius: 6,
|
||||
backgroundColor: Colors.LightOrange,
|
||||
},
|
||||
profileIconBg: {
|
||||
padding: 8,
|
||||
|
||||
@@ -1,21 +1,23 @@
|
||||
{
|
||||
"images": [
|
||||
"images" : [
|
||||
{
|
||||
"idiom": "universal",
|
||||
"filename": "image.png",
|
||||
"scale": "1x"
|
||||
"filename" : "splash.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"idiom": "universal",
|
||||
"scale": "2x"
|
||||
"filename" : "splash@2x.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"idiom": "universal",
|
||||
"scale": "3x"
|
||||
"filename" : "splash@3x.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
"info": {
|
||||
"version": 1,
|
||||
"author": "expo"
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
Before Width: | Height: | Size: 22 KiB |
BIN
ios/Inji/Images.xcassets/SplashScreen.imageset/splash.png
vendored
Normal file
|
After Width: | Height: | Size: 18 KiB |
BIN
ios/Inji/Images.xcassets/SplashScreen.imageset/splash@2x.png
vendored
Normal file
|
After Width: | Height: | Size: 49 KiB |
BIN
ios/Inji/Images.xcassets/SplashScreen.imageset/splash@3x.png
vendored
Normal file
|
After Width: | Height: | Size: 89 KiB |
@@ -1,13 +1,15 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="16096" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" launchScreen="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES" initialViewController="EXPO-VIEWCONTROLLER-1">
|
||||
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="21507" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" launchScreen="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES" initialViewController="EXPO-VIEWCONTROLLER-1">
|
||||
<device id="retina5_5" orientation="portrait" appearance="light"/>
|
||||
<dependencies>
|
||||
<deployment identifier="iOS"/>
|
||||
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="16087"/>
|
||||
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="21505"/>
|
||||
<capability name="Safe area layout guides" minToolsVersion="9.0"/>
|
||||
<capability name="System colors in document resources" minToolsVersion="11.0"/>
|
||||
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
|
||||
</dependencies>
|
||||
<scenes>
|
||||
<!--View Controller-->
|
||||
<scene sceneID="EXPO-SCENE-1">
|
||||
<objects>
|
||||
<viewController storyboardIdentifier="SplashScreenViewController" id="EXPO-VIEWCONTROLLER-1" sceneMemberID="viewController">
|
||||
@@ -18,22 +20,22 @@
|
||||
<imageView userInteractionEnabled="NO" contentMode="scaleAspectFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" insetsLayoutMarginsFromSafeArea="NO" image="SplashScreenBackground" translatesAutoresizingMaskIntoConstraints="NO" id="EXPO-SplashScreenBackground" userLabel="SplashScreenBackground">
|
||||
<rect key="frame" x="0.0" y="0.0" width="414" height="736"/>
|
||||
</imageView>
|
||||
<imageView id="EXPO-SplashScreen" userLabel="SplashScreen" image="SplashScreen" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" clipsSubviews="true" userInteractionEnabled="false" translatesAutoresizingMaskIntoConstraints="false">
|
||||
<rect key="frame" x="0" y="0" width="414" height="736"/>
|
||||
<imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="SplashScreen" translatesAutoresizingMaskIntoConstraints="NO" id="EXPO-SplashScreen" userLabel="SplashScreen">
|
||||
<rect key="frame" x="0.0" y="0.0" width="414" height="736"/>
|
||||
</imageView>
|
||||
</subviews>
|
||||
<viewLayoutGuide key="safeArea" id="Rmq-lb-GrQ"/>
|
||||
<color key="backgroundColor" systemColor="systemBackgroundColor"/>
|
||||
<constraints>
|
||||
<constraint firstItem="EXPO-SplashScreenBackground" firstAttribute="top" secondItem="EXPO-ContainerView" secondAttribute="top" id="1gX-mQ-vu6"/>
|
||||
<constraint firstItem="EXPO-SplashScreenBackground" firstAttribute="leading" secondItem="EXPO-ContainerView" secondAttribute="leading" id="6tX-OG-Sck"/>
|
||||
<constraint firstItem="EXPO-SplashScreenBackground" firstAttribute="trailing" secondItem="EXPO-ContainerView" secondAttribute="trailing" id="ABX-8g-7v4"/>
|
||||
<constraint firstItem="EXPO-SplashScreenBackground" firstAttribute="bottom" secondItem="EXPO-ContainerView" secondAttribute="bottom" id="jkI-2V-eW5"/>
|
||||
<constraint firstItem="EXPO-SplashScreen" firstAttribute="top" secondItem="EXPO-ContainerView" secondAttribute="top" id="83fcb9b545b870ba44c24f0feeb116490c499c52"/>
|
||||
<constraint firstItem="EXPO-SplashScreen" firstAttribute="leading" secondItem="EXPO-ContainerView" secondAttribute="leading" id="61d16215e44b98e39d0a2c74fdbfaaa22601b12c"/>
|
||||
<constraint firstItem="EXPO-SplashScreen" firstAttribute="trailing" secondItem="EXPO-ContainerView" secondAttribute="trailing" id="f934da460e9ab5acae3ad9987d5b676a108796c1"/>
|
||||
<constraint firstItem="EXPO-SplashScreenBackground" firstAttribute="leading" secondItem="EXPO-ContainerView" secondAttribute="leading" id="6tX-OG-Sck"/>
|
||||
<constraint firstItem="EXPO-SplashScreen" firstAttribute="top" secondItem="EXPO-ContainerView" secondAttribute="top" id="83fcb9b545b870ba44c24f0feeb116490c499c52"/>
|
||||
<constraint firstItem="EXPO-SplashScreenBackground" firstAttribute="trailing" secondItem="EXPO-ContainerView" secondAttribute="trailing" id="ABX-8g-7v4"/>
|
||||
<constraint firstItem="EXPO-SplashScreen" firstAttribute="bottom" secondItem="EXPO-ContainerView" secondAttribute="bottom" id="d6a0be88096b36fb132659aa90203d39139deda9"/>
|
||||
<constraint firstItem="EXPO-SplashScreen" firstAttribute="trailing" secondItem="EXPO-ContainerView" secondAttribute="trailing" id="f934da460e9ab5acae3ad9987d5b676a108796c1"/>
|
||||
<constraint firstItem="EXPO-SplashScreenBackground" firstAttribute="bottom" secondItem="EXPO-ContainerView" secondAttribute="bottom" id="jkI-2V-eW5"/>
|
||||
</constraints>
|
||||
<viewLayoutGuide key="safeArea" id="Rmq-lb-GrQ"/>
|
||||
</view>
|
||||
</viewController>
|
||||
<placeholder placeholderIdentifier="IBFirstResponder" id="EXPO-PLACEHOLDER-1" userLabel="First Responder" sceneMemberID="firstResponder"/>
|
||||
@@ -42,7 +44,10 @@
|
||||
</scene>
|
||||
</scenes>
|
||||
<resources>
|
||||
<image name="SplashScreen" width="375" height="812"/>
|
||||
<image name="SplashScreenBackground" width="1" height="1"/>
|
||||
<image name="SplashScreen" width="414" height="736"/>
|
||||
<systemColor name="systemBackgroundColor">
|
||||
<color white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||
</systemColor>
|
||||
</resources>
|
||||
</document>
|
||||
</document>
|
||||
|
||||
@@ -214,7 +214,7 @@
|
||||
"MyVcsTab": {
|
||||
"generateVc": "Download ID",
|
||||
"bringYourDigitalID": "Bring Your Digital ID",
|
||||
"generateVcDescription": "To download your {{vcLabel}} tap Download {{vcLabel}} below",
|
||||
"generateVcDescription": "To download your card tap Download ID below",
|
||||
"downloadingYourId": "Downloading your card, this can take upto 5 minutes",
|
||||
"errors": {
|
||||
"savingFailed": {
|
||||
|
||||
@@ -687,6 +687,10 @@ export const scanMachine =
|
||||
readyForBluetoothStateCheck: () => true,
|
||||
}),
|
||||
|
||||
setBleError: assign({
|
||||
bleError: (_context, event) => event.bleError,
|
||||
}),
|
||||
|
||||
setReason: model.assign({
|
||||
reason: (_context, event) => event.reason,
|
||||
}),
|
||||
@@ -1016,18 +1020,7 @@ export const scanMachine =
|
||||
},
|
||||
|
||||
guards: {
|
||||
isOpenIdQr: (_context, event) => {
|
||||
// don't scan if QR is offline and Google Nearby is enabled
|
||||
if (Platform.OS === 'ios' && !event.params.includes('OPENID4VP://'))
|
||||
return false;
|
||||
|
||||
try {
|
||||
const pk = event.params.split('OPENID4VP://')[1];
|
||||
return pk != '';
|
||||
} catch (e) {
|
||||
return false;
|
||||
}
|
||||
},
|
||||
isOpenIdQr: (_context, event) => event.params.includes('OPENID4VP://'),
|
||||
|
||||
isQrLogin: (_context, event) => {
|
||||
let linkCode = '';
|
||||
|
||||
|
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 45 KiB |
@@ -1,7 +1,7 @@
|
||||
import React from 'react';
|
||||
import { useTranslation } from 'react-i18next';
|
||||
import { Logo } from '../components/Logo';
|
||||
import { Button, Centered, Column, Text } from '../components/ui';
|
||||
import { Button, HorizontallyCentered, Column } from '../components/ui';
|
||||
import { Theme } from '../components/ui/styleUtils';
|
||||
import { RootRouteProps } from '../routes';
|
||||
import { useWelcomeScreen } from './WelcomeScreenController';
|
||||
@@ -15,10 +15,9 @@ export const WelcomeScreen: React.FC<RootRouteProps> = (props) => {
|
||||
fill
|
||||
padding="32 32 0"
|
||||
backgroundColor={Theme.Colors.whiteBackgroundColor}>
|
||||
<Centered fill>
|
||||
<HorizontallyCentered fill>
|
||||
<Logo height={182} />
|
||||
<Text margin="16 0 0 0">{t('title')}</Text>
|
||||
</Centered>
|
||||
</HorizontallyCentered>
|
||||
<Button
|
||||
margin="0 0 32"
|
||||
title={controller.isSettingUp ? t('getStarted') : t('unlockApp')}
|
||||
|
||||