Context general [305245]

[anonimizat] a fi duse la bun sfârșit cât mai rapid și mai eficient. [anonimizat]. Ele nu ar reprezenta o [anonimizat] o [anonimizat]. [anonimizat]-o [anonimizat].

Reprezentând resursa cea mai prețioasă a sa, omul trebuie sa știe sa își dozeze timpul pentru a duce la bun sfârșit toate activitățile pe care și le propune. [anonimizat].

Contextul aplicației

Tehnologiile emergente pun la dispoziție tot felul de soluții pentru rezolvarea problemei timpului. [anonimizat]-urile utilizatorilor lor. [anonimizat] o soluție pertinentă în problema timpului.

Astfel, [anonimizat], [anonimizat]-l în gestiunea propriului timp.

[anonimizat].

Soluția software propune următoarele funcționalități:

Modalitate de căutare a rețetelor. [anonimizat] o rețetă chiar dacă nu cunoaște în întregime numele acesteia

Modalitate de salvare a [anonimizat]. Astfel, va exista o [anonimizat] o accesare mai facilă

Listă cu ingrediente pentru fiecare rețetă în parte. [anonimizat]. Primul pas în gătirea unei rețete constă în afinitatea vizuală față de aspectul acesteia. [anonimizat] a rețetei. [anonimizat]. [anonimizat], intuitiv pentru utilizator

Rezumat

Subiectul acestui lucrări îl reprezintă o [anonimizat], oferindu-i la îndemână o [anonimizat], [anonimizat], [anonimizat], și anume timpul mediu de gătire. Aplicația va rula pe telefoanele cu minim Android 2.3 Gingerbread.

În capitolul 2 [anonimizat] 3-lea vor fi prezentate câteva aplicații software de rețete deja existente pe piață. În capitolul 4 [anonimizat]-[anonimizat]. În capitolul 5 [anonimizat] 6. Manualul de utilizare și instalare reprezinta obiectul de studiu al capitolului al 7-lea, în timp ce concluziile vor fi abordate în capitolul 8.

2. STUDIU BIBLIOGRAFIC

2.1 [anonimizat] există deja aplicații care propun abordarea unor tematici culinare.

2.1.1 Yummly Recipes & Shopping List[1]

Yummly este o aplicație ce conține peste 1 milion de rețete, de la mâncăruri rapide la mâncăruri fără gluten, de la preparate italiene până la preparate prăjite.

Facilități:

Listă cu ingrediente pentru fiecare rețetă

Rețetele preferate pot fi salvate local, eliminând astfel factorul de rețea

Algoritmi care recomandă rețete noi pe baza alegerilor precedente

Diete personalizate – în funcție de alergii la lactate, gluten etc.

Căutarea rețetelor in baza de date

Recenzii făcute de utilizatori pentru fiecare rețetă

Peste 1 milion de rețete

Fig. 2.1 Interfața grafică Yummly

2.1.2 My CookBook[2]

My CookBook este un manager de rețete cu funcții de căutare și import. My Cookbook permite crearea propriei carte de bucate digitală. Aceasta aplicație propune construirea propriei baze de date cu rețete prin colectarea de rețete pe web și utilizând funcțiile de import.

Facilități:

Crearea unei liste de cumpărături pe baza ingredientelor din rețetă

Sincronizarea rețetelor pe diferite dispozitive utilizând Dropbox

Scalarea ingredientelor pentru servirea mai multor porții

Funcție de vorbire pentru citirea rețetelor de către un asistent electronic

Personalizarea a diferite părți ale aplicației, cum ar fi tema, dimensiunea fontului

Rețetele pot fi citite si pe smartwatch (Android Wear)

My CookBook propune și o variantă pe PC, care dispune de caracteristici adiționale:

Salvarea de până la 105 rețete si 8 liste de cumpărături in Cloud

Sincronizarea de până la 105 rețete și 8 liste de cumpărături între aplicația Android și contul online

Vizualizarea și gestionarea rețetelor pe orice computer sau alt dispozitiv

Planificarea meselor și generarea unei liste de cumpărături pe toată săptămâna

Fig 2.2 Interfața principală a My CookBook

2.1.3 Recipe Keeper[3]

Recipe Keeper este o aplicație complexă, care include un organizator de rețete, liste de cumpărături și un modul de planificare a meselor. Spre deosebire de majoritatea aplicațiilor de rețete, aceasta propune și o funcționalitate nouă, și anume inserarea propriilor rețete.

Facilități:

Adăugarea propriilor rețete

Importarea automată a rețetelor de pe site-urile Web preferate

Organizarea rețetelor după fel și categorie

Adăugarea ingredientelor rețetei pe o listă de cumpărături

Împărtășirea rețetelor, listelor de cumpărături pe diferite dispozitive, de la Android la iOS, de la Windows la Mac

Printarea rețetelor

Fig. 2.3 Interfața de editare a rețetelor aplicației My CookBook

3. ANALIZĂ ȘI FUNDAMENTARE TEORETICĂ

3.1 Tehnologii utilizate

Aplicația a fost dezvoltată utilizând tehnologii open-source[4]. Avantajul tehnologiilor open-source este ca acestea sunt bine documentate, răspândite, și bine întreținute de o comunitate de oameni interesați.

Avantaje pentru alegerea acestei abordări:

Cost monetar practic inexistent, întrucât nu a fost nevoie de plata unor taxe pentru accesul, precum la un software proprietar

Existența suportului tehnic din partea pasionaților care fac parte din comunitățile care se ocupă cu dezvoltarea și întreținerea tehnologiilor în discuție

Aplicația a fost realizată pentru telefoanele ce rulează Android[5], utilizând Android SDK[6]. Mediul de dezvoltare este Android Studio, în detrimentul Eclipse IDE, deoarece cel din urmă nu mai este suportat, iar cel dintâi a devenit standardul pentru realizarea aplicațiilor Android. Aplicația este scrisă în Java[7], pe partea funcțională, iar pe partea de design, a fost utilizat XML. Aceasta comunică cu un server, pentru a prelua date despre rețetă, acestea fiind într-un format XML. Resursele grafice (poze), sunt de asemenea stocate și preluate de pe server. Serviciul de web hosting îl reprezintă www.000webhost.com[8]. Acesta este un serviciu gratuit, cu facilități utile precum un file manager online, pentru manipularea mult mai facilă a datelor.

