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) {
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]);

4
src/global.d.ts vendored
View File

@ -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)

View File

@ -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();
}