mirror of https://github.com/tasks/tasks
You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
223 lines
7.1 KiB
Java
223 lines
7.1 KiB
Java
/**
|
|
* Copyright (c) 2012 Todoroo Inc
|
|
*
|
|
* See the file "LICENSE" for the full license governing this code.
|
|
*/
|
|
package com.todoroo.astrid.taskrabbit;
|
|
|
|
import org.json.JSONException;
|
|
import org.json.JSONObject;
|
|
|
|
import android.app.Activity;
|
|
import android.content.res.TypedArray;
|
|
import android.text.TextUtils;
|
|
import android.view.View;
|
|
import android.view.View.OnClickListener;
|
|
import android.widget.AdapterView;
|
|
import android.widget.AdapterView.OnItemSelectedListener;
|
|
import android.widget.ArrayAdapter;
|
|
import android.widget.Spinner;
|
|
import android.widget.TextView;
|
|
|
|
import com.timsu.astrid.R;
|
|
import com.todoroo.astrid.data.Task;
|
|
import com.todoroo.astrid.helper.TaskEditControlSet;
|
|
import com.todoroo.astrid.taskrabbit.TaskRabbitActivity.TaskRabbitSetListener;
|
|
|
|
public class TaskRabbitSpinnerControlSet extends TaskEditControlSet implements TaskRabbitSetListener{
|
|
|
|
private final Spinner spinner;
|
|
private final int titleID;
|
|
private final TextView displayText;
|
|
private final TextView displayEdit;
|
|
private ArrayAdapter<String> adapter;
|
|
private final Activity activity;
|
|
|
|
public TaskRabbitSpinnerControlSet(final Activity activity, int viewLayout, int title, int setID) {
|
|
super(activity, viewLayout);
|
|
this.titleID = title;
|
|
this.activity = activity;
|
|
// DependencyInjectionService.getInstance().inject(this);
|
|
|
|
// spinner = new Spinner(fragment.activity);
|
|
spinner = (Spinner) getDisplayView().findViewById(R.id.spinner);
|
|
spinner.setPrompt(activity.getString(title));
|
|
|
|
displayEdit = (TextView) getDisplayView().findViewById(R.id.display_row_edit);
|
|
|
|
displayText = (TextView) getDisplayView().findViewById(R.id.display_row_title);
|
|
displayText.setText(title);
|
|
|
|
|
|
|
|
String[] listTypes = getStringDefaultArray(setID, R.array.tr_default_array);
|
|
|
|
|
|
|
|
adapter = new ArrayAdapter<String>(
|
|
activity, android.R.layout.simple_spinner_item, listTypes);
|
|
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
|
|
activity.runOnUiThread(new Runnable() {
|
|
@Override
|
|
public void run() {
|
|
spinner.setAdapter(adapter);
|
|
}
|
|
});
|
|
|
|
spinner.setOnItemSelectedListener(new OnItemSelectedListener() {
|
|
|
|
@Override
|
|
public void onItemSelected(AdapterView<?> arg0, View arg1,
|
|
int arg2, long arg3) {
|
|
|
|
displayEdit.setText(getDisplayEditText());
|
|
}
|
|
|
|
@Override
|
|
public void onNothingSelected(AdapterView<?> arg0) {
|
|
//
|
|
}
|
|
});
|
|
getView().setOnClickListener(getDisplayClickListener());
|
|
|
|
}
|
|
|
|
|
|
protected OnClickListener getDisplayClickListener() {
|
|
return new OnClickListener() {
|
|
@Override
|
|
public void onClick(View v) {
|
|
spinner.performClick();
|
|
}
|
|
};
|
|
}
|
|
public String[] getStringDefaultArray(int position, int arrayType) {
|
|
TypedArray arrays = activity.getResources().obtainTypedArray(arrayType);
|
|
int arrayID = arrays.getResourceId(position, -1);
|
|
return activity.getResources().getStringArray(arrayID);
|
|
}
|
|
public void resetAdapter(String[] items) {
|
|
if (adapter == null) return;
|
|
adapter = new ArrayAdapter<String>(
|
|
activity, android.R.layout.simple_spinner_item, items);
|
|
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
|
|
activity.runOnUiThread(new Runnable() {
|
|
@Override
|
|
public void run() {
|
|
spinner.setAdapter(adapter);
|
|
spinner.setSelection(0); // plus 1 for the no selection item
|
|
}
|
|
});
|
|
|
|
spinner.setOnItemSelectedListener(new OnItemSelectedListener() {
|
|
|
|
@Override
|
|
public void onItemSelected(AdapterView<?> arg0, View arg1,
|
|
int arg2, long arg3) {
|
|
displayEdit.setText(getDisplayEditText());
|
|
}
|
|
|
|
@Override
|
|
public void onNothingSelected(AdapterView<?> arg0) {
|
|
//
|
|
}
|
|
});
|
|
}
|
|
|
|
public int selectedPosition() {
|
|
return spinner.getSelectedItemPosition();
|
|
}
|
|
|
|
@Override
|
|
public void readFromModel(JSONObject json, String key, int mode) {
|
|
|
|
if (titleID == R.string.tr_set_named_price){
|
|
String[] listTypes = getStringDefaultArray(mode, R.array.tr_default_price_type_array);
|
|
resetAdapter(listTypes);
|
|
}
|
|
else if (titleID == R.string.tr_set_skill_required){
|
|
String[] listTypes = getStringDefaultArray(mode, R.array.tr_default_skill_type_array);
|
|
resetAdapter(listTypes);
|
|
}
|
|
int intValue = json.optInt(key, 0);
|
|
|
|
if (intValue < spinner.getCount()) {
|
|
spinner.setSelection(intValue);
|
|
displayEdit.setText(getDisplayEditText());
|
|
}
|
|
}
|
|
|
|
private String getDisplayEditText() {
|
|
if(titleID == R.string.tr_set_cost_in_cents) {
|
|
return activity.getResources().getStringArray(R.array.tr_default_cost_in_cents_display)[spinner.getSelectedItemPosition()];
|
|
}
|
|
else {
|
|
return spinner.getSelectedItem().toString();
|
|
}
|
|
}
|
|
@Override
|
|
public void saveToDatabase(JSONObject json, String key) throws JSONException {
|
|
json.put(key, spinner.getSelectedItemPosition());
|
|
|
|
}
|
|
|
|
public int parseToDollars (String conversion){
|
|
int index = conversion.lastIndexOf('$');
|
|
String cents = conversion.substring(index+1);
|
|
if(TextUtils.isEmpty(cents)) return 0;
|
|
return Integer.parseInt(cents);
|
|
}
|
|
|
|
|
|
@Override
|
|
@SuppressWarnings("nls")
|
|
public void postToTaskRabbit(JSONObject json, String key) throws JSONException {
|
|
|
|
if(spinner.getSelectedItem() != null){
|
|
String spinnerString = spinner.getSelectedItem().toString();
|
|
if (titleID == R.string.tr_set_cost_in_cents) {
|
|
int cents = parseToDollars(spinnerString) *100;
|
|
json.put(key, cents);
|
|
}
|
|
else if (titleID == R.string.tr_set_named_price) {
|
|
json.put(key, parseToDollars(spinnerString));
|
|
}
|
|
else if (key.contains("description")) {
|
|
String description = json.optString("description", "");
|
|
description += String.format("\n%S %S", key, spinner.getSelectedItem().toString());
|
|
}
|
|
else {
|
|
json.put(key, spinnerString);
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
@Override
|
|
public void readFromTask(Task task) {
|
|
return;
|
|
}
|
|
|
|
@Override
|
|
protected void readFromTaskOnInitialize() {
|
|
// Nothing, we don't lazy load this control set yet
|
|
}
|
|
|
|
@Override
|
|
protected String writeToModelAfterInitialized(Task task) {
|
|
// Nothing, we don't lazy load this control set yet
|
|
return null;
|
|
}
|
|
|
|
@Override
|
|
protected void afterInflate() {
|
|
// Nothing, we don't lazy load this control set yet
|
|
}
|
|
|
|
@Override
|
|
public String writeToModel(Task task) {
|
|
return null;
|
|
}
|
|
|
|
}
|