Prezentarea în detaliu a acestor tehnologii urmează în secțiunile următoare.

3.1.1 Android

Android este un sistem de operare mobil dezvoltat de compania americană Google. Este destinat, în principiu, dispozitivelor cu ecran tactil, în special smartphone-uri și tablete. Interfața sistemului de operare se bazează în principiu pe manipulare directă, utilizând gesturi naturale pentru navigare, și o tastatură virtuală pentru input-ul de informații.

Inițial a fost dezvoltat de Android Inc, companie pe care Google a cumpărat-o în 2005.

Sistemul de operare Android a fost prezentat în anul 2007, alături de Open Handset Alliance, un consorțiu de companii hardware, software și de telecomunicații devotate avansării în dezvoltarea de standarde open-source pentru dispozitive mobile.

Caracteristici:

Open-source. Codul sursă este disponibil prin Android Open Source Project, fiind distribuit sub licența Apache versiunea 2.0, ce pune la dispoziție libera modificare și redistribuire. Kernel-ul (nucleul) se află sub licența GPL versiunea 2.0, ce presupune că modificarea surselor trebuie sa fie făcuta publică

Datorită faptului că este scris în Java și codul este executat pe o mașină virtuală Dalvik, oferă o portabilitate de rulare pe diferite arhitecturi, precum x86, ARM și altele.

UI-ul (User Inteface) poate fi scalat pentru orice rezoluție

Asigură suport pentru diferite tipuri de grafică 2D și 3D, utilizând OpenGL ES

Datele pot fi stocate local, prin intermediul unui tip de baze de date numit SQLite

Acesta pune la dispoziție o suită de echipamente de dezvoltare pentru developeri, cele mai cunoscute fiind Android Studio, Eclipse IDE, Android SDK etc.

3.1.1.1 Versiuni

Cum Android este încontinuu dezvoltat, fiecare versiune propune tot felul de îmbunătățiri. Fiecare versiune este un API level (Application Programming Interface). Programatorul trebuie să ia în considerare acest fapt, întrucât este unul vital în dezvoltarea aplicațiilor. Dacă o aplicație este dezvoltată pe un API recent, adică o versiune nouă de Android, aceasta nu va fi compatibil cu versiunile de Android precedente. În schimb, dacă o aplicație este dezvoltată pe un API vechi, compatibilitatea va fi mai mare, însă aplicația nu va beneficia de noile îmbunătățiri aduse de versiunile recente de Android. Așadar, dezvoltarea de aplicații Android reprezintă și un compromis între funcționalitate și bogăția de caracteristici. Cum o aplicație de rețete nu necesită ultimele avansări în tehnologia Android, s-a ales pentru dezvoltarea aplicației API 9, și anume Android 2.2.3 Gingerbread.

Fig. 3.1 Distribuirea versiunilor Android[9]

Versiunile precedente lui Android 2.2.3 Gingerbread nu mai sunt în utilizare la scară largă, conform graficului de mai sus.

Fig. 3.2 Tabel cu versiunile de Android

Sistemul de operare Android este structurat pe mai multe nivele. Fiecare nivel se bazează pe funcționalitățile nivelului anterior.

Fig. 3.3 Arhitectura sistemului Android[10]

3.1.1.2 Linux Kernel (Nucleu Linux)[11]

Poziționat la baza stivei software a Android-ului, Kernelul Linux asigură un nivel de abstractizare între partea hardware a dispozitivului și nivelele superioare ale stivei software. Inițial bazat pe Linux versiunea 2.6, iar acum pe 4.4, kernelul asigură multi-tasking preemptiv, servicii de bază de sistem low-level, cum ar fi managementul memoriei și proceselor. Adițional, asigură și o stivă de rețea și drivere de dispozitiv pentru display-ul acestuia, Wi-Fi și audio. Kernelul Linux asigura un mediu de multitasking, pentru a permite execuția concurentă a multiple procese.

Kernelul[12] Linux original a fost dezvoltat în 1991 de Linus Torvalds. Acesta a fost împachetat cu un set de unelte, utilități și compilatoare de Richard Stallman pentru a crea un întreg sistem de operare, referit astăzi fals ca și Linux, și corect ca și GNU/Linux.

Este important de notat că, Android folosește doar kernelul de Linux.

3.1.1.4 Android Runtime – Dalvik Virtual Machine

Fiecare aplicație de Android rulează în propria ei instanță de mașină virtuală Dalvik. Rularea aplicațiilor în propria lor mașina virtuală presupune un număr de avantaje. În primul rând, aplicațiile sunt îngrădite. Astfel, ele nu pot interfera cu sistemul de operare sau alte aplicații, dar nu pot nici să acceseze direct nivelul hardware al dispozitivului. Nivelul acesta de abstractizare forțează aplicațiile să fie neutre din punct de vedere al platformei pe care rulează, pentru ca nu depinde de o anumită configurație hardware.

Google a dezvoltat mașina virtuală Dalvik, fiind mai eficientă decât mașina virtuală Java standard în privința memoriei. Este proiectată să îndeplinească în special funcția de asigurare a bunei funcționări a multiple instanțe. Pentru a fi executat într-o mașina virtuală Dalvik, codul aplicației trebuie convertit din cod Java standard în format Dalvik executabil (.dex), ce lasă urme în memorie cu 50% mai mici decât codul standard de Java, bytecode.

3.1.1.5 Android Runtime – Core Libraries (Librării de nucleu)

Librăriile de nucleu Android (numite și Librăriile Dalvik) se împart în trei categorii:

Librării specifice Dalvik

Aceste librării sunt folosite când este dorită interacțiunea directă cu o mașină virtuală Dalvik.

