Update handler for useGetorCreateAccouts

This commit is contained in:
AdityaSalunkhe21 2025-04-10 12:37:24 +05:30
parent 20dee55dca
commit b3b4cc12c4
3 changed files with 43 additions and 6 deletions

View File

@ -31,6 +31,10 @@ export const SignRequestAndroid: React.FC = () => {
if (selectedNetwork && accounts && accounts.length > 0) { if (selectedNetwork && accounts && accounts.length > 0) {
setIsDataReady(true); setIsDataReady(true);
// Notify Android that accounts are ready
if (window.Android?.onAccountsReady) {
window.Android.onAccountsReady();
}
} }
}, [selectedNetwork, accounts, currentIndex]); }, [selectedNetwork, accounts, currentIndex]);
@ -166,15 +170,24 @@ export const SignRequestAndroid: React.FC = () => {
navigateToSignRequest(message); 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) { if (window.Android) {
console.log('Notifying Android that JS bridge is ready');
setTimeout(() => { setTimeout(() => {
console.log('SignRequestHandler: Calling onJsBridgeReady');
window.Android?.onJsBridgeReady?.(); window.Android?.onJsBridgeReady?.();
}, 100); }, 100);
} else {
console.log('SignRequestHandler: Android bridge is not available');
} }
return () => { return () => {
window.receiveSignRequestFromAndroid = undefined; window.receiveSignRequestFromAndroid = undefined;
window.receiveCreateOrGetAccountsRequestFromAndroid = undefined;
}; };
}, [navigateToSignRequest]); }, [navigateToSignRequest]);

4
src/global.d.ts vendored
View File

@ -1,15 +1,17 @@
declare global { declare global {
interface Window { interface Window {
Android: { Android?: {
onSignatureComplete?: (signature: string) => void; onSignatureComplete?: (signature: string) => void;
onSignatureError?: (error: string) => void; onSignatureError?: (error: string) => void;
onSignatureCancelled?: () => void; onSignatureCancelled?: () => void;
onJsBridgeReady?: () => void; onJsBridgeReady?: () => void;
onAccountsReady?: () => void;
}; };
// Android WebView bridge methods (from TimeDisplay) // Android WebView bridge methods (from TimeDisplay)
receiveTimeFromAndroid?: (timestamp: number) => void; receiveTimeFromAndroid?: (timestamp: number) => void;
receiveDataFromAndroid?: (data: string) => void; receiveDataFromAndroid?: (data: string) => void;
receiveSignRequestFromAndroid?: (message: string) => void; receiveSignRequestFromAndroid?: (message: string) => void;
receiveCreateOrGetAccountsRequestFromAndroid?: () => void;
// Android native bridge object (from useGetOrCreateAccount) // Android native bridge object (from useGetOrCreateAccount)

View File

@ -10,12 +10,13 @@ const useGetOrCreateAccounts = (onWalletCreated?: () => void) => {
useEffect(() => { useEffect(() => {
const handleCreateAccounts = async (event: MessageEvent) => { 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); let accountsData = await getAccountsData(event.data.chainId);
if (accountsData.length === 0) { if (accountsData.length === 0) {
console.log("Accounts not found, creating wallet...");
await createWallet(networksData); await createWallet(networksData);
// Re-fetch newly created accounts // Re-fetch newly created accounts
@ -23,6 +24,14 @@ const useGetOrCreateAccounts = (onWalletCreated?: () => void) => {
onWalletCreated?.(); 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( sendMessage(
event.source as Window, 'WALLET_ACCOUNTS_DATA', event.source as Window, 'WALLET_ACCOUNTS_DATA',
accountsData.map(account => account.address), accountsData.map(account => account.address),
@ -32,21 +41,34 @@ const useGetOrCreateAccounts = (onWalletCreated?: () => void) => {
const autoCreateAccounts = async () => { const autoCreateAccounts = async () => {
const defaultChainId = networksData[0]?.chainId; const defaultChainId = networksData[0]?.chainId;
if (!defaultChainId) return;
if (!defaultChainId) {
console.log('useGetOrCreateAccounts: No default chainId found');
return;
}
let accountsData = await getAccountsData(defaultChainId); let accountsData = await getAccountsData(defaultChainId);
if (accountsData.length === 0) { if (accountsData.length === 0) {
console.log("Auto-creating wallet...");
await createWallet(networksData); await createWallet(networksData);
accountsData = await getAccountsData(defaultChainId); accountsData = await getAccountsData(defaultChainId);
onWalletCreated?.(); 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); window.addEventListener('message', handleCreateAccounts);
const isAndroidWebView = !!(window.Android); const isAndroidWebView = !!(window.Android);
if (isAndroidWebView) { if (isAndroidWebView) {
autoCreateAccounts(); autoCreateAccounts();
} }