Vanniktech RxPermission Save

Reactive permissions for Android

Project README

RxPermission

This library wraps the Android Runtime Permissions with RxJava 2. It's based on the RxPermissions library and was adjusted with simplicity in mind. Here are a few things that are different:

  • API is really small and focused
  • Uses a shadowing Activity to request the permission which allows you to use the library within Services, Broadcastreceiver etc.
  • Supports the 'Never ask again' case

Download

implementation 'com.vanniktech:rxpermission:0.10.0'
implementation 'com.vanniktech:rxpermission:0.11.0-SNAPSHOT'

Usage

The core functionality is provided via an interface:

interface RxPermission {
  /** Requests a single permission.  */
  @CheckReturnValue fun request(permission: String): Single<Permission>

  /** Requests multiple permissions.  */
  @CheckReturnValue fun requestEach(vararg permissions: String): Observable<Permission>

  /** Returns true when the given permission is granted.  */
  @CheckReturnValue fun isGranted(permission: String): Boolean

  /** Returns true when the given permission is revoked by a policy.  */
  @CheckReturnValue fun isRevokedByPolicy(permission: String): Boolean

  /** Returns tue when the given permission has been request at least once using either [request] or [requestEach].  */
  @CheckReturnValue fun hasRequested(permission: String): Boolean
}

And the Permission class:

public class Permission {
  /** The name of the permission. For instance android.permission.CAMERA */
  @NonNull public String name();

  /** The state of the permission. */
  @NonNull public State state();

  public enum State {
    /** Permission has been granted. */
    GRANTED,

    /** Permission has been denied. */
    DENIED,

    /**
     * Permission is denied.
     * Previously the requested permission was denied and never ask again was selected.
     * This means that the user hasn't seen the permission dialog.
     * The only way to let the user grant the permission is via the settings now.
     */
    DENIED_NOT_SHOWN,

    /** Permission has been revoked by a policy. */
    REVOKED_BY_POLICY
  }
}

Production

For your Android application you can get an instance of the interface via RealRxPermission.getInstance(application) and then simply use the above mentioned methods to your needs.

RealRxPermission.getInstance(application)
    .request(Manifest.permission.CAMERA)
    .subscribe();

Testing

In addition the library offers you a MockRxPermission that can be used for testing.

implementation 'com.vanniktech:rxpermission-testing:0.10.0'

The constructor takes a vararg of Permissions.

new MockRxPermission(Permission.denied(Manifest.permission.CAMERA))
    .request(Manifest.permission.CAMERA)
    .test()
    .assertResult(Permission.denied(Manifest.permission.CAMERA));

The Permission class provides you a few static factory methods:

/** This will create a granted Camera Permission instance. */
Permission.granted(Manifest.permission.CAMERA)

/** This will create a denied Camera Permission instance. */
Permission.denied(Manifest.permission.CAMERA)

/** This will create a denied not shown Camera Permission instance. */
Permission.deniedNotShown(Manifest.permission.CAMERA)

/** This will create a revoked by policy Camera Permission instance. */
Permission.revokedByPolicy(Manifest.permission.CAMERA)

Sample

Also checkout the sample app that shows you how to use the library.

License

Copyright (C) 2017 Vanniktech - Niklas Baudy

Licensed under the Apache License, Version 2.0

Open Source Agenda is not affiliated with "Vanniktech RxPermission" Project. README Source: vanniktech/RxPermission
Stars
194
Open Issues
0
Last Commit
1 week ago
License

Open Source Agenda Badge

Open Source Agenda Rating