From fc0c68444101c8a20885f5afe3aeae4518ee2b10 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Kamil=20Ga=C5=82uszka?= <kamil.galuszka@solution4future.com>
Date: Sat, 29 Aug 2020 22:24:48 +0200
Subject: [PATCH] refactor: small adjustments and removal of some deprecations

---
 build.gradle                                  | 12 +--
 gradle/wrapper/gradle-wrapper.properties      |  2 +-
 lib/build.gradle                              |  2 +-
 .../tbruyelle/rxpermissions3/Permission.java  | 42 +++------
 .../rxpermissions3/RxPermissions.java         | 87 +++++++------------
 .../rxpermissions3/RxPermissionsFragment.java |  2 +-
 .../rxpermissions3/RxPermissionsTest.java     |  4 +-
 sample/build.gradle                           |  2 +-
 .../rxpermissions3/sample/MainActivity.java   | 68 ++++++---------
 .../sample/RxPermissionsSampleTest.java       |  3 +-
 10 files changed, 82 insertions(+), 142 deletions(-)

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<Permission> permissions) {
         return Observable.fromIterable(permissions)
-                .map(new Function<Permission, String>() {
-                    @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<StringBuilder, String>() {
-                    @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<Permission> permissions) {
         return Observable.fromIterable(permissions)
-                .all(new Predicate<Permission>() {
-                    @Override
-                    public boolean test(Permission permission) throws Exception {
-                        return permission.granted;
-                    }
-                }).blockingGet();
+                .all(permission -> permission.granted)
+                .blockingGet();
     }
 
     private Boolean combineShouldShowRequestPermissionRationale(List<Permission> permissions) {
         return Observable.fromIterable(permissions)
-                .any(new Predicate<Permission>() {
-                    @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 <T> ObservableTransformer<T, Boolean> ensure(final String... permissions) {
-        return new ObservableTransformer<T, Boolean>() {
-            @Override
-            public ObservableSource<Boolean> apply(Observable<T> o) {
-                return request(o, permissions)
-                        // Transform Observable<Permission> to Observable<Boolean>
-                        .buffer(permissions.length)
-                        .flatMap(new Function<List<Permission>, ObservableSource<Boolean>>() {
-                            @Override
-                            public ObservableSource<Boolean> apply(List<Permission> 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<Permission> to Observable<Boolean>
+                .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<Boolean> apply(List<Permission> permissions) {
      */
     @SuppressWarnings("WeakerAccess")
     public <T> ObservableTransformer<T, Permission> ensureEach(final String... permissions) {
-        return new ObservableTransformer<T, Permission>() {
-            @Override
-            public ObservableSource<Permission> apply(Observable<T> o) {
-                return request(o, permissions);
-            }
-        };
+        return observable -> request(observable, permissions);
     }
 
     /**
@@ -150,22 +136,14 @@ public ObservableSource<Permission> apply(Observable<T> o) {
      * to ask the user if he allows the permissions.
      */
     public <T> ObservableTransformer<T, Permission> ensureEachCombined(final String... permissions) {
-        return new ObservableTransformer<T, Permission>() {
-            @Override
-            public ObservableSource<Permission> apply(Observable<T> o) {
-                return request(o, permissions)
-                        .buffer(permissions.length)
-                        .flatMap(new Function<List<Permission>, ObservableSource<Permission>>() {
-                            @Override
-                            public ObservableSource<Permission> apply(List<Permission> 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<Permission> 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<Object, Observable<Permission>>() {
-                    @Override
-                    public Observable<Permission> apply(Object o) {
-                        return requestImplementation(permissions);
-                    }
-                });
+                .flatMap(object -> requestImplementation(permissions));
     }
 
     private Observable<?> pending(final String... permissions) {
@@ -286,7 +259,7 @@ public Observable<Boolean> 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<Permission>() {
-                               @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<Throwable>() {
-                            @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