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.
198 lines
6.7 KiB
Java
198 lines
6.7 KiB
Java
package com.todoroo.astrid.taskrabbit;
|
|
|
|
import java.io.ByteArrayOutputStream;
|
|
|
|
import org.json.JSONException;
|
|
import org.json.JSONObject;
|
|
|
|
import android.app.Activity;
|
|
import android.content.Context;
|
|
import android.content.Intent;
|
|
import android.graphics.Bitmap;
|
|
import android.text.TextUtils;
|
|
import android.util.Base64;
|
|
import android.view.View;
|
|
import android.view.WindowManager;
|
|
import android.view.inputmethod.InputMethodManager;
|
|
import android.widget.EditText;
|
|
import android.widget.ImageButton;
|
|
import android.widget.LinearLayout;
|
|
import android.widget.TextView;
|
|
|
|
import com.timsu.astrid.R;
|
|
import com.todoroo.astrid.actfm.ActFmCameraModule;
|
|
import com.todoroo.astrid.actfm.ActFmCameraModule.CameraResultCallback;
|
|
import com.todoroo.astrid.actfm.ActFmCameraModule.ClearImageCallback;
|
|
import com.todoroo.astrid.data.Task;
|
|
import com.todoroo.astrid.taskrabbit.TaskRabbitActivity.ActivityResultSetListener;
|
|
import com.todoroo.astrid.taskrabbit.TaskRabbitActivity.TaskRabbitSetListener;
|
|
import com.todoroo.astrid.ui.PopupControlSet;
|
|
|
|
public class TaskRabbitNameControlSet extends PopupControlSet implements TaskRabbitSetListener, ActivityResultSetListener{
|
|
|
|
protected final EditText editText;
|
|
protected final TextView notesPreview;
|
|
private final LinearLayout notesBody;
|
|
|
|
|
|
private final ImageButton pictureButton;
|
|
private Bitmap pendingCommentPicture = null;
|
|
|
|
|
|
public TaskRabbitNameControlSet(Activity activity, int viewLayout,
|
|
int displayViewLayout, int titleID) {
|
|
super(activity, viewLayout, displayViewLayout, titleID);
|
|
editText = (EditText) getView().findViewById(R.id.notes);
|
|
notesPreview = (TextView) getDisplayView().findViewById(R.id.display_row_edit);
|
|
notesBody = (LinearLayout) getDisplayView().findViewById(R.id.notes_body);
|
|
dialog.getWindow()
|
|
.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE | WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);
|
|
displayText.setText(activity.getString(titleID));
|
|
editText.setMaxLines(Integer.MAX_VALUE);
|
|
|
|
|
|
|
|
pictureButton = (ImageButton) getDisplayView().findViewById(R.id.picture);
|
|
if (pictureButton != null) {
|
|
|
|
final ClearImageCallback clearImage = new ClearImageCallback() {
|
|
@Override
|
|
public void clearImage() {
|
|
pendingCommentPicture = null;
|
|
pictureButton.setImageResource(R.drawable.camera_button);
|
|
}
|
|
};
|
|
pictureButton.setOnClickListener(new View.OnClickListener() {
|
|
@Override
|
|
public void onClick(View v) {
|
|
if (pendingCommentPicture != null)
|
|
ActFmCameraModule.showPictureLauncher(TaskRabbitNameControlSet.this.activity, clearImage);
|
|
else
|
|
ActFmCameraModule.showPictureLauncher(TaskRabbitNameControlSet.this.activity, null);
|
|
}
|
|
});
|
|
}
|
|
|
|
}
|
|
|
|
@Override
|
|
public void saveToDatabase(JSONObject json, String key) throws JSONException {
|
|
json.put(key, editText.getText().toString());
|
|
}
|
|
|
|
|
|
@Override
|
|
@SuppressWarnings("nls")
|
|
public void postToTaskRabbit(JSONObject json, String key) throws JSONException {
|
|
String nameKey = activity.getString(R.string.tr_set_key_description);
|
|
if (key.equals(activity.getString(R.string.tr_set_key_name)) && json.has(nameKey)) {
|
|
json.put(nameKey, json.optString(nameKey, "") + "\nRestaurant Name: " + editText.getText().toString());
|
|
}
|
|
else {
|
|
json.put(nameKey, json.optString(nameKey, "") + "\n" + editText.getText().toString());
|
|
}
|
|
|
|
if (pendingCommentPicture != null) {
|
|
String picture = buildPictureData(pendingCommentPicture);
|
|
JSONObject pictureArray = new JSONObject();
|
|
pictureArray.put("image", picture);
|
|
json.put("uploaded_photos_attributes", new JSONObject().put("1", pictureArray));
|
|
}
|
|
}
|
|
|
|
public static String buildPictureData(Bitmap bitmap) {
|
|
ByteArrayOutputStream baos = new ByteArrayOutputStream();
|
|
if(bitmap.getWidth() > 512 || bitmap.getHeight() > 512) {
|
|
float scale = Math.min(512f / bitmap.getWidth(), 512f / bitmap.getHeight());
|
|
bitmap = Bitmap.createScaledBitmap(bitmap, (int)(scale * bitmap.getWidth()),
|
|
(int)(scale * bitmap.getHeight()), false);
|
|
}
|
|
bitmap.compress(Bitmap.CompressFormat.JPEG, 50, baos);
|
|
byte[] bytes = baos.toByteArray();
|
|
return Base64.encodeToString(bytes, Base64.DEFAULT);
|
|
}
|
|
|
|
@Override
|
|
public void readFromModel(JSONObject json, String key, int mode) {
|
|
if (json.optInt(key, -1) == 0) {
|
|
editText.setHint(displayText.getText().toString());
|
|
return;
|
|
}
|
|
String value = json.optString(key, ""); //$NON-NLS-1$
|
|
if (!TextUtils.isEmpty(value)) {
|
|
editText.setTextKeepState(value);
|
|
notesPreview.setText(value);
|
|
}
|
|
|
|
}
|
|
|
|
|
|
@Override
|
|
public boolean activityResult (int requestCode, int resultCode, Intent data) {
|
|
if (pictureButton != null) {
|
|
CameraResultCallback callback = new CameraResultCallback() {
|
|
@Override
|
|
public void handleCameraResult(Bitmap bitmap) {
|
|
pendingCommentPicture = bitmap;
|
|
pictureButton.setImageBitmap(pendingCommentPicture);
|
|
}
|
|
};
|
|
|
|
return (ActFmCameraModule.activityResult(activity,
|
|
requestCode, resultCode, data, callback));
|
|
}
|
|
return false;
|
|
}
|
|
|
|
|
|
@Override
|
|
protected void refreshDisplayView() {
|
|
notesPreview.setText(editText.getText());
|
|
}
|
|
|
|
@Override
|
|
public void readFromTask(Task task) {
|
|
//
|
|
}
|
|
|
|
@Override
|
|
protected void readFromTaskPrivate() {
|
|
// Nothing, we don't lazy load this control set yet
|
|
}
|
|
|
|
@Override
|
|
public String writeToModel(Task task) {
|
|
return null;
|
|
}
|
|
|
|
@Override
|
|
protected String writeToModelPrivate(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
|
|
protected void onOkClick() {
|
|
super.onOkClick();
|
|
InputMethodManager imm = (InputMethodManager)activity.getSystemService(Context.INPUT_METHOD_SERVICE);
|
|
imm.hideSoftInputFromWindow(editText.getWindowToken(), 0);
|
|
}
|
|
|
|
@Override
|
|
protected void onCancelClick() {
|
|
super.onCancelClick();
|
|
InputMethodManager imm = (InputMethodManager)activity.getSystemService(Context.INPUT_METHOD_SERVICE);
|
|
imm.hideSoftInputFromWindow(editText.getWindowToken(), 0);
|
|
}
|
|
|
|
public boolean hasNotes() {
|
|
return !TextUtils.isEmpty(editText.getText());
|
|
}
|
|
|
|
}
|