Aplicatie de Management a Unei Forme Folosind Tehnologia Android

Introducere

Această lucrare prezintă o aplicație de management a unei firme dezvoltată pe platforma Android și are ca scop gestionarea task-urilor pentru fiecare angajat în parte, fiind utilă atât managerului cât și angajaților.

Fiind o aplicație Android, compatibil cu foarte multe dispositive mobile oferă portabilitate, potrivit persoanelor care nu stau întotdeauna în fața calculatorului. În zilele noastre mulți preferă să folosească telefoanele deștepte în loc să pornească calculatorul.

Am realizat această aplicație deoarece am avut ocazia să mă familiarizez cu dezvoltarea aplicațiilor Android pe parcursul efectuării practicii de vară. Această aplicație ar fi utilă pentru mai multe firme.

În continuare voi prezenta aspectele teoretice ale proiectului, urmate de tehnologiile folosite la implementarea proiectului. Urmează apoi descrierea aplicației în cadrul căruia o să prezint structura bazei de date, structura generală a proiectului, structura aplicației, funcționalitatea și interfața acestuia, după care va urma secțiunea de securitate.

Sistemul de operare Android

“Trăim într-o lume în care comunicarea este foarte importantă în viețile noastre, iar nevoia de a fi în contact întotdeauna cu ceilalți se manifestă în toate activitățile curente. Tehnologia prezentă sprijină această nevoie, iar dispozitivele mobile reprezintă probabil exponentul cel mai de mare al acestei tehnologii. Telefoanele inteligente cu sisteme de operare din ce în ce mai avansate urmează să înglobeze în ele un mic univers al fiecăruia dintre noi.”[1]

Aplicațiile mobile sunt utilizate pe scară largă atât în domeniul entertainment dar și în domeniul business.

Android este în prezent cel mai popular sistem de operare dintre cele dedicate dispozitivelor portabile. A fost construit în jurul unui nucleu Linux, dezvoltat inițial de Google, apoi de Open Handset Alliance. [2]

Linux oferă abstractizare a hardware-ului pentru Android, permițând să fie portat pe o mare varietate de platforme. Pe plan intern, Android folosește Linux pentru gestionarea memoriei, managementul proceselor, servicii de rețea și alte servicii ale sistemului de operare.

Următorul nivel din arhitectura Android, conține bibliotecile native. Aceste biblioteci partajate sunt scrise în C și C++, compilate pentru arhitectura hardware folosită de telefoane și preinstalate pe telefon. Câteva dintre cele mai importante biblioteci Android sunt: Surface Manager, Grafica 2D și 3D, baza de date SQL, Browser-ul.

Avantajele sistemului de operare Android:

Multitasking – poate rula mai multe aplicații într-un moment.

App Market mare și deschis – MarketulAndroid (Google Play) este superior Marketului deținut de Apple, aplicațiile pot fi adăugate fără acordul Google.

Platforme hardware variate – Sistemul Android rulează pe foarte multe dispozitive mobile. Utilizatorul are la dispoziție o varietate de platforme hardware din care poate să aleagă în funcție de buget și performanțele dorite.

ROM-uri customizate – Există un grup de utilizatori care dezvoltă ROM-uri (imagini ale sistemului de operare Android) customizate ce pot fi instalate și rulate pe cele mai multe dispositive.

Integrarea cu Google și rețelele de socializare – Search pe Google direct de pe Home Screen, sunt integrate aplicațiile Gmail, Facebook, Twitter, etc.

Widgets – Home Screen-ul Android se poate fi customizat cu mai multe de widget-uri care ușurează accesul sau oferă diferite informații utilizatorului.

Open Source – Principalul avantaj Android este faptul că este open source. Astfel oricine poate modifica sistemul de operare după placul său.[3]

Diagrama din figura Fig.1.1 prezintă componentele majore ale arhitecturii sistemului de operare Android:

Fig. 1.1 – Arhitectura sistemului de operare Android[4]

O parte semnificativă a kernel-ului o reprezintă Android Runtime, care include mașina

virtuală Dalvik și bibliotecile de bază Java. Android Runtime trebuie să aibă următoarele facilități : viteza limitată a procesorului, memorie RAM limitată, baterie puternică, să nu aibă spațiu de swap și să dețină un set divers de dispozitive. Având în vedere toate aceste cerințe, o mașină virtuală a părut a fi o alegere potrivită.[4]

Sistemul management al unei firme

Structura sistemului de management pentru o firma este format din:

elemente de natură:

metodologică

decizională

informațională

organizatorică

psihosociologică

