Da čovjek jednostavno ne povjeruje kako vrijeme brzo leti – od početka serijala o programiranju korištenjem Googleovog razvojnog alata Android SDK, već je prošlo više od godinu dana, a u međuvremenu se je mnogo toga dobrog dogodilo sa samim alatom u smislu proširenja njegovih mogućnosti. Za to je prije svega zaslužna prava eksplozija pojave novih modela tablet računala, jer je upravo ona dovela do potrebe optimiziranja Android sustava za takvu vrstu hardvera.

Novosti u alatu App Inventor for Android

Prije nego se pozabavimo osnovnim Android SDK razvojnim sustavom namijenjenom „pravim programerima“, napišimo nekoliko dodatnih riječi o najnovijim vijestima povezanim s Googleovim alternativnim alatom za brzo prototipiranje aplikacija (App Inventor for Android), jer smo se upravo njime bavili zadnjih nekoliko brojeva. Ako vam se alat dopao, pa zato planirate njegovo dugoročnije korištenje, važno je znati što vam očekuje u budućnosti.

Prvo, i trenutno najvažnije, kao novu web adresa za online korištenje alata App Inventor for Android trebati će ubuduće koristiti www.appinventorbeta.com umjesto dosadašnje adrese  appinventor.googlelabs.com. U duhu vođenja brige za postojeće korisnike vlastitih proizvoda, uobičajenom kod velikih IT poduzeća, sve postojeće aplikacije registriranih korisnika sačuvane su i dostupne na novoj adresi, tako da nema potreba za nekakvim „prepisivanjem“ aplikacija s jedne adrese na drugo.

Android 3.x: Donosi brojne promjene u korisničkom sučelju optimizirane za moderne tablet uređaje.

Drugo, te jednako važno za buduće korištenje alata, Google prestaje s izravnim radom na održavanju i razvoju alata App Inventor for Android. To na sreću ne znači da će alat nestati, nego da on prelazi u „open source“ kategoriju. Za budući status alata brigu će voditi novoosnovani Center for Mobile Learning u okviru MIT Media Laba, te biti pod stalnim nadzorom tri profesora s istog sveučilišta:  Hal Abelson, Eric Klopfer i Mitchel Resnik. Prva osoba iz nabrojene trojke zaslužna je za predlaganje  i pokretanje čitavog projekta 2008 godine zajedno s poduzećem Google, iz laboratorija drugog profesora potekla je prva verzija razvojnog alata, i to upravo na temelju ideje zadnjeg imena s popisa. Dovršetak cijelog postupka očekuje se do kraja godine, a postojeći korisnici alata će redovito dobijati informacije o svim promjenama.

Novosti u „osnovnom“ Android sustavu

Nakon razjašnjavanja trenutne i buduće situacije s alatom za brzo prototipiranje Android aplikacija, vratimo se sada na osnovni razvojni alat Android SDK. Od trenutka početka pisanja serijala, kojeg upravo čitate, razvojni alat je promijenio svoju prvu brojčanu oznaku verzije s 2 na 3, što uvijek znači da je došlo do bitnih promjena u nekom softverskom paketu. Kao što smo to već spomenuli na samom početku ovog teksta, ključni okidač za takve promjene je sveopća „zaluđenost“ tablet računalima, kako od strane proizvođača, tako i od strane korisnika mobilnih uređaja. Budući da se po dijelu svojih hardverskih karakteristika takvi uređaji razlikuju od mobilnih telefona, Android sustav doživio je bitne promjene što simbolizira nova početna oznaka verzije.

Pogledajmo prvo što se najvažnijeg dogodilo sa stanovišta krajnjeg korisnika. Najvažnije su, naravno, promjene na dimenzijama i rezoluciji zaslona, jer su ove vrijednosti u pravilu dosta veće nego kod mobilnih telefona. Povećanje zaslona pretpostavka je za dodatnu zabavu u korisničkom sučelju, kako u pogledu redizajna postojećih dijelova, tako i u pogledu dodavanja potpuno novih dijelova sučelja poput sistemske ili akcijske trake. Kad govorimo o promjenama u korisničkom sučelju onda se to odnosi na dio vidljiv na zaslonu, ali i na sistemske, grafički orijentirane module u pozadin,i koji su također morali doživjeti brojne promjene.

Na većem zaslonu uređaja mogla se između ostalog redizajnirati softverska tipkovnica namijenjena unosu znakova. Tipkovnica je jednostavno postala udobnija te brža za korištenje nego prije, jer se do dijela tipki više ne mora dolaziti zaobilazno. Još jedna bitna stvar povezana s korisničkim sučeljem je poboljšana mogućnost upravljanja operacijama označavanja, isijecanja, kopiranja i umetanja teksta. Sada se za tu operaciju koriste dodatne strelice prikazane na zaslonu.

Promjene u poznatim aplikacijama: Na primjer, aplikacija za upravljanje ugrađenom kamerom.

Prva od prije spomenutih traka, smještena na samom dnu zaslona, namijenjena je za brzi pristup obavijestima, statusnim pokazateljima sustava te navigacijskim gumbima postavljenim na sam zaslon. U pravilu sistemska traka dostupna je stalno, iako se ako je to baš potrebno može sakriti u slučaju da neka aplikacija treba iskoristiti cijeli dostupni prostor zaslona. Još jedan važan zadatak sistemske trake je upravljanje višezadatkovnim radom preko popisa nedavno korištenih aplikacija (Recent Apps).  Druga traka (akcijska) nalazi se na vrhu zaslona, a izgled i djelovanje ovise joj o kontekstu izvođenja aplikacije, što znači da promjenom njezinog izgleda upravlja aplikacija, a ne sam Android sustav.

