FillLPG for Android – RIP

So, as per my previous post, I have now removed the FillLPG for Android app from the Google Play Store – and it won’t be coming back.

As promised in that post I have uploaded the installation file (actually ‘files’ – see below) and it can be downloaded at the bottom of this post.

The file has been compressed into a ZIP archive to reduce the file size and to allow my blog to upload it – it gets a little fussy sometimes.

Note that to install the app without using the Play Store you will need to be happy with ‘side-loading’ onto your device.

Continue reading “FillLPG for Android – RIP”

FillLPG for Android: Pulling the Plug

In a previous blog post I announced that the FillLPG for Android application was no longer in active development (which I then updated but let’s not lose focus here) and indicated that a time would come when I would remove it from the Google Play Store.

Well, that time is upon us.

The tipping point came today when I received feedback from two different channels, a review on the Play Store and an email from a fellow developer.

Continue reading “FillLPG for Android: Pulling the Plug”

Updating an end of life application

A while ago I posted that the FillLPG for Android application was, in a word, Dead! But in few days time users will notice a new version,, hitting the Play Store as well as in-app notifications to update – so what gives?

Have I changed my mind about withdrawing support for this app – no, I haven’t. Essentially my hand has been forced by Google’s recent decision to deprecate some of the functionality I was using to fetch nearby places as part of the ‘Add New Station’ wizard as well as requiring 64 bit support – the latter being little more than a checkbox and nothing that most users will ever notice.

Removal of the Places Picker

Prior to the update, when adding a new station a user could specify the location in one of two ways;

  • Select from a list of locations provided by the Google Places API and flagged as ‘Gas Stations’
  • Open a ‘Place Picker’ in the form of a map and drop a pin on the desired location

It is the second option which is now going away – and there is nothing I can do about it. Google are pulling it and that’s that.

Continue reading “Updating an end of life application”

FillLPG for Android is dead .. long live FillLPG for Android

Please note that I have now removed FillLPG for Android from the Google Play Store. You can read more about this here.

August 2020

TLDR; The FillLPG for Android app has reached end of life and no further development or maintenance will be undertaken. It will remain in the Play Store for as long as the third-party FillLPG website remains online but I have no control over that.

The FillLPG for Android app was initially developed to scratch an itch – I had an LPG powered vehicle (I don’t anymore) and had stumbled on to the FillLPG website. I responded to a request from the website owner for someone to write a mobile and thought it would be a good little project to get started in this arena.

It has proved itself to be just that, initially written in Java and then migrated to C# using Xamarin this little app has helped me keep my skill levels up – or at least it did.

Continue reading “FillLPG for Android is dead .. long live FillLPG for Android”

Starting Development of FillLPG v3.x


With the most recent update to the FillLPG application (v2.0.28.2) rolling out I will be ceasing all development of this version (unless some horrible bug raises it’s ugly head). But fear not loyal LPG users – that doesn’t mean the the app will be going away – far from it.

Technology moves on at pace and over time new skills are acquired and lessons are learned. The ‘problem’ is that to implement all of this it is easier to start over again – taking advantage of the new framework features, applying the new skills and remembering those sometimes painful lessons.

So, what’s on the horizon?

I suppose the ‘headline’ news is that an iOS version will soon be a reality! After years of focusing solely on the Android version our Apple-using LPG’ers will be getting some love too.

The aim will be to develop an iOS application with feature parity to the current Android version.

Now, don’t fret if you are an Android user – I’m not abandoning all of you who have helped make the app what it is today. The fact that I can essentially develop for two platforms at the same time is due to the advances made in the underlying framework used to develop the app. Previous versions didn’t really lend themselves to the type of mapping that is required for the FillLPG app – but that’s all changed now and mapping is now fairly straightforward to achieve on both platforms whilst sharing the maximum amount of code – which is good for maintainability (fix a bug in one place and it’s fixed for Android and iOS).

With the rest of the application mainly consisting of ‘Forms and Lists’ and these can easily be shared between the new platforms.

The result will be a more modern UI, lower impact on battery life and data usage.

Other planned features include:

  • Offline price updates (updates will be pushed when your device next has internet access)
  • “Route Planning” – display stations along a particular route allowing you to plan stops
  • Enable/Disable update alerts for favorite stations

