# Use Case 1.2 Open the app
## Overview
| Aspect | Description |
| ---------------------------- |---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| **Summary** | The user opens the app manually or follows a universal link. The system checks the app version is valid, or forces the user to update.
When valid, the system redirects to app introduction or app unlock. |
| **Goal** | Opening the app. |
| **Preconditions** |
- App is installed
- App version is allowed
|
| **Postconditions** | *None* |
| **Triggered by** | - User launches or resumes the app manually.
- User launches or resumes the app by following a universal link.
|
| **Additional Documentation** | - [App Startup](../../architecture/use-cases/mobile-app-startup.md)
- [iOS App Activations](https://developer.apple.com/documentation/xcode/reducing-your-app-s-launch-time)
- [Android App startup time](https://developer.android.com/topic/performance/vitals/launch-time)
|
| **Possible errors** | - [Device Insecure](../errors.md#device-insecure)
|
| **Logical test cases** | - [LTC32 Open closed app](../logical-test-cases.md#ltc32)
- [LTC33 Open app via universal link](../logical-test-cases.md#ltc33)
- [LTC34 Open app with unregistered wallet](../logical-test-cases.md#ltc34)
- [LTC44 Wallet not created when universal link is invoked](../logical-test-cases.md#ltc44)
|
---
## Flow
| # | Description | Next |
|---------|--------------------------------------------------------------------------------------------------------------|-------------------------------------------------------------|
| **1** | **PRIMARY SCENARIO** | |
| **1.1** | **System determines app startup state** | |
| 1.1a | Case: App launches (iOS) or starts cold or warm (Android)1 | 2 |
| 1.1b | Case: App resumes (iOS) or starts hot (Android)2 | 3 |
| **2** | **WHEN APP LAUNCHES** | |
| **2.1** | **System displays screen 'Splash screen'** | |
| 2.1a | Event: 1 second passes | 2.2 |
| **2.2** | **System determines whether app is rooted** | |
| 2.2a | Case: Device is not rooted | 3.2 |
| 2.2b | Case: Device is rooted | Error flow: [Device Insecure](../errors.md#device-insecure) |
| **2.3** | **System executes partial flow [PF1.4 Apply update policy](../partial-flows/PF1.4_ApplyAppUpdatePolicy.md)** | |
| 2.3a | Result: App version is allowed | 2.3 |
| **2.4** | **System determines wallet status** | |
| 2.4a | Case: Wallet is active | 2.5 |
| 2.4b | Case: Wallet is revoked by user | 4 |
| 2.4c | Case: Wallet ID is revoked by admin | 5 |
| 2.4d | Case: Wallet recovery code is revoked by admin | 6 |
| 2.4e | Case: Wallet solution is revoked by admin | 7 |
| **2.5** | **System determines whether remote PIN is set up** | |
| 2.5a | Case: User has setup a remote PIN | Go to: [UC2.3 Unlock the app](UC2.3_UnlockTheApp.md) |
| 2.5b | Case: User has not setup a remote PIN | Go to: [UC1.1 Introduce the app](UC1.1_IntroduceTheApp.md) |
| **3** | **WHEN APP RESUMES** | |
| **3.1** | **System determines whether remote PIN is set up** | |
| 3.1a | Case: User has setup a remote PIN | 3.2 |
| 3.1b | Case: User has not setup a remote PIN | Resume3 |
| **3.2** | **System determines whether app is locked** | |
| 3.2a | Case: Wallet is unlocked | 3.3 |
| 3.2b | Case: Wallet is locked | Go to: [UC2.3 Unlock the app](UC2.3_UnlockTheApp.md) |
| **3.3** | **System determines whether user has obtained PID** | |
| 3.3a | Case: User has obtained PID | 3.4 |
| 3.3a | Case: User has not obtained PID | Resume3 |
| **3.4** | **System executes partial flow [PF2.7 Resolve a universal link](../partial-flows/PF2.7_ResolveUniversalLink.md)** | |
| 3.4a | Result: No (valid) universal link | Resume3 |
| 3.4b | Result: Wallet rejects universal link | Resume3 |
| **4** | **WHEN WALLET IS REVOKED BY USER** | |
| **4.1** | **System displays screen 'Your wallet was deleted'**- Message: You deleted this wallet with your deletion code
li>Actions: To help desk, Help
| |
| 4.1a | User selects To help desk | 4.2 |
| 4.1b | User selects Help | Show placeholder 'under construction' |
| **4.2** | **System displays screen 'Contact'**- Message: Check our website or contact us
li>Actions: Call, Back
| |
| 4.2a | User selects Call
→ System opens phone and suspends app | |
| 4.2b | User selects Back | Back |
| **5** | **WHEN WALLET ID IS REVOKED BY ADMIN** | |
| **5.1** | **System displays screen 'Your wallet is blocked'**- Message: Close this app or creat e a new wallet to use the app again.
li>Actions: Create new NL Wallet, To help desk, Help
| |
| 5.1a | User selects To help desk | 5.2 |
| 5.1b | User selects Help | Show placeholder 'under construction' |
| 5.1c | User selects Create new NL Wallet | Go to: [UC1.1 Introduce the app](UC1.1_IntroduceTheApp.md) |
| **5.2** | **System displays screen 'Contact'**- Message: Check our website or contact us
li>Actions: Call, Back
| |
| 5.2a | User selects Call
→ System opens phone and suspends app | |
| 5.2b | User selects Back | Back |
| **6** | **WHEN WALLET RECOVERY CODE IS REVOKED BY ADMIN** | |
| **6.1** | **System displays screen 'Your have been blocked'**- Message: You cannot use NL WALLET right now.
li>Actions: To help desk, Help
| |
| 6.1a | User selects To help desk | 6.2 |
| 6.1b | User selects Help | Show placeholder 'under construction' |
| **6.2** | **System displays screen 'Contact'**- Message: Check our website or contact us
li>Actions: Call, Back
| |
| 6.2a | User selects Call
→ System opens phone and suspends app | |
| 6.2b | User selects Back | Back |
| **7** | **WHEN WALLET SOLUTION IS REVOKED BY ADMIN** | |
| **7.1** | **System displays screen 'NL Wallet can no longer be used'**- Message: You cannot use NL WALLET right now due to a technical problem on our side.
li>Actions: Read more information, Help
| |
| 7.1a | User selects Read more information | 7.2 |
| 7.1b | User selects Help | Show placeholder 'under construction' |
| **7.2** | **System displays screen 'More information'** | |
| 7.2a | User selects Back | Back |
1. We use the iOS terminology 'launch' to that no process was active when opening the app. In Android, this matches the 'cold startup' or 'warm startup' processes. Even without an active process, some resources may already be loaded into memory.
2. We use the iOS terminology 'resume' to that the app process was already active when opening the app. In Android, this matches the 'hot startup' process.
3. Resume the state when the app backgrounded/suspended.