Skip to content

Commit 07eaec7

Browse files
lealobanovclaude
andauthored
chore: remove unused native wallet creation files (#2297)
* test: add entry point for testing onboarding flow * feat: extending bridge for existing onboarding flow * feat: onboarding ui * feat: onboarding ui * feat: onboarding ui entrypoint * feat: onboarding ui entrypoint * feat: bump wallet kit * feat(android): add saveMnemonic bridge method for EOA accounts - Saves mnemonic to secure storage using Wallet.store() - Creates EOA Account in AccountManager (no Firebase UID) - Initializes WalletManager with new account - Returns success/error response * chore: remove unused bridge methods - Remove generateRecoveryPhrase() (using TypeScript implementation) - Remove createEOAAccount() stub (replaced by saveMnemonic) - Clean up unused code per code review feedback * feat: add entrypoint for onboarding flow * feat: add entrypoint for onboarding flow * feat: add entrypoint for onboarding flow * feat: add entrypoint for onboarding flow * feat: add entrypoint for onboarding flow * feat: add entrypoint for onboarding flow * feat: add entrypoint for onboarding flow * fix: add missing entry point and bridge methods * fix: add missing entry point and bridge methods * fix: add missing entry point and bridge methods * fix: merge conflicts * fix: feedback * fix: feedback * fix: feedback * fix: feedback * fix: feedback * fix: save mnemonic * fix: save mnemonic * chore: clean up * chore: clean up * chore: clean up * chore: clean up * fix: feedback * fix: feedback * fix: feedback * fix: feedback * fix: feedback * fix: update method name * fix: remove mnemonic generation from Secure Enclave account creation Secure Enclave/COA accounts should NOT have a mnemonic or seed phrase. They use hardware-backed keys only, distinct from EOA accounts. Changes: - Removed BIP39 mnemonic generation from registerServer() - Removed global mnemonic storage (storeWalletPassword) - Added comments clarifying this is for Secure Type/COA accounts only - EOA accounts with seed phrase use the RN flow with saveMnemonic() This fixes the issue where Secure Enclave profile users were seeing EOA addresses in their account. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com> * fix: remove EOA chip for Secure Enclave/COA accounts Secure Enclave accounts created with hardware-backed keys should NOT display an EOA chip in the sidebar. They only have: - Flow Cadence address (main account) - EVM/COA address (with purple EVM chip) Changes: - Removed getEOAAddressCached() check from setupLinkedAccountForHardwareBackedKey() - Added comment explaining that COA accounts don't have EOA addresses - EOA addresses are only for seed phrase-based accounts Fixes issue where Secure Enclave profile showed incorrect EOA chip in Android sidebar. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com> * feat: add createLinkedCOAAccount method for Recovery Phrase flow Recovery Phrase flow now creates a linked COA child account instead of a separate main account. Changes: - Added createLinkedCOAAccount() bridge method - Calls cadenceCreateCOAAccount() to create linked COA via Cadence transaction - Returns transaction ID for tracking This fixes the architecture where Recovery Phrase accounts should have: 1. Main Flow account (created via saveMnemonic) 2. EOA address (derived from mnemonic) 3. Linked COA child account (created via Cadence transaction) Secure Enclave accounts remain as main COA accounts (no linked child). 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com> * feat: add bridge methods for keys * feat: add bridge methods for keys * feat: add bridge methods for keys * feat: remove cast to lowercase during register outblock call (#2121) * chore: refactoring + feedback * chore: refactoring + feedback * chore: refactoring + feedback * chore: refactoring + feedback * chore: refactoring + feedback * chore: refactoring + feedback * chore: refactoring + feedback * chore: refactoring + feedback * chore: refactoring + feedback * chore: regenerate BridgeModels with InitialRoute and SPResponse - Add InitialRoute enum for onboarding flow navigation - Add SPResponse interface for seed phrase generation - Add SaveMnemonicResponse interface - Fix broken comment parsing in CreateAccountResponse * chore: remove debug logs and comments - Remove excessive Log.d() statements in ReactNativeActivity - Remove debug println in AccountBridgeHandler - Import logd utility for consistent logging * fix: normalize public keys * fix: feedback * fix: feedback * fix: feedback - rename method * fix: feedback - rename method * refactor(bridge): rename linkCOAAccountOnChain to registerAccountWithBackend Renamed method to match PlatformSpec interface naming convention. Updated all log messages to use new method name. This resolves Android build error: - 'linkCOAAccountOnChain' overrides nothing - Class 'NativeFRWBridge' missing registerAccountWithBackend implementation * security(bridge): use in-memory storage for unconfirmed seed phrases Changed generateSeedPhrase() to use InMemoryStorage instead of FileSystemStorage. The mnemonic should NOT be persisted to disk until the user confirms it. Security issue: Previously, the mnemonic was written to disk immediately upon generation, before user confirmation. This creates a security risk if the user abandons the flow or the app crashes before confirmation. The mnemonic will be properly saved to secure storage when saveMnemonic() is called after the user confirms the recovery phrase. * fix: feedback * fix: feedback * feat(android): route Add Account and Create Profile to RN onboarding Update Android entry points to launch React Native onboarding flow instead of native activities: - ProfileSwitchDialog: "Create a new profile" now launches RN onboarding (GetStartedScreen) via ReactNativeActivity - DrawerLayoutContent: "Add account" now launches RN onboarding instead of WalletRestoreActivity Both entry points use RNBridge.ScreenType.ONBOARDING which routes to the GetStartedScreen as the initial route. * chore(android): remove unused WalletUnregisteredFragment Remove WalletUnregisteredFragment and its layout file as they are no longer used. All onboarding entry points now route through: - ProfileSwitchDialog (Create new profile) - DrawerLayoutContent (Add account) - Both launch ReactNativeActivity with RN onboarding flow The WalletUnregisteredFragment was legacy code with no references in the current codebase. * fix: feedback * fix(android): merge dev branch with proper two-button drawer layout Resolved merge conflicts in DrawerLayoutContent.kt and BridgeModels.kt: - Kept dev's two-button drawer layout (import wallet + add profile) - Preserved onboarding-entrypoint's InitialRoute and NativeScreenName enums - Updated imports to use WalletCreateActivity and WalletRestoreActivity - Added isTestnet check for profile creation This merge combines the improved drawer UX from dev with the bridge models needed for React Native onboarding integration. * fix(android): merge dev branch with proper two-button drawer layout Resolved merge conflicts in DrawerLayoutContent.kt and BridgeModels.kt: - Kept dev's two-button drawer layout (import wallet + add profile) - Preserved onboarding-entrypoint's InitialRoute and NativeScreenName enums - Kept BOTH sets of imports for future flexibility: * Dev's: WalletCreateActivity, WalletRestoreActivity (currently used) * Onboarding: ReactNativeActivity, RNBridge (for future RN integration) - Added isTestnet check for profile creation This merge combines the improved drawer UX from dev with the bridge models and imports needed for future React Native onboarding integration. * feat(android): connect drawer add profile button to RN onboarding - Plus icon button now launches ReactNativeActivity with ONBOARDING screen - Removed unused imports (WalletCreateActivity, isTestnet, DialogType, etc.) - Simplified to use React Native onboarding flow for profile creation * fix: navigate to ProfileTypeSelection instead of GetStarted Changed onboarding entry points to go directly to ProfileTypeSelection screen instead of GetStarted screen. This applies to: - Drawer "Add profile" button - WalletRestoreActivity import wallet flow Also removed duplicate ONBOARDING case in when statement. Closes #373 * fix(android): use launchWithRoute for existing user entry points - Revert ONBOARDING default route back to GET_STARTED for new users - Update drawer "Add profile" button to use launchWithRoute with PROFILE_TYPE_SELECTION - Update wallet import flow to use launchWithRoute with PROFILE_TYPE_SELECTION This ensures: - New users see GetStarted screen first - Existing users skip GetStarted when adding profiles or importing wallets * fix: feedback * chore(android): remove auto-generated React Native assets from git Removed 58 auto-generated image files from version control: - 51 React Navigation icon assets (__node_modules_*) - 7 workspace package assets (__packages_*) These files are automatically generated during React Native builds and should not be committed. Updated .gitignore to prevent future commits of these auto-generated resources. The optimized/resized native Android assets (ic_launcher, ic_crown, etc.) remain in version control as they are intentionally optimized native resources. * fix: register v3 * chore: restore FirebaseAuth.kt to dev branch version The custom Firebase auth changes are no longer needed as registration is working correctly with the original implementation. * fix: register v3 * fix: align with dev * fix: align with dev * fix: align with dev * fix: align with dev * fix: align with dev * fix: fix the secure enclave flow * fix: fix the secure enclave flow * feat: add dynamic progress bar for SecureEnclave account creation - Add event emitter in NativeFRWBridge to send progress events to React Native - Add progress events in registerSecureTypeAccount (0%, 20%, 40%, 80%, 100%) - Add delay before promise resolution to ensure events are delivered * refactor: remove unused signOutAndSignInAnonymously method - Removed from NativeFRWBridge.kt bridge interface - Removed implementation from AuthBridgeHandler.kt - Method was not used anywhere in the codebase 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com> * chore: bump flow-kmm * chore: bump flow-kmm * fix: new endpoints + flow-kmm * chore: bump flow-kmm to 0.1.1 * chore: latest /v2/address * chore: latest /v2/address * chore: latest /v2/address * chore: latest /v2/address * fix: update event name to camelCase and fix saveMnemonic parameter order * chore: bump wallet kit * chore: bump wallet kit * fix: registration flow * fix: pull from dev * fix: pull from dev * feat: add InitialRoute enum for React Native navigation * fix: pull from dev * fix: update registerSecureTypeAccount response to use hardware accountType and include txId * chore: add timing and improved logging for fetchAccountByCreationTxId * chore: add network debug logging for fetchAccountByCreationTxId * fix: ensure mainnet is used for account creation (backend creates on mainnet) * refactor: add early return registration and initWalletWithTxId for secure enclave flow * fix: store prefix between early return and wallet init for secure enclave flow * fix: pull from dev * chore: clean up * chore: clean up * fix: align bridge handlers with dev's new walletNodes architecture - Remove evmAddressData references (now in walletNodes) - Replace walletAddress() with getFlowWalletAddress() - Replace getEOAAddressCached() with getEOAAddress() - Remove EVMWalletManager.clear()/init() calls - Remove WalletManager.init()/onWalletReady() calls - Remove AccountManager.updateWalletInfo()/updateEVMAddressInfo() calls - Update childAccountList() to return List<ChildAccount> directly * fix: populate walletNodes with FlowWallet during registration - registerOutblock: Create FlowWallet from createdAddress and add to walletNodes - initWalletWithTxId: Create FlowWallet from createdAddress and add to walletNodes - setupAccountAndWallet (AuthBridgeHandler): Create FlowWallets from walletListData This ensures accounts are immediately usable after registration without waiting for the async WalletDataManager to populate walletNodes from the key indexer (which may have indexing delays for new accounts). * fix: add FlowWallet to walletNodes after Flow address is confirmed In recovery phrase flow, walletListData.blockchain is null when setupAccountAndWallet is called. The Flow address becomes available later via WalletFetcher. Now we check if FlowWallet is missing after the address is confirmed and add it to walletNodes. * fix: preserve existing FlowWallets when key indexer returns empty WalletDataManager.updateCurrentAccountData() was overwriting manually-added FlowWallets with just EOAWallet when key indexer hadn't indexed new accounts yet. Now we check if the key indexer found any FlowWallets - if not, we preserve the existing FlowWallets that were added during account creation. * fix: disable EOA for secure enclave (P256) accounts Secure enclave accounts use ECDSA_P256 and should not have an EOA. EOA is only for recovery phrase accounts that use ECDSA_secp256k1. Check signing algorithm to determine account type and skip EOA derivation for P256 accounts in both updateCurrentAccountData and updateNonCurrentAccountData. * chore: clean up * chore: clean up * chore: clean up * chore: clean up * chore: clean up * chore: clean up * chore: clean up * chore: remove unused native wallet creation files - Delete WalletCreateActivity and WalletCreateViewModel (no longer launched) - Delete warning/, mnemoniccheck/, pincode/guide/ folders (unused) - Delete individual fragment files: WalletCreateMnemonicFragment, WalletCreatePinCodeFragment, WalletCreatePinCodePresenter, WalletCreateUsernameFragment, WalletCreateUsernamePresenter - Delete model/WalletCreateContentModel and presenter/WalletCreateContentPresenter - Update WalletCreateCloudPwdPresenter to remove WalletCreateViewModel dependency Kept files that are still used by backup/restore/security: - cloudpwd/ (Google Drive backup) - mnemonic adapters/models (backup flows) - pincode widgets (pin code flows) - username models/viewmodels (keystore restore) - Utils.kt (wallet restore) * fix: sync AccountManager.kt with dev --------- Co-authored-by: Claude <noreply@anthropic.com>
1 parent 01dd8e6 commit 07eaec7

22 files changed

+2
-967
lines changed

app/src/main/java/com/flowfoundation/wallet/page/walletcreate/WalletCreateActivity.kt

Lines changed: 0 additions & 76 deletions
This file was deleted.

app/src/main/java/com/flowfoundation/wallet/page/walletcreate/WalletCreateViewModel.kt

Lines changed: 0 additions & 29 deletions
This file was deleted.

app/src/main/java/com/flowfoundation/wallet/page/walletcreate/fragments/cloudpwd/WalletCreateCloudPwdPresenter.kt

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,6 @@ import com.flowfoundation.wallet.R
1414
import com.flowfoundation.wallet.base.presenter.BasePresenter
1515
import com.flowfoundation.wallet.databinding.FragmentWalletCreateCloudPwdBinding
1616
import com.flowfoundation.wallet.page.profile.subpage.backup.BackupGoogleDriveActivity
17-
import com.flowfoundation.wallet.page.walletcreate.WALLET_CREATE_STEP_PIN_GUIDE
18-
import com.flowfoundation.wallet.page.walletcreate.WalletCreateViewModel
1917
import com.flowfoundation.wallet.utils.extensions.res2color
2018
import com.flowfoundation.wallet.utils.listeners.SimpleTextWatcher
2119
import com.flowfoundation.wallet.utils.setBackupGoogleDrive
@@ -27,7 +25,6 @@ class WalletCreateCloudPwdPresenter(
2725
) : BasePresenter<WalletCreateCloudPwdModel> {
2826

2927
private val viewModel by lazy { ViewModelProvider(fragment)[WalletCreateCloudPwdViewModel::class.java] }
30-
private val pageViewModel by lazy { ViewModelProvider(fragment.requireActivity())[WalletCreateViewModel::class.java] }
3128
private val rootView by lazy { fragment.requireActivity().findViewById<View>(R.id.rootView) }
3229

3330
private val keyboardObserver by lazy { keyboardObserver() }
@@ -64,11 +61,8 @@ class WalletCreateCloudPwdPresenter(
6461
private fun onBackupCallback(isSuccess: Boolean) {
6562
if (isSuccess) {
6663
setBackupGoogleDrive(true)
67-
if (fragment.requireActivity() is BackupGoogleDriveActivity) {
68-
fragment.requireActivity().finish()
69-
} else {
70-
pageViewModel.changeStep(WALLET_CREATE_STEP_PIN_GUIDE)
71-
}
64+
// Close the backup activity after successful backup
65+
fragment.requireActivity().finish()
7266
} else {
7367
updateContentViewState(true)
7468
binding.nextButton.setProgressVisible(false)

app/src/main/java/com/flowfoundation/wallet/page/walletcreate/fragments/mnemonic/WalletCreateMnemonicFragment.kt

Lines changed: 0 additions & 63 deletions
This file was deleted.

app/src/main/java/com/flowfoundation/wallet/page/walletcreate/fragments/mnemoniccheck/MnemonicQuestionModel.kt

Lines changed: 0 additions & 7 deletions
This file was deleted.

app/src/main/java/com/flowfoundation/wallet/page/walletcreate/fragments/mnemoniccheck/MnemonicQuestionView.kt

Lines changed: 0 additions & 95 deletions
This file was deleted.

app/src/main/java/com/flowfoundation/wallet/page/walletcreate/fragments/mnemoniccheck/WalletCreateMnemonicCheckFragment.kt

Lines changed: 0 additions & 31 deletions
This file was deleted.

app/src/main/java/com/flowfoundation/wallet/page/walletcreate/fragments/mnemoniccheck/WalletCreateMnemonicCheckModel.kt

Lines changed: 0 additions & 5 deletions
This file was deleted.

0 commit comments

Comments
 (0)