Șef Lucr. Dr.Ing.Rădulescu Virginia Maria IULIE 2018 CRAIOVA ii UNIVERSITATEA DIN CRAIOVA FACULTATEA DE AUTOMATICĂ, CALCULATOARE ȘI ELECTRONICĂ… [631505]

UNIVERSITATEA DIN CRAIOVA
FACULTATEA DE AUTOMATICĂ, CALCULATOARE ȘI
ELECTRONICĂ

DEPARTAMENTUL DE AUTOMATICĂ ȘI ELECTRONICĂ

PROIECT DE DIPLOMĂ
STAN VIOREL VASILE

COORDONATOR ȘTIINȚIFIC
Șef Lucr. Dr.Ing.Rădulescu Virginia Maria

IULIE 2018
CRAIOVA

ii

UNIVERSITATEA DIN CRAIOVA
FACULTATEA DE AUTOMATICĂ, CALCULATOARE ȘI
ELECTRONICĂ

DEPARTAMENTUL DE AUTOMATICĂ ȘI ELECTRONICĂ

APLICAȚIE ANDROID: MANAGEMENTUL CHELTUIELILOR ȘI
VENITURILOR
STAN VIOREL VASILE

COORDONATOR ȘTIINȚIFIC
Șef Lucr. Dr.Ing.Rădulescu Virginia Maria

IULIE 2018
CRAIOVA

iii
„Fiecare copil pe care îl educăm este un om pe care îl câștigăm .”
Proverb popular

iv
DECLARAȚIE DE ORIGINALITATE

Subsemnatul STAN VIOREL VASILE , student: [anonimizat], Calculatoare și Electronică a Universit ății din
Craiova, certific prin prezenta că am luat la cunoșt ință de cele prezentate mai jos și că î mi asum, în
acest context, originalita tea proiectu lui meu de licență :
 cu titlul APLICAȚIE ANDROID: MANAGEMENTUL CHELTUIELILOR ȘI
VENITURILOR ,
 coordonată de ȘEF LUCR. DR. ING. RĂDULESCU VIRGINIA MARIA
 prezentată în sesiunea IULIE 2018 .
La elaborarea proiectului de licență, se consideră plagiat una dintre următoarele acțiuni:
 reproducerea exactă a cuvintelor unui alt autor, dintr -o altă lucrare, în limba română sau prin
traducere dintr -o altă limbă, dacă se omit ghilimele și referința precisă,
 redarea cu alte cuvinte, reformularea prin cuvinte proprii sa u rezumarea ideilor din alte
lucrări , dacă nu se indică sursa bibliografică,
 prezentarea unor date experimentale obținute sau a unor aplicații realizate de alți autori fără
menționarea corectă a acestor surse,
 însușirea totală sau parțială a unei lucrări în care regulile de mai sus sunt respectate, dar care
are alt autor.
Pentru evitarea acest or situații neplăcute se recomandă:
 plasarea într e ghilimele a citatelor directe și indicarea referinței într -o listă corespunzătoare la
sfărșitul lucrării,
 indic area în text a reformulării unei idei, opinii sau teorii și corespunzător în lista de referințe
a sursei originale de la care s -a făcut preluarea,
 precizarea sursei de la care s -au preluat date experimentale, descrieri tehnice, figuri, imagini,
statistici , tabele et caetera ,
 precizarea referințelor poate fi omisă dacă se folosesc informații sau teorii arhicunoscute, a
căror paternitate este unanim cunoscută și acceptată.
Data , Semnătura candidat: [anonimizat] ,

v

UNIVERSITATEA DIN CRAIOVA
Facultate a de Automatică, Calculatoare și Electronică

Departamentul de Automatică și Electronică
Aprobat la data de
…………………
Șef de departament,
Prof. dr. ing.
COSMIN IONETE

PROIECTUL DE DIPLOMĂ

Numele și prenumele student: [anonimizat]/ -ei:
STAN VIOREL VASILE

Enunț ul temei:

APLICAȚIE ANDROID: MANAGEMENTUL
CHELTUIELILOR ȘI VENITURILOR

Datele de pornire:

Realizarea unei aplicații android care să permită administrarea
mai ușoară a veniturilor și cheltuielilor .

Conținutul proiectului :

1. Introducere
2. Noți uni sistem android
3. Firebase
4. Prezentarea aplicației
5. Concluzii
6. Bibliografie
7. Referințe web
A. Codul sursă
B. CD -DVD

Material grafic obligatoriu:
Scheme ale aplicației și bazei de date

Consultații:
Lunare
Conducătorul științific
(titlul, nume și prenume, semnătura): Șef lucrări dr. ing. Rădulescu Virginia Maria

Data eliberării temei :
15.11.2017

Termenul estimat de predare a
proiectului :
22.06.2018

Data predării proiectului de către
student și semnătura acestuia: 21.06.2018

vi

UNIV ERSITATEA DIN CRAIOVA
Facultatea de Automatică, Calculatoare și Electronică

Departamentul de Automatică și Electronică

REFERATUL CONDUCĂTORULUI ȘTIINȚIFIC

Numele și prenumele candida tului/ -ei: STAN VIOREL VASILE
Specializarea: INGINERIA SISTEMELOR MU LTIMEDIA
Titlul proiectului : APLICAȚIE ANDROID: MANAGEMENTUL
CHELTUIELILOR ȘI VENITURILOR
Locația în care s -a realizat practica de
documentare (se bifează una sau mai
multe din opțiunile din dreapta): În facultate □
În producție □
În cercetare □
Altă locație:

În urma analizei lucrării candidatului au fost constatate următoarele:
Nivelul documentării Insuficient
□ Satisfăcător
□ Bine
□ Foarte bine

Tipul proiectului Cercetare
□ Proiectare
□ Realizare
practică □ Altul

Aparatul mat ematic utilizat Simplu
□ Mediu
□ Complex
□ Absent

Utilitate Contract de
cercetare □ Cercetare
internă □ Utilare
□ Altul

Redactarea lucrării Insuficient
□ Satisfăcător
□ Bine
□ Foarte bine

Partea grafică, desene Insuficient ă
□ Satisfăcătoa re
□ Bună
□ Foarte bună

Realizarea
practică Contribuția autorului Insuficientă
□ Satisfăcătoare
□ Mare
□ Foarte mare

Complexitatea
temei Simplă
□ Medie
□ Mare
□ Complexă

Analiza cerințelor Insuficient
□ Satisfăcător
□ Bine
□ Foart e bine

Arhitectura Simplă
□ Medie
□ Mare
□ Complexă

vii
Întocmirea
specificațiilor
funcționale Insuficientă
□ Satisfăcătoare
□ Bună
□ Foarte bună

Implementarea Insuficientă
□ Satisfăcătoare
□ Bună
□ Foarte bună

