Monzo for Android - Teardowns & Deep Dives 👨‍💻

I’m throwing this in here just in case someone finds this sort of thing interesting.

A story on Monzo reducing their code by over 9,000 lines by using CameraX, helping massively reduce sign-up drop-out rates. This was included in the last email from Android’s developers mailing list.

https://developer.android.com/stories/apps/monzo-camerax

5 Likes

New beta :boom:

One visible change: connected credit cards now display your name and the last four digits of the card on the card carousel in the same way the Monzo account does!

6 Likes

A non-visible change: :eyes:

string name=‘developer_options_pref_key_dark_mode’>key_dark_mode

18 Likes

Don’t get my hopes up :grinning:

5 Likes

It’s real. I’ll post the teardown in a few…

9 Likes

Version 3.35.0 - Well, well, well… :eyes:

Reference to Dark mode, external accounts, Monzo shares, International Bank transfers, other exciting things…

New Strings;

<string name="address_delivery_outside_uk_short">Not in the UK?</string>

<string name="address_load_country_options_error">Couldn’t load country options</string>
<string name="address_load_country_options_error_action">Try again</string>

<string name="business_tax_residency_update_unsupported_company_type">This functionality is not supported for your company type.</string>

<string name="card_replacement_country_delivery_unavailable">Delivery unavailable</string>

<string name="developer_options_pref_key_dark_mode">key_dark_mode</string>

<string name="extacc_transactions_blocking_error_action">Retry</string>
<string name="extacc_transactions_blocking_error_description">Please try again later.</string>
<string name="extacc_transactions_blocking_error_title">Failed to load transactions</string>
<string name="extacc_transactions_empty_state_action">Refresh</string>
<string name="extacc_transactions_empty_state_description">Make a payment from this account to see when, where, and how much you spent. Just like with Monzo.</string>
<string name="extacc_transactions_empty_state_title">No transactions to show here yet</string>
<string name="extacc_transactions_end_of_list_description">We only show the last %s days in Monzo</string>
<string name="extacc_transactions_end_of_list_title">You’ve reached the end</string>

<string name="external_account_providers_error_description">Couldn’t load banks. Please try again later.</string>
<string name="external_account_providers_unavailable_description">%s isn’t available. This could be because of some maintenance they’re doing. Please try again later.</string>
<string name="external_account_providers_unsupported_description">This bank is not currently supported.</string>

<string name="home_card_last_updated">Refreshed %1$s</string>

<string name="interest_statements_annual_header">Annual statements</string>

<string name="limits_title">Limits</string>

<string name="order_card_delivery_card_cost_header">Card cost</string>
<string name="order_card_delivery_card_cost_item">Monzo card</string>
<string name="order_card_delivery_card_delivery_item">Card delivery</string>
<string name="order_card_delivery_card_details_header">Card details</string>
<string name="order_card_delivery_delivery_address_item">Delivery address</string>
<string name="order_card_delivery_enter_postcode_helper_text">This doesn’t have to be your usual home address</string>
<string name="order_card_delivery_enter_postcode_title">What’s your delivery postcode?</string>

<string name="order_card_delivery_primary_button">Confirm and order</string>
<string name="order_card_delivery_selected_name_item">Preferred name on card</string>
<string name="order_card_delivery_selected_name_value">%s will be on your card</string>
<string name="order_card_delivery_signup_title">Confirm card details</string>

<string name="order_card_delivery_total_cost_item">Total cost</string>

<string name="overdraft_information_button_text">Next</string>
<string name="overdraft_information_title">Overdraft Information</string>

<string name="plans_limitations_buttons_agreement_hint">&lt;b>By continuing, you confirm this insurance is right for you, and you agree to the terms and conditions&lt;/b></string>
<string name="plans_limitations_buttons_scroll_hint">&lt;b>Scroll to the bottom to continue&lt;/b></string>

<string name="transaction_crowdfunding_info">Crowdcube will issue your statement of beneficial ownership and contact you by email 7–14 days after the Crowdfunding ends. ’Statement of Beneficial Ownership’ is the technical name for the document that proves you’ve got the shares you bought.</string>
<string name="transaction_crowdfunding_section_title">Your investment</string>
<string name="transaction_crowdfunding_shares_label">Monzo shares</string>

<string name="transaction_fps_sent_you">%s&lt;br/>&lt;font color=#707B8C>sent you&lt;/font></string>
<string name="transaction_fps_you_sent">&lt;font color=#707B8C>you sent&lt;/font>&lt;br/>%s</string>

<string name="transaction_international_bank_transfer_estimated_delivery">Estimated Delivery</string>
<string name="transaction_international_bank_transfer_exchange_rate">Exchange Rate</string>
<string name="transaction_international_bank_transfer_provider">Provider</string>
<string name="transaction_international_bank_transfer_provider_transferwise">TransferWise</string>
<string name="transaction_international_bank_transfer_reference">Reference</string>
<string name="transaction_international_bank_transfer_section_details">Details</string>
<string name="transaction_international_bank_transfer_status">Status</string>
<string name="transaction_international_bank_transfer_status_bounced_back">Bounced back</string>
<string name="transaction_international_bank_transfer_status_cancelled">Cancelled</string>
<string name="transaction_international_bank_transfer_status_charged_back">Charged back</string>
<string name="transaction_international_bank_transfer_status_converting">Converting</string>
<string name="transaction_international_bank_transfer_status_funds_refunded">Refunded</string>
<string name="transaction_international_bank_transfer_status_processing">Processing</string>
<string name="transaction_international_bank_transfer_status_refund_processing">Cancelled, refunding</string>
<string name="transaction_international_bank_transfer_status_sent">Sent</string>
<string name="transaction_international_bank_transfer_status_unknown">Unknown</string>
<string name="transaction_international_bank_transfer_status_waiting">Waiting</string>
<string name="transaction_international_bank_transfer_status_waiting_for_recipient">Waiting for recipient</string>

Removed Strings;

<string name="account_external_card_balance_last_updated">Last updated %1$s</string>

<string name="balance_now">Balance now</string>

<string name="card_management_header_controls">Controls</string>
<string name="card_management_header_limits">Limits</string>

<string name="card_management_header_need_new_card">Need a new card?</string>

<string name="feed_empty_state_action">Add money to get started</string>

<string name="feed_empty_state_hotchip_text">Once you add money to your account, this is where you’ll see your balance and payments in real time.</string>
<string name="feed_empty_state_hotchip_title">Welcome to Monzo</string>
<string name="feed_empty_state_question_text">Once you add money to your account, you’ll see your balance and payments in real time.</string>
<string name="feed_empty_state_question_title">What will your first payment be?</string>

<string name="overdraft_change_limit_affordability_submit">Next</string>

<string name="plans_limitations_scroll_button_hint">By continuing, you confirm this insurance is right for you, and you agree to the terms and conditions</string>
<string name="plans_limitations_scroll_hint">Scroll to the bottom to continue</string>

<string name="settings_limits_title">Limits</string>

<string name="settings_tax_residency_title">Tax residency</string>

<string name="settings_tax_residency_update_title">Tax residency</string>

<string name="spent">Spent</string>

New ID’s;

<item type="id" name="accountHeaderDescription" />

<item type="id" name="allowanceProgressBar" />

<item type="id" name="amountChangeLeftItemDetails" />
<item type="id" name="amountChangeValue" />

<item type="id" name="amountItemLeftItemDetails" />

<item type="id" name="amountRowSubtitle" />
<item type="id" name="amountRowValue" />

<item type="id" name="amountValue" />

<item type="id" name="automaticExportHintWithIcon" />

<item type="id" name="budgetAssessmentItemMultiSelectCheckbox" />
<item type="id" name="budgetAssessmentItemMultiSelectTitle" />

<item type="id" name="buttonsFooter" />
<item type="id" name="buttonsFooterButtonsContainer" />
<item type="id" name="buttonsFooterHeaderContainer" />
<item type="id" name="buttonsFooterView" />

<item type="id" name="cardOrderRecyclerView" />

<item type="id" name="designButtonsFooterCircleIndicator" />
<item type="id" name="designButtonsFooterCircleIndicator3" />
<item type="id" name="designButtonsFooterHint" />
<item type="id" name="designButtonsFooterHintWithIcon" />

<item type="id" name="design_buttons_footer_header_layout" />

<item type="id" name="endOfListDescription" />
<item type="id" name="endOfListTitle" />

<item type="id" name="enterAddressChangeCountryBarrier" />

<item type="id" name="enterAddressCountryLoadingView" />

<item type="id" name="itemLeftItemDetails" />

<item type="id" name="menuEnterPostcodeNotInUK" />

<item type="id" name="profileDetailsLoadingErrorView" />

<item type="id" name="rowValue" />

Removed ID’s;

<item type="id" name="atmHeader" />

<item type="id" name="balanceAmount" />

<item type="id" name="balanceLabel" />

<item type="id" name="balanceView" />

<item type="id" name="bannerButton" />
<item type="id" name="bannerContainer" />
<item type="id" name="bannerDismissButton" />
<item type="id" name="bannerSubtitle" />
<item type="id" name="bannerTitle" />

<item type="id" name="companyIdentifierBodyTextView" />
<item type="id" name="companyIdentifierEditText" />
<item type="id" name="companyIdentifierInputLayout" />
<item type="id" name="companyIdentifierTitleTextView" />
<item type="id" name="companyIdentifierToolbar" />

<item type="id" name="controlsHeader" />

<item type="id" name="dontKnowPersonallyButton" />

<item type="id" name="endViewsBarrier" />

<item type="id" name="enterPostCodeChangeCountryButton" />

<item type="id" name="feedBanner" />

<item type="id" name="feedEmptyStateHotchipButton" />
<item type="id" name="feedEmptyStateHotchipLayout" />

<item type="id" name="feedEmptyStateQuestionButton" />
<item type="id" name="feedEmptyStateQuestionLayout" />

<item type="id" name="feedProgress" />

<item type="id" name="feedSwipeToRefreshLayout" />

<item type="id" name="fingerprintAuthLoadingView" />
<item type="id" name="fingerprintAuthPinEntry" />

<item type="id" name="idvDocumentIntroSecurityInfo" />

<item type="id" name="idvVideoIntroPrimaryButton" />

<item type="id" name="idvVideoIntroSecondaryButton" />
<item type="id" name="idvVideoIntroSecurityInfo" />

<item type="id" name="infoButtonStackHeader" />

<item type="id" name="itemContentRow" />

<item type="id" name="limitationsButtonStackContainer" />

<item type="id" name="loanUspPadlock" />

<item type="id" name="menuLearnMore" />

<item type="id" name="needNewCardGroup" />
<item type="id" name="needNewCardHeader" />

<item type="id" name="noCompanyIdentifierButton" />

<item type="id" name="noTinButton" />

<item type="id" name="notListedButton" />

<item type="id" name="searchFab" />

<item type="id" name="selectProviderBlockingErrorView" />
<item type="id" name="selectProviderLoadingView" />

<item type="id" name="spendTodayBalanceView" />

<item type="id" name="spentTodayAmount" />
<item type="id" name="spentTodayLabel" />

<item type="id" name="tabDetailsOwedTextView" />

<item type="id" name="tabDetailsPrimaryActionButton" />

<item type="id" name="taxDeclarationFragmentContainer" />

<item type="id" name="taxNumberView" />

<item type="id" name="taxResidencyElsewhereButton" />
<item type="id" name="taxResidencyErrorView" />
<item type="id" name="taxResidencyFragmentContainer" />
<item type="id" name="taxResidencyImage" />
<item type="id" name="taxResidencyJustUkButton" />
<item type="id" name="taxResidencyNonUsCitizenButton" />
<item type="id" name="taxResidencyProgress" />
<item type="id" name="taxResidencyTitle" />

<item type="id" name="taxResidencyUsCitizenButton" />

New Assets;

None!

Changed Assets;

.\ic_product_information
ic_product_information

.\ic_timeline_calendar.png
ic_timeline_calendar

Removed Assets;

.\category_row.webp

14 Likes

I wonder what card cost could be referencing?

  • Are they trying to highlight to people how much cards cost to be replaced so that they think twice?
  • Could it be for replacing a metal Plus card?
  • Should there be a fee for replacement cards metal or not?

Card delivery sounds interesting too:

  • A cost for delivery?
  • Options of how quickly you need your card to cut costs?
  • A fee for delivery just for a replacement metal Plus card?
  • No fees, just different timeframes for different types of card?
5 Likes

I thought there was cost for replacing cards if you’re abroad? Maybe it’s making that clear?

1 Like

Maybe the plus cards

Very exciting :grimacing::grimacing::grimacing:

1 Like

That very much looks like there will be some crowdfunding going on. Time to set up a pot :money_mouth_face:

And done. Let the savings begin :grin:

12 Likes

Ability to see your investment in the app would be really good too.

1 Like

…this is intriguing…

1 Like

Split categories me thinks

I haven’t been getting my hopes up for this new feature in the works in case it wasn’t that exciting but I could totally see split categories seeming very simple to the user but be very complex in the backend :eyes:

2 Likes

Ooo, lots of things happening. :tada:

3 Likes

Crowdfunding AND dark mode!? Is it Christmas?

2 Likes

No but it will be when they go live :rofl:

10 Likes

I’m really excited about the budgeting stuff. I’d love to hear what Monzo’s general direction for it will be. It would be nice to have some basic insights/overview with data visualizations and then the option for some structured, YNAB-like solution.

Dark mode’s cool. :man_shrugging:

Crowdfunding is pretty exciting - I’d imagine they’ll surpass the crowdfunding records again, even with the whole pandemic thing.

External accounts will need to at least show transactions for me to care. I’d love a ‘Master Feed’ too.

International transfers will please a few people I guess.

The card delivery cost I thought was already a thing. Would be cool if it tracked the delivery progress in-app.

8 Likes

I’ve only just invested my very last bar of gold-plated latinum in Freetrade, so I’m not happy if there’s going to be another Monzo fundraise.

2 Likes