From b3b4cc12c40ec361fe4afade6a5e898a37f2591f Mon Sep 17 00:00:00 2001 From: AdityaSalunkhe21 Date: Thu, 10 Apr 2025 12:37:24 +0530 Subject: [PATCH] Update handler for useGetorCreateAccouts --- src/components/SignRequestHandler.tsx | 15 +++++++++++++- src/global.d.ts | 4 +++- src/hooks/useGetOrCreateAccounts.ts | 30 +++++++++++++++++++++++---- 3 files changed, 43 insertions(+), 6 deletions(-) diff --git a/src/components/SignRequestHandler.tsx b/src/components/SignRequestHandler.tsx index d606ca8..f0dfed1 100644 --- a/src/components/SignRequestHandler.tsx +++ b/src/components/SignRequestHandler.tsx @@ -31,6 +31,10 @@ export const SignRequestAndroid: React.FC = () => { if (selectedNetwork && accounts && accounts.length > 0) { setIsDataReady(true); + // Notify Android that accounts are ready + if (window.Android?.onAccountsReady) { + window.Android.onAccountsReady(); + } } }, [selectedNetwork, accounts, currentIndex]); @@ -166,15 +170,24 @@ export const SignRequestAndroid: React.FC = () => { navigateToSignRequest(message); }; + // Handle create/get accounts request + window.receiveCreateOrGetAccountsRequestFromAndroid = () => { + console.log('SignRequestHandler: Create/get accounts request received'); + // The useGetOrCreateAccounts hook will handle this + }; + if (window.Android) { - console.log('Notifying Android that JS bridge is ready'); setTimeout(() => { + console.log('SignRequestHandler: Calling onJsBridgeReady'); window.Android?.onJsBridgeReady?.(); }, 100); + } else { + console.log('SignRequestHandler: Android bridge is not available'); } return () => { window.receiveSignRequestFromAndroid = undefined; + window.receiveCreateOrGetAccountsRequestFromAndroid = undefined; }; }, [navigateToSignRequest]); diff --git a/src/global.d.ts b/src/global.d.ts index fc978ba..1ce5b25 100644 --- a/src/global.d.ts +++ b/src/global.d.ts @@ -1,15 +1,17 @@ declare global { interface Window { - Android: { + Android?: { onSignatureComplete?: (signature: string) => void; onSignatureError?: (error: string) => void; onSignatureCancelled?: () => void; onJsBridgeReady?: () => void; + onAccountsReady?: () => void; }; // Android WebView bridge methods (from TimeDisplay) receiveTimeFromAndroid?: (timestamp: number) => void; receiveDataFromAndroid?: (data: string) => void; receiveSignRequestFromAndroid?: (message: string) => void; + receiveCreateOrGetAccountsRequestFromAndroid?: () => void; // Android native bridge object (from useGetOrCreateAccount) diff --git a/src/hooks/useGetOrCreateAccounts.ts b/src/hooks/useGetOrCreateAccounts.ts index edbe46c..36457fb 100644 --- a/src/hooks/useGetOrCreateAccounts.ts +++ b/src/hooks/useGetOrCreateAccounts.ts @@ -10,12 +10,13 @@ const useGetOrCreateAccounts = (onWalletCreated?: () => void) => { useEffect(() => { const handleCreateAccounts = async (event: MessageEvent) => { - if (event.data.type !== 'REQUEST_CREATE_OR_GET_ACCOUNTS') return; + if (event.data.type !== 'REQUEST_CREATE_OR_GET_ACCOUNTS') { + return; + } let accountsData = await getAccountsData(event.data.chainId); if (accountsData.length === 0) { - console.log("Accounts not found, creating wallet..."); await createWallet(networksData); // Re-fetch newly created accounts @@ -23,6 +24,14 @@ const useGetOrCreateAccounts = (onWalletCreated?: () => void) => { onWalletCreated?.(); } + // Notify Android that accounts are ready + if (window.Android?.onAccountsReady) { + console.log('useGetOrCreateAccounts: Calling onAccountsReady'); + window.Android.onAccountsReady(); + } else { + console.log('useGetOrCreateAccounts: Android bridge not available'); + } + sendMessage( event.source as Window, 'WALLET_ACCOUNTS_DATA', accountsData.map(account => account.address), @@ -32,21 +41,34 @@ const useGetOrCreateAccounts = (onWalletCreated?: () => void) => { const autoCreateAccounts = async () => { const defaultChainId = networksData[0]?.chainId; - if (!defaultChainId) return; + + if (!defaultChainId) { + console.log('useGetOrCreateAccounts: No default chainId found'); + return; + } let accountsData = await getAccountsData(defaultChainId); if (accountsData.length === 0) { - console.log("Auto-creating wallet..."); await createWallet(networksData); accountsData = await getAccountsData(defaultChainId); onWalletCreated?.(); } + + // Notify Android that accounts are ready + console.log('useGetOrCreateAccounts: Notifying Android that accounts are ready'); + if (window.Android?.onAccountsReady) { + console.log('useGetOrCreateAccounts: Calling onAccountsReady'); + window.Android.onAccountsReady(); + } else { + console.log('useGetOrCreateAccounts: Android bridge not available'); + } }; window.addEventListener('message', handleCreateAccounts); const isAndroidWebView = !!(window.Android); + if (isAndroidWebView) { autoCreateAccounts(); }