Testarea Insufici entă
□ Satisfăcătoare
□ Bună
□ Foarte bună

Funcționarea Da
□ Parțială
□ Nu

Rezultate experimentale Experiment propriu
□ Preluare din bibliografie

Bibliografie Cărți
Reviste
Articole
Referințe web

Comentarii
și
observații

În concluzie, se propune:

ADMITEREA PROIECTULUI
□ RESPINGEREA PROIECTULUI

Data, Semnătura conducătorului științific,

viii
REZUMATUL PROIECTULUI
Această aplicație are rolul de a permite utilizatorului să țină evidența veniturilor și
cheltuielilor aferente fiecărei zi. Utilizatorul are posibilitatea de a -și crea cont cu datele personale,
aceste date fiind în registrate într -o bază de date. După crearea contu lui se poate trece la notarea
veniturilor și cheltuielilor personale.
Lucrarea este structurată pe cinci capitole principale și anume:
1. Introducere
2. Noțiuni sistem android
3. Firebase
4. Prezentarea aplicației
5. Concluzii
Primul capitol este rezervat scopului lucră rii și motivației alegerii acestei teme.
Cel de -al doilea capitol cuprinde noțiuni despre sistemul android în general, precum și noțiuni
și detalii despre programul în care am realizat aplicația ce face subiectul lucrării ce urmează a
fi prezentată , mai ex act programul Android Studio.
În ce de -al treilea capitol totul se rezumă la Firebase, platforma ce a contribuit la dezvoltarea
aplicației mele.
Capitolul patru este destinat prezentării aplicației realizate, mai exact aplicația privind
managementul chelt uielilor și veniturilor și nu în ultimul rând capitolul cinci cuprinde
concluziile la care am ajuns în urma realizării aplicației.

Termenii cheie : android, management, cheltuieli, venituri, profil.

ix
CUPRINSUL
1. INTRODUCERE ………………………….. ………………………….. ………………………….. ………………………….. ……… 1
1.1 SCOPUL ………………………….. ………………………….. ………………………….. ………………………….. ……………….. 1
1.2 MOTIVAȚIA ………………………….. ………………………….. ………………………….. ………………………….. …………… 1
2. NOȚIUNI SISTEM ANDRO ID ………………………….. ………………………….. ………………………….. ………………… 2
2.1 NOȚIUNI GENERALE ………………………….. ………………………….. ………………………….. ………………………….. …… 2
2.2 IMPORTANȚA ANDROIDULUI ………………………….. ………………………….. ………………………….. …………………… 2
2.3 ANDROID STUDIO ………………………….. ………………………….. ………………………….. ………………………….. ……… 3
2.3.1 Interfața ………………………….. ………………………….. ………………………….. ………………………….. ……………. 3
2.3.2 Componentele unei aplicații android studio ………………………….. ………………………….. ……………………. 4
2.3.3 Avantajele și dezavantajele folosirii programului Android Studio ………………………….. …………………… 5
3. FIREBASE ………………………….. ………………………….. ………………………….. ………………………….. …………….. 7
3.1 NOȚIUNI GENERALE FIREBASE ………………………….. ………………………….. ………………………….. …………………. 7
3.2 AVANTAJELE FOLOSIRII FIREBASE ………………………….. ………………………….. ………………………….. …………….. 7
4. PREZENTAREA APLIC AȚIEI ………………………….. ………………………….. ………………………….. ………………………. 9
4.1 DESIGNUL APLICAȚIEI ………………………….. ………………………….. ………………………….. ………………………….. … 9
4.1.1 Pagina principală ………………………….. ………………………….. ………………………….. ………………………….. .. 9
4.1.2.Interfața paginii de înre gistrare ………………………….. ………………………….. ………………………….. ………. 10
4.1.3 Pagina de logare ………………………….. ………………………….. ………………………….. ………………………….. . 11
4.1.4 Salvarea informațiilor în baza de date ………………………….. ………………………….. ………………………….. 12
4.2 MENIUL PRINCIPAL AL APLICAȚIEI ………………………….. ………………………….. ………………………….. ………….. 13
4.2.1 Update informații ………………………….. ………………………….. ………………………….. ………………………….. 14
4.2.2 Profilul meu ………………………….. ………………………….. ………………………….. ………………………….. ……… 15
4.2.3 Cheltuieli ………………………….. ………………………….. ………………………….. ………………………….. …………. 16
4.2.4 Categorii ………………………….. ………………………….. ………………………….. ………………………….. ………….. 17
4.2.5 Statistici ………………………….. ………………………….. ………………………….. ………………………….. …………… 19
4.2.6 Noțite ………………………….. ………………………….. ………………………….. ………………………….. ……………… 20
4.2.7 Istoric ………………………….. ………………………….. ………………………….. ………………………….. ……………… 22
4.2.8 Ajutor ………………………….. ………………………….. ………………………….. ………………………….. ……………… 23
4.3 PROIECTUL FINAL ………………………….. ………………………….. ………………………….. ………………………….. …….. 24
4.3.1 Testarea proiectului ………………………….. ………………………….. ………………………….. ………………………. 24
4.3.2 Platforma de testare ………………………….. ………………………….. ………………………….. ……………………… 24
4.3.3 Verificarea informațiilor din baza de date ………………………….. ………………………….. …………………….. 26
5. CONCLUZII ………………………….. ………………………….. ………………………….. ………………………….. …………. 28

x
6. BIBLIOGRAFIE ………………………….. ………………………….. ………………………….. ………………………….. …….. 29
7. REFERINȚE WEB ………………………….. ………………………….. ………………………….. ………………………….. ….. 30
A. CODUL SURSĂ ………………………….. ………………………….. ………………………….. ………………………….. ………… 31
B. CD / DVD ………………………….. ………………………….. ………………………….. ………………………….. ……………….. 64

1
1. INTRODUCERE
1.1 Scopul
Lucrarea de față își propune să prezinte aspecte și caracteristici ale aplicațiilor android, ale
programului Android Studio, precum și aplicația care face obiectul lucrării și anume aceea care
privește managemen tul cheltuielilor și veniturilor. Această aplicație a fost creată cu scopul de a ușura
administrarea veniturilor și cheltuielilor utilizatorului aplicației. Poate fi folosită pe toate dispozitivele
care rulează pe sistemul de operare android, sistemul fiind ales deoarece este cel mai răspândit în
rândul utilizatorilor de dispozitive mobile.
Un alt factor care a contribuit la realizarea aplicației a fost acela al folosirii personale,
deoarece aveam nevoie de o astfel de aplicație pentru a -mi înregistra propr iile venituri și cheltuieli
mult mai ușor.
1.2 Motivația
Am ales acest tip de aplicație pentru o mai bună și rapidă gestionare a veniturilor și
cheltuielilor, atât ale altor persoane, cât și ale mele. Prin folosirea acestei aplicații se vor elimina
notițele pe foi, agende și alte asemenea obiecte. Astfel putem salva timpul pierdut pentru căutarea
informațiilor notate pe foi și agende, pentru a realiza alte lucruri mai importante.
Un alt avantaj al acestei aplicații este acela că reaminteste utilizatorului când are de efectuat o
plată lunară, dar numai după setarea ace steia în aplicație astfel se pot evita penalitățile aferente
neefectuării plăților la timp.
Motivul pentru care a m ales această temă este acela că aplicația de management al
cheltuielilor și venitur ilor este ceva inovativ, ceva ce nu este întâlnit peste tot și exact cum am precizat
mai sus va ajuta persoanele interesate să își gestioneze veniturile și cheltuielile mult mai ușor și să
economiseasca totodată timp.

