mirror of
https://github.com/google-gemini/gemini-cli.git
synced 2026-03-11 14:40:52 -07:00
Only show screen reader notice once (#12247)
This commit is contained in:
@@ -5,41 +5,86 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
import { Box, Text, useIsScreenReaderEnabled } from 'ink';
|
import { Box, Text, useIsScreenReaderEnabled } from 'ink';
|
||||||
|
import { useEffect, useState } from 'react';
|
||||||
import { useAppContext } from '../contexts/AppContext.js';
|
import { useAppContext } from '../contexts/AppContext.js';
|
||||||
import { useUIState } from '../contexts/UIStateContext.js';
|
import { useUIState } from '../contexts/UIStateContext.js';
|
||||||
import { theme } from '../semantic-colors.js';
|
import { theme } from '../semantic-colors.js';
|
||||||
import { StreamingState } from '../types.js';
|
import { StreamingState } from '../types.js';
|
||||||
import { UpdateNotification } from './UpdateNotification.js';
|
import { UpdateNotification } from './UpdateNotification.js';
|
||||||
|
|
||||||
import { GEMINI_DIR } from '@google/gemini-cli-core';
|
import { GEMINI_DIR, Storage } from '@google/gemini-cli-core';
|
||||||
import { homedir } from 'node:os';
|
|
||||||
|
import * as fs from 'node:fs/promises';
|
||||||
|
import os from 'node:os';
|
||||||
import path from 'node:path';
|
import path from 'node:path';
|
||||||
|
|
||||||
const settingsPath = path.join(homedir(), GEMINI_DIR, 'settings.json');
|
const settingsPath = path.join(os.homedir(), GEMINI_DIR, 'settings.json');
|
||||||
|
|
||||||
|
const screenReaderNudgeFilePath = path.join(
|
||||||
|
Storage.getGlobalTempDir(),
|
||||||
|
'seen_screen_reader_nudge.json',
|
||||||
|
);
|
||||||
|
|
||||||
export const Notifications = () => {
|
export const Notifications = () => {
|
||||||
const { startupWarnings } = useAppContext();
|
const { startupWarnings } = useAppContext();
|
||||||
const { initError, streamingState, updateInfo } = useUIState();
|
const { initError, streamingState, updateInfo } = useUIState();
|
||||||
|
|
||||||
const isScreenReaderEnabled = useIsScreenReaderEnabled();
|
const isScreenReaderEnabled = useIsScreenReaderEnabled();
|
||||||
const showStartupWarnings = startupWarnings.length > 0;
|
const showStartupWarnings = startupWarnings.length > 0;
|
||||||
const showInitError =
|
const showInitError =
|
||||||
initError && streamingState !== StreamingState.Responding;
|
initError && streamingState !== StreamingState.Responding;
|
||||||
|
|
||||||
|
const [hasSeenScreenReaderNudge, setHasSeenScreenReaderNudge] = useState<
|
||||||
|
boolean | undefined
|
||||||
|
>(undefined);
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
const checkScreenReaderNudge = async () => {
|
||||||
|
try {
|
||||||
|
await fs.access(screenReaderNudgeFilePath);
|
||||||
|
setHasSeenScreenReaderNudge(true);
|
||||||
|
} catch {
|
||||||
|
setHasSeenScreenReaderNudge(false);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
checkScreenReaderNudge();
|
||||||
|
}, []);
|
||||||
|
|
||||||
|
const showScreenReaderNudge =
|
||||||
|
isScreenReaderEnabled && !hasSeenScreenReaderNudge;
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
const writeScreenReaderNudgeFile = async () => {
|
||||||
|
if (showScreenReaderNudge) {
|
||||||
|
try {
|
||||||
|
await fs.mkdir(path.dirname(screenReaderNudgeFilePath), {
|
||||||
|
recursive: true,
|
||||||
|
});
|
||||||
|
await fs.writeFile(screenReaderNudgeFilePath, 'true');
|
||||||
|
} catch (error) {
|
||||||
|
console.error('Error storing screen reader nudge', error);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
writeScreenReaderNudgeFile();
|
||||||
|
}, [showScreenReaderNudge]);
|
||||||
|
|
||||||
if (
|
if (
|
||||||
!showStartupWarnings &&
|
!showStartupWarnings &&
|
||||||
!showInitError &&
|
!showInitError &&
|
||||||
!updateInfo &&
|
!updateInfo &&
|
||||||
!isScreenReaderEnabled
|
!showScreenReaderNudge
|
||||||
) {
|
) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
{isScreenReaderEnabled && (
|
{showScreenReaderNudge && (
|
||||||
<Text>
|
<Text>
|
||||||
You are currently in screen reader-friendly view. To switch out, open{' '}
|
You are currently in screen reader-friendly view. To switch out, open{' '}
|
||||||
{settingsPath} and remove the entry for {'"screenReader"'}.
|
{settingsPath} and remove the entry for {'"screenReader"'}. This will
|
||||||
|
disappear on next run.
|
||||||
</Text>
|
</Text>
|
||||||
)}
|
)}
|
||||||
{updateInfo && <UpdateNotification message={updateInfo.message} />}
|
{updateInfo && <UpdateNotification message={updateInfo.message} />}
|
||||||
|
|||||||
Reference in New Issue
Block a user