Fixed several bugs with migrating data after new user log in

pull/14/head
Sam Bosley 12 years ago
parent dcb1dc206a
commit f7101c3a52

@ -652,6 +652,7 @@ public class ActFmLoginActivity extends FragmentActivity implements AuthListener
public void onClick(DialogInterface dialog, int which) { public void onClick(DialogInterface dialog, int which) {
// TODO: Make all data private // TODO: Make all data private
final ProgressDialog pd = DialogUtilities.progressDialog(ActFmLoginActivity.this, getString(R.string.actfm_logged_in_different_user_processing)); final ProgressDialog pd = DialogUtilities.progressDialog(ActFmLoginActivity.this, getString(R.string.actfm_logged_in_different_user_processing));
new Thread(new Runnable() { new Thread(new Runnable() {
@Override @Override
public void run() { public void run() {
@ -679,7 +680,7 @@ public class ActFmLoginActivity extends FragmentActivity implements AuthListener
runOnUiThread(new Runnable() { runOnUiThread(new Runnable() {
@Override @Override
public void run() { public void run() {
finishSignIn(result, token); finishSignIn(result, token, true);
} }
}); });
pd.dismiss(); pd.dismiss();
@ -691,14 +692,14 @@ public class ActFmLoginActivity extends FragmentActivity implements AuthListener
@Override @Override
public void onClick(DialogInterface dialog, int which) { public void onClick(DialogInterface dialog, int which) {
deleteDatabase(database.getName()); deleteDatabase(database.getName());
finishSignIn(result, token); finishSignIn(result, token, true);
} }
}); });
} else { } else {
finishSignIn(result, token); finishSignIn(result, token, false);
} }
} else { } else {
finishSignIn(result, token); finishSignIn(result, token, false);
} }
} }
@ -774,18 +775,19 @@ public class ActFmLoginActivity extends FragmentActivity implements AuthListener
for (tlmCursor.moveToFirst(); !tlmCursor.isAfterLast(); tlmCursor.moveToNext()) { for (tlmCursor.moveToFirst(); !tlmCursor.isAfterLast(); tlmCursor.moveToNext()) {
tlm.clear(); tlm.clear();
tlm.readFromCursor(tlmCursor); tlm.readFromCursor(tlmCursor);
tlm.setValue(TaskListMetadata.UUID, uuidTaskListMetadataMap.get(tlm.getUuid()));
String taskIds = tlm.getValue(TaskListMetadata.TASK_IDS); String taskIds = tlm.getValue(TaskListMetadata.TASK_IDS);
if (!TaskListMetadata.taskIdsIsEmpty(taskIds)) { if (!TaskListMetadata.taskIdsIsEmpty(taskIds)) {
Node root = AstridOrderedListUpdater.buildTreeModel(taskIds, null); Node root = AstridOrderedListUpdater.buildTreeModel(taskIds, null);
SubtasksHelper.remapTree(root, uuidTaskMap, new TreeRemapHelper<String>() { SubtasksHelper.remapTree(root, uuidTaskMap, new TreeRemapHelper<String>() {
public String getKeyFromUuid(String uuid) { public String getKeyFromOldUuid(String uuid) {
return uuidTaskMap.get(uuid); return uuid; // Old uuids are the keys
} }
}); });
taskIds = AstridOrderedListUpdater.serializeTree(root); taskIds = AstridOrderedListUpdater.serializeTree(root);
tlm.setValue(TaskListMetadata.TASK_IDS, taskIds); tlm.setValue(TaskListMetadata.TASK_IDS, taskIds);
} }
taskListMetadataDao.saveExisting(tlm);
} }
} finally { } finally {
tlmCursor.close(); tlmCursor.close();
@ -805,7 +807,7 @@ public class ActFmLoginActivity extends FragmentActivity implements AuthListener
} }
@SuppressWarnings("nls") @SuppressWarnings("nls")
private void finishSignIn(JSONObject result, String token) { private void finishSignIn(JSONObject result, String token, boolean restart) {
actFmPreferenceService.setToken(token); actFmPreferenceService.setToken(token);
Preferences.setLong(ActFmPreferenceService.PREF_USER_ID, Preferences.setLong(ActFmPreferenceService.PREF_USER_ID,
@ -825,15 +827,21 @@ public class ActFmLoginActivity extends FragmentActivity implements AuthListener
ActFmPreferenceService.reloadThisUser(); ActFmPreferenceService.reloadThisUser();
GCMIntentService.register(this);
if (restart) {
System.exit(0);
return;
} else {
setResult(RESULT_OK);
finish();
}
ActFmSyncMonitor monitor = ActFmSyncMonitor.getInstance(); ActFmSyncMonitor monitor = ActFmSyncMonitor.getInstance();
synchronized (monitor) { synchronized (monitor) {
monitor.notifyAll(); monitor.notifyAll();
} }
setResult(RESULT_OK);
finish();
GCMIntentService.register(this);
} }
@SuppressWarnings("nls") @SuppressWarnings("nls")

@ -140,14 +140,14 @@ public class SubtasksHelper {
} }
public static interface TreeRemapHelper<T> { public static interface TreeRemapHelper<T> {
public T getKeyFromUuid(String uuid); public T getKeyFromOldUuid(String uuid);
} }
public static <T> void remapTree(Node root, HashMap<T, String> idMap, TreeRemapHelper<T> helper) { public static <T> void remapTree(Node root, HashMap<T, String> idMap, TreeRemapHelper<T> helper) {
ArrayList<Node> children = root.children; ArrayList<Node> children = root.children;
for (int i = 0; i < children.size(); i++) { for (int i = 0; i < children.size(); i++) {
Node child = children.get(i); Node child = children.get(i);
T key = helper.getKeyFromUuid(child.uuid); T key = helper.getKeyFromOldUuid(child.uuid);
String uuid = idMap.get(key); String uuid = idMap.get(key);
if (!RemoteModel.isValidUuid(uuid)) { if (!RemoteModel.isValidUuid(uuid)) {
children.remove(i); children.remove(i);
@ -162,7 +162,7 @@ public class SubtasksHelper {
private static void remapLocalTreeToRemote(Node root, HashMap<Long, String> idMap) { private static void remapLocalTreeToRemote(Node root, HashMap<Long, String> idMap) {
remapTree(root, idMap, new TreeRemapHelper<Long>() { remapTree(root, idMap, new TreeRemapHelper<Long>() {
public Long getKeyFromUuid(String uuid) { public Long getKeyFromOldUuid(String uuid) {
Long localId = -1L; Long localId = -1L;
try { try {
localId = Long.parseLong(uuid); localId = Long.parseLong(uuid);

@ -359,7 +359,7 @@
<string name="sync_upgr_logged_out">You have been logged out of Astrid</string> <string name="sync_upgr_logged_out">You have been logged out of Astrid</string>
<string name="actfm_logged_in_different_user_title">Warning! Logging in as different user</string> <string name="actfm_logged_in_different_user_title">Warning! Logging in as different user</string>
<string name="actfm_logged_in_different_user_body">This device was previously signed in under a different user account. Do you want to keep existing data or clear everything? (This cannot be undone)</string> <string name="actfm_logged_in_different_user_body">This device was previously signed in under a different user account. Do you want to keep existing data or clear everything? (This cannot be undone, and Astrid will restart when you make your choice)</string>
<string name="actfm_logged_in_different_user_keep_data">Keep data</string> <string name="actfm_logged_in_different_user_keep_data">Keep data</string>
<string name="actfm_logged_in_different_user_clear_data">Clear all data</string> <string name="actfm_logged_in_different_user_clear_data">Clear all data</string>
<string name="actfm_logged_in_different_user_processing">Processing existing data...</string> <string name="actfm_logged_in_different_user_processing">Processing existing data...</string>

Loading…
Cancel
Save