2
2. NOȚIUNI SISTEM ANDRO ID
2.1 NOȚIUN I GENERALE

Androidul este un sistem de operare pentru dispozitive și telefoane mobile bazată
pe nucleul Linux . Acest sistem de operare a fost dezvoltat inițial de compania Google , însă ulterior a
fost continuata dezvoltarea sa de către Open Handset Alliance .1 După ce a înregistrat o creștere de
886% și tot mai mulți adepți, sistemul de operare Android a în ceput să reprezinte o amenințare până și
pentru atotputernicul iPhone.2Android permite dezvoltatorilor să scrie cod gestio nat în limbajul Java ,
controlând dispozitivul prin intermediul bibliotecilor Java dezvoltate de Google.3
Lansarea platformei Android la 5 noiembri e 2007 a fost anunțată prin fondarea Open Handset
Alliance , un consorțiu de 48 de companii de hardware , software și de telecomunicații , consacrat
dezvoltării de standarde deschise pentru dispozitive mobile.4 Google a lansat cea mai mare parte a
codului Android sub licența Apache , o licență de tip free-software și open source .5
2.2 IMPORTANȚA ANDROIDULUI
Android n u este legat de un anume dispozitiv, iar orice producător hardware poate lucra pe
acesta platforma. În comparație cu iOS -ul iPhone -ului, care este controlat de Apple sau de sistemul de
operare al BlackBerry -ului, care poate fi folosit excluziv pe dizpoziti vele RIM, Androidul este mult
mai accesibil, mai flexibil, fiind independent de un anume dispozitiv, așa cum am precizat anterior.
În ceea ce priveste rapiditatea, este la fel de rapid ca iOS -ul, și are o interfață dotată cu o
multitudine de opțiuni.
Din p unctul meu de vedere sistemul de operare este foarte important pentru utilizator atunci
când își alege un smartphone. Androidul este un sistem de operare important și foarte utilizat de
operatorii de telefoane inteligente din mai multe considerente și anum e6:
– ai libertatea de a alege, acest sistem de operare fiind prezent pe multe tipuri de telefoane
de la cele mai ieftine până la cele mai scumpe;

1 http://www.openhandsetalliance.com/press_110507.html
2 http://www.hit.ro/software/android -pe-intele sul-tuturor -ce-este -si-ce-face
3 https://www.cnet.com/news/googles -android -parts -ways -with -java-industry -group/
4 http://www.openhandsetalliance.com/
5 http://www.openhandsetalliance.com/android_overview.html
6 https://www.statista.com/statistics/266210/nu mber -of-available -applications -in-the-google -play -store/

3
– poate fi personalizat în funcție de preferințele persoanei care deține dispozitivul cu sistem
de operare androi d;
– este foarte ușor de utilizat;
– există o multitudine de aplicații gratuite ce rulează pe acest sistem.
2.3 ANDROID STUDIO
Android Studio este un mediu de dezvoltare integrat (IDE) oficial pentru sistemul de operare
Google Android, construit pe software -ul IntelliJ IDEA al lui JetBrains și proiectat special pentru
dezvoltarea Androidului. 7Este disponibil pentru descărcare pe sisteme de operare Windows, MacOS
și Linux.8 Este un înlocuitor pentru Eclipse Android Development Tools (ADT) . Android Studio a
fost anunțat la 16 mai 2013 la conferința Google
Cu toate că este un tool foarte performant , nu necesită alte instalări și are multe utilități
plăcute (refractoring, class extracting, logcat fără bug -uri), când vine vorba de luc ruri mai avansate
este depășit .
2.3.1 Interfața
Fereastra principală Android Studio este alcătuită din mai multe zone logice identificate în
figura urm ătoare:
9

7 https://android -developers.googleblog.com/2013/05/android -studio -ide-built -for-android.html
8 https://developer.android.com/studio/
9 https://www.setthings.com/ro/interfata -cu-utilizatorul -android -studio/

4
 „1. Bara de instrumente vă permite să efectuați o gamă largă de acțiuni, inclusiv rularea
aplicației dvs. și lansarea de ins trumente Android.
 2. Bara de navigare vă ajută să navigați prin proiect și fișierele deschise pentru editare.
Acesta oferă o vizualizare mai compactă a structurii vizibile în fereastra Project .
 3. Fereastra editorului este locul unde creați și modificați c odul. În funcție de tipul de fișier
curent, editorul se poate schimba. De exemplu, atunci când vizualizați un fișier de aspect,
editorul va afișa editorul Layout.
 4. Bara ferestrei de instrumente se execută în exteriorul ferestrei IDE și conține butoane
care vă permit să extindeți sau restrângeți ferestrele individuale de instrumente.
 5. Ferestrele de instrumente oferă acces la sarcini specifice, cum ar fi managementul
proiectului, căutare, controlul versiunii, și multe altele. Aveți posibilitatea să le ext indeți și să
le restrângeți.
 6. Bara de stare afișează starea proiectului și IDE în sine, precum și orice avertismente sau
mesaje. ‖10
Aveți posibilitatea să organizați fereastra principală pentru a vă oferi mai mult spațiu pe ecran
prin ascunderea sau mutar ea barelor de instrumente și a ferestrelor de instrumente. Puteți utiliza, de
asemenea, comenzi rapide de la tastatură pentru a avea acces la cele mai multe caracteristici IDE.
În orice moment, puteți căuta în codul sursă, bazele de date, acțiuni, elemente ale interfeței cu
utilizatorul, și așa mai departe, prin dubla apăsare pe tasta Shift, sau făcând clic pe lupă în colțul din
dreapta sus al ferestrei Android Studio. Acest lucru poate fi foarte util în cazul în care, de exemplu,
încercați să găsiți o anum ită acțiune IDE pe care ați uitat cum să o inițiați.11
2.3.2 Componentele unei aplicații android studio
Cele mai importante componente ale unei aplica ții Android sunt:12
―Activity (Activitate)
 reprezint ă o interfață cu utilizatorul
 aplicația Android poate av ea una sau mai multe activit ăți;
 fiecare activitate are propria stare și datele acesteia pot fi salvate sau restaurate;
 activit ățile pot fi pornite de aplica ții diferite (dac ă este permis);
 are un ciclu de via ță complex

