Better gtasks login activity that displays progress dialog and won't block the ui

pull/14/head
Sam Bosley 14 years ago
parent dc1c14a5b7
commit 83dd45a48a

@ -20,12 +20,14 @@
package com.todoroo.astrid.gtasks.auth; package com.todoroo.astrid.gtasks.auth;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.concurrent.TimeUnit;
import android.accounts.Account; import android.accounts.Account;
import android.accounts.AccountManager; import android.accounts.AccountManager;
import android.accounts.AccountManagerCallback; import android.accounts.AccountManagerCallback;
import android.accounts.AccountManagerFuture; import android.accounts.AccountManagerFuture;
import android.app.ListActivity; import android.app.ListActivity;
import android.app.ProgressDialog;
import android.content.Intent; import android.content.Intent;
import android.os.Bundle; import android.os.Bundle;
import android.view.View; import android.view.View;
@ -38,6 +40,7 @@ import com.timsu.astrid.R;
import com.todoroo.andlib.service.Autowired; import com.todoroo.andlib.service.Autowired;
import com.todoroo.andlib.service.ContextManager; import com.todoroo.andlib.service.ContextManager;
import com.todoroo.andlib.service.DependencyInjectionService; import com.todoroo.andlib.service.DependencyInjectionService;
import com.todoroo.andlib.utility.DialogUtilities;
import com.todoroo.andlib.utility.Preferences; import com.todoroo.andlib.utility.Preferences;
import com.todoroo.astrid.gtasks.GtasksBackgroundService; import com.todoroo.astrid.gtasks.GtasksBackgroundService;
import com.todoroo.astrid.gtasks.GtasksPreferenceService; import com.todoroo.astrid.gtasks.GtasksPreferenceService;
@ -94,23 +97,40 @@ public class GtasksLoginActivity extends ListActivity {
@Override @Override
protected void onListItemClick(ListView l, View v, int position, long id) { protected void onListItemClick(ListView l, View v, int position, long id) {
super.onListItemClick(l, v, position, id); super.onListItemClick(l, v, position, id);
Toast.makeText(this, R.string.gtasks_GLA_authenticating, Toast.LENGTH_LONG); final ProgressDialog pd = DialogUtilities.progressDialog(this, this.getString(R.string.gtasks_GLA_authenticating));
pd.show();
final Account a = accountManager.getAccountByName(nameArray[position]); final Account a = accountManager.getAccountByName(nameArray[position]);
accountName = a.name; accountName = a.name;
getAuthToken(a, pd);
}
private void getAuthToken(Account a, final ProgressDialog pd) {
AccountManagerCallback<Bundle> callback = new AccountManagerCallback<Bundle>() { AccountManagerCallback<Bundle> callback = new AccountManagerCallback<Bundle>() {
public void run(AccountManagerFuture<Bundle> future) { public void run(final AccountManagerFuture<Bundle> future) {
try { new Thread() {
Bundle bundle = future.getResult(); @Override
if (bundle.containsKey(AccountManager.KEY_INTENT)) { public void run() {
Intent i = (Intent) bundle.get(AccountManager.KEY_INTENT); try {
startActivityForResult(i, REQUEST_AUTHENTICATE); Bundle bundle = future.getResult(60, TimeUnit.SECONDS);
} else if (bundle.containsKey(AccountManager.KEY_AUTHTOKEN)) { if (bundle.containsKey(AccountManager.KEY_INTENT)) {
authToken = bundle.getString(AccountManager.KEY_AUTHTOKEN); Intent i = (Intent) bundle.get(AccountManager.KEY_INTENT);
onAuthTokenSuccess(); startActivityForResult(i, REQUEST_AUTHENTICATE);
} else if (bundle.containsKey(AccountManager.KEY_AUTHTOKEN)) {
authToken = bundle.getString(AccountManager.KEY_AUTHTOKEN);
onAuthTokenSuccess();
}
} catch (Exception e) {
GtasksLoginActivity.this.runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(GtasksLoginActivity.this, R.string.gtasks_GLA_errorAuth, Toast.LENGTH_LONG).show();
}
});
} finally {
pd.dismiss();
}
} }
} catch (Exception e) { }.start();
onAuthCancel();
}
} }
}; };
accountManager.manager.getAuthToken(a, GtasksService.AUTH_TOKEN_TYPE, true, callback, null); accountManager.manager.getAuthToken(a, GtasksService.AUTH_TOKEN_TYPE, true, callback, null);
@ -133,6 +153,7 @@ public class GtasksLoginActivity extends ListActivity {
protected void synchronize() { protected void synchronize() {
startService(new Intent(null, null, startService(new Intent(null, null,
this, GtasksBackgroundService.class)); this, GtasksBackgroundService.class));
setResult(RESULT_OK);
finish(); finish();
} }
@ -154,8 +175,10 @@ public class GtasksLoginActivity extends ListActivity {
protected void onActivityResult(int requestCode, int resultCode, Intent data) { protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data); super.onActivityResult(requestCode, resultCode, data);
if(requestCode == REQUEST_AUTHENTICATE && resultCode == RESULT_OK){ if(requestCode == REQUEST_AUTHENTICATE && resultCode == RESULT_OK){
//User gave permission--huzzah! final ProgressDialog pd = DialogUtilities.progressDialog(this, this.getString(R.string.gtasks_GLA_authenticating));
pd.show();
final Account a = accountManager.getAccountByName(accountName);
getAuthToken(a, pd);
} else { } else {
//User didn't give permission--cancel //User didn't give permission--cancel
onAuthCancel(); onAuthCancel();

Loading…
Cancel
Save