diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml index 8ee462b..05c6410 100644 --- a/android/app/src/main/AndroidManifest.xml +++ b/android/app/src/main/AndroidManifest.xml @@ -4,15 +4,18 @@ + + + + + - - + - { registers, activeRegister, selectedRegisters, + viewingRegisters, + setViewingRegisters, setDefaultTargetPercentage, updateAllRegistersTargetPercentage, selectedSchedules, @@ -54,7 +58,15 @@ const SettingsScreen: React.FC = () => { const [newTargetValue, setNewTargetValue] = useState(defaultTargetPercentage.toString()); const [localLeadTime, setLocalLeadTime] = useState(notificationLeadTime); const [localSchedules, setLocalSchedules] = useState(selectedSchedules); - + // CSV filename modal state + const [showFileNameModal, setShowFileNameModal] = useState(false); + const [csvFileName, setCsvFileName] = useState('MySchedule'); + const [isSaving, setIsSaving] = useState(false); + + const registerOptions = Object.keys(registers).map(key => ({ + id: key, + name: registers[parseInt(key)].name, + })); // Effects useEffect(() => { setAppVersion(packageJson.version); @@ -103,33 +115,33 @@ const SettingsScreen: React.FC = () => { }; // Export functionality handlers - const handleSaveScheduleToDevice = async () => { + // Show modal to enter filename + const handleSaveScheduleToDevice = () => { + setShowFileNameModal(true); + }; + + // Actually save with filename + const handleConfirmSaveFileName = async () => { + setIsSaving(true); try { - console.log('Starting save to device...'); - console.log('Available registers:', Object.keys(registers)); - console.log('Selected registers from store:', selectedRegisters); - - // Use all registers if no specific selection is available - const currentSelectedRegisters = selectedRegisters && selectedRegisters.length > 0 - ? selectedRegisters + const currentSelectedRegisters = selectedRegisters && selectedRegisters.length > 0 + ? selectedRegisters : Object.keys(registers).map(key => parseInt(key, 10)); - - console.log('Using registers for export:', currentSelectedRegisters); - if (currentSelectedRegisters.length === 0) { Alert.alert('No Data', 'No registers found to export. Please create some schedules first.'); + setIsSaving(false); return; } - - await saveScheduleToDevice({ - selectedRegisters: currentSelectedRegisters, - registers - }); + await saveScheduleToDeviceWithName({ + selectedRegisters: currentSelectedRegisters, + registers + }, csvFileName); + setShowFileNameModal(false); } catch (error) { - console.error('Save to device error:', error); const errorMessage = error instanceof Error ? error.message : 'Unknown error'; Alert.alert('Error', `Failed to save schedule to device: ${errorMessage}`); } + setIsSaving(false); }; const handleShareSchedule = async () => { @@ -137,22 +149,22 @@ const SettingsScreen: React.FC = () => { console.log('Starting share schedule...'); console.log('Available registers:', Object.keys(registers)); console.log('Selected registers from store:', selectedRegisters); - + // Use all registers if no specific selection is available - const currentSelectedRegisters = selectedRegisters && selectedRegisters.length > 0 - ? selectedRegisters + const currentSelectedRegisters = selectedRegisters && selectedRegisters.length > 0 + ? selectedRegisters : Object.keys(registers).map(key => parseInt(key, 10)); - + console.log('Using registers for share:', currentSelectedRegisters); - + if (currentSelectedRegisters.length === 0) { Alert.alert('No Data', 'No registers found to share. Please create some schedules first.'); return; } - - await shareSchedule({ - selectedRegisters: currentSelectedRegisters, - registers + + await shareSchedule({ + selectedRegisters: currentSelectedRegisters, + registers }); } catch (error) { console.error('Share schedule error:', error); @@ -164,7 +176,7 @@ const SettingsScreen: React.FC = () => { const handleImportSchedule = async () => { try { console.log('Starting CSV import...'); - + if (!registers[activeRegister]) { Alert.alert('Error', 'No active register found. Please create a register first.'); return; @@ -173,7 +185,7 @@ const SettingsScreen: React.FC = () => { // Use raw CSV content instead of parsed data const csvContent = await pickCSVFileRaw(); console.log('Raw CSV Content received:', csvContent); - + if (!csvContent) { console.log('No CSV content received (user cancelled or error)'); return; @@ -238,7 +250,6 @@ const SettingsScreen: React.FC = () => { {registerInfo.name} {registerInfo.totalCards} subjects - {/* Preferences Section */} Preferences @@ -294,6 +305,7 @@ const SettingsScreen: React.FC = () => { + {/* Notifications & Alerts Section */} Notifications & Alerts @@ -333,16 +345,15 @@ const SettingsScreen: React.FC = () => { />