¿Cuál es la mejor manera de comprobar los permisos en tiempo de ejecución mediante la arquitectura MVP?

Estoy desarrollando una aplicación android en la que tengo que pedir permisos en tiempo de ejecución. Me estoy preguntando sobre la mejor manera de implementar eso usando la arquitectura Model-View-Presenter.

Mi pensamiento inicial fue hacer que el presentador llamara a un componente responsable de los permisos (por ejemplo, un PermissionHandler ), y actualizar la vista en consecuencia.

El problema es que el código para comprobar permisos está estrechamente acoplado con la clase de actividad. Estos son algunos de los métodos que requieren una Actividad o Contexto:

  • ContextCompat.checkSelfPermission()
  • ActivityCompat.shouldShowRequestPermissionRationale()
  • ActivityCompat.requestPermissions()
  • onRequestPermissionsResult() (devolución de llamada)

Esto significa que tendría que pasar un objeto de actividad al presentador, que no me gustó mucho porque he oído que mantener a su presentador libre de código de Android es bueno para la prueba.

Debido a eso, entonces pensé en manejar permisos a nivel de vista (en una actividad), pero entonces supongo que esto perjudicaría el propósito de dejar la vista responsable sólo de actualizaciones de interfaz de usuario, sin lógica de negocio.

No estoy seguro de cuál sería el mejor enfoque para abordar que mantener el código tan desacoplado y mantenible como sea posible. ¿Algunas ideas?

One Solution collect form web for “¿Cuál es la mejor manera de comprobar los permisos en tiempo de ejecución mediante la arquitectura MVP?”

Lo que yo haría es:

La vista implementará:

 public Activity getViewActivity(); 

El presentador implementará:

 public void requestPermissions(); public void onPermissionsResult(); 

Dentro de requestPermissions , el presentador hará: getViewActivity().checkSelfPermission; getViewActivity.requestPermissions(); etc. getViewActivity().checkSelfPermission; getViewActivity.requestPermissions(); etc.

La vista llamará dentro de la devolución de llamada onRequestPermissionsResult a presenter.onPermissionsResult();

Con esto toda la lógica se implementará dentro del presentador.

En mi opinión, su presentador está desacoplado: no dependerá de ninguna implementación de vista (sólo dependerá de la interfaz de vista).

"He oído que mantener a su presentador libre del código de Android es bueno para las pruebas." No entiendo esta parte. Si el código es bueno, se puede probar sin ningún problema.

  • Model View Presenter - misma vista, diferentes presentadores
  • MVP para Android: ¿es sólo una excusa para habilitar las pruebas?
  • Ejemplo androide del presentador de la versión / ejemplos del regulador
  • ¿El presentador que tiene conocimiento de la Actividad / Contexto es una mala idea en el patrón MVP?
  • MVP para Android: uso seguro Contexto en Presenter
  • Dagger 2 e implementaciones de interfaz
  • MVP para Android: ¿Qué es un Interactor?
  • Norma de arquitectura de Android MVP para cargar interfaz de usuario con clase Model que tiene recurso android
  • Google Analytics con el patrón de diseño MVP
  • Prueba de la unidad MVP de Android: ¿debo burlar el bus de eventos?
  • Model View Presenter con un EventBus, ¿cómo recuperar los eventos en Presenter?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.