Я пытаюсь убедиться, что пользователь прошел аутентификацию с помощью учетной записи Google и имеет активный экземпляр Диска (com.google.api.services.drive.Drive), прежде чем пытаться делать какие-либо вызовы GoogleDriveRestApi. Как я могу добиться этого с помощью Rx Java, если пользователь уже может быть аутентифицирован или нет?
// connect()
public final rx.Observable<Drive> connect() {
return rx.Observable.fromCallable(() -> {
final GoogleSignInOptions signInOptions =
new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestEmail()
.requestScopes(new Scope(DriveScopes.DRIVE_APPDATA))
.build();
return GoogleSignIn.getClient(mActivity.get(), signInOptions);
})
.flatMapSingle(client -> startActivityForResult(client.getSignInIntent(), GoogleDriveHelper.RESOLVE_SIGN_IN_CODE))
.switchMap(activityResult -> resolveDriveSession(activityResult));
}
// resolveDriveSession()
public final rx.Observable<Drive> resolveDriveSession(ActivityResultData result) {
return rx.Observable.fromCallable(() -> {
try {
GoogleSignInAccount googleAccount = GoogleSignIn.getSignedInAccountFromIntent(result.getIntent())
.getResult(ApiException.class);
GoogleAccountCredential credential =
GoogleAccountCredential.usingOAuth2(
mActivity.get(), Collections.singleton(DriveScopes.DRIVE_APPDATA));
credential.setSelectedAccount(googleAccount.getAccount());
return new Drive.Builder(
AndroidHttp.newCompatibleTransport(),
new GsonFactory(),
credential)
.setApplicationName("ApplicationName")
.build();
} catch (ApiException e) {
Timber.e(e, TAG);
}
return null;
});
}
//onBackupToDriveAsync()
private rx.Observable<String> onBackupToDriveAsync() {
return rx.Observable.fromCallable(() -> {
String folderId = createFolderIfNotExists(GoogleDriveHelper.BACKUP_PARENTS);
if (folderId != null) {
String result = writeFileToDrive(folderId, file);
return result;
}
return null;
});
}
Как я могу связать connect () и onBackupToDriveAsyn c () , так что подписка на connect () дает экземпляр Drive, который необходимо сохранить локально ( mDriveService , не разрешено реактивно, но я нахожусь посередине рефакторинга), а onBackupToDriveAsyn c () использует локальную версию Drive (mDriveService) для выполнения действий Api?
Любая помощь будет принята с благодарностью, спасибо.