From a831f0d92f5f3a5819b63653b3a0f9429cc097e0 Mon Sep 17 00:00:00 2001 From: trinko Date: Mon, 13 Jan 2025 20:38:25 +0100 Subject: [PATCH] Fix --- app.config.js | 2 +- app/connect.jsx | 36 +++++++++++++++++++++++++++--------- package.json | 2 +- 3 files changed, 29 insertions(+), 11 deletions(-) diff --git a/app.config.js b/app.config.js index 4144b87..126779a 100644 --- a/app.config.js +++ b/app.config.js @@ -1,5 +1,5 @@ const appName = "giua@school/app"; -const appVersion = "3.1.1"; +const appVersion = "3.1.2"; export default { "expo": { diff --git a/app/connect.jsx b/app/connect.jsx index bc57010..48cd692 100644 --- a/app/connect.jsx +++ b/app/connect.jsx @@ -7,7 +7,7 @@ import Constants from 'expo-constants'; import { Stack, useRouter } from 'expo-router'; import * as SecureStore from 'expo-secure-store'; -import { useEffect, useState } from 'react'; +import { useEffect, useRef, useState } from 'react'; import { Text, View } from 'react-native'; import { WebView } from 'react-native-webview'; import Pressable from '../components/PressableComponent'; @@ -27,15 +27,22 @@ export default function ConnectScreen() { const [web, setWeb] = useState(''); const [stage, setStage] = useState(0); const [error, setError] = useState(''); + const [currentUrl, setCurrentUrl] = useState(''); const userAgent = 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36 ' + Constants.expoConfig.extra.version; const router = useRouter(); + const webViewRef = useRef(null); + const timerRef = useRef(null); // gestione cambio pagina const navigationChanged = (event) => { - const url = event.url + (event.url.endsWith('/') ? '' : '/'); - if (url == web) { - // login effettuato con successo - setStage(2); + const url = event.nativeEvent.url + (event.nativeEvent.url.endsWith('/') ? '' : '/'); + if (event.nativeEvent.data == 'CLOCK' && !event.nativeEvent.loading && url != currentUrl) { + setCurrentUrl(url); + if (url == web) { + // login effettuato con successo + clearInterval(timerRef.current); + setStage(2); + } } }; @@ -93,6 +100,16 @@ export default function ConnectScreen() { } } + // inizia la procedura di registrazione + const start = () => { + setStage(1); + // imposta il timer per inviare un segnale dalla WebView all'app + timerRef.current = setInterval(() => { + webViewRef.current.injectJavaScript(`window.ReactNativeWebView.postMessage('CLOCK'); true;`); + }, 100); + return () => clearInterval(timerRef.current); + }; + // eseguito solo al primo render useEffect(() => { // legge dati dalla memoria @@ -123,12 +140,12 @@ export default function ConnectScreen() { Dovrai ora effettuare il normale accesso al registro elettronico: - subito dopo, l'applicazione prenderĂ  il controllo per eseguire - la registrazione del tuo dispositivo. + successivamente non fare niente, ma rimani in attesa che l'applicazione prenda il controllo + per eseguire la registrazione del tuo dispositivo. setStage(1)}> + onPress={start}> Associa il dispositivo @@ -144,12 +161,13 @@ export default function ConnectScreen() { setError('Errore di connessione\n' + event.nativeEvent.description); setStage(9); }} - onNavigationStateChange={navigationChanged} + onMessage={navigationChanged} startInLoadingState={true} domStorageEnabled={true} javaScriptEnabled={true} userAgent={userAgent} renderLoading={() => } + ref={webViewRef} /> )} {stage == 2 && ( diff --git a/package.json b/package.json index a939f57..624d271 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "giuaschool-app", - "version": "3.1.1", + "version": "3.1.2", "main": "expo-router/entry", "scripts": { "start": "expo start",