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:

8 Likes
(Marcus) #2

Version: 0.1.1842

Changelog:


Teardown:

<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!)

10 Likes
#3

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

3 Likes
#4

Great to see this here, @nexusmaniac

2 Likes
(Marcus) #5

New beta just dropped :boom::raised_hands:

Version 0.1.2224 :eyes:

Will do a full teardown tomorrow :grin:

7 Likes
(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)

Changelog:

Second instead of first - nothing too detailed just yet.


Teardown:

<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>

:grin:
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)

android:id="@id/signUpWithFoobarLayout"
android:id="@id/signUpWithFoobarButton"

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:

13 Likes
#7

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

2 Likes
#8

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

2 Likes
(Emma) #9

Starling we’re tweeting about investing this week though

3 Likes
#10

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

2 Likes
(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:

3 Likes
(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:

4 Likes
(#18 414) #13

Urban dictionary offers a range of possibilities

2 Likes
(Marcus) #14

Version: 0.1.2328

Changelog:

Surprise, the third update :joy:


Teardown:

<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>
    </plurals>

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:

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

Version: 0.1.2420

Changelog:

Teardown:

<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:

6 Likes
(Marcus) #16

Version: 0.1.2486

Changelog:

I may have missed the 5th beta...

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


Teardown:

<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>
</style>

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:

3 Likes
(Marcus) #17

Version: 0.9.2524

Changelog:


Teardown:

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:

6 Likes
(Emma) #18

:sob: That’s just mean of them

image

4 Likes
(Marcus) #19

Version: 1.0.2626

Changelog:

Version 1.0 :tada::tada::tada:


Teardown:

<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"?>
<selector
  xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="false" android:color="@color/apricotSubtle" />
    <item android:state_pressed="true" android:color="@color/apricot" />
</selector>

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:

2 Likes
(Emma) #20

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