Fix oauth crash

pull/820/head
Alex Baker 6 years ago
parent 840754f8e4
commit cc7a36f2da

@ -10,7 +10,6 @@ import android.app.ProgressDialog;
import android.content.Intent;
import android.os.Bundle;
import com.todoroo.andlib.utility.DialogUtilities;
import io.reactivex.disposables.CompositeDisposable;
import javax.inject.Inject;
import org.tasks.R;
import org.tasks.data.GoogleTaskAccount;
@ -29,12 +28,11 @@ import org.tasks.play.AuthResultHandler;
*/
public class GtasksLoginActivity extends InjectingAppCompatActivity {
private static final int RC_CHOOSE_ACCOUNT = 10988;
public static final String EXTRA_ERROR = "extra_error";
private static final int RC_CHOOSE_ACCOUNT = 10988;
@Inject DialogBuilder dialogBuilder;
@Inject GoogleAccountManager googleAccountManager;
@Inject GoogleTaskListDao googleTaskListDao;
private CompositeDisposable disposables;
@Override
protected void onCreate(Bundle savedInstanceState) {
@ -57,45 +55,34 @@ public class GtasksLoginActivity extends InjectingAppCompatActivity {
getAuthToken(account, pd);
}
@Override
protected void onPause() {
super.onPause();
if (disposables != null) {
disposables.dispose();
}
}
private void getAuthToken(String a, final ProgressDialog pd) {
disposables =
new CompositeDisposable(
googleAccountManager.getTasksAuthToken(
this,
a,
new AuthResultHandler() {
@Override
public void authenticationSuccessful(String accountName) {
GoogleTaskAccount account = googleTaskListDao.getAccount(accountName);
if (account == null) {
account = new GoogleTaskAccount();
account.setAccount(accountName);
googleTaskListDao.insert(account);
} else {
account.setError("");
googleTaskListDao.update(account);
}
setResult(RESULT_OK);
DialogUtilities.dismissDialog(GtasksLoginActivity.this, pd);
finish();
}
googleAccountManager.getTasksAuthToken(
this,
a,
new AuthResultHandler() {
@Override
public void authenticationSuccessful(String accountName) {
GoogleTaskAccount account = googleTaskListDao.getAccount(accountName);
if (account == null) {
account = new GoogleTaskAccount();
account.setAccount(accountName);
googleTaskListDao.insert(account);
} else {
account.setError("");
googleTaskListDao.update(account);
}
setResult(RESULT_OK);
DialogUtilities.dismissDialog(GtasksLoginActivity.this, pd);
finish();
}
@Override
public void authenticationFailed(final String message) {
setResult(RESULT_CANCELED, new Intent().putExtra(EXTRA_ERROR, message));
DialogUtilities.dismissDialog(GtasksLoginActivity.this, pd);
finish();
}
}));
@Override
public void authenticationFailed(final String message) {
setResult(RESULT_CANCELED, new Intent().putExtra(EXTRA_ERROR, message));
DialogUtilities.dismissDialog(GtasksLoginActivity.this, pd);
finish();
}
});
}
@Override

@ -10,7 +10,6 @@ import android.app.ProgressDialog;
import android.content.Intent;
import android.os.Bundle;
import com.todoroo.andlib.utility.DialogUtilities;
import io.reactivex.disposables.CompositeDisposable;
import javax.inject.Inject;
import org.tasks.R;
import org.tasks.dialogs.DialogBuilder;
@ -28,12 +27,11 @@ import org.tasks.preferences.Preferences;
*/
public class DriveLoginActivity extends InjectingAppCompatActivity {
private static final int RC_CHOOSE_ACCOUNT = 10988;
public static final String EXTRA_ERROR = "extra_error";
private static final int RC_CHOOSE_ACCOUNT = 10988;
@Inject DialogBuilder dialogBuilder;
@Inject GoogleAccountManager googleAccountManager;
@Inject Preferences preferences;
private CompositeDisposable disposables;
@Override
protected void onCreate(Bundle savedInstanceState) {
@ -56,37 +54,26 @@ public class DriveLoginActivity extends InjectingAppCompatActivity {
getAuthToken(account, pd);
}
@Override
protected void onPause() {
super.onPause();
if (disposables != null) {
disposables.dispose();
}
}
private void getAuthToken(String a, final ProgressDialog pd) {
disposables =
new CompositeDisposable(
googleAccountManager.getDriveAuthToken(
this,
a,
new AuthResultHandler() {
@Override
public void authenticationSuccessful(String accountName) {
preferences.setString(R.string.p_google_drive_backup_account, accountName);
setResult(RESULT_OK);
DialogUtilities.dismissDialog(DriveLoginActivity.this, pd);
finish();
}
googleAccountManager.getDriveAuthToken(
this,
a,
new AuthResultHandler() {
@Override
public void authenticationSuccessful(String accountName) {
preferences.setString(R.string.p_google_drive_backup_account, accountName);
setResult(RESULT_OK);
DialogUtilities.dismissDialog(DriveLoginActivity.this, pd);
finish();
}
@Override
public void authenticationFailed(final String message) {
setResult(RESULT_CANCELED, new Intent().putExtra(EXTRA_ERROR, message));
DialogUtilities.dismissDialog(DriveLoginActivity.this, pd);
finish();
}
}));
@Override
public void authenticationFailed(final String message) {
setResult(RESULT_CANCELED, new Intent().putExtra(EXTRA_ERROR, message));
DialogUtilities.dismissDialog(DriveLoginActivity.this, pd);
finish();
}
});
}
@Override

@ -9,6 +9,7 @@ import android.accounts.Account;
import android.accounts.AccountManager;
import android.accounts.AuthenticatorException;
import android.accounts.OperationCanceledException;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
@ -18,7 +19,6 @@ import com.google.api.services.tasks.TasksScopes;
import com.google.common.base.Strings;
import io.reactivex.Single;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.disposables.Disposable;
import io.reactivex.schedulers.Schedulers;
import java.io.IOException;
import java.util.Collections;
@ -83,20 +83,22 @@ public class GoogleAccountManager {
}
}
public Disposable getTasksAuthToken(
public void getTasksAuthToken(
final Activity activity, final String accountName, final AuthResultHandler handler) {
return getToken(TasksScopes.TASKS, activity, accountName, handler);
getToken(TasksScopes.TASKS, activity, accountName, handler);
}
public Disposable getDriveAuthToken(
public void getDriveAuthToken(
final Activity activity, final String accountName, final AuthResultHandler handler) {
return getToken(DriveScopes.DRIVE_FILE, activity, accountName, handler);
getToken(DriveScopes.DRIVE_FILE, activity, accountName, handler);
}
private Disposable getToken(
@SuppressWarnings("ResultOfMethodCallIgnored")
@SuppressLint("CheckResult")
private void getToken(
String scope, Activity activity, String accountName, AuthResultHandler handler) {
final Account account = getAccount(accountName);
return Single.fromCallable(
Single.fromCallable(
() -> {
if (account == null) {
throw new RuntimeException(

Loading…
Cancel
Save