Care este functionalitatea finala a aplicatiei Notes App ? Ce am invatat dezvoltand-o ?
De aici puteti descarca ultima versiune [NotesApp5.zip]
Notes App este o simpla aplicatie care ii permite utilizatorului sa-si faca notite pe telefon, dar, in simplitatea sa, introduce o serie de concepte fundamentale Android.
In primul rand suntem intampinati de LoginListActivity care ne afiseaza utilizatorii inregistrati pana acum in aplicatie. La prima instalare a aplicatiei, evident ca lista va fi vida, deci vom fi directionati mai departe sa ne creem primul utilizator. Din aceasta fereastra putem fie sa creem un utilizator nou, sau sa selectam unul deja existent pentru a ne autentifica.
In ambele cazuri, vom fi redirectionati catre LoginActivity din figura 2.
Fig.1. Lista cu utilizatorii inregistrati ai aplicatiei Notes App
Activitatea de login poate fi instantiata doar de cea precedent amintita. Ea primeste un intent care poate sau nu sa aiba un continut.
Daca am folosit butonul "New user", ni se va incarca LoginActivity in ideea subinteleasa. Daca insa facem click pe unul din utilizatorii din lista, ni se va transmite prin intent un string egal cu numele pe care am facut click.
Astfel, LoginActivity verifica ce am primit un intent si, daca este "ceva" in el, il afiseaza automat in edittextul username; altfel edittextul ramane gol.
Fig.2. Autentificarea cu user si parola.
Ideea acestei activitati este de a oferi accesul in zona in care putem observa si edita notitele. Aditional, avem alte doua functionalitati: register - care salveaza intr-un fisier de preferinte (USER_PREFS) username-ul (cheie) si parola (valoare), si unregister - care sterge o cheie daca ea exista in USER_PREFS.
Privind stocarea parolei, aceasta nu se face in mod text, ci se salveaza hash(parola + salt), unde functia hash este SHA2, iar saltul este un string aleator salvat in USER_SALTS, cu aceeasi cheie, cea a username-ului.
Dupa cum se vede in figura 3, aplicatia face verificarile necesare de bun simt: nu ne lasa sa ne inregistram de doua ori, verifica daca ne poate sterge din fisier, verifica daca parola introdusa est corecta etc. In momentul in care ne autentificam corect, se instantiaza UserActivity.
Fig.3. Notificari pentru utilizator care semnaleaza statutul aplicatiei.
Aceasta activitate implementeaza functionalitatea principala, si nume ne arata notitele existente (doar) pentru utilizatorul autentificat, si ne permite sa adaugam si sa stergem notite. Aceastea se stocheaza intr-o baza de date SQLite in tabela user notes. O notita are un id (autoincrement, specific SQL), un utilizator caruia ii apartine, un titlu (text) si un detaliu (text).
La pornirea activitatii se cauta toate notitele din baza de date pentru utilizatorul autentificat si se afiseaza intr-un listview. Putem adauga noi notite folosind butonul (+), dupa cum se vede in figura 4. Adaugarea se face printr-un alertdialog care ne cere titlul si detaliile, iar apoi le introduce in SQL.
Fig.4. Vizualizarea notitelor si adaugarea/stergerea lor pentru utilizatorul logat.
In fine, am folosit doua moduri de vizualizare a notitelor, in functie de orientarea telefonului. In modul portret (in picoare) avem un gridview cu un element pe coloana (deci practic un listview) cu un stil personalizat. Acesta se incarca cu un layout inflater si se populeaza cu informatiile necesare.
In modul landscape, definit in res/layout-land/*.xml, avem acelasi gridview inca cu numarul de coloane setat pe auto, si cu stilul fiecarei casuta diferit: aici avem titlul peste detalii.
Fig.5. Moduri de vizualiare a notitelor specifice modului landscape si portret.
In fine, daca inchidem aplicatia prin apasare pe back sau pe home, si reintram in aplicatie, vom fi redirectionati de LoginListActivity direct la UserActivity. Acest lucru se realizeaza prin salvarea numelui utilizatorului logat intr-un fisier de preferinte (session cookie). Daca nu se regaseste nimic in acel fisier, inseamna ca nu avem niciun utilizator logat si ramanem la LoginListActivity. Delogarea se face prin butonul rosu din UserActivity.