Librării de Interoperabilitate Java

Acestea reprezintă o implementare open-source a unui subset a librăriilor core (nucleu) a Standard Java, fiind adaptate și transformate pentru a putea fi utilizate cu aplicații care rulează într-o mașină virtuală Dalvik

Librării Android

Acestea sunt librării Java care sunt specifice sistemului de operare Android. Cele mai importante, sunt:

android.app – Oferă acces la modelul de aplicație și reprezintă piatra de temelie a tuturor aplicațiilor Android.

android.content – Facilitează accesul la conținut, publicarea și trimiterea mesajelor între aplicații și componentele aplicației.

android.database – Folosit pentru a accesa datele publicate de furnizorii de conținut și include clase de management a bazei de date SQLite.

android.hardware – Prezintă un API care oferă acces la hardware, cum ar fi accelerometrul și senzorul de lumină

android.opengl – O interfață Java pentru OpenGL ES 3D.

android.os – Oferă aplicațiilor acces la servicii standard de sistem, inclusiv mesaje, servicii de sistem și comunicare între procese.

android.media – Oferă clase pentru a permite redarea audio și video.

android.net – Un set de API-uri care permit accesul la stivă de rețea. Include android.net.wifi, care oferă acces la stiva wireless a dispozitivului.

android.provider – Un set de clase care oferă acces la baze de date standard de furnizor de conținut Android, cum ar fi cele menținute de aplicațiile de calendar și de contact.

android.text – Folosit pentru a face și a manipula textul pe un afișaj al dispozitivului.

android.util – Un set de clase utilitare pentru efectuarea unor sarcini, cum ar fi conversia string, manipularea XML și manipularea datei și timpului.

android.view – Temelia interfețelor utilizator

android.widget – O colecție bogată de componente de interfață utilizator pre-construite, cum ar fi butoane, etichete, vizualizări de listă, manageri de layout, butoane radio etc.

android.webkit – Un set de clase destinate să permită integrarea capabilităților de navigare pe web în aplicații.

Acestea reprezintă librăriile bazate pe Java din Android Runtime. În acest nivel de abstractizare însă, mai avem și niște librării bazate pe pe C/C++.

3.1.1.6 Librării C/C++

Librăriile de nucleu prezentate anterior sunt bazate pe Java și asigură API-urile primare pentru developerii care crează aplicații android. Este important de știut că acestea nu execută, în sine, niciun fel de muncă, ele acționând ca un fel de “wrapper-e” (ambalaje) pentru librăriile C++. Librăriile C++ sunt adevăratele librării care efectuează operații.

3.1.1.7 Application Framework

Reprezintă un set de servicii care formează mediul în care aplicațiile Android rulează și sunt administrate. Acest framework implementează conceptul cum că aplicațiile Android sunt construite din componente reutilizabile, interschimbabile și înlocuibile.

Framework-ul conține următoarele servicii cheie:

Activity Manager (Manager de activități) – Controlează toate aspectele stivei de activități și durata de viață a aplicației

Content Providers (Furnizorii de conținut) – Permit aplicațiilor să publice și să partajeze date cu alte aplicații

Resource Manager (Manager de resurse) – Furnizează acces resurselor non-cod precum string-uri, setări de culoare și layout-urile interfețelor utilizator

Notifications Manager (Manager de notificări) – Permite aplicațiilor să afișeze alerte și notificări utilizatorului

View System – Un set de view-uri extensibil utilizat pentru a crea interfețe utilizator

Package Manager (Manager de pachete) – Sistemul prin care aplicațiile sunt capabile să afle informații despre alte aplicații instalate pe dispozitiv

Telephony Manager (Manager de telefonie) – Furnizează informații aplicației despre servicii disponibile pe dispozitiv, precum status sau informațiile abonatului

Location Manager (Manager de locații) – Furnizează acces serviciilor de locație permițând unei aplicații să primească update-uri despre schimbările de locație

3.1.1.8 Applications (Aplicații)

Acest nivel este localizat în topul stivei software a sistemului de operare Android. Nivelul este constituit atât din aplicații furnizate de sistemul de operare (precum aplicațiile Phone sau Contacts), cât și de aplicații instalate de la terți (precum Google Maps).

3.1.2 XML[13]

XML (Extensible Markup Language) este un limbaj markup care definește un set de reguli pentru codificarea documentelor într-un format care este lizibil atât pentru calculatoare cât și pentru oameni. Scopurile XML constau în simplitate, generalitate și uzabilitate.

Sute de formate de documente au fost dezvoltate, incluzând RSS, Atom, SOAP, SVG și XHTML. Formatele bazate pe XML au devenit standard pentru multe unelte office – Microsoft Office (Office Open XML), OpenOffice.org și LibreOffice (OpenDocument).

3.1.2.1 Terminologii de bază:

3.1.2.1.1 Caracter

Un document XML este un string de caractere. Aproape orice caracter Unicode poate apărea într-ul document XML.

3.1.2.1.2 Procesorul si aplicația

Procesorul analizează markup-ul trimite informația structurată unei aplicații. Acest procesor mai este numit, colocvial, parser XML.

3.1.2.1.3 Markup si conținut

Caracterele care formează un document XML sunt în general împărțite între markup și conținut, care pot fi diferențiate între ele aplicând niște reguli sintactice simple. În general, string-urile care sunt markup fie încep cu caracterul < și se termină cu caracterul >, fie încep cu caracterul & și se termina cu ;. String-urile care nu sunt markup reprezintă conținut.

3.1.2.1.4 Tag

Un tag este un markup care începe cu < și se termină cu >. Tag-urile vin în 3 forme:

Tag de start, precum <section>

Tag de sfârșit, precm </section>

Tag element-gol, cum ar fi <line-break />

3.1.2.1.5 Element

Un element este o componentă de document logic care fie începe cu un tag de start și se termină cu un tag de sfârșit, fie constă doar dintr-un tag element-gol. Caracterele dintre tag-ul de start și tag-ul de sfârșit reprezintă conținutul elementului, și pot conține markup, incluzând alte elemente, care sunt numite elemente copil (child elements). Un exemplu este <greeting>Hello, world!</greeting>.

