├── .circleci └── config.yml ├── .gitignore ├── LICENSE ├── README.md ├── app ├── CMakeLists.txt ├── build.gradle ├── proguard-rules.pro └── src │ ├── alpha │ ├── ic_launcher-web.png │ └── res │ │ ├── mipmap-hdpi │ │ └── ic_launcher.png │ │ ├── mipmap-mdpi │ │ └── ic_launcher.png │ │ ├── mipmap-xhdpi │ │ └── ic_launcher.png │ │ ├── mipmap-xxhdpi │ │ └── ic_launcher.png │ │ └── mipmap-xxxhdpi │ │ └── ic_launcher.png │ ├── debug │ └── res │ │ ├── mipmap-hdpi │ │ └── ic_launcher.png │ │ ├── mipmap-mdpi │ │ └── ic_launcher.png │ │ ├── mipmap-xhdpi │ │ └── ic_launcher.png │ │ ├── mipmap-xxhdpi │ │ └── ic_launcher.png │ │ └── mipmap-xxxhdpi │ │ └── ic_launcher.png │ ├── main │ ├── AndroidManifest.xml │ ├── assets │ │ └── licenses.html │ ├── cpp │ │ ├── monerujo.cpp │ │ └── monerujo.h │ ├── ic_launcher-playstore.png │ ├── ic_launcher-web.png │ ├── java │ │ ├── com │ │ │ ├── btchip │ │ │ │ ├── BTChipException.java │ │ │ │ ├── comm │ │ │ │ │ ├── BTChipTransport.java │ │ │ │ │ ├── LedgerHelper.java │ │ │ │ │ └── android │ │ │ │ │ │ └── BTChipTransportAndroidHID.java │ │ │ │ └── utils │ │ │ │ │ └── Dump.java │ │ │ ├── m2049r │ │ │ │ ├── levin │ │ │ │ │ ├── data │ │ │ │ │ │ ├── Bucket.java │ │ │ │ │ │ └── Section.java │ │ │ │ │ ├── scanner │ │ │ │ │ │ ├── Dispatcher.java │ │ │ │ │ │ ├── LevinPeer.java │ │ │ │ │ │ └── PeerRetriever.java │ │ │ │ │ └── util │ │ │ │ │ │ ├── HexHelper.java │ │ │ │ │ │ ├── LevinReader.java │ │ │ │ │ │ ├── LevinWriter.java │ │ │ │ │ │ ├── LittleEndianDataInputStream.java │ │ │ │ │ │ └── LittleEndianDataOutputStream.java │ │ │ │ └── xmrwallet │ │ │ │ │ ├── BaseActivity.java │ │ │ │ │ ├── BluetoothFragment.java │ │ │ │ │ ├── GenerateFragment.java │ │ │ │ │ ├── GenerateReviewFragment.java │ │ │ │ │ ├── LockFragment.java │ │ │ │ │ ├── LoginActivity.java │ │ │ │ │ ├── LoginFragment.java │ │ │ │ │ ├── MainActivity.java │ │ │ │ │ ├── NodeFragment.java │ │ │ │ │ ├── OnBlockUpdateListener.java │ │ │ │ │ ├── OnUriScannedListener.java │ │ │ │ │ ├── ReceiveFragment.java │ │ │ │ │ ├── ScannerFragment.java │ │ │ │ │ ├── SecureActivity.java │ │ │ │ │ ├── SettingsFragment.java │ │ │ │ │ ├── SidekickConnectFragment.java │ │ │ │ │ ├── SubaddressFragment.java │ │ │ │ │ ├── SubaddressInfoFragment.java │ │ │ │ │ ├── TxFragment.java │ │ │ │ │ ├── WalletActivity.java │ │ │ │ │ ├── WalletFragment.java │ │ │ │ │ ├── XmrWalletApplication.java │ │ │ │ │ ├── data │ │ │ │ │ ├── BarcodeData.java │ │ │ │ │ ├── BluetoothInfo.java │ │ │ │ │ ├── Crypto.java │ │ │ │ │ ├── CryptoAmount.java │ │ │ │ │ ├── DefaultNodes.java │ │ │ │ │ ├── Node.java │ │ │ │ │ ├── NodeInfo.java │ │ │ │ │ ├── PendingTx.java │ │ │ │ │ ├── Subaddress.java │ │ │ │ │ ├── TxData.java │ │ │ │ │ ├── TxDataBtc.java │ │ │ │ │ └── UserNotes.java │ │ │ │ │ ├── dialog │ │ │ │ │ ├── AboutFragment.java │ │ │ │ │ ├── CreditsFragment.java │ │ │ │ │ ├── HelpFragment.java │ │ │ │ │ ├── PocketChangeFragment.java │ │ │ │ │ ├── PrivacyFragment.java │ │ │ │ │ └── ProgressDialog.java │ │ │ │ │ ├── fragment │ │ │ │ │ └── send │ │ │ │ │ │ ├── PreShifter.java │ │ │ │ │ │ ├── SendAddressWizardFragment.java │ │ │ │ │ │ ├── SendAmountWizardFragment.java │ │ │ │ │ │ ├── SendBtcAmountWizardFragment.java │ │ │ │ │ │ ├── SendBtcConfirmWizardFragment.java │ │ │ │ │ │ ├── SendBtcSuccessWizardFragment.java │ │ │ │ │ │ ├── SendConfirm.java │ │ │ │ │ │ ├── SendConfirmWizardFragment.java │ │ │ │ │ │ ├── SendFragment.java │ │ │ │ │ │ ├── SendSuccessWizardFragment.java │ │ │ │ │ │ ├── SendWizardFragment.java │ │ │ │ │ │ └── Shifter.java │ │ │ │ │ ├── layout │ │ │ │ │ ├── BluetoothInfoAdapter.java │ │ │ │ │ ├── DiffCallback.java │ │ │ │ │ ├── NodeInfoAdapter.java │ │ │ │ │ ├── SpendViewPager.java │ │ │ │ │ ├── SubaddressInfoAdapter.java │ │ │ │ │ ├── TransactionInfoAdapter.java │ │ │ │ │ └── WalletInfoAdapter.java │ │ │ │ │ ├── ledger │ │ │ │ │ ├── Hardware.java │ │ │ │ │ ├── Instruction.java │ │ │ │ │ ├── Ledger.java │ │ │ │ │ └── LedgerProgressDialog.java │ │ │ │ │ ├── model │ │ │ │ │ ├── Coins.java │ │ │ │ │ ├── CoinsInfo.java │ │ │ │ │ ├── NetworkType.java │ │ │ │ │ ├── PendingTransaction.java │ │ │ │ │ ├── TransactionHistory.java │ │ │ │ │ ├── TransactionInfo.java │ │ │ │ │ ├── Transfer.java │ │ │ │ │ ├── Wallet.java │ │ │ │ │ ├── WalletListener.java │ │ │ │ │ └── WalletManager.java │ │ │ │ │ ├── onboarding │ │ │ │ │ ├── OnBoardingActivity.java │ │ │ │ │ ├── OnBoardingAdapter.java │ │ │ │ │ ├── OnBoardingManager.java │ │ │ │ │ ├── OnBoardingScreen.java │ │ │ │ │ └── OnBoardingViewPager.java │ │ │ │ │ ├── service │ │ │ │ │ ├── BluetoothService.java │ │ │ │ │ ├── MoneroHandlerThread.java │ │ │ │ │ ├── WalletService.java │ │ │ │ │ ├── exchange │ │ │ │ │ │ ├── api │ │ │ │ │ │ │ ├── ExchangeApi.java │ │ │ │ │ │ │ ├── ExchangeCallback.java │ │ │ │ │ │ │ ├── ExchangeException.java │ │ │ │ │ │ │ └── ExchangeRate.java │ │ │ │ │ │ ├── ecb │ │ │ │ │ │ │ ├── ExchangeApiImpl.java │ │ │ │ │ │ │ └── ExchangeRateImpl.java │ │ │ │ │ │ ├── kraken │ │ │ │ │ │ │ ├── ExchangeApiImpl.java │ │ │ │ │ │ │ └── ExchangeRateImpl.java │ │ │ │ │ │ ├── krakenFiat │ │ │ │ │ │ │ ├── ExchangeApiImpl.java │ │ │ │ │ │ │ └── ExchangeRateImpl.java │ │ │ │ │ │ └── yadio │ │ │ │ │ │ │ ├── ExchangeApiImpl.java │ │ │ │ │ │ │ └── ExchangeRateImpl.java │ │ │ │ │ └── shift │ │ │ │ │ │ ├── NetworkCallback.java │ │ │ │ │ │ ├── ShiftApiCall.java │ │ │ │ │ │ ├── ShiftCallback.java │ │ │ │ │ │ ├── ShiftError.java │ │ │ │ │ │ ├── ShiftException.java │ │ │ │ │ │ ├── ShiftService.java │ │ │ │ │ │ ├── ShiftType.java │ │ │ │ │ │ ├── api │ │ │ │ │ │ ├── CreateOrder.java │ │ │ │ │ │ ├── QueryOrderParameters.java │ │ │ │ │ │ ├── QueryOrderStatus.java │ │ │ │ │ │ ├── RequestQuote.java │ │ │ │ │ │ └── ShiftApi.java │ │ │ │ │ │ ├── process │ │ │ │ │ │ ├── PreProcess.java │ │ │ │ │ │ ├── PreShiftProcess.java │ │ │ │ │ │ ├── Process.java │ │ │ │ │ │ └── ShiftProcess.java │ │ │ │ │ │ └── provider │ │ │ │ │ │ ├── ShiftApiImpl.java │ │ │ │ │ │ └── exolix │ │ │ │ │ │ ├── CreateOrderImpl.java │ │ │ │ │ │ ├── ExolixApiImpl.java │ │ │ │ │ │ ├── QueryOrderParametersImpl.java │ │ │ │ │ │ └── QueryOrderStatusImpl.java │ │ │ │ │ ├── util │ │ │ │ │ ├── AmountHelper.java │ │ │ │ │ ├── CrazyPassEncoder.java │ │ │ │ │ ├── DateHelper.java │ │ │ │ │ ├── DayNightMode.java │ │ │ │ │ ├── FingerprintHelper.java │ │ │ │ │ ├── Flasher.java │ │ │ │ │ ├── Helper.java │ │ │ │ │ ├── IdHelper.java │ │ │ │ │ ├── KeyStoreHelper.java │ │ │ │ │ ├── LegacyStorageHelper.java │ │ │ │ │ ├── LocaleHelper.java │ │ │ │ │ ├── MoneroThreadPoolExecutor.java │ │ │ │ │ ├── NetCipherHelper.java │ │ │ │ │ ├── NightmodeHelper.java │ │ │ │ │ ├── NodePinger.java │ │ │ │ │ ├── Notice.java │ │ │ │ │ ├── OnionHelper.java │ │ │ │ │ ├── OpenAliasHelper.java │ │ │ │ │ ├── RestoreHeight.java │ │ │ │ │ ├── ServiceHelper.java │ │ │ │ │ ├── StickyFiatHelper.java │ │ │ │ │ ├── ThemeHelper.java │ │ │ │ │ ├── ZipBackup.java │ │ │ │ │ ├── ZipRestore.java │ │ │ │ │ └── ledger │ │ │ │ │ │ ├── ECsecp256k1.java │ │ │ │ │ │ └── Monero.java │ │ │ │ │ └── widget │ │ │ │ │ ├── CTextInputLayout.java │ │ │ │ │ ├── DotBar.java │ │ │ │ │ ├── DropDownEditText.java │ │ │ │ │ ├── ExchangeEditText.java │ │ │ │ │ ├── ExchangeOtherEditText.java │ │ │ │ │ ├── ExchangeView.java │ │ │ │ │ ├── PasswordEntryView.java │ │ │ │ │ ├── SendProgressView.java │ │ │ │ │ └── Toolbar.java │ │ │ └── theromus │ │ │ │ ├── sha │ │ │ │ ├── Keccak.java │ │ │ │ └── Parameters.java │ │ │ │ └── utils │ │ │ │ └── HexUtils.java │ │ └── info │ │ │ └── guardianproject │ │ │ └── netcipher │ │ │ ├── client │ │ │ └── StrongOkHttpClientBuilder.java │ │ │ └── proxy │ │ │ └── MyOrbotHelper.java │ └── res │ │ ├── anim │ │ ├── cycle_7.xml │ │ ├── fab_close.xml │ │ ├── fab_close_screen.xml │ │ ├── fab_open.xml │ │ ├── fab_open_screen.xml │ │ ├── fab_pulse.xml │ │ ├── rotate_backward.xml │ │ ├── rotate_forward.xml │ │ └── shake.xml │ │ ├── color │ │ └── btn_color_selector.xml │ │ ├── drawable-night │ │ ├── ic_emptygunther.xml │ │ ├── ic_gunther_streetmode.xml │ │ ├── ic_onboarding_fingerprint.xml │ │ ├── ic_onboarding_nodes.xml │ │ ├── ic_onboarding_seed.xml │ │ ├── ic_onboarding_welcome.xml │ │ └── ic_onboarding_xmrto.xml │ │ ├── drawable-v24 │ │ ├── ic_check_circle.xml │ │ ├── ic_check_circle_xmr.xml │ │ ├── ic_launcher_foreground.xml │ │ ├── ic_launcher_monochrome.xml │ │ ├── ic_xmrto_btc_off.xml │ │ ├── ic_xmrto_eth_off.xml │ │ ├── ic_xmrto_ltc_off.xml │ │ ├── ic_xmrto_sol_off.xml │ │ └── ic_xmrto_usdt_trc20_off.xml │ │ ├── drawable │ │ ├── backgound_all.xml │ │ ├── backgound_seed.xml │ │ ├── backgound_toolbar_mainnet.xml │ │ ├── backgound_toolbar_streetmode.xml │ │ ├── button_green.xml │ │ ├── button_selector_green.xml │ │ ├── dot_dark.xml │ │ ├── dot_light.xml │ │ ├── gradient_all.xml │ │ ├── gradient_oval.xml │ │ ├── gradient_street.xml │ │ ├── gradient_street_efab.xml │ │ ├── gunther_24dp.png │ │ ├── gunther_coder.png │ │ ├── gunther_csi_24dp.png │ │ ├── gunther_desaturated.png │ │ ├── ic_account_balance_wallet_black_24dp.xml │ │ ├── ic_add.xml │ │ ├── ic_add_circle.xml │ │ ├── ic_all_inclusive.xml │ │ ├── ic_arrow_back.xml │ │ ├── ic_bluetooth_24.xml │ │ ├── ic_bluetooth_connected_24.xml │ │ ├── ic_bluetooth_disabled_24.xml │ │ ├── ic_bluetooth_searching_24.xml │ │ ├── ic_check_circle.xml │ │ ├── ic_check_circle_xmr.xml │ │ ├── ic_close_white_24dp.xml │ │ ├── ic_content_copy_24dp.xml │ │ ├── ic_content_paste_24dp.xml │ │ ├── ic_done_all.xml │ │ ├── ic_emptygunther.xml │ │ ├── ic_error_red_24dp.xml │ │ ├── ic_error_red_36dp.xml │ │ ├── ic_exolix_icon.xml │ │ ├── ic_exolix_wide.xml │ │ ├── ic_eye.xml │ │ ├── ic_eye_black_24dp.xml │ │ ├── ic_favorite_24dp.xml │ │ ├── ic_favorite_border_24dp.xml │ │ ├── ic_fingerprint.xml │ │ ├── ic_gunther_streetmode.xml │ │ ├── ic_hand.xml │ │ ├── ic_help_white_24dp.xml │ │ ├── ic_import.xml │ │ ├── ic_info_outline_black_24dp.xml │ │ ├── ic_info_outline_gray_24dp.xml │ │ ├── ic_info_white_24dp.xml │ │ ├── ic_key.xml │ │ ├── ic_keyboard_arrow_down.xml │ │ ├── ic_keyboard_arrow_up.xml │ │ ├── ic_launch_external.xml │ │ ├── ic_launcher_background.xml │ │ ├── ic_ledger_restore.xml │ │ ├── ic_lock_24dp.xml │ │ ├── ic_logo_horizontol_xmrujo.xml │ │ ├── ic_monero.xml │ │ ├── ic_monero_bw.xml │ │ ├── ic_monero_logo_b.png │ │ ├── ic_monerujo.xml │ │ ├── ic_monerujo_qr.xml │ │ ├── ic_navigate_next.xml │ │ ├── ic_navigate_prev.xml │ │ ├── ic_network_clearnet.xml │ │ ├── ic_network_tor_on.xml │ │ ├── ic_new.xml │ │ ├── ic_onboarding_fingerprint.xml │ │ ├── ic_onboarding_nodes.xml │ │ ├── ic_onboarding_seed.xml │ │ ├── ic_onboarding_welcome.xml │ │ ├── ic_onboarding_xmrto.xml │ │ ├── ic_outline_folder_24.xml │ │ ├── ic_outline_folder_open_24.xml │ │ ├── ic_pending.xml │ │ ├── ic_renew.xml │ │ ├── ic_scan.xml │ │ ├── ic_seed.xml │ │ ├── ic_send.xml │ │ ├── ic_settings.xml │ │ ├── ic_share.xml │ │ ├── ic_sidekick_restore.xml │ │ ├── ic_sideshift_icon.xml │ │ ├── ic_sideshift_wide.xml │ │ ├── ic_smiley_ecstatic_filled.xml │ │ ├── ic_smiley_gunther_filled.xml │ │ ├── ic_smiley_happy_filled.xml │ │ ├── ic_smiley_meh_filled.xml │ │ ├── ic_smiley_neutral_filled.xml │ │ ├── ic_smiley_sad_filled.xml │ │ ├── ic_statsup.xml │ │ ├── ic_success.xml │ │ ├── ic_toll.xml │ │ ├── ic_warning_24dp.xml │ │ ├── ic_wifi_1_bar.xml │ │ ├── ic_wifi_2_bar.xml │ │ ├── ic_wifi_3_bar.xml │ │ ├── ic_wifi_4_bar.xml │ │ ├── ic_wifi_lock.xml │ │ ├── ic_wifi_off.xml │ │ ├── ic_xmrto_btc.xml │ │ ├── ic_xmrto_btc_off.xml │ │ ├── ic_xmrto_eth.xml │ │ ├── ic_xmrto_eth_off.xml │ │ ├── ic_xmrto_logo.xml │ │ ├── ic_xmrto_ltc.xml │ │ ├── ic_xmrto_ltc_off.xml │ │ ├── ic_xmrto_sol.xml │ │ ├── ic_xmrto_sol_off.xml │ │ ├── ic_xmrto_usdt_trc20.xml │ │ ├── ic_xmrto_usdt_trc20_off.xml │ │ ├── logo_horizontol_xmrujo.png │ │ ├── onboarding_dots.xml │ │ └── selector_login.xml │ │ ├── layout │ │ ├── activity_login.xml │ │ ├── activity_on_boarding.xml │ │ ├── activity_sidekick.xml │ │ ├── activity_wallet.xml │ │ ├── bluetooth_device_name.xml │ │ ├── checkbox_confirm.xml │ │ ├── dialog_ledger_progress.xml │ │ ├── fragment_about.xml │ │ ├── fragment_bluetooth.xml │ │ ├── fragment_credits.xml │ │ ├── fragment_generate.xml │ │ ├── fragment_help.xml │ │ ├── fragment_login.xml │ │ ├── fragment_node.xml │ │ ├── fragment_pocketchange_setting.xml │ │ ├── fragment_privacy_policy.xml │ │ ├── fragment_receive.xml │ │ ├── fragment_review.xml │ │ ├── fragment_send.xml │ │ ├── fragment_send_address.xml │ │ ├── fragment_send_amount.xml │ │ ├── fragment_send_btc_amount.xml │ │ ├── fragment_send_btc_confirm.xml │ │ ├── fragment_send_btc_success.xml │ │ ├── fragment_send_confirm.xml │ │ ├── fragment_send_success.xml │ │ ├── fragment_sidekick.xml │ │ ├── fragment_sidekick_connect.xml │ │ ├── fragment_subaddress.xml │ │ ├── fragment_subaddressinfo.xml │ │ ├── fragment_tx_info.xml │ │ ├── fragment_wallet.xml │ │ ├── item_bluetooth.xml │ │ ├── item_node.xml │ │ ├── item_spinner.xml │ │ ├── item_spinner_balance.xml │ │ ├── item_spinner_dropdown_item.xml │ │ ├── item_subaddress.xml │ │ ├── item_transaction.xml │ │ ├── item_wallet.xml │ │ ├── layout_fabmenu.xml │ │ ├── nav_header.xml │ │ ├── prompt_changepw.xml │ │ ├── prompt_editnode.xml │ │ ├── prompt_ledger_seed.xml │ │ ├── prompt_password.xml │ │ ├── prompt_rename.xml │ │ ├── template_notice.xml │ │ ├── view_exchange.xml │ │ ├── view_exchange_edit.xml │ │ ├── view_onboarding.xml │ │ ├── view_send_progress.xml │ │ └── view_toolbar.xml │ │ ├── menu │ │ ├── create_wallet_keys.xml │ │ ├── create_wallet_ledger.xml │ │ ├── create_wallet_new.xml │ │ ├── create_wallet_seed.xml │ │ ├── create_wallet_sidekick.xml │ │ ├── create_wallet_view.xml │ │ ├── drawer_view.xml │ │ ├── list_context_menu.xml │ │ ├── list_menu.xml │ │ ├── node_menu.xml │ │ ├── receive_menu.xml │ │ ├── send_menu.xml │ │ ├── sidekick_connect_menu.xml │ │ ├── tx_info_menu.xml │ │ ├── wallet_details_help_menu.xml │ │ ├── wallet_details_menu.xml │ │ └── wallet_menu.xml │ │ ├── mipmap-anydpi-v26 │ │ ├── ic_launcher.xml │ │ └── ic_launcher_round.xml │ │ ├── mipmap-hdpi │ │ ├── ic_launcher.webp │ │ └── ic_launcher_round.webp │ │ ├── mipmap-mdpi │ │ ├── ic_launcher.webp │ │ └── ic_launcher_round.webp │ │ ├── mipmap-xhdpi │ │ ├── ic_launcher.webp │ │ └── ic_launcher_round.webp │ │ ├── mipmap-xxhdpi │ │ ├── ic_launcher.webp │ │ └── ic_launcher_round.webp │ │ ├── mipmap-xxxhdpi │ │ ├── ic_launcher.webp │ │ └── ic_launcher_round.webp │ │ ├── transition │ │ └── details.xml │ │ ├── values-ar │ │ ├── about.xml │ │ ├── help.xml │ │ └── strings.xml │ │ ├── values-cat │ │ ├── about.xml │ │ ├── help.xml │ │ └── strings.xml │ │ ├── values-cs │ │ ├── about.xml │ │ ├── help.xml │ │ └── strings.xml │ │ ├── values-de │ │ ├── about.xml │ │ ├── help.xml │ │ └── strings.xml │ │ ├── values-el │ │ ├── about.xml │ │ ├── help.xml │ │ └── strings.xml │ │ ├── values-eo │ │ ├── about.xml │ │ ├── help.xml │ │ └── strings.xml │ │ ├── values-es │ │ ├── about.xml │ │ ├── help.xml │ │ └── strings.xml │ │ ├── values-et │ │ ├── about.xml │ │ ├── help.xml │ │ └── strings.xml │ │ ├── values-fa │ │ ├── about.xml │ │ ├── help.xml │ │ └── strings.xml │ │ ├── values-fr │ │ ├── about.xml │ │ ├── help.xml │ │ └── strings.xml │ │ ├── values-he │ │ ├── about.xml │ │ ├── help.xml │ │ └── strings.xml │ │ ├── values-hu │ │ ├── about.xml │ │ ├── help.xml │ │ └── strings.xml │ │ ├── values-it │ │ ├── about.xml │ │ ├── help.xml │ │ └── strings.xml │ │ ├── values-ja │ │ ├── about.xml │ │ ├── help.xml │ │ └── strings.xml │ │ ├── values-nb │ │ ├── about.xml │ │ ├── help.xml │ │ └── strings.xml │ │ ├── values-night-v23 │ │ └── styles.xml │ │ ├── values-night-v27 │ │ └── styles.xml │ │ ├── values-night │ │ ├── colors.xml │ │ └── styles.xml │ │ ├── values-nl │ │ ├── about.xml │ │ ├── help.xml │ │ └── strings.xml │ │ ├── values-pt-rBR │ │ ├── about.xml │ │ ├── help.xml │ │ └── strings.xml │ │ ├── values-pt │ │ ├── about.xml │ │ ├── help.xml │ │ └── strings.xml │ │ ├── values-ro │ │ ├── about.xml │ │ ├── help.xml │ │ └── strings.xml │ │ ├── values-ru │ │ ├── about.xml │ │ ├── help.xml │ │ └── strings.xml │ │ ├── values-sk │ │ ├── about.xml │ │ ├── help.xml │ │ └── strings.xml │ │ ├── values-sr │ │ ├── about.xml │ │ ├── help.xml │ │ └── strings.xml │ │ ├── values-sv │ │ ├── about.xml │ │ ├── help.xml │ │ └── strings.xml │ │ ├── values-ta │ │ ├── about.xml │ │ ├── help.xml │ │ └── strings.xml │ │ ├── values-tr │ │ ├── about.xml │ │ ├── help.xml │ │ └── strings.xml │ │ ├── values-uk │ │ ├── about.xml │ │ ├── help.xml │ │ └── strings.xml │ │ ├── values-v23 │ │ └── styles.xml │ │ ├── values-v27 │ │ └── styles.xml │ │ ├── values-zh-rCN │ │ ├── about.xml │ │ ├── help.xml │ │ └── strings.xml │ │ ├── values-zh-rTW │ │ ├── about.xml │ │ ├── help.xml │ │ └── strings.xml │ │ ├── values │ │ ├── about.xml │ │ ├── arrays.xml │ │ ├── attrs.xml │ │ ├── colors.xml │ │ ├── dimens.xml │ │ ├── help.xml │ │ ├── ids.xml │ │ ├── integers.xml │ │ ├── strings.xml │ │ └── styles.xml │ │ └── xml │ │ ├── filepaths.xml │ │ ├── root_preferences.xml │ │ └── usb_device_filter.xml │ ├── stagenet │ └── res │ │ └── values │ │ └── strings.xml │ └── test │ └── java │ └── com │ └── m2049r │ └── xmrwallet │ ├── service │ └── exchange │ │ ├── ecb │ │ └── ExchangeRateTest.java │ │ ├── kraken │ │ └── ExchangeRateTest.java │ │ └── yadio │ │ └── ExchangeRateTest.java │ └── util │ ├── HelperTest.java │ ├── OpenAliasHelperTest.java │ ├── RestoreHeightTest.java │ ├── UserNoteTest.java │ └── ledger │ └── MoneroTest.java ├── build.gradle ├── doc ├── BUILDING-external-libs.md └── FAQ.md ├── external-libs ├── .gitignore ├── Makefile ├── android32.Dockerfile ├── android32_x86.Dockerfile ├── android64.Dockerfile └── android64_x86.Dockerfile ├── gradle.properties ├── gradle └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat ├── monerujo.id ├── privacy-policy.md ├── settings.gradle └── xmrwallet.iml /.circleci/config.yml: -------------------------------------------------------------------------------- 1 | version: 2 2 | jobs: 3 | build: 4 | working_directory: ~/code 5 | docker: 6 | - image: cimg/android:2023.12-ndk 7 | environment: 8 | JVM_OPTS: -Xmx3200m 9 | steps: 10 | - checkout 11 | - restore_cache: 12 | key: jars-{{ checksum "build.gradle" }}-{{ checksum "app/build.gradle" }} 13 | - run: 14 | name: Download Dependencies 15 | command: ./gradlew androidDependencies 16 | - save_cache: 17 | paths: 18 | - ~/.gradle 19 | key: jars-{{ checksum "build.gradle" }}-{{ checksum "app/build.gradle" }} 20 | - run: 21 | name: Run Tests 22 | command: ./gradlew test 23 | - store_artifacts: 24 | path: app/build/reports 25 | destination: reports 26 | - store_test_results: 27 | path: app/build/test-results 28 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .gradle 2 | /build 3 | *.iml 4 | /.idea 5 | /local.properties 6 | /captures 7 | .externalNativeBuild 8 | .DS_Store 9 | /app/build 10 | /app/release 11 | /app/alpha* 12 | /app/prod* 13 | /app/.cxx 14 | /monerujo.id 15 | /external-libs/VERSION 16 | /external-libs/include/wallet2_api.h 17 | -------------------------------------------------------------------------------- /app/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # By default, the flags in this file are appended to flags specified 3 | # in C:\Users\Test\AppData\Local\Android\Sdk/tools/proguard/proguard-android.txt 4 | # You can edit the include path and order by changing the proguardFiles 5 | # directive in build.gradle. 6 | # 7 | # For more details, see 8 | # http://developer.android.com/guide/developing/tools/proguard.html 9 | 10 | # Add any project specific keep options here: 11 | 12 | # If your project uses WebView with JS, uncomment the following 13 | # and specify the fully qualified class name to the JavaScript interface 14 | # class: 15 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 16 | # public *; 17 | #} 18 | 19 | # Uncomment this to preserve the line number information for 20 | # debugging stack traces. 21 | #-keepattributes SourceFile,LineNumberTable 22 | 23 | # If you keep the line number information, uncomment this to 24 | # hide the original source file name. 25 | #-renamesourcefileattribute SourceFile 26 | -------------------------------------------------------------------------------- /app/src/alpha/ic_launcher-web.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/m2049r/xmrwallet/41a7b7ba6123920ba88145c1fc1ec3a6974b991a/app/src/alpha/ic_launcher-web.png -------------------------------------------------------------------------------- /app/src/alpha/res/mipmap-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/m2049r/xmrwallet/41a7b7ba6123920ba88145c1fc1ec3a6974b991a/app/src/alpha/res/mipmap-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/alpha/res/mipmap-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/m2049r/xmrwallet/41a7b7ba6123920ba88145c1fc1ec3a6974b991a/app/src/alpha/res/mipmap-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/alpha/res/mipmap-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/m2049r/xmrwallet/41a7b7ba6123920ba88145c1fc1ec3a6974b991a/app/src/alpha/res/mipmap-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/alpha/res/mipmap-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/m2049r/xmrwallet/41a7b7ba6123920ba88145c1fc1ec3a6974b991a/app/src/alpha/res/mipmap-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/alpha/res/mipmap-xxxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/m2049r/xmrwallet/41a7b7ba6123920ba88145c1fc1ec3a6974b991a/app/src/alpha/res/mipmap-xxxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/debug/res/mipmap-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/m2049r/xmrwallet/41a7b7ba6123920ba88145c1fc1ec3a6974b991a/app/src/debug/res/mipmap-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/debug/res/mipmap-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/m2049r/xmrwallet/41a7b7ba6123920ba88145c1fc1ec3a6974b991a/app/src/debug/res/mipmap-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/debug/res/mipmap-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/m2049r/xmrwallet/41a7b7ba6123920ba88145c1fc1ec3a6974b991a/app/src/debug/res/mipmap-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/debug/res/mipmap-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/m2049r/xmrwallet/41a7b7ba6123920ba88145c1fc1ec3a6974b991a/app/src/debug/res/mipmap-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/debug/res/mipmap-xxxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/m2049r/xmrwallet/41a7b7ba6123920ba88145c1fc1ec3a6974b991a/app/src/debug/res/mipmap-xxxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/ic_launcher-playstore.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/m2049r/xmrwallet/41a7b7ba6123920ba88145c1fc1ec3a6974b991a/app/src/main/ic_launcher-playstore.png -------------------------------------------------------------------------------- /app/src/main/ic_launcher-web.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/m2049r/xmrwallet/41a7b7ba6123920ba88145c1fc1ec3a6974b991a/app/src/main/ic_launcher-web.png -------------------------------------------------------------------------------- /app/src/main/java/com/btchip/BTChipException.java: -------------------------------------------------------------------------------- 1 | /* 2 | ******************************************************************************* 3 | * BTChip Bitcoin Hardware Wallet Java API 4 | * (c) 2014 BTChip - 1BTChip7VfTnrPra5jqci7ejnMguuHogTn 5 | * 6 | * Licensed under the Apache License, Version 2.0 (the "License"); 7 | * you may not use this file except in compliance with the License. 8 | * You may obtain a copy of the License at 9 | * 10 | * http://www.apache.org/licenses/LICENSE-2.0 11 | * 12 | * Unless required by applicable law or agreed to in writing, software 13 | * distributed under the License is distributed on an "AS IS" BASIS, 14 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 | * See the License for the specific language governing permissions and 16 | * limitations under the License. 17 | ******************************************************************************** 18 | */ 19 | 20 | package com.btchip; 21 | 22 | public class BTChipException extends Exception { 23 | 24 | private static final long serialVersionUID = 5512803003827126405L; 25 | 26 | public BTChipException(String reason) { 27 | super(reason); 28 | } 29 | 30 | public BTChipException(String reason, Throwable cause) { 31 | super(reason, cause); 32 | } 33 | 34 | public BTChipException(String reason, int sw) { 35 | super(reason); 36 | this.sw = sw; 37 | } 38 | 39 | public int getSW() { 40 | return sw; 41 | } 42 | 43 | public String toString() { 44 | if (sw == 0) { 45 | return "BTChip Exception : " + getMessage(); 46 | } else { 47 | return "BTChip Exception : " + getMessage() + " " + Integer.toHexString(sw); 48 | } 49 | } 50 | 51 | private int sw; 52 | 53 | } 54 | -------------------------------------------------------------------------------- /app/src/main/java/com/btchip/comm/BTChipTransport.java: -------------------------------------------------------------------------------- 1 | /* 2 | ******************************************************************************* 3 | * BTChip Bitcoin Hardware Wallet Java API 4 | * (c) 2014 BTChip - 1BTChip7VfTnrPra5jqci7ejnMguuHogTn 5 | * (c) 2018 m2049r 6 | * 7 | * Licensed under the Apache License, Version 2.0 (the "License"); 8 | * you may not use this file except in compliance with the License. 9 | * You may obtain a copy of the License at 10 | * 11 | * http://www.apache.org/licenses/LICENSE-2.0 12 | * 13 | * Unless required by applicable law or agreed to in writing, software 14 | * distributed under the License is distributed on an "AS IS" BASIS, 15 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 16 | * See the License for the specific language governing permissions and 17 | * limitations under the License. 18 | ******************************************************************************** 19 | */ 20 | 21 | package com.btchip.comm; 22 | 23 | public interface BTChipTransport { 24 | byte[] exchange(byte[] command); 25 | 26 | void close(); 27 | 28 | void setDebug(boolean debugFlag); 29 | } 30 | -------------------------------------------------------------------------------- /app/src/main/java/com/m2049r/levin/scanner/LevinPeer.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2018 m2049r 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.m2049r.levin.scanner; 18 | 19 | import java.net.InetAddress; 20 | import java.net.InetSocketAddress; 21 | 22 | public class LevinPeer { 23 | final public InetSocketAddress socketAddress; 24 | final public int version; 25 | final public long height; 26 | final public String top; 27 | 28 | 29 | public InetSocketAddress getSocketAddress() { 30 | return socketAddress; 31 | } 32 | 33 | LevinPeer(InetAddress address, int port, int version, long height, String top) { 34 | this.socketAddress = new InetSocketAddress(address, port); 35 | this.version = version; 36 | this.height = height; 37 | this.top = top; 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /app/src/main/java/com/m2049r/levin/util/HexHelper.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2018 m2049r 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.m2049r.levin.util; 18 | 19 | import java.math.BigInteger; 20 | import java.net.InetAddress; 21 | import java.net.UnknownHostException; 22 | 23 | public class HexHelper { 24 | 25 | static public String bytesToHex(byte[] data) { 26 | if ((data != null) && (data.length > 0)) 27 | return String.format("%0" + (data.length * 2) + "X", 28 | new BigInteger(1, data)); 29 | else 30 | return ""; 31 | } 32 | 33 | static public InetAddress toInetAddress(int ip) { 34 | try { 35 | String ipAddress = String.format("%d.%d.%d.%d", (ip & 0xff), 36 | (ip >> 8 & 0xff), (ip >> 16 & 0xff), (ip >> 24 & 0xff)); 37 | return InetAddress.getByName(ipAddress); 38 | } catch (UnknownHostException ex) { 39 | throw new IllegalArgumentException(ex); 40 | } 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /app/src/main/java/com/m2049r/xmrwallet/LockFragment.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2024 m2049r 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.m2049r.xmrwallet; 18 | 19 | import android.os.Bundle; 20 | import android.view.LayoutInflater; 21 | import android.view.View; 22 | import android.view.ViewGroup; 23 | import android.widget.FrameLayout; 24 | 25 | import androidx.annotation.NonNull; 26 | import androidx.fragment.app.Fragment; 27 | 28 | import timber.log.Timber; 29 | 30 | public class LockFragment extends Fragment { 31 | @Override 32 | public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 33 | Timber.d("onCreateView"); 34 | final FrameLayout frame = new FrameLayout(requireContext()); 35 | frame.setLayoutParams(new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT)); 36 | return frame; 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /app/src/main/java/com/m2049r/xmrwallet/MainActivity.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2018-2020 EarlOfEgo, m2049r 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.m2049r.xmrwallet; 18 | 19 | import android.content.Intent; 20 | import android.os.Bundle; 21 | 22 | import androidx.annotation.Nullable; 23 | 24 | import com.m2049r.xmrwallet.onboarding.OnBoardingActivity; 25 | import com.m2049r.xmrwallet.onboarding.OnBoardingManager; 26 | 27 | public class MainActivity extends BaseActivity { 28 | @Override 29 | protected void onCreate(@Nullable final Bundle savedInstanceState) { 30 | super.onCreate(savedInstanceState); 31 | if (OnBoardingManager.shouldShowOnBoarding(getApplicationContext())) { 32 | startActivity(new Intent(this, OnBoardingActivity.class)); 33 | } else { 34 | startActivity(new Intent(this, LoginActivity.class)); 35 | } 36 | finish(); 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /app/src/main/java/com/m2049r/xmrwallet/OnBlockUpdateListener.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2021 m2049r 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.m2049r.xmrwallet; 18 | 19 | import com.m2049r.xmrwallet.model.Wallet; 20 | 21 | public interface OnBlockUpdateListener { 22 | void onBlockUpdate(final Wallet wallet); 23 | } 24 | -------------------------------------------------------------------------------- /app/src/main/java/com/m2049r/xmrwallet/OnUriScannedListener.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2017 m2049r 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.m2049r.xmrwallet; 18 | 19 | import com.m2049r.xmrwallet.data.BarcodeData; 20 | 21 | public interface OnUriScannedListener { 22 | boolean onUriScanned(BarcodeData barcodeData); 23 | } 24 | -------------------------------------------------------------------------------- /app/src/main/java/com/m2049r/xmrwallet/data/BluetoothInfo.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2018 m2049r 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.m2049r.xmrwallet.data; 18 | 19 | import android.bluetooth.BluetoothDevice; 20 | 21 | import java.util.Comparator; 22 | 23 | import lombok.Data; 24 | import lombok.Getter; 25 | 26 | @Data 27 | public class BluetoothInfo { 28 | @Getter 29 | final private String name; 30 | @Getter 31 | final private String address; 32 | @Getter 33 | private boolean bonded; 34 | 35 | public BluetoothInfo(BluetoothDevice device) { 36 | name = device.getName().trim(); 37 | address = device.getAddress(); 38 | bonded = device.getBondState() == BluetoothDevice.BOND_BONDED; 39 | } 40 | 41 | static public Comparator NameComparator = (o1, o2) -> o1.name.compareTo(o2.name); 42 | } 43 | -------------------------------------------------------------------------------- /app/src/main/java/com/m2049r/xmrwallet/data/CryptoAmount.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2024 m2049r 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.m2049r.xmrwallet.data; 18 | 19 | import lombok.Value; 20 | 21 | @Value 22 | public class CryptoAmount { 23 | Crypto crypto; 24 | double amount; 25 | 26 | public CryptoAmount newWithAmount(double amount) { 27 | return new CryptoAmount(this.crypto, amount); 28 | } 29 | } -------------------------------------------------------------------------------- /app/src/main/java/com/m2049r/xmrwallet/data/PendingTx.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2017 m2049r 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.m2049r.xmrwallet.data; 18 | 19 | import com.m2049r.xmrwallet.model.PendingTransaction; 20 | 21 | public class PendingTx { 22 | final public PendingTransaction.Status status; 23 | final public String error; 24 | final public long amount; 25 | final public long dust; 26 | final public long fee; 27 | final public String txId; 28 | final public long txCount; 29 | 30 | public PendingTx(PendingTransaction pendingTransaction) { 31 | status = pendingTransaction.getStatus(); 32 | error = pendingTransaction.getErrorString(); 33 | amount = pendingTransaction.getAmount(); 34 | dust = pendingTransaction.getDust(); 35 | fee = pendingTransaction.getFee(); 36 | txId = pendingTransaction.getFirstTxId(); 37 | txCount = pendingTransaction.getTxCount(); 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /app/src/main/java/com/m2049r/xmrwallet/fragment/send/PreShifter.java: -------------------------------------------------------------------------------- 1 | package com.m2049r.xmrwallet.fragment.send; 2 | 3 | import com.m2049r.xmrwallet.data.CryptoAmount; 4 | import com.m2049r.xmrwallet.service.shift.api.QueryOrderParameters; 5 | 6 | public interface PreShifter { 7 | CryptoAmount getAmount(); 8 | 9 | void onOrderParametersError(final Exception ex); 10 | 11 | void onOrderParametersReceived(final QueryOrderParameters orderParameters); 12 | 13 | boolean isActive(); 14 | 15 | void showProgress(); 16 | } 17 | -------------------------------------------------------------------------------- /app/src/main/java/com/m2049r/xmrwallet/fragment/send/SendConfirm.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2017 m2049r 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.m2049r.xmrwallet.fragment.send; 18 | 19 | import com.m2049r.xmrwallet.model.PendingTransaction; 20 | 21 | interface SendConfirm { 22 | void sendFailed(String errorText); 23 | 24 | void createTransactionFailed(String errorText); 25 | 26 | void transactionCreated(String txTag, PendingTransaction pendingTransaction); 27 | } 28 | -------------------------------------------------------------------------------- /app/src/main/java/com/m2049r/xmrwallet/fragment/send/SendWizardFragment.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2017 m2049r 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.m2049r.xmrwallet.fragment.send; 18 | 19 | import androidx.fragment.app.Fragment; 20 | 21 | import com.m2049r.xmrwallet.layout.SpendViewPager; 22 | 23 | abstract public class SendWizardFragment extends Fragment 24 | implements SpendViewPager.OnValidateFieldsListener { 25 | 26 | @Override 27 | public boolean onValidateFields() { 28 | return true; 29 | } 30 | 31 | public void onPauseFragment() { 32 | } 33 | 34 | public void onResumeFragment() { 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /app/src/main/java/com/m2049r/xmrwallet/fragment/send/Shifter.java: -------------------------------------------------------------------------------- 1 | package com.m2049r.xmrwallet.fragment.send; 2 | 3 | import com.m2049r.xmrwallet.service.shift.api.CreateOrder; 4 | import com.m2049r.xmrwallet.service.shift.api.RequestQuote; 5 | 6 | public interface Shifter { 7 | void invalidateShift(); 8 | 9 | void onQuoteError(final Exception ex); 10 | 11 | void showQuoteError(); 12 | 13 | void onQuoteReceived(RequestQuote quote); 14 | 15 | void onOrderCreated(CreateOrder order); 16 | 17 | void onOrderError(final Exception ex); 18 | 19 | boolean isActive(); 20 | 21 | void showProgress(Shifter.Stage stage); 22 | 23 | enum Stage { 24 | X, A, B, C 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /app/src/main/java/com/m2049r/xmrwallet/layout/DiffCallback.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2021 yorha-0x 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.m2049r.xmrwallet.layout; 18 | 19 | import androidx.recyclerview.widget.DiffUtil; 20 | 21 | import java.util.List; 22 | 23 | public abstract class DiffCallback extends DiffUtil.Callback { 24 | 25 | protected final List mOldList; 26 | protected final List mNewList; 27 | 28 | public DiffCallback(List oldList, List newList) { 29 | this.mOldList = oldList; 30 | this.mNewList = newList; 31 | } 32 | 33 | @Override 34 | public int getOldListSize() { 35 | return mOldList.size(); 36 | } 37 | 38 | @Override 39 | public int getNewListSize() { 40 | return mNewList.size(); 41 | } 42 | 43 | public abstract boolean areItemsTheSame(int oldItemPosition, int newItemPosition); 44 | 45 | public abstract boolean areContentsTheSame(int oldItemPosition, int newItemPosition); 46 | } -------------------------------------------------------------------------------- /app/src/main/java/com/m2049r/xmrwallet/ledger/Hardware.java: -------------------------------------------------------------------------------- 1 | package com.m2049r.xmrwallet.ledger; 2 | 3 | public interface Hardware { 4 | } 5 | -------------------------------------------------------------------------------- /app/src/main/java/com/m2049r/xmrwallet/model/Coins.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2023 m2049r 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.m2049r.xmrwallet.model; 18 | 19 | import java.util.List; 20 | 21 | import timber.log.Timber; 22 | 23 | public class Coins { 24 | static { 25 | System.loadLibrary("monerujo"); 26 | } 27 | 28 | private long handle; 29 | 30 | public Coins(long handle) { 31 | this.handle = handle; 32 | } 33 | 34 | public List getAll(int accountIndex, boolean unspentOnly) { 35 | return refresh(accountIndex, unspentOnly); 36 | } 37 | 38 | private native List refresh(int accountIndex, boolean unspentOnly); 39 | } 40 | -------------------------------------------------------------------------------- /app/src/main/java/com/m2049r/xmrwallet/model/CoinsInfo.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2023 m2049r 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.m2049r.xmrwallet.model; 18 | 19 | import lombok.Value; 20 | 21 | // this is not the CoinsInfo from the API as that is owned by the Coins object 22 | // this is a POJO 23 | @Value 24 | public class CoinsInfo { 25 | int accountIndex; 26 | int addressIndex; 27 | long amount; 28 | long blockheight; 29 | String txHash; 30 | boolean spent; 31 | boolean frozen; 32 | long unlockTime; 33 | boolean unlocked; 34 | 35 | public boolean isSpendable() { 36 | return !spent && unlocked; 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /app/src/main/java/com/m2049r/xmrwallet/model/NetworkType.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2018 m2049r 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.m2049r.xmrwallet.model; 18 | 19 | public enum NetworkType { 20 | NetworkType_Mainnet(0), 21 | NetworkType_Testnet(1), 22 | NetworkType_Stagenet(2); 23 | 24 | public static NetworkType fromInteger(int n) { 25 | switch (n) { 26 | case 0: 27 | return NetworkType_Mainnet; 28 | case 1: 29 | return NetworkType_Testnet; 30 | case 2: 31 | return NetworkType_Stagenet; 32 | } 33 | return null; 34 | } 35 | 36 | public int getValue() { 37 | return value; 38 | } 39 | 40 | private int value; 41 | 42 | NetworkType(int value) { 43 | this.value = value; 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /app/src/main/java/com/m2049r/xmrwallet/model/Transfer.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2017 m2049r 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.m2049r.xmrwallet.model; 18 | 19 | import android.os.Parcel; 20 | import android.os.Parcelable; 21 | 22 | public class Transfer implements Parcelable { 23 | public long amount; 24 | public String address; 25 | 26 | public Transfer(long amount, String address) { 27 | this.amount = amount; 28 | this.address = address; 29 | } 30 | 31 | @Override 32 | public void writeToParcel(Parcel out, int flags) { 33 | out.writeLong(amount); 34 | out.writeString(address); 35 | } 36 | 37 | public static final Parcelable.Creator CREATOR = new Parcelable.Creator() { 38 | public Transfer createFromParcel(Parcel in) { 39 | return new Transfer(in); 40 | } 41 | 42 | public Transfer[] newArray(int size) { 43 | return new Transfer[size]; 44 | } 45 | }; 46 | 47 | private Transfer(Parcel in) { 48 | amount = in.readLong(); 49 | address = in.readString(); 50 | } 51 | 52 | @Override 53 | public int describeContents() { 54 | return 0; 55 | } 56 | 57 | } -------------------------------------------------------------------------------- /app/src/main/java/com/m2049r/xmrwallet/service/exchange/api/ExchangeApi.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2006 The Android Open Source Project 3 | * Copyright (c) 2017 m2049r 4 | * 5 | * Licensed under the Apache License, Version 2.0 (the "License"); 6 | * you may not use this file except in compliance with the License. 7 | * You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | package com.m2049r.xmrwallet.service.exchange.api; 19 | 20 | 21 | import androidx.annotation.NonNull; 22 | 23 | 24 | public interface ExchangeApi { 25 | 26 | /** 27 | * Queries the exchnage rate 28 | * 29 | * @param baseCurrency base currency 30 | * @param quoteCurrency quote currency 31 | * @param callback the callback with the exchange rate 32 | */ 33 | void queryExchangeRate(@NonNull final String baseCurrency, @NonNull final String quoteCurrency, 34 | @NonNull final ExchangeCallback callback); 35 | 36 | String getName(); 37 | } 38 | 39 | -------------------------------------------------------------------------------- /app/src/main/java/com/m2049r/xmrwallet/service/exchange/api/ExchangeCallback.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2006 The Android Open Source Project 3 | * Copyright (c) 2017 m2049r 4 | * 5 | * Licensed under the Apache License, Version 2.0 (the "License"); 6 | * you may not use this file except in compliance with the License. 7 | * You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | package com.m2049r.xmrwallet.service.exchange.api; 19 | 20 | public interface ExchangeCallback { 21 | 22 | void onSuccess(ExchangeRate exchangeRate); 23 | 24 | void onError(Exception ex); 25 | 26 | } 27 | -------------------------------------------------------------------------------- /app/src/main/java/com/m2049r/xmrwallet/service/exchange/api/ExchangeException.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2017 m2049r 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.m2049r.xmrwallet.service.exchange.api; 18 | 19 | public class ExchangeException extends Exception { 20 | private final int code; 21 | private final String errorMsg; 22 | 23 | public String getErrorMsg() { 24 | return errorMsg; 25 | } 26 | 27 | public ExchangeException(final int code) { 28 | super(); 29 | this.code = code; 30 | this.errorMsg = null; 31 | } 32 | 33 | public ExchangeException(final String errorMsg) { 34 | super(); 35 | this.code = 0; 36 | this.errorMsg = errorMsg; 37 | } 38 | 39 | public ExchangeException(final int code, final String errorMsg) { 40 | super(); 41 | this.code = code; 42 | this.errorMsg = errorMsg; 43 | } 44 | 45 | public int getCode() { 46 | return code; 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /app/src/main/java/com/m2049r/xmrwallet/service/exchange/api/ExchangeRate.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2017 m2049r et al. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.m2049r.xmrwallet.service.exchange.api; 18 | 19 | public interface ExchangeRate { 20 | 21 | String getServiceName(); 22 | 23 | String getBaseCurrency(); 24 | 25 | String getQuoteCurrency(); 26 | 27 | double getRate(); 28 | 29 | } 30 | -------------------------------------------------------------------------------- /app/src/main/java/com/m2049r/xmrwallet/service/exchange/ecb/ExchangeRateImpl.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2019 m2049r et al. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.m2049r.xmrwallet.service.exchange.ecb; 18 | 19 | import androidx.annotation.NonNull; 20 | 21 | import com.m2049r.xmrwallet.service.exchange.api.ExchangeRate; 22 | 23 | import java.util.Date; 24 | 25 | class ExchangeRateImpl implements ExchangeRate { 26 | private final Date date; 27 | private final String baseCurrency = "EUR"; 28 | private final String quoteCurrency; 29 | private final double rate; 30 | 31 | @Override 32 | public String getServiceName() { 33 | return "ecb.europa.eu"; 34 | } 35 | 36 | @Override 37 | public String getBaseCurrency() { 38 | return baseCurrency; 39 | } 40 | 41 | @Override 42 | public String getQuoteCurrency() { 43 | return quoteCurrency; 44 | } 45 | 46 | @Override 47 | public double getRate() { 48 | return rate; 49 | } 50 | 51 | ExchangeRateImpl(@NonNull final String quoteCurrency, double rate, @NonNull final Date date) { 52 | super(); 53 | this.quoteCurrency = quoteCurrency; 54 | this.rate = rate; 55 | this.date = date; 56 | } 57 | } 58 | -------------------------------------------------------------------------------- /app/src/main/java/com/m2049r/xmrwallet/service/exchange/krakenFiat/ExchangeRateImpl.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2019-2023 m2049r et al. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.m2049r.xmrwallet.service.exchange.krakenFiat; 18 | 19 | import androidx.annotation.NonNull; 20 | 21 | import com.m2049r.xmrwallet.service.exchange.api.ExchangeApi; 22 | import com.m2049r.xmrwallet.service.exchange.api.ExchangeRate; 23 | 24 | import lombok.Getter; 25 | 26 | class ExchangeRateImpl implements ExchangeRate { 27 | @Getter 28 | private final String serviceName; 29 | @Getter 30 | private final String baseCurrency; 31 | @Getter 32 | private final String quoteCurrency; 33 | @Getter 34 | private final double rate; 35 | 36 | ExchangeRateImpl(@NonNull final String serviceName, @NonNull final String baseCurrency, @NonNull final String quoteCurrency, double rate) { 37 | super(); 38 | this.serviceName = serviceName; 39 | this.baseCurrency = baseCurrency; 40 | this.quoteCurrency = quoteCurrency; 41 | this.rate = rate; 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /app/src/main/java/com/m2049r/xmrwallet/service/exchange/yadio/ExchangeRateImpl.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2019 m2049r et al. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.m2049r.xmrwallet.service.exchange.yadio; 18 | 19 | import androidx.annotation.NonNull; 20 | 21 | import com.m2049r.xmrwallet.service.exchange.api.ExchangeRate; 22 | 23 | import java.util.Date; 24 | 25 | import lombok.Getter; 26 | 27 | class ExchangeRateImpl implements ExchangeRate { 28 | @Getter 29 | private final String baseCurrency = "EUR"; 30 | @Getter 31 | private final String quoteCurrency; 32 | @Getter 33 | private final double rate; 34 | private final Date date; 35 | 36 | @Override 37 | public String getServiceName() { 38 | return "yadio.io"; 39 | } 40 | 41 | ExchangeRateImpl(@NonNull final String quoteCurrency, double rate, final long timestamp) { 42 | super(); 43 | this.quoteCurrency = quoteCurrency; 44 | this.rate = rate; 45 | this.date = timestamp > 0 ? new Date(timestamp) : new Date(); 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /app/src/main/java/com/m2049r/xmrwallet/service/shift/NetworkCallback.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2017 m2049r et al. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.m2049r.xmrwallet.service.shift; 18 | 19 | import org.json.JSONObject; 20 | 21 | public interface NetworkCallback { 22 | 23 | void onSuccess(JSONObject jsonObject); 24 | 25 | void onError(Exception ex, JSONObject json); 26 | } 27 | -------------------------------------------------------------------------------- /app/src/main/java/com/m2049r/xmrwallet/service/shift/ShiftApiCall.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2017 m2049r et al. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.m2049r.xmrwallet.service.shift; 18 | 19 | import androidx.annotation.NonNull; 20 | 21 | import org.json.JSONObject; 22 | 23 | public interface ShiftApiCall { 24 | void get(@NonNull final String path, final String parameters, @NonNull final NetworkCallback callback); 25 | 26 | void post(@NonNull final String path, final JSONObject data, @NonNull final NetworkCallback callback); 27 | } 28 | -------------------------------------------------------------------------------- /app/src/main/java/com/m2049r/xmrwallet/service/shift/ShiftCallback.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2017 m2049r et al. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.m2049r.xmrwallet.service.shift; 18 | 19 | public interface ShiftCallback { 20 | 21 | void onSuccess(T t); 22 | 23 | void onError(Exception ex); 24 | } 25 | -------------------------------------------------------------------------------- /app/src/main/java/com/m2049r/xmrwallet/service/shift/ShiftError.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2017-2021 m2049r et al. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.m2049r.xmrwallet.service.shift; 18 | 19 | import androidx.annotation.NonNull; 20 | 21 | import lombok.Getter; 22 | import lombok.RequiredArgsConstructor; 23 | 24 | @RequiredArgsConstructor 25 | public class ShiftError { 26 | @Getter 27 | private final Type type; 28 | @Getter 29 | private final String errorMsg; 30 | 31 | public enum Type { 32 | SERVICE, 33 | INFRASTRUCTURE 34 | } 35 | 36 | public boolean isRetryable() { 37 | return type == Type.INFRASTRUCTURE; 38 | } 39 | 40 | @Override 41 | @NonNull 42 | public String toString() { 43 | return getErrorMsg(); 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /app/src/main/java/com/m2049r/xmrwallet/service/shift/ShiftException.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2017-2021 m2049r et al. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.m2049r.xmrwallet.service.shift; 18 | 19 | import androidx.annotation.Nullable; 20 | 21 | import lombok.Getter; 22 | import lombok.RequiredArgsConstructor; 23 | 24 | @RequiredArgsConstructor 25 | public class ShiftException extends Exception { 26 | @Getter 27 | private final int code; 28 | @Getter 29 | @Nullable 30 | private final ShiftError error; 31 | 32 | public ShiftException(int code) { 33 | this(code, null); 34 | } 35 | 36 | public String getErrorMessage() { 37 | return (error != null) ? error.getErrorMsg() : ("HTTP:" + code); 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /app/src/main/java/com/m2049r/xmrwallet/service/shift/ShiftType.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2024 m2049r 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.m2049r.xmrwallet.service.shift; 18 | 19 | public enum ShiftType { 20 | FIXED, FLOAT; 21 | } 22 | -------------------------------------------------------------------------------- /app/src/main/java/com/m2049r/xmrwallet/service/shift/api/CreateOrder.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2017-2021 m2049r et al. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.m2049r.xmrwallet.service.shift.api; 18 | 19 | import com.m2049r.xmrwallet.service.shift.ShiftType; 20 | 21 | import java.util.Date; 22 | 23 | public interface CreateOrder { 24 | String getTag(); 25 | 26 | String getBtcCurrency(); 27 | 28 | double getBtcAmount(); 29 | 30 | String getBtcAddress(); 31 | 32 | String getQuoteId(); 33 | 34 | String getOrderId(); 35 | 36 | double getXmrAmount(); 37 | 38 | String getXmrAddress(); 39 | 40 | Date getCreatedAt(); 41 | 42 | Date getExpiresAt(); 43 | 44 | String getQueryOrderId(); 45 | 46 | ShiftType getType(); 47 | } 48 | -------------------------------------------------------------------------------- /app/src/main/java/com/m2049r/xmrwallet/service/shift/api/QueryOrderParameters.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2017-2021 m2049r et al. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.m2049r.xmrwallet.service.shift.api; 18 | 19 | public interface QueryOrderParameters { 20 | 21 | double getLowerLimit(); // XMR 22 | 23 | double getPrice(); // BTC/XMR 24 | 25 | double getUpperLimit(); // XMR 26 | 27 | } 28 | -------------------------------------------------------------------------------- /app/src/main/java/com/m2049r/xmrwallet/service/shift/api/RequestQuote.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2017-2021 m2049r et al. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.m2049r.xmrwallet.service.shift.api; 18 | 19 | import com.m2049r.xmrwallet.service.shift.ShiftType; 20 | 21 | import java.util.Date; 22 | 23 | public interface RequestQuote { 24 | 25 | double getBtcAmount(); // what we want to receive 26 | 27 | double getXmrAmount(); // the XMR we need to send 28 | 29 | String getId(); // id 30 | 31 | Date getCreatedAt(); // createdAt 32 | 33 | Date getExpiresAt(); // expiresAt 34 | 35 | double getPrice(); // rate 36 | 37 | ShiftType getType(); 38 | } 39 | -------------------------------------------------------------------------------- /app/src/main/java/com/m2049r/xmrwallet/service/shift/process/PreShiftProcess.java: -------------------------------------------------------------------------------- 1 | package com.m2049r.xmrwallet.service.shift.process; 2 | 3 | import com.m2049r.xmrwallet.service.shift.ShiftService; 4 | 5 | public interface PreShiftProcess { 6 | ShiftService getService(); 7 | 8 | void run(); 9 | 10 | void restart(); 11 | } -------------------------------------------------------------------------------- /app/src/main/java/com/m2049r/xmrwallet/service/shift/process/ShiftProcess.java: -------------------------------------------------------------------------------- 1 | package com.m2049r.xmrwallet.service.shift.process; 2 | 3 | import com.m2049r.xmrwallet.data.TxDataBtc; 4 | import com.m2049r.xmrwallet.service.shift.ShiftService; 5 | 6 | public interface ShiftProcess { 7 | ShiftService getService(); 8 | 9 | void run(TxDataBtc txData); 10 | 11 | void restart(); 12 | 13 | void retryCreateOrder(); 14 | } -------------------------------------------------------------------------------- /app/src/main/java/com/m2049r/xmrwallet/util/AmountHelper.java: -------------------------------------------------------------------------------- 1 | package com.m2049r.xmrwallet.util; 2 | 3 | import java.text.DecimalFormat; 4 | import java.text.DecimalFormatSymbols; 5 | import java.util.Locale; 6 | 7 | public class AmountHelper { 8 | static final DecimalFormat AmountFormatter_12; 9 | 10 | static { 11 | AmountFormatter_12 = new DecimalFormat(); 12 | AmountFormatter_12.setDecimalFormatSymbols(new DecimalFormatSymbols(Locale.US)); 13 | AmountFormatter_12.setMinimumIntegerDigits(1); 14 | AmountFormatter_12.setMaximumFractionDigits(12); 15 | AmountFormatter_12.setGroupingUsed(false); 16 | } 17 | 18 | public static String format(double amount) { 19 | return AmountFormatter_12.format(amount); 20 | } 21 | 22 | public static String format_6(double amount) { 23 | int n = (int) Math.ceil(Math.log10(amount)); 24 | int d = Math.max(2, 6 - n); 25 | final String fmt = "%,." + d + "f"; 26 | return String.format(Locale.getDefault(), fmt, amount); 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /app/src/main/java/com/m2049r/xmrwallet/util/DateHelper.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2017 m2049r er al. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.m2049r.xmrwallet.util; 18 | 19 | import java.text.ParseException; 20 | import java.text.SimpleDateFormat; 21 | import java.util.Date; 22 | 23 | public class DateHelper { 24 | public static final SimpleDateFormat DATETIME_FORMATTER = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ"); 25 | 26 | public static Date parse(String dateString) throws ParseException { 27 | return DATETIME_FORMATTER.parse(dateString.replaceAll("Z$", "+0000")); 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /app/src/main/java/com/m2049r/xmrwallet/util/DayNightMode.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2020 m2049r 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.m2049r.xmrwallet.util; 18 | 19 | import androidx.appcompat.app.AppCompatDelegate; 20 | 21 | public enum DayNightMode { 22 | // order must match R.array.daynight_themes 23 | AUTO(AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM), 24 | DAY(AppCompatDelegate.MODE_NIGHT_NO), 25 | NIGHT(AppCompatDelegate.MODE_NIGHT_YES), 26 | UNKNOWN(AppCompatDelegate.MODE_NIGHT_UNSPECIFIED); 27 | 28 | final private int nightMode; 29 | 30 | DayNightMode(int nightMode) { 31 | this.nightMode = nightMode; 32 | } 33 | 34 | public int getNightMode() { 35 | return nightMode; 36 | } 37 | 38 | static public DayNightMode getValue(int nightMode) { 39 | for (DayNightMode mode : DayNightMode.values()) { 40 | if (mode.nightMode == nightMode) 41 | return mode; 42 | } 43 | return UNKNOWN; 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /app/src/main/java/com/m2049r/xmrwallet/util/IdHelper.java: -------------------------------------------------------------------------------- 1 | package com.m2049r.xmrwallet.util; 2 | 3 | import com.m2049r.xmrwallet.BuildConfig; 4 | 5 | import org.json.JSONException; 6 | import org.json.JSONObject; 7 | 8 | import okhttp3.Request; 9 | 10 | public class IdHelper { 11 | static public String idOrNot(String id) { 12 | return isId(id) ? id : ""; 13 | } 14 | 15 | static public boolean isId(String id) { 16 | return (id != null) && !id.isEmpty() && !"null".equals(id); 17 | } 18 | 19 | static public String asParameter(String name, String id) { 20 | return isId(id) ? (name + "=" + id) : ""; 21 | } 22 | 23 | static public void jsonPut(JSONObject jsonObject, String name, String id) throws JSONException { 24 | if (isId(id)) { 25 | jsonObject.put(name, id); 26 | } 27 | } 28 | 29 | static public void addHeader(Request.Builder builder, String name, String id) { 30 | if (isId(id)) { 31 | builder.addHeader(name, id); 32 | } 33 | } 34 | } -------------------------------------------------------------------------------- /app/src/main/java/com/m2049r/xmrwallet/util/NodePinger.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2018 m2049r 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.m2049r.xmrwallet.util; 18 | 19 | import com.m2049r.xmrwallet.data.NodeInfo; 20 | 21 | import java.util.ArrayList; 22 | import java.util.Collection; 23 | import java.util.List; 24 | import java.util.concurrent.Callable; 25 | import java.util.concurrent.ExecutorService; 26 | import java.util.concurrent.Executors; 27 | import java.util.concurrent.TimeUnit; 28 | 29 | import timber.log.Timber; 30 | 31 | public class NodePinger { 32 | static final public int NUM_THREADS = 10; 33 | static final public long MAX_TIME = 5L; // seconds 34 | 35 | public interface Listener { 36 | void publish(NodeInfo node); 37 | } 38 | 39 | static public void execute(Collection nodes, final Listener listener) { 40 | final ExecutorService exeService = Executors.newFixedThreadPool(NUM_THREADS); 41 | List> taskList = new ArrayList<>(); 42 | for (NodeInfo node : nodes) { 43 | taskList.add(() -> node.testRpcService(listener)); 44 | } 45 | 46 | try { 47 | exeService.invokeAll(taskList, MAX_TIME, TimeUnit.SECONDS); 48 | } catch (InterruptedException ex) { 49 | Timber.w(ex); 50 | } 51 | exeService.shutdownNow(); 52 | } 53 | } 54 | -------------------------------------------------------------------------------- /app/src/main/java/com/m2049r/xmrwallet/util/OnionHelper.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2021 m2049r 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.m2049r.xmrwallet.util; 18 | 19 | public class OnionHelper { 20 | 21 | public static boolean isOnionHost(String hostname) { 22 | return hostname.endsWith(".onion"); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /app/src/main/java/com/m2049r/xmrwallet/util/ServiceHelper.java: -------------------------------------------------------------------------------- 1 | package com.m2049r.xmrwallet.util; 2 | 3 | import com.m2049r.xmrwallet.model.NetworkType; 4 | import com.m2049r.xmrwallet.model.WalletManager; 5 | import com.m2049r.xmrwallet.service.exchange.api.ExchangeApi; 6 | 7 | import okhttp3.HttpUrl; 8 | 9 | public class ServiceHelper { 10 | 11 | static public ExchangeApi getExchangeApi() { 12 | return new com.m2049r.xmrwallet.service.exchange.krakenFiat.ExchangeApiImpl(); 13 | } 14 | 15 | static private final ExchangeApi[] fiatApis = new ExchangeApi[]{ 16 | new com.m2049r.xmrwallet.service.exchange.ecb.ExchangeApiImpl(), 17 | new com.m2049r.xmrwallet.service.exchange.yadio.ExchangeApiImpl()}; 18 | 19 | static public ExchangeApi getFiatApi(String symbol) { 20 | return (symbol.length() == 3) ? fiatApis[0] : fiatApis[1]; 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /app/src/main/java/com/m2049r/xmrwallet/widget/CTextInputLayout.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2017 m2049r 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | // based on from https://stackoverflow.com/a/45325876 (which did not work for me) 18 | 19 | package com.m2049r.xmrwallet.widget; 20 | 21 | import android.content.Context; 22 | import android.util.AttributeSet; 23 | import android.widget.EditText; 24 | 25 | import com.google.android.material.textfield.TextInputLayout; 26 | 27 | public class CTextInputLayout extends TextInputLayout { 28 | public CTextInputLayout(Context context) { 29 | super(context); 30 | } 31 | 32 | public CTextInputLayout(Context context, AttributeSet attrs) { 33 | super(context, attrs); 34 | } 35 | 36 | public CTextInputLayout(Context context, AttributeSet attrs, int defStyleAttr) { 37 | super(context, attrs, defStyleAttr); 38 | } 39 | 40 | @Override 41 | public int getBaseline() { 42 | final EditText editText = getEditText(); 43 | assert editText != null; 44 | return editText.getBaseline() - (getMeasuredHeight() - editText.getMeasuredHeight()); 45 | } 46 | } -------------------------------------------------------------------------------- /app/src/main/java/com/m2049r/xmrwallet/widget/DropDownEditText.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2017 m2049r 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | // https://stackoverflow.com/questions/2126717/android-autocompletetextview-show-suggestions-when-no-text-entered 18 | 19 | package com.m2049r.xmrwallet.widget; 20 | 21 | import android.content.Context; 22 | import android.graphics.Rect; 23 | import android.util.AttributeSet; 24 | 25 | import androidx.appcompat.widget.AppCompatAutoCompleteTextView; 26 | 27 | public class DropDownEditText extends AppCompatAutoCompleteTextView { 28 | 29 | public DropDownEditText(Context context) { 30 | super(context); 31 | } 32 | 33 | public DropDownEditText(Context arg0, AttributeSet arg1) { 34 | super(arg0, arg1); 35 | } 36 | 37 | public DropDownEditText(Context arg0, AttributeSet arg1, int arg2) { 38 | super(arg0, arg1, arg2); 39 | } 40 | 41 | @Override 42 | public boolean enoughToFilter() { 43 | return true; 44 | } 45 | 46 | @Override 47 | protected void onFocusChanged(boolean focused, int direction, 48 | Rect previouslyFocusedRect) { 49 | super.onFocusChanged(focused, direction, previouslyFocusedRect); 50 | if (focused && getAdapter() != null) { 51 | performFiltering("", 0); 52 | } 53 | } 54 | 55 | } -------------------------------------------------------------------------------- /app/src/main/java/com/theromus/sha/Parameters.java: -------------------------------------------------------------------------------- 1 | package com.theromus.sha; 2 | 3 | /** 4 | * The parameters defining the standard FIPS 202. 5 | * 6 | * @author romus 7 | */ 8 | public enum Parameters { 9 | KECCAK_224 (1152, 0x01, 224), 10 | KECCAK_256 (1088, 0x01, 256), 11 | KECCAK_384 (832, 0x01, 384), 12 | KECCAK_512 (576, 0x01, 512), 13 | 14 | SHA3_224 (1152, 0x06, 224), 15 | SHA3_256 (1088, 0x06, 256), 16 | SHA3_384 (832, 0x06, 384), 17 | SHA3_512 (576, 0x06, 512), 18 | 19 | SHAKE128 (1344, 0x1F, 256), 20 | SHAKE256 (1088, 0x1F, 512); 21 | 22 | private final int rate; 23 | 24 | /** 25 | * Delimited suffix. 26 | */ 27 | public final int d; 28 | 29 | /** 30 | * Output length (bits). 31 | */ 32 | public final int outputLen; 33 | 34 | Parameters(int rate, int d, int outputLen) { 35 | this.rate = rate; 36 | this.d = d; 37 | this.outputLen = outputLen; 38 | } 39 | 40 | public int getRate() { 41 | return rate; 42 | } 43 | 44 | public int getD() { 45 | return d; 46 | } 47 | 48 | public int getOutputLen() { 49 | return outputLen; 50 | } 51 | } 52 | -------------------------------------------------------------------------------- /app/src/main/res/anim/cycle_7.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /app/src/main/res/anim/fab_close.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 13 | 18 | -------------------------------------------------------------------------------- /app/src/main/res/anim/fab_close_screen.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 9 | -------------------------------------------------------------------------------- /app/src/main/res/anim/fab_open.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 13 | 18 | -------------------------------------------------------------------------------- /app/src/main/res/anim/fab_open_screen.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 9 | -------------------------------------------------------------------------------- /app/src/main/res/anim/fab_pulse.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 15 | -------------------------------------------------------------------------------- /app/src/main/res/anim/rotate_backward.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/anim/rotate_forward.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/anim/shake.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /app/src/main/res/color/btn_color_selector.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-v24/ic_check_circle.xml: -------------------------------------------------------------------------------- 1 | 7 | 8 | 9 | 15 | 18 | 21 | 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-v24/ic_launcher_foreground.xml: -------------------------------------------------------------------------------- 1 | 7 | 11 | 13 | 14 | 20 | 21 | 22 | 23 | 24 | 25 | 28 | 31 | 32 | 33 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-v24/ic_launcher_monochrome.xml: -------------------------------------------------------------------------------- 1 | 6 | 10 | 13 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-v24/ic_xmrto_btc_off.xml: -------------------------------------------------------------------------------- 1 | 6 | 10 | 14 | 15 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-v24/ic_xmrto_eth_off.xml: -------------------------------------------------------------------------------- 1 | 6 | 10 | 15 | 19 | 24 | 28 | 33 | 38 | 39 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-v24/ic_xmrto_ltc_off.xml: -------------------------------------------------------------------------------- 1 | 6 | 10 | 14 | 15 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-v24/ic_xmrto_sol_off.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 12 | 13 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/backgound_seed.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 9 | 14 | 15 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/backgound_toolbar_mainnet.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/backgound_toolbar_streetmode.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/button_green.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/button_selector_green.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/dot_dark.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/dot_light.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/gradient_all.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/gradient_oval.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 9 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/gradient_street.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/gradient_street_efab.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/gunther_24dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/m2049r/xmrwallet/41a7b7ba6123920ba88145c1fc1ec3a6974b991a/app/src/main/res/drawable/gunther_24dp.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/gunther_coder.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/m2049r/xmrwallet/41a7b7ba6123920ba88145c1fc1ec3a6974b991a/app/src/main/res/drawable/gunther_coder.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/gunther_csi_24dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/m2049r/xmrwallet/41a7b7ba6123920ba88145c1fc1ec3a6974b991a/app/src/main/res/drawable/gunther_csi_24dp.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/gunther_desaturated.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/m2049r/xmrwallet/41a7b7ba6123920ba88145c1fc1ec3a6974b991a/app/src/main/res/drawable/gunther_desaturated.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_account_balance_wallet_black_24dp.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_add.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_add_circle.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_all_inclusive.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_arrow_back.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_bluetooth_24.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_bluetooth_connected_24.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_bluetooth_disabled_24.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_bluetooth_searching_24.xml: -------------------------------------------------------------------------------- 1 | 8 | 11 | 12 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_check_circle.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_check_circle_xmr.xml: -------------------------------------------------------------------------------- 1 | 6 | 11 | 16 | 21 | 26 | 27 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_close_white_24dp.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_content_copy_24dp.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_content_paste_24dp.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_done_all.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_error_red_24dp.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_error_red_36dp.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 12 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_exolix_icon.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 12 | 13 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_eye.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 19 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_eye_black_24dp.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_favorite_24dp.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_favorite_border_24dp.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_help_white_24dp.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_import.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_info_outline_black_24dp.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_info_outline_gray_24dp.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_info_white_24dp.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_key.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 11 | 14 | 29 | 30 | 31 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_keyboard_arrow_down.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_keyboard_arrow_up.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_launch_external.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_ledger_restore.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 12 | 15 | 16 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_lock_24dp.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_monero.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 12 | 13 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_monero_bw.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 12 | 13 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_monero_logo_b.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/m2049r/xmrwallet/41a7b7ba6123920ba88145c1fc1ec3a6974b991a/app/src/main/res/drawable/ic_monero_logo_b.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_monerujo_qr.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 12 | 13 | 19 | 20 | 21 | 22 | 23 | 24 | 27 | 30 | 31 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_navigate_next.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_navigate_prev.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_network_clearnet.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_network_tor_on.xml: -------------------------------------------------------------------------------- 1 | 6 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_new.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 32 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_outline_folder_24.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_outline_folder_open_24.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_pending.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_renew.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_scan.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_seed.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 12 | 15 | 18 | 21 | 22 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_send.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_settings.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_share.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_sidekick_restore.xml: -------------------------------------------------------------------------------- 1 | 6 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_sideshift_icon.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 12 | 13 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_smiley_ecstatic_filled.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_smiley_gunther_filled.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 12 | 13 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_smiley_happy_filled.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_smiley_meh_filled.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_smiley_neutral_filled.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_smiley_sad_filled.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_statsup.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_success.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_toll.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 12 | 13 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_warning_24dp.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_wifi_1_bar.xml: -------------------------------------------------------------------------------- 1 | 6 | 10 | 13 | 14 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_wifi_2_bar.xml: -------------------------------------------------------------------------------- 1 | 6 | 10 | 13 | 14 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_wifi_3_bar.xml: -------------------------------------------------------------------------------- 1 | 6 | 10 | 13 | 14 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_wifi_4_bar.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_wifi_lock.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_wifi_off.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_xmrto_btc.xml: -------------------------------------------------------------------------------- 1 | 6 | 10 | 14 | 15 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_xmrto_btc_off.xml: -------------------------------------------------------------------------------- 1 | 6 | 10 | 14 | 15 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_xmrto_eth.xml: -------------------------------------------------------------------------------- 1 | 6 | 10 | 15 | 19 | 24 | 28 | 33 | 38 | 39 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_xmrto_eth_off.xml: -------------------------------------------------------------------------------- 1 | 6 | 10 | 15 | 19 | 24 | 28 | 33 | 38 | 39 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_xmrto_ltc.xml: -------------------------------------------------------------------------------- 1 | 6 | 10 | 14 | 15 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_xmrto_ltc_off.xml: -------------------------------------------------------------------------------- 1 | 6 | 10 | 14 | 15 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_xmrto_sol_off.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 12 | 13 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/logo_horizontol_xmrujo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/m2049r/xmrwallet/41a7b7ba6123920ba88145c1fc1ec3a6974b991a/app/src/main/res/drawable/logo_horizontol_xmrujo.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/onboarding_dots.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/selector_login.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_login.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 16 | 17 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_sidekick.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 14 | 15 | 20 | 21 | 25 | 26 | 31 | 32 | 33 | -------------------------------------------------------------------------------- /app/src/main/res/layout/bluetooth_device_name.xml: -------------------------------------------------------------------------------- 1 | 15 | 19 | -------------------------------------------------------------------------------- /app/src/main/res/layout/checkbox_confirm.xml: -------------------------------------------------------------------------------- 1 | 4 | 5 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /app/src/main/res/layout/fragment_about.xml: -------------------------------------------------------------------------------- 1 | 2 | 9 | 10 | 14 | 15 | 19 | 20 | 26 | 27 | 34 | 35 | 45 | 46 | 47 | 48 | -------------------------------------------------------------------------------- /app/src/main/res/layout/fragment_credits.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 13 | 14 | 18 | 19 | 28 | 29 | 30 | 31 | -------------------------------------------------------------------------------- /app/src/main/res/layout/fragment_help.xml: -------------------------------------------------------------------------------- 1 | 2 | 9 | 10 | 20 | 21 | -------------------------------------------------------------------------------- /app/src/main/res/layout/fragment_privacy_policy.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 13 | 14 | 18 | 19 | 29 | 30 | 31 | 32 | -------------------------------------------------------------------------------- /app/src/main/res/layout/fragment_sidekick_connect.xml: -------------------------------------------------------------------------------- 1 | 2 | 9 | 10 | 16 | 17 | 25 | 26 | 30 | 31 | 38 | 39 | 40 | -------------------------------------------------------------------------------- /app/src/main/res/layout/item_bluetooth.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 16 | 17 | 23 | 24 | 30 | 31 | 37 | 38 | 39 | -------------------------------------------------------------------------------- /app/src/main/res/layout/item_spinner.xml: -------------------------------------------------------------------------------- 1 | 2 | 12 | -------------------------------------------------------------------------------- /app/src/main/res/layout/item_spinner_balance.xml: -------------------------------------------------------------------------------- 1 | 2 | 12 | -------------------------------------------------------------------------------- /app/src/main/res/layout/item_spinner_dropdown_item.xml: -------------------------------------------------------------------------------- 1 | 2 | 12 | -------------------------------------------------------------------------------- /app/src/main/res/layout/item_wallet.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 15 | 16 | 26 | 27 | 34 | 35 | -------------------------------------------------------------------------------- /app/src/main/res/layout/nav_header.xml: -------------------------------------------------------------------------------- 1 | 2 | 9 | 10 | 18 | 19 | 27 | 28 | -------------------------------------------------------------------------------- /app/src/main/res/layout/prompt_password.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 17 | 18 | 24 | 25 | 26 | 27 | 34 | -------------------------------------------------------------------------------- /app/src/main/res/layout/prompt_rename.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 17 | 18 | 23 | 24 | 31 | 32 | -------------------------------------------------------------------------------- /app/src/main/res/layout/template_notice.xml: -------------------------------------------------------------------------------- 1 | 2 | 12 | 13 | 26 | 27 | 37 | 38 | -------------------------------------------------------------------------------- /app/src/main/res/layout/view_send_progress.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 14 | 15 | 21 | 22 | 29 | 30 | 37 | 38 | 45 | 46 | 47 | 48 | -------------------------------------------------------------------------------- /app/src/main/res/menu/create_wallet_keys.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 11 | 12 | -------------------------------------------------------------------------------- /app/src/main/res/menu/create_wallet_ledger.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 11 | 12 | -------------------------------------------------------------------------------- /app/src/main/res/menu/create_wallet_new.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 11 | 12 | -------------------------------------------------------------------------------- /app/src/main/res/menu/create_wallet_seed.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 11 | 12 | 18 | 19 | -------------------------------------------------------------------------------- /app/src/main/res/menu/create_wallet_sidekick.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 11 | 12 | -------------------------------------------------------------------------------- /app/src/main/res/menu/create_wallet_view.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 11 | 12 | -------------------------------------------------------------------------------- /app/src/main/res/menu/drawer_view.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 7 | 10 | 14 | 15 | -------------------------------------------------------------------------------- /app/src/main/res/menu/list_context_menu.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 8 | 9 | 13 | 14 | 18 | 19 | 23 | 24 | 28 | 29 | 33 | -------------------------------------------------------------------------------- /app/src/main/res/menu/list_menu.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 11 | 17 | -------------------------------------------------------------------------------- /app/src/main/res/menu/node_menu.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 11 | 12 | 17 | -------------------------------------------------------------------------------- /app/src/main/res/menu/receive_menu.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 11 | 12 | -------------------------------------------------------------------------------- /app/src/main/res/menu/send_menu.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 11 | 12 | -------------------------------------------------------------------------------- /app/src/main/res/menu/sidekick_connect_menu.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 11 | 12 | -------------------------------------------------------------------------------- /app/src/main/res/menu/tx_info_menu.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 11 | 12 | 18 | 19 | -------------------------------------------------------------------------------- /app/src/main/res/menu/wallet_details_help_menu.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 11 | 12 | -------------------------------------------------------------------------------- /app/src/main/res/menu/wallet_details_menu.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 11 | 12 | 17 | 18 | -------------------------------------------------------------------------------- /app/src/main/res/menu/wallet_menu.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 12 | 13 | 18 | 19 | 24 | 25 | 30 | 31 | 36 | 37 | 42 | 43 | 48 | 49 | -------------------------------------------------------------------------------- /app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/ic_launcher.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/m2049r/xmrwallet/41a7b7ba6123920ba88145c1fc1ec3a6974b991a/app/src/main/res/mipmap-hdpi/ic_launcher.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/ic_launcher_round.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/m2049r/xmrwallet/41a7b7ba6123920ba88145c1fc1ec3a6974b991a/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/ic_launcher.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/m2049r/xmrwallet/41a7b7ba6123920ba88145c1fc1ec3a6974b991a/app/src/main/res/mipmap-mdpi/ic_launcher.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/ic_launcher_round.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/m2049r/xmrwallet/41a7b7ba6123920ba88145c1fc1ec3a6974b991a/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/ic_launcher.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/m2049r/xmrwallet/41a7b7ba6123920ba88145c1fc1ec3a6974b991a/app/src/main/res/mipmap-xhdpi/ic_launcher.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/m2049r/xmrwallet/41a7b7ba6123920ba88145c1fc1ec3a6974b991a/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/ic_launcher.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/m2049r/xmrwallet/41a7b7ba6123920ba88145c1fc1ec3a6974b991a/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/m2049r/xmrwallet/41a7b7ba6123920ba88145c1fc1ec3a6974b991a/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/m2049r/xmrwallet/41a7b7ba6123920ba88145c1fc1ec3a6974b991a/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/m2049r/xmrwallet/41a7b7ba6123920ba88145c1fc1ec3a6974b991a/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp -------------------------------------------------------------------------------- /app/src/main/res/transition/details.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /app/src/main/res/values-cs/about.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | Zavřít 4 | Já jsem monerujo 5 | Verze %1$s (%2$d) 6 | Poděkování 8 |
9 | m2049r, baltsar777, anhdres, keejef, 10 | rehrar, EarlOfEgo, ErCiccione et al. 11 |

