Skip to content

Commit f68c3e6

Browse files
authored
Merge pull request #7 from anotherdev/pk/bugfix-sync-auth-state
Fixed sync auth state not broadcast to all listeners
2 parents bcc941a + b6d4281 commit f68c3e6

File tree

7 files changed

+39
-32
lines changed

7 files changed

+39
-32
lines changed

app/src/main/java/com/anotherdev/sample/firebase/auth/MainActivity.java

-12
Original file line numberDiff line numberDiff line change
@@ -7,16 +7,13 @@
77

88
import androidx.annotation.NonNull;
99

10-
import com.anotherdev.firebase.auth.FirebaseAuthRest;
11-
import com.anotherdev.firebase.auth.util.RxUtil;
1210
import com.anotherdev.sample.firebase.auth.intent.LoginIntent;
1311
import com.google.firebase.FirebaseApp;
1412
import com.google.firebase.database.DatabaseReference;
1513
import com.google.firebase.database.FirebaseDatabase;
1614
import com.google.firebase.database.ValueEventListener;
1715

1816
import butterknife.BindView;
19-
import io.reactivex.rxjava3.internal.functions.Functions;
2017
import studio.carbonylgroup.textfieldboxes.ExtendedEditText;
2118
import studio.carbonylgroup.textfieldboxes.TextFieldBoxes;
2219

@@ -63,15 +60,6 @@ protected void onCreate(Bundle savedInstanceState) {
6360
.addValueEventListener(new FarValueEventListener(privateTextFieldBoxes, privateEditText));
6461
globalPublicListener = globalPublicPath
6562
.addValueEventListener(new FarValueEventListener(globalPublicTextFieldBoxes, globalPublicEditText));
66-
67-
onDestroy.add(FirebaseAuthRest.getInstance(app)
68-
.authStateChanges()
69-
.doOnNext(auth -> {
70-
Log.w(TAG, "authStateChanges() isSignedIn: " + auth.isSignedIn());
71-
rtdb.goOffline();
72-
rtdb.goOnline();
73-
})
74-
.subscribe(Functions.emptyConsumer(), RxUtil.ON_ERROR_LOG_V3));
7563
}
7664

7765
@Override

build.gradle

+1-1
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ buildscript {
88

99
}
1010
dependencies {
11-
classpath 'com.android.tools.build:gradle:4.0.0'
11+
classpath 'com.android.tools.build:gradle:4.0.1'
1212

1313
// NOTE: Do not place your application dependencies here; they belong
1414
// in the individual module build.gradle files

buildsystem/dependencies.gradle

+7-7
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ ext {
22
// Manifest version information!
33
def versionMajor = 0
44
def versionMinor = 1
5-
def versionPatch = 5
5+
def versionPatch = 6
66
def versionBuild = 0 // bump for dogfood builds, public betas, etc.
77

88
// Eko SDK version
@@ -26,18 +26,18 @@ ext {
2626

2727
// Libraries
2828
androidxAppCompatVersion = '1.1.0'
29-
androidxCoreKtxVersion = '1.2.0'
29+
androidxCoreKtxVersion = '1.3.1'
3030
androidxLifecycleVersion = '2.2.0'
31-
firebaseBomVersion = '25.3.1'
31+
firebaseBomVersion = '25.6.0'
3232
gsonVersion = '2.8.6'
3333
immutablesVersion = '2.8.2'
34-
okhttpVersion = '4.4.1'
35-
retrofitVersion = '2.7.2'
36-
rxJava3Version = '3.0.1'
34+
okhttpVersion = '4.8.0'
35+
retrofitVersion = '2.9.0'
36+
rxJava3Version = '3.0.4'
3737
rxJavaBridgeVersion = '3.0.0'
3838
timberVersion = '4.7.1'
3939

40-
junitVersion = '4.12'
40+
junitVersion = '4.13'
4141
androidxTestJunitVersion = '1.1.1'
4242
androidxTestEspressoVersion = '3.2.0'
4343
}

firebase-auth-rest/core/build.gradle

+1-1
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ dependencies {
6868
implementation 'com.f2prateek.rx.preferences2:rx-preferences:2.0.0'
6969

7070
implementation "com.github.akarnokd:rxjava3-bridge:3.0.0"
71-
implementation "com.github.akarnokd:rxjava3-retrofit-adapter:3.0.0"
71+
implementation "com.github.akarnokd:rxjava3-retrofit-adapter:3.0.0" // FIXME migrate to official retrofit rxjava 3 adapter
7272

7373
api "com.google.code.gson:gson:$gsonVersion"
7474

firebase-auth-rest/core/src/main/java/com/anotherdev/firebase/auth/FirebaseAuthRest.java

+9-6
Original file line numberDiff line numberDiff line change
@@ -6,23 +6,26 @@
66

77
import java.util.Collection;
88
import java.util.Collections;
9-
import java.util.Map;
109
import java.util.concurrent.ConcurrentHashMap;
1110

1211
public class FirebaseAuthRest {
1312

14-
private static final Map<String, RestAuthTokenRefresher> TOKEN_REFRESHER_MAP = new ConcurrentHashMap<>();
13+
private static final ConcurrentHashMap<String, RestAuthTokenRefresher> TOKEN_REFRESHER_MAP = new ConcurrentHashMap<>();
1514
private static final Collection<RestAuthTokenRefresher> TOKEN_REFRESHER_VIEW =
1615
Collections.unmodifiableCollection(TOKEN_REFRESHER_MAP.values());
1716

1817

1918
public static FirebaseAuth getInstance(FirebaseApp app) {
2019
final String name = app.getName();
21-
final RestAuthProvider auth = new RestAuthProvider(app);
22-
if (!TOKEN_REFRESHER_MAP.containsKey(name)) {
23-
TOKEN_REFRESHER_MAP.put(name, new RestAuthTokenRefresher(auth));
20+
RestAuthTokenRefresher tokenRefresher = TOKEN_REFRESHER_MAP.get(name);
21+
if (tokenRefresher == null) {
22+
RestAuthProvider newAuth = new RestAuthProvider(app);
23+
RestAuthTokenRefresher newTokenRefresher = new RestAuthTokenRefresher(newAuth);
24+
RestAuthTokenRefresher current = TOKEN_REFRESHER_MAP.putIfAbsent(name, newTokenRefresher);
25+
return current != null ? current.getAuth() : newTokenRefresher.getAuth();
26+
} else {
27+
return tokenRefresher.getAuth();
2428
}
25-
return auth;
2629
}
2730

2831
public static Collection<RestAuthTokenRefresher> getTokenRefreshers() {

firebase-auth-rest/core/src/main/java/com/anotherdev/firebase/auth/rest/RestAuthProvider.java

+14-4
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.anotherdev.firebase.auth.rest;
22

3+
import android.annotation.SuppressLint;
34
import android.text.TextUtils;
45

56
import androidx.annotation.NonNull;
@@ -64,6 +65,19 @@ public class RestAuthProvider implements FirebaseAuth, InternalAuthProvider {
6465
public RestAuthProvider(FirebaseApp app) {
6566
this.app = app;
6667
userStore = Data.from(app.getApplicationContext()).getCurrentUser(SIGNED_OUT);
68+
initIdTokenBroadcast();
69+
}
70+
71+
@SuppressLint("CheckResult")
72+
private void initIdTokenBroadcast() {
73+
//noinspection ResultOfMethodCallIgnored
74+
userStore.asObservable()
75+
.skip(1)
76+
.subscribe(user -> {
77+
for (IdTokenListener listener : listeners) {
78+
listener.onIdTokenChanged(new InternalTokenResult(user.getIdToken()));
79+
}
80+
}, RxUtil.ON_ERROR_LOG_V2);
6781
}
6882

6983
@NonNull
@@ -290,10 +304,6 @@ private void saveCurrentUser(String idToken, String refreshToken) throws Firebas
290304

291305
FirebaseUserImpl user = FirebaseUserImpl.from(app.getName(), idToken, refreshToken);
292306
userStore.set(user);
293-
294-
for (IdTokenListener l : listeners) {
295-
l.onIdTokenChanged(new InternalTokenResult(idToken));
296-
}
297307
}
298308

299309
private SignInResponse getAccountInfo(SignInResponse signInResponse) {

firebase-auth-rest/core/src/main/java/com/anotherdev/firebase/auth/rest/RestAuthTokenRefresher.java

+7-1
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ public class RestAuthTokenRefresher implements IdTokenListener, LifecycleObserve
2525
private static final long MAX_RETRY_BACKOFF = MILLISECONDS.convert(5, MINUTES);
2626

2727
private final Handler handler = new Handler();
28+
@NonNull
2829
private final RestAuthProvider auth;
2930

3031
private String ownerName;
@@ -33,10 +34,15 @@ public class RestAuthTokenRefresher implements IdTokenListener, LifecycleObserve
3334
private String lastToken;
3435

3536

36-
public RestAuthTokenRefresher(RestAuthProvider auth) {
37+
public RestAuthTokenRefresher(@NonNull RestAuthProvider auth) {
3738
this.auth = auth;
3839
}
3940

41+
@NonNull
42+
public RestAuthProvider getAuth() {
43+
return auth;
44+
}
45+
4046
@Override
4147
public void onIdTokenChanged(@NonNull InternalTokenResult result) {
4248
final String newToken = result.getToken();

0 commit comments

Comments
 (0)