Introduction

I’ve got my hands on Alcatel One Touch Fire couple days ago so I decided to write couple of words about its drawbacks. Don’t get me wrong, even though I will only complain in this post, I’m quite impressed by this device as a whole. You can buy it for 404 PLN (it seems that T-mobile salesmen have a sense of humor) which is about 130 USD, without any simlock protection or a contract - that’s quite low price for Polish standards. It’s a very early version of the software (1.0.1) but it seems to be stable and usable - you can make phone calls, receive/send text messages, use Internet browser, listen to the music, or even watch Youtube. And don’t laugh, that’s not so obvious for me - couple years ago I bought OpenMoko FreeRunner for much, much bigger price and it never got that far (It was a great project, with very different goals, though). System generally runs quite smooth, you have GPS, accelerometer, camera, touchscreen and quite a lot of storage space - not bad for that price. There are, however, some imperfections and It’s not that easy to find informations about them on the Internet so let’s get started.

User point of view

Only one button

Reference design of Firefox OS phone has only one button - home button. It supports two operations - going to home screen when clicked and showing task switcher when hold. And that’s about it. Rest of the functionality has to be provided by an application itself. The button I miss the most id back button. Every application is supposed to provide it’s own back button functionality and of course it’s not always the case. What’s worse is that there’s no way to get back between

applications, for example after you call some Activity.

There is one small workaround for that provided by Mozilla in Firefox OS 1.1 - it’s called chrome. You can enable it adding one line in manifest file and you get some navigation buttons for free. This does not solve the problem, though.

I’m not sure how this could be fixed in the future. I doubt some buttons will be added and it wouldn’t be a good idea to add additional functionality to the existing one. Maybe some screen gesture could be used to provide back button functionality?

Text editing

Each input field in Firefox OS, then clicked, automatically starts editing mode. Software keyboard shows up and you can type some text. There are three problems in current implementation, however. First is somewhat related to the previous point - there’s no button you could press to hide the keyboard and the keyboard itself does not have any way to hide itself. This can be annoying at times since the keyboard takes most of the screen space. Second problem is total lack of even basic editing tools. You can’t select text and can’t copy/paste. The last problem is common in most of today’s smartphones - there are no arrow keys and no delete button on the keyboard. It makes it hard to remove some characters from the end of the line you are editing, especially when it’s longer than your screen can show at once (for example when editing URL field in browser). Fortunately all this can be fixed in the software in future versions of the system. Let’s hope it will.

Applications market

There’s nothing surprising here - it’s just not mature enough, yet. There is very small amount of applications, and the rating system is not working correctly since there is just not enough voters. The market application is also currently quite limited compared to Android one - you can’t review installed apps from it or configure anything (like updating policy), for example. But I like the fact you don’t have to register any account in order to use it.

Limited default applications

Default applications you get with the system seems to be working correctly and they have most of the features you would expect from the phone - you can make/receive calls, send/receive SMS/MMS messages, there’s Alarm and Calendar application, you have maps, browser and e-mail client. Problem is, they are currently quite limited. I haven’t spend too much time playing with those apps so I’m sure there are much more problems than I found but still, here are some examples.

E-mail application has almost none configuration options. For example I wasn’t able to connect to my private e-mail server because it uses self signed certificate and you have no way to configure application to accept such a certificate. Even if you connect to the server, there are virtually no configuration options there - you can’t configure how your mail will be cached on device, there’s no support for signatures, synchronizing only selected folders etc.

SMS application won’t let you send a message to more than one contact at a time. So if you changed your phone number and want to tell that to your friends, you have to spend a whole day sending messages. And remember there is no way to copy&paste the text. This limitation was actually good to me since it forced me to write an application for sending batch SMS messages. You can find it in my github repo, it’s called sms2.

Browser is very limited, too. Like in E-mail applications, there’s almost no configuration, you can’t force the browser to show non-mobile version of the site, for example. The only option you have is to clear browsing history and cookies. No extensions, private browsing, proxy settings, passwords or cache management. And there’s currently no way to install any other browser since you can’t run native applications.

UI (in)consistency

All the applications are “just webpages” which means that everything you can do with your webpage look, you can do with your application. Mozilla clearly states they don’t want to do application framework, instead they want to bring the Web to mobile devices.

In Android you have a UI library that let you create even complicated UI quite easily. All the applications using this library look similar and this makes consistent user experience. The library is flexible enough to change everything to look and feel differently so if you are willing to invest enough effort, you can do this. In Firefox OS it’s actually the other way around. The easiest way is to do whole UI your own way, the same you would do on the web site. However Mozilla did create Building Blocks and Design Assets Library so that, if you invest enough effort, you can make your application look consistent with system applications.

Developer’s point of view

APIs

Currently there are couple problems with the APIs available for the applications. First, most of them are either under development (and are quite limited), in standardization process (and so are subject to change) or to general because they are not limited to mobile devices. Plus the documentation is not the most organized I’ve seen.