motivaționalăetc.

relațiilece se stabilesc între acestea pentru realizarea obiectivelor în condiții de eficiență

Organizarea este o știință care se ocupă cu studiul regulilor, metodelor și tehnicilor care asigură folosirea cât mai rationala a tuturor resurselor și capacităților de transformare, necesare realizării anumitor obiective, urmărind obținerea de rezultate finale optime. Repartizarea sarcinilor, gruparea acestora în departamente funcțional și alocarea resurselor pe departamente, stabilirea modului de colaborare dintre grupuri sau personae, sunt activități care aparțin funcției managerial de organizare.

Pentru ca o firmă sa funcționeze corect managerul trebuie să organizeze firma, angajații firmei și task-urile lor. Aplicația Scheduler ajută această organizare, fiind dezvoltată pe platform mobile, managerul poate adăuga, șterge sau actualiza task-uri chiar de acasă sau de pe drum. Pe de altă parte poate vizualiza dacă un task a fost sau nu rezolvat.

Tehnologii utilizate în realizarea aplicației

Pentru implementarea aplicației Scheduler am utilizat următoarele tehnologii:

Eclipse

Java

SQL

PHP

JSON

Eclipse

Eclipse este un mediu integrat de dezvoltare care ne ajută să implementăm aplicații alcătuite din framework-uri extensibile. Oferă suport pentru mai multe limbaje de programare (C, C++, Java), inclusiv pentru dezvoltarea aplicațiilor web.[5]

Platforma Eclipse include pe lângă altele JDT(Java Development Tools) care este o extensie și este suportată de toate versiunile Java.

Am folosit Eclipse pentru că este un mediu de dezvoltare (IDE) suportat official, este open-source, ușor de utilizat și oferă posibilitatea de a instala plugin-ul ADT (Android Development Tools).

Plugin-ul ADT este proiectat pentru a oferi dezvoltatorilor Android un mediu puternic, integrat în care să creeze aplicații mai ușor. ADT extinde capacitățile Eclipse-ului de a configure rapid proiectele noi în Android, de crea mai ușor interfața de utilizator aplicațiilor,de a edita facil fișierele XML, de a adăuga pachete bazate pe API-ul de Android Framework, de a detecta erorile într-un mediu grafic folosind instrumente Android SDK și ne ajută să distribuim aplicația prin exportarea fișierului .apk.[6]

Pe piață a apărut un nou mediu de dezvoltare pentru aplicațiile Android care este Android Studio, dar care are o versiune beta, nu este încă stabilă și necesită hardwer mai performant. Din acest motiv am ales Eclipse și deocamdată 95% din dezvoltatorii Android folosesc această tehnologie.

Java

Java este un limbaj de programare de nivel înalt, orientat pe obiecte, puternic tipizat, lansată de către James Gosling la Sun Microsystems și achiziționată ulterior de Oracle.

Este o tehnologie inovatoare și sunt construite o serie de platforme destinate implementării de aplicații de diverse feluri.[7]

Caracteristicile principale ale acestui limbaj sunt:

Simplitatea

Ușurința

Robustețea

Complet orientat pe obiecte eliminând astfel stilul de programare procedural

Neutralitatea arhitecturala, neținând cont de arhitectura fizică a mașinii pe care rulează

Portabilitatea este data de codul compilat și interpretat care este independent de platforma pe care rulează

Performanța

Limbajul de programare Java a fost folosit la dezvoltarea unor tehnologii dedicate rezolvării unor probleme din cele mai diverse domenii. Aceste tehnologii au fost grupate în platforme de lucru, ce reprezintă seturi de librării scrise în limbajul Java precum și diverse programe utilitare folosite pentru dezvoltarea de aplicații sau componente destinate unei anumite categorii de utilizatori[5].

Sistemul de operare Android utilizează limbajul Java, dar nu folosește librăriile standard a limbajului. Astfel toate aplicațiile Android utilizează limbajul Java cu librării predefinite de Google. Codul este rulat de către Dalvik VM în loc de JVM (Java Virtual Machine).

Dalvik este mașina virtuală (VM) din sistemul de operare Android. Este software-ul care

rulează aplicațiile pe dispozitive Android. Dalvik este parte integrantă a Android, care este de obicei folosit pe dispozitive mobile cum ar fi telefoanele mobile și tabletele. Programele sunt de obicei compilate într-o mașină de instrucțiuni independente numite bytecodes. Acestea sunt

