Update handler for useGetorCreateAccouts
This commit is contained in:
parent
20dee55dca
commit
b3b4cc12c4
@ -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
4
src/global.d.ts
vendored
@ -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)
|
||||
|
||||
|
@ -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();
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user