Fixed content values not being set correctly (most of the time, at least), fix for widget tapping not launching the right filter. I think the widget add button still doesn't respect content values, but everything else looks about right

pull/14/head
Tim Su 16 years ago
parent fe3dfb2fab
commit 542d9dfee3

@ -351,7 +351,6 @@ public class CustomFilterActivity extends ListActivity {
values.put(entry.getKey().replace("?", entryValue),
entry.getValue().toString().replace("?", entryValue));
}
values.putAll(instance.criterion.valuesForNewTasks);
}
}

@ -3,6 +3,7 @@ package com.todoroo.astrid.producteev;
import java.util.ArrayList;
import android.app.Activity;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
@ -61,82 +62,88 @@ public class ProducteevControlSet implements TaskEditControlSet {
public void readFromTask(Task task) {
this.myTask = task;
Metadata metadata = ProducteevDataService.getInstance().getTaskMetadata(myTask.getId());
if (metadata != null) {
// Fill the dashboard-spinner and set the current dashboard
long dashboardId = metadata.getValue(ProducteevTask.DASHBOARD_ID);
StoreObject[] dashboardsData = ProducteevDataService.getInstance().getDashboards();
dashboards = new ArrayList<ProducteevDashboard>(dashboardsData.length);
ProducteevDashboard ownerDashboard = null;
int dashboardSpinnerIndex = 0;
//dashboard to not sync as first spinner-entry
dashboards.add(new ProducteevDashboard(ProducteevUtilities.DASHBOARD_NO_SYNC, activity.getString(R.string.producteev_no_dashboard),null));
for (int i=1;i<dashboardsData.length+1;i++) {
ProducteevDashboard dashboard = new ProducteevDashboard(dashboardsData[i-1]);
dashboards.add(dashboard);
if(dashboard.getId() == dashboardId) {
ownerDashboard = dashboard;
dashboardSpinnerIndex = i;
}
if(metadata == null)
metadata = ProducteevTask.newMetadata();
// Fill the dashboard-spinner and set the current dashboard
long dashboardId = metadata.getValue(ProducteevTask.DASHBOARD_ID);
StoreObject[] dashboardsData = ProducteevDataService.getInstance().getDashboards();
dashboards = new ArrayList<ProducteevDashboard>(dashboardsData.length);
ProducteevDashboard ownerDashboard = null;
int dashboardSpinnerIndex = 0;
//dashboard to not sync as first spinner-entry
dashboards.add(new ProducteevDashboard(ProducteevUtilities.DASHBOARD_NO_SYNC, activity.getString(R.string.producteev_no_dashboard),null));
for (int i=1;i<dashboardsData.length+1;i++) {
ProducteevDashboard dashboard = new ProducteevDashboard(dashboardsData[i-1]);
dashboards.add(dashboard);
if(dashboard.getId() == dashboardId) {
ownerDashboard = dashboard;
dashboardSpinnerIndex = i;
}
}
ArrayAdapter<ProducteevDashboard> dashAdapter = new ArrayAdapter<ProducteevDashboard>(activity,
android.R.layout.simple_spinner_item, dashboards);
dashAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
dashboardSelector.setAdapter(dashAdapter);
dashboardSelector.setSelection(dashboardSpinnerIndex);
if (ownerDashboard == null || ownerDashboard.getId() == ProducteevUtilities.DASHBOARD_NO_SYNC) {
responsibleSelector.setEnabled(false);
TextView emptyView = new TextView(activity);
emptyView.setText(activity.getText(R.string.producteev_no_dashboard));
responsibleSelector.setEmptyView(emptyView);
view.findViewById(R.id.producteev_TEA_task_assign_label).setVisibility(View.GONE);
return;
}
ArrayAdapter<ProducteevDashboard> dashAdapter = new ArrayAdapter<ProducteevDashboard>(activity,
android.R.layout.simple_spinner_item, dashboards);
dashAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
dashboardSelector.setAdapter(dashAdapter);
dashboardSelector.setSelection(dashboardSpinnerIndex);
if (ownerDashboard == null || ownerDashboard.getId() == ProducteevUtilities.DASHBOARD_NO_SYNC) {
responsibleSelector.setEnabled(false);
TextView emptyView = new TextView(activity);
emptyView.setText(activity.getText(R.string.producteev_no_dashboard));
responsibleSelector.setEmptyView(emptyView);
view.findViewById(R.id.producteev_TEA_task_assign_label).setVisibility(View.GONE);
return;
}
// Fill the responsible-spinner and set the current responsible
users = ownerDashboard.getUsers();
long responsibleId = metadata.getValue(ProducteevTask.RESPONSIBLE_ID);
int userSpinnerIndex = 0;
// Fill the responsible-spinner and set the current responsible
users = ownerDashboard.getUsers();
long responsibleId = metadata.getValue(ProducteevTask.RESPONSIBLE_ID);
int userSpinnerIndex = 0;
for (ProducteevUser user : users) {
if (user.getId() == responsibleId) {
break;
}
userSpinnerIndex++;
for (ProducteevUser user : users) {
if (user.getId() == responsibleId) {
break;
}
ArrayAdapter<ProducteevUser> usersAdapter = new ArrayAdapter<ProducteevUser>(activity,
android.R.layout.simple_spinner_item, users);
usersAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
responsibleSelector.setAdapter(usersAdapter);
responsibleSelector.setSelection(userSpinnerIndex);
userSpinnerIndex++;
}
ArrayAdapter<ProducteevUser> usersAdapter = new ArrayAdapter<ProducteevUser>(activity,
android.R.layout.simple_spinner_item, users);
usersAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
responsibleSelector.setAdapter(usersAdapter);
responsibleSelector.setSelection(userSpinnerIndex);
}
@Override
public void writeToModel(Task task) {
Metadata metadata = ProducteevDataService.getInstance().getTaskMetadata(task.getId());
if (metadata == null) {
metadata = new Metadata();
metadata.setValue(Metadata.KEY, ProducteevTask.METADATA_KEY);
metadata.setValue(Metadata.TASK, task.getId());
metadata.setValue(ProducteevTask.ID, 0L);
}
try {
if (metadata == null) {
metadata = new Metadata();
metadata.setValue(Metadata.KEY, ProducteevTask.METADATA_KEY);
metadata.setValue(Metadata.TASK, task.getId());
metadata.setValue(ProducteevTask.ID, 0L);
}
ProducteevDashboard dashboard = (ProducteevDashboard) dashboardSelector.getSelectedItem();
metadata.setValue(ProducteevTask.DASHBOARD_ID, dashboard.getId());
ProducteevDashboard dashboard = (ProducteevDashboard) dashboardSelector.getSelectedItem();
metadata.setValue(ProducteevTask.DASHBOARD_ID, dashboard.getId());
ProducteevUser responsibleUser = (ProducteevUser) responsibleSelector.getSelectedItem();
ProducteevUser responsibleUser = (ProducteevUser) responsibleSelector.getSelectedItem();
if(responsibleUser == null)
metadata.setValue(ProducteevTask.RESPONSIBLE_ID, 0L);
else
metadata.setValue(ProducteevTask.RESPONSIBLE_ID, responsibleUser.getId());
if(responsibleUser == null)
metadata.setValue(ProducteevTask.RESPONSIBLE_ID, 0L);
else
metadata.setValue(ProducteevTask.RESPONSIBLE_ID, responsibleUser.getId());
if(metadata.getSetValues().size() > 0 ) {
metadataService.save(metadata);
task.setValue(Task.MODIFICATION_DATE, DateUtilities.now());
if(metadata.getSetValues().size() > 0 ) {
metadataService.save(metadata);
task.setValue(Task.MODIFICATION_DATE, DateUtilities.now());
}
} catch (Exception e) {
Log.e("error-saving-pdv", "Error Saving Metadata", e); //$NON-NLS-1$ //$NON-NLS-2$
}
}
}

@ -2,6 +2,8 @@ package com.todoroo.astrid.producteev.sync;
import com.todoroo.andlib.data.Property.LongProperty;
import com.todoroo.astrid.model.Metadata;
import com.todoroo.astrid.producteev.ProducteevUtilities;
import com.todoroo.astrid.utility.Preferences;
/**
* Metadata entries for a Producteev Task
@ -29,4 +31,14 @@ public class ProducteevTask {
public static final LongProperty RESPONSIBLE_ID = new LongProperty(Metadata.TABLE,
Metadata.VALUE4.name);
public static Metadata newMetadata() {
Metadata metadata = new Metadata();
metadata.setValue(Metadata.KEY, ProducteevTask.METADATA_KEY);
metadata.setValue(ID, 0L);
metadata.setValue(DASHBOARD_ID, ProducteevUtilities.INSTANCE.getDefaultDashboard());
metadata.setValue(CREATOR_ID, Preferences.getLong(ProducteevUtilities.PREF_USER_ID, 0L));
metadata.setValue(RESPONSIBLE_ID, Preferences.getLong(ProducteevUtilities.PREF_USER_ID, 0L));
return metadata;
}
}

@ -24,8 +24,7 @@ public class ProducteevTaskContainer extends TaskContainer {
this.metadata = metadata;
this.pdvTask = pdvTask;
if(this.pdvTask == null) {
this.pdvTask = new Metadata();
this.pdvTask.setValue(Metadata.KEY, ProducteevTask.METADATA_KEY);
this.pdvTask = ProducteevTask.newMetadata();
}
}
@ -52,8 +51,7 @@ public class ProducteevTaskContainer extends TaskContainer {
}
}
if(this.pdvTask == null) {
this.pdvTask = new Metadata();
this.pdvTask.setValue(Metadata.KEY, ProducteevTask.METADATA_KEY);
this.pdvTask = ProducteevTask.newMetadata();
}
}

@ -13,6 +13,7 @@ import android.widget.LinearLayout;
import android.widget.TextView;
import com.timsu.astrid.R;
import com.todoroo.andlib.data.AbstractModel;
import com.todoroo.andlib.data.TodorooCursor;
import com.todoroo.andlib.sql.Criterion;
import com.todoroo.andlib.utility.DateUtilities;
@ -47,18 +48,21 @@ public final class TagsControlSet implements TaskEditControlSet {
public void readFromTask(Task task) {
tagsContainer.removeAllViews();
TodorooCursor<Metadata> cursor = tagService.getTags(task.getId());
try {
loadedTags = new String[cursor.getCount()];
for(int i = 0; i < loadedTags.length; i++) {
cursor.moveToNext();
String tag = cursor.get(TagService.TAG);
addTag(tag);
loadedTags[i] = tag;
if(task.getId() != AbstractModel.NO_ID) {
TodorooCursor<Metadata> cursor = tagService.getTags(task.getId());
try {
loadedTags = new String[cursor.getCount()];
for(int i = 0; i < loadedTags.length; i++) {
cursor.moveToNext();
String tag = cursor.get(TagService.TAG);
addTag(tag);
loadedTags[i] = tag;
}
} finally {
cursor.close();
}
} finally {
cursor.close();
}
if(tagsContainer.getChildCount() == 0)
addTag(""); //$NON-NLS-1$
}

@ -15,9 +15,9 @@
<TextView
android:id="@+id/widget_title"
android:layout_gravity="left"
android:layout_width="82dp"
android:layout_height="47dp"
android:layout_height="50dp"
android:layout_gravity="left"
android:textColor="#ffffff"
android:textSize="14sp"
android:textStyle="bold"
@ -29,7 +29,7 @@
android:src="@drawable/button_plus"
android:layout_gravity="right"
android:layout_width="35dp"
android:layout_height="47dp"
android:layout_height="50dp"
android:background="#00000000" />
</LinearLayout>

@ -30,6 +30,7 @@ import android.app.DatePickerDialog;
import android.app.DatePickerDialog.OnDateSetListener;
import android.app.TabActivity;
import android.content.BroadcastReceiver;
import android.content.ContentValues;
import android.content.Context;
import android.content.DialogInterface;
import android.content.DialogInterface.OnCancelListener;
@ -78,6 +79,7 @@ import com.todoroo.astrid.producteev.ProducteevControlSet;
import com.todoroo.astrid.producteev.ProducteevUtilities;
import com.todoroo.astrid.repeats.RepeatControlSet;
import com.todoroo.astrid.service.AddOnService;
import com.todoroo.astrid.service.MetadataService;
import com.todoroo.astrid.service.StartupService;
import com.todoroo.astrid.service.TaskService;
import com.todoroo.astrid.tags.TagsControlSet;
@ -101,7 +103,12 @@ public final class TaskEditActivity extends TabActivity {
/**
* Task ID
*/
public static final String ID_TOKEN = "i"; //$NON-NLS-1$
public static final String TOKEN_ID = "i"; //$NON-NLS-1$
/**
* Content Values to set
*/
public static final String TOKEN_VALUES = "v"; //$NON-NLS-1$
// --- request codes
@ -131,6 +138,9 @@ public final class TaskEditActivity extends TabActivity {
@Autowired
private TaskService taskService;
@Autowired
private MetadataService metadataService;
@Autowired
private DateUtilities dateUtilities;
@ -299,7 +309,7 @@ public final class TaskEditActivity extends TabActivity {
*/
@SuppressWarnings("nls")
protected void loadItem(Intent intent) {
long idParam = intent.getLongExtra(ID_TOKEN, -1L);
long idParam = intent.getLongExtra(TOKEN_ID, -1L);
database.openForReading();
if(idParam > -1L) {
@ -308,8 +318,11 @@ public final class TaskEditActivity extends TabActivity {
// not found by id or was never passed an id
if(model == null) {
model = new Task();
taskService.save(model, false);
String valuesAsString = intent.getStringExtra(TOKEN_VALUES);
ContentValues values = null;
if(valuesAsString != null)
values = AndroidUtilities.contentValuesFromSerializedString(valuesAsString);
model = TaskListActivity.createWithValues(values, taskService, metadataService);
}
if(model.getValue(Task.TITLE).length() == 0)
FlurryAgent.onEvent("create-task");

@ -48,13 +48,13 @@ import android.widget.Toast;
import com.flurry.android.FlurryAgent;
import com.timsu.astrid.R;
import com.todoroo.andlib.data.Property;
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.utility.AndroidUtilities;
import com.todoroo.andlib.utility.DateUtilities;
import com.todoroo.andlib.utility.DialogUtilities;
import com.todoroo.andlib.utility.Pair;
import com.todoroo.andlib.widget.GestureService;
@ -64,6 +64,7 @@ import com.todoroo.astrid.adapter.TaskAdapter;
import com.todoroo.astrid.adapter.TaskAdapter.ViewHolder;
import com.todoroo.astrid.api.AstridApiConstants;
import com.todoroo.astrid.api.Filter;
import com.todoroo.astrid.api.PermaSql;
import com.todoroo.astrid.api.TaskAction;
import com.todoroo.astrid.api.TaskDecoration;
import com.todoroo.astrid.backup.BackupActivity;
@ -350,7 +351,7 @@ public class TaskListActivity extends ListActivity implements OnScrollListener,
public void onClick(View v) {
Task task = quickAddTask(quickAddBox.getText().toString(), false);
Intent intent = new Intent(TaskListActivity.this, TaskEditActivity.class);
intent.putExtra(TaskEditActivity.ID_TOKEN, task.getId());
intent.putExtra(TaskEditActivity.TOKEN_ID, task.getId());
startActivityForResult(intent, ACTIVITY_EDIT_TASK);
}
});
@ -629,29 +630,9 @@ public class TaskListActivity extends ListActivity implements OnScrollListener,
@SuppressWarnings("nls")
protected Task quickAddTask(String title, boolean selectNewTask) {
try {
Task task = new Task();
Task task = createWithValues(filter.valuesForNewTasks,
taskService, metadataService);
task.setValue(Task.TITLE, title.trim());
ContentValues forMetadata = null;
if(filter.valuesForNewTasks != null && filter.valuesForNewTasks.size() > 0) {
ContentValues forTask = new ContentValues();
forMetadata = new ContentValues();
for(Entry<String, Object> item : filter.valuesForNewTasks.valueSet()) {
if(Long.valueOf(Filter.VALUE_NOW).equals(item.getValue()))
item.setValue(DateUtilities.now());
if(item.getKey().startsWith(Task.TABLE.name))
AndroidUtilities.putInto(forTask, item.getKey(), item.getValue());
else
AndroidUtilities.putInto(forMetadata, item.getKey(), item.getValue());
}
task.mergeWith(forTask);
}
taskService.save(task, false);
if(forMetadata != null && forMetadata.size() > 0) {
Metadata metadata = new Metadata();
metadata.setValue(Metadata.TASK, task.getId());
metadata.mergeWith(forMetadata);
metadataService.save(metadata);
}
TextView quickAdd = (TextView)findViewById(R.id.quickAddText);
quickAdd.setText(""); //$NON-NLS-1$
@ -668,6 +649,46 @@ public class TaskListActivity extends ListActivity implements OnScrollListener,
}
}
/**
* Create task from the given content values, saving it.
* @param values
* @param taskService
* @param metadataService
* @return
*/
public static Task createWithValues(ContentValues values, TaskService taskService,
MetadataService metadataService) {
Task task = new Task();
ContentValues forMetadata = null;
if(values != null && values.size() > 0) {
ContentValues forTask = new ContentValues();
forMetadata = new ContentValues();
outer: for(Entry<String, Object> item : values.valueSet()) {
String key = item.getKey();
Object value = item.getValue();
if(value instanceof String)
value = PermaSql.replacePlaceholders((String)value);
for(Property<?> property : Metadata.PROPERTIES)
if(property.name.equals(key)) {
AndroidUtilities.putInto(forMetadata, key, value);
continue outer;
}
AndroidUtilities.putInto(forTask, key, value);
}
task.mergeWith(forTask);
}
taskService.save(task, false);
if(forMetadata != null && forMetadata.size() > 0) {
Metadata metadata = new Metadata();
metadata.setValue(Metadata.TASK, task.getId());
metadata.mergeWith(forMetadata);
metadataService.save(metadata);
}
return task;
}
protected Pair<CharSequence, Intent>[] contextMenuItemCache = null;
protected void loadContextMenuIntents() {
@ -784,7 +805,7 @@ public class TaskListActivity extends ListActivity implements OnScrollListener,
case CONTEXT_MENU_EDIT_TASK_ID: {
itemId = item.getGroupId();
intent = new Intent(TaskListActivity.this, TaskEditActivity.class);
intent.putExtra(TaskEditActivity.ID_TOKEN, itemId);
intent.putExtra(TaskEditActivity.TOKEN_ID, itemId);
startActivityForResult(intent, ACTIVITY_EDIT_TASK);
return true;
}

@ -556,7 +556,7 @@ public class TaskAdapter extends CursorAdapter implements Filterable {
@Override
public void onClick(View arg0) {
Intent intent = new Intent(activity, TaskEditActivity.class);
intent.putExtra(TaskEditActivity.ID_TOKEN, taskId);
intent.putExtra(TaskEditActivity.TOKEN_ID, taskId);
activity.startActivity(intent);
}
});

@ -129,14 +129,10 @@ public class TasksWidget extends AppWidgetProvider {
int[] separatorIDs = SEPARATOR_IDS;
int numberOfTasks = 5;
Intent listIntent = new Intent(context, TaskListActivity.class);
PendingIntent pendingIntent = PendingIntent.getActivity(context, 0,
listIntent, 0);
views.setOnClickPendingIntent(R.id.taskbody, pendingIntent);
TodorooCursor<Task> cursor = null;
Filter filter = null;
try {
Filter filter = getFilter(widgetId);
filter = getFilter(widgetId);
views.setTextViewText(R.id.widget_title, filter.title);
int flags = Preferences.getInt(SortSelectionActivity.PREF_SORT_FLAGS, 0);
@ -178,7 +174,21 @@ public class TasksWidget extends AppWidgetProvider {
cursor.close();
}
Intent listIntent = new Intent(context, TaskListActivity.class);
if(filter != null) {
listIntent.putExtra(TaskListActivity.TOKEN_FILTER, filter);
listIntent.setType(filter.sqlQuery);
}
PendingIntent pendingIntent = PendingIntent.getActivity(context, 0,
listIntent, 0);
views.setOnClickPendingIntent(R.id.taskbody, pendingIntent);
Intent editIntent = new Intent(context, TaskEditActivity.class);
if(filter != null && filter.valuesForNewTasks != null) {
String values = AndroidUtilities.contentValuesToSerializedString(filter.valuesForNewTasks);
editIntent.putExtra(TaskEditActivity.TOKEN_VALUES, values);
editIntent.setType(values);
}
pendingIntent = PendingIntent.getActivity(context, 0,
editIntent, 0);
views.setOnClickPendingIntent(R.id.widget_button, pendingIntent);

@ -51,7 +51,7 @@ public class WidgetConfigActivity extends ExpandableListActivity {
// set up ui
adapter = new FilterAdapter(this, getExpandableListView(),
R.layout.filter_adapter_row, false);
R.layout.filter_adapter_row, true);
setListAdapter(adapter);
Button button = (Button)findViewById(R.id.ok);

Loading…
Cancel
Save