apoi convertite din fișiere .class sau .jar compatibile Java Virtual Machine în fișiere .dex (Dalvik

Executable) compatibile Dalvik , înainte de a fi instalate pe dispozitive. Fișierele .class sunt citite de JVM la runtime. Fișierele .dex sunt mai compacte și mai eficiente decât fișierele .class, un aspect important pentru limitarea de memorie și baterie a dispozitivelor mobile. Un fișier .class conține o singură clasă, pe când un fișier .dex poate conține mai multe clase. Formatul Dalvik Executabil este special conceput pentru sisteme care sunt limitate în termeni de memorie și viteză a procesorului. [8]

Dalvik este un software open-source. Este în esență o mașina virtuală Java optimizată pentru consum redus de memorie. Permite rularea mai multor instanțe ale aceleiași mașini la un moment dat și are avantajul de securitate al sistemului de operare Linux. Spre deosebire de mașinile virtual Java care sunt mașini stivă, Dalvik este o arhitectură bazată pe regiștri. Pentru a converti anumite clase Java în format .dex este folosit un instrument numit DX. Java bytecode este de asemenea convertit în seturi alternative de instrucțiuni utilizate de Dalvik VM.

Fiecare aplicație Android rulează propriul proces cu propria instanța a unei mașini virtual Dalvik. Dalvik a fost scris, astfel că un dispozitiv poate rula mai multe instanțe ale unei mașini virtuale eficient. VM Dalvik se bazează pe kernel-ul Linux pentru funcționalitatea de bază, cum ar fi gestionarea memoriei la nivel scăzut.

Android permite programatorilor să dezvolte aplicații scrise în limbajul de programare Java, folosind bibliotecile puse la dispoziție de SDK (Software Development Kit). SDK-ul Android cuprinde un set de instrumente de dezvoltare printre care și un emulator de dispozitiv, biblioteci, documentație, program de depanare, etc.

SQL

Limbajul SQL (Structured Query Language) este un limbaj structurat utilizat pentru interogarea bazelor de date relaționale, ca origine se bazează pe algebra relațională.[9]

Acest limbaj are mai multe scopuri cum ar fi inserarea datelor, interogarea, actualizarea și ștergere acestora. Prin intermediul limbajului se poate crea si modifica scheme și se poate controla accesul la date.

Aceasta a devenit un standard în domeniu (standardizat ANSI-ISO), fiind cel mai putrnic limbaj utilizat în present pentru a crea, a modifica, a regăsi și a manipula datele de către SGBD-urile (Sistemele de Gestiune a Bazelor de Date) relaționale.[10]

Este un limbaj neprocedural și declarativ deoarece utilizatorul descrie ce date vrea să obțină, fără a fi nevoie să stabilească modalitățile de a ajunge la datele respective. [9]

Am utilizat limbajul SQL pentru a adăuga, a interoga, a actualiza, și a șterge date din baza de date folosită de aplicație. Comenzile SQL se află în fișiere PHP.

Pentru vizualiza toți angajații dintr-o firmă am folosit comanda următoare:

SELECT section_name

FROM section

Pentru a adăuga un task am utilizat următoarea comandă:

INSERT INTO tasks (job_name, observation, data_start, data_stop, ora_start, min_start, ora_stop, min_stop, holidays, section_name, client_id) VALUES ('".$job_name."','".$observation."' , '".$data_start."', '".$data_sop."' , '".$ora_start."' , '".$min_start."' , '".$ora_stop."' , '".$min_stop."' , '".$holidays."' , '".$section_name."' , '".$client_id."') '

Ștergerea unui taskse efectua cu ajutorul comenzii:

DELETE FROM tasks

WHERE task_id = $task_id";

Ca să actualizez un anumit task am utilizat comanda:

UPDATE tasks SET job_name= '".$job_name."', observation='".$observation."', data_start='".$data_start."', data_stop='".$data_stop."', ora_start='".$ora_start."', min_start='".$min_start."', ora_stop='".$ora_stop."', min_stop='".$min_stop."', holidays='".$holidays."', section_name='".$section_name."', client_id='".$client_id."'

WHERE task_id = $task_id";

Valorile variabilelor din fișierele PHP sunt defapt parametrii primiți de la obiectele JSON.

PHP

PHP este un limbaj de scripting de uz general, open source, server-side, utilizat pe scară largă, și poate fi utilizat pe majoritatea sistemelor de operare.

Sunt trei domenii principale, unde sunt utilizate scripturile PHP

Scripting de partea serverului. Acesta este cel mai tradițional și de bază domeniu al PHP.

Scripting în linia de comandă. Se poate crea un script PHP care să ruleze fără server și fără navigator web.