3.1.2.1.6 Attribute (Atribut)

Un atribut este un markup care constă dintr-o pereche nume-valoare care există într-un tag de start sau un tag element-gol. Un exemplu ar fi <img src=”poză.jpg” alt=”Poză” />, unde denumirile atributelor sunt “src” și “alt”, și valorile lor sunt “poză.jpg” și “Poză”.

3.1.2.1.7 Declarare XML

Documentele XML pot începe cu o Declarare XML care descrie informații despre acestea. Un exemplu ar fi <?xml version=”1.0” encoding=”UTF-8”>.

3.1.3 Server (www.000webhost.com)

www.000webhost.com reprezintă o soluție gratis de hosting cu abilități de PHP, MySQL, CPanel. În plus, soluția de server oferă:

Garanție de funcționare de 99% din timp

PHP, MySQL, cereri de tip curl nelimitate, fopen() și altele

Spațiu pe disc si bandwith nelimitat

Construirea propriului site cu ajutorul builder-ului incorporat

Singura neplăcere pe care o aduce această soluție, apare în privința planului gratis. Pentru a motiva clienții deja existenți să treacă la planurile mai costisitoare, 000webhost forțează un downtime pe server, cu un interval variabil de câteva ore. Această “neplăcere” este de înțeles, din punct de vedere al logicii de business a companiei 000webhost.

3.2 Tool-uri folosite

3.2.1 Android Studio[14]

Android studio reprezintă mediul integrat de dezvoltare oficial pentru crearea de aplicații Android, bazat pe IntelliJ IDEA. Peste editorul de cod puternic al IntelliJ și a uneltelor de dezvoltare, Android Studio oferă mai multe caracteristici, precum:

Un sistem de build flexibil bazat pe Gradle

Un emulator rapid și plin de feature-uri

Un mediu omogen de dezvoltare pentru toate dispozitivele Android

Mostre de cod și integrare GitHub

Framework-uri și unelte de testare exhaustive

Suport C++ și NDK

3.2.2 Android SDK[15]

Android SDK (Software Development Kit) este un set de componente utilizate pentru a dezvolta aplicații pentru platforma Android. SDK-ul vine la pachet, în momentul redactării acestei lucrări, cu Android Studio.

Aceste unelte includ:

Librării necesare

Debugger

Emulator

Documentații necesare pentru API-uri

Mostre de cod sursă

Tutoriale pentru sistemul de operare Android

La fiecare versiune nouă de Android, un SDK omolog este de asemenea publicat. Pentru a putea realiza programe cu cele mai noi caracteristici, developerii trebuie să descarce și să instaleze noul SDK.

3.3 Cerințele aplicației

3.3.1 Caracteristici funcționale

Pentru ca aplicația de rețete să satisfacă cerințele unui consumator, aceasta trebuie să ofere o serie de funcționalități. Aceste funcționalități vor fi descrise în tabelul de mai jos.

Fig. 3.4 Tabel cu Caracteristicile funcționale ale aplicației

Un utilizator, poate să navigheze între diferitele categorii de rețete [CF-1].

Dacă nu a găsit o rețetă, o poate căuta în bara de search [CF-3] sau poate selecta originea [CF-6].

Odată selectată o rețetă, utilizatorul poate urma pașii descriși ai rețetei [CF-2] sau poate vizualiza lista de ingrediente [CF-4].

Utilizatorul poate marca ca și favorită o rețetă [CF-5] sau poate partaja rețeta cu prieteni [CF-7].

3.3.2 Caracteristici non-funcționale

Caracteristicile non-funcționale presupun atribute care caracterizează calitatea unui software, spre deosebire de caracteristicile funcționale, care se ocupă cu funcționalitățile și particularitățile unui software.

Pentru ca utilizatorul să își facă o idee despre aspectul unei rețete, aplicația trebuie să descarce pozele aferente rețetei [CNF-1].

Pentru a permite scalabilitatea și extinderea aplicației, aceasta trebuie împărțită pe module ușor de întreținut/lucrat [CNF-2].

Fig. 3.5 Tabel cu Caracteristicile non-funcționale ale aplicației

3.3.3 Cerințe dispozitiv

Pentru a asigura funcționarea corectă a aplicației, dispozitivul pe care va rula va trebui să satisfacă anumite cerințe de dispozitiv (CD). Acestea vor fi prezentate în tabelul de mai jos.

Fig. 3.6 Tabel cu Cerințele de dispozitiv ale aplicației

Dispozitivul folosit va trebui să fie conectat la Internet. Conexiunea la Internet este necesară pentru a descărca imaginile rețetelor. Ea nu este necesară pentru vizualizarea conținutului rețetelor, întrucât așa este construită ea, să permită utilizatorului să acceseze conținutul rețetei (exlcuzând pozele) chiar dacă dispozitivul său nu este conectat la Internet.

3.3.4 Factorul uman

Factorul uman reprezintă un factor decisiv în succesul unei aplicații. De aceea, el joacă un rol extrem de important în procesul de proiectare, acesta fiind imperios necesar de luat în considerare.

În tabelul de mai jos observăm caracteristici non-funcționale ce țin de factorul uman.

Fig. 3.7 Tabel cu caracteristicile non-funcționale ale factorului uman ale aplicației

Pentru ca aplicația dezvoltată să fie folosită de utilizatori, această trebuie să dețină un conținut exhaustiv, bine împărțit în pași ușor de urmat [CNF-FU-1], dar acest conținut trebuie să fie afișat într-o interfață utilizator intuitivă [CNF-FU-2].

4. PROIECTARE DE DETALIU SI IMPLEMENTARE

4.1 Arhitectura conceptuală[16]

Arhitectura conceptuală reprezintă o modalitate high-level de abstractizare, prin care se poate observa conceptul din spatele aplicației. Conceptul va fi descris în continuare, fiind sprijinit de o diagramă.

Conceptul poate fi descris în următorii pași:

La pornirea aplicației, aceasta verifică dacă există conexiune la internet. Dacă nu există, utilizatorul va fi anunțat printr-un toast.

Conținutul rețetelor, va fi afișat, în ciuda lipsei unei conexiuni, întrucât aplicația are o copie a fișierului rețete.xml, prezent în fișierul assets din Android Studio. Aceasta reprezintă o măsură preventivă, pentru a nu exista niciun obstacol în utilizarea aplicației.

Pozele nu vor fi afișate, întrucât trebuie stabilită o conexiune cu server-ul, unde sunt stocate atât imaginile cât și conținutul rețetelor.

După ce se restabilește o conexiune, imaginile vor fi descărcate pe dispozitiv.

Această modalitate de a păstra o copie a conținutului rețetelor, desigur, este o măsură bună în cazul în care dispozitivul nu se poate sau nu este conectat la internet. Este o soluție bună, dar nu este o soluție în cazul în care se dorește scalarea aplicației. De fiecare dată când se adaugă rețete noi, trebuie făcut un update aplicației, fapt ce ar putea incomoda experiența utilizatorilor.

O soluție rapidă ar fi gruparea rețetelor noi, update-urile fiind făcute doar după ce se ajunge la un număr considerabil de rețete noi. Așadar, în privința scalabilității, se vor urmări posibile soluții pentru viitoare iterații ale aplicației.

Mai jos se poate observa diagrama arhitecturii conceptuale, și funcționalitatea ei la un nivel înalt de abstractizare.

Fig. 4.1 Arhitectura conceptuală a aplicației Rețete

4.2 Nivelul de prezentare (presentation)[17]

Un aspect extrem de important în succesul oricărei aplicații îl reprezintă prezentarea. Funcționalitatea reprezintă doar o parte din succesul unei aplicații. Pentru ca o aplicație să fie de succes, aceasta trebuie să îmbine funcționalul cu design-ul plăcut și intuitiv pentru utilizatori. Acesta este un echilibru dificil de menținut.

4.2.1 Principii de design

Conceptul din spatele design-ului aplicației de rețete se bazează pe următoarele principii:

Simplitate – păstrarea unui mediu în care să domine informația și imaginile, cele doua fiind cele mai importante pentru utilizator

Intuitivitate – navigarea în aplicație trebuie să devină a doua natură pentru utilizator. Trebuie realizată în așa fel încât sunt necesare cunoștințe minime pentru navigare. Acest principiu ajută și în mărirea numărului de utilizatori ai aplicației.

Aspect modern – acest principiu reprezintă un criteriu de judecată instant pentru mulți utilizatori. Întocmai de aceea, un aspect modern devine extrem de necesar și un proces continuu de revitalizare a aplicației.

Acestea sunt principiile luate în considerare pentru realizarea design-ului aplicației. În continuare vor fi prezentate câteva exemple de design (layout) al aplicației

4.2.2 Implementare concretă

Pentru implementarea design-ului, s-a folosit librăria, pinterestlikeview[18]. Acesta este un proiect open-source care caută să imite aspectul aplicației deja existente, Pinterest[19] Proiectul pinterestlikeview nu mai este suportat de către creatori la momentul redactării acestei lucrări.

Fig. 4.2 Screenshot al unei activitati simple pinterestlikeview

În figura de mai sus putem observa aspectul cu mai multe coloane asemănător celui pe care Pinterest îl utilizează în aplicație. Acest design poate fi observat și în figura de mai jos.

Fig. 4.3 Interfața Pinterest

View-ul MultiColumListView este cel care este folosit în aplicația principală pentru a implementa acest tip de afișare cu mai multe coloane. Acest view se folosește în activitatea principală.

Exemple de layout-uri:

Fig. 4.3 fragment_about

Fig. 4.4 fragment_navigation_bar

Fig. 4.5 fragment_single_recipe

Fig. 4.6 list_item_single

4.3 Nivelul de business logic[20]

Business logic reprezintă acea parte a unui program care încapsulează regulile de business din lumea reală care determină cum datele pot fi create, stocate și modificate. Reprezintă un contrast față de restul software-ului care se ocupă cu detalii de nivel mai jos, cum ar fi buna funcționare a unei baze de date sau afișarea interfeței utilizator sau alte componente ale programului.

Implementarea este destul de directă. Pentru o descriere exhaustiva a procesului de realizarea a aplicației, implementarea va fi prezentată pe baza structurii ierarhice a proiectului din Android Studio.

Proiectul conține 3 mari secțiuni:

app

pinterestlikeview

Gradle Scripts

Fiecare secțiune va fi prezentată în detaliu.

4.3.1 app

Folder-ul de app conține cele mai importante fișiere, clase, resurse, layout-uri, design-uri ale aplicației. La rândul său, folder-ul se împarte în următoarele secțiuni:

manifests

java

assets

res

Fiecare secțiune va fi prezentată în detaliu.

4.3.1.1 manifests

În folder-ul Manifests se află fișierul AndroidManifest.xml. Acest fișier conține informații legate de aplicație, precum:

minSdkVersion=”9” – versiunea minimă de SDK acceptată de aplicație (9, adică Android 2.3 Gingerbread)

targetSdkVersion=”27” – versiunea țintă pentru aplicație (27, adică Android Oreo)

4.3.1.2 java

Folder-ul java conține pachetul com.rares.retete, unde sunt grupate clasele aplicației în următoarele foldere:

adapters

fragments

models

network

settings

share

utils

Pe lângă aceste foldere care vor fi detaliate mai jos, com.rares.retete mai conține următoarele clase:

ApplicationContext – Această clasă găzduiește diferite setări pentru parsarea datelor XML

MainActivity – Această clasă reprezintă activitatea principală a aplicației.

ObtainApplicationDataActivity – Această clasă este utilizată pentru a obține fișierul XML fie din URL fie din fișierul local de assets.

4.3.1.2.1 adapters

Folder-ul adapters conține două mari clase:

