From c3117d08bf8d074e61e4bc1049212c0a528b4931 Mon Sep 17 00:00:00 2001 From: Sam Bosley Date: Thu, 7 Feb 2013 17:57:40 -0800 Subject: [PATCH 1/3] Fixed task edit page checkbox appearance bug --- .../com/todoroo/astrid/ui/EditTitleControlSet.java | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) 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]); } } } From 4bde1041575bec9ff9acd38b765b2b216159db1f Mon Sep 17 00:00:00 2001 From: Sam Bosley Date: Mon, 11 Feb 2013 14:35:44 -0800 Subject: [PATCH 2/3] Make sure google auth token is valid before using it --- .../astrid/actfm/ActFmGoogleAuthActivity.java | 19 ++++++++++-- .../welcome/tutorial/WelcomeWalkthrough.java | 29 +++++++++++++++---- 2 files changed, 40 insertions(+), 8 deletions(-) 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/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(); From dd6a3fa98cde6fc49da61724b56adb22634427f4 Mon Sep 17 00:00:00 2001 From: Sam Bosley Date: Mon, 11 Feb 2013 16:46:08 -0800 Subject: [PATCH 3/3] Directly populate filters on demand using the same logic as the old BladeFilterReceiver. Fixes bugs where there could be long delays in populating the list of lists --- .../todoroo/astrid/adapter/FilterAdapter.java | 89 +++++-------------- 1 file changed, 21 insertions(+), 68 deletions(-) diff --git a/astrid/src/com/todoroo/astrid/adapter/FilterAdapter.java b/astrid/src/com/todoroo/astrid/adapter/FilterAdapter.java index a22ec662e..7e01d1813 100644 --- a/astrid/src/com/todoroo/astrid/adapter/FilterAdapter.java +++ b/astrid/src/com/todoroo/astrid/adapter/FilterAdapter.java @@ -91,8 +91,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; @@ -370,18 +368,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(); } } @@ -411,50 +421,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(); @@ -468,16 +434,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); } /** @@ -487,9 +444,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(); } @@ -498,7 +452,6 @@ public class FilterAdapter extends ArrayAdapter { */ public void unregisterRecevier() { activity.unregisterReceiver(filterReceiver); - activity.unregisterReceiver(bladeFilterReceiver); } /**