Scrierea aplicațiilor de birou.

Una dintre cele mai puternice și semnificative facilități ale PHP este susținerea unui larg domeniu de baze de date. Accesarea unei baze de date este incredibl de simplă utilizând una din extensiile de lucru cu baze de date (de ex. Pentru SQL), sau utilizând un nivel de abstractizare precum PDO, sau conectarea la orice bază de date ce susține standardul "Open Database Connection" cu ajutorul extensiei ODBC.[11]

În implementarea aplicației am folosit PHP în cadrul căruia sunt comenzile SQL. Aplicația accesează fișierele PHP pentru a primi datele, informațiile returnate cu ajutorul comenzilor SQL.

Conectarea aplicației cu baza de date se procedează cum se vede în figura Fig. 3.4.1

Fig. 3.4.1 – Comunicarea aplicației cu baza de date cu ajutorul fișierelor PHP

Pentru a comunica cu baza de date am folosit mai multe fișiere php, pentru fiecare comandă SQL este asociat un fișier PHP. După ce baza de date răspunde la aceste comenzi în cadrul fișierelor PHP acest răspuns este codat pentru obiecte JSON.

Un exemplu cum se trimit informțiile către obiectele JSON:

if (mssql_num_rows($result) > 0) {

$response["sections"] = array();

while ($row = mssql_fetch_array($result)) {

$sectii = array();

$sectii["section"] = $row["section"];

array_push($response["sections"], $sections);

}

$response["success"] = 1;

echo json_encode($response);

} else {

$response["success"] = 0;

$response["message"] = "No item found";

echo json_encode($response);

}

JSON

JSON(JavaScript Object Notation) este un format pentru reprezentarea și interschimbarea datelor. Este un format text, și este ușor de înțeles atât de către oameni cât și de către calculatoare.[12]

Acest format este complet independent de limbaj, dar folosește convenții care sunt familiare programatorilor din familia limbajului C, inclusiv C , C ++, C #, Java, JavaScript, Perl, Python, și multe altele. Din aceste proprietăți rezultă că JSON este un format ideal de interschimbarea datelor.

Fiecare obiect JSON este reprezentat ca și o listă de nume de proprietăți și valori conținute între acolade, iar tablourile sub forma unei înșiruiri de elemente între paranteze pătrate conform următorului format:

[{ propertyName1 : value11, propertyName2 : value21 },

{ propertyName1 : value12, propertyName2 : value22 }]

Valorile în JSON pot fi șiruri de caractere, numere de orice tip, alte obiecte JSON, valori booleene sau null.

Am folosit acest format de date pentru a transmite informațiile extrase din baza de date prin inetrmediul fișierelor PHP aplicației Scheduler.

Pentru a extrage informațiile trimise de către fișierele PHP am creat o nouă clasa JSONParser în cadrul căruia am creat o funcție care va returna obiectul JSON generat. Această funcție are următorul cod:

public JSONObject makeHttpRequest(String url, String method,

List<NameValuePair> params) {

try {

if(method == "POST"){

DefaultHttpClient httpClient = new DefaultHttpClient();

HttpPost httpPost = new HttpPost(url);

httpPost.setEntity(new UrlEncodedFormEntity(params));

HttpResponse httpResponse = httpClient.execute(httpPost);

HttpEntity httpEntity = httpResponse.getEntity();

is = httpEntity.getContent();

}else if(method == "GET"){

DefaultHttpClient httpClient = new DefaultHttpClient();

String paramString = URLEncodedUtils.format(params,"utf-8");

url += "?" + paramString;

HttpGet httpGet = new HttpGet(url);

HttpResponse httpResponse = httpClient.execute(httpGet);

HttpEntity httpEntity = httpResponse.getEntity();

is = httpEntity.getContent();

}

} catch (UnsupportedEncodingException e) {

e.printStackTrace();

} catch (ClientProtocolException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}

try {

BufferedReader reader = new BufferedReader(new InputStreamReader(

is, "iso-8859-1"), 8);

StringBuilder sb = new StringBuilder();

String line = null;

while ((line = reader.readLine()) != null) {

sb.append(line + "\n");

}

is.close();

json = sb.toString();

} catch (Exception e) {

Log.e("Buffer Error", "Error converting result " + e.toString());

}

try {

jObj = new JSONObject(json);

} catch (JSONException e) {

Log.e("JSON Parser", "Error parsing data " + e.toString());

}

return jObj;

}

Descrierea aplicației

Acest capitol va trata modul în care a fost implementată aplicația destinată managementului unei firme și functionalițătiile pe care aceasta le oferă.

