diff --git a/packages/mobile/html/Web.bundle/src/index.html b/packages/mobile/html/Web.bundle/src/index.html index ef286487b..f6e657294 100644 --- a/packages/mobile/html/Web.bundle/src/index.html +++ b/packages/mobile/html/Web.bundle/src/index.html @@ -16,7 +16,14 @@ window.plansUrl = "https://standardnotes.com/plans"; window.dashboardUrl = "https://standardnotes.com/dashboard"; - + diff --git a/packages/mobile/src/MobileWebAppContainer.tsx b/packages/mobile/src/MobileWebAppContainer.tsx index a9a7ec4b1..7d1662ec6 100644 --- a/packages/mobile/src/MobileWebAppContainer.tsx +++ b/packages/mobile/src/MobileWebAppContainer.tsx @@ -1,6 +1,6 @@ import { ReactNativeToWebEvent } from '@standardnotes/snjs' import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react' -import { Keyboard, Platform } from 'react-native' +import { Button, Keyboard, Platform, Text, View } from 'react-native' import VersionInfo from 'react-native-version-info' import { WebView, WebViewMessageEvent } from 'react-native-webview' import { OnShouldStartLoadWithRequest } from 'react-native-webview/lib/WebViewTypes' @@ -34,6 +34,8 @@ const MobileWebAppContents = ({ destroyAndReload }: { destroyAndReload: () => vo [androidBackHandlerService, colorSchemeService, stateService], ) + const [showAndroidWebviewUpdatePrompt, setShowAndroidWebviewUpdatePrompt] = useState(false) + useEffect(() => { const removeStateServiceListener = stateService.addEventObserver((event: ReactNativeToWebEvent) => { webViewRef.current?.postMessage(JSON.stringify({ reactNativeEvent: event, messageType: 'event' })) @@ -228,6 +230,10 @@ const MobileWebAppContents = ({ destroyAndReload }: { destroyAndReload: () => vo const onMessage = (event: WebViewMessageEvent) => { const message = event.nativeEvent.data + if (message === 'appLoadError' && Platform.OS === 'android') { + setShowAndroidWebviewUpdatePrompt(true) + return + } try { const functionData = JSON.parse(message) void onFunctionMessage(functionData.functionName, functionData.messageId, functionData.args) @@ -277,6 +283,47 @@ const MobileWebAppContents = ({ destroyAndReload }: { destroyAndReload: () => vo const requireInlineMediaPlaybackForMomentsFeature = true const requireMediaUserInteractionForMomentsFeature = false + if (showAndroidWebviewUpdatePrompt) { + return ( + + + Could not load app + + + Please make sure your Android System Webview is updated to the latest version + +