But there’s more…

The webmaster of the FillLPG website is currently developing a new version with a new and improved webservice – which is how the app communicates with the site. This will expose a lot more data to the app, including:

  • Station notes
  • Opening Times
  • Flags such as ‘Disabled Friendly’ and ‘SafeFill Capable’
  • Ability to specify price currency
  • and more

Obviously I have no control over the timescales for the new website functionality but as soon as it is available I will be including it into the application as quickly as I can.

Please remember though that the FillLPG website and the mobile apps are ‘labours of love’ and that both myself and the site webmaster have other commitments. The website and apps are provided free of charge and with no ads.


Why don’t users “read the manual”?

In a previous post I had a little rant about some reviews I’d received from users of the FillLPG Android application. This was as a result of a handful of 1 star reviews from users who I believe had missed the point of the app.

You see, the application itself is just a portal into the FillLPG website – a website I do not control. The data provided by the website is maintained by a community of users who use the site and the app to add new stations, remove stations and update prices.

The problem is that users of the app have a place to sound off and express their displeasure – the Google Play Store. By leaving a 1 star review and the most basic of justifications for it (see previous rant) they get it off their chest and move on.

Well, today I had another 1 star review but this time the user took the time to explain why he had done so, but in doing so showed that he had not ‘read the manual’ – or in this case, the app description.

I’ve not redacted the users name, he was happy to post this publically and thank Google that I only had 350 characters to respond!

The app has (at the time of writing) over 6000 active installations, it displays details of around 1000 stations every day and on average it is used to update 25 prices every day. Only 240 users have felt the need to rate the app and only 10% of those have left 1 star – and we know that people are more likely to complain about something than to praise it, so I’m not doing bad. But it does irritate me when people take the time to complain but don’t take the time to read simple instructions. Even when you bring this to their attention they don’t really bother taking it in or removing/updating their review, they just move on.

So what is to be done here? The app description clearly states that the data is maintained by the FillLPG community but obviously users are not reading this – or at least not all of it.

I could add a ‘Getting Started’ slideshow to the app which would be displayed after the initial installation – but we know that users just swipe or click next to get through these as quickly as possible without really reading the content.

Maybe users are their own worst enemy and we should just leave them to it – in this instance it is not as if I’m relying on income from the app, it’s free and there are no ads, so if they uninstall it then I’m no worse off, in fact the contrary may be true!

Obviously I would like users to get the best from the fruits of my labours – but how do we (developers) do that?

Xamarin Insights to the Rescue

So, calling webservices from mobile applications is a solved problem yes? Well, not quite. I’ve been developing desktop and web-based applications for many years now and when it comes to accessing the Internet there are normally only a couple of scenarios to consider, you either have access or you don’t – simple.

However, in the world of mobile it’s not that simple. Mobile devices are just that, mobile, and can move in and out of coverage and between data connections numerous times during an application lifecycle. As mobile developers we know that this happens and we guard against it but checking that we have a valid connection and maybe even that we can ‘ping’ the target resource somewhere out there in the cloud.

Well, I thought I’d done all that within the FillLPG application. I knew, absolutely knew, the format of the content that the webservice would return, which is currently XML, and had suitable methods in place to parse that data. So imagine my confusion when I start receiving error reports like this:

The above is from the Xamarin Insights dashboard which provides me with near real-time crash and issue reporting. There was dozens of records like this in the logs and it was really confusing because I know that the webservice should be returning the following XML:

<?xml version="1.0" encoding="UTF-8"?>

So, why on earth was the app complaining about a DTD reference?

Well, with a quick configuration tweak I was able to find out. I added the response to the exception data before sending the report to Insights so that I could see what the method was actually returning:

catch (Exception ex)
    ex.Data.Add("Thresholds XML", xmlResponse);

And this was the result…..

This was not the XML is was expecting and explains why the parsing method were choking. But where was this HTML page coming from? I was sure it was nothing to do with the FillLPG website.

Reading through the markup it was clear that this was a login page for a Wifi Hotspot! The device had connected to it but it was not authenticated so the calls to the FillLPG webservice were just being redirected to the login page.

