Android v7.2.0

Version 7.2.0 contains a fix for the Store screen, which stopped working soon after version 7 was released. It uses the code from version 6, combined with the improved user interface of version 7.

The billing library has been rolled back to version 3, but there was no deadline for version 4 anyway. This will give me more time to focus on the new Dropbox API.

The new release also uses a permanent SSL certificate provided by the web host, rather than the temporary one provided by Apache. This may help with some devices.

Summary of Changes


This post summaries recent changes made to the Android client. These are currently in the beta channel, but are due to go live in April.

Major Changes

Sending Mail

Emails can now be sent using a Gmail, Outlook or Yahoo account. They can also be sent manually, instead of by JavaMail. This avoids authentication issues, but only works with the Outlook app. Other email apps do not support HTML.

Dropbox Support

This is necessary, as external storage is deprecated. Dropbox stores its files in a different area, and is not compatible with older Files screen. Support for Google Drive may also be added, though this is problematic.

Lines Screen

The blue plus buttons have been moved slightly to the left, to avoid clashing with the scroll bar. A proposal for a more radical change was rejected.

Other Changes


Online help will now be delivered in HTML format. This is work in progress.

App Icon

The app icon has been updated.

Features Withdrawn

GPS and Maps

All GPS and mapping features have been withdrawn.


Scanning barcodes using the built in camera on a phone has been withdrawn.

Lines Screen


The Lines screen (shown above) is used to add products to an order. Tapping the plus buttons increment the quantity ordered. Tapping anywhere else displays the details for an item, which allows the user to edit the quantity.

But the buttons are difficult to tap, and the details screen can be a distraction. The target area extends either side of the buttons, but they are too close to the scrollbar for that to help.


The proposed solution is to use a long press or ‘touch & hold’ gesture, to access the details screen. This is in line with Android design principles, and it frees up the tap gesture as a way to increment the quantity.

Minus buttons could be added to decrement the quantity. These would be in a different colour to the existing ones, and moved slightly to the left.


I will be conducting a survey of user preferences, and any solution will be pushed out to the beta channel, in the first instance.

Beta Channel

A large number of changes have been bundled together in a new beta release of the Sales Manager. The new features include Dropbox support and new options for sending emails. All GPS and mapping features have been withdrawn. The channel will continue for a while, as new features are added.

Storage updates in Android 11

Scoped Storage

Android 11 changes the security model for external storage, by enforcing scoped storage. The Android client app still targets Android 10, and for the time being it can opt out of scoped storage by setting a flag in the manifest. Version 6.3.7 is the first release that does this.

But this is only a temporary fix. Eventually I will be forced target Android 11, at which point the app will no longer be able to access the existing Vanguard directory.

Bottom Line

  1. In the long run, external storage is dead.
  2. The logical replacement is Google Drive.

Google should be honest with developers and tell us this upfront, instead of obfuscating everything, and leaving us to work it all out for ourselves.

Google Drive

If you use the Chrome browser, then you already have a Google Play account, and should seriously think about using Google Drive anyway. In a nutshell, the Vanguard directory in external storage will be replaced by a folder in Google Drive.

Sending Invoices

One of the key features of the Sales Manager is the ability to email invoices back to head office. This uses a package called JavaMail, which has been ported from standard Java to Android. It allows mail to be sent via any SMTP server, not just the one used by Gmail.

Originally the Android client allowed the user to use any email account, when sending invoices. This meant that he had to specify the address of the SMTP server, but unfortunately most users do not know what this was. Mail services will usually tell you what the address of their POP3 server is, but this is not the same thing.

I got so many support requests about this that I decided to restrict the feature to Gmail accounts. The problem with this was that Google got very shirty about emails being sent autonomously. So I started to get support requests about this, and the error messages being returned by JavaMail did not help.

To resolve this, I plan to allow invoices to be sent from Outlook and Yahoo accounts, and possibly other mail services as well. But I doubt that I will return to the free for all that I allowed in the past.

Party Tricks

Two features were added to the Android and iOS clients because they looked promising, but turned out to be less than stellar in practice.

  1. Scanning barcodes, using the camera on a mobile phone. This was a spinoff of a Google funded project called ZXing, which was mainly mainly concerned with scanning of QR codes. That project has since been defunded, and parked on GitHub. A similar iOS project is now abandonware.
  2. Using maps and location services. Google kept changing the way that these services worked, while Apple decided to move away from Google Maps altogether, and introduce its own mapping service.

In both cases there were practical difficulties, which would have persisted even if these issues had been resolved. The features were no more than party tricks, even when they worked. I have decided to remove them from both clients.

End of the line for existing iOS client

My recent attempt to recompile the iOS client with the latest version of XCode has exposed a number of issues:

  1. The code is written in Objective-C, which is not well supported any more.
  2. Apple is constantly changing the architecture of its CPUs.
  3. My test iPhone is no longer supported.
  4. There is no obvious equivalent to the Android Navigation Drawer.
  5. My storyboards are large and unwieldy.
  6. My Hackintosh setup is stretched to the limit.

The only practical solution is to freeze the existing app, and possibly develop a new one in Swift.