Structura bazei de date

În figura Fig. 4.1.1 este prezentată schema conceptual a bazei de date utilizată de aplicația Scheduler.

Fig. 4.1.1 – Structura conceptuală a bazei de date

Cum se vede în figură baza de date conține trei tabele:

Sections, care conține angajații firmei, fiecare angajat are un id unic, mai precis numele lui

Tasks, conține toate task-urile, fiecărui task I se atribuie un id unic

Clients, conține clienții firmei și fiecare client are un client_id care este unic

În fiugură sunt afișate relațiile dintre tabele, adică fiecare angajat poate să aibă una sau mai multe task-uri și fiecare client poate fi asociat pentru una sau mai multe task-uri.

Datele din aceste tabele vor fi manipulate cu ajutorul instrucțiunilor SQL scrise în fișierele PHP.

Structura generală a proiectului

Fiecare proiect Android are la bază un system de directoare ierarhizate, la fel ca și proiectele Java, dar particularitățile sunt unice pentru Android. Eclipse ne oferă o bună vizualizare a acestei structuri, cum se vede în figura Fig. 4.2.1.

Fig. 4.2.1 – Structura proiectului Scheduler

În cadrul directorului src avem un pachet numit com.example.scheduler în care vom găsi codul Java aferent proiectului Scheduler.

Directorul gen, conține două clase BuildConfig.java și R.java care sunt generate automat pentru rularea proiectului.

Directorul assets este folosit pentru a stoca fișierele pe care dorim să le includem în proiect.

res este un director care conține resursele proiectului precum: elemente grafice, designul aplicației sau descrierea unor elemente din aplicașie. Acesta este îpărțit în mai multe directoare:

drawables – pentru imagini

layout – pentru fișiere XML care descriu interfața utilizator

menu – conține specificațiile pentru meniurile din aplicație

values – pentru șiruri de caractere, matrici sau alte elemente asemănătoare

Directorul bin conține toate fișierele rezultate în urma compilării proiectului.

classes.dex – este un fișier executabil creat din clasele compilate

resources.ap_ – este o arhivă a resurselor aplicației

Scheduler.apk, acest fișier este insăși aplicația, care va fi instalată pe dispozitivul mobil

În directorul libs este explicit executabilul android-support-v4.jar. În acest modul se pot adăuga alte librării pe parcursul implementării proiectului.

Proiectul conține fișierul Android Manifest.xml în care sunt precizate informații esențiale despre aplicație : specifică pachetul Java al aplicației care trebuie să fie unic, descrie componentele aplicației (activitățiile, serviciile, etc.), declară permisiunile necesare aplicației (Internet, GPS, etc.), declară nivelul minim API necesar funcționării aplicației, specifică tipurile de ecrane suportate, definește care va fi activitatea care se va lansa când va rula aplicația.

Nivelul minim API pentru aplicația Scheduler este 11 care este echivalent cu versiunea Android 3.0. Aceasta înseamnă că aplicația este compatibilă cu toate dispozitivele mobile care rulează versiunea Android 3.0 sau o versiune mai nouă.

În consolă sunt afișate informții în momentul compilării cum ar fi: starea instalării aplicației pe dispozitiv sau rulării în emulator.

LogCat  permite afișarea în timp real, în linia de comandă a log-ului telefonului, precum și posibilități de filtrare după etichete sau după nivele: debug, warning, error etc. Un avantaj al LogCat-ului este faptul că aici vor fi afișate toate excepțiile din sistem. Astfel dacă apare o excepție LogCat va afișa motivul.

Structura aplicației

O aplicație Android este compusă din una sau mai multe activități și procesul Linux, ciclul de viață al unei activități nu depinde de ciclul de viață al procesului, activitatea poate rula chiar și în cazul în care procesul nu mai există. O aplicație poate executa o activitate din altă aplicație (dacă este permis) , activitatea este executată de procesul de care aparține. Fiecare activitate are propria stare și datele acesteia pot fi salvate sau restaurate.

Activitatea este cea mai importantă component a unei aplicații deoarece este strâns legată de interfața cu utilizatorul.

O activitate are un ciclu de viață complex deoarece aplicațiile pot avea activități multiple și doar una este în prim-plan, utilizând managerul de activități, sistemul Android gestionează o stivă de activități care se găsesc în diferite stări.

Ciclul de viață a unei activități este prezentată în figura Fig. 4.3.1

Fig. 4.3.1 – Ciclul de viață a unei activități[13]

Ciclul de viață al unei activități descrie starea în care o activitate poate fi la un moment dat:

Running – Activitatea a fost creată, pornită și este afișată pe ecranul aparatului; în cazul în care activitatea a mai fost utilizată si aplicația a salvat starea acesteia, activitatea este reluată din acel punct, în această stare utilizatorul interacționează cu activitatea prin intermediul interfeței dispozitivului;

Paused – Activitatea pierde prim-planul, deoarece o altă activitate este executată, în acest caz activitatea este oprită temporar; activitatea îsi poate relua execuția și este plasată înapoi în prim-plan;

Stopped – Activitatea nu este mai în uz și pentru se oprește; pentru a fi reactivată, activitatea trebuie să fi repornită;

Destroyed – Activitatea este distrusă și memoria alocată pentru execuția activității s-a eliberat;[14]

Ca și orice aplicație Android și Scheduler conține mai multe activități. Între aceste activități există diferite relații care este reprezentată în figura Fig. 4.3.2

Fig. 4.3.2

Figura Fig. 4.3.2 prezintă chiar structura aplicației. Prima activitate, Splash Activity, este doar un intro, care conține doar logo-ul aplicației și după două secunde apare următoarea activitate, Login Activity, cu interfața de logare.

Înaine de logare utilizatorul poate seta limba și/sau adresa serverului la care să se conecteze aplicația. Aceste setări sun încadrate în activitatea Prefs Activit. Din această activitate utilizator se poate întoarce în activitatea precedent.

După logare se încarcă All Section Activity care este defapt un ListActivity și care conține lista angajațiilor. În această activiate avem doău posibilități, sau adaugăm un task pentru un anumit angajat, prin activitatea New Task Activity, sau vizulizăm task-urile unui angajat în intervalul setat, prin activitatea All Task for a Section. Această activitate ne oferă trei posibilități pentru fiecare task în parte.

Task-ul se poate modifica, prin activitatea Edit Task Activity, sau șterge.

Activitatea View Map Activity generează pe hartă ruta de la locația curentă utilizatorului până la adresa clientului pentru task-ul select.

Din activitatea All Task for a Section putem trece la activiatea New Task Activity pentru angajatul care a fost selectat în activitatea All Section Activity.

Din activitatea New Task Activity și Edit Task Activity se paote trece la activitatea Choose Client Activity care afișează lista clenților de unde poate alege utilizatorul clientul pentru un anumit task.

Funcționalitățile și interfața aplicației

Pentru a realiza interfața apliacției am utilizat Software-ul Photoshop pentru a edita imagini, pentru a crea logo-ul, fundal-ul și butoanele.

Platforma Android oferă o mare flexibilitate în construirea interfeței utilizator. De exemplu, putem defini structura de bază a interfeței în fișierul XML, după care se poate adăuga cod în aplicație pentru a adăuga noi obiecte, sau pentru a le modifica pe cele deja definite în fișierul XML.

Avantajul definirii elementelor unei interfețe prin metoda XML este separarea interfeței de codul care controlează elementele definite. Asta înseamnă că implementarea aplicației este mult mai logică și mai ușor de urmat, ori de câte ori va fi nevoie de modificarea unui element din interfață nu va trebui decât să îi ajustăm proprietățile din fișierul XML.

Un lucru foarte la îndemână în platforma Android este sintaxa XML pentru a defini elementele interfeței. Acestea respectă aceleași reguli de definire ca și clasele sau metodele din cod, unde numele clasei corespunde cu numele obiectului iar numele metodei corespunde cu atributele pe care le acceptă obiectul.

Aceste fișiere XML sunt percepute ca fiind resurse ale aplicației, așadar se află în directorul res/layout în cadrul proiectului.

Pentru a atribui un layout unei activități trebuie inserat o linie specifică de cod în metoda OnCreate(). De exemplu:

setContentView(R.layout.splash_activity);

Interfața primei activități este prezentată în figura Fig. 4.4.1

Fig. 4.4.1

Această activitate utilizează un timer, pentru ca după două secunde să termine execuția și să lanseze activitatea următoare (Login Activity).

Interfața activității Login Activity este prezentată în figura Fig. 4.4.2

Fig. 4.4.2

Activitatea de logare, Login Activity, conține patru câmpuri pe care utilizatorul trebuie să le completeze și un CheckBox.

Înainte de logare dacă se apasă butonul pentru setări apare interfața activității Prefs Activity, unde se poate seta limba aplicației și adresa server-ului la care să se conecteze aplicația. Limba implicită este engleza, iar adresa implicită a server-ului este : www.classoft.ro/ANDROID_PHP.