Od ostalih novosti svakako treba spomenuti nove mogućnosti povezivanja tablet računala s vanjskim uređajima pomoću Media/Picture Transfer Protocola, odnosno povezivanje prave tipkovnice s uređajem kako bi se još više olakšalo upisivanje teksta. Na kraju tu je i nekoliko poboljšanja standardnih aplikacija – preglednik, elektronička pošta, kamera, galerija i imenik. U još novijim verzijama nasljednicama s oznaka 3.1 i 3.2 uvedena su dodatna unapređenja u korisničkom sučelju te povezivanju s vanjskim uređajima (npr. različiti dodaci za igru) i Wi-Fi, dok je sam Android sustav optimiziran za brojne tablet uređaje, koji su se na tržištu pojavili u međuvremenu.

U ovom nabrajanju ne smijemo nikako zaboraviti na još jednu promjenu, budući da ona nije vidljiva na prvi pogled, ali pridonosi ukupnom zadovoljstvu korištenja Android platforme. Osim što u verziji 3.x Android podržava istovremeno korištenje većeg broja aplikacija, sada se te aplikacije mogu izvoditi i na većem broju procesora odnosno jezgri, ako je takva hardverska konfiguracija ugrađena u mobilni uređaj. Android uređaji tako će uskoro moći rješavati najsloženije probleme, a da ne spominjemo kako će dobro na njima izgledati različite igre. U međuvremenu su se na tržištu zaista pojavili višejezgreni uređaji, tako da ovo više nije samo teoretska mogućnost sustava.

Sad kad smo ukratko naveli što je sve novo u sustavu sa stanovišta krajnjeg korisnika, pogledajmo što to zapravo znači za programere, ako žele pisati optimizirane aplikacije za nove verzije Andrioda s početnom verzijom 3. Svaka nova verzija Androida sa sobom donosi izmijenjeno programsko sučelje s određenim brojem novih poziva API funkcija, odnosno izmjene u načinu korištenja postojećih funkcija. Budući da su se u verziji 3.0 (i novijima) pojavili potpuno novi dijelovi korisničkog sučelja, kao što je akcijska traka ili sistemska traka, najvažnije API promjene povezane su upravo s tim dijelovima. Drugim riječima, dobili smo sasvim dovoljno građe za još nekoliko nastavaka serijala u kojima bi se demonstrirale najnovije mogućnosti platforme.

Navedimo sada primjer dijela programskog koda namijenje korištenju akcijske trake u vlastitim aplikacijama, tek toliko da steknete dojam kako to izgleda Detaljnije djelovanje programskog koda koji upravlja alatnom trakom, ali i drugim novostima verzije 3.x objasnit ćemo na složenijem primjeru kojeg počinjemo izrađivati slijedeći put.

package com.example.android.apis.app;

import com.example.android.apis.R;

import android.app.ActionBar;

import android.app.ActionBar.Tab;

import android.app.Activity;

import android.app.Fragment;

import android.app.FragmentTransaction;

import android.os.Bundle;

import android.view.LayoutInflater;

import android.view.View;

import android.view.ViewGroup;

import android.widget.TextView;

import android.widget.Toast;

public class ActionBarTabs extends Activity {

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.action_bar_tabs);

}

public void onAddTab(View v) {

final ActionBar bar = getActionBar();

final int tabCount = bar.getTabCount();

final String text = “Tab ” + tabCount;

bar.addTab(bar.newTab()

.setText(text)

.setTabListener(new TabListener(new TabContentFragment(text))));

}

public void onRemoveTab(View v) {

final ActionBar bar = getActionBar();

bar.removeTabAt(bar.getTabCount() – 1);

}

public void onToggleTabs(View v) {

final ActionBar bar = getActionBar();

if (bar.getNavigationMode() == ActionBar.NAVIGATION_MODE_TABS) {

bar.setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD);

bar.setDisplayOptions(ActionBar.DISPLAY_SHOW_TITLE, ActionBar.DISPLAY_SHOW_TITLE);

} else {

bar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);

bar.setDisplayOptions(0, ActionBar.DISPLAY_SHOW_TITLE);

}

}

public void onRemoveAllTabs(View v) {

getActionBar().removeAllTabs();

}

private class TabListener implements ActionBar.TabListener {

private TabContentFragment mFragment;

public TabListener(TabContentFragment fragment) {

mFragment = fragment;

}

public void onTabSelected(Tab tab, FragmentTransaction ft) {

ft.add(R.id.fragment_content, mFragment, mFragment.getText());

}

public void onTabUnselected(Tab tab, FragmentTransaction ft) {

ft.remove(mFragment);

}

public void onTabReselected(Tab tab, FragmentTransaction ft) {

Toast.makeText(ActionBarTabs.this, “Reselected!”, Toast.LENGTH_SHORT).show();

}

}

private class TabContentFragment extends Fragment {

private String mText;

public TabContentFragment(String text) {

mText = text;

}

public String getText() {

return mText;

}

@Override

public View onCreateView(LayoutInflater inflater, ViewGroup container,

Bundle savedInstanceState) {

View fragView = inflater.inflate(R.layout.action_bar_tab_content, container, false);

TextView text = (TextView) fragView.findViewById(R.id.text);

text.setText(mText);

return fragView;

}

}

}