Freetrade for Android - Changelogs, Teardowns & Deep Dives 👨‍💻

(Marcus) #1

This thread marks the beginning of my new Freetrade teardown career :stuck_out_tongue_winking_eye:

Anybody who follows my work over on the Monzo forums, will know exactly what I’m talking about :grin:

I frequently check for app updates, install them on my device, copy the APK and do a full decompile of the app :boom: once I’ve done that, I flick through all the changes and post extensive breakdowns of the new strings, assets and files on the forum :sunglasses:

(Marcus) #2

Version: 0.1.1842



<string name="account_freetrade_account">Basic account</string>

Throughout the code the Freetrade account has turned into Basic account :slight_smile:

<string name="bank_account_copy_copied">Copied to clipboard</string>

You’ll be able to copy your reference / account number to the clipboard so you can easily paste it into your banking app (for top ups :smiley:)

<string name="enter_nationality_usa_warning">I confirm I am not a US citizen or dual US citizen and/or a US tax resident. 🇺🇸</string>

Confirmations that you’re not a US citizen :eyes: I guess Freetrade only works in the UK for now :yum::uk:

<string name="market_hours_forgeign_subtitle">Opening hours have been converted to your local time.</string>
<string name="market_hours_opening_title">Market opening hours</string>
<string name="market_hours_reopen_text">The %1$s market is current closed. It will re-open at %2$s. View market opening hours.</string>
<string name="onboarding_failed_button">Try again now</string>
<string name="onboarding_failed_help_text">Have a question now? Ask away</string>
<string name="onboarding_failed_help_text_mask">Ask away</string>
<string name="onboarding_failed_subtitle">"Freetrade is currently unavailable. We're working to fix the issue, please try again later."</string>
<string name="onboarding_failed_title">Something has gone wrong</string>
<string name="opening_hours_converted">Opening hours have been converted to your local time.</string>

Lists opening hours and stuff :smiley: Handy to know :sunglasses:

<string name="overlay_detected_dialog_message">For security reasons you must disable all overlay apps to use Freetrade</string>
<string name="overlay_detected_dialog_title">Screen overlay detected</string>

Don’t use Facebook chat heads whilst trading :stuck_out_tongue_winking_eye:

<string name="profile_account_section_header">Account</string>
<string name="profile_address">Address</string>
<string name="profile_email">Email</string>
<string name="profile_faqs">FAQs</string>
<string name="profile_footer_text">"App version %1$s (%2$s)
Fee schedule, Terms &amp; conditions and Privacy policy"</string>
<string name="profile_freetrade_user">Freetrade user #%1$s</string>
<string name="profile_help_support">Help &amp; support</string>
<string name="profile_live_chat">Live chat</string>
<string name="profile_log_out">Log out</string>
<string name="profile_log_out_confirmation">Are you sure you want to log out?</string>
<string name="profile_nationality">Nationality</string>
<string name="profile_ni_number">NI Number</string>
<string name="profile_us_tax_exemption">US tax exemption 🇺🇸</string>

Nice healthy profile section! :eyes:

<string name="withdrawal">Withdraw</string>
<string name="withdrawal_amount_available">Available to withdraw</string>
<string name="withdrawal_complete_message">%1$s has been withdrawn to your linked bank account ••••%2$s. This will take 2–3 days to appear in your account.</string>
<string name="withdrawal_complete_title">%1$s withdrawal successful</string>
<string name="withdrawal_confirm">Confirm withdrawal</string>
<string name="withdrawal_processing_subtitle">"Your request to withdraw %1$s is in progress.
This may take a minute."</string>
<string name="withdrawal_processing_title">Withdrawal request in progress</string>
<string name="withdrawal_subtitle">Bank account ••••%1$s</string>
<string name="withdrawal_title">Withdraw funds</string>

Excellent! :joy: We’re allowed to withdraw :yum: (this wasn’t available in the previous version of the app!)


