When running in the background on Android the user selected locale
information turns out to not be available. Which, to be honest, I won't
qualify as a bug, just unfortunate.
We now always store the data in our app config which makes the
notifications show a fiat price as expected.
This fixes the general flow, but specifically adds two things:
1. we detect the lack of peers and notify the user of this problem with
an alarming looking screen.
2. We move to only requiring 1 peer to accept the transaction, since on
slow network connections the others tend to get it from each other
instead of me.
The popup is a too intrusive when it arrives too fast after receiving a
new transaction, this moves it to 150 seconds to make it clearly not
part of the receive flow and simply a new dialog for the user to
consider.
This is quite minimal, obviously. But plural forms etc go through
the translation system.
Where the source says "Your transactions got mined" it then is split
into plural and singular (one transaction), as long as the translations
are actually provided of both forms.
We no longer throw away details when a longer list of transactions is
combined into one. This means that we can easily detect anonimity
transactions even if we get more then one coming in, which makes the
notification text more appropriate as a result.
We move the starting of the download optimistically to be earlier in the
boot process.
This also moves the actual action out of the singleton, which gives more
control over when to call it based on how the app is started.
Specifically the headless way of running Pay now waits for the price
feed to have been updated before starting the p2p net interactions,
ensuring that any new transactions will be able to be shown to the user
including the fiat price.
With some delays we allow the user interface to show up so the checkbox
actually is pained to be 'on' when the user gets a question from the OS
about allowing it.
The on boot complete android feature is tricky, it allows
very little in the actual callback and the strategy that works
best now is to make that callback schedule a single background
run, which will in turn plan the normal schedule.
Or insta-exit if the user had no wish to do background running.
This additionally also triggers on the my-package-replaced
signal in order to ensure that an upgrade doesn't disrupt the
background running schedule.
We re-introduced a checkbox to enable notifications.
We now have a second type of notification, one for incoming transactions
that may happen when the app isn't in the foreground.
The text now special cases several common occasions that gave confusing
texts.
We additionally fix the position of the "+" sign to be behind the
currency symbol, like it was always supposed to be.
The public methods have been changed to group the types of method
together.
There is a group for transaction properties, a group of other
properties, a group of utility functions and a group of wallet
management functions (for things like private keys and the like).
We remove the block notification feature, as that was nice but useless.
This instead introduces a way for a transaction we created to be marked
as needing monitoring and when a block comes in we create a notification
explaining it has been mined.
If the user closes the UI before the broadcast has completed, we would
stop broadcasting. Which is unfortunate and not what users expect.
As such we simply hold on to the object for a while (10 min) before we
delete it when it is quite likely already sent.
This makes the label a bit shorter to avoid it overlapping the fiat text
in more cases.
We also now place the edit widget on top of the pencil button to get as
much space for editing as we can get.
On Android the placeholder text is very unfortunately positioned that
most people will consider a bug.
So we stop using that and instead put the text just above the actual
widget, fading the text when the user starts typing.
As this is on mobile, we also add a blinking fake cursor in the text
field to make it super clear what the intention there is.
The alternative would be to give focus to the field and have the real
blinking cursor, but that would open the virtual keyboard and hide the
big close button.
So fake blinking cursor it is.
Notifications should have the opportunity to skip the OS layer and
simply be shown in-app instead in case the application has the users
attention anyway.
While knowing a notification should be sent to the system tray
otherwise.
When a new transaction is sent and edited directly in the backend
we expect that the item is re-created and thus the on-initial-
construction method to be called.
But, QML caches and thus our smart solution doesn' work.