10 https://www.setthings.com/ro/interfata -cu-utilizatorul -android -studio/
11 https://developer.android.com/studio/intro/
12 http://www.itcsolutions.eu/2011/09/08/android -tutorial -concepte -activitati -si-resurse -ale-unei -aplicatii –
android/

5
Intent (Inten ție)
 reprezint ă o en titate folosit ă pentru a descrie o opera țiune care urmeaz ă să fie
executat ă;
 oarecum similar cu conceptul de event -handler din .NET sau Java.;
 un mesaj asincron utilizat pentru a activa activit ăți sau servicii;
 gestionat ă de o instant ă a clasei Intent ;
Service (Serviciu)
 un task care se execut ă în fundal, f ără interac țiunea direct ă cu utilizatorul;
 gestionat ă de o instant ă a clasei Service ;
Content provider (Furnizor sau manager de continut)
 un API folosit pentru a gestiona datele private ale aplica ției;
 un sistem de management de date ce descrie o alternativ ă la sistemul de fi șiere, baze
de date SQLite sau orice alt ă soluție de stocare persistent ă;
 implementat ă de o subclas ă a clasei ContentProvider ;
 o solu ție pentru a partaja și controla (pe baz ă de permisiuni) transferul de date între
aplica ții;
Broadcast receiver
 o component ă care r ăspunde la anun țuri difuzate (propagate) la nivel de sistem;
 oarecum similar cu conceptul de h andler global (sau evenimente de sistem);
 implementat ă de o subclas ă a clasei BroadcastReceiver .‖13

2.3.3 Avantajele și dezavan tajele folosirii programului Android Studio
Ca orice program din lume și Android Studio are avantaje care vin la pachet cu o serie
de dezavantaje.
Începem cu avantajele, acestea fiind:
 Editor WYSIWYG, este folosit în general de începatorii în programare, d ar cu toate acestea
este o caracteristică bună;
 Refractorizare foarte bună;
 Posibilitatea de a analiza performanța codului;
 Template -uri gata funcționale.

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

6
Trecând la dezavantaje, ele sunt următoarele:
 Existența bug -urilor în număr destul de mare;
 Nevoia co nstantă de a da refresh la gradle chiar și pentru cea mai mică modificare;
 Cerințe foarte mari de sistem mai exact, i7, 8gb Ram, plus 40 gb hdd;
 La fiecare import de librărie nouă trebuie refăcut importul librăriilor vechi .
Trebuie să ținem cont de faptul că Android Studio este la început și aceste dezavantaje
sunt normale, însă pe viitor va fi IDE -ul în care toți dezvoltatorii sau cel puțin majoritatea își vor
realiza aplicațiile.

7

3. FIREBASE

3.1 NOȚIUNI GENERALE FIREBASE

Firebase este o platformă de d ezvoltare a aplicațiilor mobile și web dezvoltată
de Firebase, Inc. în 2011, achiziționată apoi de Google în 2014.14
Firebase este o platformă nouă, cu ajutorul căreia se pot dezvolt a rapid aplicații de calitate, ba
mai mult se poate genera o bază de utilizatori implicați. Platforma include mai multe funcții strâns
legate între ele, care se pot combina după cum dore ște utilizatorul . Printre acestea se numără un
backend mobil  — soluții de analiză și instrumente de dez voltare a aplicațiilor și de generare de venit,
prin care s e maximize ază succesul aplicației, cree ate de utilizator .
Firebase are 4 funcții de comandă:15
 orderByKey()
 orderByChild(‗child‘)
 orderByValue()
 orderByPriority()

3.2 AVANTAJELE FOLOSIRII FIREBASE
Baza de date Firebase Realtime este o bază de date NoSQL găzduită în cloud, care vă permite
să stocați și să sincronizați utilizatori i în timp real.16
Cu un singur API, baza de date Firebase furnizează aplicației dvs. atât valoarea curentă a
datelor, cât și orice actualizare a acestor date.

14 https://firebase.googleblog.com/2016/05/firebase -expands -to-become -unified -app-platform.html
15 https://hackernoon.com/introduction -to-firebase -218a231 86cd7
16 Idem

8
Sincronizarea în timp real ușurează accesul utilizatorilor dvs. la datele de pe orice dispozitiv,
fie pe web, fie pe mobil. Realtime Database ajută utilizatorii să colaboreze unul cu altul.
Un alt avantaj uimitor al bazei de date Realtime este că se livrează cu SDK -uri mobile și web,
permițându -vă să vă construiți aplicațiile fără a avea nevoie de servere.
Firebase Authentication oferă servicii backend, SDK -uri ușor de folosit și biblioteci UI gata de
utilizare pentru ca utilizatorii sa se poată autentifica în aplicația dvs.17
Firebase a simplificat procesul de preluare a datelor specifice din baza de date prin
interogări. Interogările sunt create prin legarea uneia sau a mai multor metode de filtrare.

17 https://hackernoon.com/introduction -to-firebase -218a23186cd7

9
4. PREZENTAREA APLICAȚIEI
4.1 DESIGNUL APLICAȚIE I
4.1.1 Pagina principal ă

Figură 1

10
4.1.2.Interfața paginii de înregistrare
În Figura 2 avem pagina de înregistrare care este alcătuită din:
– Un ImageView
– 3 casu țe EditText
– un Button.
Scopul acestei pagini este acela de a-i permite utilizatorului să își creeze un c ont personal care
este necesar pentru folosirea aplicației.

Figură 2

11
4.1.3 Pagina de logare
Pagina de logare (Figura 3) este alcătuită din:
– Un Image View
– 2 EditText
– Un Button
Pagina de logare are rolul de a -i permite utilizatorului s ă se logheze însă acest lucru se poate
realiza doar după ce utilizatorul și -a creat cu succes un cont care a fost salvat în baza de date.

Figură 3

12
4.1.4 Salvarea informațiilor în baza de date
După ce utilizatorul a reușit să își creeze un cont și să se autentifice este nevoit să își
introducă prenumele, numele complet și orașul unde locuiește pentru a putea continua s ă utilizeze
aplicația.
După ce utilizatorul introduce aceste date, aplicația salvează datele în baza de date și este
informat despre acest lucru.

Figură 4

13
4.2 MENIUL PRINCIPAL AL APLICAȚIEI
În Figura 5 putem vedea meniul aplicației, care ne permite să navig ăm către celălalte pagini
ale aplicației unde putem găsi informațiile personale, statistici, notițe, istoricul și butonul de Logout
care ne pe rmite să ne delogăm pentru a păstra confidențialitatea datelor folosite în aplicație.

Figură 5

14
4.2.1 Update informații
Pagina Update informații care se regăsește în Figura 6 este compusă din:
– Status Profil ( unde utilizatorul își poate introduce în fiecare zi, oră sau minut
starea de spirit)
– Nume ( în acest câmp utilizatorul trebuie să î și introducă numele)
– Nume Complet ( se completează cu numele și prenumele utilizatorului)
– Oraș ( utilizatorul își introduce aici orașul în care locuiește)
Câmpurile ( Nume, Nume complet, Oraș) se completeaza automat cu informațiile din baza
de date care au fost introduse imediat de pe pagina de logare, deci utilizatorul nu mai este nevoit să le
introducă din nou.
– Data nașterii ( aici se introduce data nașterii )
– Ocupație ( în acest câmp utilizatorul trebuie să își introducă funcția pe care o are)
– Venit lunar ( aici utilizatorul poate introduce venitul lunar pe care îl poate modifica în
fiecare oră, zi, săptămână, în funcție de prime, bonusuri, alte venituri)

Figură 6

15
4.2.2 Profilul meu
În această pagină putem vedea informațiile de spre profilul personal imediat după ce le -am
introdus în pagina de update.

Figură 7

16
4.2.3 Cheltuieli
Această pagină este dedicată pentru introducerea cheltuielilor, unde putem alege categoria din
care face parte ( în funcție de ce categorii am creat), putem adăuga o descriere care este opțională în
caz că dorim să trecem mai multe informații despre ea și suma de bani , iar după ace ea dăm save și
cheltuiala noastră va apărea pe pagina principală în ziua în care a fost creată.

Figură 8

17
4.2.4 Categorii
Pagina Categorii din Figura 9 ne permite să cre ăm categorii în funcție de nevoile personale
precum ( Alimente, Haine, Încălțăminte, Rate, etc) .
Fiecare utilizator își poate creea propriile lui categorii, de oarece el știe cel mai bine pe ce
anume își cheltuie banii.

Figură 9

18

Figură 10

19
4.2.5 Statistici
Pagina Statistici din Figura 11 este pu țin mai complexă deoarece aici putem selecta intervalul
de timp di n care dorim ca aplicația să ne arate cheltuielile, ne arată cheltuielile pe categorii în funcție
de categoriile create de noi și ne mai arată și procentajul cheltuielilor.

Figură 11

20
4.2.6 Noțite
Pagina Notiță din Figura 12 ne permite să ne cre ăm o notiță care funcționează pe baza unui
sistem de alarmă unde putem seta data și ora la care această alarmă să pornească pentru a ne aminti
când trebuie să efectuăm o plată importantă pentru a nu uita de ea și să primim penalizări.
Acea stă notiță se poate crea, șterge, activa, dezactiva în orice moment fără vreo modificare
asupra aplicației sau telefonului.

Figură 12

21

Figură 13

22
4.2.7 Istoric
În pagina Istoric putem vedea toate cheltu ielile și plățile efectuate care au fost salvate și
putem selecta o anumită perioadă de timp în caz ca nu mai știm pe ce anume am cheltuit banii în acea
perioadă de timp.

Figură 14

23
4.2.8 Ajutor
Pagina ajutor ne oferă informații despre aplicație, despre utilizarea corectă și o adresă de
gmail pentru suport.

Figură 15

24
4.3 PROIECTUL FINAL
4.3.1 Testarea proiectului
Testarea aplicației se face folosind un emulator pentru platforma android – un Android
Virtual Device (AVD) sau a unui telefon care este setat pe modul dezvoltator.

Figură 16
4.3.2 Platforma de testare
Platforma de testare a fost un Adroid Virtual Device ( Pixel 2 API 28) pe care a rulat un
android 8.1 cu memorie R AM de 1536 MB, VM heap de 256 MB, Memorie Internă de 800 MB și un
SD card de 100MB.
Imaginea sistemului este etichetată cu API -URI google ceea ce înseamnă ca aceasta are acces
la serviciile de Google Play.

25

Figură 17

Figură 18

26
4.3.3 Verificarea informațiilor din baza de date
În baza de date a proiectului din Firebase putem observa conturile create și informațiile
despre profilul persoanelor care și-au introdus datele personale.

Figură 19

Figură 20

27

Figură 21

28
5. CONCLUZII
În zilele noastre aplicațiile android sunt foarte răspândite însă foarte puține se bazează pe
calculul veniturilor și cheltuielilor. Având în veder e că timpul în prezent este foarte prețios, am
considerat că este momentul potrivit să creez o aplicație care să ușureze viața utilizatorilor de android
care sunt dispuși să încerce această aplicație și totodată să îi ajut să economisească timp prețios pe
care l -ar fi consumat inutil în notarea veniturilor și cheltuielilor pe diverse materiale specifice.
În lucrarea de față am prezentat anumite etape ale creării aplicației android:managementul
cheltuielilor și veniturilor. Pentru exemplificarea etapelor par curse în crearea aplicației am inserat
imagini din aplicația creată și am detaliat anumite proceduri.
Pe parcursul realizării aplicației am întâmpinat dificultăți în ceea ce privește erorile apărute,
unele simple care nu au necesitat mult timp și pe care a m reușit să le soluționez fără vreun ajutor, însă
au fost și erori complexe, erori pe care le -am rezolvat cu ajutorul site -ului https://stackoverflow.com/ .
. În momentul în care am ales această temă nu aveam multe cunoștințe privitor la program sau
cum aș putea realiza o astfel de aplicație, însă prin documentare și multă muncă am reușit să realizez
aplicația și să o aduc în forma din prezent.
Prin realizarea acestei aplicații am avut oportunitatea de a deprinde cunoștințe noi, de a învăta
să folosesc un pr ogram care, pe viitor, va fi baza realizării aplicațiilor android.

29
6. BIBLIOGRAFIE

[IAN13] – Android User Interface Design: Turning Ideas and Sketches into Beautifully Designed
Apps (Ian G. Clifton) , 2013
[ZIG12] – Zigurd Mednieks, Laird Dornin, G. Blake Meike & Masumi Nakamura, Programming
Android , o'reilly media, incorporated, 2012

30
7. REFERINȚE WEB

[AD18] – https://developer.android.com/studio/

[ANDR10] – Cristina Enescu, Android, pe intelesul tuturo r – ce este si ce face?, 2010 online la adresa
http://www.hit.ro/software/android -pe-intelesul -tuturor -ce-este-si-ce-face

[DEV13] –Xavier Ducrohet , Android Studio: An IDE built for Android , 2013, online disponibil la
adresa https://android -developers.googleblog.com/2013/05/android -studio -ide-built-for-android.html

[FIR16] – James Tamplin, Firebase expands to become a unified app platf orm, 2016 , online disponibil
la adresa https://firebase.googleblog.com/2016/05/firebase -expands -to-become -unified -app-
platform.html

[HAC17] – Introduction to Firebase , 20 17, online disponibil la adresa
https://hackernoon.com/introduction -to-firebase -218a 23186cd7

[IT11] – Android Tutorial (2) – Concepte, activitati si resurse ale unei aplicatii Android, 2011, online disponibil
la adresa http://www.itcsolutions.eu/2011/09/08/android -tutorial -concepte -activitati -si-resurse -ale-
unei-aplicatii -android/

[OPEN 07] – Industry Leaders Announce Open Platform for Mobile Devices , 2007, online la adresa
http://www.openhandsetalliance.com/press_110507.html

[PART 07] – Stephen Shankland , Google's android parts ways with java industry group, 2007,
online la adresa https://www.cnet.com/news/googles -android -parts -ways -with-java-industry -group/

[SET17] –Nicolae Sfetcu , Interfaț a cu utilizatorul în Android Studio ,2017, online disponibil la adresa
https://www.setthings.com/ro/interfata -cu-utilizatorul -android -studio/

[STA18] – https://www.statista.com/statistics/266210/number -of-available -applications -in-the-
google -play-store/, 2018

31

A. CODUL SURSĂ

<?xml version="1.0" encoding="utf -8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="com.lenovo.LicentaViorel">

<uses -permission android:name= "android.permission.INTERNET" />
<!– <uses -permission android:name="android.permission.GET_ACCOUNTS" /> –>
<!– <uses -permission android:name="android.permission.USE_CREDENTIALS" /> –>
<uses -permission android:name="android.permission.RECEIV E_BOOT_COMPLETED" />
<uses -permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses -permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

<application
android:name=".ExpenseTrackerApp"
androi d:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme.NoActionBar">
<meta -data
android:name="android.support.VE RSION"

32
android:value="26.1.0"
tools:node="replace" />

<activity
android:name=".ui.MainActivity"
android:label="@string/app_name"
android:theme="@style/AppTheme.NoActionBar.TransparentStat usBar" />
<activity
android:name=".ui.login.LoginActivity"
android:configChanges="orientation"
android:label="@string/app_name"
android:screenOrientation="portrait"
android:theme="@style/A ppTheme.NoActionBar.TransparentStatusBar">
<intent -filter>
<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />
</intent -filter>
</activity>
<activity
android:name=".ui.settings.SettingsActivity"
android:label="@string/app_name" />
<activity

33
android:name=".ui.expenses.ExpenseDetailActivity"
android:label="@string/title_a ctivity_expense_detail" />
<activity android:name=".ui.reminders.NewReminderActivity" />

<receiver android:name=".receivers.AlarmReceiver" />
<receiver
android:name=".receivers.AlarmsSystemBooted"
android:en abled="false">
<intent -filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent -filter>
</receiver>
<receiver
android:name=".widget.ExpensesWidgetProvider"
android:label="@string/app_name">
<intent -filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
<action
android:name="com.lenovo.LicentaViorel.widget.ExpensesWidgetService.UPDATE_WIDGET" />
</intent -filter>

<meta -data
android:name="android.appwidget.provider"
android:resource="@xml/widget_provider" />

34
</receiver>

<service
android:name=".widget.ExpensesWid getService"
android:permission="android.permission.BIND_REMOTEVIEWS" />

<activity
android:name=".ui.help.HelpActivity"
android:label="@string/title_activity_help"
android:theme="@style/AppTheme.NoAct ionBar" />
<activity android:name=".RegisterActivity" />
<activity android:name=".Login2Activity" />
<activity android:name=".SetupActivity" />
<activity
android:name="com.theartofdev.edmodo.cropper.CropImageActi vity"
android:theme="@style/Base.Theme.AppCompat" />
<activity
android:name=".UpdateActivity"
android:parentActivityName=".ui.MainActivity"></activity>
<activity android:name=".ProfileActivity"></activity >
</application>

</manifest>

35

Codul sursă al paginilor de design:
<?xml version="1.0" encoding="utf -8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res -auto"
xmlns:tools ="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/login"
tools:context=".Login2Activity">

<ImageView
android:id="@+id/login_icon"
android:layout_width="120dp"
android:layout_height="120dp"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:layout_marginTop="15dp"
android:contentDescription="@string/todo"
app:srcCompat="@drawable/logo2" />

36
<EditText
android:id="@+id/login_email"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentStart="true"
android:layout_alignP arentTop="true"
android:layout_marginTop="160dp"
android:background="@drawable/inputx"
android:drawableStart="@drawable/email"
android:ems="10"
android:hint="@string/email"
android:inputType="textEmailAddress "
android:padding="10dp"
android:layout_alignParentLeft="true"
android:drawableLeft="@drawable/email" />

<EditText
android:id="@+id/login_password"
android:layout_width="match_parent"
android:layout_hei ght="wrap_content"
android:layout_alignParentStart="true"
android:layout_centerVertical="true"

37
android:background="@drawable/inputx"
android:drawableLeft="@drawable/password"
android:ems="10"
android:hint="@s tring/password"
android:inputType="textPassword"
android:padding="10dp"
android:layout_alignParentLeft="true"
android:drawableStart="@drawable/password" />

<Button
android:id="@+id/login_button"
android :layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentStart="true"
android:layout_marginBottom="177dp"
android:background="@drawable/butto n"
android:padding="15dp"
android:text="login"
android:textColor="@android:color/background_light"
android:textSize="18sp"
android:textStyle="bold"

38
android:layout_alignParentLeft="true"
android:textAl ignment="center"/>

<TextView
android:id="@+id/register_account_link"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentSta rt="true"
android:layout_marginBottom="143dp"
android:text="Nu ai cont? Creeaza unul!"
android:textAlignment="center"
android:textColor="@android:color/holo_red_dark"
android:textSize="18sp"
android:textStyle ="normal|bold"
android:layout_alignParentLeft="true" />

<TextView
android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"

39
android:layout_marginBottom="114dp"
android:text="or login with" />

<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layo ut_alignParentBottom="true"
android:layout_alignParentStart="true"
android:layout_marginBottom="19dp"
android:orientation="horizontal"
android:layout_alignParentLeft="true">

<ImageView
android:id="@+id/f acebook_signin_button"
android:layout_width="100dp"
android:layout_height="80dp"
android:layout_marginLeft="25dp"
android:layout_marginTop="8dp"
android:src="@drawable/facebook" />

<Image View
android:id="@+id/twitter_signin_button"

40
android:layout_width="125dp"
android:layout_height="105dp"
android:layout_marginLeft="5dp"
android:src="@drawable/twitter" />

<ImageView
android:id="@+id/google_signin_button"
android:layout_width="90dp"
android:layout_height="75dp"
android:layout_marginLeft="15dp"
android:layout_marginTop="10dp"
android:src="@drawable/googl e" />