Thanks. This is the next best thing for those of us who missed out on testing!


Great to see this here, @nexusmaniac

(Marcus) #5

New beta just dropped :boom::raised_hands:

Version 0.1.2224 :eyes:

Will do a full teardown tomorrow :grin:

(Marcus) #6

Version: 0.1.2290

(I put the wrong version number in my previous post :yum: 0.1.2224 was a hot-fix release with no discernible changes)


Second instead of first - nothing too detailed just yet.


<string name="market_hours_reopen_text">The %1$s market is currently closed. It will re-open at %2$s. View market opening hours.</string>

The typo I reported has been fixed :raised_hands:

<string name="passcode_challenge_forgot_password">Forgot passcode?</string>

Forgot “passcode” instead of “password” :slight_smile: - much more accurate :sunglasses:

3rd Party (Sign-up) Integration?

<string name="enter_email_foobar_button">Signup with foobar</string>

<string name="foobar_await_decision_text">Please check your foobar app and accept the prompt.</string>

I wonder who “foobar” will end up being :eyes: :eyes: - Awesome to see that Freetrade may be partnering with another company :smiley:

There’s currently regular email sign up, this is additional sign-up code :slight_smile: Perhaps an OAUTH plugin (i.e. sign in with Google, GitHub, etc.) or maybe a partnership with another Fintech? I’ll keep my eyes peeled for more details :boom:

<public type="id" name="signUpWithFoobarButton" id="0x7f090307" />
<public type="id" name="signUpWithFoobarLayout" id="0x7f090308" />

<public type="string" name="enter_email_loading_title" id="0x7f1100d0" />

<public type="string" name="foobar_await_decision_text" id="0x7f1100ec" />

More mentions :eyes:

<item type="id" name="signUpWithFoobarButton">false</item>
<item type="id" name="signUpWithFoobarLayout">false</item>

There’s going to be a button somewhere :eyes: I bet there’s a feature_flag I can’t see :grimacing::sob: (Booooo, still no Magisk on Pixel 3XL/Q)


Lots of exciting stuff! Though it’s super duper :100: clear that Freetrade know exactly what I’m up to and have purposely obfuscated a name :wink: can’t wait for them to de-obfuscate it :innocent:


Brilliant post. Loving the detective work. :+1:


Replace “foobar” with monzo and this line makes alot of sense for how I use my monzo app. Also could work with Google authenticator.

(Emma) #9

Starling we’re tweeting about investing this week though


Or starling :grin: either way it’s exciting. Of course we are just speculating.

(Marcus) #11

I’ve not spotted anything which points towards Monzo but if I do it’ll be included in a detailed teardown post :sunglasses: All we’ve got so far is a button which isn’t present anywhere in the UI (yet) :smiley:

(Emma) #12

There’s always the chance Foobar is a new Fintech.

Looking at some of the names it’s not beyond the realms of possibilities :grin:

(#18 414) #13

Urban dictionary offers a range of possibilities

(Marcus) #14

Version: 0.1.2328


Surprise, the third update :joy:


<item type="id" name="lokalise_type_menu_id">false</item>
<item type="id" name="lokalise_type_preference_id">false</item>
    <plurals name="lokalise_placeholder_plural">
        <item quantity="other">other</item>
        <item quantity="zero">zero</item>
        <item quantity="one">one</item>
        <item quantity="two">two</item>
        <item quantity="few">few</item>
        <item quantity="many">many</item>

Something new called lokalise, do I read it as localise?

I couldn’t really find anything else :eyes: There were shed loads of Smali added but I can’t read any of that :sweat_smile: I’ve not noticed anything in the UI either so who knows what’s coming up :yum:

This new translation plugin seems nice though :sunglasses:

Adam Dodds, founder and CEO of Freetrade | Jay Kim Show
(Marcus) #15

Version: 0.1.2420



<string name="instrument_kiid">Key Information Document</string>

Looks like a a tweak / addition(?) to KYC (Know Your Customer) :slight_smile:

<string name="account_reserved_cash_explanation">"Money reserved for your queued buy orders.

If you want to, you can cancel these queued orders to add this money back into your available cash."</string>
<string name="account_settlement_button">What is settlement?</string>
<string name="account_unsettled_cash_explanation">"Money from recent sell orders that hasn’t settled yet.

You can re-invest this money before settlement or withdraw once it settles."</string>

Some extra lines which describe what different cash types are :smiley:
This can be seen within the app :tada: Just tap on your “Account” and hit the types of cash you have :sunglasses: Screenshots below :point_down:

There’s even a warning when you exit without copying your Unique Ref. Number :smiley: I’d not spotted that before :slight_smile:

(Marcus) #16

Version: 0.1.2486


I may have missed the 5th beta...

:see_no_evil: Android Q, the Playstore & Freetrade aren’t getting along at the moment


<style name="ImageViewProfileIcon">
    <item name="android:layout_gravity">end|center|top</item>
    <item name="android:padding">16.0dip</item>
    <item name="android:foreground">@drawable/ripple_round</item>
    <item name="android:src">@drawable/ic_user</item>
    <item name="android:contentDescription">@string/account_title</item>

The press-able area on the profile icon (Portfolio tab) has been increased :boom: it’s now much easier to tap on :sunglasses:

The remaining changes are all Smali :sweat_smile: I can discern an incredibly tiny amount of detail from that, unfortunately. Looks like there might be some analytics tweaks :hammer_and_wrench: firebase additions, along with some other miscellaneous path changes. Nothing in strings.xml this time around :stuck_out_tongue_winking_eye:

I’ll figure out a way to keep my app updated and hopefully catch something cool in the 7th open beta release :sunglasses:

Thanks @tbowditch for sending the APK my way! :raised_hands:

(Marcus) #17

Version: 0.9.2524



I had to use a clunky tablet to get the latest freetrade release :laughing: but I can at least say it was worth it :stuck_out_tongue: not for the teardown (as I’ll explain momentarily) but for the minor bug fix :sunglasses:

Support confirmed in-app that they had fixed an issue where you couldn’t scroll all the way down on the portfolio page :boom: a bug which hit me every few launches of the app :sunglasses:

nothing to comment on 

It seems that my teardowns might be short lives :see_no_evil: I’ll continue to do them in the hopes that I find some awesome stuff :sunglasses: (still on the hunt for foobar :eyes:) but it looks like there’s 0 changes which haven’t been obfuscated or compiled into smali code :frowning:

It’s awesome to see that Freetrade is almost at v1.0 on Android and nearly ready for a full rollout :tada:

(Emma) #18

:sob: That’s just mean of them


(Marcus) #19

Version: 1.0.2626


Version 1.0 :tada::tada::tada:


<item type="id" name="switchAccountButton">false</item>

Account switching button :eyes:
Is this for multiple logins? ISA / Basic switching? Something else? :thinking:

<string name="biometrics_error_title">Fingerprint error</string>
<string name="biometrics_request_description">Touch the fingerprint sensor to continue</string>
<string name="biometrics_request_negative_text">Use passcode</string>
<string name="biometrics_request_subtitle">Login to your Freetrade account</string>
<string name="biometrics_request_title">Login</string>

I think we’ve got fingerprint unlock support :rofl: spoilers :stuck_out_tongue_winking_eye:

<?xml version="1.0" encoding="utf-8"?>
    <item android:state_pressed="false" android:color="@color/apricotSubtle" />
    <item android:state_pressed="true" android:color="@color/apricot" />

The colour “Apricot” has been scattered throughout the app :apple: I guess we’ll see some fruity splashes of colour soon :stuck_out_tongue_winking_eye:

Nothing else that I’ve found yet :see_no_evil: #BoringTeardown :yum:

(Emma) #20

Would Apple Pay be in the android app? :face_with_raised_eyebrow: