¿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?

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.

  • ¿Hay RxJava equivalente a Handler.postDelayed (Runnable r, delayMillis largo)
  • La clase Dagger no podía estar atada con la clave
  • Realización de Interactors con Android MVP Clean Architecture
  • Cómo controlar ListView con el patrón MVP para Android
  • MVP de Android: ¿debe ser una actividad una vista o un presentador?
  • Comunicarse entre presentadores en la aplicación MVP android
  • Model View Presenter - misma vista, diferentes presentadores
  • ¿El desarrollo de la interfaz de usuario de Android se presta bien a un patrón de diseño participativo?
  • Comentarios sobre mi patrón MVP para Android
  • Realm, RxJava, asObservable () y doOnUnsubscribe ()
  • Implementación de MVP con Dagger en un FragmentPagerAdapter
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.