Fixed crashes all around, created a changelist displayer in upgrade service

pull/14/head
Tim Su 15 years ago
parent 35e48eb0e6
commit 741a6246a6

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.timsu.astrid"
android:versionCode="150" android:versionName="3.0.0">
android:versionCode="131" android:versionName="2.14.0">
<!-- ============================ Metadata ============================ -->

@ -71,7 +71,7 @@ public class DialogUtilities {
* @param text
* @param okListener
*/
public void okDialog(final Activity activity, final int icon, final String text,
public void okDialog(final Activity activity, final int icon, final CharSequence text,
final DialogInterface.OnClickListener okListener) {
activity.runOnUiThread(new Runnable() {
public void run() {

@ -19,7 +19,7 @@
59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-->
<ViewFlipper android:id="@+id/main"
<com.timsu.astrid.widget.ViewFlipper android:id="@+id/main"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
@ -136,4 +136,4 @@
</LinearLayout>
</LinearLayout>
</ViewFlipper>
</com.timsu.astrid.widget.ViewFlipper>

@ -308,9 +308,11 @@ to the plugin creator for fastest service.
<!-- Button to send e-mail to Todoroo -->
<string name="HlA_email_us">E-mail Todoroo</string>
<!-- ========================== UpdateService ========================== -->
<!-- Window title -->
<string name="HlA_title">Todoroo Help</string>
<!-- Change Log Window Title -->
<string name="UpS_changelog_title">What\'s New In Astrid?</string>
<!-- ========================= EditPreferences ========================= -->

@ -194,7 +194,7 @@ public class TaskListAdapter extends ArrayAdapter<TaskModelForList> {
public View getView(int position, View convertView, ViewGroup parent) {
View view = convertView;
if(objects.get(position) == null)
if(objects.size() <= position || objects.get(position) == null)
return deletedItemView;
if(view == null) {

@ -19,6 +19,15 @@
*/
package com.timsu.astrid.activities;
import java.util.Collections;
import java.util.Comparator;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.Random;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
@ -31,12 +40,24 @@ import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
import android.util.Log;
import android.view.*;
import android.view.ContextMenu;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.View.OnClickListener;
import android.view.View.OnCreateContextMenuListener;
import android.widget.*;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
import android.widget.AdapterView.OnItemClickListener;
import com.flurry.android.FlurryAgent;
import com.timsu.astrid.R;
import com.timsu.astrid.activities.TaskListAdapter.TaskListAdapterHooks;
@ -50,15 +71,19 @@ import com.timsu.astrid.data.task.TaskModelForList;
import com.timsu.astrid.sync.SynchronizationService;
import com.timsu.astrid.sync.Synchronizer;
import com.timsu.astrid.sync.Synchronizer.SynchronizerListener;
import com.timsu.astrid.utilities.*;
import com.timsu.astrid.utilities.AstridUtilities;
import com.timsu.astrid.utilities.Constants;
import com.timsu.astrid.utilities.DialogUtilities;
import com.timsu.astrid.utilities.Notifications;
import com.timsu.astrid.utilities.Preferences;
import com.timsu.astrid.utilities.TasksXmlExporter;
import com.timsu.astrid.utilities.TasksXmlImporter;
import com.timsu.astrid.widget.FilePickerBuilder;
import com.timsu.astrid.widget.NNumberPickerDialog.OnNNumberPickedListener;
import com.timsu.astrid.widget.NumberPicker;
import com.timsu.astrid.widget.NumberPickerDialog;
import com.timsu.astrid.widget.NNumberPickerDialog.OnNNumberPickedListener;
import com.timsu.astrid.widget.NumberPickerDialog.OnNumberPickedListener;
import java.util.*;
/**
* Primary view for the Astrid Application. Lists all of the tasks in the
* system, and allows users to interact with them.
@ -818,9 +843,13 @@ public class TaskListSubActivity extends SubActivity {
/** Set up the adapter for our task list */
private void setUpListUI() {
// if something happened, don't finish setting up the list
if(context.taskArray == null)
return;
// set up our adapter
context.listAdapter = new TaskListAdapter(getParent(),
R.layout.task_list_row, context.taskArray, new TaskListHooks());
R.layout.task_list_row, context.taskArray, new TaskListHooks());
listView.setAdapter(context.listAdapter);
listView.setItemsCanFocus(true);
@ -1306,7 +1335,7 @@ public class TaskListSubActivity extends SubActivity {
};
DialogUtilities.filePicker(ctx,
ctx.getString(R.string.import_file_prompt),
TasksXmlExporter.getExportDirectory(),
TasksXmlExporter.getExportDirectory(),
listener);
}

@ -19,7 +19,9 @@ import com.timsu.astrid.R;
import com.timsu.astrid.activities.SyncPreferences;
import com.timsu.astrid.appwidget.AstridAppWidgetProvider.UpdateService;
import com.timsu.astrid.sync.SynchronizationService;
import com.todoroo.andlib.service.ContextManager;
import com.todoroo.astrid.service.AstridDependencyInjector;
import com.todoroo.astrid.service.UpgradeService;
public class StartupReceiver extends BroadcastReceiver {
@ -32,6 +34,7 @@ public class StartupReceiver extends BroadcastReceiver {
@Override
/** Called when the system is started up */
public void onReceive(Context context, Intent intent) {
ContextManager.setContext(context);
Notifications.scheduleAllAlarms(context);
}
@ -40,6 +43,8 @@ public class StartupReceiver extends BroadcastReceiver {
if(hasStartedUp)
return;
ContextManager.setContext(context);
int latestSetVersion = Preferences.getCurrentVersion(context);
int version = 0;
try {
@ -72,6 +77,7 @@ public class StartupReceiver extends BroadcastReceiver {
Preferences.setCurrentVersion(context, finalVersion);
}
new UpgradeService().performUpgrade(latestSetVersion, version);
// perform startup activities in a background thread

@ -0,0 +1,28 @@
package com.timsu.astrid.widget;
import android.content.Context;
import android.util.AttributeSet;
/**
* This class exists solely to suppress an Android 2.1 error
* @author Tim Su <tim@todoroo.com>
*
*/
public class ViewFlipper extends android.widget.ViewFlipper {
public ViewFlipper(Context context) {
super(context);
}
public ViewFlipper(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
protected void onDetachedFromWindow() {
try {
super.onDetachedFromWindow();
} catch (Exception e) {
// stupid Android 2.1 exception
}
}
}

@ -3,13 +3,16 @@ package com.todoroo.astrid.service;
import java.util.HashMap;
import java.util.Map.Entry;
import android.app.Activity;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.text.Html;
import android.util.Log;
import com.timsu.astrid.R;
import com.timsu.astrid.data.AbstractController;
import com.timsu.astrid.data.task.AbstractTaskModel;
import com.todoroo.andlib.data.AbstractModel;
@ -19,6 +22,7 @@ import com.todoroo.andlib.data.Property.PropertyVisitor;
import com.todoroo.andlib.service.Autowired;
import com.todoroo.andlib.service.ContextManager;
import com.todoroo.andlib.service.DependencyInjectionService;
import com.todoroo.andlib.utility.DialogUtilities;
import com.todoroo.astrid.dao.Database;
import com.todoroo.astrid.dao.MetadataDao;
import com.todoroo.astrid.dao.TaskDao;
@ -47,6 +51,9 @@ public final class UpgradeService {
@Autowired
private String tagTaskTable;
@Autowired
private DialogUtilities dialogUtilities;
// --- implementation
public UpgradeService() {
@ -62,12 +69,56 @@ public final class UpgradeService {
* @param to
*/
public void performUpgrade(int from, int to) {
from = 130;
if(from == to)
return;
if(from < 150) {
upgrade2To3();
// display changelog
showChangeLog(from, to);
}
/**
* Return a change log string. Releases occur often enough that we don't
* expect change sets to be localized.
*
* @param from
* @param to
* @return
*/
@SuppressWarnings("nls")
public void showChangeLog(int from, int to) {
StringBuilder changeLog = new StringBuilder();
switch(from) {
case 130:
default:
newVersionString(changeLog, "2.14.0", new String[] {
"Pick a calendar to 'Add to Calendar' (in Preferences)",
"Fixed crashes with backups & sync"});
// came from bizarre version
}
if(changeLog.length() == 0)
return;
dialogUtilities.okDialog((Activity)ContextManager.getContext(),
R.string.UpS_changelog_title,
Html.fromHtml(changeLog.toString()), null);
}
/**
* Helper for adding a single version to the changelog
* @param changeLog
* @param version
* @param changes
*/
@SuppressWarnings("nls")
private void newVersionString(StringBuilder changeLog, String version, String[] changes) {
changeLog.append("<font style='text-align: center' color='#ffaa00'><b>Version ").append(version).append(":</b></font><br>");
for(String change : changes)
changeLog.append("&bull; ").append(change).append("<br>");
changeLog.append("<br>");
}
// --- database upgrade logic
@ -97,7 +148,7 @@ public final class UpgradeService {
/**
* Perform the upgrade from Astrid 2 to Astrid 3
*/
private void upgrade2To3() {
public void upgrade2To3() {
Context context = ContextManager.getContext();
database.openForWriting();
@ -148,6 +199,7 @@ public final class UpgradeService {
* @author Tim Su <tim@todoroo.com>
*
*/
@SuppressWarnings("nls")
protected static final class ColumnUpgradeVisitor implements PropertyVisitor<Void, UpgradeVisitorContainer> {
@Override
public Void visitDouble(Property<Double> property, UpgradeVisitorContainer data) {

Loading…
Cancel
Save