From 85ca151b01e450f6c1e813b26be2a2e29d9efce7 Mon Sep 17 00:00:00 2001 From: Arne Jans Date: Mon, 16 Aug 2010 05:29:33 +0800 Subject: [PATCH] TaskEditPage: responsibleSpinner gets updated by selecting another dashboard. And its more robust now, if selecting another dashboard, it tries to identify the responsible amongst the associated users and sets it. And if you select the nosync-dashboard, it doesnt get NPEs anymore. Also fixed an invalid whitespace in strings-producteev.xml --- .../producteev/ProducteevControlSet.java | 96 ++++++++++++++----- astrid/res/values/strings-producteev.xml | 4 +- 2 files changed, 74 insertions(+), 26 deletions(-) diff --git a/astrid/plugin-src/com/todoroo/astrid/producteev/ProducteevControlSet.java b/astrid/plugin-src/com/todoroo/astrid/producteev/ProducteevControlSet.java index 5c8389499..7b2a6c451 100644 --- a/astrid/plugin-src/com/todoroo/astrid/producteev/ProducteevControlSet.java +++ b/astrid/plugin-src/com/todoroo/astrid/producteev/ProducteevControlSet.java @@ -7,9 +7,11 @@ import android.util.Log; 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; @@ -55,7 +57,70 @@ public class ProducteevControlSet implements TaskEditControlSet { view = LayoutInflater.from(activity).inflate(R.layout.producteev_control, parent, true); this.responsibleSelector = (Spinner) activity.findViewById(R.id.producteev_TEA_task_assign); + TextView emptyView = new TextView(activity); + emptyView.setText(activity.getText(R.string.producteev_no_dashboard)); + responsibleSelector.setEmptyView(emptyView); + 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) { + Spinner dashSelector = (Spinner) parent; + ProducteevDashboard dashboard = (ProducteevDashboard) dashSelector.getSelectedItem(); + refreshResponsibleSpinner(dashboard.getUsers()); + } + + @Override + public void onNothingSelected(AdapterView parent) { + responsibleSelector.setAdapter(null); + responsibleSelector.setEnabled(false); + view.findViewById(R.id.producteev_TEA_task_assign_label).setVisibility(View.GONE); + } + }); + } + + /** + * Refresh the content of the responsibleSelector with the given userlist. + * + * @param users the new userlist to show in the responsibleSelector + */ + private void refreshResponsibleSpinner(ArrayList users) { + Metadata metadata = ProducteevDataService.getInstance().getTaskMetadata(myTask.getId()); + Long responsibleId = metadata.getValue(ProducteevTask.RESPONSIBLE_ID); + refreshResponsibleSpinner(users, responsibleId); + } + + /** + * Refresh the content of the responsibleSelector with the given userlist. + * + * @param users the new userlist to show in the responsibleSelector + * @param responsibleId the id of the responsible user to set in the spinner + */ + private void refreshResponsibleSpinner(ArrayList users, Long responsibleId) { + // Fill the responsible-spinner and set the current responsible + this.users = (users == null ? new ArrayList() : users); + + ArrayAdapter usersAdapter = new ArrayAdapter(activity, + android.R.layout.simple_spinner_item, this.users); + usersAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); + responsibleSelector.setAdapter(usersAdapter); + if (users == null) + view.findViewById(R.id.producteev_TEA_task_assign_label).setVisibility(View.GONE); + else + view.findViewById(R.id.producteev_TEA_task_assign_label).setVisibility(View.VISIBLE); + + + int responsibleSpinnerIndex = 0; + + for (int i = 0; i < this.users.size() ; i++) { + if (this.users.get(i).getId() == responsibleId) { + responsibleSpinnerIndex=i; + break; + } + } + responsibleSelector.setSelection(responsibleSpinnerIndex); } @Override @@ -71,50 +136,33 @@ public class ProducteevControlSet implements TaskEditControlSet { StoreObject[] dashboardsData = ProducteevDataService.getInstance().getDashboards(); dashboards = new ArrayList(dashboardsData.length); ProducteevDashboard ownerDashboard = null; - int dashboardSpinnerIndex = 0; + int dashboardSpinnerIndex = -1; //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); + dashboardSelector.setSelection(dashboardSpinnerIndex+1); 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); + responsibleSelector.setAdapter(null); 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; - - for (ProducteevUser user : users) { - if (user.getId() == responsibleId) { - break; - } - userSpinnerIndex++; - } - ArrayAdapter usersAdapter = new ArrayAdapter(activity, - android.R.layout.simple_spinner_item, users); - usersAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); - responsibleSelector.setAdapter(usersAdapter); - responsibleSelector.setSelection(userSpinnerIndex); + refreshResponsibleSpinner(ownerDashboard.getUsers()); } @Override diff --git a/astrid/res/values/strings-producteev.xml b/astrid/res/values/strings-producteev.xml index 6b368884e..8e68070c0 100644 --- a/astrid/res/values/strings-producteev.xml +++ b/astrid/res/values/strings-producteev.xml @@ -1,9 +1,9 @@ - - + + Producteev