DrawerListMenuAdapter – Această clasă este un adaptor utilizat pentru meniul listă din stânga.

SingleCategoryListAdapter – Această clasă este un adaptor utilizat pentru un fragment SingleCategory.

4.3.1.2.2 fragments

Folder-ul fragments conține următoarele clase, care vor fi detaliate mai jos:

AboutFragment – Acest fragment conține informații în legătură cu partea de Despre a aplicației.

ImageFragment – Acest fragment conține informații despre imaginile rețetelor.

MainScreenFragment – Această clasă conține informații despre fragmentul necesar ecranului principal.

NavigationBarFragment – Fragment utilizat pentru header-ul ecranului (bara de navigare)

SearchFragment – Fragment pentru funcționalitatea de search

ShopFragment – Fragment pentru partea de ingrediente a rețetei

SingleRecipeCategoryFragment – Fragment pentru lista de rețete

SingleRecipeFragment – Fragment pentru ecranul de rețetă

SplashScreenFragment – Fragment pentru ecranul de Splash

4.3.1.2.3 models

Folder-ul models prezintă modelele structurale de stocare ale aplicației (atributele unei rețete, ce trebuie stocat la fiecare etc.).

Acesta conține următoarele clase:

Category – Model pentru Category

DrawerListMenuItem – Model pentru DrawerListMenuItem

Main Settings – Model pentru setările principale

ParserApplicationSettings – Model pentru setările parsate ale aplicației

Recipe – Model pentru rețetă

RecipeIngredient – Model pentru ingredientul unei rețete

RecipeStep – Model pentru pasul rețetei

RecipeSummary – Model pentru sumarul rețetei

ShoppingCart – Model pentru lista de ingrediente a unei rețete

ShoppingItem – Model pentru un item din lista de ingrediente

4.3.1.2.4 network

Folder-ul network conține o singură clasă, NetworkManager. Această clasă este responsabilă pentru toate operațiile de rețea (primirea datelor de pe server, partajarea rețetelor prin Facebook, E-mail etc.).

4.3.1.2.5 settings

Acest folder conține o singură clasă, AppConstants, în care apar constantele aplicației.

4.3.1.2.6 share

Folder-ul conține o singură clasă, MailManager, care este responsabilă pentru funcționalitatea de email a aplicației.

4.3.1.2.7 utils

Folder-ul de utils conține următoarele clase:

CommonUtils – clasă de utilități pentru operații comune (convertit dp la px, setarea font-ului etc.)

RecipesXMLTagConstants – clasă care conține tag-uri XML constante pentru rețete utilizate pentru parsarea XML (de asemenea și adresa server-ului)

SettingsXMLParser – clasă care conține parser-ul XML utilizat pentru a obține informația furnizată în XML

ShakeDetector – clasă care implementează funcționalitatea de shake a ecranului de ingrediente

4.3.1.3 assets

Folder-ul assets conține 3 fișiere:

recipes_settings.xml – Acest fișier conține datele rețetelor în format XML, cu toate tag-urile aferente.

Roboto_Bold.ttf – Acest fișier conține font-ul RobotoBold

Robo_Thin.ttf – Acest fișier conține font-ul RobotoThin

4.3.1.4 res

Fișierul res conține de regulă resurse necesare aplicației, precum imagini sau string-uri. E o practică bună sa fie păstrate în acest fișier, extern, deoarece acestea pot fi întreținute independent.

Acesta conține următoarele folder-e:

anim

drawable

layout

menu

values

4.3.1.4.1 anim

Folder-ul anim conține fișiere de animație pentru aplicație:

left_slide_in.xml

left_slide_out.xml

right_slide_in.xml

left_slide_out.xml

4.3.1.4.2 drawable

Folder-ul drawable conține toate imaginile de design necesare aplicației (iconițe în format png, funcționalități în xml ale iconițelor).

4.3.1.4.3 layout

Acest folder conține șablonul, schemele aplicației. Acestea conțin placeholder-e (entități care țin locul imaginilor ce le vor popula).

4.3.1.4.4 menu

Folder-ul menu contine fișierul main.xml, care reprezintă fișierul ecranului principal al aplicației.

4.3.1.4.5 values

Acest folder conține următoarele fișiere:

colors.xml – fișier în care sunt stocate culor frecvent folosite în aplicație

dimens – folder care conține imaginile aplicației în diferite rezoluții pentru diferite dispozitive

strings.xml – fișier care conține diferite string-uri, precum numele aplicației, numele categoriilor de rețete

styles – fișiere care definesc stilul aplicației

4.3.2 pinterestlikeview

Folder-ul pinterestlikeview conține elemente de layout și de funcționalitate asemănătoare aplicației Pinterest. Acesta a fost important drept o librărie de proiect. Folder-ul se împarte în mai multe secțiuni:

manifests

java

res

4.3.2.1 manifests

În folder-ul manifests se afla AndroidManifest.xml. Acesta conține informații precum:

minSdkVersion=”8” – versiunea minimă de SDK acceptată de aplicație (8, adică Android 2.2 Froyo)

targetSdkVersion=”15” – versiune țintă pentru aplicație (15, adică Android 4.0.3 Ice Cream Sandwich)

4.3.2.2 java

Folder-ul java conține pachetul com.huewu.pla.lib, unde sunt grupate clase în următoarele foldere:

internal

Pe lângă aceste foldere care vor fi detaliate mai jos, com.huewu.pla.lib mai conține următoarele clase:

MultiColumnListView – implementează un ListView cu mai multe coloane pentru aplicația principală

MultiColumnPullToRefreshListView – o interfață care extinde MultiColumnListView, fiind utilizată pentru evenimente de tip “pullToRefresh”.

4.3.2.2.1 internal

Folder-ul internal conține 4 mari clase, care vor fi detaliate mai jos:

PLA_AbsListView – Clasă de bază care poate fi utilizată la implementarea unei liste virtualizate de item-uri. O listă nu are o definiție spațială în această clasă. De exemplu, sub-clasele acestei clase pot afișa conținutul listei într-un grid, carusel, ca o stivă etc.

