From 85e57f10b63d0fefeae902ce1abf47435f9223ec Mon Sep 17 00:00:00 2001 From: Sam Bosley Date: Tue, 18 Sep 2012 13:23:14 -0700 Subject: [PATCH] Launch a separate activity for long upgrades --- astrid/AndroidManifest.xml | 5 ++ .../astrid/activity/AstridActivity.java | 22 +++---- .../service/UpdateMessagePreference.java | 3 +- .../astrid/service/UpdateMessageService.java | 3 +- .../astrid/service/UpgradeService.java | 62 ++++++++++++++++--- 5 files changed, 71 insertions(+), 24 deletions(-) diff --git a/astrid/AndroidManifest.xml b/astrid/AndroidManifest.xml index b403c0895..ae1540a9e 100644 --- a/astrid/AndroidManifest.xml +++ b/astrid/AndroidManifest.xml @@ -167,12 +167,17 @@ + + + + diff --git a/astrid/src/com/todoroo/astrid/activity/AstridActivity.java b/astrid/src/com/todoroo/astrid/activity/AstridActivity.java index cf183ff03..3d3694fbd 100644 --- a/astrid/src/com/todoroo/astrid/activity/AstridActivity.java +++ b/astrid/src/com/todoroo/astrid/activity/AstridActivity.java @@ -67,7 +67,7 @@ public class AstridActivity extends FragmentActivity public static final int LAYOUT_DOUBLE = 1; public static final int LAYOUT_TRIPLE = 2; - public static final int RESULT_RESTART_ACTIVITY = 50; + public static final int REQUEST_REBOOT = 100; protected int fragmentLayout = LAYOUT_SINGLE; @@ -292,16 +292,6 @@ public class AstridActivity extends FragmentActivity super.onBackPressed(); } - @Override - protected void onActivityResult(int requestCode, int resultCode, Intent data) { - if (resultCode == RESULT_RESTART_ACTIVITY) { - finish(); - startActivity(getIntent()); - } else { - super.onActivityResult(requestCode, resultCode, data); - } - } - // --- fragment helpers protected void removeFragment(String tag) { @@ -389,6 +379,16 @@ public class AstridActivity extends FragmentActivity DialogUtilities.okDialog(this, getString(errorStr), null); } + @Override + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + if (requestCode == REQUEST_REBOOT && resultCode == RESULT_OK) { + finish(); + startActivity(getIntent()); + return; + } + super.onActivityResult(requestCode, resultCode, data); + } + /** * @return LAYOUT_SINGLE, LAYOUT_DOUBLE, or LAYOUT_TRIPLE */ diff --git a/astrid/src/com/todoroo/astrid/service/UpdateMessagePreference.java b/astrid/src/com/todoroo/astrid/service/UpdateMessagePreference.java index 173b0b460..c11b3786f 100644 --- a/astrid/src/com/todoroo/astrid/service/UpdateMessagePreference.java +++ b/astrid/src/com/todoroo/astrid/service/UpdateMessagePreference.java @@ -12,7 +12,6 @@ import android.preference.PreferenceActivity; import com.timsu.astrid.R; import com.todoroo.andlib.utility.Preferences; -import com.todoroo.astrid.activity.AstridActivity; public class UpdateMessagePreference extends PreferenceActivity { @@ -64,7 +63,7 @@ public class UpdateMessagePreference extends PreferenceActivity { pref.setOnPreferenceChangeListener(new OnPreferenceChangeListener() { @Override public boolean onPreferenceChange(Preference preference, Object newValue) { - setResult(AstridActivity.RESULT_RESTART_ACTIVITY); + setResult(RESULT_OK); return true; } }); diff --git a/astrid/src/com/todoroo/astrid/service/UpdateMessageService.java b/astrid/src/com/todoroo/astrid/service/UpdateMessageService.java index e27c1c21b..d0d7d6a40 100644 --- a/astrid/src/com/todoroo/astrid/service/UpdateMessageService.java +++ b/astrid/src/com/todoroo/astrid/service/UpdateMessageService.java @@ -42,6 +42,7 @@ import com.todoroo.andlib.utility.AndroidUtilities; import com.todoroo.andlib.utility.DialogUtilities; import com.todoroo.andlib.utility.Pair; import com.todoroo.astrid.actfm.sync.ActFmPreferenceService; +import com.todoroo.astrid.activity.AstridActivity; import com.todoroo.astrid.dao.StoreObjectDao; import com.todoroo.astrid.dao.StoreObjectDao.StoreObjectCriteria; import com.todoroo.astrid.data.StoreObject; @@ -227,7 +228,7 @@ public class UpdateMessageService { public void onClick(View widget) { Intent prefScreen = new Intent(activity, UpdateMessagePreference.class); prefScreen.putExtra(UpdateMessagePreference.TOKEN_PREFS_ARRAY, prefArray); - activity.startActivityForResult(prefScreen, 0); + activity.startActivityForResult(prefScreen, AstridActivity.REQUEST_REBOOT); } }; } catch (JSONException e) { diff --git a/astrid/src/com/todoroo/astrid/service/UpgradeService.java b/astrid/src/com/todoroo/astrid/service/UpgradeService.java index faca70f48..4ebbebbfd 100644 --- a/astrid/src/com/todoroo/astrid/service/UpgradeService.java +++ b/astrid/src/com/todoroo/astrid/service/UpgradeService.java @@ -15,6 +15,7 @@ import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; import android.content.SharedPreferences.Editor; +import android.os.Bundle; import com.timsu.astrid.R; import com.todoroo.andlib.data.Property.LongProperty; @@ -29,6 +30,7 @@ import com.todoroo.andlib.utility.DateUtilities; import com.todoroo.andlib.utility.DialogUtilities; import com.todoroo.andlib.utility.Preferences; import com.todoroo.astrid.actfm.sync.ActFmPreferenceService; +import com.todoroo.astrid.activity.AstridActivity; import com.todoroo.astrid.activity.Eula; import com.todoroo.astrid.api.AstridApiConstants; import com.todoroo.astrid.backup.TasksXmlExporter; @@ -41,8 +43,8 @@ import com.todoroo.astrid.helper.DueDateTimeMigrator; import com.todoroo.astrid.notes.NoteMetadata; import com.todoroo.astrid.producteev.sync.ProducteevDataService; import com.todoroo.astrid.service.abtesting.ABChooser; -import com.todoroo.astrid.tags.TagCaseMigrator; import com.todoroo.astrid.tags.Astrid44SyncMigrator; +import com.todoroo.astrid.tags.TagCaseMigrator; import com.todoroo.astrid.utility.AstridPreferences; @@ -148,7 +150,7 @@ public final class UpgradeService { * @param from * @param to */ - public void performUpgrade(final Context context, final int from) { + public void performUpgrade(final Activity context, final int from) { if(from == 135) AddOnService.recordOem(); @@ -159,22 +161,37 @@ public final class UpgradeService { Preferences.setString(R.string.p_theme, "black"); //$NON-NLS-1$ } - if( from<= V3_9_1_1) { + if(from <= V3_9_1_1) { actFmPreferenceService.clearLastSyncDate(); } - // long running tasks: pop up a progress dialog + final String lastSetVersionName = AstridPreferences.getCurrentVersionName(); + + Preferences.setInt(AstridPreferences.P_UPGRADE_FROM, from); + + if (from > 0) { + boolean separateActivity = from < V4_4_0 // If from < 4_4_0, launch a new activity to block the UI + && context instanceof AstridActivity; + + if (separateActivity) { + Intent upgrade = new Intent(context, UpgradeActivity.class); + upgrade.putExtra(UpgradeActivity.TOKEN_FROM, from); + upgrade.putExtra(UpgradeActivity.TOKEN_VERSION_NAME, lastSetVersionName); + context.startActivityForResult(upgrade, AstridActivity.REQUEST_REBOOT); + } else { + startUpgradeThread(context, from, lastSetVersionName, null); + } + } + } + + private void startUpgradeThread(final Activity context, final int from, final String lastSetVersionName, final Runnable done) { + // long running tasks: pop up a progress dialog final ProgressDialog dialog; - if(from < V4_4_0 && context instanceof Activity) + if(from < V4_4_0) dialog = DialogUtilities.progressDialog(context, context.getString(R.string.DLG_upgrading)); else dialog = null; - - final String lastSetVersionName = AstridPreferences.getCurrentVersionName(); - - Preferences.setInt(AstridPreferences.P_UPGRADE_FROM, from); - new Thread(new Runnable() { @Override public void run() { @@ -203,12 +220,37 @@ public final class UpgradeService { } finally { DialogUtilities.dismissDialog((Activity)context, dialog); context.sendBroadcast(new Intent(AstridApiConstants.BROADCAST_EVENT_REFRESH)); + if (done != null) + context.runOnUiThread(done); } } }).start(); } + private class UpgradeActivity extends Activity { + public static final String TOKEN_FROM = "token_from"; //$NON-NLS-1$ + public static final String TOKEN_VERSION_NAME = "token_version"; //$NON-NLS-1$ + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + } + + @Override + protected void onResume() { + super.onResume(); + int from = getIntent().getIntExtra(TOKEN_FROM, 0); + String lastSetVersionName = getIntent().getStringExtra(TOKEN_VERSION_NAME); + startUpgradeThread(this, from, lastSetVersionName, new Runnable() { + @Override + public void run() { + setResult(RESULT_OK); + finish(); + } + }); + } + } + /** * Return a change log string. Releases occur often enough that we don't * expect change sets to be localized.