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.