Tagged: ics

Button, button, who's got the button?

I love Android, I really do. I'm chuffed to bits with the Galaxy Nexus I won recently. I've had a dozen Android phones before that - stretching all the way back to the HTC Magic.

But it's getting obvious that Android has a serious design problem - even with the gorgeous new "Holo" theme for ICS.

The issue is one of consistency. Users have limited cognitive surplus and often rely on muscle memory to perform tasks. So anything which forces applications to behave in a similar way is often highly appreciated.

One thing which is bugging me about the Galaxy Nexus and ICS is the placement of the "Menu" button. This button is used to open up a program's options, or access its functions. It always used to be a physical key on the device - now it has become virtual.

A virtual key isn't of itself a huge problem - but the placement of it is.

In some apps it appears at the top of the screen, in others it's on the bottom, and on some the button appears in the virtual button bar. Take a look at these examples:

ICS button screenshot Twitter
In Twitter, the menu button is on the virtual button bar

ICS button screenshot browser
In the browser, the menu button is on the top.

Android ICS button Gmail
In Gmail, the menu button is at the bottom of the screen, but not on the virtual bar.

Android ICS SMS button
In the stock SMS app, the menu button starts at the bottom...

Android ICS SMS button 2
...but then jumps to the top!

So every time you go in to an app, you have to search for the menu button and remember where it is for that app for that particular context.

What a total annoyance. You can't just remember once and get used to it - you have to check on every single screen of every single app. No reliance on muscle memory is possible. All very frustrating.

Now, Android isn't alone in this. I remember the last time I used iOS being frustrated with the number of different ways there were to delete an item in stock apps. Sometimes there was an icon (although rarely the same one), sometime you had to swipe, sometime you had to tap-and-hold.

It's a symptom of a lack of strict guidelines. I've worked on a project where - due to no one person being in charge of UI - we ended up with six different icons to represent delete - one of which was identical to the "close window" button!

It's one of those tiny little stumbling blocks which gradually builds up into the user resenting the interface. This is the sort of mistake that professionals in the UI / UX field should not be making.

Connecting Samsung ICS to Ubuntu using MTP

(These notes are mostly for my own benefit).

Android is moving away from USB Mass Storage. You will no longer be able to plug in a USB cable and have your Android show up as a USB disk. There are some good technical reasons for this, but it is a pain if you want to copy some files to your phone. The new system - MTP - isn't automagically detected in Ubuntu. This is something which is likely to be fixed in later versions of Ubuntu - but for now you'll have to hack around it.

The crazy cats at omgUbuntu have a tutorial which I have adapted for the Samasung Galaxy S (running ICS from teamhacksung).

First, install the MTP tools.

sudo apt-get install mtp-tools mtpfs

Connect the phone to the computer using USB.

To check that MTP is installed and working, run the command

mtp-detect

You should see a spool of text as MTP detects the phone.

To create the rules which allow Ubuntu to detect the phone, create a new rule file like so:

sudo nano /etc/udev/rules.d/51-android.rules

Add in this line of text

SUBSYSTEM=="usb", ATTR{idVendor}=="04e8", ATTR{idProduct}=="6860", MODE="0666"

If you're using a different device, run this command to get the correct idVendor and idProduct:

mtp-detect | grep idVendor
mtp-detect | grep idProduct

We'll need to restart udev so it can pick up the new rule.

sudo service udev restart

Then create a directory in your filesystem which you can use to access your phone.

sudo mkdir /media/GalaxyS
sudo chmod a+rwx /media/GalaxyS

Now we need to add ourselves to fuse.

sudo adduser YOURUSERNAME fuse
sudo nano /etc/fuse.conf

The last line probably reads

#user_allow_other

Remove the "#" so you're left with:

user_allow_other

Save the file.

We're going to create two commands "android-connect" and "android-disconnect". When run, these will allow you to connect to your phone, then safely disconnect.

echo "alias android-connect=\"mtpfs -o allow_other /media/GalaxyS\"" >> ~/.bashrc
echo "alias android-disconnect=\"fusermount -u /media/GalaxyS\"" >> ~/.bashrc
source ~/.bashrc

Restart the computer. Make sure the phone is connected via USB. Open a terminal and run

android-connect

Open your file manager and go to "/media/GalaxyS"
ICS MTP

Once you're done, disconnect the device by running

android-disconnect