diff --git a/App.tsx b/App.tsx index d4b14cb..4108164 100644 --- a/App.tsx +++ b/App.tsx @@ -1,5 +1,5 @@ import React, {useState, useCallback, useEffect} from 'react'; -import {BackHandler} from 'react-native'; +import {Alert, BackHandler} from 'react-native'; import HomeScreen from './src/screens/HomeScreen'; import ScanScreen from './src/screens/ScanScreen'; import ReviewScreen from './src/screens/ReviewScreen'; @@ -38,6 +38,13 @@ export default function App() { [createDocument], ); + const confirmDiscardReview = useCallback(() => { + Alert.alert('Discard scan?', 'Going back will discard all scanned pages.', [ + {text: 'Stay', style: 'cancel'}, + {text: 'Discard', style: 'destructive', onPress: goHome}, + ]); + }, [goHome]); + const handleView = useCallback((doc: ScannedDocument) => { setViewingDoc(doc); setScreen('viewer'); @@ -46,11 +53,22 @@ export default function App() { useEffect(() => { if (screen === 'home') return; const sub = BackHandler.addEventListener('hardwareBackPress', () => { - goHome(); - return true; + if (screen === 'scan') { + goHome(); + return true; + } + if (screen === 'review') { + confirmDiscardReview(); + return true; + } + if (screen === 'viewer') { + goHome(); + return true; + } + return false; }); return () => sub.remove(); - }, [screen, goHome]); + }, [screen, goHome, confirmDiscardReview]); const handleRenameFromViewer = useCallback( (name: string) => { @@ -74,7 +92,7 @@ export default function App() { pages={pendingPages} onSave={handleSaveDocument} onAddMore={() => setScreen('scan')} - onCancel={goHome} + onCancel={confirmDiscardReview} /> ); } diff --git a/src/screens/ReviewScreen.tsx b/src/screens/ReviewScreen.tsx index 15e33c4..b4b8194 100644 --- a/src/screens/ReviewScreen.tsx +++ b/src/screens/ReviewScreen.tsx @@ -8,6 +8,7 @@ import { StyleSheet, Dimensions, StatusBar, + Alert, } from 'react-native'; import {ScannedPage, FilterMode} from '../types'; import FilterPicker from '../components/FilterPicker'; diff --git a/src/screens/ScanScreen.tsx b/src/screens/ScanScreen.tsx index 131471f..a681c59 100644 --- a/src/screens/ScanScreen.tsx +++ b/src/screens/ScanScreen.tsx @@ -2,7 +2,6 @@ import React, {useState, useRef, useCallback, useEffect} from 'react'; import { View, Text, - TouchableOpacity, StyleSheet, Alert, ActivityIndicator, @@ -34,7 +33,6 @@ async function copyToPermanent(tempUri: string): Promise { export default function ScanScreen({onComplete, onCancel}: Props) { const t = useTheme(); const [scanning, setScanning] = useState(false); - const [pageCount, setPageCount] = useState(0); const pagesRef = useRef([]); const scan = useCallback(async () => { @@ -69,17 +67,8 @@ export default function ScanScreen({onComplete, onCancel}: Props) { })); pagesRef.current = [...pagesRef.current, ...newPages]; - setPageCount(pagesRef.current.length); setScanning(false); - - Alert.alert( - `${pagesRef.current.length} page${pagesRef.current.length !== 1 ? 's' : ''} scanned`, - 'Add more pages or finish?', - [ - {text: 'Add More', onPress: scan}, - {text: 'Finish', style: 'default', onPress: () => onComplete(pagesRef.current)}, - ], - ); + onComplete(pagesRef.current); } catch (err: any) { setScanning(false); Alert.alert('Scan Error', err?.message ?? 'Could not scan document.'); @@ -97,21 +86,7 @@ export default function ScanScreen({onComplete, onCancel}: Props) { {scanning && ( - Opening camera… - - )} - {!scanning && pageCount > 0 && ( - - {pageCount} - pages ready - - - Add More - - onComplete(pagesRef.current)}> - Finish - - + Processing pages… )} @@ -122,21 +97,4 @@ const styles = StyleSheet.create({ container: {flex: 1}, center: {flex: 1, alignItems: 'center', justifyContent: 'center', gap: 12}, hint: {fontSize: 15, marginTop: 12}, - count: {fontSize: 72, fontWeight: '700'}, - pagesLabel: {fontSize: 18}, - actions: {flexDirection: 'row', gap: 16, marginTop: 24}, - btnPrimary: { - backgroundColor: '#007AFF', - paddingHorizontal: 32, - paddingVertical: 14, - borderRadius: 28, - }, - btnPrimaryText: {color: '#fff', fontSize: 16, fontWeight: '600'}, - btnSecondary: { - borderWidth: 1, - paddingHorizontal: 32, - paddingVertical: 14, - borderRadius: 28, - }, - btnSecondaryText: {fontSize: 16, fontWeight: '600'}, }); diff --git a/src/screens/ViewerScreen.tsx b/src/screens/ViewerScreen.tsx index 85b68d4..09232a9 100644 --- a/src/screens/ViewerScreen.tsx +++ b/src/screens/ViewerScreen.tsx @@ -140,40 +140,49 @@ export default function ViewerScreen({document, onBack, onDelete, onRename}: Pro - {generating && ( +{generating && ( Generating PDF… )} - - - - Rename Document - - - setRenaming(false)} style={styles.modalBtn}> - Cancel - - { - if (renameText.trim()) onRename(renameText.trim()); - setRenaming(false); - }} - style={styles.modalBtn}> - Rename - + setRenaming(false)}> + setRenaming(false)}> + {}}> + + Rename Document + + + setRenaming(false)} style={styles.modalBtn}> + Cancel + + { + if (renameText.trim()) onRename(renameText.trim()); + setRenaming(false); + }} + style={styles.modalBtn}> + Rename + + - - + + );