mirror of https://github.com/tasks/tasks
Adding name option to task rabbit
parent
99a8a73638
commit
6383d3679f
@ -0,0 +1,843 @@
|
||||
package com.todoroo.astrid.taskrabbit;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
import org.apache.http.Header;
|
||||
import org.apache.http.HttpEntity;
|
||||
import org.apache.http.entity.StringEntity;
|
||||
import org.apache.http.message.BasicHeader;
|
||||
import org.json.JSONException;
|
||||
import org.json.JSONObject;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.app.AlertDialog;
|
||||
import android.content.ContentValues;
|
||||
import android.content.Context;
|
||||
import android.content.DialogInterface;
|
||||
import android.content.Intent;
|
||||
import android.content.res.TypedArray;
|
||||
import android.graphics.Color;
|
||||
import android.location.Location;
|
||||
import android.location.LocationListener;
|
||||
import android.location.LocationManager;
|
||||
import android.os.Bundle;
|
||||
import android.os.Handler;
|
||||
import android.os.Message;
|
||||
import android.provider.Settings;
|
||||
import android.support.v4.app.ActionBar;
|
||||
import android.support.v4.app.FragmentActivity;
|
||||
import android.support.v4.view.MenuItem;
|
||||
import android.text.TextUtils;
|
||||
import android.util.Log;
|
||||
import android.util.TypedValue;
|
||||
import android.view.View;
|
||||
import android.view.View.OnClickListener;
|
||||
import android.view.ViewGroup.LayoutParams;
|
||||
import android.widget.AdapterView;
|
||||
import android.widget.AdapterView.OnItemClickListener;
|
||||
import android.widget.ArrayAdapter;
|
||||
import android.widget.Button;
|
||||
import android.widget.EditText;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.LinearLayout;
|
||||
import android.widget.ListAdapter;
|
||||
import android.widget.ListView;
|
||||
import android.widget.PopupWindow.OnDismissListener;
|
||||
import android.widget.TextView;
|
||||
import android.widget.Toast;
|
||||
|
||||
import com.google.android.maps.GeoPoint;
|
||||
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.andlib.service.RestClient;
|
||||
import com.todoroo.andlib.utility.AndroidUtilities;
|
||||
import com.todoroo.andlib.utility.Preferences;
|
||||
import com.todoroo.astrid.actfm.OAuthLoginActivity;
|
||||
import com.todoroo.astrid.activity.TaskEditFragment;
|
||||
import com.todoroo.astrid.activity.TaskListFragment;
|
||||
import com.todoroo.astrid.dao.Database;
|
||||
import com.todoroo.astrid.data.Task;
|
||||
import com.todoroo.astrid.helper.TaskEditControlSet;
|
||||
import com.todoroo.astrid.reminders.Notifications;
|
||||
import com.todoroo.astrid.service.MetadataService;
|
||||
import com.todoroo.astrid.service.StatisticsConstants;
|
||||
import com.todoroo.astrid.service.StatisticsService;
|
||||
import com.todoroo.astrid.service.TaskService;
|
||||
import com.todoroo.astrid.service.ThemeService;
|
||||
import com.todoroo.astrid.ui.FragmentPopover;
|
||||
import com.todoroo.astrid.welcome.HelpInfoPopover;
|
||||
|
||||
public class TaskRabbitActivity extends FragmentActivity implements LocationListener {
|
||||
|
||||
|
||||
public interface TaskRabbitSetListener {
|
||||
public void readFromModel(JSONObject json, String key);
|
||||
public void saveToJSON(JSONObject json, String key) throws JSONException;
|
||||
public void writeToJSON(JSONObject json, String key) throws JSONException;
|
||||
}
|
||||
public interface ActivityResultSetListener {
|
||||
|
||||
public boolean activityResult (int requestCode, int resultCode, Intent data);
|
||||
}
|
||||
|
||||
/** task model */
|
||||
Task model = null;
|
||||
|
||||
@Autowired
|
||||
private RestClient restClient;
|
||||
|
||||
@Autowired
|
||||
private Database database;
|
||||
|
||||
@Autowired
|
||||
private TaskService taskService;
|
||||
|
||||
@Autowired
|
||||
private MetadataService metadataService;
|
||||
|
||||
@Autowired
|
||||
private ExceptionService exceptionService;
|
||||
|
||||
|
||||
GeoPoint[] supportedLocations =
|
||||
{
|
||||
new GeoPoint(42358430, -71059770),
|
||||
new GeoPoint(37739230, -122439880),
|
||||
new GeoPoint(40714350, -74005970),
|
||||
new GeoPoint(41878110, -8762980),
|
||||
new GeoPoint(34052230, -118243680),
|
||||
new GeoPoint(33717470, -117831140)};
|
||||
|
||||
/** true if editing started with a new task */
|
||||
boolean isNewTask = false;
|
||||
private EditText taskTitle;
|
||||
private Button taskButton;
|
||||
private LinearLayout taskControls;
|
||||
private LinearLayout descriptionControls;
|
||||
private Location currentLocation;
|
||||
private FragmentPopover menuPopover;
|
||||
private TextView menuTitle;
|
||||
private ListView menuList;
|
||||
private ListAdapter adapter;
|
||||
|
||||
|
||||
private int currentSelectedItem = 0;
|
||||
private View menuNav;
|
||||
private ImageView menuNavDisclosure;
|
||||
|
||||
private final List<TaskRabbitSetListener> controls = Collections.synchronizedList(new ArrayList<TaskRabbitSetListener>());
|
||||
|
||||
private LinearLayout row;
|
||||
|
||||
public static final int REQUEST_CODE_TASK_RABBIT_OAUTH = 5;
|
||||
/** Act.fm current user name */
|
||||
|
||||
public static final String TASK_RABBIT_TOKEN = "task_rabbit_token"; //$NON-NLS-1$
|
||||
public static final String TASK_RABBIT_URL = "http://www.taskrabbit.com"; //$NON-NLS-1$
|
||||
// public static final String TASK_RABBIT_URL = "http://rs-astrid-api.taskrabbit.com"; //$NON-NLS-1$
|
||||
public static final String TASK_RABBIT_CLIENT_ID = "RZUDrMuGn9Q3dXeq4nL24bM6LZmMCi1CEGgfP4ND"; //$NON-NLS-1$
|
||||
public static final String TASK_RABBIT_CLIENT_APPLICATION_ID = "Va7FUIUTprsmyuwAq9eHSZvAgiRj8FVH1zeaM8Zt"; //$NON-NLS-1$
|
||||
|
||||
// public static final String TASK_RABBIT_CLIENT_ID = "fDTmGeR0uNCvoxopNyqsRWae8xOvbOBqC7jmHaxv"; //$NON-NLS-1$
|
||||
// public static final String TASK_RABBIT_CLIENT_APPLICATION_ID = "XBpKshU8utH5eaNmhky9N8aAId5rSLTh04Hi60Co"; //$NON-NLS-1$
|
||||
public static final String CITY_NAME = "task_rabbit_city_name"; //$NON-NLS-1$
|
||||
private TaskRabbitTaskContainer taskRabbitTask;
|
||||
|
||||
/* From tag settings */
|
||||
private boolean isDialog;
|
||||
|
||||
|
||||
public TaskRabbitActivity() {
|
||||
DependencyInjectionService.getInstance().inject(this);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
setupForDialogOrFullscreen();
|
||||
super.onCreate(savedInstanceState);
|
||||
loadLocation();
|
||||
setContentView(R.layout.task_rabbit_enter);
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
public void showAddListPopover() {
|
||||
|
||||
ActionBar actionBar = getSupportActionBar();
|
||||
HelpInfoPopover.showPopover(this, actionBar.getCustomView().findViewById(R.id.menu_nav), R.string.help_popover_add_lists, null);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void onResume() {
|
||||
super.onResume();
|
||||
StatisticsService.sessionStart(this);
|
||||
populateFields();
|
||||
|
||||
|
||||
if(!isLoggedIn())
|
||||
showAddListPopover();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPause() {
|
||||
super.onPause();
|
||||
StatisticsService.sessionPause();
|
||||
|
||||
// if (shouldSaveState)
|
||||
try {
|
||||
taskRabbitTask.setLocalTaskData(serializeToJSON().toString());
|
||||
} catch (JSONException e) {
|
||||
// TODO Auto-generated catch block
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
protected void populateFields() {
|
||||
loadItem(getIntent());
|
||||
taskRabbitTask = TaskRabbitDataService.getInstance().getContainerForTask(model);
|
||||
setUpUIComponents();
|
||||
}
|
||||
|
||||
/*
|
||||
* ======================================================================
|
||||
* =============================================== model reading / saving
|
||||
* ======================================================================
|
||||
*/
|
||||
|
||||
/**
|
||||
* Loads action item from the given intent
|
||||
*
|
||||
* @param intent
|
||||
*/
|
||||
@SuppressWarnings("nls")
|
||||
protected void loadItem(Intent intent) {
|
||||
if (model != null) {
|
||||
// came from bundle
|
||||
isNewTask = (model.getValue(Task.TITLE).length() == 0);
|
||||
return;
|
||||
}
|
||||
|
||||
long idParam = intent.getLongExtra(TaskEditFragment.TOKEN_ID, -1L);
|
||||
|
||||
database.openForReading();
|
||||
if (idParam > -1L) {
|
||||
model = taskService.fetchById(idParam, Task.PROPERTIES);
|
||||
if (model == null) {
|
||||
this.onBackPressed();
|
||||
}
|
||||
}
|
||||
|
||||
// not found by id or was never passed an id
|
||||
if (model == null) {
|
||||
String valuesAsString = intent.getStringExtra(TaskEditFragment.TOKEN_VALUES);
|
||||
ContentValues values = null;
|
||||
try {
|
||||
if (valuesAsString != null)
|
||||
values = AndroidUtilities.contentValuesFromSerializedString(valuesAsString);
|
||||
} catch (Exception e) {
|
||||
// oops, can't serialize
|
||||
}
|
||||
model = TaskListFragment.createWithValues(values, null,
|
||||
taskService, metadataService);
|
||||
}
|
||||
|
||||
if (model == null) {
|
||||
exceptionService.reportError("task-edit-no-task",
|
||||
new NullPointerException("model"));
|
||||
onBackPressed();
|
||||
return;
|
||||
}
|
||||
|
||||
// clear notification
|
||||
Notifications.cancelNotifications(model.getId());
|
||||
|
||||
}
|
||||
|
||||
|
||||
private void setupForDialogOrFullscreen() {
|
||||
isDialog = AndroidUtilities.isTabletSized(this);
|
||||
if (isDialog)
|
||||
setTheme(ThemeService.getDialogTheme());
|
||||
else
|
||||
ThemeService.applyTheme(this);
|
||||
}
|
||||
|
||||
|
||||
private void setUpControls() {
|
||||
TypedArray arrays = getResources().obtainTypedArray(R.array.tr_default_set);
|
||||
TypedArray arrayType = getResources().obtainTypedArray(R.array.tr_default_array);
|
||||
for (int i = 0; i < arrays.length(); i++) {
|
||||
|
||||
int titleID = arrays.getResourceId(i, 0);
|
||||
int arrayID = arrayType.getResourceId(i, 0);
|
||||
if (arrayID == R.string.tr_set_key_location) {
|
||||
TaskRabbitLocationControlSet set = new TaskRabbitLocationControlSet(this, R.layout.task_rabbit_row, titleID, i);
|
||||
controls.add(set);
|
||||
}
|
||||
else if(arrayID == R.string.tr_set_key_deadline) {
|
||||
|
||||
TaskRabbitDeadlineControlSet deadlineControl = new TaskRabbitDeadlineControlSet(
|
||||
this, R.layout.control_set_deadline,
|
||||
R.layout.task_rabbit_row);
|
||||
controls.add(deadlineControl);
|
||||
deadlineControl.readFromTask(model);
|
||||
}
|
||||
else if(arrayID == R.string.tr_set_key_name) {
|
||||
TaskRabbitNameControlSet nameControlSet = new TaskRabbitNameControlSet(this,
|
||||
R.layout.control_set_notes, R.layout.task_rabbit_row, titleID, i);
|
||||
controls.add(nameControlSet);
|
||||
}
|
||||
else if(arrayID == R.string.tr_set_key_description) {
|
||||
TaskRabbitNameControlSet descriptionControlSet = new TaskRabbitNameControlSet(this,
|
||||
R.layout.control_set_notes, R.layout.task_rabbit_row_description, titleID, i);
|
||||
try {
|
||||
descriptionControlSet.readFromModel(new JSONObject().put("description", model.getValue(Task.NOTES)), "description");
|
||||
} catch (JSONException e) {
|
||||
// TODO Auto-generated catch block
|
||||
e.printStackTrace();
|
||||
}
|
||||
controls.add(descriptionControlSet);
|
||||
}
|
||||
else {
|
||||
TaskRabbitSpinnerControlSet set = new TaskRabbitSpinnerControlSet(this, R.layout.task_rabbit_spinner, titleID, i);
|
||||
controls.add(set);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
if(TextUtils.isEmpty(taskDescription.getText())){
|
||||
taskDescription.setText(model.getValue(Task.NOTES));
|
||||
}*/
|
||||
if(TextUtils.isEmpty(taskTitle.getText())) {
|
||||
taskTitle.setText(model.getValue(Task.TITLE));
|
||||
}
|
||||
populateFields(taskRabbitTask);
|
||||
|
||||
displayViewsForMode(currentSelectedItem);
|
||||
}
|
||||
private void displayViewsForMode(int mode) {
|
||||
|
||||
|
||||
taskControls.removeAllViews();
|
||||
descriptionControls.removeAllViews();
|
||||
|
||||
if (row == null) {
|
||||
row = new LinearLayout(this);
|
||||
row.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));
|
||||
row.setOrientation(LinearLayout.HORIZONTAL);
|
||||
}
|
||||
else {
|
||||
row.removeAllViews();
|
||||
}
|
||||
|
||||
menuTitle.setText(getResources().getStringArray(R.array.tr_preset_types)[mode]);
|
||||
int[] presetValues = getPresetValues(mode);
|
||||
TypedArray keys = getResources().obtainTypedArray(R.array.tr_default_set_key);
|
||||
JSONObject parameters = defaultValuesToJSON(keys, presetValues);
|
||||
for (int i = 1; i < controls.size(); i++) {
|
||||
if (presetValues[i] == -1) continue;
|
||||
TaskRabbitSetListener set = controls.get(i);
|
||||
int arrayID = keys.getResourceId(i, 0);
|
||||
if (arrayID == R.string.tr_set_key_cost_in_cents || arrayID == R.string.tr_set_key_named_price) {
|
||||
if(row.getParent() == null)
|
||||
taskControls.addView(row);
|
||||
else {
|
||||
// View separator = getLayoutInflater().inflate(R.layout.tea_separator, row);
|
||||
// separator.setLayoutParams(new LayoutParams(1, LayoutParams.FILL_PARENT));
|
||||
|
||||
}
|
||||
LinearLayout displayRow = (LinearLayout)((TaskEditControlSet)set).getDisplayView();
|
||||
LinearLayout.LayoutParams layoutParams= null;
|
||||
if(arrayID == R.string.tr_set_key_named_price) {
|
||||
layoutParams = new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.FILL_PARENT, 1);
|
||||
displayRow.findViewById(R.id.display_row_body).setPadding(5, 0, 10, 0);
|
||||
displayRow.setMinimumWidth(130);
|
||||
}
|
||||
else {
|
||||
layoutParams = new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.FILL_PARENT, 1);
|
||||
displayRow.findViewById(R.id.display_row_body).setPadding(10, 0, 5, 0);
|
||||
}
|
||||
row.addView(displayRow, layoutParams);
|
||||
}
|
||||
else if (arrayID == R.string.tr_set_key_description) {
|
||||
descriptionControls.addView(((TaskEditControlSet)set).getDisplayView());
|
||||
}
|
||||
else {
|
||||
taskControls.addView(((TaskEditControlSet)set).getDisplayView());
|
||||
}
|
||||
((TaskRabbitSetListener) set).readFromModel(parameters, getString(arrayID));
|
||||
}
|
||||
}
|
||||
private JSONObject defaultValuesToJSON (TypedArray keys, int[] presetValues) {
|
||||
|
||||
JSONObject parameters = new JSONObject();
|
||||
for(int i = 0; i < keys.length(); i++) {
|
||||
try {
|
||||
int arrayID = keys.getResourceId(i, 0);
|
||||
parameters.put(getString(arrayID), (presetValues[i]));
|
||||
} catch (JSONException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
return parameters;
|
||||
}
|
||||
|
||||
/** Initialize UI components */
|
||||
private void setUpUIComponents() {
|
||||
if (taskTitle == null){
|
||||
|
||||
|
||||
|
||||
taskTitle = (EditText) findViewById(R.id.task_title);
|
||||
|
||||
taskControls = (LinearLayout) findViewById(R.id.task_controls);
|
||||
descriptionControls = (LinearLayout)findViewById(R.id.description_controls);
|
||||
taskButton = (Button) findViewById(R.id.task_button);
|
||||
taskButton.setOnClickListener(new OnClickListener() {
|
||||
public void onClick(View v) {
|
||||
submitTaskRabbit();
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
|
||||
ActionBar actionBar = getSupportActionBar();
|
||||
if (actionBar != null) {
|
||||
actionBar.setDisplayHomeAsUpEnabled(true);
|
||||
actionBar.setDisplayShowTitleEnabled(false);
|
||||
actionBar.setDisplayShowCustomEnabled(true);
|
||||
actionBar.setCustomView(R.layout.task_rabbit_header_view);
|
||||
|
||||
|
||||
View customView = actionBar.getCustomView();
|
||||
menuNav = customView.findViewById(R.id.menu_nav);
|
||||
menuNavDisclosure = (ImageView) customView.findViewById(R.id.menu_disclosure_arrow);
|
||||
|
||||
menuTitle = (TextView) customView.findViewById(R.id.task_rabbit_title);
|
||||
menuNav.setOnClickListener(menuClickListener);
|
||||
createMenuPopover();
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
setUpControls();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
private void populateFields(TaskRabbitTaskContainer container) {
|
||||
if (container == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
if(taskRabbitTask.getTaskID() > 0)
|
||||
taskButton.setText("Update task!");
|
||||
JSONObject jsonData = container.getLocalTaskData();
|
||||
synchronized (controls) {
|
||||
if(jsonData != null) {
|
||||
String[] keys = getResources().getStringArray(R.array.tr_default_set_key);
|
||||
|
||||
currentSelectedItem = jsonData.optInt(getString(R.string.tr_set_key_type));
|
||||
String title = jsonData.optString(getString(R.string.tr_set_key_name));
|
||||
if (!TextUtils.isEmpty(title)) {
|
||||
taskTitle.setText(title);
|
||||
}
|
||||
for (int i = 0; i < controls.size(); i++) {
|
||||
TaskRabbitSetListener set = (TaskRabbitSetListener) controls.get(i);
|
||||
set.readFromModel(jsonData, keys[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/* saving/converting task rabbit data */
|
||||
private JSONObject localParamsToJSON () throws JSONException {
|
||||
|
||||
JSONObject parameters = new JSONObject();
|
||||
|
||||
int[] presetValues = getPresetValues(currentSelectedItem);
|
||||
String[] keys = getResources().getStringArray(R.array.tr_default_set_key);
|
||||
|
||||
|
||||
String descriptionKey = getString(R.string.tr_set_key_description);
|
||||
String category = "Category: " + menuTitle.getText().toString() + "\n";
|
||||
parameters.put(descriptionKey, category);
|
||||
for (int i = 0; i < controls.size(); i++) {
|
||||
if (presetValues[i] == -1) continue;
|
||||
TaskRabbitSetListener set = controls.get(i);
|
||||
set.writeToJSON(parameters, keys[i]);
|
||||
}
|
||||
if (parameters.optJSONArray("other_locations_attributes") == null) {
|
||||
parameters.put(getString(R.string.tr_attr_city_id), Preferences.getInt("task_rabbit_city_id", 1));
|
||||
parameters.put(getString(R.string.tr_attr_city_lat), true);
|
||||
}
|
||||
parameters.put(getString(R.string.tr_set_key_name), taskTitle.getText().toString());
|
||||
parameters.put(getString(R.string.tr_set_key_name), taskTitle.getText().toString());
|
||||
// parameters.put(activity.getString(R.string.tr_set_key_type), menuList.getSelectedItem().toString());
|
||||
|
||||
Log.d("THE TAK JSON IS", parameters.toString());
|
||||
return new JSONObject().put("task", parameters);
|
||||
}
|
||||
|
||||
|
||||
private int[] getPresetValues(int mode) {
|
||||
TypedArray arrays = getResources().obtainTypedArray(R.array.tr_default_type_array);
|
||||
int[] presetValues = getResources().getIntArray(arrays.getResourceId(mode, 0));
|
||||
return presetValues;
|
||||
}
|
||||
|
||||
|
||||
private String serializeToJSON () throws JSONException {
|
||||
|
||||
JSONObject parameters = new JSONObject();
|
||||
String[] keys = getResources().getStringArray(R.array.tr_default_set_key);
|
||||
for (int i = 0; i < controls.size(); i++) {
|
||||
TaskRabbitSetListener set = controls.get(i);
|
||||
set.saveToJSON(parameters, keys[i]);
|
||||
}
|
||||
parameters.put(getString(R.string.tr_set_key_type), currentSelectedItem);
|
||||
parameters.put(getString(R.string.tr_set_key_name), taskTitle.getText().toString());
|
||||
return parameters.toString();
|
||||
}
|
||||
private HttpEntity getTaskBody() {
|
||||
|
||||
try {
|
||||
return new StringEntity(localParamsToJSON().toString());
|
||||
}
|
||||
catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
protected void submitTaskRabbit(){
|
||||
|
||||
if(!Preferences.isSet(TASK_RABBIT_TOKEN)){
|
||||
loginTaskRabbit();
|
||||
}
|
||||
else {
|
||||
|
||||
|
||||
new Thread(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
|
||||
try {
|
||||
String urlCall = "tasks/";
|
||||
if (taskRabbitTask.getTaskID() > 0) urlCall += taskRabbitTask.getTaskID();
|
||||
urlCall +="?client_id=" + TASK_RABBIT_CLIENT_ID;
|
||||
Log.d("Tasks url:", taskRabbitURL(urlCall));
|
||||
Header authorization = new BasicHeader("Authorization", "OAuth " + Preferences.getStringValue(TASK_RABBIT_TOKEN)); //$NON-NLS-1$
|
||||
Header contentType = new BasicHeader("Content-Type", //$NON-NLS-1$
|
||||
"application/json"); //$NON-NLS-1$
|
||||
|
||||
String response = restClient.post(taskRabbitURL(urlCall), getTaskBody(), contentType, authorization);
|
||||
Log.d("Task rabbit response", response);
|
||||
JSONObject taskResponse = new JSONObject(response);
|
||||
if(taskResponse.has("id")){
|
||||
taskRabbitTask.setRemoteTaskData(response);
|
||||
taskRabbitTask.setTaskID(taskResponse.optString("id"));
|
||||
Message successMessage = new Message();
|
||||
successMessage.what = 1;
|
||||
handler.sendMessage(successMessage);
|
||||
}
|
||||
}
|
||||
catch (Exception e){
|
||||
e.printStackTrace();
|
||||
Message failureMessage = new Message();
|
||||
failureMessage.what = -1;
|
||||
handler.sendMessage(failureMessage);
|
||||
}
|
||||
}
|
||||
}).start();
|
||||
|
||||
}
|
||||
try {
|
||||
taskRabbitTask.setLocalTaskData(serializeToJSON().toString());
|
||||
} catch (JSONException e) {
|
||||
// TODO Auto-generated catch block
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
//submit!
|
||||
}
|
||||
|
||||
|
||||
/* message callbacks */
|
||||
/**
|
||||
* Show toast for task edit canceling
|
||||
*/
|
||||
private void showSuccessToast() {
|
||||
Toast.makeText(this, "Task posted to Task Rabbit successfully!",
|
||||
Toast.LENGTH_SHORT).show();
|
||||
}
|
||||
|
||||
private final Handler handler = new Handler() {
|
||||
|
||||
@Override
|
||||
public void handleMessage(Message msg) {
|
||||
switch (msg.what) {
|
||||
case -1:
|
||||
|
||||
AlertDialog.Builder adb = new AlertDialog.Builder(TaskRabbitActivity.this);
|
||||
adb.setTitle("Error posting task");
|
||||
adb.setMessage("Please try again");
|
||||
adb.setPositiveButton("Close",null);
|
||||
adb.show();
|
||||
break;
|
||||
case 0: break;
|
||||
case 1:
|
||||
TaskRabbitDataService.getInstance().saveTaskAndMetadata(taskRabbitTask);
|
||||
|
||||
Intent data = new Intent();
|
||||
data.putExtra(TaskRabbitControlSet.DATA_RESPONSE, taskRabbitTask.getRemoteTaskData().toString());
|
||||
TaskRabbitActivity.this.setResult(Activity.RESULT_OK, data);
|
||||
TaskRabbitActivity.this.finish();
|
||||
break;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
/* login methods */
|
||||
protected void loginTaskRabbit() {
|
||||
Intent intent = new Intent(this,
|
||||
OAuthLoginActivity.class);
|
||||
try {
|
||||
String url = TASK_RABBIT_URL + "/api/authorize?client_id=" + TASK_RABBIT_CLIENT_ID;
|
||||
intent.putExtra(OAuthLoginActivity.URL_TOKEN, url);
|
||||
this.startActivityForResult(intent, REQUEST_CODE_TASK_RABBIT_OAUTH);
|
||||
StatisticsService.reportEvent(StatisticsConstants.ACTFM_LOGIN_GL_START);
|
||||
} catch (Exception e) {
|
||||
// handleError(e);
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
private void loadLocation() {
|
||||
LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
|
||||
|
||||
if ( !locationManager.isProviderEnabled( LocationManager.GPS_PROVIDER ) || !locationManager.isProviderEnabled( LocationManager.NETWORK_PROVIDER )) {
|
||||
buildAlertMessageNoGps();
|
||||
}
|
||||
|
||||
currentLocation = locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
|
||||
|
||||
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 1000L, 500.0f, this);
|
||||
updateControlSetLocation(currentLocation);
|
||||
}
|
||||
|
||||
|
||||
private void buildAlertMessageNoGps() {
|
||||
final AlertDialog.Builder builder = new AlertDialog.Builder(this);
|
||||
builder.setMessage("GPS needs to be enabled in order to add location based tasks. Do you want to enable it?")
|
||||
.setCancelable(false)
|
||||
.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
|
||||
public void onClick(@SuppressWarnings("unused") final DialogInterface dialog, @SuppressWarnings("unused") final int id) {
|
||||
startActivity(new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS));
|
||||
}
|
||||
})
|
||||
.setNegativeButton("No", new DialogInterface.OnClickListener() {
|
||||
public void onClick(final DialogInterface dialog, @SuppressWarnings("unused") final int id) {
|
||||
dialog.cancel();
|
||||
}
|
||||
});
|
||||
final AlertDialog alert = builder.create();
|
||||
alert.show();
|
||||
}
|
||||
|
||||
|
||||
protected void saveUserInfo(String response) throws Exception {
|
||||
JSONObject userObject = new JSONObject(response);
|
||||
JSONObject cityObject = userObject.getJSONObject("city");
|
||||
if (cityObject.has("name")){
|
||||
Preferences.setString("task_rabbit_city_name", cityObject.getString("name"));
|
||||
}
|
||||
if (cityObject.has("id")){
|
||||
Preferences.setInt("task_rabbit_city_id", cityObject.getInt("id"));
|
||||
}
|
||||
if (cityObject.has("lat")){
|
||||
// currentLocation.setLatitude(cityObject.getDouble("lat"));
|
||||
Preferences.setString("task_rabbit_city_lat", String.valueOf(cityObject.getDouble("lat")));
|
||||
}
|
||||
if (cityObject.has("lng")){
|
||||
// currentLocation.setLongitude(cityObject.getDouble("lng"));
|
||||
Preferences.setString("task_rabbit_city_lng", String.valueOf(cityObject.getDouble("lng")));
|
||||
}
|
||||
}
|
||||
|
||||
private String taskRabbitURL(String method) {
|
||||
return TASK_RABBIT_URL + "/api/v1/"+ method;
|
||||
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void onActivityResult (int requestCode, int resultCode, Intent data) {
|
||||
Log.d("The actiivty result request code", "Rerjwklrw" + requestCode);
|
||||
if (requestCode == REQUEST_CODE_TASK_RABBIT_OAUTH && resultCode == Activity.RESULT_OK){
|
||||
String result = data.getStringExtra(OAuthLoginActivity.DATA_RESPONSE);
|
||||
if(result.contains("access_token=")) {
|
||||
try {
|
||||
result = result.substring(result.indexOf("access_token=")+"access_token=".length());
|
||||
Preferences.setString(TASK_RABBIT_TOKEN, result);
|
||||
String response = restClient.get(taskRabbitURL("account"));
|
||||
Log.d("Task rabbit response", response);
|
||||
saveUserInfo(response);
|
||||
}
|
||||
catch (Exception e){
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
for (TaskRabbitSetListener set : controls) {
|
||||
if (set instanceof ActivityResultSetListener) {
|
||||
if (((ActivityResultSetListener) set).activityResult(requestCode, resultCode, data))
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onOptionsItemSelected(MenuItem item) {
|
||||
switch(item.getItemId()) {
|
||||
case android.R.id.home:
|
||||
finish();
|
||||
break;
|
||||
}
|
||||
return super.onOptionsItemSelected(item);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
* @see android.location.LocationListener#onLocationChanged(android.location.Location)
|
||||
*/
|
||||
@Override
|
||||
public void onLocationChanged(Location location) {
|
||||
|
||||
currentLocation = location;
|
||||
updateControlSetLocation(currentLocation);
|
||||
|
||||
}
|
||||
public void updateControlSetLocation (Location location) {
|
||||
for (TaskRabbitSetListener controlSet : controls) {
|
||||
if (TaskRabbitLocationControlSet.class.isAssignableFrom(controlSet.getClass())) {
|
||||
((TaskRabbitLocationControlSet) controlSet).updateCurrentLocation(location);
|
||||
}
|
||||
}
|
||||
}
|
||||
@Override
|
||||
public void onProviderDisabled(String provider) {
|
||||
return;
|
||||
}
|
||||
@Override
|
||||
public void onProviderEnabled(String provider) {
|
||||
return;
|
||||
}
|
||||
@Override
|
||||
public void onStatusChanged(String provider, int status, Bundle extras) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
public boolean isLoggedIn() {
|
||||
return !TextUtils.isEmpty(Preferences.getStringValue(TASK_RABBIT_TOKEN));
|
||||
}
|
||||
|
||||
public boolean supportsCurrentLocation() {
|
||||
|
||||
//TODO test this
|
||||
if(true) return true;
|
||||
if (currentLocation == null) return false;
|
||||
for (GeoPoint point : supportedLocations){
|
||||
Location city = new Location(""); //$NON-NLS-1$
|
||||
city.setLatitude(point.getLatitudeE6()/1E6);
|
||||
city.setLongitude(point.getLongitudeE6()/1E6);
|
||||
float distance = currentLocation.distanceTo(city);
|
||||
if (distance < 400000) { //250 mi radius
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/* Menu Popover */
|
||||
private void setMenuDropdownSelected(boolean selected) {
|
||||
int oldTextColor = menuTitle.getTextColors().getDefaultColor();
|
||||
int textStyle = (selected ? R.style.TextAppearance_ActionBar_ListsHeader_Selected :
|
||||
R.style.TextAppearance_ActionBar_ListsHeader);
|
||||
|
||||
TypedValue listDisclosure = new TypedValue();
|
||||
getTheme().resolveAttribute(R.attr.asListsDisclosure, listDisclosure, false);
|
||||
menuTitle.setTextAppearance(this, textStyle);
|
||||
menuNav.setBackgroundColor(selected ? oldTextColor : android.R.color.transparent);
|
||||
menuNavDisclosure.setSelected(selected);
|
||||
}
|
||||
|
||||
|
||||
private final OnClickListener menuClickListener = new OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
setMenuDropdownSelected(true);
|
||||
menuPopover.show(v);
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
private void createMenuPopover() {
|
||||
menuPopover = new FragmentPopover(this, R.layout.task_rabbit_menu_popover);
|
||||
menuPopover.setOnDismissListener(new OnDismissListener() {
|
||||
@Override
|
||||
public void onDismiss() {
|
||||
setMenuDropdownSelected(false);
|
||||
}
|
||||
});
|
||||
setupListView();
|
||||
menuPopover.setContent(menuList);
|
||||
}
|
||||
|
||||
|
||||
private void setupListView() {
|
||||
String[] keys = getResources().getStringArray(R.array.tr_preset_types);
|
||||
if (!supportsCurrentLocation()) {
|
||||
keys = new String[]{ getResources().getString(R.string.tr_type_virtual)};
|
||||
}
|
||||
adapter = new ArrayAdapter<String>(this, R.layout.task_rabbit_menu_row, keys);
|
||||
menuList = new ListView(this);
|
||||
menuList.setAdapter(adapter);
|
||||
menuList.setCacheColorHint(Color.TRANSPARENT);
|
||||
|
||||
menuList.setSelection(0);
|
||||
menuList.setOnItemClickListener(new OnItemClickListener() {
|
||||
|
||||
@Override
|
||||
public void onItemClick(AdapterView<?> parent, View view, int position,
|
||||
long id) {
|
||||
currentSelectedItem = position;
|
||||
displayViewsForMode(position);
|
||||
menuPopover.dismiss();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
@ -1,78 +0,0 @@
|
||||
package com.todoroo.astrid.taskrabbit;
|
||||
|
||||
import org.json.JSONException;
|
||||
import org.json.JSONObject;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.widget.TextView;
|
||||
|
||||
import com.timsu.astrid.R;
|
||||
import com.todoroo.astrid.data.Task;
|
||||
import com.todoroo.astrid.ui.PopupControlSet;
|
||||
|
||||
public class TaskRabbitRow extends PopupControlSet{
|
||||
|
||||
private final int setID;
|
||||
private final int type;
|
||||
private final TextView body;
|
||||
|
||||
public TaskRabbitRow(Activity activity, int viewLayout, int displayViewLayout, int setID, int type, final String title) {
|
||||
super(activity, viewLayout, displayViewLayout, title);
|
||||
this.setID = setID;
|
||||
this.type = type;
|
||||
body = (TextView) getDisplayView().findViewById(R.id.display_row_edit);
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
public void setBody(String desc) {
|
||||
body.setText(desc);
|
||||
}
|
||||
|
||||
public void showPopupForRow() {
|
||||
return;
|
||||
}
|
||||
@Override
|
||||
protected void refreshDisplayView() {
|
||||
// TODO Auto-generated method stub
|
||||
|
||||
}
|
||||
|
||||
public boolean populateFromTask (TaskRabbitTaskContainer task) {
|
||||
|
||||
if (task != null) {
|
||||
String[] types = activity.getResources().getStringArray(R.array.tr_default_set_key);
|
||||
|
||||
JSONObject trJSON = task.getLocalTaskData();
|
||||
try {
|
||||
trJSON.getString(types[setID]);
|
||||
body.setText(trJSON.getString(types[setID]));
|
||||
return true;
|
||||
} catch (JSONException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
|
||||
}
|
||||
public void readFromTask(TaskRabbitTaskContainer task) {
|
||||
if (!populateFromTask(task)) {
|
||||
return;
|
||||
}
|
||||
body.setText("Whats up dowg");
|
||||
|
||||
}
|
||||
@Override
|
||||
public String writeToModel(Task task) {
|
||||
return body.getText().toString();
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void readFromTask(Task task) {
|
||||
// TODO Auto-generated method stub
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,65 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="fill_parent"
|
||||
android:orientation="vertical" >
|
||||
|
||||
<!-- notes -->
|
||||
|
||||
<ScrollView
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="100" >
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1"
|
||||
android:orientation="horizontal" >
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="fill_parent"
|
||||
android:orientation="vertical" >
|
||||
|
||||
<ImageButton
|
||||
android:id="@+id/picture"
|
||||
android:layout_width="40dip"
|
||||
android:layout_height="40dip"
|
||||
android:background="#00000000"
|
||||
android:paddingLeft="7dip"
|
||||
android:scaleType="centerInside"
|
||||
android:src="@drawable/camera_button" />
|
||||
<!-- Voice Add Note Button -->
|
||||
|
||||
<ImageButton
|
||||
android:id="@+id/voiceAddNoteButton"
|
||||
android:layout_width="40dip"
|
||||
android:layout_height="40dip"
|
||||
android:background="#00000000"
|
||||
android:paddingLeft="7dip"
|
||||
android:scaleType="centerInside"
|
||||
android:src="@android:drawable/ic_btn_speak_now"
|
||||
android:visibility="gone" />
|
||||
</LinearLayout>
|
||||
|
||||
<EditText
|
||||
android:id="@+id/notes"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginLeft="9dip"
|
||||
android:layout_marginRight="9dip"
|
||||
android:layout_weight="100"
|
||||
android:autoText="true"
|
||||
android:capitalize="sentences"
|
||||
android:freezesText="true"
|
||||
android:gravity="top"
|
||||
android:hint="@string/TEA_notes_hint"
|
||||
android:scrollbars="vertical"
|
||||
android:singleLine="false" />
|
||||
</LinearLayout>
|
||||
</ScrollView>
|
||||
|
||||
<include layout="@layout/control_dialog_ok" />
|
||||
|
||||
</LinearLayout>
|
@ -0,0 +1,38 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:orientation="horizontal" >
|
||||
|
||||
<RelativeLayout
|
||||
android:id="@+id/menu_nav"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="fill_parent"
|
||||
android:layout_margin="5dip"
|
||||
android:gravity="center_vertical"
|
||||
android:paddingLeft="5dip"
|
||||
android:paddingRight="5dip" >
|
||||
|
||||
<TextView
|
||||
android:id="@+id/task_rabbit_title"
|
||||
style="@style/TextAppearance.ActionBar_ListsHeader"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1"
|
||||
android:ellipsize="end"
|
||||
android:gravity="center_vertical"
|
||||
android:singleLine="true"
|
||||
android:text="@string/BFE_Active" />
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/menu_disclosure_arrow"
|
||||
android:layout_width="12dip"
|
||||
android:layout_height="12dip"
|
||||
android:layout_alignBottom="@id/task_rabbit_title"
|
||||
android:layout_marginLeft="10dip"
|
||||
android:layout_toRightOf="@id/task_rabbit_title"
|
||||
android:scaleType="fitCenter"
|
||||
android:src="?attr/asListsDisclosure" />
|
||||
</RelativeLayout>
|
||||
|
||||
</LinearLayout>
|
@ -0,0 +1,32 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<RelativeLayout
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:paddingLeft="10dip">
|
||||
|
||||
<FrameLayout
|
||||
android:id="@+id/content"
|
||||
android:layout_width="280dip"
|
||||
android:layout_height="wrap_content"
|
||||
android:background="@drawable/list_popover_bg"
|
||||
android:layout_below="@+id/gdi_arrow_up"/>
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/gdi_arrow_up"
|
||||
android:layout_width="27dip"
|
||||
android:layout_height="27dip"
|
||||
android:scaleType="fitCenter"
|
||||
android:layout_marginBottom="-8dip"
|
||||
android:src="@drawable/list_arrow_up" />
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/gdi_arrow_down"
|
||||
android:layout_width="27dip"
|
||||
android:layout_height="27dip"
|
||||
android:scaleType="fitCenter"
|
||||
android:layout_marginBottom="-8dip"
|
||||
android:layout_below="@android:id/list"
|
||||
android:src="@drawable/list_arrow_down" />
|
||||
|
||||
</RelativeLayout>
|
@ -0,0 +1,14 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
style="@style/TextAppearance.FLA_Filter"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="fill_parent"
|
||||
android:gravity="left|center_vertical"
|
||||
android:padding="10dp"
|
||||
android:paddingBottom="5dip"
|
||||
android:paddingRight="6dip"
|
||||
android:paddingTop="5dip"
|
||||
|
||||
android:textSize="16sp" >
|
||||
|
||||
</TextView>
|
@ -1,19 +1,41 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="fill_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="vertical" >
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/display_row_body"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:minHeight="50dip"
|
||||
android:gravity="center_vertical"
|
||||
android:orientation="horizontal"
|
||||
android:paddingLeft="10dip"
|
||||
android:paddingRight="10dip" >
|
||||
|
||||
<TextView
|
||||
android:id="@+id/display_row_title"
|
||||
style="@style/TextAppearance.GEN_EditLabel"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="Hello" />
|
||||
android:layout_marginRight="15dip" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/display_row_edit"
|
||||
style="@style/TextAppearance.EditRowDisplay"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="Friend" />
|
||||
android:layout_weight="1"
|
||||
android:gravity="right"
|
||||
android:maxLines="2"
|
||||
android:paddingLeft="5dip" />
|
||||
</LinearLayout>
|
||||
|
||||
<View
|
||||
android:id="@+id/TEA_Separator"
|
||||
style="@style/TEA_Separator"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="1px" />
|
||||
|
||||
</LinearLayout>
|
@ -0,0 +1,60 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="vertical"
|
||||
android:id="@+id/display_row_body"
|
||||
android:minHeight="50dip"
|
||||
android:padding="10dip" >
|
||||
|
||||
<TextView
|
||||
android:id="@+id/display_row_title"
|
||||
style="@style/TextAppearance.GEN_EditLabel"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"/>
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:gravity="center_vertical"
|
||||
android:minHeight="50dip"
|
||||
android:orientation="horizontal"
|
||||
android:paddingLeft="10dip"
|
||||
android:paddingRight="10dip" >
|
||||
|
||||
<ImageButton
|
||||
android:id="@+id/picture"
|
||||
android:layout_width="40dip"
|
||||
android:layout_height="40dip"
|
||||
android:background="#00000000"
|
||||
android:scaleType="centerInside"
|
||||
android:layout_marginRight="10dip"
|
||||
android:src="@drawable/camera_button" />
|
||||
<!-- Voice Add Note Button -->
|
||||
|
||||
<ImageButton
|
||||
android:id="@+id/voiceAddNoteButton"
|
||||
android:layout_width="40dip"
|
||||
android:layout_height="40dip"
|
||||
android:background="#00000000"
|
||||
android:layout_marginRight="10dip"
|
||||
android:scaleType="centerInside"
|
||||
android:src="@android:drawable/ic_btn_speak_now"
|
||||
android:visibility="gone" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/display_row_edit"
|
||||
style="@style/TextAppearance.EditRowDisplay"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1"
|
||||
android:layout_gravity="top"
|
||||
android:gravity="left"
|
||||
android:text="Enter description..."
|
||||
android:paddingLeft="5dip"
|
||||
android:layout_marginTop="10dip"
|
||||
android:layout_marginBottom="10dip" />
|
||||
</LinearLayout>
|
||||
|
||||
|
||||
</LinearLayout>
|
@ -1,23 +1,46 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="fill_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="vertical" >
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/display_row_body"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:minHeight="50dip"
|
||||
android:gravity="center_vertical"
|
||||
android:orientation="horizontal"
|
||||
android:paddingLeft="10dip"
|
||||
android:paddingRight="5dip" >
|
||||
|
||||
<Spinner
|
||||
android:id="@+id/spinner"
|
||||
android:layout_width="0dip"
|
||||
android:layout_height="0dip" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/display_row_title"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="Hello" />
|
||||
style="@style/TextAppearance.GEN_EditLabel" />
|
||||
|
||||
<Spinner xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
|
||||
<TextView
|
||||
android:id="@+id/display_row_edit"
|
||||
android:layout_width="fill_parent"
|
||||
style="@style/TextAppearance.EditRowDisplay"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="vertical"
|
||||
android:spinnerMode="dropdown"
|
||||
android:background="#00000000" >
|
||||
android:layout_weight="1"
|
||||
android:gravity="right"
|
||||
android:maxLines="2"
|
||||
android:paddingLeft="5dip" />
|
||||
</LinearLayout>
|
||||
|
||||
</Spinner>
|
||||
<View
|
||||
android:id="@+id/TEA_Separator"
|
||||
style="@style/TEA_Separator"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="1px" />
|
||||
|
||||
</LinearLayout>
|
Loading…
Reference in New Issue