</LinearLayout>

</RelativeLayout>
<?xml version="1.0" encoding="utf -8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res -auto"
xmlns:tools="http://schemas.andr oid.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"

41
tools:context=".RegisterActivity"
android:background="@drawable/login">

<ImageView
android:id="@+id/register_icon"
android:layout_ width="150dp"
android:layout_height="150dp"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:layout_marginTop="104dp"
app:srcCompat="@drawable/logo2" />

<EditText
andro id:id="@+id/register_email"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentStart="true"
android:layout_centerVertical="true"
android:background="@drawable/inputx"
android:drawableLeft="@drawable/email"
android:ems="10"
android:hint="@string/email"

42
android:inputType="textEmailAddress"
android:padding="10dp" />

<EditText
android:id="@+id/register_password"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_marginBottom="187dp"
android:background="@drawable/inputx"
android:drawableLeft="@drawable /password"
android:ems="10"
android:hint="@string/password"
android:inputType="textPassword"
android:padding="10dp" />

<EditText
android:id="@+id/register_confirm_password"
android:layout_width="match_pa rent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_marginBottom="109dp"
android:background="@drawable/inputx"

43
android:drawableLeft="@drawable/password"
android:e ms="10"
android:hint="@string/confirm_password"
android:inputType="textPassword"
android:padding="10dp" />

<Button
android:id="@+id/register_create_account"
android:layout_width="match_parent"
android:la yout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:layout_marginBottom="48dp"
android:background="@drawable/button"
android:padding="15dp"
androi d:text="@string/create_account"
android:textColor="@android:color/background_light"
android:textSize="18sp"
android:textStyle="bold"
android:textAlignment="center"
/>

</RelativeLayout>

44
<?xml version="1.0" encoding=" utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res -auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height ="match_parent"
android:background="@drawable/register"
tools:context=".SetupActivity">

<de.hdodenhof.circleimageview.CircleImageView
android:id="@+id/setup_profile_image"
android:layout_width="250dp"
android:layout_he ight="250dp"
android:layout_above="@+id/setup_username"
android:layout_centerHorizontal="true"
android:layout_marginBottom=" -5dp"
android:src="@drawable/profile" />

<EditText
android:id="@+id/setup_username"
android:layout_width="match_parent"
android:layout_height="wrap_content"

45
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:layout_marginBottom="241dp"
android:layout_marginLe ft="7dp"
android:layout_marginRight="7dp"
android:layout_marginTop="5dp"
android:background="@drawable/inputx"
android:drawableLeft="@drawable/name"
android:ems="10"
android:hint="Prenume"
android:inp utType="textMultiLine"
android:padding="14dp" />

<EditText
android:id="@+id/setup_full_name"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:layout_marginBottom="177dp"
android:layout_marginLeft="7dp"
android:layout_marginRight="7dp"
android:layout_marginTop="5dp"

46
android:background="@drawable/inputx"
android:drawableLeft="@drawable/name"
android:ems="10"
android:hint="Nume complet"
android:inputType="textMultiLine"
android:padding="14dp" />

<EditText
android:id="@+id/setup_country_name"
android:l ayout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:layout_marginBottom="108dp"
android:layout_marginLeft="7dp"
android:layout_marginRight="7dp"
android:layout_marginTop="5dp"
android:background="@drawable/inputx"
android:drawableLeft="@drawable/country"
android:ems="10"
android:hint="Oras"
android:inputType="textMu ltiLine"
android:padding="14dp" />

47

<Button
android:id="@+id/setup_information_button"
android:layout_width="200dp"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:lay out_centerHorizontal="true"
android:layout_marginBottom="47dp"
android:background="@drawable/button"
android:padding="14dp"
android:text="Save"
android:textAlignment="center"
android:textColor="@android:color /background_light"
android:textSize="20sp"
android:textStyle="bold" />

</RelativeLayout><?xml version="1.0" encoding="utf -8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.and roid.com/apk/res -auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"

48
tools:context=".UpdateActivity"
android:background="@drawable/register">

<include androi d:id="@+id/settings_toolbar"
layout="@layout/app_bar_layout">

</include>

<ScrollView
android:layout_width="match_parent"
android:layout_height="510dp"
android:layout_alignParentBottom="true"
android:layout _alignParentStart="true"
android:layout_marginBottom="0dp"
android:layout_alignParentLeft="true">

<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent">

49
<de.hdodenhof.circleimageview.CircleImageView
android:id="@+id/settings_profile_image"
android:layout_width="250dp"
android:layout_height="250dp"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:layout_marginTop="10dp"
android:src="@drawable/profile"/>

<EditText
android:id="@+id/settings_status"
android:layout_width="matc h_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/settings_profile_image"
android:layout_marginLeft="40dp"
android:layout_marginRight="40dp"
android:lay out_marginTop="4dp"
android:background="@drawable/inputx"
android:hint="Status profil"
android:padding="30dp"
android:textColor="@android:color/background_dark"
android:textSiz e="20sp"

50
android:textStyle="bold"/>

<EditText
android:id="@+id/settings_username"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android: layout_below="@+id/settings_status"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
android:layout_marginTop="30dp"
android:background="@drawable/inputx"
android:hint="Nume"
android:padding="12dp"
android:textColor="@android:color/background_dark"
android:textSize="20sp"
android:textStyle="bold"/>

<EditText
android:id= "@+id/settings_profile_full_name"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/settings_username"
android:layout_marginLeft="10dp"

51
android:layout_marginRight="10dp"
android:layout_marginTop="6dp"
android:background="@drawable/inputx"
android:hint="Nume complet"
android:padding="12dp"
android:text Color="@android:color/background_dark"
android:textSize="20sp"
android:textStyle="bold"/>

<EditText
android:id="@+id/settings_country"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/settings_profile_full_name"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
android:layout_marginTop= "6dp"
android:background="@drawable/inputx"
android:hint="Oras"
android:padding="12dp"
android:textColor="@android:color/background_dark"
android:textSize="20sp"
android:textStyle="bold"/>

52

<EditText
android:id="@+id/settings_dob"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/settings_ country"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
android:layout_marginTop="6dp"
android:background="@drawable/inputx"
android:hint="Data nasterii"
android:padding="12dp"
android:textColor="@android:color/background_dark"
android:textSize="20sp"
android:textStyle="bold"/>

<EditText
android:id="@+id/settings_gend er"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/settings_dob"
android:layout_marginLeft="10dp"
android:layout_marginRigh t="10dp"

53
android:layout_marginTop="6dp"
android:background="@drawable/inputx"
android:hint="Ocupatie"
android:padding="12dp"
android:textColor="@android:color/background_dark"
android:textSize="20sp"
android:textStyle="bold"/>

