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) {
|
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
4
src/global.d.ts
vendored
@ -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)
|
||||||
|
|
||||||
|
@ -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();
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user