Manual Tecnico - Diario Personal
Manual Tecnico - Diario Personal
Manual Tecnico - Diario Personal
MANUAL TÉCNICO
IIP2024
Facultad: ICC
7/29/2024
La Ceiba, Atlántida.
App de Diario Personal
MANUAL TÉCNICO
Diario Personal
MANUAL TÉCNICO
1
App de Diario Personal
MANUAL TÉCNICO
Contenido
Objetivos..............................................................................................................................................................
Objetivos Específicos......................................................................................................................................
Introducción........................................................................................................................................................
Arquitectura del software..................................................................................................................................
Componentes...................................................................................................................................................
Diagramas de Arquitectura.............................................................................................................................
Diagrama Nivel 1......................................................................................................................................
Diagrama de Flujo de Usuario..................................................................................................................
Instalación y Configuración...............................................................................................................................
Requisitos de Sistemas........................................................................................................................................
Instrucciones detalladas de instalación...........................................................................................................
Configuración inicial y ajustes necesarios......................................................................................................
Estructura de Código..........................................................................................................................................
Descripción de módulos y sus dependencias..................................................................................................
Detalles de Implementación...............................................................................................................................
Algoritmos......................................................................................................................................................
Lógica de Negocio..........................................................................................................................................
Detalles sobre bases de datos y esquemas de datos....................................................................................
Estructura de datos..........................................................................................................................................
Diagrama de la base de datos....................................................................................................................
API..................................................................................................................................................................
Servicios Web.................................................................................................................................................
Pruebas y Depuración.........................................................................................................................................
Mantenimiento y Actualizaciones......................................................................................................................
Referencias y Recursos Adicionales..................................................................................................................
2
App de Diario Personal
MANUAL TÉCNICO
Objetivos
Este documento ha sido elaborado para mostrar cómo se diseñó nuestra aplicación
para crear notas y a la vez dar referencias de cómo interactuar con el programa para su
posible continuación.
Objetivos Específicos
3
App de Diario Personal
MANUAL TÉCNICO
Introducción
Este documento ha sido elaborado para mostrar cómo se diseñó nuestra aplicación
para crear notas y a la vez dar referencias de cómo interactuar con el programa para su
posible continuación. Está dirigido hacia los docentes pertenecientes a la facultad ICC y todo
4
App de Diario Personal
MANUAL TÉCNICO
donde puedan plasmar y crear sus ideas por medio de notas personales. Así mismo que logren
Componentes
● Front-End
● Back-end
Diagramas de Arquitectura
Diagrama Nivel 0
5
App de Diario Personal
MANUAL TÉCNICO
Diagrama Nivel 1
6
App de Diario Personal
MANUAL TÉCNICO
7
App de Diario Personal
MANUAL TÉCNICO
Estructura de Código
● Modulo de Actividad Principal
package com.example.notessqlite
import android.app.DownloadManager.Query
import android.content.Intent
import android.os.Bundle
import android.text.TextUtils
import android.view.Menu
import android.view.MenuItem
import android.widget.Toast
import androidx.activity.enableEdgeToEdge
import androidx.appcompat.app.ActionBarDrawerToggle
import androidx.appcompat.app.AppCompatActivity
import androidx.core.view.GravityCompat
import androidx.core.view.ViewCompat
import androidx.core.view.WindowInsetsCompat
import androidx.drawerlayout.widget.DrawerLayout
import androidx.recyclerview.widget.LinearLayoutManager
import com.example.notessqlite.databinding.ActivityAddNoteBinding
import com.example.notessqlite.databinding.ActivityMainBinding
import com.google.android.material.navigation.NavigationView
NavigationView.OnNavigationItemSelectedListener {
clase NotesAdapter
8
App de Diario Personal
MANUAL TÉCNICO
super.onCreate(savedInstanceState)
binding = ActivityMainBinding.inflate(layoutInflater)
enableEdgeToEdge()
setContentView(binding.root)
drawerLayout = binding.drawerLayout
navView.setNavigationItemSelectedListener(this)
R.string.navigation_drawer_open, R.string.navigation_drawer_close)
drawerLayout.addDrawerListener(toggle)
toggle.syncState()
db = NoteDatabaseHelper(this)
notesList = db.getAllNotes()
// Configurar el RecyclerView
9
App de Diario Personal
MANUAL TÉCNICO
binding.notesRecyclerView.layoutManager =
elementos en el RecyclerView.
binding.notesRecyclerView.adapter = notesAdapter
binding.addButton.setOnClickListener {
startActivity(intent)
binding.searchButton.setOnClickListener {
if (!TextUtils.isEmpty(query)) {
searchNotes(query)
} else {
Toast.makeText(
this,
Toast.LENGTH_SHORT
).show()
10
App de Diario Personal
MANUAL TÉCNICO
super.onResume()
notesList = db.getAllNotes()
notesAdapter.refreshData(db.getAllNotes())
notesAdapter.refreshData(filteredNotes)
List<Note> {
note.content.contains(
query,
ignoreCase = true
) {
filteredNotes.add(note)
return filteredNotes
11
App de Diario Personal
MANUAL TÉCNICO
if (drawerLayout.isDrawerOpen(GravityCompat.START)) {
drawerLayout.closeDrawer(GravityCompat.START)
} else {
super.onBackPressed()
when (item.itemId){
R.id.nav_item_one -> {
startActivity(intent)
R.id.nav_item_three -> {
startActivity(intent)
drawerLayout.closeDrawer(GravityCompat.START)
return true
Agregar Nota
package com.example.notessqlite
12
App de Diario Personal
MANUAL TÉCNICO
import android.content.Intent
import android.os.Bundle
import android.widget.ImageView
import android.widget.Toast
import androidx.activity.enableEdgeToEdge
import androidx.appcompat.app.AppCompatActivity
import androidx.core.view.ViewCompat
import androidx.core.view.WindowInsetsCompat
import com.example.notessqlite.databinding.ActivityAddNoteBinding
contiene
datos
super.onCreate(savedInstanceState)
binding = ActivityAddNoteBinding.inflate(layoutInflater)
enableEdgeToEdge()
setContentView(binding.root)
binding.returnButton.setOnClickListener {
startActivity(intent)
13
App de Diario Personal
MANUAL TÉCNICO
//inicializacion de la variable db
binding.saveButton.setOnClickListener{
inputs
Toast.LENGTH_SHORT).show() //mensaje
package com.example.notessqlite
import android.annotation.SuppressLint
import android.content.Context
import android.content.Intent
14
App de Diario Personal
MANUAL TÉCNICO
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.ImageView
import android.widget.TextView
import android.widget.Toast
import androidx.recyclerview.widget.RecyclerView
RecyclerView.Adapter<NotesAdapter.NoteViewHolder>() {
itemView.findViewById(R.id.titleTextView)
itemView.findViewById(R.id.contentTextView)
itemView.findViewById(R.id.updateButton)
itemView.findViewById(R.id.deleteButton)
NoteViewHolder {
val view =
LayoutInflater.from(parent.context).inflate(R.layout.note_item, parent,
false)
15
App de Diario Personal
MANUAL TÉCNICO
return NoteViewHolder(view)
posición especificada.
holder.titleTextView.text = note.title
holder.contentTextView.text = note.content
holder.Updatebutton.setOnClickListener{
UpdateNoteActivity::class.java).apply{
putExtra("note_id", note.id)
holder.itemView.context.startActivity(intent)
holder.deleteButton.setOnClickListener{
db.deleteNote(note.id)
refreshData(db.getAllNotes())
Toast.LENGTH_SHORT).show()
16
App de Diario Personal
MANUAL TÉCNICO
@SuppressLint("NotifyDataSetChanged")
lista.
Database Helper
package com.example.notessqlite
import android.content.ContentValues
import android.content.Context
import android.database.sqlite.SQLiteDatabase
import android.database.sqlite.SQLiteOpenHelper
companion object{
17
App de Diario Personal
MANUAL TÉCNICO
db?.execSQL(createTableQuery)
Int) {
db?.execSQL(dropTableQuery)
onCreate(db)
put(COLUMN_TITLE, note.title)
put(COLUMN_CONTENT, note.content)
db.close()
18
App de Diario Personal
MANUAL TÉCNICO
sera de lectura
esta variable
while (cursor.moveToNext()){
//obtencion de datos
val id = cursor.getInt(cursor.getColumnIndexOrThrow(COLUMN_ID))
val title =
cursor.getString(cursor.getColumnIndexOrThrow("title"))
val content =
cursor.getString(cursor.getColumnIndexOrThrow("content"))
notesList
return notesList
19
App de Diario Personal
MANUAL TÉCNICO
put(COLUMN_TITLE, note.title)
put(COLUMN_CONTENT, note.content)
db.close()
val db = writableDatabase
cursor.moveToFirst()
val id = cursor.getInt(cursor.getColumnIndexOrThrow(COLUMN_ID))
val title =
cursor.getString(cursor.getColumnIndexOrThrow(COLUMN_TITLE))
val content =
cursor.getString(cursor.getColumnIndexOrThrow(COLUMN_CONTENT))
cursor.close()
db.close()
20
App de Diario Personal
MANUAL TÉCNICO
val db = writableDatabase
db.close()
package com.example.notessqlite
import android.content.Intent
import android.os.Bundle
import androidx.activity.enableEdgeToEdge
import androidx.appcompat.app.AppCompatActivity
import androidx.core.view.ViewCompat
import androidx.core.view.WindowInsetsCompat
import com.example.notessqlite.databinding.ActivityConCodigoBinding
import com.example.notessqlite.databinding.ConfirmacionBinding
21
App de Diario Personal
MANUAL TÉCNICO
super.onCreate(savedInstanceState)
enableEdgeToEdge()
setContentView(R.layout.activity_con_codigo)
binding = ActivityConCodigoBinding.inflate(layoutInflater)
setContentView(binding.root)
binding.ingresar.setOnClickListener {
startActivity(intent)
Interfaz de confirmación
package com.example.notessqlite
import android.content.Intent
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import com.example.notessqlite.databinding.ConfirmacionBinding
22
App de Diario Personal
MANUAL TÉCNICO
super.onCreate(savedInstanceState)
binding = ConfirmacionBinding.inflate(layoutInflater)
setContentView(binding.root)
binding.buttonAceptar.setOnClickListener {
startActivity(intent)
binding.cerrar.setOnClickListener {
startActivity(intent)
package com.example.notessqlite
import android.content.Context
import android.content.Intent
import android.os.Bundle
import androidx.activity.enableEdgeToEdge
23
App de Diario Personal
MANUAL TÉCNICO
import androidx.appcompat.app.AppCompatActivity
import androidx.core.view.ViewCompat
import androidx.core.view.WindowInsetsCompat
import com.example.notessqlite.databinding.ActivityMainBloqueoBinding
import com.example.notessqlite.databinding.ActivityNosotrosBinding
super.onCreate(savedInstanceState)
enableEdgeToEdge()
setContentView(R.layout.activity_main_bloqueo)
binding = ActivityMainBloqueoBinding.inflate(layoutInflater)
enableEdgeToEdge()
setContentView(binding.root)
binding.returnButton.setOnClickListener {
startActivity(intent)
binding.guardar.setOnClickListener {
if (primerCodigo == segundoCodigo) {
24
App de Diario Personal
MANUAL TÉCNICO
Context.MODE_PRIVATE)
editor.putString("codigo_diario", primerCodigo)
editor.apply()
startActivity(intent)
} else {
Menu lateral
package com.example.notessqlite
import android.content.res.Configuration
import android.os.Bundle
import android.view.MenuItem
import android.view.View
import android.widget.EditText
import android.widget.ImageView
import android.widget.Toast
import androidx.appcompat.app.ActionBarDrawerToggle
25
App de Diario Personal
MANUAL TÉCNICO
import androidx.appcompat.app.AppCompatActivity
import androidx.appcompat.widget.Toolbar
import androidx.core.view.GravityCompat
import androidx.drawerlayout.widget.DrawerLayout
import androidx.recyclerview.widget.RecyclerView
import com.google.android.material.navigation.NavigationView
NavigationView.OnNavigationItemSelectedListener {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
setSupportActionBar(toolbar)
drawer = findViewById(R.id.drawer_layout)
R.string.navegation_drawer_open, R.string.navegation_drawer_close)
drawer.addDrawerListener(toggle)
supportActionBar?.setDisplayHomeAsUpEnabled(true)
supportActionBar?.setHomeButtonEnabled(true)
navigationView.setNavigationItemSelectedListener(this)
26
App de Diario Personal
MANUAL TÉCNICO
menuButton.setOnClickListener {
if (drawer.isDrawerOpen(GravityCompat.START)) {
drawer.closeDrawer(GravityCompat.START)
} else {
drawer.openDrawer(GravityCompat.START)
when (item.itemId) {
Toast.LENGTH_SHORT).show()
Toast.LENGTH_SHORT).show()
Toast.LENGTH_SHORT).show()
drawer.closeDrawer(GravityCompat.START)
return true
super.onPostCreate(savedInstanceState)
27
App de Diario Personal
MANUAL TÉCNICO
toggle.syncState()
super.onConfigurationChanged(newConfig)
toggle.onConfigurationChanged(newConfig)
if (toggle.onOptionsItemSelected(item)) {
return true
return super.onOptionsItemSelected(item)
Acerca de Nosotros
package com.example.notessqlite
import android.content.Intent
import android.os.Bundle
import androidx.activity.enableEdgeToEdge
import androidx.appcompat.app.AppCompatActivity
import androidx.core.view.ViewCompat
import androidx.core.view.WindowInsetsCompat
import com.example.notessqlite.databinding.ActivityNosotrosBinding
28
App de Diario Personal
MANUAL TÉCNICO
super.onCreate(savedInstanceState)
binding = ActivityNosotrosBinding.inflate(layoutInflater)
enableEdgeToEdge()
setContentView(binding.root)
ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main)) {
v, insets ->
val systemBars =
insets.getInsets(WindowInsetsCompat.Type.systemBars())
systemBars.bottom)
insets
binding.returnButton.setOnClickListener {
startActivity(intent)
Actualizar la nota
package com.example.notessqlite
import android.content.Intent
29
App de Diario Personal
MANUAL TÉCNICO
import android.os.Bundle
import android.os.PersistableBundle
import android.widget.ImageView
import android.widget.Toast
import androidx.activity.enableEdgeToEdge
import androidx.appcompat.app.AppCompatActivity
import androidx.core.view.ViewCompat
import androidx.core.view.WindowInsetsCompat
import com.example.notessqlite.databinding.ActivityAddNoteBinding
import com.example.notessqlite.databinding.ActivityUpdateNoteBinding
private var noteId: Int = -1 //-1 significa que el valor esta vacia
super.onCreate(savedInstanceState)
binding = ActivityUpdateNoteBinding.inflate(layoutInflater)
enableEdgeToEdge()
setContentView(binding.root)
db = NoteDatabaseHelper(this)
30
App de Diario Personal
MANUAL TÉCNICO
if(noteId == -1){
finish()
return
binding.returnButton.setOnClickListener {
startActivity(intent)
binding.UpdateTitleEditText.setText(note.title)
binding.UpdateContentEditText.setText(note.content)
binding.updateSaveButton.setOnClickListener{
db.updateNote(updatedNote)
finish()
Toast.LENGTH_SHORT).show()
31
App de Diario Personal
MANUAL TÉCNICO
● Módulo Principal
○ Este módulo muestra las notas ingresadas por usuario, también es enlace para
gestionar notas existentes que se pueden eliminar y modificar, añadir otras
notas y hacia el menú lateral.
○ Dependencia: una vez que la nota se crea en el modulo de agregar notas y esta
se refleje en módulo principal se podrá ingresar al módulo de editar notas
32
App de Diario Personal
MANUAL TÉCNICO
Detalles de Implementación
La aplicación de notas se centra en la gestión eficiente de la creación, edición,
organización.
Algoritmos
● Creación de Notas
● Edición de Nota
○ Se actualiza el almacenamiento.
● Búsqueda de la Nota
Lógica de Negocio
La aplicación le da acceso a sus usuarios de crear sus notas sin límite de caracteres
Nuestra base de datos para la app de diario de notas fue diseñado para ser sencillo y
eficiente, esto lo crea permisible para una estructura de datos eficiente. Debido a que la app
es creada para un solo usuario, se ha utilizado SQLite para que el almacenamiento sea
localmente.
33
App de Diario Personal
MANUAL TÉCNICO
Estructura de datos
● Contenido:
diario de notas sea flexible y eficiente, proporcionando una base sólida para la gestión y
34
App de Diario Personal
MANUAL TÉCNICO
Mantenimiento y Actualizaciones
Para su mantenimiento recomendamos depuración constante de la memoria caché y
Posibles actualizaciones
● Recuperación de contraseña
35
App de Diario Personal
MANUAL TÉCNICO
(kotlinlang.org)
36