diff --git a/astrid/plugin-src/com/todoroo/astrid/actfm/ActFmGoogleAuthActivity.java b/astrid/plugin-src/com/todoroo/astrid/actfm/ActFmGoogleAuthActivity.java index 26a07fefe..e7a87e4a2 100644 --- a/astrid/plugin-src/com/todoroo/astrid/actfm/ActFmGoogleAuthActivity.java +++ b/astrid/plugin-src/com/todoroo/astrid/actfm/ActFmGoogleAuthActivity.java @@ -54,6 +54,9 @@ public class ActFmGoogleAuthActivity extends ListActivity { private String authToken; private String accountName; + private boolean onSuccess = false; + private boolean dismissDialog = false; + @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -96,7 +99,7 @@ public class ActFmGoogleAuthActivity extends ListActivity { } } - private void getAuthToken(Account a, final ProgressDialog pd) { + private void getAuthToken(final Account a, final ProgressDialog pd) { AccountManagerCallback callback = new AccountManagerCallback() { public void run(final AccountManagerFuture future) { new Thread() { @@ -106,7 +109,16 @@ public class ActFmGoogleAuthActivity extends ListActivity { Bundle bundle = future.getResult(30, TimeUnit.SECONDS); if (bundle.containsKey(AccountManager.KEY_AUTHTOKEN)) { authToken = bundle.getString(AccountManager.KEY_AUTHTOKEN); - onAuthTokenSuccess(); + if (!onSuccess) { + accountManager.manager.invalidateAuthToken(AUTH_TOKEN_TYPE, authToken); + getAuthToken(a, pd); + onSuccess = true; + } else { + onAuthTokenSuccess(); + dismissDialog = true; + } + } else { + dismissDialog = true; } } catch (final Exception e) { Log.e("actfm-google-auth", "Login Error", e); //$NON-NLS-1$ //$NON-NLS-2$ @@ -121,7 +133,8 @@ public class ActFmGoogleAuthActivity extends ListActivity { } }); } finally { - DialogUtilities.dismissDialog(ActFmGoogleAuthActivity.this, pd); + if (dismissDialog) + DialogUtilities.dismissDialog(ActFmGoogleAuthActivity.this, pd); } } }.start(); diff --git a/astrid/src/com/todoroo/astrid/adapter/FilterAdapter.java b/astrid/src/com/todoroo/astrid/adapter/FilterAdapter.java index 279717d3b..5d1ec8039 100644 --- a/astrid/src/com/todoroo/astrid/adapter/FilterAdapter.java +++ b/astrid/src/com/todoroo/astrid/adapter/FilterAdapter.java @@ -93,8 +93,6 @@ public class FilterAdapter extends ArrayAdapter { /** receiver for new filters */ protected final FilterReceiver filterReceiver = new FilterReceiver(); - private final BladeFilterReceiver bladeFilterReceiver = new BladeFilterReceiver(); - private boolean shouldUseBladeFilter = true; /** row layout to inflate */ private final int layout; @@ -372,18 +370,30 @@ public class FilterAdapter extends ArrayAdapter { * */ public class FilterReceiver extends BroadcastReceiver { + private final List filterExposerList; + + public FilterReceiver() { + // query astrids AndroidManifest.xml for all registered default-receivers to expose filters + PackageManager pm = ContextManager.getContext().getPackageManager(); + filterExposerList = pm.queryBroadcastReceivers( + new Intent(AstridApiConstants.BROADCAST_REQUEST_FILTERS), + PackageManager.MATCH_DEFAULT_ONLY); + } + @Override public void onReceive(Context context, Intent intent) { try { - Bundle extras = intent.getExtras(); - extras.setClassLoader(FilterListHeader.class.getClassLoader()); - final Parcelable[] filters = extras.getParcelableArray(AstridApiConstants.EXTRAS_RESPONSE); - populateFiltersToAdapter(filters); - shouldUseBladeFilter = getCount() == 0; + for (ResolveInfo filterExposerInfo : filterExposerList) { + String className = filterExposerInfo.activityInfo.name; + AstridFilterExposer filterExposer = null; + filterExposer = (AstridFilterExposer) Class.forName(className, true, FilterAdapter.class.getClassLoader()).newInstance(); + + if (filterExposer != null) { + populateFiltersToAdapter(filterExposer.getFilters()); + } + } } catch (Exception e) { - Log.e("receive-filter-" + //$NON-NLS-1$ - intent.getStringExtra(AstridApiConstants.EXTRAS_ADDON), - e.toString(), e); + e.printStackTrace(); } } @@ -413,50 +423,6 @@ public class FilterAdapter extends ArrayAdapter { } } - /** - * Receiver which gets called after the FilterReceiver - * and checks if the filters are populated. - * If they aren't (e.g. due to the bug in the ZTE Blade's Parcelable-system throwing a - * ClassNotFoundExeption), the filters are fetched manually. - * - * @author Arne Jans - * - */ - public class BladeFilterReceiver extends FilterReceiver { - private final List filterExposerList; - - public BladeFilterReceiver() { - // query astrids AndroidManifest.xml for all registered default-receivers to expose filters - PackageManager pm = ContextManager.getContext().getPackageManager(); - filterExposerList = pm.queryBroadcastReceivers( - new Intent(AstridApiConstants.BROADCAST_REQUEST_FILTERS), - PackageManager.MATCH_DEFAULT_ONLY); - } - - @SuppressWarnings("nls") - @Override - public void onReceive(Context context, Intent intent) { - if (shouldUseBladeFilter && getCount() == 0 && filterExposerList != null && filterExposerList.size()>0) { - try { - for (ResolveInfo filterExposerInfo : filterExposerList) { - Log.d("BladeFilterReceiver", filterExposerInfo.toString()); - String className = filterExposerInfo.activityInfo.name; - AstridFilterExposer filterExposer = null; - filterExposer = (AstridFilterExposer) Class.forName(className, true, FilterAdapter.class.getClassLoader()).newInstance(); - - if (filterExposer != null) { - populateFiltersToAdapter(filterExposer.getFilters()); - } - } - } catch (Exception e) { - Log.e("receive-bladefilter-" + //$NON-NLS-1$ - intent.getStringExtra(AstridApiConstants.EXTRAS_ADDON), - e.toString(), e); - } - } - } - } - @Override public void notifyDataSetChanged() { super.notifyDataSetChanged(); @@ -470,16 +436,7 @@ public class FilterAdapter extends ArrayAdapter { * can then add lists to this activity */ public void getLists() { - Intent broadcastIntent = new Intent(AstridApiConstants.BROADCAST_REQUEST_FILTERS); -// activity.sendOrderedBroadcast(broadcastIntent, AstridApiConstants.PERMISSION_READ); - // the bladeFilterReceiver will be called after the usual FilterReceiver has finished (to handle the empty list) - activity.sendOrderedBroadcast(broadcastIntent, - AstridApiConstants.PERMISSION_READ, - bladeFilterReceiver, - null, - Activity.RESULT_OK, - null, - null); + filterReceiver.onReceive(activity, null); } /** @@ -489,9 +446,6 @@ public class FilterAdapter extends ArrayAdapter { IntentFilter regularFilter = new IntentFilter(AstridApiConstants.BROADCAST_SEND_FILTERS); regularFilter.setPriority(2); activity.registerReceiver(filterReceiver, regularFilter); - IntentFilter bladeFilter = new IntentFilter(AstridApiConstants.BROADCAST_SEND_FILTERS); - bladeFilter.setPriority(1); - activity.registerReceiver(bladeFilterReceiver, bladeFilter); getLists(); } @@ -500,7 +454,6 @@ public class FilterAdapter extends ArrayAdapter { */ public void unregisterRecevier() { activity.unregisterReceiver(filterReceiver); - activity.unregisterReceiver(bladeFilterReceiver); } /** diff --git a/astrid/src/com/todoroo/astrid/ui/EditTitleControlSet.java b/astrid/src/com/todoroo/astrid/ui/EditTitleControlSet.java index 22760a79a..618b4b90e 100644 --- a/astrid/src/com/todoroo/astrid/ui/EditTitleControlSet.java +++ b/astrid/src/com/todoroo/astrid/ui/EditTitleControlSet.java @@ -64,6 +64,7 @@ public class EditTitleControlSet extends TaskEditControlSet implements Importanc scaleAnimation.setDuration(100); // set check box to actual action item state completeBox.startAnimation(scaleAnimation); + updateCompleteBox(); } }); } @@ -101,14 +102,17 @@ public class EditTitleControlSet extends TaskEditControlSet implements Importanc private void updateCompleteBox() { + boolean checked = completeBox.isChecked(); + int[] resourceArray = isRepeating ? (checked ? TaskAdapter.IMPORTANCE_REPEAT_RESOURCES_CHECKED : TaskAdapter.IMPORTANCE_REPEAT_RESOURCES) + : (checked ? TaskAdapter.IMPORTANCE_RESOURCES_CHECKED : TaskAdapter.IMPORTANCE_RESOURCES); int valueToUse = importanceValue; - if (valueToUse >= TaskAdapter.IMPORTANCE_RESOURCES.length) - valueToUse = TaskAdapter.IMPORTANCE_RESOURCES.length - 1; - if(valueToUse < TaskAdapter.IMPORTANCE_RESOURCES.length) { + if (valueToUse >= resourceArray.length) + valueToUse = resourceArray.length - 1; + if(valueToUse < resourceArray.length) { if (isRepeating) { - completeBox.setImageResource(TaskAdapter.IMPORTANCE_REPEAT_RESOURCES[valueToUse]); + completeBox.setImageResource(resourceArray[valueToUse]); } else { - completeBox.setImageResource(TaskAdapter.IMPORTANCE_RESOURCES[valueToUse]); + completeBox.setImageResource(resourceArray[valueToUse]); } } } diff --git a/astrid/src/com/todoroo/astrid/welcome/tutorial/WelcomeWalkthrough.java b/astrid/src/com/todoroo/astrid/welcome/tutorial/WelcomeWalkthrough.java index 190f18deb..c3f7e5c6d 100644 --- a/astrid/src/com/todoroo/astrid/welcome/tutorial/WelcomeWalkthrough.java +++ b/astrid/src/com/todoroo/astrid/welcome/tutorial/WelcomeWalkthrough.java @@ -43,6 +43,10 @@ public class WelcomeWalkthrough extends ActFmLoginActivity { private View currentView; private int currentPage; + private String authToken; + private boolean onSuccess = false; + private boolean dismissDialog = false; + public static final String KEY_SHOWED_WELCOME_LOGIN = "key_showed_welcome_login"; //$NON-NLS-1$ public static final String TOKEN_MANUAL_SHOW = "manual"; //$NON-NLS-1$ @@ -111,8 +115,13 @@ public class WelcomeWalkthrough extends ActFmLoginActivity { StatisticsService.reportEvent(StatisticsConstants.ACTFM_LOGIN_SIMPLE); final ProgressDialog pd = DialogUtilities.progressDialog(WelcomeWalkthrough.this, getString(R.string.gtasks_GLA_authenticating)); pd.show(); - GoogleAccountManager accountManager = new GoogleAccountManager(WelcomeWalkthrough.this); - Account a = accountManager.getAccountByName(email); + getAuthToken(email, pd); + } + + private void getAuthToken(final String e, + final ProgressDialog pd) { + final GoogleAccountManager accountManager = new GoogleAccountManager(WelcomeWalkthrough.this); + Account a = accountManager.getAccountByName(e); AccountManagerCallback callback = new AccountManagerCallback() { public void run(final AccountManagerFuture future) { new Thread() { @@ -121,8 +130,17 @@ public class WelcomeWalkthrough extends ActFmLoginActivity { try { Bundle bundle = future.getResult(30, TimeUnit.SECONDS); if (bundle.containsKey(AccountManager.KEY_AUTHTOKEN)) { - String authToken = bundle.getString(AccountManager.KEY_AUTHTOKEN); - onAuthTokenSuccess(email, authToken); + authToken = bundle.getString(AccountManager.KEY_AUTHTOKEN); + if (!onSuccess) { + accountManager.manager.invalidateAuthToken(ActFmGoogleAuthActivity.AUTH_TOKEN_TYPE, authToken); + getAuthToken(e, pd); + onSuccess = true; + } else { + onAuthTokenSuccess(e, authToken); + dismissDialog = true; + } + } else { + dismissDialog = true; } } catch (final Exception e) { Log.e("actfm-google-auth", "Login Error", e); //$NON-NLS-1$ //$NON-NLS-2$ @@ -138,7 +156,8 @@ public class WelcomeWalkthrough extends ActFmLoginActivity { } }); } finally { - DialogUtilities.dismissDialog(WelcomeWalkthrough.this, pd); + if (dismissDialog) + DialogUtilities.dismissDialog(WelcomeWalkthrough.this, pd); } } }.start();