título del proyectojtomas/android/proyectos2017/carshare.pdfproyecto: carshare app alumno: abuin...
TRANSCRIPT
TítulodelProyecto:
CarShareApp
Autor:
AbuinYepes,Alex
Director:
TomásGironés,Jesús
TESINAPARALAOBTENCIÓNDELTÍTULODE:
DiplomadeEspecializaciónenDesarrollodeAplicacionesparaAndroid
Septiembredel2017
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
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.
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.
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
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
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).
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
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
Proyecto:CarShareAppAlumno:AbuinYepes,Alex
DiplomadeEspecializaciónenDesarrollodeAplicacionesparaAndroid 10
Proyecto:CarShareAppAlumno:AbuinYepes,Alex
DiplomadeEspecializaciónenDesarrollodeAplicacionesparaAndroid 11
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