Merge and resolve conflicts from upstream/master

pull/14/head
Sam Bosley 12 years ago
commit 5fb49bf8f0

@ -140,7 +140,7 @@ public class EditNoteActivity extends LinearLayout implements TimerActionListene
try {
task = PluginServices.getTaskService().fetchById(t, Task.NOTES, Task.ID, Task.UUID, Task.TITLE);
} catch (SQLiteException e) {
StartupService.handleSQLiteColumnMissing(ContextManager.getContext(), e);
StartupService.handleSQLiteError(ContextManager.getContext(), e);
}
if(task == null) {
return;

@ -373,6 +373,19 @@ public class Database extends AbstractDatabase {
return builder.toString();
}
public void tryAddColumn(Table table, Property<?> column, String defaultValue) {
try {
SqlConstructorVisitor visitor = new SqlConstructorVisitor();
String sql = "ALTER TABLE " + table.name + " ADD " + //$NON-NLS-1$//$NON-NLS-2$
column.accept(visitor, null);
if (!TextUtils.isEmpty(defaultValue))
sql += " DEFAULT " + defaultValue;
database.execSQL(sql);
} catch (SQLiteException e) {
// ignored, column already exists
}
}
/**
* Create table generation SQL
* @param sql

@ -28,10 +28,12 @@ import android.widget.Toast;
import com.crittercism.app.Crittercism;
import com.timsu.astrid.R;
import com.todoroo.andlib.data.TodorooCursor;
import com.todoroo.andlib.service.Autowired;
import com.todoroo.andlib.service.ContextManager;
import com.todoroo.andlib.service.DependencyInjectionService;
import com.todoroo.andlib.service.ExceptionService;
import com.todoroo.andlib.sql.Query;
import com.todoroo.andlib.utility.AndroidUtilities;
import com.todoroo.andlib.utility.DateUtilities;
import com.todoroo.andlib.utility.Preferences;
@ -42,6 +44,7 @@ import com.todoroo.astrid.backup.BackupConstants;
import com.todoroo.astrid.backup.BackupService;
import com.todoroo.astrid.backup.TasksXmlImporter;
import com.todoroo.astrid.dao.Database;
import com.todoroo.astrid.data.Task;
import com.todoroo.astrid.gtasks.GtasksPreferenceService;
import com.todoroo.astrid.gtasks.sync.GtasksSyncService;
import com.todoroo.astrid.helper.UUIDHelper;
@ -128,8 +131,9 @@ public class StartupService {
try {
database.openForWriting();
checkForMissingColumns();
} catch (SQLiteException e) {
handleSQLiteColumnMissing(context, e);
handleSQLiteError(context, e);
return;
}
@ -255,15 +259,32 @@ public class StartupService {
* @param context
* @param e error that was raised
*/
public static void handleSQLiteColumnMissing(Context context, final SQLiteException e) {
public static void handleSQLiteError(Context context, final SQLiteException e) {
new AlertDialog.Builder(context)
.setTitle(R.string.DB_corrupted_title)
.setMessage(R.string.DB_corrupted_body)
.setPositiveButton(R.string.DLG_ok, null)
.create().show();
.setTitle(R.string.DB_corrupted_title)
.setMessage(R.string.DB_corrupted_body)
.setPositiveButton(R.string.DLG_ok, null)
.create().show();
e.printStackTrace();
}
private void checkForMissingColumns() {
// For some reason these properties are missing for some users.
// Make them exist!
try {
TodorooCursor<Task> tasks = taskService.query(Query.select(Task.REMOTE_ID, Task.USER_ID, Task.USER).limit(1));
try {
System.err.println(tasks.getCount());
} finally {
tasks.close();
}
} catch (SQLiteException e) {
database.tryAddColumn(Task.TABLE, Task.REMOTE_ID, "0"); //$NON-NLS-1$
database.tryAddColumn(Task.TABLE, Task.USER_ID, "0"); //$NON-NLS-1$
database.tryAddColumn(Task.TABLE, Task.USER, null);
}
}
/**
* If database exists, no tasks but metadata, and a backup file exists, restore it
*/

@ -110,35 +110,40 @@ public class UpdateMessageService {
}
}
protected void displayUpdateDialog(Pair<String, Spannable> message) {
protected void displayUpdateDialog(final Pair<String, Spannable> message) {
if(activity == null)
return;
final DialogShower ds;
if (message.getRight() != null) {
final View view = activity.getLayoutInflater().inflate(R.layout.update_message_link, null);
TextView messageView = (TextView) view.findViewById(R.id.update_message);
messageView.setText(message.getLeft());
messageView.setTextColor(activity.getResources().getColor(ThemeService.getDialogTextColor()));
final TextView linkView = (TextView) view.findViewById(R.id.update_link);
linkView.setMovementMethod(LinkMovementMethod.getInstance());
linkView.setText(message.getRight());
ds = new DialogShower() {
@Override
public void showDialog(Activity a) {
final Dialog d = new AlertDialog.Builder(a)
.setTitle(R.string.UpS_updates_title)
.setView(view)
.setPositiveButton(R.string.DLG_ok, null)
.create();
linkView.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
d.dismiss();
}
});
d.show();
try {
View view = activity.getLayoutInflater().inflate(R.layout.update_message_link, null);
TextView messageView = (TextView) view.findViewById(R.id.update_message);
messageView.setText(message.getLeft());
messageView.setTextColor(activity.getResources().getColor(ThemeService.getDialogTextColor()));
TextView linkView = (TextView) view.findViewById(R.id.update_link);
linkView.setMovementMethod(LinkMovementMethod.getInstance());
linkView.setText(message.getRight());
final Dialog d = new AlertDialog.Builder(a)
.setTitle(R.string.UpS_updates_title)
.setView(view)
.setPositiveButton(R.string.DLG_ok, null)
.create();
linkView.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
d.dismiss();
}
});
d.show();
} catch (Exception e) {
// This should never ever crash
}
}
};
} else {

@ -53,6 +53,7 @@ import com.todoroo.astrid.utility.AstridPreferences;
public final class UpgradeService {
public static final int V4_4_0 = 285;
public static final int V4_3_4_1 = 283;
public static final int V4_3_4 = 282;
public static final int V4_3_3 = 281;
public static final int V4_3_2 = 280;

@ -14,6 +14,7 @@ import org.json.JSONObject;
import android.content.Context;
import android.database.sqlite.SQLiteException;
import android.os.Looper;
import android.util.Log;
import com.todoroo.andlib.data.TodorooCursor;
@ -66,11 +67,12 @@ public final class ABTestEventReportingService {
new Thread(new Runnable() {
@Override
public void run() {
Looper.prepare(); // In case something goes wrong
try {
abTestEventDao.createRelativeDateEvents();
pushAllUnreportedABTestEvents();
} catch (SQLiteException e) {
StartupService.handleSQLiteColumnMissing(context, e);
StartupService.handleSQLiteError(context, e);
}
}
}).start();

@ -17,6 +17,7 @@ import android.text.style.ClickableSpan;
import com.todoroo.andlib.service.Autowired;
import com.todoroo.andlib.service.RestClient;
import com.todoroo.andlib.utility.Pair;
import com.todoroo.astrid.dao.StoreObjectDao;
import com.todoroo.astrid.dao.StoreObjectDao.StoreObjectCriteria;
import com.todoroo.astrid.test.DatabaseTestCase;
@ -32,7 +33,7 @@ public class UpdateMessageServiceTest extends DatabaseTestCase {
new TestUpdateMessageService() {
@Override
void verifyMessage(CharSequence message) {
void verifyMessage(Pair<String, Spannable> message) {
fail("should not have displayed updates");
}
@ -51,7 +52,7 @@ public class UpdateMessageServiceTest extends DatabaseTestCase {
new TestUpdateMessageService() {
@Override
void verifyMessage(CharSequence message) {
void verifyMessage(Pair<String, Spannable> message) {
fail("should not have displayed updates");
}
@ -68,8 +69,8 @@ public class UpdateMessageServiceTest extends DatabaseTestCase {
new TestUpdateMessageService() {
@Override
void verifyMessage(CharSequence message) {
assertTrue(message.toString().contains("yo"));
void verifyMessage(Pair<String, Spannable> message) {
assertTrue(message.getLeft().toString().contains("yo"));
}
@Override
@ -85,9 +86,9 @@ public class UpdateMessageServiceTest extends DatabaseTestCase {
new TestUpdateMessageService() {
@Override
void verifyMessage(CharSequence message) {
assertTrue(message.toString().contains("yo"));
assertFalse(message.toString().contains("cat")); // We only process the first update now
void verifyMessage(Pair<String, Spannable> message) {
assertTrue(message.getLeft().toString().contains("yo"));
assertFalse(message.getLeft().toString().contains("cat")); // We only process the first update now
}
@Override
@ -103,8 +104,8 @@ public class UpdateMessageServiceTest extends DatabaseTestCase {
new TestUpdateMessageService() {
@Override
void verifyMessage(CharSequence message) {
assertTrue(message.toString().contains("yo"));
void verifyMessage(Pair<String, Spannable> message) {
assertTrue(message.getLeft().toString().contains("yo"));
}
@Override
@ -116,7 +117,7 @@ public class UpdateMessageServiceTest extends DatabaseTestCase {
new TestUpdateMessageService() {
@Override
void verifyMessage(CharSequence message) {
void verifyMessage(Pair<String, Spannable> message) {
fail("should have not displayed again");
}
@ -138,9 +139,9 @@ public class UpdateMessageServiceTest extends DatabaseTestCase {
new TestUpdateMessageService() {
@Override
void verifyMessage(CharSequence message) {
assertTrue(message.toString().contains("yo"));
assertTrue(message.toString().contains("date"));
void verifyMessage(Pair<String, Spannable> message) {
assertTrue(message.getLeft().toString().contains("yo"));
assertTrue(message.getLeft().toString().contains("date"));
}
@Override
@ -157,8 +158,8 @@ public class UpdateMessageServiceTest extends DatabaseTestCase {
new TestUpdateMessageService() {
@Override
void verifyMessage(CharSequence message) {
assertTrue(message.toString().contains("rmilk man"));
void verifyMessage(Pair<String, Spannable> message) {
assertTrue(message.getLeft().toString().contains("rmilk man"));
}
@Override
@ -175,7 +176,7 @@ public class UpdateMessageServiceTest extends DatabaseTestCase {
new TestUpdateMessageService() {
@Override
void verifyMessage(CharSequence message) {
void verifyMessage(Pair<String, Spannable> message) {
fail("displayed update");
}
@ -197,8 +198,8 @@ public class UpdateMessageServiceTest extends DatabaseTestCase {
new TestUpdateMessageService() {
@Override
void verifyMessage(CharSequence message) {
assertTrue(message.toString().contains("astrid man"));
void verifyMessage(Pair<String, Spannable> message) {
assertTrue(message.getLeft().toString().contains("astrid man"));
}
@Override
@ -214,7 +215,7 @@ public class UpdateMessageServiceTest extends DatabaseTestCase {
new TestUpdateMessageService() {
@Override
void verifyMessage(CharSequence message) {
void verifyMessage(Pair<String, Spannable> message) {
fail("displayed update");
}
@ -236,9 +237,9 @@ public class UpdateMessageServiceTest extends DatabaseTestCase {
new TestUpdateMessageService() {
@Override
void verifyMessage(CharSequence message) {
assertTrue(message instanceof Spannable);
assertTrue(((Spannable)message).getSpans(0, message.length(), ClickableSpan.class).length > 0);
void verifyMessage(Pair<String, Spannable> message) {
assertNotNull(message.getRight());
assertTrue(((Spannable)message).getSpans(0, message.getRight().length(), ClickableSpan.class).length > 0);
}
@Override
@ -254,9 +255,9 @@ public class UpdateMessageServiceTest extends DatabaseTestCase {
new TestUpdateMessageService() {
@Override
void verifyMessage(CharSequence message) {
assertTrue(message instanceof Spannable);
assertTrue(((Spannable)message).getSpans(0, message.length(), ClickableSpan.class).length > 0);
void verifyMessage(Pair<String, Spannable> message) {
assertNotNull(message.getRight());
assertTrue(((Spannable)message).getSpans(0, message.getRight().length(), ClickableSpan.class).length > 0);
}
@Override
@ -289,7 +290,7 @@ public class UpdateMessageServiceTest extends DatabaseTestCase {
};
}
abstract void verifyMessage(CharSequence message);
abstract void verifyMessage(Pair<String, Spannable> message);
abstract String getUpdates(String url) throws IOException;
@ -298,15 +299,15 @@ public class UpdateMessageServiceTest extends DatabaseTestCase {
}
@Override
protected CharSequence buildUpdateMessage(JSONArray updates) {
CharSequence builder = super.buildUpdateMessage(updates);
if(builder.length() == 0)
protected Pair<String, Spannable> buildUpdateMessage(JSONArray updates) {
Pair<String, Spannable> message = super.buildUpdateMessage(updates);
if(message == null || message.getLeft().length() == 0)
onEmptyMessage();
return builder;
return message;
}
@Override
protected void displayUpdateDialog(CharSequence builder) {
protected void displayUpdateDialog(Pair<String, Spannable> builder) {
verifyMessage(builder);
}
}

Loading…
Cancel
Save