Fix for producteev control set crashing if data was null, got rid of all warnings in the project

pull/14/head
Tim Su 14 years ago
parent fbbc494c43
commit c1821599f6

@ -1,8 +1,8 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" <manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.timsu.astrid" package="com.timsu.astrid"
android:versionName="3.2.0 (build your own filters, easy sorting, customizable widget, ui improvements)" android:versionName="3.2.2 (build your own filters, easy sorting, customizable widget, ui improvements)"
android:versionCode="147"> android:versionCode="149">
<!-- widgets, alarms, and services will break if Astrid is installed on SD card --> <!-- widgets, alarms, and services will break if Astrid is installed on SD card -->
<!-- android:installLocation="internalOnly"> --> <!-- android:installLocation="internalOnly"> -->

@ -74,9 +74,7 @@ public class ProducteevControlSet implements TaskEditControlSet {
@Override @Override
public void onNothingSelected(AdapterView<?> spinnerParent) { public void onNothingSelected(AdapterView<?> spinnerParent) {
responsibleSelector.setAdapter(null); //
responsibleSelector.setEnabled(false);
view.findViewById(R.id.producteev_TEA_task_assign_label).setVisibility(View.GONE);
} }
}); });
} }
@ -88,7 +86,9 @@ public class ProducteevControlSet implements TaskEditControlSet {
*/ */
private void refreshResponsibleSpinner(ArrayList<ProducteevUser> newUsers) { private void refreshResponsibleSpinner(ArrayList<ProducteevUser> newUsers) {
Metadata metadata = ProducteevDataService.getInstance().getTaskMetadata(myTask.getId()); Metadata metadata = ProducteevDataService.getInstance().getTaskMetadata(myTask.getId());
Long responsibleId = metadata.getValue(ProducteevTask.RESPONSIBLE_ID); long responsibleId = -1;
if(metadata.containsNonNullValue(ProducteevTask.RESPONSIBLE_ID))
responsibleId = metadata.getValue(ProducteevTask.RESPONSIBLE_ID);
refreshResponsibleSpinner(newUsers, responsibleId); refreshResponsibleSpinner(newUsers, responsibleId);
} }
@ -98,7 +98,7 @@ public class ProducteevControlSet implements TaskEditControlSet {
* @param newUsers the new userlist to show in the responsibleSelector * @param newUsers the new userlist to show in the responsibleSelector
* @param responsibleId the id of the responsible user to set in the spinner * @param responsibleId the id of the responsible user to set in the spinner
*/ */
private void refreshResponsibleSpinner(ArrayList<ProducteevUser> newUsers, Long responsibleId) { private void refreshResponsibleSpinner(ArrayList<ProducteevUser> newUsers, long responsibleId) {
// Fill the responsible-spinner and set the current responsible // Fill the responsible-spinner and set the current responsible
this.users = (newUsers == null ? new ArrayList<ProducteevUser>() : newUsers); this.users = (newUsers == null ? new ArrayList<ProducteevUser>() : newUsers);
@ -116,7 +116,7 @@ public class ProducteevControlSet implements TaskEditControlSet {
for (int i = 0; i < this.users.size() ; i++) { for (int i = 0; i < this.users.size() ; i++) {
if (this.users.get(i).getId() == responsibleId) { if (this.users.get(i).getId() == responsibleId) {
responsibleSpinnerIndex=i; responsibleSpinnerIndex = i;
break; break;
} }
} }
@ -131,7 +131,9 @@ public class ProducteevControlSet implements TaskEditControlSet {
metadata = ProducteevTask.newMetadata(); metadata = ProducteevTask.newMetadata();
// Fill the dashboard-spinner and set the current dashboard // Fill the dashboard-spinner and set the current dashboard
long dashboardId = metadata.getValue(ProducteevTask.DASHBOARD_ID); long dashboardId = -1;
if(metadata.containsNonNullValue(ProducteevTask.DASHBOARD_ID))
dashboardId = metadata.getValue(ProducteevTask.DASHBOARD_ID);
StoreObject[] dashboardsData = ProducteevDataService.getInstance().getDashboards(); StoreObject[] dashboardsData = ProducteevDataService.getInstance().getDashboards();
dashboards = new ArrayList<ProducteevDashboard>(dashboardsData.length); dashboards = new ArrayList<ProducteevDashboard>(dashboardsData.length);

@ -10,11 +10,11 @@ import android.content.BroadcastReceiver;
import android.content.ContentValues; import android.content.ContentValues;
import android.content.Context; import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.util.Pair;
import com.timsu.astrid.R; import com.timsu.astrid.R;
import com.todoroo.andlib.sql.Criterion; import com.todoroo.andlib.sql.Criterion;
import com.todoroo.andlib.sql.QueryTemplate; import com.todoroo.andlib.sql.QueryTemplate;
import com.todoroo.andlib.utility.Pair;
import com.todoroo.astrid.api.AstridApiConstants; import com.todoroo.astrid.api.AstridApiConstants;
import com.todoroo.astrid.api.Filter; import com.todoroo.astrid.api.Filter;
import com.todoroo.astrid.api.FilterCategory; import com.todoroo.astrid.api.FilterCategory;
@ -63,16 +63,16 @@ public class ProducteevFilterExposer extends BroadcastReceiver {
String title = context.getString(R.string.producteev_FEx_responsible_title, user); String title = context.getString(R.string.producteev_FEx_responsible_title, user);
ContentValues values = new ContentValues(); ContentValues values = new ContentValues();
values.put(Metadata.KEY.name, ProducteevTask.METADATA_KEY); values.put(Metadata.KEY.name, ProducteevTask.METADATA_KEY);
values.put(ProducteevTask.DASHBOARD_ID.name, ids.first); values.put(ProducteevTask.DASHBOARD_ID.name, ids.getLeft());
values.put(ProducteevTask.ID.name, 0); values.put(ProducteevTask.ID.name, 0);
values.put(ProducteevTask.CREATOR_ID.name, 0); values.put(ProducteevTask.CREATOR_ID.name, 0);
values.put(ProducteevTask.RESPONSIBLE_ID.name, ids.second); values.put(ProducteevTask.RESPONSIBLE_ID.name, ids.getRight());
Filter filter = new Filter(user, title, new QueryTemplate().join( Filter filter = new Filter(user, title, new QueryTemplate().join(
ProducteevDataService.METADATA_JOIN).where(Criterion.and( ProducteevDataService.METADATA_JOIN).where(Criterion.and(
MetadataCriteria.withKey(ProducteevTask.METADATA_KEY), MetadataCriteria.withKey(ProducteevTask.METADATA_KEY),
TaskCriteria.isActive(), TaskCriteria.isActive(),
TaskCriteria.isVisible(), TaskCriteria.isVisible(),
ProducteevTask.RESPONSIBLE_ID.eq(ids.second))), ProducteevTask.RESPONSIBLE_ID.eq(ids.getRight()))),
values); values);
return filter; return filter;

@ -30,6 +30,7 @@ import com.todoroo.andlib.service.Autowired;
import com.todoroo.andlib.service.DependencyInjectionService; import com.todoroo.andlib.service.DependencyInjectionService;
/** Abstract controller class. Mostly contains some static fields */ /** Abstract controller class. Mostly contains some static fields */
@SuppressWarnings("nls")
abstract public class AbstractController { abstract public class AbstractController {
protected Context context; protected Context context;

@ -26,6 +26,7 @@ import android.content.ContentValues;
import android.database.Cursor; import android.database.Cursor;
/** A data object backed by a database */ /** A data object backed by a database */
@SuppressWarnings("nls")
public abstract class AbstractModel { public abstract class AbstractModel {
/* Data Source Ordering: /* Data Source Ordering:
@ -40,7 +41,7 @@ public abstract class AbstractModel {
protected ContentValues setValues = new ContentValues(); protected ContentValues setValues = new ContentValues();
/** Cached values from database */ /** Cached values from database */
private ContentValues values = new ContentValues(); private final ContentValues values = new ContentValues();
/** Cursor into the database */ /** Cursor into the database */
private Cursor cursor = null; private Cursor cursor = null;

@ -21,7 +21,7 @@ package com.timsu.astrid.data;
/** Identifier of a single object. Extend this class to create your own */ /** Identifier of a single object. Extend this class to create your own */
public abstract class Identifier { public abstract class Identifier {
private long id; private final long id;
public Identifier(long id) { public Identifier(long id) {
this.id = id; this.id = id;
@ -50,6 +50,6 @@ public abstract class Identifier {
@Override @Override
public String toString() { public String toString() {
return getClass().getSimpleName() + ": " + id; return getClass().getSimpleName() + ": " + id; //$NON-NLS-1$
} }
} }

@ -34,6 +34,7 @@ import com.timsu.astrid.data.task.TaskIdentifier;
/** A single alert on a task */ /** A single alert on a task */
@SuppressWarnings("nls")
public class Alert extends AbstractModel { public class Alert extends AbstractModel {
/** Version number of this model */ /** Version number of this model */

@ -36,6 +36,7 @@ import com.timsu.astrid.data.alerts.Alert.AlertDatabaseHelper;
import com.timsu.astrid.data.task.TaskIdentifier; import com.timsu.astrid.data.task.TaskIdentifier;
/** Controller for Tag-related operations */ /** Controller for Tag-related operations */
@SuppressWarnings("nls")
public class AlertController extends AbstractController { public class AlertController extends AbstractController {
private SQLiteDatabase alertDatabase; private SQLiteDatabase alertDatabase;

@ -35,6 +35,7 @@ import com.timsu.astrid.data.task.TaskIdentifier;
import com.timsu.astrid.data.task.TaskModelForSync; import com.timsu.astrid.data.task.TaskModelForSync;
/** Controller for Tag-related operations */ /** Controller for Tag-related operations */
@SuppressWarnings("nls")
public class SyncDataController extends AbstractController { public class SyncDataController extends AbstractController {
private SQLiteDatabase syncDatabase; private SQLiteDatabase syncDatabase;

@ -32,6 +32,7 @@ import com.timsu.astrid.data.task.TaskIdentifier;
/** A single tag on a task */ /** A single tag on a task */
@SuppressWarnings("nls")
public class SyncMapping extends AbstractModel { public class SyncMapping extends AbstractModel {

@ -38,6 +38,7 @@ import com.timsu.astrid.data.AbstractModel;
* @author timsu * @author timsu
* *
*/ */
@SuppressWarnings("nls")
public abstract class AbstractTagModel extends AbstractModel { public abstract class AbstractTagModel extends AbstractModel {
/** Version number of this model */ /** Version number of this model */

@ -32,11 +32,12 @@ import android.database.sqlite.SQLiteDatabase;
import com.timsu.astrid.data.AbstractController; import com.timsu.astrid.data.AbstractController;
import com.timsu.astrid.data.tag.AbstractTagModel.TagModelDatabaseHelper; import com.timsu.astrid.data.tag.AbstractTagModel.TagModelDatabaseHelper;
import com.timsu.astrid.data.tag.TagToTaskMapping.TagToTaskMappingDatabaseHelper; import com.timsu.astrid.data.tag.TagToTaskMapping.TagToTaskMappingDatabaseHelper;
import com.timsu.astrid.data.task.TaskIdentifier;
import com.timsu.astrid.data.task.AbstractTaskModel.TaskModelDatabaseHelper; import com.timsu.astrid.data.task.AbstractTaskModel.TaskModelDatabaseHelper;
import com.timsu.astrid.data.task.TaskIdentifier;
import com.todoroo.astrid.provider.Astrid2TaskProvider; import com.todoroo.astrid.provider.Astrid2TaskProvider;
/** Controller for Tag-related operations */ /** Controller for Tag-related operations */
@SuppressWarnings("nls")
@Deprecated @Deprecated
public class TagController extends AbstractController { public class TagController extends AbstractController {

@ -25,6 +25,7 @@ import com.timsu.astrid.data.AbstractController;
/** Tag model for viewing purposes. Contains task name */ /** Tag model for viewing purposes. Contains task name */
@SuppressWarnings("nls")
public class TagModelForView extends AbstractTagModel { public class TagModelForView extends AbstractTagModel {
static String[] FIELD_LIST = new String[] { static String[] FIELD_LIST = new String[] {

@ -32,6 +32,7 @@ import com.timsu.astrid.data.task.TaskIdentifier;
/** A single tag on a task */ /** A single tag on a task */
@SuppressWarnings("nls")
public class TagToTaskMapping extends AbstractModel { public class TagToTaskMapping extends AbstractModel {
/** Version number of this model */ /** Version number of this model */

@ -41,6 +41,7 @@ import com.timsu.astrid.data.enums.RepeatInterval;
* @author timsu * @author timsu
* *
*/ */
@SuppressWarnings("nls")
public abstract class AbstractTaskModel extends AbstractModel { public abstract class AbstractTaskModel extends AbstractModel {
/** Version number of this model */ /** Version number of this model */
@ -262,7 +263,8 @@ public abstract class AbstractTaskModel extends AbstractModel {
// --- utility methods // --- utility methods
/** Gets task color. Requires definiteDueDate and importance */ /** Gets task color. Requires definiteDueDate and importance
* @param context */
protected int getTaskColorResource(Context context) { protected int getTaskColorResource(Context context) {
if(getDefiniteDueDate() != null && getDefiniteDueDate().getTime() < if(getDefiniteDueDate() != null && getDefiniteDueDate().getTime() <
System.currentTimeMillis()) { System.currentTimeMillis()) {

@ -51,6 +51,7 @@ import com.todoroo.astrid.widget.TasksWidget.UpdateService;
* *
*/ */
@Deprecated @Deprecated
@SuppressWarnings("nls")
public class TaskController extends AbstractController { public class TaskController extends AbstractController {
private SQLiteDatabase database; private SQLiteDatabase database;
@ -291,6 +292,7 @@ public class TaskController extends AbstractController {
* *
* @param task * @param task
* @param values * @param values
* @param duringSync
*/ */
private void onTaskSave(AbstractTaskModel task, ContentValues values, boolean duringSync) { private void onTaskSave(AbstractTaskModel task, ContentValues values, boolean duringSync) {
// save task completed date // save task completed date
@ -325,15 +327,15 @@ public class TaskController extends AbstractController {
ContentResolver cr = context.getContentResolver(); ContentResolver cr = context.getContentResolver();
Uri uri = Uri.parse(uriAsString); Uri uri = Uri.parse(uriAsString);
Integer estimated = null; // Integer estimated = null;
if(values.containsKey(AbstractTaskModel.ESTIMATED_SECONDS)) // if(values.containsKey(AbstractTaskModel.ESTIMATED_SECONDS))
estimated = values.getAsInteger(AbstractTaskModel.ESTIMATED_SECONDS); //// estimated = values.getAsInteger(AbstractTaskModel.ESTIMATED_SECONDS);
else { // read from event // else { // read from event
Cursor event = cr.query(uri, new String[] {"dtstart", "dtend"}, // Cursor event = cr.query(uri, new String[] {"dtstart", "dtend"},
null, null, null); // null, null, null);
event.moveToFirst(); // event.moveToFirst();
estimated = (event.getInt(1) - event.getInt(0))/1000; //// estimated = (event.getInt(1) - event.getInt(0))/1000;
} // }
// create new start and end date for this event // create new start and end date for this event
ContentValues newValues = new ContentValues(); ContentValues newValues = new ContentValues();
@ -569,9 +571,10 @@ public class TaskController extends AbstractController {
} }
} }
/** Updates the alarm for the task identified by the given id */ /** Updates the alarm for the task identified by the given id
* @param taskId */
public void updateAlarmForTask(TaskIdentifier taskId) throws SQLException { public void updateAlarmForTask(TaskIdentifier taskId) throws SQLException {
TaskModelForNotify task = fetchTaskForNotify(taskId); // TaskModelForNotify task = fetchTaskForNotify(taskId);
AlertController alertController = new AlertController(context); AlertController alertController = new AlertController(context);
alertController.open(); alertController.open();
// ReminderService.updateAlarm(context, this, alertController, task); // ReminderService.updateAlarm(context, this, alertController, task);

@ -57,6 +57,7 @@ public class TaskModelForHandlers extends AbstractTaskModel {
* @param taskController * @param taskController
* @param repeatInfo * @param repeatInfo
*/ */
@SuppressWarnings("deprecation")
public void repeatTaskBy(Context context, TaskController taskController, public void repeatTaskBy(Context context, TaskController taskController,
RepeatInfo repeatInfo) { RepeatInfo repeatInfo) {

@ -30,6 +30,7 @@ import com.timsu.astrid.data.enums.Importance;
/** Fields that you would want to see in the TaskView activity */ /** Fields that you would want to see in the TaskView activity */
@SuppressWarnings("nls")
public class TaskModelForProvider extends AbstractTaskModel { public class TaskModelForProvider extends AbstractTaskModel {
static String[] FIELD_LIST = new String[] { static String[] FIELD_LIST = new String[] {

@ -29,6 +29,7 @@ import com.timsu.astrid.data.enums.Importance;
/** Fields that you would want to see in the TaskView activity */ /** Fields that you would want to see in the TaskView activity */
@SuppressWarnings("nls")
public class TaskModelForWidget extends AbstractTaskModel { public class TaskModelForWidget extends AbstractTaskModel {
static String[] FIELD_LIST = new String[] { static String[] FIELD_LIST = new String[] {

@ -10,6 +10,7 @@ import com.timsu.astrid.data.enums.Importance;
import com.timsu.astrid.data.enums.RepeatInterval; import com.timsu.astrid.data.enums.RepeatInterval;
import com.todoroo.astrid.backup.BackupDateUtilities; import com.todoroo.astrid.backup.BackupDateUtilities;
@SuppressWarnings("nls")
public class TaskModelForXml extends AbstractTaskModel { public class TaskModelForXml extends AbstractTaskModel {
static String[] FIELD_LIST = new String[] { static String[] FIELD_LIST = new String[] {

@ -30,7 +30,7 @@ import com.timsu.astrid.data.task.TaskIdentifier;
import com.timsu.astrid.data.task.TaskModelForXml; import com.timsu.astrid.data.task.TaskModelForXml;
import com.todoroo.astrid.backup.BackupDateUtilities; import com.todoroo.astrid.backup.BackupDateUtilities;
@SuppressWarnings("nls") @SuppressWarnings({"nls", "deprecation"})
public class LegacyTasksXmlExporter { public class LegacyTasksXmlExporter {
private TaskController taskController; private TaskController taskController;
@ -242,17 +242,17 @@ public class LegacyTasksXmlExporter {
this.output = file; this.output = file;
} }
private final Runnable doBackgroundExport = new Runnable() { // private final Runnable doBackgroundExport = new Runnable() {
public void run() { // public void run() {
/*Looper.prepare(); // /*Looper.prepare();
try { // try {
doTasksExport(); // doTasksExport();
} catch (IOException e) { // } catch (IOException e) {
Log.e("TasksXmlExporter", "IOException in doTasksExport " + e.getMessage()); // Log.e("TasksXmlExporter", "IOException in doTasksExport " + e.getMessage());
} // }
Looper.loop();*/ // Looper.loop();*/
} // }
}; // };
public void setTaskController(TaskController taskController) { public void setTaskController(TaskController taskController) {
this.taskController = taskController; this.taskController = taskController;

@ -39,6 +39,7 @@ import android.content.IntentFilter;
import android.content.res.Resources; import android.content.res.Resources;
import android.os.Bundle; import android.os.Bundle;
import android.text.format.DateUtils; import android.text.format.DateUtils;
import android.util.Log;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.Menu; import android.view.Menu;
import android.view.MenuItem; import android.view.MenuItem;
@ -232,10 +233,16 @@ public final class TaskEditActivity extends TabActivity {
controls.add(new RepeatControlSet(this, extrasAddons)); controls.add(new RepeatControlSet(this, extrasAddons));
LinearLayout addonsAddons = (LinearLayout) findViewById(R.id.tab_addons_addons); LinearLayout addonsAddons = (LinearLayout) findViewById(R.id.tab_addons_addons);
AddOn producteevAddon = addOnService.getAddOn(AddOnService.PRODUCTEEV_PACKAGE, "Producteev"); //$NON-NLS-1$
if (addOnService.isInstalled(producteevAddon) && ProducteevUtilities.INSTANCE.isLoggedIn()) { try {
controls.add(new ProducteevControlSet(this, addonsAddons)); AddOn producteevAddon = addOnService.getAddOn(AddOnService.PRODUCTEEV_PACKAGE, "Producteev"); //$NON-NLS-1$
if (addOnService.isInstalled(producteevAddon) && ProducteevUtilities.INSTANCE.isLoggedIn()) {
controls.add(new ProducteevControlSet(this, addonsAddons));
}
} catch (Exception e) {
Log.e("astrid-error", "loading-control-set", e); //$NON-NLS-1$ //$NON-NLS-2$
} }
if(addOnService.hasPowerPack()) { if(addOnService.hasPowerPack()) {
controls.add(new GCalControlSet(this, addonsAddons)); controls.add(new GCalControlSet(this, addonsAddons));
controls.add(new TimerControlSet(this, addonsAddons)); controls.add(new TimerControlSet(this, addonsAddons));

Loading…
Cancel
Save