PLA_AdapterView – Un AdapterView este un view a cărui copii sunt determinați de un Adapter

PLA_HeaderViewListAdapter – Clasă de bază, care nu se utilizează direct în cod. ListAdapter este un Adapter extins, care este un intermediar între ListView și datele din listă. Acest ListAdapter, în clasa de față, va fi utilizat când un ListView are view-uri de tip header.

PLA_ListView – Clasă care implementează un view care afișează item-uri într-o listă verticală, asupra căreia se poate face scroll. Item-urile vin din ListAdapter-ul asociat cu acest view.

4.3.2.3 res

Fișierul res conține de regulă resurse necesare aplicației, precum imagini sau string-uri. E o practică bună sa fie păstrate în acest fișier, extern, deoarece acestea pot fi întreținute independent.

Acesta conține următoarele:

drawable – Folder-ul drawable conține iconițe în format png.

layout – Folder-ul layout conține șabloanele aplicației

values – Conține elemente precum string-urile necesare, stilurile etc.

4.3.3 Gradle Scripts

Gradle[21] este o unealtă de build open-source care construiește script-uri utilizând Groovy[22] sau Kotlin[23]. Gradle preia automat toate fișierele sursă (.java sau .xml), apoi aplică unealtă potrivită (de exemplu convertește clasele java în fișiere dex), și le grupează pe toate în arhicunoscutul format APK[24]. Aceste script-uri sunt generate automat la compilarea aplicației, deși ele pot fi editate și manual.

Folder-ul Gradle Scripts conține următoarele fișiere:

build.gradle (Project: retete) – Fișier de build top-level unde pot fi adăugate opțiuni de configurare comune pentru toate sub-proiectele/modulele

build.gradle (Module: app) – Fișierul conține denumirea aplicației, dependințe (cum ar fi pinterestlikeview, unelte precum gson)

build.gradle (Module: pinterestlikeview) – Fișierul conține informații precum SDK-ul folosit la compilare (21), versiunea țintă de SDK (21) dar și versiunea uneltelor de build (26.0.2)

gradle-wrapper.properties (Gradle Version) – Gradle Wrapper este un script care invocă o versiune declarată de Gradle, descarcând-o din timp dacă e necesar. Acest script facilitează producția de aplicații prin faptul că programatorii nu trebuie sa dedice timp instalării manuale a Gradle-ului.

settings.gradle (Project Settings) – Fișierul conține o evidență a proiectelor incluse in aplicație (app și pinterestlikeview)

local.properties (SDK location) – Conține locația SDK-ului de pe disc.

4.4 Nivelul de data access[25]

Acest nivel se ocupă cu partea de acces a datelor cu care lucrează un program. Datele pot fi sub forma unei baze de date, sau, precum în cazul acestui proiect, un document cu informații serializabile/de-serializabile.

Proiectul folosește un fișier principal care conține toate rețetele. Acest fișier este de forma XML, cu tag-uri care corespund cu modelele din zona de models din structura aplicației.

Aceste tag-uri sunt:

<Category name> – tag care stabilește tipul de categorie a rețetei

<RecipeInfo> – tag care conține id-ul rețetei și toate celelalte tag-uri aferente rețetei, care vor fi prezentate mai jos

<Recipe Title> – tag care stabilește titlul, numele rețetei

<RecipePictureList> – tag care conține lista cu tag-uri care conține link-uri către pozele rețetei

<RecipePicture> – tag care conține un link către poză

<RecipeSummary> – tag care conține lista cu sumarul rețetei

<RecipeSummaryOrigin> – tag care conține țara de origine a rețetei

<RecipeSummaryPreparationTime> – tag care conține timpul mediu de preparare a ingredientelor rețetei

<RecipeSummaryCookingTime> – tag care conține timpul efectiv de gătire a rețetei

<RecipeSummaryPortions> – tag care conține porțiile rețetei

<RecipeSummaryCalories> – tag care conține caloriile rețetei

<RecipeSummaryDescription> – tag care conține descrierea rețetei

<RecipeIngredientsList> – tag care conține lista de ingrediente a rețetei

<RecipeIngredient> – tag care conține descrierea unui singur ingredient

<RecipeStepsList> – tag care conține lista de pași necesari gătirii rețetei

<RecipeStepName> – tag care conține denumirea pasului

<RecipeStepDescription> – tag care conține descrierea pasului

4.5 Interacțiunea dintre nivele

Interacțiunea dintre nivele reprezintă cel mai important aspect în privința bunei funcționări a aplicației. Pentru o experiență utilizator fluentă, nivelele trebuie să comunice fără interferențe. Mai jos putem observa o schemă high-level a comunicării dintre cele 3 nivele fundamentale (Prezentare, Business Logic și Data Access).

Fig 4.7 Structura aplicației în 3 nivele

5. CONCLUZII

5.1 Realizări

În urma acestui proiect s-a reușit realizarea unei aplicații care îmbină funcționalul cu utilul. Soluția implementată se vrea a fi prezentată într-o formă intuitivă, pentru ca utilizatorii să găsească navigarea prin aplicație ca fiind una facilă, ajungând ușor la opțiunea dorită.

O altă realizare în urma acestui proiect reprezintă aprofundarea cunoștințelor tehnologice și a uneltelor folosite. S-au aprofundat cunoștințele limbajului de programare Java, folosit pentru dezvoltarea Android, cunoștințele mediului de dezvoltare integrat Android Studio dar și a manipulării fișierelor de markup extensibil XML.

5.2 Comparație cu alte produse

Soluția propusă nu reprezintă forma finală, ea urmând a fi îmbunătățită în viitor, după modelul aplicațiilor de succes. Două dintre aceste aplicații, prezente în Google Play Store[26] la momentul redactării acestei lucrări, vor fi prezentate mai jos.

Tabelul 5.1 – Comparatie între Rețete, Yummly, Recipe Keeper și My CookBook

5.3 Dezvoltări ulterioare

