---
# System prepended metadata

title: 'Splash screen, inappbrowser fix, other changes - Fri/Sat 20th-21st Nov, 2020'
tags: [inappbrowser, C+, splashscreen, android, programmingjournal, '2020']

---

# Splash screen, inappbrowser fix, other changes - Fri/Sat 20th-21st Nov, 2020

## Inappbrowser

I had an issue with the inappbrowser (that I am using to show my company's login flow) was closing when the Android app was backgrounded. I finally managed to find a fix:


```typescript=
const iosOptions: InAppBrowserOptions = {
    modalPresentationStyle: 'fullScreen',
    modalEnabled: true,
    ephemeralWebSession: true,
}

const androidOptions: InAppBrowserOptions = {
    showTitle: false,
    toolbarColor: 'white',
    secondaryToolbarColor: 'white',
    forceCloseOnRedirection: false,
    showInRecents: true,
    enableUrlBarHiding: true,
    enableDefaultShare: false,
    hasBackButton: false,
}

// ...

const openIdentityPortal: OpenIdentityPortalArgs = async (client_id, scopes, redirect_uri, auth_endpoint) => {
    const url = 'www.auth.com'

    const response = await InAppBrowser.openAuth(
        url,
        redirect_uri,
        Platform.OS === 'ios' ? iosOptions : androidOptions
    )

    // user presses close button, return to welcome screen
    if (response.type === 'cancel') {
        navigation.canGoBack() && navigation.goBack()
    }

    if (response.type === 'success' && response.url && response.url.includes('code=')) {
        // set authStatus to unknown show splashscreen and prevent screen flickering when access token request is in progress
        setAuthStatus('unknown')
        Linking.openURL(redirect_uri)
        // return only the auth_code
        return extractAuthCode(response.url)
    }
    // TODO: prevent useIdentity hook from doing token exchange request if auth code retrieval is not successful
    throw new Error('Could not get auth code from log in process')
}
```

## Splash screen
I also added a splash screen on the native side for iOS and Android. It was straightforward.

Where I differed from other setups is I didn't want to add an extra dependency simply to prevent the white flash that happens just before the JS assets have all finishd loading. Instead, I simply set the root app background colour as the same as my splashscreen.

This means that the white flash is replaced, but it doesn't show the splash screen logo. On a production app, this is barely noticeable, and is, I think, a fair tradeoff so that I don't have to bloat the app with extra deps.

**iOS:** adjust `AppDelegate.m`:
```objectivec=
rootView.backgroundColor = [[UIColor alloc] initWithRed:0.98f green:0.42f blue:0.09f alpha:1];

```

**Android**: adjust `styles.xml`:
```xml=
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <item name="android:textColor">@color/black</item>
    <!-- Set root app background color same as splashscreen -->
    <item name="android:windowBackground">@color/splashscreen_bg</item>
    <item name="android:statusBarColor">@color/black</item>
</style>
```

###### tags: `programmingjournal` `2020` `C+` `splashscreen` `inappbrowser` `android`