Skip to content
This repository was archived by the owner on Feb 4, 2024. It is now read-only.

Commit d31e5dd

Browse files
authored
Support fragment (#232)
* Update libraries to latest versions. * Move from bintray to jitpack. * Update travis file. * Make RxPermissionsFragment inherit from support. * Move from Bintray to JitPack. (#231) * Update libraries to latest versions. * Move from bintray to jitpack. * Update travis file. * Make RxPermissionsFragment inherit from support. * Make RxPermissionsFragment inherit from support. * Prepare version to 0.10.0.
1 parent 81438b6 commit d31e5dd

File tree

6 files changed

+42
-30
lines changed

6 files changed

+42
-30
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ allprojects {
1717
}
1818
1919
dependencies {
20-
implementation 'com.github.tbruyelle:rxpermissions:0.9.6'
20+
implementation 'com.github.tbruyelle:rxpermissions:0.10.0'
2121
}
2222
```
2323

build.gradle

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ ext {
2626
supportLibraryVersion = '27.1.1'
2727
appCompat = "com.android.support:appcompat-v7:$supportLibraryVersion"
2828
supportAnnotations = "com.android.support:support-annotations:$supportLibraryVersion"
29+
supportFragment = "com.android.support:support-fragment:$supportLibraryVersion"
2930
junit = 'junit:junit:4.12'
3031
mockito = 'org.mockito:mockito-core:1.10.19'
3132

lib/build.gradle

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ android {
2727
dependencies {
2828
implementation rootProject.ext.rxJava
2929
implementation rootProject.ext.supportAnnotations
30+
implementation rootProject.ext.supportFragment
3031

3132
testImplementation rootProject.ext.junit
3233
testImplementation rootProject.ext.mockito

lib/src/main/java/com/tbruyelle/rxpermissions2/RxPermissions.java

Lines changed: 13 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,10 @@
1616

1717
import android.annotation.TargetApi;
1818
import android.app.Activity;
19-
import android.app.FragmentManager;
2019
import android.os.Build;
2120
import android.support.annotation.NonNull;
21+
import android.support.v4.app.FragmentActivity;
22+
import android.support.v4.app.FragmentManager;
2223
import android.text.TextUtils;
2324

2425
import java.util.ArrayList;
@@ -27,9 +28,6 @@
2728
import io.reactivex.Observable;
2829
import io.reactivex.ObservableSource;
2930
import io.reactivex.ObservableTransformer;
30-
import io.reactivex.Single;
31-
import io.reactivex.SingleSource;
32-
import io.reactivex.SingleTransformer;
3331
import io.reactivex.functions.Function;
3432
import io.reactivex.subjects.PublishSubject;
3533

@@ -40,16 +38,16 @@ public class RxPermissions {
4038

4139
RxPermissionsFragment mRxPermissionsFragment;
4240

43-
public RxPermissions(@NonNull Activity activity) {
41+
public RxPermissions(@NonNull FragmentActivity activity) {
4442
mRxPermissionsFragment = getRxPermissionsFragment(activity);
4543
}
4644

47-
private RxPermissionsFragment getRxPermissionsFragment(Activity activity) {
45+
private RxPermissionsFragment getRxPermissionsFragment(@NonNull FragmentActivity activity) {
4846
RxPermissionsFragment rxPermissionsFragment = findRxPermissionsFragment(activity);
4947
boolean isNewInstance = rxPermissionsFragment == null;
5048
if (isNewInstance) {
5149
rxPermissionsFragment = new RxPermissionsFragment();
52-
FragmentManager fragmentManager = activity.getFragmentManager();
50+
FragmentManager fragmentManager = activity.getSupportFragmentManager();
5351
fragmentManager
5452
.beginTransaction()
5553
.add(rxPermissionsFragment, TAG)
@@ -59,8 +57,8 @@ private RxPermissionsFragment getRxPermissionsFragment(Activity activity) {
5957
return rxPermissionsFragment;
6058
}
6159

62-
private RxPermissionsFragment findRxPermissionsFragment(Activity activity) {
63-
return (RxPermissionsFragment) activity.getFragmentManager().findFragmentByTag(TAG);
60+
private RxPermissionsFragment findRxPermissionsFragment(@NonNull FragmentActivity activity) {
61+
return (RxPermissionsFragment) activity.getSupportFragmentManager().findFragmentByTag(TAG);
6462
}
6563

6664
public void setLogging(boolean logging) {
@@ -84,7 +82,7 @@ public ObservableSource<Boolean> apply(Observable<T> o) {
8482
.buffer(permissions.length)
8583
.flatMap(new Function<List<Permission>, ObservableSource<Boolean>>() {
8684
@Override
87-
public ObservableSource<Boolean> apply(List<Permission> permissions) throws Exception {
85+
public ObservableSource<Boolean> apply(List<Permission> permissions) {
8886
if (permissions.isEmpty()) {
8987
// Occurs during orientation change, when the subject receives onComplete.
9088
// In that case we don't want to propagate that empty list to the
@@ -136,7 +134,7 @@ public ObservableSource<Permission> apply(Observable<T> o) {
136134
.buffer(permissions.length)
137135
.flatMap(new Function<List<Permission>, ObservableSource<Permission>>() {
138136
@Override
139-
public ObservableSource<Permission> apply(List<Permission> permissions) throws Exception {
137+
public ObservableSource<Permission> apply(List<Permission> permissions) {
140138
if (permissions.isEmpty()) {
141139
return Observable.empty();
142140
}
@@ -169,18 +167,18 @@ public Observable<Permission> requestEach(final String... permissions) {
169167
* Request permissions immediately, <b>must be invoked during initialization phase
170168
* of your application</b>.
171169
*/
172-
public Observable<Permission> requestEachCombined(final String... permissions){
170+
public Observable<Permission> requestEachCombined(final String... permissions) {
173171
return Observable.just(TRIGGER).compose(ensureEachCombined(permissions));
174172
}
175173

176-
Observable<Permission> request(final Observable<?> trigger, final String... permissions) {
174+
private Observable<Permission> request(final Observable<?> trigger, final String... permissions) {
177175
if (permissions == null || permissions.length == 0) {
178176
throw new IllegalArgumentException("RxPermissions.request/requestEach requires at least one input permission");
179177
}
180178
return oneOf(trigger, pending(permissions))
181179
.flatMap(new Function<Object, Observable<Permission>>() {
182180
@Override
183-
public Observable<Permission> apply(Object o) throws Exception {
181+
public Observable<Permission> apply(Object o) {
184182
return requestImplementation(permissions);
185183
}
186184
});
@@ -203,7 +201,7 @@ private Observable<?> oneOf(Observable<?> trigger, Observable<?> pending) {
203201
}
204202

205203
@TargetApi(Build.VERSION_CODES.M)
206-
Observable<Permission> requestImplementation(final String... permissions) {
204+
private Observable<Permission> requestImplementation(final String... permissions) {
207205
List<Observable<Permission>> list = new ArrayList<>(permissions.length);
208206
List<String> unrequestedPermissions = new ArrayList<>();
209207

lib/src/main/java/com/tbruyelle/rxpermissions2/RxPermissionsFragment.java

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,19 @@
11
package com.tbruyelle.rxpermissions2;
22

33
import android.annotation.TargetApi;
4-
import android.app.Fragment;
54
import android.content.pm.PackageManager;
65
import android.os.Build;
76
import android.os.Bundle;
87
import android.support.annotation.NonNull;
8+
import android.support.v4.app.Fragment;
9+
import android.support.v4.app.FragmentActivity;
910
import android.util.Log;
10-
import io.reactivex.subjects.PublishSubject;
11+
1112
import java.util.HashMap;
1213
import java.util.Map;
1314

15+
import io.reactivex.subjects.PublishSubject;
16+
1417
public class RxPermissionsFragment extends Fragment {
1518

1619
private static final int PERMISSIONS_REQUEST_CODE = 42;
@@ -68,12 +71,20 @@ void onRequestPermissionsResult(String permissions[], int[] grantResults, boolea
6871

6972
@TargetApi(Build.VERSION_CODES.M)
7073
boolean isGranted(String permission) {
71-
return getActivity().checkSelfPermission(permission) == PackageManager.PERMISSION_GRANTED;
74+
final FragmentActivity fragmentActivity = getActivity();
75+
if (fragmentActivity == null) {
76+
throw new IllegalStateException("This fragment must be attached to an activity.");
77+
}
78+
return fragmentActivity.checkSelfPermission(permission) == PackageManager.PERMISSION_GRANTED;
7279
}
7380

7481
@TargetApi(Build.VERSION_CODES.M)
7582
boolean isRevoked(String permission) {
76-
return getActivity().getPackageManager().isPermissionRevokedByPolicy(permission, getActivity().getPackageName());
83+
final FragmentActivity fragmentActivity = getActivity();
84+
if (fragmentActivity == null) {
85+
throw new IllegalStateException("This fragment must be attached to an activity.");
86+
}
87+
return fragmentActivity.getPackageManager().isPermissionRevokedByPolicy(permission, getActivity().getPackageName());
7788
}
7889

7990
public void setLogging(boolean logging) {
@@ -88,8 +99,8 @@ public boolean containsByPermission(@NonNull String permission) {
8899
return mSubjects.containsKey(permission);
89100
}
90101

91-
public PublishSubject<Permission> setSubjectForPermission(@NonNull String permission, @NonNull PublishSubject<Permission> subject) {
92-
return mSubjects.put(permission, subject);
102+
public void setSubjectForPermission(@NonNull String permission, @NonNull PublishSubject<Permission> subject) {
103+
mSubjects.put(permission, subject);
93104
}
94105

95106
void log(String message) {

lib/src/test/java/com/tbruyelle/rxpermissions2/RxPermissionsTest.java

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import android.app.Activity;
2020
import android.content.pm.PackageManager;
2121
import android.os.Build;
22+
import android.support.v4.app.FragmentActivity;
2223

2324
import org.junit.Before;
2425
import org.junit.Test;
@@ -27,8 +28,8 @@
2728
import org.mockito.Matchers;
2829
import org.robolectric.Robolectric;
2930
import org.robolectric.RobolectricTestRunner;
31+
import org.robolectric.android.controller.ActivityController;
3032
import org.robolectric.annotation.Config;
31-
import org.robolectric.util.ActivityController;
3233

3334
import io.reactivex.Observable;
3435
import io.reactivex.observers.TestObserver;
@@ -50,13 +51,13 @@
5051
@Config(constants = BuildConfig.class, sdk = Build.VERSION_CODES.M)
5152
public class RxPermissionsTest {
5253

53-
private Activity mActivity;
54+
private FragmentActivity mActivity;
5455

5556
private RxPermissions mRxPermissions;
5657

5758
@Before
5859
public void setup() {
59-
ActivityController<Activity> activityController = Robolectric.buildActivity(Activity.class);
60+
ActivityController<FragmentActivity> activityController = Robolectric.buildActivity(FragmentActivity.class);
6061
mActivity = spy(activityController.setup().get());
6162
mRxPermissions = spy(new RxPermissions(mActivity));
6263
mRxPermissions.mRxPermissionsFragment = spy(mRxPermissions.mRxPermissionsFragment);
@@ -521,7 +522,7 @@ public void shouldShowRequestPermissionRationale_allDenied_allRationale() {
521522
when(activity.shouldShowRequestPermissionRationale(anyString())).thenReturn(true);
522523

523524
TestObserver<Boolean> sub = new TestObserver<>();
524-
mRxPermissions.shouldShowRequestPermissionRationale(activity, new String[]{"p1", "p2"})
525+
mRxPermissions.shouldShowRequestPermissionRationale(activity, "p1", "p2")
525526
.subscribe(sub);
526527

527528
sub.assertComplete();
@@ -537,7 +538,7 @@ public void shouldShowRequestPermissionRationale_allDenied_oneRationale() {
537538
when(activity.shouldShowRequestPermissionRationale("p1")).thenReturn(true);
538539

539540
TestObserver<Boolean> sub = new TestObserver<>();
540-
mRxPermissions.shouldShowRequestPermissionRationale(activity, new String[]{"p1", "p2"})
541+
mRxPermissions.shouldShowRequestPermissionRationale(activity, "p1", "p2")
541542
.subscribe(sub);
542543

543544
sub.assertComplete();
@@ -552,7 +553,7 @@ public void shouldShowRequestPermissionRationale_allDenied_noRationale() {
552553
Activity activity = mock(Activity.class);
553554

554555
TestObserver<Boolean> sub = new TestObserver<>();
555-
mRxPermissions.shouldShowRequestPermissionRationale(activity, new String[]{"p1", "p2"})
556+
mRxPermissions.shouldShowRequestPermissionRationale(activity, "p1", "p2")
556557
.subscribe(sub);
557558

558559
sub.assertComplete();
@@ -569,7 +570,7 @@ public void shouldShowRequestPermissionRationale_oneDeniedRationale() {
569570
when(activity.shouldShowRequestPermissionRationale("p2")).thenReturn(true);
570571

571572
TestObserver<Boolean> sub = new TestObserver<>();
572-
mRxPermissions.shouldShowRequestPermissionRationale(activity, new String[]{"p1", "p2"})
573+
mRxPermissions.shouldShowRequestPermissionRationale(activity, "p1", "p2")
573574
.subscribe(sub);
574575

575576
sub.assertComplete();
@@ -585,7 +586,7 @@ public void shouldShowRequestPermissionRationale_oneDeniedNotRationale() {
585586
when(mRxPermissions.isGranted("p2")).thenReturn(true);
586587

587588
TestObserver<Boolean> sub = new TestObserver<>();
588-
mRxPermissions.shouldShowRequestPermissionRationale(activity, new String[]{"p1", "p2"})
589+
mRxPermissions.shouldShowRequestPermissionRationale(activity, "p1", "p2")
589590
.subscribe(sub);
590591

591592
sub.assertComplete();

0 commit comments

Comments
 (0)