diff --git a/build.gradle b/build.gradle index 96ebda4..e394c96 100644 --- a/build.gradle +++ b/build.gradle @@ -4,8 +4,8 @@ buildscript { jcenter() } dependencies { - classpath 'com.android.tools.build:gradle:4.0.0' - classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.8.0' + classpath 'com.android.tools.build:gradle:4.0.1' + classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.8.5' classpath 'com.github.dcendents:android-maven-gradle-plugin:2.1' } } @@ -22,15 +22,15 @@ ext { compileSdkVersion = 29 targetSdkVersion = compileSdkVersion - rxJava = 'io.reactivex.rxjava3:rxjava:3.0.4' + rxJava = 'io.reactivex.rxjava3:rxjava:3.0.6' junit = 'junit:junit:4.13' - mockito = 'org.mockito:mockito-core:3.3.3' + mockito = 'org.mockito:mockito-core:3.5.10' androidXFragment = 'androidx.fragment:fragment:1.2.5' androidXAnnotation = 'androidx.annotation:annotation:1.1.0' - androidXAppcompat = 'androidx.appcompat:appcompat:1.1.0' + androidXAppcompat = 'androidx.appcompat:appcompat:1.2.0' - robolectricVersion = '4.3.1' + robolectricVersion = '4.4' robolectric = "org.robolectric:robolectric:$robolectricVersion" robolectricShadowsSupport = "org.robolectric:shadows-support-v4:$robolectricVersion" // Workaround for https://github.com/robolectric/robolectric/issues/1932 diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index d73469f..9c1a1b1 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-6.5.1-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-6.6.1-all.zip diff --git a/lib/build.gradle b/lib/build.gradle index 52cad1f..2252e19 100644 --- a/lib/build.gradle +++ b/lib/build.gradle @@ -34,7 +34,7 @@ dependencies { implementation rootProject.ext.androidXAnnotation implementation rootProject.ext.androidXAppcompat - testImplementation 'junit:junit:4.13' + testImplementation rootProject.ext.junit testImplementation rootProject.ext.mockito testImplementation rootProject.ext.robolectric testImplementation rootProject.ext.khronosOpenGLApi diff --git a/lib/src/main/java/com/tbruyelle/rxpermissions3/Permission.java b/lib/src/main/java/com/tbruyelle/rxpermissions3/Permission.java index a3ae490..5e9d915 100644 --- a/lib/src/main/java/com/tbruyelle/rxpermissions3/Permission.java +++ b/lib/src/main/java/com/tbruyelle/rxpermissions3/Permission.java @@ -3,9 +3,6 @@ import java.util.List; import io.reactivex.rxjava3.core.Observable; -import io.reactivex.rxjava3.functions.BiConsumer; -import io.reactivex.rxjava3.functions.Function; -import io.reactivex.rxjava3.functions.Predicate; public class Permission { public final String name; @@ -61,40 +58,27 @@ public String toString() { private String combineName(List permissions) { return Observable.fromIterable(permissions) - .map(new Function() { - @Override - public String apply(Permission permission) throws Exception { - return permission.name; + .map(permission -> permission.name) + .collectInto(new StringBuilder(), (s, s2) -> { + if (s.length() == 0) { + s.append(s2); + } else { + s.append(", ").append(s2); } - }).collectInto(new StringBuilder(), new BiConsumer() { - @Override - public void accept(StringBuilder s, String s2) throws Exception { - if (s.length() == 0) { - s.append(s2); - } else { - s.append(", ").append(s2); - } - } - }).blockingGet().toString(); + }) + .blockingGet() + .toString(); } private Boolean combineGranted(List permissions) { return Observable.fromIterable(permissions) - .all(new Predicate() { - @Override - public boolean test(Permission permission) throws Exception { - return permission.granted; - } - }).blockingGet(); + .all(permission -> permission.granted) + .blockingGet(); } private Boolean combineShouldShowRequestPermissionRationale(List permissions) { return Observable.fromIterable(permissions) - .any(new Predicate() { - @Override - public boolean test(Permission permission) throws Exception { - return permission.shouldShowRequestPermissionRationale; - } - }).blockingGet(); + .any(permission -> permission.shouldShowRequestPermissionRationale) + .blockingGet(); } } diff --git a/lib/src/main/java/com/tbruyelle/rxpermissions3/RxPermissions.java b/lib/src/main/java/com/tbruyelle/rxpermissions3/RxPermissions.java index fff1a96..c944e7c 100644 --- a/lib/src/main/java/com/tbruyelle/rxpermissions3/RxPermissions.java +++ b/lib/src/main/java/com/tbruyelle/rxpermissions3/RxPermissions.java @@ -21,6 +21,7 @@ import androidx.annotation.NonNull; import androidx.annotation.VisibleForTesting; +import androidx.core.app.ActivityCompat; import androidx.fragment.app.FragmentActivity; import androidx.fragment.app.Fragment; import androidx.fragment.app.FragmentManager; @@ -29,9 +30,7 @@ import java.util.List; import io.reactivex.rxjava3.core.Observable; -import io.reactivex.rxjava3.core.ObservableSource; import io.reactivex.rxjava3.core.ObservableTransformer; -import io.reactivex.rxjava3.functions.Function; import io.reactivex.rxjava3.subjects.PublishSubject; public class RxPermissions { @@ -97,32 +96,24 @@ public void setLogging(boolean logging) { */ @SuppressWarnings("WeakerAccess") public ObservableTransformer ensure(final String... permissions) { - return new ObservableTransformer() { - @Override - public ObservableSource apply(Observable o) { - return request(o, permissions) - // Transform Observable to Observable - .buffer(permissions.length) - .flatMap(new Function, ObservableSource>() { - @Override - public ObservableSource apply(List permissions) { - if (permissions.isEmpty()) { - // Occurs during orientation change, when the subject receives onComplete. - // In that case we don't want to propagate that empty list to the - // subscriber, only the onComplete. - return Observable.empty(); - } - // Return true if all permissions are granted. - for (Permission p : permissions) { - if (!p.granted) { - return Observable.just(false); - } - } - return Observable.just(true); - } - }); - } - }; + return observable -> request(observable, permissions) + // Transform Observable to Observable + .buffer(permissions.length) + .flatMap(permissionsList -> { + if (permissionsList.isEmpty()) { + // Occurs during orientation change, when the subject receives onComplete. + // In that case we don't want to propagate that empty list to the + // subscriber, only the onComplete. + return Observable.empty(); + } + // Return true if all permissions are granted. + for (Permission p : permissionsList) { + if (!p.granted) { + return Observable.just(false); + } + } + return Observable.just(true); + }); } /** @@ -134,12 +125,7 @@ public ObservableSource apply(List permissions) { */ @SuppressWarnings("WeakerAccess") public ObservableTransformer ensureEach(final String... permissions) { - return new ObservableTransformer() { - @Override - public ObservableSource apply(Observable o) { - return request(o, permissions); - } - }; + return observable -> request(observable, permissions); } /** @@ -150,22 +136,14 @@ public ObservableSource apply(Observable o) { * to ask the user if he allows the permissions. */ public ObservableTransformer ensureEachCombined(final String... permissions) { - return new ObservableTransformer() { - @Override - public ObservableSource apply(Observable o) { - return request(o, permissions) - .buffer(permissions.length) - .flatMap(new Function, ObservableSource>() { - @Override - public ObservableSource apply(List permissions) { - if (permissions.isEmpty()) { - return Observable.empty(); - } - return Observable.just(new Permission(permissions)); - } - }); - } - }; + return observable -> request(observable, permissions) + .buffer(permissions.length) + .flatMap(permissionsList -> { + if (permissionsList.isEmpty()) { + return Observable.empty(); + } + return Observable.just(new Permission(permissionsList)); + }); } /** @@ -199,12 +177,7 @@ private Observable request(final Observable trigger, final String throw new IllegalArgumentException("RxPermissions.request/requestEach requires at least one input permission"); } return oneOf(trigger, pending(permissions)) - .flatMap(new Function>() { - @Override - public Observable apply(Object o) { - return requestImplementation(permissions); - } - }); + .flatMap(object -> requestImplementation(permissions)); } private Observable pending(final String... permissions) { @@ -286,7 +259,7 @@ public Observable shouldShowRequestPermissionRationale(final Activity a @TargetApi(Build.VERSION_CODES.M) private boolean shouldShowRequestPermissionRationaleImplementation(final Activity activity, final String... permissions) { for (String p : permissions) { - if (!isGranted(p) && !activity.shouldShowRequestPermissionRationale(p)) { + if (!isGranted(p) && !ActivityCompat.shouldShowRequestPermissionRationale(activity,p)) { return false; } } diff --git a/lib/src/main/java/com/tbruyelle/rxpermissions3/RxPermissionsFragment.java b/lib/src/main/java/com/tbruyelle/rxpermissions3/RxPermissionsFragment.java index a6f5439..061739d 100644 --- a/lib/src/main/java/com/tbruyelle/rxpermissions3/RxPermissionsFragment.java +++ b/lib/src/main/java/com/tbruyelle/rxpermissions3/RxPermissionsFragment.java @@ -86,7 +86,7 @@ boolean isRevoked(String permission) { if (fragmentActivity == null) { throw new IllegalStateException("This fragment must be attached to an activity."); } - return fragmentActivity.getPackageManager().isPermissionRevokedByPolicy(permission, getActivity().getPackageName()); + return fragmentActivity.getPackageManager().isPermissionRevokedByPolicy(permission, fragmentActivity.getPackageName()); } public void setLogging(boolean logging) { diff --git a/lib/src/test/java/com/tbruyelle/rxpermissions3/RxPermissionsTest.java b/lib/src/test/java/com/tbruyelle/rxpermissions3/RxPermissionsTest.java index 1ddad4f..1b8db0b 100644 --- a/lib/src/test/java/com/tbruyelle/rxpermissions3/RxPermissionsTest.java +++ b/lib/src/test/java/com/tbruyelle/rxpermissions3/RxPermissionsTest.java @@ -40,8 +40,8 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; -import static org.mockito.Matchers.anyString; -import static org.mockito.Matchers.eq; +import static org.mockito.ArgumentMatchers.anyString; +import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.doCallRealMethod; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.mock; diff --git a/sample/build.gradle b/sample/build.gradle index 6193c17..f22d11c 100644 --- a/sample/build.gradle +++ b/sample/build.gradle @@ -28,6 +28,6 @@ dependencies { implementation 'com.jakewharton.rxbinding4:rxbinding:4.0.0' implementation rootProject.ext.androidXAppcompat - testImplementation 'junit:junit:4.13' + testImplementation rootProject.ext.junit testImplementation rootProject.ext.mockito } diff --git a/sample/src/main/java/com/tbruyelle/rxpermissions3/sample/MainActivity.java b/sample/src/main/java/com/tbruyelle/rxpermissions3/sample/MainActivity.java index 5f5a1de..4cce3f4 100644 --- a/sample/src/main/java/com/tbruyelle/rxpermissions3/sample/MainActivity.java +++ b/sample/src/main/java/com/tbruyelle/rxpermissions3/sample/MainActivity.java @@ -10,14 +10,11 @@ import androidx.appcompat.app.AppCompatActivity; import com.jakewharton.rxbinding4.view.RxView; -import com.tbruyelle.rxpermissions3.Permission; import com.tbruyelle.rxpermissions3.RxPermissions; import java.io.IOException; import io.reactivex.rxjava3.disposables.Disposable; -import io.reactivex.rxjava3.functions.Action; -import io.reactivex.rxjava3.functions.Consumer; public class MainActivity extends AppCompatActivity { @@ -40,45 +37,32 @@ protected void onCreate(Bundle savedInstanceState) { disposable = RxView.clicks(findViewById(R.id.enableCamera)) // Ask for permissions when button is clicked .compose(rxPermissions.ensureEach(permission.CAMERA)) - .subscribe(new Consumer() { - @Override - public void accept(Permission permission) { - Log.i(TAG, "Permission result " + permission); - if (permission.granted) { - releaseCamera(); - camera = Camera.open(0); - try { - camera.setPreviewDisplay(surfaceView.getHolder()); - camera.startPreview(); - } catch (IOException e) { - Log.e(TAG, "Error while trying to display the camera preview", e); - } - } else if (permission.shouldShowRequestPermissionRationale) { - // Denied permission without ask never again - Toast.makeText(MainActivity.this, - "Denied permission without ask never again", - Toast.LENGTH_SHORT).show(); - } else { - // Denied permission with ask never again - // Need to go to the settings - Toast.makeText(MainActivity.this, - "Permission denied, can't enable the camera", - Toast.LENGTH_SHORT).show(); - } - } - }, - new Consumer() { - @Override - public void accept(Throwable t) { - Log.e(TAG, "onError", t); - } - }, - new Action() { - @Override - public void run() { - Log.i(TAG, "OnComplete"); - } - }); + .subscribe(permission -> { + Log.i(TAG, "Permission result " + permission); + if (permission.granted) { + releaseCamera(); + camera = Camera.open(0); + try { + camera.setPreviewDisplay(surfaceView.getHolder()); + camera.startPreview(); + } catch (IOException e) { + Log.e(TAG, "Error while trying to display the camera preview", e); + } + } else if (permission.shouldShowRequestPermissionRationale) { + // Denied permission without ask never again + Toast.makeText(MainActivity.this, + "Denied permission without ask never again", + Toast.LENGTH_SHORT).show(); + } else { + // Denied permission with ask never again + // Need to go to the settings + Toast.makeText(MainActivity.this, + "Permission denied, can't enable the camera", + Toast.LENGTH_SHORT).show(); + } + }, + t -> Log.e(TAG, "onError", t), + () -> Log.i(TAG, "OnComplete")); } @Override diff --git a/sample/src/test/java/com/tbruyelle/rxpermissions/sample/RxPermissionsSampleTest.java b/sample/src/test/java/com/tbruyelle/rxpermissions/sample/RxPermissionsSampleTest.java index 12e41cc..24b1dc2 100644 --- a/sample/src/test/java/com/tbruyelle/rxpermissions/sample/RxPermissionsSampleTest.java +++ b/sample/src/test/java/com/tbruyelle/rxpermissions/sample/RxPermissionsSampleTest.java @@ -2,7 +2,6 @@ import android.Manifest; import android.annotation.TargetApi; -import android.app.Activity; import android.os.Build; import com.tbruyelle.rxpermissions3.Permission; @@ -28,7 +27,7 @@ public class RxPermissionsSampleTest { @Before public void setUp() { - MockitoAnnotations.initMocks(this); + MockitoAnnotations.openMocks(this); } @Test