12 | monerujo.io 13 | ]]>
14 |
15 | -------------------------------------------------------------------------------- /app/src/main/res/values-cs/help.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /app/src/main/res/values-cs/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /app/src/main/res/values-el/about.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /app/src/main/res/values-et/help.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /app/src/main/res/values-nb/about.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | Lukk 4 | Jeg er monerujo 5 | Versjon %1$s (%2$d) 6 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/values-night-v23/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/values-night-v27/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 12 | -------------------------------------------------------------------------------- /app/src/main/res/values-night/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 9 | 10 | 13 | -------------------------------------------------------------------------------- /app/src/main/res/values-sr/about.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /app/src/main/res/values-sr/help.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /app/src/main/res/values-v23/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/values-v27/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 12 | -------------------------------------------------------------------------------- /app/src/main/res/values-zh-rCN/about.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 关闭 4 | 我是 monerujo 5 | 版本 %1$s (%2$d) 6 | 7 | 感谢 9 |
10 | m2049r, baltsar777, anhdres, keejef, 11 | rehrar, EarlOfEgo, ErCiccione et al. 12 |

13 | monerujo.io 14 | ]]>
15 | 16 | 隐私政策 18 |

该页将帮助您了解 monerujo: Monero Wallet 是如何收集、使用以及披露用户信息。

19 |

使用该App,代表您已经明确同意该隐私政策。

20 |

收集的信息

21 |

个人信息指可用于辨认个人身份的任何信息。

22 |

Monerujo只会在本地使用您的Monero密钥以及公开地址,以处理交易,并再加密后发往门罗网络。

23 |

其他个人信息都不会被 monerujo 收集。

24 |

如果您使用交易的功能(可选),monerujo將通过coinmarketcap.com的公开 25 | API 获取当前汇率。如果您想了解被收集的信息如何被使用,请访问 https://coinmarketcap.com/privacy 26 | 查看他们的隐私政策。

27 |

如果您想使用该App支付款项至比特币地址,您将使用 Exolix 所提供的服务。Monerujo 28 | 将发送比特币的目标地址以及金额信息至Exolix,您的IP在此时也可能会被收集。请访问 https://exolix.com/privacy 29 | 查看他们的隐私政策。

30 |

应用程序权限

31 |
    32 |
  • INTERNET : 通过Monero Daemon节点连接至Monero网络。
  • 33 |
  • READ_EXTERNAL_STORAGE : 读取设备上的钱包文件。
  • 34 |
  • WRITE_EXTERNAL_STORAGE : 写入设备上的钱包文件。
  • 35 |
  • WAKE_LOCK : 同步时,防止手机进入待机状态。
  • 36 |
  • CAMERA : 扫描QR码以接收Monero。
  • 37 |
