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

Commit 10c5b53

Browse files
authored
Lazy initialization (#233)
* Update libraries to latest versions. * Move from bintray to jitpack. * Update travis file. * Make RxPermissionsFragment inherit from support. * Make RxPermissionsFragment inherit from support. * Make RxPermissionsFragment inherit from support. * Prepare version to 0.10.0. * Lazy RxPermissionsFragment initialization. * Lazy RxPermissionsFragment initialization.
1 parent d31e5dd commit 10c5b53

File tree

2 files changed

+38
-17
lines changed

2 files changed

+38
-17
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.10.0'
20+
implementation 'com.github.tbruyelle:rxpermissions:0.10.1'
2121
}
2222
```
2323

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

Lines changed: 37 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -33,13 +33,30 @@
3333

3434
public class RxPermissions {
3535

36-
static final String TAG = "RxPermissions";
36+
static final String TAG = RxPermissions.class.getSimpleName();
3737
static final Object TRIGGER = new Object();
3838

39-
RxPermissionsFragment mRxPermissionsFragment;
39+
private final Lazy<RxPermissionsFragment> mRxPermissionsFragment;
4040

41-
public RxPermissions(@NonNull FragmentActivity activity) {
42-
mRxPermissionsFragment = getRxPermissionsFragment(activity);
41+
public RxPermissions(@NonNull final FragmentActivity activity) {
42+
mRxPermissionsFragment = getLazySingleton(activity);
43+
}
44+
45+
@NonNull
46+
private Lazy<RxPermissionsFragment> getLazySingleton(@NonNull final FragmentActivity activity) {
47+
return new Lazy<RxPermissionsFragment>() {
48+
49+
private RxPermissionsFragment rxPermissionsFragment;
50+
51+
@Override
52+
public synchronized RxPermissionsFragment get() {
53+
if (rxPermissionsFragment == null) {
54+
rxPermissionsFragment = getRxPermissionsFragment(activity);
55+
}
56+
return rxPermissionsFragment;
57+
}
58+
59+
};
4360
}
4461

4562
private RxPermissionsFragment getRxPermissionsFragment(@NonNull FragmentActivity activity) {
@@ -51,8 +68,7 @@ private RxPermissionsFragment getRxPermissionsFragment(@NonNull FragmentActivity
5168
fragmentManager
5269
.beginTransaction()
5370
.add(rxPermissionsFragment, TAG)
54-
.commitAllowingStateLoss();
55-
fragmentManager.executePendingTransactions();
71+
.commitNow();
5672
}
5773
return rxPermissionsFragment;
5874
}
@@ -62,7 +78,7 @@ private RxPermissionsFragment findRxPermissionsFragment(@NonNull FragmentActivit
6278
}
6379

6480
public void setLogging(boolean logging) {
65-
mRxPermissionsFragment.setLogging(logging);
81+
mRxPermissionsFragment.get().setLogging(logging);
6682
}
6783

6884
/**
@@ -186,7 +202,7 @@ public Observable<Permission> apply(Object o) {
186202

187203
private Observable<?> pending(final String... permissions) {
188204
for (String p : permissions) {
189-
if (!mRxPermissionsFragment.containsByPermission(p)) {
205+
if (!mRxPermissionsFragment.get().containsByPermission(p)) {
190206
return Observable.empty();
191207
}
192208
}
@@ -208,7 +224,7 @@ private Observable<Permission> requestImplementation(final String... permissions
208224
// In case of multiple permissions, we create an Observable for each of them.
209225
// At the end, the observables are combined to have a unique response.
210226
for (String permission : permissions) {
211-
mRxPermissionsFragment.log("Requesting permission " + permission);
227+
mRxPermissionsFragment.get().log("Requesting permission " + permission);
212228
if (isGranted(permission)) {
213229
// Already granted, or not Android M
214230
// Return a granted Permission object.
@@ -222,12 +238,12 @@ private Observable<Permission> requestImplementation(final String... permissions
222238
continue;
223239
}
224240

225-
PublishSubject<Permission> subject = mRxPermissionsFragment.getSubjectByPermission(permission);
241+
PublishSubject<Permission> subject = mRxPermissionsFragment.get().getSubjectByPermission(permission);
226242
// Create a new subject if not exists
227243
if (subject == null) {
228244
unrequestedPermissions.add(permission);
229245
subject = PublishSubject.create();
230-
mRxPermissionsFragment.setSubjectForPermission(permission, subject);
246+
mRxPermissionsFragment.get().setSubjectForPermission(permission, subject);
231247
}
232248

233249
list.add(subject);
@@ -272,8 +288,8 @@ private boolean shouldShowRequestPermissionRationaleImplementation(final Activit
272288

273289
@TargetApi(Build.VERSION_CODES.M)
274290
void requestPermissionsFromFragment(String[] permissions) {
275-
mRxPermissionsFragment.log("requestPermissionsFromFragment " + TextUtils.join(", ", permissions));
276-
mRxPermissionsFragment.requestPermissions(permissions);
291+
mRxPermissionsFragment.get().log("requestPermissionsFromFragment " + TextUtils.join(", ", permissions));
292+
mRxPermissionsFragment.get().requestPermissions(permissions);
277293
}
278294

279295
/**
@@ -283,7 +299,7 @@ void requestPermissionsFromFragment(String[] permissions) {
283299
*/
284300
@SuppressWarnings("WeakerAccess")
285301
public boolean isGranted(String permission) {
286-
return !isMarshmallow() || mRxPermissionsFragment.isGranted(permission);
302+
return !isMarshmallow() || mRxPermissionsFragment.get().isGranted(permission);
287303
}
288304

289305
/**
@@ -293,15 +309,20 @@ public boolean isGranted(String permission) {
293309
*/
294310
@SuppressWarnings("WeakerAccess")
295311
public boolean isRevoked(String permission) {
296-
return isMarshmallow() && mRxPermissionsFragment.isRevoked(permission);
312+
return isMarshmallow() && mRxPermissionsFragment.get().isRevoked(permission);
297313
}
298314

299315
boolean isMarshmallow() {
300316
return Build.VERSION.SDK_INT >= Build.VERSION_CODES.M;
301317
}
302318

303319
void onRequestPermissionsResult(String permissions[], int[] grantResults) {
304-
mRxPermissionsFragment.onRequestPermissionsResult(permissions, grantResults, new boolean[permissions.length]);
320+
mRxPermissionsFragment.get().onRequestPermissionsResult(permissions, grantResults, new boolean[permissions.length]);
321+
}
322+
323+
@FunctionalInterface
324+
public interface Lazy<V> {
325+
V get();
305326
}
306327

307328
}

0 commit comments

Comments
 (0)