Dacă se schimbă una dintre setări activitatea se lansează din nou, pentru modificarea interfeței în funcție de valoarea setată.

Figura Fig. 4.4.3 prezintă intefața activității de setare.

Fig. 4.4.3

După relizarea setărilor se revine la activitatea de logare. La apăsarea butonului Login se verifică dacă dispozitivul are conexiune la Internet. Dacă da datele introduse sunt trimise la server și sunt verificate. Se mai verifică starea CheckBox-ului, dacă este în stare activă datele introduse sunt salvate în memoria dispozitivului și la următorea lansare a aplicației aceste date sunt încărcate în câmpurile respective. Dacă datele sunt incorecete se generează un mesaj de eroare. În scimb, dacă totul a fost în regulă se lansează activitatea All Section Activity, care conține lista angajaților dintr-o firmă.

Interfața activității All Section Activity conține o listă, două DatePicker-e pentru a seta intervalul dorit și un buton de afișare cum se vede și în figura Fig. 4.4.4

Fig. 4.4.4

Lista este încărcată cu ajutotorul unui adaptor care interpretează un HashMap în care sunt memorate informațiile extrase din obiectul JSON.

Cele două DatePicker-e sunt setate implicit să afișeze data curentă. În implementarea lor am folosit diferite verificări ca data de început să fie în totdeauna mai mică sau egală cu data de sfârșit.

La apăsarea butonului + pentru un anumit angajat se memoreazaă id-ul angajatului și se trimite ca și parametru la activitatea New Task Activity, astfel aplicația va știe cărui angajat trebuie să adauge noul task. Acest buton este restricționat pentru unii utilizatori.

În figura Fig. 4.4.5 se poate observa interfața activității New Task Activity care conține mai mule câmpuri care trebuie completat de către utilizator, DatePicker-e, TimePicker-e un CheckBox și un buton de adăugare.

Fig. 4.4.5

Pentru ca utilizator să vadă tot conținutul ecranului am utilizat un ScrollView. Pentru câmpurile etichetate ca Job și Observation am adăugat o limiatare de 100 și respective 249 de caractere. Dacă lungimea textului introdus în ambele cazuri depășește această limită se va genera un mesaj de eroare.

DatePicker-ele sunt setate implicit ca și în activitatea All Section Activity și sunt verificate la fiecare modificare.

TimePicker-ele sunt configurate ca utilizatorul să poată aleagă pentru a seta minutele între 00 sau 30. Primul TimePicker este setat implicit să afișeze ora curentă, iar al doilea să afișeze ora curentă + 1.

Dacă utilizatorul activează CheckBox-ul Holidays însemnă că acest task este de fapt un concediu.

Pentru a alege clientul pentru un anumit task trebuie apăsat butonul Choose după care se încarcă activitatea Choose Client Activity care are următoarea interfață(Fig. 4.4.6) :

Fig. 4.4.6

Pentru a căuta un client trebuie introdus cel puțin trei caractere după care se apasă butonul Search. Această tehnică îmunătățește performanța aplicației deoarece dacă o firmă are foarte mulți clienți timpul de încărcarea a clienților ar fi foarte mare.

După ce s-a încărcat lista, utilizatorul poate alege clientul dorit prin selectarea acestuia. Aplicația va cere comfirmarea utilizatorului, după cum se vede în figura Fig. 4.4.7

Fig. 4.4.7

Dacă se alege Yes se va transmite datele clientului activității New Task Activity iar câmpurile etichetate ca și Client și Client Code vor fi comletate cu aceste date. În schimb dacă se alege No utilizatorul poate să aleagă un alt client din listă sau să efectueze o nouă căutare.

La apăsarea butonului Add Task task-ul este adăugat în lista task-urilor pentru angajatul respectiv și se revine la activitatea All Section Activity.

Pentru a vizualiza task-urile unui anumit angajat pe un anumit interval trebuie selectat angajatul dorit și setat intervalul dorit cu ajutorul celor două DatePicker-e, după care se apasă butonul Show tasks. Ca urmare se lansează activitatea All Tasks for a Section Activity care are interfața reprezentată în figura Fig. 4.4.8

Fig. 4.4.8

Această activitate încarcă lista cu task-urile angajatului selectat. La rândul lui fiecare task se poate modifica, șterge și vizualiza ruta lui. Apăsarea butonului Edit oferă posibiliatea de a modifica task-ul specificat și cu ajutorul unui handler de evenimente se lansează activitatea Edit Task Activity pentru task-ul respective, transmițând id-ul task-ului pentru identificarea acestuia. Interfața acestei activități este asemanătoare cu interfața activității New Task Activity cum se vede și în figura Fig. 4.4.9.

Fig. 4.4.9

Datele task-ului sunt cerute din baza de date pe baza id-ului taskului. Prin intermediul acestei activități se poate modifica clientul, numele lucrării, observația, data și timpul task-ului. După modificările efectuate la apăsrea butonului Save Task sunt verificate corectutidinea datelor și dacă da datele sunt valide sunt trimise la server pentru a le modifica în baza de date, după care se reîncarcă actvitatea All Tasks for a Section cu lista actualizată.

Pentru a șterge un anumit task trebuie apăsat butonul Delete, care este tratat tot cu un event handler, se trimite id-ul task-ului respectiv la server și printr-o comandă SQL taskul este eliminat din baza de date. Înainte de a șterge task-ul aplicația așteaptă comfirmarea utilizatorului generând un AlertDialog cum se vede în figura Fig. 4.4.10

Fig. 4.4.10

Dacă utilizatorul alege Yes task-ul se va șterge și aplicația va actualiza lista task-urilor, altfel nu se va întâmpla nimic.

Utilizatorul are posibilitatea de a vizualiza traseul task-ului, adică în funcție de adresa curentă a utilizatorului și adresa clientului asociat task-ului respectiv se va afișa ruta pe hartă. Pentru aceasta se va lansa activitatea View Map Activity cu interfața din figura Fig. 4.4.11.

Fig. 4.4.11

Activitatea va primi adresa clientului de la baza de date și va cere de la sistem locația utilizatorului. După ce a aflat aceste informații se va genera ruta cu ajutorul Google Maps-ului.

Securitatea aplicației

Aplicația se poate conecta la orice bază de date în cadrul oricărui server știind informațiile necesare și baza de date să aibă aceiași structură ca baza de date demo. Pentru ca aplicația să fie securizată, am creat utilizatori care să aibă acces la baza de date utilizată de aplicație. Fiecare utilizator este asociat cu un angajat și fiecare trebuie sa aibă permisiuni bine predefinite. Aplicația implementează și această funcție.

Exista trei tipuri de utilizatori:

Administrator, adică managerul firmei care poate să vizualizeze, să modifice și să șteargă task-urile oricărui angajat

Angajatul vechi, acest tip de utilizator poate vizualiza toate task-urile angajaților dar nu poate șterge sau edita doar task-urile lui

Angajatul nou, acest tip de utilizator nu poate vizualiza numai task-urile lui

Fiecărui tip de utilizator este asociat un număr (0 – administrator,1 – angajat vechi, 2 – angajat nou) și acest număr este salvat într-o variabilă după logare, și este trimis ca și parametru de la o activitate la alta împreună cu numele de utilizator, parola, numele bazei de date, numele stației, id-ul limbii (1 – engleză, 2 – română) și adresa server-ului.

Avem nevoie de acești parametri deoarece când se face o cerere la server fișierul PHP cu ajutorul acestor parametrii se conectează la baza de date și generează comanda SQL dorită.

În cadrul activităților sunt verificate permisiunile utilizatorului, astfel angajatului nou este restricționat vizualizarea task-urilor pentru restul angajațiilor iar pentru angajatul vechi este restricționat butoanele de Edit și Delete pentru restul angajaților.

Concluzii

Bibliografie

[1] – http://aplicatii-mobile.ro/aparitie-editoriala/

[2] – Gargenta, M. (2011). Learning Android.

[3] – http://androidgeek.ro/ce-este-android/

[4] – http://www.worldit.info/wp-content/uploads/2012/09/image001.png

[5] – https://fii-liber.ro/eclipse-ide

[6] – http://developer.android.com/tools/sdk/eclipse-adt.html

[7] – Curs practic de Java – Cristian Frăsinaru

[8] – Ehringer, D. (2010). The Dalvik virtual machine architecture.

[9] – http://vega.unitbv.ro/~cataron/Courses/BD/BD_Cap_5.pdf

[10] – http://ro.wikipedia.org/wiki/SQL

[11] – http://php.net/manual/ro/intro-whatcando.php

[12] – http://json.org/

[13] – http://image.slidesharecdn.com/c02aplicatii-120318191437-phpapp02/95/curs-android-c02-aplicatii-ipw-2011-12-728.jpg?cb=1332474041

[14] – http://www.itcsolutions.eu/2011/09/08/android-tutorial-concepte-activitati-si-resurse-ale-unei-aplicatii-android/

Similar Posts