38 |

政策更新

39 |

本隐私政策可能会不定期更新。在更新的同时,我們也会在该App以及网站 (www.monerujo.io) 40 | 上公告新的隐私政策和改动条款。但我们仍建议您定时查看该隐私政策以及时知晓其变动。 41 |

本隐私政策最后更新日期为 2017 年 11 月 10 日。 42 |

43 |

联系我们

44 |

如果您对隐私政策或个人信息的收集和处理有任何疑问,欢迎发送电子邮件至privacy@monerujo.io。

45 | ]]>
46 |
47 | -------------------------------------------------------------------------------- /app/src/main/res/values-zh-rTW/about.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 關閉 4 | 版本 %1$s (%2$d) 5 | 6 | 致謝 8 |
9 | m2049r, baltsar777, anhdres, keejef, 10 | rehrar, EarlOfEgo, ErCiccione et al. 11 |

12 | monerujo.io 13 | ]]>
14 | 15 | 隱私權政策 17 |

本頁將協助您了解 monerujo: Monero Wallet 是如何收集、使用以及披露用戶的資料。

18 |

當您使用本 App 時,代表您已經明確同意本隱私權政策。

19 |

資料收集方式

20 |

個人資料為可以協助辨識個體的任意資料。

21 |

Monerujo 只會在本地端使用您的 Monero 金鑰以及公開地址執行必要的處理,並在加密後發送至 22 | Monero 網路進行交易。

