Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
34 commits
Select commit Hold shift + click to select a range
23ba5b0
Release v2.1.6: Balance card UI, smart send button, and co-signing fixes
Dec 31, 2025
6d286ef
chore: Update v2.1.6 release date in changelog
Dec 31, 2025
3a94b54
docker+builder+optimizations
Dec 31, 2025
a32ac57
docker+builder+optimizations
Jan 1, 2026
5215726
docker+builder+optimizations
Jan 1, 2026
0f3c175
docker+builder+optimizations
Jan 2, 2026
59e1356
docker+builder+optimizations
Jan 2, 2026
0aa4f3d
docker+builder+optimizations
Jan 2, 2026
9ce387b
docker+builder+optimizations
Jan 2, 2026
9d84cb2
docker+builder+optimizations
Jan 2, 2026
13586bd
docker+builder+optimizations
Jan 2, 2026
31da6a7
docker+builder+optimizations
Jan 2, 2026
3e63a13
docker-builder-optimizations
Jan 2, 2026
519bdbe
docker-builder-optimizations
Jan 2, 2026
1929e4e
docker-builder-optimizations
Jan 2, 2026
56d6f99
docker-builder-optimizations
Jan 2, 2026
c3c7ada
docker-builder-optimizations
Jan 2, 2026
02953c3
docker-builder-optimizations
Jan 2, 2026
558e963
docker-cross-optimizations
Jan 2, 2026
c4bba91
docker-builder-optimizations
Jan 2, 2026
4fce148
docker-builder-optimizations
Jan 3, 2026
9b498a7
docker-builder-optimizations
Jan 4, 2026
e4b4234
docker-builder-optimizations
Jan 4, 2026
66252b7
docker-builder-optimizations
Jan 4, 2026
62ea82b
docker-builder-optimizations
Jan 4, 2026
4eea86e
docker-optimizations+ui-optimizations+watch-only-alignments
Jan 5, 2026
697437e
checkpoint
Jan 5, 2026
da9b646
checkpoint-ui
Jan 5, 2026
4b512fb
feat: Add multiple address display with amounts in transaction details
Jan 5, 2026
e95d25a
feat: Add dark mode support and wallet home revamp (v2.1.8)
Jan 7, 2026
a51df55
ui-nav-revamp
Jan 8, 2026
33483e0
ui-refactoring
Jan 8, 2026
b0360a3
chore: add changelog for v2.1.9
Jan 10, 2026
9ee3a4d
Merge main into v2.1.9, resolving conflicts by keeping v2.1.9 versions
Jan 11, 2026
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
84 changes: 84 additions & 0 deletions .dockerignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
# Dependencies
node_modules/
npm-debug.log*
yarn-debug.log*
yarn-error.log*