I was able to replicate this scenario by configuring my router to block all traffic to the FillLPG site and then hitting refresh (or any operation that invoked a webservice call). The router then redirected to the ‘This Site Is Blocked’ page and the app crashed!

The fix for this was fairly straightforward and I’ll put another post together for that, but I was already checking the Status Code of the Response and assumed, wrongly as it happens, the a value of 200 indicated a successful operation.

I was also using the ConnectivityPlugin and checking for an active connection AND that the site was reachable – but for some reason these tests were passing even though the router was actively blocking connection to the webservice.

So Xamarin Insights has saved the day for me again. There is no way I would have located this issue without it and while it is still ‘In Preview’ it is proving to be an invaluable tool for tracking down even the most elusive of bugs.

Users, you just can’t please all of them…

Recently I released the new version of the FillLPG for Android application as a Beta, that is working but with the potential for a few bugs and missing features. Because of my current work load I have not been able to put as much time into what is essentially a ‘pet project’ so I was running the risk of it never seeing the light of day.

On the whole it was received very well and there was a lot of positive feedback and feature suggestions. Then there are the ‘1 Star Brigade’ – you know, those who are so disappointed about an app that they just can’t let it go by and can give it a ‘virtual middle finger’ by leaving a 1 Star review – but frequently without taking the time to explain the reason for their displeasure.

By way of venting my own spleen I have a few examples:

This little gem was left a couple of weeks ago and is factually accurate – there are currently no stations listed in Bulgaria. But then why would there be? All the stations in the system are added and maintained by the users of the FillLPG website (which I should add is nothing to do with On The Fence Development Ltd or myself). Furthermore, the service was initially intended to provide location and price information for UK stations only.As more people hear about the site more and more stations are being added – currently as far away as Poland and Northern Norway! The users who add these stations are doing it for their own benefit and that of other LPG users.

My response to you Kiril is that users who complain about there being missing stations are, frankly, missing the point of the FillLPG community.

Next up in this helpful, two word, review – ‘Empty Map’. Well what am I supposed to do with that? How can I start to diagnose the problem – and to be honest, should I even bother? You see there are currently over 4000 installs of this version of the application and if nobody could see a map I’d be getting a lot more feedback from the users (over 4000 of them on the current release). I strongly suspect that this users problem is due to an out of date version of Google Maps on his device (it’s happened before – but that user contacted me to resolve the problem, which I did). I can’t understand why some users don’t realise that they problem may, just may be to do with them, their phone, connection or carrier and not the application. But no – it must be the app, it’s crap and I’m going to tell the world about!

To Maciej I say that you should think about the users who are running the app without any problems and think to yourself – ‘maybe it’s something at my end’

Finally there is this one, the app won’t run Android M. Now some of you maybe saying “Android M” what on earth is that? Well, it’s the next version of Android that was released AS A PREVIEW at the end of May this year. The actual release will be sometime before the end of this year, some say around September but you can’t be too sure with Google. When it does eventually come out, don’t expect to see it on your handset for a while afterward (unless you’re running a Nexus device) because it can take a while for the handset manufacturers to test it with their hardware and to put their own spin on it if required. HTC state that they will get the new releases onto their current compatible handsets within 90 days – so that’s pushing into next year.

So getting back to Stuarts ‘review’ – basically, two weeks after Android M was release AS A PREVIEW to developers and a good 9 MONTHS before any consumer device will be running it he sees fit to give the app a 1 Star review because it’s not compatible!

To you Stuart, I don’t really know what to say! I’m assuming you are a developer as most normal users won’t know what Android M is or how to get it. So developer to developer, you should know better!

The thing is, the app has about a 4 Star rating – dropping  a little thanks to ‘users’ like those above – and that’s fine with me. What irritates me is when people don’t consider the time and effort that other put in to producing these things. FillLPG for Android is a FREE app and doesn’t contain any Ads (and never will). I develop it in my ‘spare’ time and use it as a vehicle to practice my mobile development skills, so when I hear people whinging about missing stations, maps and the like it really hacks me off.

Anyway – the good news is that there are still plenty of users who make use of the application every single day. Users who provide constructive feedback and feature suggestions and, most importantly, appreciate that I do this with no expectation of reward.