<EditText
android:id="@+id/settings_relationship_status"
android:layout_width="match_parent"
android:layout_heig ht="wrap_content"
android:layout_below="@+id/settings_gender"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
android:layout_marginTop="6dp"
android:backgrou nd="@drawable/inputx"
android:hint="Venit lunar"
android:padding="12dp"
android:textColor="@android:color/background_dark"
android:textSize="20sp"
android:textStyle="bold"/>

54

<Button
android:id="@+id/update_account_settings_buttons"
android:layout_width="match_parent"
android:layout_height="60dp"
android:layout_below="@+id/settings_relationship_status"
android:text="Update informatii personale"
android:layout_margin="20dp"
android:background="@drawable/button"
android:textColor="@color/colorAccent"
android:textSize="20sp"
android:textStyle="bold"
android:textAllCaps="false"
android:textAlignment="center"/>

</RelativeLayout>
</ScrollView>

</RelativeLayout>
package com.lenovo.LicentaViorel;

import android.content.Int ent;
import android.support.annotation.NonNull;

55
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.Toolbar;
import android.text.TextUtils;
import android.view.View;
import android.widget.Button;
impo rt android.widget.EditText;
import android.widget.Toast;

import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.Task;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.database.DataSnapshot;
impo rt com.google.firebase.database.DatabaseError;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.database.ValueEventListener;
import com.lenovo.LicentaViorel.ui.MainActiv ity;
import com.squareup.picasso.Picasso;

import java.util.HashMap;

import de.hdodenhof.circleimageview.CircleImageView;

56

public class UpdateActivity extends AppCompatActivity {

private DatabaseReference SettingsUserRef;
private FirebaseAuth mAu th;

private String currentUserId;

private Toolbar mToolbar;
private EditText userName, userProfName, userStatus, userCountry, userRelation, userDOB,
userGender;
private Button UpdateAccountSettingsButton;
private CircleImageView use rsProfImage;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_update);

mAuth = FirebaseAuth.getInstance();

57
currentUserId = mAuth. getCurrentUser().getUid();
SettingsUserRef =
FirebaseDatabase.getInstance().getReference().child("Users").child(currentUserId);

mToolbar = (Toolbar) findViewById(R.id.settings_toolbar);
setSupportActionBar(mToolbar);
getSupportActionBar().setTitle("Informatii personale");
getSupportActionBar().setDisplayHomeAsUpEnabled(true);

userName = (EditText) findViewById(R.id.settings_username);
userProfName = (EditText) findViewById(R.id.settings_profile_ full_name);
userStatus = (EditText) findViewById(R.id.settings_status);
userCountry = (EditText) findViewById(R.id.settings_country);
userGender = (EditText) findViewById(R.id.settings_gender);
userRelation = (EditText) find ViewById(R.id.settings_relationship_status);
userDOB = (EditText) findViewById(R.id.settings_dob);
UpdateAccountSettingsButton = (Button) findViewById(R.id.update_account_settings_buttons);

58
SettingsUserRef.addValueEventListener(ne w ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot)
{
String myUserName = dataSnapshot.child("username").getValue().toString();
String myProfileName = da taSnapshot.child("fullname").getValue().toString();
String myProfileStatus = dataSnapshot.child("status").getValue().toString();
String myDOB = dataSnapshot.child("dob").getValue().toString();
String myCountr y = dataSnapshot.child("country").getValue().toString();
String myGender = dataSnapshot.child("gender").getValue().toString();
String myRelationStatus = dataSnapshot.child("relationshipstatus").getValue().toString();

userName.setText(myUserName);
userProfName.setText(myProfileName);
userStatus.setText(myProfileStatus);
userDOB.setText(myDOB);
userCountry.setText(myCountry);
userGender.setText(myGender);
userRelation.setText(myRelationStatus);
}

59
@Override
public void onCancelled(DatabaseError databaseError) {

}
});

UpdateAccountSettingsButton.se tOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v)

{
ValidateAccountInfo();
}
});

}

60
private void ValidateAccountInfo()
{
Strin g username = userName.getText().toString();
String profilename = userProfName.getText().toString();
String status = userStatus.getText().toString();
String dob = userDOB.getText().toString();
String country = userCountry.get Text().toString();
String gender = userGender.getText().toString();
String relation = userRelation.getText().toString();

if (TextUtils.isEmpty(username))
{
Toast.makeText(this, "Ai uitat sa introduci numele", To ast.LENGTH_SHORT).show();
}

else if (TextUtils.isEmpty(profilename))
{
Toast.makeText(this, "Ai uitat sa introduci numele si prenumele",
Toast.LENGTH_SHORT).show();
}

else if (TextUtils.isEmpty(status))
{
Toast.makeText(this, "Ai uitat sa introduci sexul tau", Toast.LENGTH_SHORT).show();

61
}

else if (TextUtils.isEmpty(dob))
{
Toast.makeText(this, "Ai uitat sa introduci data nasterii", Toast.LENGTH_SH ORT).show();
}

else if (TextUtils.isEmpty(country))
{
Toast.makeText(this, "Ai uitat sa introduci orasul unde locuiesti",
Toast.LENGTH_SHORT).show();
}

else if (TextUtils.isEmpty(gender))
{
Toast.makeText(this, "Ai uitat sa introduci jobul!", Toast.LENGTH_SHORT).show();
}

else if (TextUtils.isEmpty(relation))
{
Toast.makeText(this, "Ai uitat sa introduci venitul tau lunar!",
Toast.LENGTH_SHORT).sho w();
}
else

62
{
UpdateAccountInfo(username, profilename, status, dob, country, gender, relation);
}
}

private void UpdateAccountInfo(String username, String profilename, String status, String dob,
String country, String gender, String relation)
{
HashMap userMap = new HashMap();
userMap.put("username", username);
userMap.put("fullname", profilename);
userMap.put("status", status);
userMap.put("dob", dob);
userMap.put("country", country);
userMap.put("gender", gender);
userMap.put("relationshipstatus", relation);

SettingsUserRef.updateChildren(userMap).addOnCompleteListener(new OnCompleteListener()
{
@Override
public void onComplete(@NonNull Task task)
{
if (task.isSuccessful())
{

63
SendUserToMainActivity();
Toast.makeText(UpdateActivity.this, "Contul tau a fost actualiza t cu succes",
Toast.LENGTH_SHORT).show();
}
else
{
Toast.makeText(UpdateActivity.this, "Eroare, data nu au putut fi actualizate",
Toast.LENGTH_SHORT).show();
}
}
});

}

private void SendUserToMainActivity()
{
Intent mainIntent = new Intent(UpdateActivity.this, MainActivity.class);
mainIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK |
Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(mainIntent);
finish();
}

64
B. CD / DVD
Versiunea electronică a aplicației, a lucrări i și prezentarea finală a tezei .

65

Similar Posts