# Build outputs
android/app/build/
android/build/
android/.gradle/
android/app/release/
ios/build/
ios/Pods/
ios/*.xcworkspace/xcuserdata/
ios/*.xcodeproj/xcuserdata/

# IDE
.vscode/
.idea/
*.swp
*.swo
*~

# OS
.DS_Store
Thumbs.db

# Git
.git/
.gitignore
.gitattributes

# Docker
Dockerfile
.dockerignore
docker-apk-builder.sh

# Documentation
*.md
!BBMTLib/README.md
!BBMTLib/RECOVER.md
!BBMTLib/NOSTR_MESSAGE_ENCRYPTION_FLOW.md

# Test files
__tests__/
*.test.tsx
*.test.ts
*.spec.ts
*.spec.tsx

# CI/CD
.github/
.gitlab-ci.yml
.travis.yml

# Misc
.env
.env.local
*.log
build.log

# Docker inline cache directory (should not be in build context)
.docker-cache/

# Already built artifacts
*.apk
*.aab
*.aar
*.jar
*.xcframework
BBMTLib/tss.aar
BBMTLib/tss-sources.jar
BBMTLib/Tss.xcframework/

# Fastlane
fastlane/report.xml
fastlane/Preview.html
fastlane/screenshots/

# Release artifacts
android/app-release.apk.sha256
android/app-release.apk.sha256.asc
android/mapping.txt

6 changes: 5 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -382,4 +382,8 @@ PR_SUMMARY.md
PR_README.md

# third_party
third_party/
third_party/

# Docker cache
.docker-cache/
build.log
75 changes: 55 additions & 20 deletions App.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ import LoadingScreen from './screens/LoadingScreen';
import Zeroconf, {ImplType} from 'react-native-zeroconf';
import ReactNativeBiometrics, {BiometryTypes} from 'react-native-biometrics';
import DeviceInfo from 'react-native-device-info';
import {ThemeProvider} from './theme';
import {ThemeProvider, useTheme} from './theme';
import {WalletProvider} from './context/WalletContext';
import {UserProvider} from './context/UserContext';
import {SafeAreaProvider} from 'react-native-safe-area-context';
Expand All @@ -31,6 +31,7 @@ import {NativeModules} from 'react-native';
import {dbg, pinRemoteIP, getPinnedRemoteIPs} from './utils';
import MobilesPairing from './screens/MobilesPairing';
import MobileNostrPairing from './screens/MobileNostrPairing';
import {CustomHeader} from './components/Header';

// Initialize react-native-screens for Fabric compatibility
enableScreens(true);
Expand All @@ -41,6 +42,14 @@ const rnBiometrics = new ReactNativeBiometrics({allowDeviceCredentials: true});
const zeroconf = new Zeroconf();
const zeroOut = new Zeroconf();

// Custom header components with configurable height
const HomeHeader = (props: any) => <CustomHeader {...props} height={60} />;
const PSBTHeader = (props: any) => <CustomHeader {...props} height={60} />;
const SettingsHeader = (props: any) => <CustomHeader {...props} height={60} />;
const WelcomeHeader = (props: any) => <CustomHeader {...props} height={60} />;
const DevicesPairingHeader = (props: any) => <CustomHeader {...props} height={60} />;
const NostrConnectHeader = (props: any) => <CustomHeader {...props} height={60} />;

const App = () => {
const [initialRoute, setInitialRoute] = useState<string | null>(null);
const [isAuthenticated, setIsAuthenticated] = useState(false);
Expand Down Expand Up @@ -301,9 +310,13 @@ const App = () => {
isAuthenticated,
);
return (
<ThemeProvider>
<LoadingScreen onRetry={handleRetryAuthentication} />
</ThemeProvider>
<ErrorBoundary>
<SafeAreaProvider>
<ThemeProvider>
<LoadingScreen onRetry={handleRetryAuthentication} />
</ThemeProvider>
</SafeAreaProvider>
</ErrorBoundary>
);
}

Expand All @@ -313,23 +326,43 @@ const App = () => {
<ErrorBoundary>
<SafeAreaProvider>
<ThemeProvider>
<UserProvider>
<WalletProvider>
<View style={styles.navigationContainer}>
<AppContent initialRoute={initialRoute} />
</ThemeProvider>
</SafeAreaProvider>
</ErrorBoundary>
);
};

const AppContent = ({initialRoute}: {initialRoute: string | null}) => {
const {theme} = useTheme();

const dynamicStyles = {
navigationContainer: {
...styles.navigationContainer,
backgroundColor: theme.colors.background,
},
};

return (
<UserProvider>
<WalletProvider>
<View style={dynamicStyles.navigationContainer}>
<NavigationContainer>
<Stack.Navigator
initialRouteName={initialRoute}
initialRouteName={initialRoute || undefined}
screenOptions={{
headerShown: false,
contentStyle: {backgroundColor: '#ffffff'},
headerTitleAlign: 'left',
}}>
<Stack.Screen
name="PSBT"
component={PSBTScreen}
options={{
headerShown: true,
headerLeft: () => null,
contentStyle: {backgroundColor: '#ffffff'},
headerTitle: '',
headerTitleAlign: 'left',
header: PSBTHeader,
}}
/>
<Stack.Screen
Expand All @@ -338,56 +371,58 @@ const App = () => {
options={{
headerShown: true,
headerLeft: () => null,
contentStyle: {backgroundColor: '#ffffff'},
headerTitle: '',
headerTitleAlign: 'left',
header: HomeHeader,
}}
/>
<Stack.Screen
name="Welcome"
component={ShowcaseScreen}
options={{
headerShown: true,
contentStyle: {backgroundColor: '#ffffff'},
header: WelcomeHeader,
title: 'Welcome',
}}
/>
<Stack.Screen
name="Settings"
component={WalletSettings}
options={{
headerShown: true,
contentStyle: {backgroundColor: '#ffffff'},
header: SettingsHeader,
title: 'Settings',
}}
/>
<Stack.Screen
name="Devices Pairing"
component={MobilesPairing}
options={{
headerShown: true,
contentStyle: {backgroundColor: '#ffffff'},
header: DevicesPairingHeader,
title: 'Devices Pairing',
}}
/>
<Stack.Screen
name="Nostr Connect"
component={MobileNostrPairing}
options={{
headerShown: true,
contentStyle: {backgroundColor: '#ffffff'},
header: NostrConnectHeader,
title: 'Nostr Connect',
}}
/>
</Stack.Navigator>
</NavigationContainer>
</View>
</WalletProvider>
</UserProvider>
</ThemeProvider>
</SafeAreaProvider>
</ErrorBoundary>
);
};

const styles = StyleSheet.create({
navigationContainer: {
flex: 1,
backgroundColor: '#ffffff',
// backgroundColor will be set dynamically based on theme
},
});

Expand Down
Loading