From 01ff80a369d29e554d417223564d0728f6d44dc8 Mon Sep 17 00:00:00 2001 From: Arne Jans Date: Fri, 13 Aug 2010 01:02:52 +0200 Subject: [PATCH] added some missing new files --- .../producteev/ProducteevControlSet.java | 157 ++++++++++++++++++ .../producteev/sync/ProducteevUser.java | 84 ++++++++++ astrid/res/layout/producteev_control.xml | 43 +++++ 3 files changed, 284 insertions(+) create mode 100644 astrid/plugin-src/com/todoroo/astrid/producteev/ProducteevControlSet.java create mode 100644 astrid/plugin-src/com/todoroo/astrid/producteev/sync/ProducteevUser.java create mode 100644 astrid/res/layout/producteev_control.xml diff --git a/astrid/plugin-src/com/todoroo/astrid/producteev/ProducteevControlSet.java b/astrid/plugin-src/com/todoroo/astrid/producteev/ProducteevControlSet.java new file mode 100644 index 000000000..114650f89 --- /dev/null +++ b/astrid/plugin-src/com/todoroo/astrid/producteev/ProducteevControlSet.java @@ -0,0 +1,157 @@ +package com.todoroo.astrid.producteev; + +import java.util.ArrayList; + +import android.app.Activity; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.AdapterView; +import android.widget.ArrayAdapter; +import android.widget.Spinner; +import android.widget.TextView; +import android.widget.AdapterView.OnItemSelectedListener; + +import com.timsu.astrid.R; +import com.todoroo.andlib.service.Autowired; +import com.todoroo.andlib.service.DependencyInjectionService; +import com.todoroo.andlib.service.ExceptionService; +import com.todoroo.astrid.activity.TaskEditActivity.TaskEditControlSet; +import com.todoroo.astrid.model.Metadata; +import com.todoroo.astrid.model.StoreObject; +import com.todoroo.astrid.model.Task; +import com.todoroo.astrid.producteev.sync.ProducteevDashboard; +import com.todoroo.astrid.producteev.sync.ProducteevDataService; +import com.todoroo.astrid.producteev.sync.ProducteevTask; +import com.todoroo.astrid.producteev.sync.ProducteevUser; + +/** + * Control Set for managing task/dashboard assignments in Producteev + * + * @author Arne Jans + * + */ +public class ProducteevControlSet implements TaskEditControlSet { + + // --- instance variables + + @Autowired + private ExceptionService exceptionService; + + private Activity activity; + + private Task myTask; + private Spinner responsibleSelector; + private Spinner dashboardSelector; + + private ArrayList users = null; + private ArrayList dashboards = null; + + public ProducteevControlSet(final Activity activity, ViewGroup parent) { + DependencyInjectionService.getInstance().inject(this); + + this.activity = activity; + LayoutInflater.from(activity).inflate(R.layout.producteev_control, parent, true); + + this.responsibleSelector = (Spinner) activity.findViewById(R.id.producteev_TEA_task_assign); + this.responsibleSelector.setOnItemSelectedListener(new OnItemSelectedListener() { + @Override + public void onItemSelected(AdapterView parent, View view, + int position, long id) { + // TODO tim, please set a flag here somewhere, so that producteevinvoker knows + // it has to invoke tasks/set_responsible, or otherwise do it your way... + + } + @Override + public void onNothingSelected(AdapterView parent) { + // TODO Auto-generated method stub + + } + }); + + this.dashboardSelector = (Spinner) activity.findViewById(R.id.producteev_TEA_dashboard_assign); + this.dashboardSelector.setOnItemSelectedListener(new OnItemSelectedListener() { + @Override + public void onItemSelected(AdapterView parent, View view, + int position, long id) { + // TODO tim, please set a flag here somewhere, so that producteevinvoker knows + // it has to invoke tasks/set_dashboard, or otherwise do it your way... + + } + @Override + public void onNothingSelected(AdapterView parent) { + // TODO Auto-generated method stub + + } + }); + } + + @Override + 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(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 dashAdapter = new ArrayAdapter(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); + return; + } + + responsibleSelector.setEnabled(true); + // 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++; + } + ArrayAdapter usersAdapter = new ArrayAdapter(activity, + android.R.layout.simple_spinner_item, users); + responsibleSelector.setAdapter(usersAdapter); + responsibleSelector.setSelection(userSpinnerIndex); + } + } + + @SuppressWarnings("nls") + @Override + public void writeToModel(Task task) { + Metadata metadata = ProducteevDataService.getInstance().getTaskMetadata(task.getId()); + if (metadata != null) { + ProducteevDashboard dashboard = (ProducteevDashboard) dashboardSelector.getSelectedItem(); + metadata.setValue(ProducteevTask.DASHBOARD_ID, dashboard.getId()); + + ProducteevUser responsibleUser = (ProducteevUser) responsibleSelector.getSelectedItem(); + metadata.setValue(ProducteevTask.RESPONSIBLE_ID, responsibleUser.getId()); + } + } +} \ No newline at end of file diff --git a/astrid/plugin-src/com/todoroo/astrid/producteev/sync/ProducteevUser.java b/astrid/plugin-src/com/todoroo/astrid/producteev/sync/ProducteevUser.java new file mode 100644 index 000000000..a116f1017 --- /dev/null +++ b/astrid/plugin-src/com/todoroo/astrid/producteev/sync/ProducteevUser.java @@ -0,0 +1,84 @@ +package com.todoroo.astrid.producteev.sync; + +import org.json.JSONException; +import org.json.JSONObject; + + +/** + * + * @author Arne Jans + */ +@SuppressWarnings("nls") +public class ProducteevUser { + + private final long id; + + private final String email; + + private final String firstname; + + private final String lastname; + + public ProducteevUser(long id, String email, String firstname, String lastname) { + this.id = id; + this.email = email; + this.firstname = firstname; + this.lastname = lastname; + } + + public ProducteevUser(JSONObject elt) throws JSONException { + this.id = elt.getLong("id"); + this.email = elt.getString("email"); + this.firstname = elt.getString("firstname"); + this.lastname = elt.getString("lastname"); + } + + /** + * @return the email + */ +public String getEmail() { + return email; +} + +/** + * @return the firstname + */ +public String getFirstname() { + return firstname; +} + +/** + * @return the lastname + */ +public String getLastname() { + return lastname; +} + +/** + * @return the id + */ +public long getId() { + return id; + } + +@Override +public String toString() { + String displayString = null; + boolean hasFirstname = false; + boolean hasLastname = false; + if (firstname != null && firstname.length() > 0) { + displayString += firstname; + hasFirstname = true; + } + if (lastname != null && lastname.length() > 0) + hasLastname = true; + if (hasFirstname && hasLastname) + displayString += " "; + if (hasLastname) + displayString += lastname; + + if (!hasFirstname && !hasLastname && email != null && email.length() > 0) + displayString += email; + return displayString; +} +} diff --git a/astrid/res/layout/producteev_control.xml b/astrid/res/layout/producteev_control.xml new file mode 100644 index 000000000..58e9c107d --- /dev/null +++ b/astrid/res/layout/producteev_control.xml @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + + + + +