título del proyectojtomas/android/proyectos2017/carshare.pdfproyecto: carshare app alumno: abuin...

12
Título del Proyecto: CarShare App Autor: Abuin Yepes, Alex Director: Tomás Gironés, Jesús TESINA PARA LA OBTENCIÓN DEL TÍTULO DE: Diploma de Especialización en Desarrollo de Aplicaciones para Android Septiembre del 2017

Upload: others

Post on 01-Mar-2021

0 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Título del Proyectojtomas/android/Proyectos2017/CarShare.pdfProyecto: CarShare App Alumno: Abuin Yepes, Alex Diploma de Especialización en Desarrollo de Aplicaciones para Android

TítulodelProyecto:

CarShareApp

Autor:

AbuinYepes,Alex

Director:

TomásGironés,Jesús

TESINAPARALAOBTENCIÓNDELTÍTULODE:

DiplomadeEspecializaciónenDesarrollodeAplicacionesparaAndroid

Septiembredel2017

Page 2: Título del Proyectojtomas/android/Proyectos2017/CarShare.pdfProyecto: CarShare App Alumno: Abuin Yepes, Alex Diploma de Especialización en Desarrollo de Aplicaciones para Android

Proyecto:tituloAlumno:nombre

DiplomadeEspecializaciónenDesarrollodeAplicacionesparaAndroid 2

Contenido

Introducción..................................................................................................................................3

Descripcióndelproblema.........................................................................................................3

Objetivos...................................................................................................................................3

Motivación................................................................................................................................3

Situaciónde…/Tecnologíasutilizadas.........................................................................................4

Arquitecturadelaaplicación........................................................................................................4

Vistasynavegación...................................................................................................................4

Registroeinicio.....................................................................................................................4

Pantallaprincipal..................................................................................................................5

Perfildeusuario....................................................................................................................5

Usuariosyamigos.................................................................................................................6

Gruposdeusuarios...............................................................................................................7

Lógicadenegocio......................................................................................................................8

Modelodedatos.......................................................................................................................9

Conclusiones...............................................................................................................................12

Elcódigodelaaplicaciónydelassiguientesversionesseencuentrayseencontraráenlasiguientedirección:http://www.github.com/alexlesaka/carshare........................................12

Page 3: Título del Proyectojtomas/android/Proyectos2017/CarShare.pdfProyecto: CarShare App Alumno: Abuin Yepes, Alex Diploma de Especialización en Desarrollo de Aplicaciones para Android

Proyecto:CarShareAppAlumno:AbuinYepes,Alex

DiplomadeEspecializaciónenDesarrollodeAplicacionesparaAndroid 3

Introducción

DescripcióndelproblemaCompartircocheesalgoquecadavezsedamásendiferentesámbitos:compañerosdetrabajo,padresymadresparallevaralosniñosalaescuela,gruposdemúsicaaliralasactuaciones,equiposdefutbolparairalospartidos,etc.

Cuandonosonmuchoslosviajesnosuelehabermayorproblemadadoquealencargadodellevarelcochelepuedenoimportarhacerlo,peroamedidaquevaincrementandoelnúmerodetrayectossurgenvariosproblemas:implicaciónirregulardeloscompañeros,problemasdeplanificación,malentendidosyproblemasdecomunicación,etc.

LaaplicaciónCarSharetratadedarsoluciónaesassituacionesencargándosedemonitorizarcuántasveceshallevadoelcochecadausuariodelgrupo,asícomoplanificarlosviajes.

ObjetivosLosprincipalesobjetivosdelproyectosonlossiguientes:

- DiseñareimplementarunaAppenAndroidNativoquegestioneuncochecompartido.- AplicarlosconocimientosadquiridosduranteelDiplomadeEspecializaciónen

DesarrollodeAplicacionesparaAndroid.- Realizarpruebasrealesenentornocercanoymejorarlaaplicaciónteniendoencuenta

elfeedbackrecibió.

MotivaciónSontreslasrazonesporlasquesedecidiórealizaréstaaplicaciónynootra.Laprimeraesobvia,paraterminareldiplomadeespecializaciónhabíaquerealizarunproyectomostrandoloaprendidoenlasdiferentesasignaturas.

Lasegundaideaaremarcaresquesetomóladecisióndequefueraunaaplicaciónútil,dejandoalladoaplicacionesexperimentalesparasolucionarproblemassimulados.Actualmentecompartococheparairatrabajaryfacilitaresagestiónpodíatomarsecomounreto.

Porúltimo,sonmuchaslascampañasquesehacenparareducirlacontaminación,animandoalagenteausartransportepúblicoocochescompartidos.CarShareestácompletamentealineadaconesafilosofíayayudaenlagestiónparaqueseconviertaenunarealidad.

Page 4: Título del Proyectojtomas/android/Proyectos2017/CarShare.pdfProyecto: CarShare App Alumno: Abuin Yepes, Alex Diploma de Especialización en Desarrollo de Aplicaciones para Android

Proyecto:CarShareAppAlumno:AbuinYepes,Alex

DiplomadeEspecializaciónenDesarrollodeAplicacionesparaAndroid 4

Situaciónde…/Tecnologíasutilizadas

NosehahechousodeningunatecnologíanoincluidaenelDiploma:ellenguajedeprogramaciónhasidoAndroid;eldesarrollosehallevadoacabohaciendousodeAndroidStudio;elalmacenamientoylagestióndelloginserealizamedianteFirebase;elcontroldeversionesyalmacenamientodelcódigoseharealizadoconGitHub.

Arquitecturadelaaplicación

Esteapartadotratadedescribirlaarquitecturayestructuradelaaplicación.Éstesepodríasepararen3partesdiferenciadas:lasvistas(activities,fragmentsyadapters),loscontroladoresylosdatos.

VistasynavegaciónLasvistas,apartedemostrarlapartegráficadelaAppsonlasencargadasdelimitarlosdiferentescaminosquesepuedentomaralusarlaaplicación.Enesteapartadosedescribelanavegaciónquesepuederealizarenestaaplicación,apartededescribirlaspartesmáscaracterísticasdelaspantallasmásimportantes.

RegistroeinicioAlabrirlaaplicación,éstacompruebasielusuariotieneunasesiónabiertaotodavíanolohahecho(LoginActivity).Enelcasodetenerla,sepasaalaactividadprincipal(MainActivity)descritaenelsiguientesub-apartado.Encambiositodavíaelusuarionosehaidentificado,semuestranenlapantallalasdiferentesopcionesparahacerlo:Twitter,Facebook,Google+ynuevo“usuario/contraseña”.

Despuésdeabrirsesión,unavezmáslanavegaciónpuedecoger2caminos.Sinoesunusuarionuevosepasaalaactividadprincipal,perosiloes,tendráqueintroducirunusernameparaquelosdemásusuariospuedanbuscarloycontactarconél(UsernameActivity).Sehadecididoincorporarestaposibilidadparanoforzaralosusuariosamostrarsuverdaderonombreoemailpersonal(recibidodesdeelprocesodeautentificación).Paraelloseharealizadounavistapersonalizadaqueseencargadecomprobarsielnombredeusuarioesválido:mientrasestárealizandolaconsulta,semuestraunaprogress_barysilarespuestaesafirmativasemuestraenpantallaelbotóndecrearusuario.Enelcasocontrario,seindicaqueelnombredeusuarionoesválido.Unavezelegidounnombredeusuarioválidosellegaalaactividadprincipal.

Page 5: Título del Proyectojtomas/android/Proyectos2017/CarShare.pdfProyecto: CarShare App Alumno: Abuin Yepes, Alex Diploma de Especialización en Desarrollo de Aplicaciones para Android

Proyecto:CarShareAppAlumno:AbuinYepes,Alex

DiplomadeEspecializaciónenDesarrollodeAplicacionesparaAndroid 5

PantallaprincipalUnavezenlaactividadprincipal(MainActivity),elusuarioseencuentraconunainterfazconvariaszonas:enlazonaprincipalsepresentanlosgruposenlosqueelusuarioestáparticipando,debajodeunbotónflotantequedalaposibilidaddecrearungruponuevo;enlabarrasuperiorsemuestrandosiconos,paraaccederalaspeticionesdeamistadpendientesyalasnotificaciones(disponibleenfuturasversiones);porúltimosecuentaconunmenúlateral(navigationdrawer).

Enlossiguientessub-apartadosdedescribencadaunadelasfuncionalidadesorganizadasportemática.

PerfildeusuarioEnlapartesuperiordelnavigationdrawerpresentadoenlaactividadprincipalsepuedecontemplarlaimagen,nombreyusernamedelusuarioidentificadodelaaplicación.Alclicar

Page 6: Título del Proyectojtomas/android/Proyectos2017/CarShare.pdfProyecto: CarShare App Alumno: Abuin Yepes, Alex Diploma de Especialización en Desarrollo de Aplicaciones para Android

Proyecto:CarShareAppAlumno:AbuinYepes,Alex

DiplomadeEspecializaciónenDesarrollodeAplicacionesparaAndroid 6

encualquieradelostreselementosseiniciaunanuevapantalla(UserActivity)mostrandolosdatosdedichousuario.Enestecasosemuestraelemailapartedelosdatosantesmencionados,aunquesepodríanincorporarmásdatosenelfuturo.Alclicarenelbotón“editar”seiniciaunanuevapantallaenelqueelusuariotienelaposibilidaddecambiarelnombrequesemuestrayelemail.Delamismamanera,sepodríaincorporarlaposibilidaddeeditarotroscampos.

UsuariosyamigosDesdeelnavigationdrawerdelaactividadprincipalsepuedenrealizarvariasaccionesrelativasalaamistadentreusuarios.Siseclicaen“Bucaramigos”semuestraunalistadetodoslosusuariosdelaaplicación.Larazóndeelloespoderbuscaralosconocidoscontaldeagregarloscomoamigos(lafuncióndebúsquedaseincorporaráenversionesfuturas).Lalistadeusuariossemuestradediferentemanera,siendolaimagen,elnombreyelnombredeusuariocomúnentodosloscasos:elpropiousuarionomuestraningúnelementomás;losamigosvanacompañadosdeunletreroquelopone;losusuariosalosqueselehaenviadounapeticióndeamistadaparecenconuntextoqueloindica;porúltimolosusuariosquelehanenviadounapeticióndeamistadalusuariodelaaplicaciónvanacompañadosdebotonesde“aceptar”y“rechazar”.

LaclaseencargadadehacerestaadaptaciónqueacabadesermencionadaesUserFirebaseAdapter.

Delamismamanera,accediendoalasegundaopcióndelmenúlateral“Amigos”semuestranlosamigosdelusuario.Estoserealizahaciendousodelamismaclasesolocambiandoelorigendelosdatos.

Porúltimorespectoalosusuariosylaamistadestánlas“Peticionesdeamistad”.Aesteapartadosepuedeaccedertantodelmenúlateralcomodelabarrasuperiordelaactividadprincipal.Enellasemuestranlaspeticionesdeamistadquenohanrecibidorespuestaporel

Page 7: Título del Proyectojtomas/android/Proyectos2017/CarShare.pdfProyecto: CarShare App Alumno: Abuin Yepes, Alex Diploma de Especialización en Desarrollo de Aplicaciones para Android

Proyecto:CarShareAppAlumno:AbuinYepes,Alex

DiplomadeEspecializaciónenDesarrollodeAplicacionesparaAndroid 7

usuarioactual.LaadaptacióndelosdatosyelcómputodelarespuestasehacemediantelaclaseFriendshipRequestFirebaseAdapter.

GruposdeusuariosComosehamencionadoanteriormenteenlapantallaprincipalsemuestraunalistadelosgruposyunbotónflotanteparacrearunonuevo.PulsandoenésteúltimobotónseiniciaunprocesodedospasosenmododeFragments(CreateGroupUserListFragmentyCreateGroupNameFragment)coordinadosporlaactividadCreateEventActivity.Enelprimerosemuestraunalistadelosamigosdelusuarioydalaopcióndeseleccionarlosparaqueentrenenelgrupo.Unavezelegidoalosamigos,sepasaalasiguientefaseparaelegirelnombredelgrupo.Unavezfinalizadoelproceso,secreaelgrupoysevuelvealaactividadprincipal.

AlpulsarenunodelosgruposdelalistamostradaenlaactividadprincipalseabreGroupActivitymostrandotodoloreferentealgruposeparadoen4pestañas:Rankingdeusuarios(GroupTabRankingFragment),listadodeeventos(GroupTabEventsFragment,listademiembrosdelgrupo(GroupTabMembersFragment)yunchat(GroupTabChatFragment).

Page 8: Título del Proyectojtomas/android/Proyectos2017/CarShare.pdfProyecto: CarShare App Alumno: Abuin Yepes, Alex Diploma de Especialización en Desarrollo de Aplicaciones para Android

Proyecto:CarShareAppAlumno:AbuinYepes,Alex

DiplomadeEspecializaciónenDesarrollodeAplicacionesparaAndroid 8

Enelprimeroaparecelalistademiembrosconelnúmerodeviajesenlosquehallevadoelcocheordenadosdemásamenos.Deesamanerasepuedeverquiéneslapersonaquemáshallevadoelcoche.Enlasegundapestañaaparecendoselementosprincipales:unbotónflotanteparacrearunnuevoeventoyenelfodounalistadeeventos.

Empezandoporelbotónflotante,seabreunapantallaparacrearunevento(CreateEventActivity)enelquesepidenlosdatosnecesarioscomonombredelviaje,origen,destino,fecha,hora.Despuéssepidequeseseleccionequiéneselusuarioquetieneasignadoeseviajecomoresponsabledecoche(planeadooyarealizado).Paraelloseabreunalistadeusuariosseleccionablessiendotodosestosmiembrosdelgrupo(SelectMemberActivity).

Paraterminarconlasegundapestaña,enlalistadeeventossedalaposibilidaddeeditarlosusuarios“planeadopara”y“realizadopor”.Cambiandoelúltimocampomencionado,seactualizaelmarcadormostradoenlaprimerapestaña.

Enelsiguienteapartadosemuestralalistademiembrosdelgrupomostrandoelroldecadauno(“admin”elcreadory“member”elresto)ymedianteunbotónflotanteseofrecelaposibilidaddeañadirunmiembroalgrupodelamismamaneraqueserealizaenelprocesodecreacióndegrupo.

Posúltimo,enlacuartapestañasemuestraunapantalladechatenelquelosusuariossepuedenenviarmensajes.Ensiguientesversionessecompletaraesteapartadoincluyendonotificacionesdelsistema.

LógicadenegocioDespuésdehaberdescritolasvistasydejandolosdatosaunlado,enesteapartadosepresentanlasclasesmásimportantessituadasenmediodeestaspertenecientesalalógicadenegocio.Elcometidodeestasesrealizarlastransformacionesnecesariasdelosdatosrecibidosparaqueseandebidamentemostradas.Estasclasesestánrelacionadasdelasiguientemanera:

LaclaseMainControllerextiendelaclaseApplicationcontaldetenerelaccesoatodalaestructuradesdecualquierpuntodelproyecto.Elúnicocometidodeestaclaseesredirigirlas

Page 9: Título del Proyectojtomas/android/Proyectos2017/CarShare.pdfProyecto: CarShare App Alumno: Abuin Yepes, Alex Diploma de Especialización en Desarrollo de Aplicaciones para Android

Proyecto:CarShareAppAlumno:AbuinYepes,Alex

DiplomadeEspecializaciónenDesarrollodeAplicacionesparaAndroid 9

peticionesqueselehacenalalógica.Seplantealasiguienteseparacióndeclasesparatenerlasfuncionesylaspeticionesdedatosordenados:

- ImageController:estaclaseproporcionalaestructuraparacargarunaimagen.- LoginController:eslaclaseencargadadeproporcionarlosdatosrelativosalusuario

actual.Apartededatosdeéste,sepuedeconsultarsilasesióndeusuarioestáabiertaosepuedenactualizarloscamposeditables(nombreparamostraryemail).

o FriendshipController:estaclaseeslaencargadadecontrolarlaamistadrespectoalusuarioactual(esaeslarazónporlaqueseaccededesdeelLoginController).

- UserController:eslaclaseencargadadeobtenerlainformacióndecualquierusuario.- GroupController:seencargadecentralizartodaslasfuncionalidadesposiblesrelativas

alosgrupos.

Estasclasesestánapoyadasporunasclases-modelodefinidascontaldecrearunaestructuradedatosapropiadaparamostrarenpantalla.Éstossonlossiguientes:ChatMessage,Event,GroupListItem,Member,Repetition,User,UserListItem

ModelodedatosLosdatossehanalmacenadoenunabasededatosfirebase.Éstaestáorganizadaen4nodosprincipales:

- Authentification:enesteserelacionanelUIDrecibidoporelloginconelusernameelegidoporelusuario.Tambiénserecogeinformaciónprivadadelusuario(nomostradaaotrosenpúblico)comoelemail,elmétododeloginolafechaderegistro.

- Username:enestenodoseguardanlosdatospúblicosdelosusuarios:nombre,usernameyimagenprincipal.Apartedeellosemuestraellistadodegruposalqueperteneceelusuarioyunlistadodeamigos.Éstaúltimaesparalela:siemprequeelusuarioAesamigodelusuarioB,BloesdeA,yasíserecogeeldato.

- FriendshipRequests:enestenodosealmacenanlaspeticionesdeamistadteniendocomoiddelnodoelusernameemisoryteniendocomovalordelhijoelusernamereceptor.Sielusuarioreceptoracepta,losdospasaránalalistadeamigosdelotro.Encambiosilarespuestaesnegativaseeliminarálapeticióndeamistad.

- Group:enestenodosealmacenatodolorelativoalosgrupo.Datoscomocreadordelgrupo,fechadecreaciónynombrevanacompañadosdelossiguientesnodos:

o Members:informacióndelosmiembrosdelgrupoo Events:eventosdelgrupoo ChatMessage:mensajesdelchatdegrupo

Page 10: Título del Proyectojtomas/android/Proyectos2017/CarShare.pdfProyecto: CarShare App Alumno: Abuin Yepes, Alex Diploma de Especialización en Desarrollo de Aplicaciones para Android

Proyecto:CarShareAppAlumno:AbuinYepes,Alex

DiplomadeEspecializaciónenDesarrollodeAplicacionesparaAndroid 10

Page 11: Título del Proyectojtomas/android/Proyectos2017/CarShare.pdfProyecto: CarShare App Alumno: Abuin Yepes, Alex Diploma de Especialización en Desarrollo de Aplicaciones para Android

Proyecto:CarShareAppAlumno:AbuinYepes,Alex

DiplomadeEspecializaciónenDesarrollodeAplicacionesparaAndroid 11

Page 12: Título del Proyectojtomas/android/Proyectos2017/CarShare.pdfProyecto: CarShare App Alumno: Abuin Yepes, Alex Diploma de Especialización en Desarrollo de Aplicaciones para Android

Proyecto:CarShareAppAlumno:AbuinYepes,Alex

DiplomadeEspecializaciónenDesarrollodeAplicacionesparaAndroid 12

Conclusiones

Elresultadodelaaplicaciónhasidomuysatisfactorio,teniendoclaroquemuchosaspectoshanquedadosincubrir.Ademásnosehapodidodedicarmuchotiempoadocumentareltrabajo.

Seplanteanlassiguientesmejorasparaversionesfuturas,yaquehayvoluntaddeseguirconelproyecto:

- Facilitarlacreacióndeeventosrepetitivos.- Ediciónyeliminacióndeelementoscomogruposoeventos(apartedelosusuarios

planeadosy“realizados”).- BuscadordeusuariosenlalistadeBuscarAmigosydelimitarelnúmeroderesultados.- Sistemadenotificaciones:tantoparaelchatcomoparaavisarcambios.- Gestióndedisponibilidadyplanificaciónautomática.

Elcódigodelaaplicaciónydelassiguientesversionesseencuentrayseencontraráenlasiguientedirección:http://www.github.com/alexlesaka/carshare