diff --git a/app/src/screens/dev/DevSettingsScreen.tsx b/app/src/screens/dev/DevSettingsScreen.tsx
index c47655a62..09b171929 100644
--- a/app/src/screens/dev/DevSettingsScreen.tsx
+++ b/app/src/screens/dev/DevSettingsScreen.tsx
@@ -11,8 +11,8 @@ import React, {
useState,
} from 'react';
import type { StyleProp, TextStyle, ViewStyle } from 'react-native';
-import { Alert, ScrollView } from 'react-native';
-import { Adapt, Button, Select, Sheet, Text, XStack, YStack } from 'tamagui';
+import { Alert, ScrollView, TouchableOpacity } from 'react-native';
+import { Button, Sheet, Text, XStack, YStack } from 'tamagui';
import { useNavigation } from '@react-navigation/native';
import type { NativeStackScreenProps } from '@react-navigation/native-stack';
import { Check, ChevronDown, ChevronRight } from '@tamagui/lucide-icons';
@@ -187,82 +187,100 @@ function ParameterSection({
const ScreenSelector = ({}) => {
const navigation = useNavigation();
const [open, setOpen] = useState(false);
+
+ const screenList = useMemo(
+ () =>
+ (
+ Object.keys(navigationScreens) as (keyof typeof navigationScreens)[]
+ ).sort(),
+ [],
+ );
+
return (
-
+
+
+
+
+
+
+ Select screen
+
+ setOpen(false)}
+ padding="$2"
+ backgroundColor="transparent"
+ >
+
+
+
+
+ {screenList.map(item => (
+ {
+ setOpen(false);
+ navigation.navigate(item as never);
+ }}
+ >
+
+
+ {item}
+
+
+
+ ))}
+
+
+
+
+ >
);
};
diff --git a/app/src/services/logging/index.ts b/app/src/services/logging/index.ts
index 5f58a78ee..be2bb07ef 100644
--- a/app/src/services/logging/index.ts
+++ b/app/src/services/logging/index.ts
@@ -56,33 +56,11 @@ const DocumentLogger = Logger.extend('DOCUMENT');
//Native Modules
const NfcLogger = Logger.extend('NFC');
-// Collect all extended loggers for severity updates
-const extendedLoggers = [
- AppLogger,
- NotificationLogger,
- AuthLogger,
- PassportLogger,
- ProofLogger,
- SettingsLogger,
- BackupLogger,
- MockDataLogger,
- DocumentLogger,
- NfcLogger,
-];
-
// Subscribe to settings store changes to update logger severity dynamically
-// Extended loggers are independent instances, so we need to update each one
-// Note: Dynamically created loggers (e.g., in nativeLoggerBridge for unknown categories)
-// will inherit the severity at creation time but won't receive runtime updates
let previousSeverity = initialSeverity;
useSettingStore.subscribe(state => {
if (state.loggingSeverity !== previousSeverity) {
Logger.setSeverity(state.loggingSeverity);
- // Update all extended loggers since they don't inherit runtime changes
- // Extended loggers have setSeverity at runtime, even if not in type definition
- extendedLoggers.forEach(extLogger => {
- (extLogger as typeof Logger).setSeverity(state.loggingSeverity);
- });
previousSeverity = state.loggingSeverity;
}
});
diff --git a/app/tests/src/services/logging.test.ts b/app/tests/src/services/logging.test.ts
index 2c5aa3072..a141bba20 100644
--- a/app/tests/src/services/logging.test.ts
+++ b/app/tests/src/services/logging.test.ts
@@ -94,10 +94,9 @@ describe('Logging Service - Severity Updates', () => {
});
});
- it('should update severity on root logger and all extended loggers when settings change', async () => {
+ it('should update severity on root logger when settings change', async () => {
// Clear any calls from initialization
mockRootSetSeverity.mockClear();
- mockLoggerInstances.forEach(logger => logger.setSeverity.mockClear());
// Change the logging severity in the store
useSettingStore.getState().setLoggingSeverity('debug');
@@ -106,30 +105,21 @@ describe('Logging Service - Severity Updates', () => {
await new Promise(resolve => setTimeout(resolve, 10));
// Verify root logger was updated
+ // Extended loggers inherit severity from root logger automatically
expect(mockRootSetSeverity).toHaveBeenCalledTimes(1);
expect(mockRootSetSeverity).toHaveBeenCalledWith('debug');
-
- // Verify each extended logger was updated
- mockLoggerInstances.forEach(logger => {
- expect(logger.setSeverity).toHaveBeenCalledTimes(1);
- expect(logger.setSeverity).toHaveBeenCalledWith('debug');
- });
});
- it('should update each specific extended logger individually', async () => {
+ it('should update root logger severity which extends to all loggers', async () => {
mockRootSetSeverity.mockClear();
- mockLoggerInstances.forEach(logger => logger.setSeverity.mockClear());
useSettingStore.getState().setLoggingSeverity('info');
await new Promise(resolve => setTimeout(resolve, 10));
- // Verify specific loggers by name
- const specificLoggers = ['APP', 'NFC', 'PASSPORT', 'PROOF'];
- specificLoggers.forEach(loggerName => {
- const logger = mockLoggerInstances.get(loggerName);
- expect(logger).toBeDefined();
- expect(logger?.setSeverity).toHaveBeenCalledWith('info');
- });
+ // Verify root logger was updated
+ // Extended loggers (APP, NFC, PASSPORT, PROOF, etc.) inherit from root
+ expect(mockRootSetSeverity).toHaveBeenCalledTimes(1);
+ expect(mockRootSetSeverity).toHaveBeenCalledWith('info');
});
it('should update severity for all severity levels', async () => {
@@ -142,24 +132,18 @@ describe('Logging Service - Severity Updates', () => {
for (const level of severityLevels) {
mockRootSetSeverity.mockClear();
- mockLoggerInstances.forEach(logger => logger.setSeverity.mockClear());
useSettingStore.getState().setLoggingSeverity(level);
await new Promise(resolve => setTimeout(resolve, 10));
- // Verify root logger
+ // Verify root logger was updated
+ // Extended loggers inherit severity from root automatically
expect(mockRootSetSeverity).toHaveBeenCalledWith(level);
-
- // Verify all extended loggers
- mockLoggerInstances.forEach(logger => {
- expect(logger.setSeverity).toHaveBeenCalledWith(level);
- });
}
});
it('should not call setSeverity if severity has not changed', async () => {
mockRootSetSeverity.mockClear();
- mockLoggerInstances.forEach(logger => logger.setSeverity.mockClear());
// Get current severity
const currentSeverity = useSettingStore.getState().loggingSeverity;
@@ -171,16 +155,10 @@ describe('Logging Service - Severity Updates', () => {
// Should not call setSeverity on root logger
expect(mockRootSetSeverity).not.toHaveBeenCalled();
-
- // Should not call setSeverity on any extended logger
- mockLoggerInstances.forEach(logger => {
- expect(logger.setSeverity).not.toHaveBeenCalled();
- });
});
it('should handle rapid severity changes correctly', async () => {
mockRootSetSeverity.mockClear();
- mockLoggerInstances.forEach(logger => logger.setSeverity.mockClear());
// Rapidly change severity multiple times
useSettingStore.getState().setLoggingSeverity('debug');
@@ -192,15 +170,10 @@ describe('Logging Service - Severity Updates', () => {
await new Promise(resolve => setTimeout(resolve, 50));
// Should have been called 4 times (once per change)
+ // Extended loggers inherit severity from root automatically
expect(mockRootSetSeverity).toHaveBeenCalledTimes(4);
// The last call should be 'error'
expect(mockRootSetSeverity).toHaveBeenLastCalledWith('error');
-
- // Each extended logger should also have been called 4 times
- mockLoggerInstances.forEach(logger => {
- expect(logger.setSeverity).toHaveBeenCalledTimes(4);
- expect(logger.setSeverity).toHaveBeenLastCalledWith('error');
- });
});
});