Есть ли возможности для улучшения реализации Компонентов архитектуры или в целом:
- Примечание : если вы решите использовать AuthStateListener, убедитесь, чтоотменить регистрацию перед запуском потока FirebaseUI и перерегистрировать его после возврата потока.FirebaseUI выполняет внутренние операции аутентификации, которые могут запускать прослушиватель до завершения потока.
LiveData
public class FirebaseAuthLiveData extends LiveData<FirebaseUser> {
private FirebaseAuth firebaseAuth = FirebaseAuth.getInstance();
private FirebaseAuth.AuthStateListener authStateListener =
new FirebaseAuth.AuthStateListener() {
@Override
public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
FirebaseUser firebaseUser = firebaseAuth.getCurrentUser();
setValue(firebaseUser);
}
};
@Override
protected void onActive() {
super.onActive();
firebaseAuth.addAuthStateListener(authStateListener);
}
@Override
protected void onInactive() {
super.onInactive();
firebaseAuth.removeAuthStateListener(authStateListener);
}
}
ViewModel
public class FirebaseAuthViewModel extends ViewModel {
private final FirebaseAuthLiveData firebaseAuthLiveData = new
FirebaseAuthLiveData();
public LiveData<FirebaseUser> getFirebaseAuthLiveData() {
return firebaseAuthLiveData; }
}
}
MainActivity
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
FirebaseAuthViewModel firebaseAuthViewModel =
ViewModelProviders.of(MainActivity.this).get(FirebaseAuthViewModel.class);
firebaseUserLiveData = firebaseAuthViewModel.getFirebaseAuthLiveData();
firebaseUserLiveData.observe(MainActivity.this, new Observer<FirebaseUser>() {
@Override
public void onChanged(@Nullable FirebaseUser firebaseUser) {
if (firebaseUser == null) {
final Intent intent = AuthUI.getInstance().createSignInIntentBuilder()
.setAvailableProviders(Collections.singletonList(
new AuthUI.IdpConfig.Builder(AuthUI.GOOGLE_PROVIDER).build())
).build();
startActivityForResult(intent, SIGN_IN);
} else {
updateUI(firebaseUser);
}
}
});
}