23 |

其餘的個人資料都不會被 monerujo 收集。

24 |

倘若您有使用匯兌的功能(可選用),monerujo 將透過 coinmarketcap.com 的公開 25 | API 抓取目前的匯率。若欲了解您要求的資料會如何被收集及使用,請至 https://coinmarketcap.com/privacy 26 | 觀看他們的隱私權政策。

27 |

若您想使用本 App 支付款項至 BTC 位址,您將使用 Exolix 所提供的服務。Monerujo 28 | 將發送 BTC 目標位址以及金額至 Exolix,您的 IP 在此時也可能會被收集。詳情請至 https://exolix.com/privacy 29 | 觀看他們的隱私權政策。

30 |

應用程式權限

31 |
    32 |
  • INTERNET:透過 Monero 節點連接至 Monero 網路。
  • 33 |
  • READ_EXTERNAL_STORAGE:讀取手機上的錢包資訊。
  • 34 |
  • WRITE_EXTERNAL_STORAGE:儲存錢包資訊於手機上。
  • 35 |
  • WAKE_LOCK:與遠端節點同步時,防止手機進入待命狀態。
  • 36 |
  • CAMERA:掃描 QR 碼以收取 Monero。
  • 37 |
38 |

政策更新

39 |

本隱私權政策可能會不定時更新。在更新的同時,我們也會在本 App 以及網站 (www.monerujo.io) 40 | 上公告新的隱私權政策或修改之處。但我們仍建議您定時查看本隱私權政策以即時了解任何的修改。 41 |

本隱私權政策最後更新日期為 2017 年 11 月 10 日。 42 |

43 |

聯絡我們

44 |

若您對於本隱私權政策或如何處理您的個人資料仍有問題,歡迎寄送電子郵件至 privacy@monerujo.io。

45 | ]]>
46 |
47 | -------------------------------------------------------------------------------- /app/src/main/res/values/arrays.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | AUTO 4 | DAY 5 | NIGHT 6 | 7 | 8 | 9 | Classic 10 | Oled 11 | 12 | 13 | 14 | EUR 15 | USD 16 | JPY 17 | GBP 18 | CHF 19 | CAD 20 | 21 | 22 | 23 | ARS​ 24 | AUD 25 | BGN 26 | BRL 27 | CNY 28 | CZK 29 | DKK 30 | HKD 31 | HUF 32 | IDR 33 | ILS 34 | INR 35 | IRR​ 36 | ISK 37 | KRW 38 | LBP​ 39 | MXN 40 | MYR 41 | NOK 42 | NZD 43 | PHP 44 | PLN 45 | RON 46 | RSD​ 47 | RUB​ 48 | SEK 49 | SGD 50 | THB 51 | TRY 52 | VES​ 53 | ZAR 54 | 55 | 56 | 57 | -------------------------------------------------------------------------------- /app/src/main/res/values/attrs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /app/src/main/res/values/dimens.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 129dp 4 | 5 | 12dp 6 | 16dp 7 | 24dp 8 | 8dp 9 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/values/ids.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/values/integers.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 300 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/xml/filepaths.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/xml/usb_device_filter.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 8 | 9 | 10 | 13 | 14 | 15 | 18 | 19 | 20 | 23 | -------------------------------------------------------------------------------- /app/src/stagenet/res/values/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | monerujo Stagenet 4 | -------------------------------------------------------------------------------- /build.gradle: -------------------------------------------------------------------------------- 1 | // Top-level build file where you can add configuration options common to all sub-projects/modules. 2 | buildscript { 3 | repositories { 4 | mavenCentral() 5 | google() 6 | } 7 | dependencies { 8 | classpath 'com.android.tools.build:gradle:8.10.1' 9 | } 10 | } 11 | 12 | allprojects { 13 | repositories { 14 | mavenCentral() 15 | google() 16 | } 17 | } 18 | 19 | task clean(type: Delete) { 20 | delete rootProject.buildDir 21 | } 22 | 23 | ext { 24 | apkName = 'monerujo' 25 | } 26 | -------------------------------------------------------------------------------- /doc/BUILDING-external-libs.md: -------------------------------------------------------------------------------- 1 | # External lib build 2 | 3 | ## Requirements: 4 | 5 | 1. Docker 6 | 7 | 2. `make` (sudo apt install make, little tricky to get it on Windows, https://stackoverflow.com/questions/32127524/how-to-install-and-use-make-in-windows) 8 | 9 | 3. Huge amount of RAM and free disk space 10 | 11 | ## Building: 12 | 13 | 1. Clone https://github.com/m2049r/monero repo. 14 | 15 | 2. Change repo to correct branch (example: `git checkout release-v0.17.1.9-monerujo`). 16 | 17 | 3. Update submodules: `git submodule update --init --force`. 18 | 19 | 4. Then go to folder with xmrwallet repo, then external-libs. Here you need to create symbol link to `monero` folder: 20 | 21 | Linux: `ln -s ~/monero ~/xmrwallet/external-libs/monero` 22 | 23 | Windows: `mklink /D "C:\Users\\xmrwallet\external-libs\monero" "C:\Users\\monero"` 24 | 25 | 5. Start Docker and then run `make` in `external-libs` folder. It will fail at end on Windows, but if `wallet2_api.h` exists in `include` folder, the build was successful. 26 | -------------------------------------------------------------------------------- /external-libs/.gitignore: -------------------------------------------------------------------------------- 1 | /monero 2 | /arm64-v8a 3 | /armeabi-v7a 4 | /x86 5 | /x86_64 6 | /bak 7 | -------------------------------------------------------------------------------- /gradle.properties: -------------------------------------------------------------------------------- 1 | # Project-wide Gradle settings. 2 | 3 | # IDE (e.g. Android Studio) users: 4 | # Gradle settings configured through the IDE *will override* 5 | # any settings specified in this file. 6 | 7 | # For more details on how to configure your build environment visit 8 | # http://www.gradle.org/docs/current/userguide/build_environment.html 9 | 10 | # Specifies the JVM arguments used for the daemon process. 11 | # The setting is particularly useful for tweaking memory settings. 12 | org.gradle.jvmargs=-Xmx2048m 13 | 14 | # When configured, Gradle will run in incubating parallel mode. 15 | # This option should only be used with decoupled projects. More details, visit 16 | # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects 17 | # org.gradle.parallel=true 18 | 19 | android.useAndroidX=true 20 | android.enableJetifier=true 21 | android.nonTransitiveRClass=true 22 | android.nonFinalResIds=false 23 | org.gradle.configuration-cache=true 24 | -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/m2049r/xmrwallet/41a7b7ba6123920ba88145c1fc1ec3a6974b991a/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | distributionBase=GRADLE_USER_HOME 2 | distributionUrl=https\://services.gradle.org/distributions/gradle-8.11.1-bin.zip 3 | distributionPath=wrapper/dists 4 | zipStoreBase=GRADLE_USER_HOME 5 | zipStorePath=wrapper/dists 6 | -------------------------------------------------------------------------------- /monerujo.id: -------------------------------------------------------------------------------- 1 | ID_A= 2 | -------------------------------------------------------------------------------- /privacy-policy.md: -------------------------------------------------------------------------------- 1 | # Privacy Policy 2 | 3 | All data entered in the Monerujo app is stored locally on the device and is not collected remotely or otherwise processed except 4 | for the purpose of processing transactions in the Monero Network in encrypted form. 5 | 6 | ## App permissions 7 | - INTERNET : Connect to the Monero Network via Monero Daemon Node 8 | - READ_EXTERNAL_STORAGE : Read wallets 9 | - WRITE_EXTERNAL_STORAGE : Write wallets 10 | - WAKE_LOCK : Keep device awake while syncing 11 | - CAMERA : Scan QR Codes 12 | -------------------------------------------------------------------------------- /settings.gradle: -------------------------------------------------------------------------------- 1 | include ':app' 2 | -------------------------------------------------------------------------------- /xmrwallet.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | --------------------------------------------------------------------------------