PacientesPresenter

com.uva.rafael.tfg_goniometer.presenter

## Class PacientesPresenter

- java.lang.Object
- - com.uva.rafael.tfg_goniometer.presenter.PacientesPresenter

- All Implemented Interfaces:
    PresenterFunctions, PresenterFunctions.PacientesFunctions

      public class PacientesPresenter
      extends java.lang.Object
      implements PresenterFunctions, PresenterFunctions.PacientesFunctions

  Este es el Presentador asociado al `Fragment PacientesFragment` de la aplicacion. Se encarga de llevar a cabo toda la logica asociada a las acciones del usuario realizadas en la IU.

  En concreto, se encarga de realizar la "configuracion inicial" del `Fragment`, que, consiste en actualizar el item del `NavigationView` al cuarto item del mismo, fijar la orientacion de la pantalla a "Portrait", para evitar que se pueda girar y fijar el `Toolbar` como `SupportActionBar`.

  Ademas de eso, se encarga de configurar el `RecyclerView` inicial que se emplea para mostrar el listado de pacientes (obteniendo el `RecyclerView.Adapter`), de "cargar" el `Spinner` que muestra el criterio de filtrado de pacientes, y de gestionar cuando el usuario ha pulsado sobre el boton para añadir un nuevo paciente, o para ver el perfil de uno de los que se encuentran almacenados en la Base de Datos.

  Por ultimo, se encarga de obtener el `RecyclerView.Adapter` correspondiente cada vez que se recibe, desde la Vista, el evento `onTextChanged` sobre el cuadro de busqueda de pacientes.

  Esta clase forma parte de la aplicacion TFG-Goniometer, desarrollada para el Trabajo de Fin de Grado - Grado en Ingenieria Informatica (Universidad de Valladolid)

  Version:
    1.0
  Author:
    Rafael Matamoros Luque
  See Also:
    `PacientesFragment`, `MainModel`, `Toolbar`, `RecyclerView`, `Spinner`, `NuevoPacienteFragment`, `PacienteListAdapter`, `PerfilPacienteFragment`

- - ### Nested Class Summary

    - ### Nested classes/interfaces inherited from interface com.uva.rafael.tfg_goniometer.interfaces.PresenterFunctions

      `PresenterFunctions.HomeFunctions, PresenterFunctions.MainFunctions, PresenterFunctions.MedicionFunctions, PresenterFunctions.NuevaMedicionFunctions, PresenterFunctions.NuevoPacienteFunctions, PresenterFunctions.PacientesFunctions, PresenterFunctions.PerfilPacienteFunctions, PresenterFunctions.SobreAppFunctions, PresenterFunctions.UltimasMedicionesFunctions`

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `PacientesPresenter(android.app.Fragment fragment, MainModel model)` Constructor principal de la clase

  - ### Method Summary

    All Methods Instance Methods Concrete Methods
    Modifier and Type | Method and Description
    --- | ---
    `void` | `configRecyclerView(android.support.v7.widget.RecyclerView recyclerView, android.os.Bundle args)` Metodo que se encarga de hacer una configuracion inicial del `RecyclerView` que muestra el listado de pacientes almacenados en la Base de Datos.
    `void` | `loadSpinner(android.widget.Spinner spinner)` Metodo que se encarga de crear un `ArrayAdapter` para el `Spinner` recibido como parametro y adjunta un recurso de tipo layout que define como se muestra la opcion seleccionada en el control del mismo.
    `void` | `onAñadirPacienteClicked()` Evento `ClickListener` que se llama cuando el usuario ha pulsado sobre el boton para añadir un nuevo paciente en el `PacientesFragment`.
    `void` | `onDestroy()` Perform any final cleanup before an activity is destroyed.
    `void` | `onLayoutClicked(java.lang.String nombrePaciente, int idPaciente, android.os.Bundle args)` Evento `ClickListener` que se llama cuando el usuario ha pulsado sobre un elemento del `RecyclerView` que muestra el listado de pacientes en `PacientesFragment`.
    `void` | `onTextChanged(android.support.v7.widget.RecyclerView recyclerView, java.lang.String texto, java.lang.String filtro, android.os.Bundle args)` Metodo que se encarga de re-asignar el `RecyclerView.Adapter` al `RecyclerView` de `PacientesFragment`, encargado de mostrar el listado de pacientes que coinciden con los criterios de busqueda (o todos en caso de no especificar ninguno).
    `void` | `setUpInitialSettings(android.support.v7.widget.Toolbar toolbar)` Metodo que realiza las operaciones iniciales cuando se crea el `Fragment PacientesFragment`.

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- - ### Constructor Detail

    - #### PacientesPresenter

          public PacientesPresenter(android.app.Fragment fragment,
                                    MainModel model)

      Constructor principal de la clase
      Parameters:
        `fragment` - Fragmento (Vista) con la que mantiene una relacion 1-a-1.
        `model` - Modelo (unico) de la aplicacion.

  - ### Method Detail

    - #### setUpInitialSettings

          public void setUpInitialSettings(android.support.v7.widget.Toolbar toolbar)

      Metodo que realiza las operaciones iniciales cuando se crea el `Fragment PacientesFragment`.

      Se encarga de marcar el cuarto item del `NavigationView` (correspondiente a `PacientesFragment`), fijar la orientacion de la pantalla en "Portrait" y de utilizar el `Toolbar` recibido como `SupportActionBar`.

      En este caso, solo se mostrara el `Toolbar` en el caso de que el usuario no vaya a almacenar una nueva medicion en el sistema. Esto es asi, para evitar que el usuario vaya a otras partes de la aplicacion, a traves del mismo, sin haber completado la tarea de almacenar la medicion, lo que puede provocar problemas de comportamiento de la aplicacion.

      Asi, ademas, se guia al usuario paso a paso, lo que facilita el uso de la aplicacion.

      Specified by:
        `setUpInitialSettings` in interface `PresenterFunctions.PacientesFunctions`
      Parameters:
        `toolbar` - `Toolbar` a emplear como `SupportActionBar`

    - #### configRecyclerView

          public void configRecyclerView(android.support.v7.widget.RecyclerView recyclerView,
                                         android.os.Bundle args)

      Metodo que se encarga de hacer una configuracion inicial del `RecyclerView` que muestra el listado de pacientes almacenados en la Base de Datos.

      Realiza una operacion para mejorar el rendimiento del mismo, asi como añadirle el `LayoutManager` y el `RecyclerView.Adapter`.

      Specified by:
        `configRecyclerView` in interface `PresenterFunctions.PacientesFunctions`
      Parameters:
        `recyclerView` - `RecyclerView` a configurar
        `args` - `Bundle` con los argumentos para crear el `PacienteListAdapter`

    - #### onAñadirPacienteClicked

          public void onAñadirPacienteClicked()

      Evento `ClickListener` que se llama cuando el usuario ha pulsado sobre el boton para añadir un nuevo paciente en el `PacientesFragment`. Crea un nuevo `Fragment` de tipo `NuevoPacienteFragment`.
      Specified by:
        `onAñadirPacienteClicked` in interface `PresenterFunctions.PacientesFunctions`

    - #### loadSpinner

          public void loadSpinner(android.widget.Spinner spinner)

      Metodo que se encarga de crear un `ArrayAdapter` para el `Spinner` recibido como parametro y adjunta un recurso de tipo layout que define como se muestra la opcion seleccionada en el control del mismo.

      Ademas, especifica el layout que el `Adapter` usara para mostrar la lista de opciones del `Spinner`.

      Por ultimo, aplica el adaptador al `Spinner` en cuestion.

      Specified by:
        `loadSpinner` in interface `PresenterFunctions.PacientesFunctions`
      Parameters:
        `spinner` - `Spinner` sobre el que se aplica

    - #### onTextChanged

          public void onTextChanged(android.support.v7.widget.RecyclerView recyclerView,
                                    java.lang.String texto,
                                    java.lang.String filtro,
                                    android.os.Bundle args)

      Metodo que se encarga de re-asignar el `RecyclerView.Adapter` al `RecyclerView` de `PacientesFragment`, encargado de mostrar el listado de pacientes que coinciden con los criterios de busqueda (o todos en caso de no especificar ninguno).

      Primero, obtiene, a partir del Modelo, el listado de pacientes filtrado, segun el criterio seleccionado por el usuario en el `Spinner`, y la informacion introducida por el mismo en el `EditText`.

      Una vez que se tiene el listado de pacientes ya filtrado, se crea el nuevo `RecyclerView.Adapter` y se asigna al `RecyclerView` recibido como parametro.

      Specified by:
        `onTextChanged` in interface `PresenterFunctions.PacientesFunctions`
      Parameters:
        `recyclerView` - `RecyclerView` sobre el que se aplica este metodo
        `texto` - Informacion introducida por el usuario en el cuadro de busqueda del `EditText` de `PacientesFragment`
        `filtro` - Filtro seleccionado por el usuario en el `Spinner` de `PacientesFragment`
        `args` - `Bundle` con los argumentos para crear el `PacienteListAdapter`

    - #### onLayoutClicked

          public void onLayoutClicked(java.lang.String nombrePaciente,
                                      int idPaciente,
                                      android.os.Bundle args)

      Evento `ClickListener` que se llama cuando el usuario ha pulsado sobre un elemento del `RecyclerView` que muestra el listado de pacientes en `PacientesFragment`. Crea un nuevo `Fragment` de tipo `PerfilPacienteFragment`.
      Specified by:
        `onLayoutClicked` in interface `PresenterFunctions.PacientesFunctions`
      Parameters:
        `nombrePaciente` - Nombre del paciente sobre el que el usuario ha pulsado
        `idPaciente` - ID del paciente sobre el que el usuario ha pulsado
        `args` - `Bundle` con los argumentos para crear el `PerfilPacienteFragment`

    - #### onDestroy

          public void onDestroy()

      Perform any final cleanup before an activity is destroyed. Se encarga de liberar la referencia al `Fragment` con el que esta asociado. Ademas, ya no es necesario seguir mostrando las opciones para almacenar una nueva medicion, por lo que tambien se encarga de notificar al Modelo sobre esta situacion.
      Specified by:
        `onDestroy` in interface `PresenterFunctions`