Matthias Nott
2026-03-08 d832f656599b153be8826bc43e1832209b2a1bf6
app/chat.tsx
....@@ -10,6 +10,7 @@
1010 import { CommandBar, TextModeCommandBar } from "../components/chat/CommandBar";
1111 import { ImageCaptionModal } from "../components/chat/ImageCaptionModal";
1212 import { StatusDot } from "../components/ui/StatusDot";
13
+import { IncomingToast } from "../components/ui/IncomingToast";
1314 import { SessionDrawer } from "../components/SessionDrawer";
1415 import { playAudio, stopPlayback, isPlaying, onPlayingChange } from "../services/audio";
1516
....@@ -20,7 +21,7 @@
2021 }
2122
2223 export default function ChatScreen() {
23
- const { messages, sendTextMessage, sendVoiceMessage, sendImageMessage, deleteMessage, clearMessages, isTyping, requestScreenshot, sessions, loadMoreMessages, hasMoreMessages } =
24
+ const { messages, sendTextMessage, sendVoiceMessage, sendImageMessage, deleteMessage, clearMessages, isTyping, requestScreenshot, sessions, switchSession, loadMoreMessages, hasMoreMessages, incomingToast, dismissToast } =
2425 useChat();
2526 const { status } = useConnection();
2627 const { colors, mode, cycleMode } = useTheme();
....@@ -34,6 +35,13 @@
3435 useEffect(() => {
3536 return onPlayingChange((uri) => setAudioPlaying(uri !== null));
3637 }, []);
38
+
39
+ const handleToastTap = useCallback(() => {
40
+ if (incomingToast) {
41
+ switchSession(incomingToast.sessionId);
42
+ dismissToast();
43
+ }
44
+ }, [incomingToast, switchSession, dismissToast]);
3745
3846 const handleScreenshot = useCallback(() => {
3947 requestScreenshot();
....@@ -252,7 +260,16 @@
252260 </View>
253261
254262 {/* Message list */}
255
- <View style={{ flex: 1 }}>
263
+ <View style={{ flex: 1, position: "relative" }}>
264
+ {/* Toast for other-session incoming messages */}
265
+ {incomingToast && (
266
+ <IncomingToast
267
+ sessionName={incomingToast.sessionName}
268
+ preview={incomingToast.preview}
269
+ onTap={handleToastTap}
270
+ onDismiss={dismissToast}
271
+ />
272
+ )}
256273 {messages.length === 0 ? (
257274 <View style={{ flex: 1, alignItems: "center", justifyContent: "center", gap: 16 }}>
258275 <View