diff --git a/src/App.tsx b/src/App.tsx index bb563f0..ac840a9 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -40,7 +40,7 @@ import { WalletEmbed } from "./screens/WalletEmbed"; import { AutoSignIn } from "./screens/AutoSignIn"; import { checkSufficientFunds, getPathKey, sendMessage } from "./utils/misc"; import useAccountsData from "./hooks/useAccountsData"; -import { useSignRequestHandler } from "./hooks/useSignRequestHandler"; +import { useWebViewHandler } from "./hooks/useWebViewHandler"; const Stack = createStackNavigator(); @@ -280,7 +280,7 @@ const App = (): React.JSX.Element => { const showWalletConnect = useMemo(() => accounts.length > 0, [accounts]); - useSignRequestHandler(); + useWebViewHandler(); return ( diff --git a/src/global.d.ts b/src/global.d.ts index fdbb988..dfb6ad7 100644 --- a/src/global.d.ts +++ b/src/global.d.ts @@ -1,7 +1,7 @@ // Extends the Window interface for Android WebView communication declare global { interface Window { - // Android bridge callbacks for signature-related events + // Android bridge callbacks for signature and accounts related events Android?: { // Called when signature is successfully generated onSignatureComplete?: (signature: string) => void; @@ -12,9 +12,6 @@ declare global { // Called when signature process is cancelled onSignatureCancelled?: () => void; - // Called when JS bridge is initialized - onJsBridgeReady?: () => void; - // Called when accounts are ready for use onAccountsReady?: () => void; }; diff --git a/src/hooks/useGetOrCreateAccounts.ts b/src/hooks/useGetOrCreateAccounts.ts index be2d3ba..db800ec 100644 --- a/src/hooks/useGetOrCreateAccounts.ts +++ b/src/hooks/useGetOrCreateAccounts.ts @@ -57,6 +57,7 @@ const useGetOrCreateAccounts = () => { const isAndroidWebView = !!(window.Android); + // TODO: Call method to auto create accounts from android app if (isAndroidWebView) { autoCreateAccounts(); } @@ -67,4 +68,4 @@ const useGetOrCreateAccounts = () => { }, [networksData, getAccountsData, getOrCreateAccountsForChain]); }; -export default useGetOrCreateAccounts; \ No newline at end of file +export default useGetOrCreateAccounts; diff --git a/src/hooks/useSignRequestHandler.ts b/src/hooks/useWebViewHandler.ts similarity index 68% rename from src/hooks/useSignRequestHandler.ts rename to src/hooks/useWebViewHandler.ts index eb74704..a4151ea 100644 --- a/src/hooks/useSignRequestHandler.ts +++ b/src/hooks/useWebViewHandler.ts @@ -1,4 +1,4 @@ -import { useEffect, useRef, useCallback } from 'react'; +import { useEffect, useCallback } from 'react'; import { useNavigation } from '@react-navigation/native'; import { NativeStackNavigationProp } from '@react-navigation/native-stack'; @@ -7,7 +7,7 @@ import { useNetworks } from '../context/NetworksContext'; import { StackParamsList } from '../types'; import useGetOrCreateAccounts from './useGetOrCreateAccounts'; -export const useSignRequestHandler = () => { +export const useWebViewHandler = () => { // Navigation and context hooks const navigation = useNavigation>(); const { selectedNetwork } = useNetworks(); @@ -16,19 +16,8 @@ export const useSignRequestHandler = () => { // Initialize accounts useGetOrCreateAccounts(); - // Use a ref for pending messages instead of state to avoid re-renders - const pendingMessageRef = useRef(null); - // Core navigation handler const navigateToSignRequest = useCallback((message: string) => { - // Data readiness check - const isDataReady = !!(selectedNetwork && accounts && accounts.length > 0); - - if (!isDataReady) { - pendingMessageRef.current = message; - return; - } - try { // Validation checks if (!selectedNetwork?.namespace || !selectedNetwork?.chainId) { @@ -81,29 +70,12 @@ export const useSignRequestHandler = () => { } }, [selectedNetwork, accounts, currentIndex, navigation]); - // Setup Android bridge and handle pending messages useEffect(() => { - // Setup global function to receive sign requests from Android + // Assign the function to the window object window.receiveSignRequestFromAndroid = navigateToSignRequest; - // Process any pending messages whenever dependencies change - if (pendingMessageRef.current && selectedNetwork && accounts?.length > 0) { - const message = pendingMessageRef.current; - pendingMessageRef.current = null; - navigateToSignRequest(message); - } - - // Notify Android that JS bridge is ready - if (window.Android) { - const timeoutId = setTimeout(() => window.Android?.onJsBridgeReady?.(), 100); - return () => { - clearTimeout(timeoutId); - window.receiveSignRequestFromAndroid = undefined; - }; - } - return () => { window.receiveSignRequestFromAndroid = undefined; }; - }, [navigateToSignRequest, selectedNetwork, accounts]); -}; \ No newline at end of file + }, [navigateToSignRequest]); // Only the function reference as dependency +}; diff --git a/src/types.ts b/src/types.ts index 8abcb46..3b7341e 100644 --- a/src/types.ts +++ b/src/types.ts @@ -10,10 +10,8 @@ export type StackParamsList = { selectedNamespace: string; selectedChainId: string; accountInfo: Account; - prefillMessage?: string; }; SignRequest: { - path?: string; namespace: string; chainId?: string; address: string;