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.