În urma analizării pieței, s-a ajuns la concluzia că aplicația care reprezintă subiectul acestei lucrări poate incorpora diverse îmbunătățiri sau caracteristici noi. Acestea reprezintă subiectul unor dezvoltări ulterioare. Mai jos vor fi prezentate câteva caracteristici care vor fi subiectul unor posibile dezvoltări în viitor.

Crearea unei rețete – permiterea utilizatorilor să își creeze propriile lor rețete

Sistem cu bază de date – se va urmări implementarea unui sistem cu bază de date pentru o mai bună scalabilitate a aplicației, dar și pentru a putea implementa un sistem de stocare a conturilor utilizatorilor

Implementarea unui sistem de recenzii – acest sistem va crea o ierarhie de rețete pe baza voturilor utilizatorilor

Sistem de adăugare video – acest sistem va putea permite utilizatorilor să atașeze videoclipuri rețetelor, fapt ce poate facilita expresivitatea pașilor de gătire

Urcarea aplicației pe magazinul virtual de aplicații Google Play Store

Acestea reprezintă doar câteva dintre dezvoltările ulterioare care vor fi luate în considerare în viitor. Ele sunt considerate a fi prioritare în detrimentul altora.

6. BIBLIOGRAFIE

"Yummly Recipes & Shopping List – Apps on Google Play." https://play.google.com/store/apps/details?id=com.yummly.android&hl=en_GB.

"My CookBook (Recipe Manager) – Apps on Google Play." https://play.google.com/store/apps/details?id=fr.cookbook&hl=en_GB.

"Recipe Keeper – Meal planner & shopping list – Apps on Google Play." https://play.google.com/store/apps/details?id=com.tudorspan.recipekeeper&hl=en_GB.

"What is open source software? | Opensource.com." https://opensource.com/resources/what-open-source.

"Android." https://www.android.com/.

"Download Android Studio and SDK Tools | Android Studio." https://developer.android.com/studio/index.html.

"Overview (Java Platform SE 7 ) – Oracle Help Center." https://docs.oracle.com/javase/7/docs/api/.

"000Webhost." https://www.000webhost.com/.

"Marshmallow Android continues to grow timidly, only 0.7% of devices …." https://phoneia.com/marshmallow-android-continues-to-grow-timidly-only-0-7-of-devices-were-updated/.

"Figure 3: Architecture diagram of Android system – ResearchGate." https://www.researchgate.net/figure/Architecture-diagram-of-Android-system_fig1_220299936.

"An Overview of the Android Architecture – Techotopia." https://www.techotopia.com/index.php/An_Overview_of_the_Android_Architecture.

"Linux kernel – Wikipedia." https://en.wikipedia.org/wiki/Linux_kernel.

"XML – Wikipedia." https://en.wikipedia.org/wiki/XML.

"Meet Android Studio | Android Studio …." https://developer.android.com/studio/intro/index.html.

"What is Android SDK? – Definition from Techopedia." https://www.techopedia.com/definition/4220/android-sdk.

"Conceptual Architecture – Bredemeyer Consulting." http://www.bredemeyer.com/ArchitectingProcess/ConceptualArchitecture.htm.

"Multitier architecture – Wikipedia." https://en.wikipedia.org/wiki/Multitier_architecture.

"GitHub – GDG-Korea/PinterestLikeAdapterView: [Deprecated] An …." https://github.com/GDG-Korea/PinterestLikeAdapterView.

"Pinterest – Apps on Google Play." https://play.google.com/store/apps/details?id=com.pinterest&hl=en_US.

"Business Logic Definition – C2 wiki." http://wiki.c2.com/?BusinessLogicDefinition.

"Docs – Gradle." https://gradle.org/docs/.

"Groovy." http://groovy-lang.org/.

"Kotlin." https://kotlinlang.org/.

"Android application package – Wikipedia." https://en.wikipedia.org/wiki/Android_application_package.

"Data access layer – Wikipedia." https://en.wikipedia.org/wiki/Data_access_layer.

"Google Play." https://play.google.com/store?hl=en_GB.

7. ANEXE

7.1 Manual de instalare

Pentru instalarea aplicației, se vor efectua următorii pași:

Conectarea dispozitivului (telefon mobil, tabletă etc.) la calculator (cablu, ftp media server etc.)

Copierea aplicației (cu extensia .apk) pe dispozitivul dorit.

Efectuarea unui click pe iconița aplicației.

Acceptarea instalării aplicațiilor provenite din surse necunoscute

Lansarea aplicației.

7.2 Manual de utilizare

Fig. 7.1 Ecranul Principal

Meniu Principal

Categorie de Rețete

Căutare

Filtrare după origine

7.2.1 Meniu Principal

Accesarea unui element din listă va duce la ecranul respectiv, care va fi populat cu elementele aferente.

Fig. 7.2 Meniul aplicației

7.2.2 Categorie de Rețete

Fiecare categorie va afișa rețetele aferente, într-o listă, de unde puteți naviga la detaliile acelei rețete.

Fig. 7.3 Ecranul categoriei “Antreuri” și ecranul unei rețete

Lista de ingrediente

Pe Scurt

Ingrediente

Rețeta

7.2.2.1 Lista de ingrediente

Fig. 7.4 Ecranul listei cu ingrediente a unei rețete

Refresh – resetează ecranul, repunând ingredientele în starea lor inițială

Tăiere – efectuând click pe un ingredient, acesta va fi “tăiat” de pe listă. Dacă utilizatorul “scutură” dispozitivul, punând în funcțiune accelerometrul, ingredientele “tăiate” vor dispărea de pe ecran

7.2.3 Căutare

Fig. 7.5 Funcționalitatea bării de căutare

Efectuând click pe “Go” sau “Enter” pe tastatură, utilizatorului îi va fi prezentată o listă cu rețete bazate pe cuvintele introduse.

7.2.4 Filtrare dupa origine

Fig. 7.6 Filtrare după origine

Utilizatorul poate selecta o țară de origine, după care i se va afișa o listă cu rețetele aferente acelei regiuni.

Similar Posts