Proyecto Android Presentar s8
Proyecto Android Presentar s8
INTEGRANTES:
MÓVILES
(orcid.org/000-0002-4708-610X)
LIMA
2021
CONTENIDO
1 INTRODUCCIÓN 6
4. INFRAESTRUCTURA 14
ELEMENTOS HARDWARE 14
ELEMENTOS SOFTWARE. 15
5. DOCUMENTACIÓN 19
SISTEMA OPERATIVO: ANDROID 19
REQUERIMIENTO FUNCIONALES 21
5.1.1 DESCRIPCIÓN BÁSICA 21
5.1.2 SEGURIDAD 22
REQUERIMIENTO NO FUNCIONALES 23
5.1.3 DISPONIBILIDAD 23
5.1.4 INTERFAZ GRÁFICA 23
CASOS DE USO. 23
DISENO TECNICO 28
5.1.5 ARQUITECTURA DEL SERVICIO 30
5.1.6 ARQUITECTURA FÍSICA 31
5.1.7 ARQUITECTURA LOGIC A 31
5.1.7.1 CAPA DE PRESENTACIÓN 33
5.5.6.2.9 CHAT. 44
5.5.6.2.11 COMPARTIR. 45
6. IMPLEMENTACIÓN. 45
PREMISAS Y JUSTIFICACIÓN 45
6.1.1 COMENTARIOS EN EL CÓDIGO 47
IMPLEMENTACIÓN DE LA APLICACIÓN MÓVIL. 47
6.1.2 ÁRBOL DEL PROYECTO 48
6.5 HERRAMIENTAS DE TERCEROS S2
6.3.1 GOOGLE FIREBASE S3
6.3.1.1 FIREBASE AUTHENTICATION S4
6.3.1.2 FIREBASE DATABASE SS
6.3.2 HOSTINGER SS
CONCLUSIONES Y MEJORAS.
8: BIBLIOGRAFÍA
INTRODUCCIÓN
Debido a la rápida implementación y desarrollo de las plataformas móviles, la programación para
aplicaciones móviles ha pasado rápidamente de un nuevo conocimiento a una necesidad para brindar
soluciones a las necesidades de los ciudadanos. Teniendo esto en cuenta, los dispositivos móviles se
están convirtiendo en un canal de comunicación directo entre servicios y usuarios, de acuerdo con esta
idea, la aparición de aplicaciones ha cambiado por completo, así como también el mercado de las
tecnologías de la información y la comunicación (TIC), contribuyendo así a la creación de empleo.
Un claro ejemplo que nos motiva a crear nuestro proyecto es el caso de Uber que ofrece servicio
donde el desarrollo de este proyecto se basa en un caso muy especial que es en la aplicación de Uber
que ofrece servicios de taxi, y el gran rival que tenía en este mercado de las aplicaciones móviles era
Timbrit que también realizaba los mismo performans, ante esta competencia Timbrit que es una
aplicación móvil que también era para ofrecer servicios ya estaba realizando investigaciones sobre
economías emergentes y trataron de apostaron todo por la tecnología para lograr una gran
competencia en este tipo de mercado. Según Uber, la comunicación directa entre oferta y demanda es
más de un millón de viajes que se realizan con esta aplicación todos los días. Según datos de
diciembre de 2017, Uber está presente en más de 50 países y 250 ciudades de todo el mundo, y realizó
un total de 140 millones de viajes ese año. Aquí podemos mostrar los resultados que se pueden
obtener si se realiza una correcta investigación donde se prioriza la comunicación de la oferta y la
demanda. De igual forma, Timbrit también ha experimentado un crecimiento significativo en los
últimos dos años, pasando de 100 usuarios a 100 usuarios. 1000 usuarios ("Forbes" 2017)
Con el contenido anterior mencionado podemos preguntarnos ¿cómo podemos comunicarnos directa e
indirectamente a las necesidades que afronta nuestro país y usuarios que deseen algún tipo de servicio
o prestar sus servicios en tiempos de codiv-2019, de desempleo que afecta a la economía y en la
población en general y también cómo podemos reducir la brecha de la desigualdad por medio de la
tecnología? Ahora bien, tener que pasar de dispositivos con software prediseñado, a equipos que se
pueden personalizar de acuerdo con las necesidades y gustos de cada usuario, significó dar un poder
sin precedentes atomizar la oferta y demanda de servicios, además de que el gobierno incentive el uso
de la tecnología y fomente la creación de empresas sostenibles.
Del anteriormente comentado, se busca crear una aplicación móvil enfocada a las nuevas tendencias
tecnológicas, esta aplicación va brindar servicios técnicos en computación, que facilita la adquisición
de servicios técnicos en computación tanto software como Hardware, que genera la posibilidad de
ofrecer servicios provenientes de técnicos desempleados o con empleo.
El alcance del desarrollo de este proyecto partió de la idea de los estudiantes de la universidad césar
vallejo, eligiendo al distrito de San Juan de Lurigancho como el sitio inicial para las pruebas del
prototipo, debido al mayor porcentaje de demanda sobre la oferta de contratación de técnicos en
computación. El sistema operativo que se va usar para el prototipo de la aplicación móvil parte del
estudio se eligió el sistema operativo Android por su gran versatilidad que puede instalarse en todos
los dispositivos tecnológicos tanto de última generación y la mínima generación que no solo de adapta
o en celulares sino también en portátiles; siendo un sistema operativo que puede adaptarse sin
problemas a diferentes necesidades de los usuarios.
La metodología usada se basa en la metodología RUP que “Es un desarrollo de ingeniería de software
que facilita un planeamiento que permite ofrecer labores y compromisos dentro de una determinada
estructura de desarrollo, teniendo como objetivo asegurar que la realización del software sea de
prominente índole y así satisfacer los requerimientos de los usuarios, dentro de un límite de tiempo y
presupuesto previsto” (López y Pech, 2016, p.6).
En la actualidad donde vivimos en tiempos de pandemia del covid-2019 no ha hecho que busquemos
cómo relacionarnos con distintos usuarios a nivel mundial y nacional con la mano de la tecnología que
siempre nos ha hecho útil para los quehaceres de dia a dia cambiando nuestros hábitos que ha
generado una gran demanda de los servicios que comentaremos, y que servicios son los más
solicitados en estos tiempos de pandemia pues los servicios de técnico de computación, en los inicios
del mes de marzo del 2019 donde llega el covid-2019 a nuestro territorio donde todo el mundo tenía
que guardarse en casa dictada por el gobierno del Perú se pudo reflejar que en los meses de junio-julio
cuando comenzó las clases virtuales donde no todos estamos preparados para iniciar las clases de esta
magnitud donde no todos contaban con una computadora, laptop, Tablet e Internet.
Así como también no debemos de olvidar que hoy en día el desempleo está por encima de factores
normales para los usuarios técnicos de a pie que otorgaban sus servicios a nivel nacional, distrital en
hogares y en empresas.
La gran demanda que existe actualmente de los clientes y falta conocimiento de usuario en el campo
de la computación se ha generado una gran brecha entre el usuario técnico - cliente esto quizá por falta
de tiempo por labores del teletrabajo que surge inmediatamente un técnico de computación que
solucione los altercados que ocurre en últimos instantes.
Ante esto los alumnos de Universidad César Vallejo del séptimo ciclo va implementar un aplicativo
móvil para que los usuarios con experiencia óptima y certificada puedan ofrecer sus servicios a través
del aplicativo móvil que se ha observado una gran demanda que hay de los clientes que desean
solucionar los problemas que puedan ocurrir en su computadora personal por muchas causas y lo
definimos como:
● Tiempo
● Salud
● Falta de conocimiento
● Covid-2019
● Falta de confianza hacia los técnicos
● Falta de herramientas óptimos
● Temor estropear la computadora personal
● Miedo al ser estafado
Por estas causas mencionadas es por donde surge la gran demanda de los clientes que necesitan de
manera urgente estos tipos de servicio donde el usuario técnico deberá ingresar sus datos personales,
experiencias y labores de igual similitud con pruebas que van a poder observar el lado de los clientes.
Así mismo la prueba de COVID si es necesario ya dependería del cliente que será quien decida con
qué tipo de técnico va interactuar y para esto también el cliente va tener una expectativa del mérito
donde se pueda observar la calificación de los usuarios técnicos y según a la calificación, el usuario
pueda adquirir de los servicios del usuario técnico entonces de acuerdo con el problema expuesto
planteamos la siguiente pregunta:
¿Cómo puede generar servicios el usuario técnico en tiempos de pandemia?
2.2. OBJETIVOS DEL PROYECTO
FUNCIONALIDAD
Android Studio:
teclado
Windows 10 Es para usar funciones básicas para la administración de nuestros archivos creados
Android Studio 10 Es para poder desarrollar nuestra aplicación con las herramientas adecuadas (Librerías,
Api, Framework,) lenguaje Java
firebase vamos almacenar la información de todos los clientes y técnicos en una base de datos
Meet Nos sirve para nuestras reuniones en la web para acabar nuestro proyecto
Balsamiq Nos sirve para desarrollar una maquetación tanto móvil como web
DOCUMENTACIÓN
SISTEMA OPERATIVO: ANDROID
¿Qué es Android?
Según Muñoz (2020, pág. 1) indica que “Android es un sistema operativo para
diferentes teléfonos, tablets, teléfonos, relojes, televisores, automóviles y otros que
hoy en día están o han pasado por el mercado”
Origen
Anteriormente de este sistema operativo, una empresa Android INC, con ayuda de G
de Alphabet, estaban trabajando en un sistema de reproductores de video.
Este proyecto impresionó a la empresa gran G, es por eso que el año 2005 decidió
comprar la compañía y dirigió su objetivo a dispositivos táctiles, con el único
objetivo de igualar a Apple, el actualmente conocido iPhone. Convocó a diversas
empresas de hardware y telecomunicaciones, fundaron la Open Handset Alliance.
Es así que, en octubre del 2008, sale al mercado la primera versión de Android, con
el equipo inteligente: HTC Dream.
R3 El sistema debe permitir iniciar sesión con el correo Cus INICIAR SESIÓN TÉCNICO
electrónico y contraseña que ha sido registrado para 003
los ingresos definidos. Si el usuario detalla mal el
ingresó al inicio de sesión automáticamente se
mostrará un mensaje usuario invalido.
R4 El sistema permitirá editar perfil después de iniciar Cus EDITAR PERFIL TÉCNICO
sesión donde el técnico podrá ingresar todos los 004
datos requeridos detalladamente en el sistema para
que el cliente tenga acceso a toda su experiencia
bibliográfica (nombre, ciudad, distrito, experiencia y
enlaces de contacto). Toda la información detallada
del técnico será guardada en una base de datos.
R5 El sistema permitirá que el cliente tenga un acceso Cus LISTA DE TÉCNICO CLIENTE
libre al aplicativo donde podrá visualizar un listado 005
de técnicos. El cliente podrá realizar una búsqueda
en el listado y escogerá los más conveniente y
adecuado técnico y ponerse en contacto.
R6 El sistema permitirá mostrar detalles del técnico Cus DETALLE DEL CLIENTE
como el foto de perfil y contará con un icono (LIKE) 006 TÉCNICO
para que el cliente pueda calificar al técnico y
centenera todo su bibliografía y enlaces de contacto
(Facebook, WhatsApp, Instagram, ubicación) de este
modo también se podrá visualizar un slider de
imágenes de su trabajo realizado.
● Almacenar la información de todos los usuarios en una base de datos para evitar
las alteraciones de los datos registrados.
● La información personal sólo se mostrará al usuario(propietarios)
● La modificación de datos personales lo realizará únicamente el usuario que ya
está registrado
REQUERIMIENTOS NO FUNCIONALES
-Número de usuarios
permitidos
-Modificación solo
administradores
-Facilidad de pruebas
DISEÑO TECNICO
En la arquitectura de servicio se utilizará los servicios web y el server que siempre están
disponibles para recibir peticiones de los usuarios y puedan ser procesadas mediante
peticiones mastranto las respuestas. El servidor puede procesar cantidades de peticiones,
pero también almacenará los datos ingresados de los usuarios en grandes cantidades. El
WEB SERVICES retornara la petición del cliente mediante un URL mostrando a los
clientes listados o la información que contiene de los usuarios lo cual el cliente accede a
una meta data de toda la información que contiene el App.
ARQUITECTURA FÍSICA
ARQUITECTURA LÓGICA
CAPAS
Android es un soporte para dispositivos móviles que contiene un acumulador de
software, donde incluye sistemas operativos, middleware básico para el usuario.
A continuación, se dará una visión global de capas cada una de estas capas usan
servicios ofrecidos por las anteriores y ofrece a los suyos propios a las capas de niveles
superior
Núcleo Linux: Android utiliza el núcleo de Linux 2.6 como una capa de abstracción
para el hardware en los dispositivos móviles. Esta compara cualquier componente
hardware pueda ser llamado mediante las llamadas correspondientes. Siempre que un
fabricante incluye un nuevo elemento de hardware, para esto primero se debe realizar es
crear las librerías dentro del driver del kernel de Linux en el propio Android que
también se encarga de gestionar los diferentes recursos del teléfono (energía, memoria,
etc.) en el proceso de la comunicación
PANTAL LA PRINCIPAL
se muestra la pantalla de inicio para los usuarios (login) la página principal contiene de
un correo electrónico y contraseña para poder ingresar o DE este modo también
contiene (REGISTRARSE AQUÍ) para que puedan registrarse los usuarios nuevos
DIAGRAMA DE SECUENCIA
TÉCNICOS
CLIENTE
PROTOTIPO
BOCETO
Ventana Principal:
Definición: Se mostrará 2 botones principales los cuales direccionará a
las ventanas de Inicio de Sesión y Búsqueda de Técnicos.
N° Nombre Descripción
2
Ventana de Búsqueda de Técnicos:
Definición: Muestra todos los técnicos disponibles y su información
relevante.
N° Nombre Descripción
5
Ventana de Visualización, contacto y calificación de Técnicos:
Definición: Nos muestra la información relevante de cada técnico seleccionado en
la ventana de “Búsqueda de Técnicos”, también nos permite ponernos en contacto
con el técnico mediante sus redes sociales (WhatsApp, Facebook, Instagram), por
último, nos permite calificar al técnico con los botones de me gusta y no me gusta.
N° Nombre Descripción
6
Ventana Inicio de Sesión de Técnicos:
Definición: En esta ventana verificaremos si un técnico existe en la base
de datos y a su vez nos da acceso a la ventana de “Registro de Técnicos”
N° Nombre Descripción
1 Campo Correo Campo de texto donde se ingresará el correo electrónico
Electrónico
2 Campo Contraseña Campo de texto donde se ingresará la contraseña del
técnico
3 Botón Iniciar Sesión Nos permite validar si los campos de correo electrónico y
contraseña son de un técnico existente en la base de
datos, en caso el técnico exista nos redireccionara a la
ventana de “Modificación de Datos del Técnico”, en caso
sea incorrecto nos mostrara una ventana emergente
mostrando el error
4 Botón Registrarse Nos direccionará a la ventana “Registro de Técnicos”
4
Ventana de Registro de Técnicos:
Definición: Esta ventana nos permite registrar los datos de un nuevo técnico y
guardarlo en la base de datos
N° Nombre Descripción
1 Botón Atrás Redirecciona a la pantalla anterior
2 Títulos de la ventana títulos que ayudan a la presentación y orientación al
usuario
3 Imagen de Perfil Nos permite subir una imagen de perfil del técnico
4 Campos de Nos permite ingresar la siguiente información:
información nombres, correo, contraseña, teléfono, país, ciudad,
distrito y experiencia
5 Botón Registrarse Valida toda la información de los campos ya
mencionados, si la información de los campos es
correcta procede a registrar y guardar toda la
información en la base de datos, en caso contrario
aparecerá una ventana emergente indicando el error
N° Nombre Descripción
1 Botón Atrás Redirecciona a la pantalla anterior
2 Títulos de la ventana títulos que ayudan a la presentación y orientación al
usuario
3 Imagen de Perfil Nos permite visualizar y editar la imagen de perfil del
técnico
4 Campos de Nos permite visualizar y modificar la siguiente
información información: nombres, correo, contraseña, teléfono,
país, ciudad, distrito y experiencia
5 Botón Guardar Valida toda la información de los campos ya
Cambios mencionados, si la información de los campos es
correcta procede modificar y guardar toda la
información en la base de datos, en caso contrario
aparecerá una ventana emergente indicando el error
1
5
PROTOTIPO HORIZONTAL
DESCRIPCION DEL PROTOTIPO HORIZONTAL
En el módulo podemos observar una lista de técnicos donde accede a detalle técnico y
encontraremos información especificada luego nos dirige a la ventana de UBICACIÓN
donde se ubica al técnico más cercano del cliente con un icono mapa.
En esta ventana visualizada se observa que (LISTA DE TECNICOS) retorna hasta
ventana INICIO con una un botón(flecha).
En este módulo de ventanas se observa que DETALLE TECNICO retorna a la LISTA
TECNICO y también se visualiza el icono de mapa que nos dirige a una venta de
UBICACIÓN.
La ventana visualizada se observa que todos retornar hasta la ventana INICIO con una
flecha(botón) que se encuentra en la parte superior.
CODIFICANDO EN ANDROID LAYOUT
ACTIVITY_MAIN
<?xml version="1.0" encoding="utf-8"?>
<androidx.coordinatorlayout.widget.CoordinatorLayout
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:fitsSystemWindows="true"
android:background="@drawable/bg_color"
tools:context=".MainActivity">
<View
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#000000"
android:alpha="0.5"/>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_gravity="center"
android:layout_marginBottom="350dp"
>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="COMPU UCV"
android:textSize="35sp"
android:textColor="@color/colorWhite"
/>
</LinearLayout>
<Button
android:id="@+id/btn_buscar"
android:layout_width="200dp"
android:layout_height="50dp"
android:text="TECNICOS"
android:layout_gravity="center"
android:layout_marginBottom="20dp"
android:backgroundTint="@color/colorWhite"
android:background="@drawable/rounded_button"
android:onClick="buscar"
/>
<Button
android:id="@+id/btn_login"
android:layout_width="200dp"
android:layout_height="50dp"
android:text="REGISTRO DE TECNICOS"
android:layout_gravity="center"
android:layout_marginTop="200dp"
android:background="@drawable/rounded_button"
android:backgroundTint="@color/colorWhite"
android:onClick="login"
/>
</androidx.coordinatorlayout.widget.CoordinatorLayout>
ACTIVITY_LOGIN
<androidx.coordinatorlayout.widget.CoordinatorLayout
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:fitsSystemWindows="true"
android:background="@drawable/bg_color"
tools:context=".Login">
<View
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#000000"
android:alpha="0.5"/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
>
<ImageView
android:layout_width="200dp"
android:layout_height="200dp"
android:layout_gravity="center"
android:src="@drawable/opticdev_gray" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="30dp"
android:layout_marginTop="47dp"
android:layout_marginRight="30dp"
android:orientation="horizontal"
>
<ImageView
android:layout_width="30dp"
android:layout_height="30dp"
android:layout_marginTop="20dp"
android:layout_marginRight="5dp"
android:src="@drawable/ic_baseline_email_24" />
<com.google.android.material.textfield.TextInputLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textColorHint="@color/colorWhite"
>
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/textInputEmail"
android:layout_width="match_parent"
android:layout_height="55dp"
android:hint="Correo Electronico"
android:inputType="textEmailAddress"
android:textColorHint="@color/colorWhite"
android:textSize="17sp"
android:theme="@style/EditTextWhite"/>
</com.google.android.material.textfield.TextInputLayout>
ACTIVITY_REGISTRO_TECNICOS
<ScrollView
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"
tools:context=".Registro_Tecnicos">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<io.github.florent37.shapeofview.shapes.ArcView
android:layout_width="match_parent"
android:layout_height="210dp"
android:elevation="4dp"
app:shape_arc_height="20dp"
app:shape_arc_position="bottom"
>
<View
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/bg_color" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="REGISTRATE AHORA"
android:textColor="@color/colorWhite"
android:textAlignment="center"
android:textStyle="bold"
android:layout_marginTop="50dp"
android:textSize="22dp"/>
<ImageView
android:layout_width="120dp"
android:layout_height="120dp"
android:src="@drawable/ic_person"
android:layout_gravity="center"
android:layout_marginTop="40dp"/>
<de.hdodenhof.circleimageview.CircleImageView
android:id="@+id/circleImageBack"
android:layout_width="35dp"
android:layout_height="35dp"
android:layout_margin="10dp"
android:src="@drawable/ic_arrow_back" />
</io.github.florent37.shapeofview.shapes.ArcView>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="30dp"
android:layout_marginTop="20dp"
android:layout_marginRight="30dp"
android:orientation="horizontal"
>
<ImageView
android:layout_width="30dp"
android:layout_height="30dp"
android:layout_marginTop="20dp"
android:layout_marginRight="5dp"
android:src="@drawable/ic_person_grey" />
<com.google.android.material.textfield.TextInputLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
>
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/textInputUsername"
android:layout_width="match_parent"
android:layout_height="55dp"
android:hint="Nombre del usuario"
android:inputType="textPersonName"
android:textSize="17sp"
/>
</com.google.android.material.textfield.TextInputLayout>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="30dp"
android:layout_marginRight="30dp"
android:orientation="horizontal"
>
<ImageView
android:layout_width="30dp"
android:layout_height="30dp"
android:layout_marginTop="20dp"
android:layout_marginRight="5dp"
android:src="@drawable/ic_email_grey" />
<com.google.android.material.textfield.TextInputLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
>
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/textInputEmail"
android:layout_width="match_parent"
android:layout_height="55dp"
android:hint="Correo Electronico"
android:inputType="textEmailAddress"
android:textSize="17sp"
/>
</com.google.android.material.textfield.TextInputLayout>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="30dp"
android:layout_marginRight="30dp"
android:orientation="horizontal">
<ImageView
android:layout_width="30dp"
android:layout_height="30dp"
android:layout_marginTop="20dp"
android:layout_marginRight="5dp"
android:src="@drawable/ic_password_grey" />
<com.google.android.material.textfield.TextInputLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
>
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/textInputPassword"
android:layout_width="match_parent"
android:layout_height="55dp"
android:hint="Contraseña"
android:inputType="textPassword"
android:textSize="17sp"
android:layout_marginTop="11dp"/>
</com.google.android.material.textfield.TextInputLayout>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="30dp"
android:layout_marginRight="30dp"
android:orientation="horizontal">
<ImageView
android:layout_width="30dp"
android:layout_height="30dp"
android:layout_marginTop="20dp"
android:layout_marginRight="5dp"
android:src="@drawable/ic_password_grey" />
<com.google.android.material.textfield.TextInputLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
>
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/textInputConfirmPassword"
android:layout_width="match_parent"
android:layout_height="55dp"
android:hint="Confirmar Contraseña"
android:inputType="textPassword"
android:textSize="17sp"
android:layout_marginTop="11dp"/>
</com.google.android.material.textfield.TextInputLayout>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="30dp"
android:layout_marginRight="30dp"
android:orientation="horizontal">
<ImageView
android:layout_width="30dp"
android:layout_height="30dp"
android:layout_marginTop="20dp"
android:layout_marginRight="5dp"
android:src="@drawable/ic_phone_grey" />
<com.google.android.material.textfield.TextInputLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
>
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/textInputPhone"
android:layout_width="match_parent"
android:layout_height="55dp"
android:hint="Telefono"
android:inputType="text|phone"
android:textSize="17sp"
android:layout_marginTop="11dp"/>
</com.google.android.material.textfield.TextInputLayout>
</LinearLayout>
<Button
android:id="@+id/btn_Register"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="REGISTRARSE"
android:textColor="@color/colorWhite"
android:layout_marginBottom="20dp"
android:layout_gravity="bottom"
android:layout_margin="25dp"
android:background="@drawable/rounded_button"
android:backgroundTint="@color/colorBlue">
</Button>
</LinearLayout>
</ScrollView>
JAVA CLASS
MAINACTIVITY
package com.qs.compuucv;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
LOGIN ACTIVITY
package com.qs.compuucv;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import com.google.android.material.textfield.TextInputEditText;
import de.hdodenhof.circleimageview.CircleImageView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
//2.instanciamos el mCirclerImageView
mCircleImageView = findViewById(R.id.circleImageBack);
//4.casteamos instanciamos los TextInputEditText
mTextInputEmail = findViewById(R.id.textInputEmail);
mTextInputPassword = findViewById(R.id.textInputPassword);
mCircleImageView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
finish();
}
});
}
//5. creamos un metodo para obtener los valores del email y contraseña
public void ingresar(View view){
Intent ModificarActivity = new Intent(this,EditarUsuario.class);
startActivity(ModificarActivity);
REGISTRO_TECNICOS
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.Task;
import com.google.android.material.textfield.TextInputEditText;
import com.google.firebase.auth.AuthResult;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.firestore.FirebaseFirestore;
import com.google.rpc.context.AttributeContext;
import org.jetbrains.annotations.NotNull;
import java.util.HashMap;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import de.hdodenhof.circleimageview.CircleImageView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_registro_tecnicos);
//2.instanciamos el mCirclerImageView
mCircleImageView = findViewById(R.id.circleImageBack);
//4. instanciamos las variables de activity_register
mTextInputUsername = findViewById(R.id.textInputUsername);
mTextInputEmail = findViewById(R.id.textInputEmail);
mTextInputPassword = findViewById(R.id.textInputPassword);
mTextInputConfirmPassword =
findViewById(R.id.textInputConfirmPassword);
mTextInputPhone = findViewById(R.id.textInputPhone);
mButtonRegister = findViewById(R.id.btn_Register);
//6.9 instanciamos el firebase con getInstance();
mAuth = FirebaseAuth.getInstance();
//7.1 instanciamos el FiresbaseFirestore
/*Aqui ya tenemos la instancia que necesitamos para trabajar con la
base de datos de Firestore*/
mFirestore = FirebaseFirestore.getInstance();
}
});
mCircleImageView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
finish();
}
});
}
//6.1 obteniendo cada uno de los datos que de las variables de
activity_register
private void register() {
String username = mTextInputUsername.getText().toString().trim();
String email = mTextInputEmail.getText().toString().trim();
String password = mTextInputPassword.getText().toString();
String confirmPassword =
mTextInputConfirmPassword.getText().toString();
String phone = mTextInputPhone.getText().toString();
}else {
Toast.makeText(this, "La contraseña debe tener al
menos 6 caracteres", Toast.LENGTH_LONG).show();
}else{
Toast.makeText(this, "Las contraseñas no coinciden",
Toast.LENGTH_LONG).show();
}
}else{
Toast.makeText(this, "Insertaste todos los campos pero el
email no es valido", Toast.LENGTH_LONG).show();
}
}else{
Toast.makeText(this, "Para continuar inserta todos los datos",
Toast.LENGTH_LONG).show();
}
}
//6.7 cremos un nuevo metodo para la creacion de usuario y usamos el mAuth
y cremos 2 parametros para poder registrar el correo y el usuario
//pasamos parametros para obtener los datos
//agregamos addOncompleteListener y esto nos va traer un metodo Oncomplete
que se va ejecutar cuando termine de registrar el usuario
//y recibimos como parametro un objeto llamado task y con este vamos a
validar
private void createUser(String phone,String username, String email, final
String password) {
mAuth.createUserWithEmailAndPassword(email,password).addOnCompleteListener(new
OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull @NotNull Task<AuthResult> task) {
//6.8 vamos a validar con el metodo isSuccessful que si la
tarea fue exitoso significa que creo correctamente el usuario en firebase
//caso contrario tendria que volver a escribir su correo
electronico
if(task.isSuccessful()){
//7.2 para mandar una coleccion de datos a la BD
mFirestore
String id = mAuth.getCurrentUser().getUid();
Map<String, Object> map = new HashMap<>();
//7.3 almacena los datos en la BD crea 2 campos
.documento(id) es para crear nuevo documento y set(map) es para crea una nueva
informacion para nuestro documento
map.put("email",email);
map.put("username",username);
map.put("phone",phone);
/*map.put("password", password); lo de password es una
mala practica guardarlo mejor que lo haga el propio authentication*/
mFirestore.collection("Users").document(id).set(map).addOnCompleteListener(new
OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull @NotNull Task<Void>
task) {
if (task.isSuccessful()){
Toast.makeText(Registro_Tecnicos.this,"El
usuario se almaceno correctamente en la base de
datos",Toast.LENGTH_LONG).show();
}else{
Toast.makeText(Registro_Tecnicos.this,"No se
pudo almacenar el usuario en la base de datos",Toast.LENGTH_LONG).show();
}
}
});
}else {
Toast.makeText(Registro_Tecnicos.this, "No se pudo
registrar el usuario ", Toast.LENGTH_LONG).show();
}
}
});
}
}
REFERENCIA
LÓPEZ Rosciano y JOSÉ Pech Desarrollo de herramienta de gestión de proyecto RUP Recuperado
de http://oa.upm.es/44208/3/TFM_RODRIGO_ANTONIO_LOPEZ_ROSCIANO_JOS
E_ALFREDO_PECH_MONTEJO.pdf
FORBES, 2017. Uber Says It’s Doing 1 Million Rides Per Day, 140 Million In Last Year. [en línea].
[Consulta: 01 mayo 2021]. Disponible en: https://www.forbes.com/sites/ellenhuet/2017/12/17/uber-
says-its-doing-1-million-rides-per-day-140-million-in-last-year/#7282ba1152cd.
ANEXOS
PRESENTACION DE APLICATIVO MÓVIL
Nota:
Grabar su exposición máximo 20 minutos y anexar su Power
Point con la presentación de su exposición.
Entregables:
Se va entregando según las 3 etapas de entrega
programadas en el silabus.
Primera Entrega:
Segunda Entrega:
Tercera Entrega: