Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 6 additions & 3 deletions android/app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -4,15 +4,18 @@
<!-- Internet access -->
<uses-permission android:name="android.permission.INTERNET" />

<!-- For Android 13+ (API 33+) -->
<uses-permission android:name="android.permission.READ_MEDIA_IMAGES" />
<uses-permission android:name="android.permission.READ_MEDIA_VIDEO" />
<uses-permission android:name="android.permission.READ_MEDIA_AUDIO" />

<!-- For Android 10 and below -->
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"
android:maxSdkVersion="29" />

<!-- For Android 11+ -->
<!-- Only use MANAGE_EXTERNAL_STORAGE if you need full access, else rely on SAF -->
<!-- Optional: only if your app is a file manager or needs all-file access -->
<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" />

<application
android:name=".MainApplication"
android:label="@string/app_name"
Expand Down
109 changes: 59 additions & 50 deletions src/screens/home/HomeScreen.tsx
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
// src/screens/home/HomeScreen.tsx

import React, {useState, useEffect} from 'react';
import {
View,
Expand Down Expand Up @@ -33,7 +35,7 @@ const HomeScreen: React.FC<HomeScreenProps> = ({
navigation,
toggleSidebar,
}: any) => {
const {registers, activeRegister, updatedAt} = useStore();
const {registers, activeRegister, viewingRegisters, updatedAt} = useStore();
const [currentEvents, setCurrentEvents] = useState<EventInfo[]>([]);
const [upcomingEvents, setUpcomingEvents] = useState<EventInfo[]>([]);

Expand Down Expand Up @@ -63,60 +65,68 @@ const HomeScreen: React.FC<HomeScreenProps> = ({
return now.getHours() * 60 + now.getMinutes();
};

// Process events from current register
// Process events from all viewing registers
useEffect(() => {
if (!registers[activeRegister]?.cards) {
setCurrentEvents([]);
setUpcomingEvents([]);
return;
}
const processEvents = () => {
const currentDay = getCurrentDayKey();
const currentTimeMinutes = getCurrentTimeInMinutes();
const allEvents: EventInfo[] = [];

const currentDay = getCurrentDayKey();
const currentTimeMinutes = getCurrentTimeInMinutes();
const allEvents: EventInfo[] = [];
// Ensure viewingRegisters is an array before processing
if (!Array.isArray(viewingRegisters)) {
return;
}

// Extract all events for today from current register
registers[activeRegister].cards.forEach((card: CardInterface) => {
const todaySlots = card.days[currentDay] || [];
viewingRegisters.forEach(registerId => {
const register = registers[registerId];
// Ensure the register and its cards exist and are in the correct format
if (register && Array.isArray(register.cards)) {
register.cards.forEach((card: CardInterface) => {
const todaySlots = card.days[currentDay] || [];

todaySlots.forEach((slot: Slots, index: number) => {
const startMinutes = timeToMinutes(slot.start);
const endMinutes = timeToMinutes(slot.end);
todaySlots.forEach((slot: Slots, index: number) => {
const startMinutes = timeToMinutes(slot.start);
const endMinutes = timeToMinutes(slot.end);

allEvents.push({
id: `${card.id}-${currentDay}-${index}`,
title: card.title,
startTime: slot.start,
endTime: slot.end,
roomName: slot.roomName || undefined,
color: card.tagColor,
cardId: card.id,
registerId: activeRegister,
isRunning:
currentTimeMinutes >= startMinutes &&
currentTimeMinutes <= endMinutes,
});
allEvents.push({
id: `${card.id}-${currentDay}-${index}-${registerId}`,
title: card.title,
startTime: slot.start,
endTime: slot.end,
roomName: slot.roomName || undefined,
color: card.tagColor,
cardId: card.id,
registerId: registerId,
isRunning:
currentTimeMinutes >= startMinutes &&
currentTimeMinutes <= endMinutes,
});
});
});
}
});
});

// Sort events by start time
allEvents.sort(
(a, b) => timeToMinutes(a.startTime) - timeToMinutes(b.startTime),
);
// Sort events by start time
allEvents.sort(
(a, b) => timeToMinutes(a.startTime) - timeToMinutes(b.startTime),
);

// Separate current and upcoming events
const running = allEvents.filter(event => event.isRunning);
const upcoming = allEvents
.filter(
event =>
!event.isRunning &&
timeToMinutes(event.startTime) > currentTimeMinutes,
)
.slice(0, 2); // Next 2 upcoming events

// Separate current and upcoming events
const running = allEvents.filter(event => event.isRunning);
const upcoming = allEvents
.filter(
event =>
!event.isRunning &&
timeToMinutes(event.startTime) > currentTimeMinutes,
)
.slice(0, 2); // Next 2 upcoming events
setCurrentEvents(running);
setUpcomingEvents(upcoming);
};

setCurrentEvents(running);
setUpcomingEvents(upcoming);
}, [registers, activeRegister, updatedAt]);
processEvents();
}, [registers, viewingRegisters, updatedAt]);

// Navigate to card details
const handleEventPress = (event: EventInfo) => {
Expand Down Expand Up @@ -195,9 +205,8 @@ const HomeScreen: React.FC<HomeScreenProps> = ({
<View style={styles.emptyContainer}>
<Text style={styles.emptyText}>No events scheduled for today</Text>
<Text style={styles.emptySubtext}>
Add subjects to{' '}
{registers[activeRegister]?.name || 'your register'} to see your
schedule
Please check that your selected registers have subjects scheduled
for today.
</Text>
</View>
)}
Expand Down Expand Up @@ -324,4 +333,4 @@ const styles = StyleSheet.create({
},
});

export default HomeScreen;
export default HomeScreen;
Loading