One example is Geolocation API. Currently it’s the only was to talk to the GPS on the device. The API is quite old, it’s standardised and works in the browsers for years now. There’s only one problem - it’s to limited for me. It’s designed to be general so that the application that is using it does not know anything about what is the source of location informations. This means there is no GPS specific information - you can’t get GPS signal strength, number of satellites, GPS time, etc.

Sending SMS/MMS messages is another example. There is WebSMS API but it is not standardized and currently under development. For example MozSmsManager is already deprecated in favour of MozMobileMessageManager but the later is not yet available in the current Firefox OS devices.

My last example is Background Services API which does not even exists yet, it’s planned and there is some initial proposal for it. It’s not clear to me if anybody is working on it right now. And for me it seems like very important thing for smartphones.

One source of the problem is Mozillas’ openness. They don’t want to create closed API just for Firefox OS. Instead they are trying to create set of WebAPIs that will be implemented by all the browser vendors. This is all great but such standardization requires a lot of time an effort compared to creating a new API just for one operating system like Google did with Android. Hopefully, it’s a matter of time for things to get better.

Packaged apps without marketplace

There is no equivalent for .apk on Android or .jad on Nokia phones. You can’t download a file from the Internet and install it. You can install so called hosted apps but they don’t have permission to access some APIs so not all apps can be distributed this way. So called packaged apps exists but AFAIK they can only be installed using Marketplace or using USB cable in development mode (using PUSH from Firefox OS Simulator)

While it’s usually not that much of a problem (it’s not that common to install applications bypassing Marketplace), in some situations I find it useful to be able to install package directly. One example can be beta/nightly versions of some applications.

Development (in)consistency

I believe that almost all Android developers out there (minus some freaks like me that prefer writing applications in Vim and compile it inside Android platform sources… but that’s deferent story) uses the same development environment - Eclipse with ADT. All the Android development tutorials starts from teaching you how to use it. And to be honest - it’s not that bad.

While I’m not a fun of such solution, it has it’s advantages. With Firefox OS you don’t have this. You are building website so you can use your website development tools. That’s great for veteran developers but not so good for noobs, I think.

Mozilla did create Mortar which is collection of templates for starting application development. Mortar uses volo for projects management and require.js for managing libraries. Some of the templates also uses other JavaScript libraries. This may be a good start but its still just not complete enough and seems quite complicated for my taste.

Also, IDE is not the only problem. With Android you get consistent way for translating your application, ship libraries etc. There seems not to be such thing for Firefox OS currently.

Hosted vs packaged apps

So there are two basic types of apps - hosted and packaged. First one is basically a web page on a server (although it can use technologies like Application Cache to be usable off-line too) and second one is independent application - basically whole site packed to a zip file.

Depending on which type of app you are developing, you will have access to different set of APIs. Normal website has the least permissions, when it’s installed (as hosted app), it will have some more. In order to get even more permissions, you have to package your app. There are 3 types of packaged apps - normal, with smallest set of permissions, priviledged that has access to more APIs than hosted one and certified which has access to all the APIs.

Hosted apps can be installed easily but as I mentioned earlier, in normal situation, packaged apps can only be installed from Marketspace. This means that in some situations you may be developing hosted app and then realize that you need access to some API that is only available to, for example, priviledged apps. In such case, your new version can’t be installed like the older one - from your site, users have to install it from Marketplace.

Debugging on the device

There is currently no way you can run JavaScript debugger when running your app on the phone. It was possible some time ago but then Mozilla disabled this feature. It claims it will enable it in the future but it’s not clear when.

I’m not really a fun of debuggers, I don’t use them too often. However since JavaScript fails silently (as opposed to Java), currently the only way to debug your application is through logcat. It can show you all the messages you would see in JavaScript console on your browser (it’s not that readable, though). Here’s the command I use:

./adb logcat GeckoConsole:* *:s

No crash logs

This one is related to the previous point. JavaScript fails silently. You wont get ‘Unfortunately xxx has stopped’ or similar message on FirefoxOS. Instead your application will just work strangely. This also means that it is not currently possible to somehow automatically report a bug with stack trace to developers.

No shared libraries support

This is very similar to the situation on Android but actually worse since unlike Firefox OS, Android comes with quite a lot of libraries pre installed. I just don’t like the situation where each application in the system will have its own version of jQuery/Zepto, require.js, underscore.js or other popular JavaScript library. Unfortunately, in Firefox OS it’s not only about coding libraries, the same stands for example for already mentioned Buiding Blocks or parts of Design asset library. Buidling Blocks are actually extracted from Gaia which is part of Firefox OS, so you already have all those files in your system so why not reusing them? I know that Buidling Blocks are currently called unstable so maybe when they mature, they will be somehow available for all the applications.

Final words

OK, that was a lot of complaining. Especially for the system I actually like. What’s most valuable for me in Firefox OS is that it instantly made me writing apps for it. And that’s just cool.