package net.coding.program.common.base;
import android.app.Activity;
import android.content.DialogInterface;
import android.content.Intent;
import android.net.Uri;
import android.provider.MediaStore;
import android.support.v7.app.AlertDialog;
import android.text.Editable;
import android.text.TextUtils;
import android.view.View;
import android.widget.EditText;
import com.loopj.android.http.RequestParams;
import net.coding.program.R;
import net.coding.program.common.Global;
import net.coding.program.common.PhotoOperate;
import net.coding.program.common.photopick.CameraPhotoUtil;
import net.coding.program.common.ui.BaseFragment;
import net.coding.program.model.AttachmentFileObject;
import net.coding.program.project.detail.TopicEditFragment;
import org.androidannotations.annotations.AfterViews;
import org.androidannotations.annotations.Click;
import org.androidannotations.annotations.EFragment;
import org.androidannotations.annotations.ViewById;
import org.json.JSONException;
import org.json.JSONObject;
import java.io.File;
@EFragment(R.layout.fragment_mdedit)
public class MDEditFragment extends BaseFragment {
private final String tipFont = "在此输入文字";
private final String HOST_UPLOAD_PHOTO_PUBLIC = Global.HOST_API + "/project/%s/upload_public_image";
private final String HOST_UPLOAD_PHOTO_PRIVATE = Global.HOST_API + "/project/%s/file/upload";
private final String HOST_UPLOAD_PHOTO_PUBLIC_PATH = Global.HOST_API + "%s/upload_public_image";
// private final String host_upload_photo = "https://coding.net/api/project/%d/file/upload";
private final String HOST_UPLOAD_PHOTO_PRIVATE_PATH = Global.HOST_API + "%s/file/upload";
private final int RESULT_REQUEST_PHOTO = 3005;
@ViewById
protected EditText edit;
private Uri fileUri;
private Uri fileCropUri;
private String hostUploadPhoto = "";
@AfterViews
protected final void initBase1() {
TopicEditFragment.SaveData projectData = (TopicEditFragment.SaveData) getActivity();
String path = projectData.getProjectPath();
String template;
if (projectData.isProjectPublic()) {
if (path.startsWith("/")) {
template = HOST_UPLOAD_PHOTO_PUBLIC_PATH;
} else {
template = HOST_UPLOAD_PHOTO_PUBLIC;
}
hostUploadPhoto = String.format(template, path);
} else {
if (path.startsWith("/")) {
template = HOST_UPLOAD_PHOTO_PRIVATE_PATH;
} else {
template = HOST_UPLOAD_PHOTO_PRIVATE;
}
hostUploadPhoto = String.format(template, path);
}
String customUploadPhoto = getCustomUploadPhoto();
if (!TextUtils.isEmpty(customUploadPhoto)) {
hostUploadPhoto = getCustomUploadPhoto();
}
}
protected String getCustomUploadPhoto() {
return "";
}
@Click
public void mdBold(View v) {
insertString(" **", tipFont, "** ");
}
@Click
public void mdItalic(View v) {
insertString(" *", tipFont, "* ");
}
@Click
public void mdHyperlink(View view) {
insertString("[", tipFont, "]()");
}
@Click
public void mdLinkQuote(View view) {
insertString("\n> ", tipFont, "");
}
@Click
public void mdCode(View v) {
insertString("\n```\n",
tipFont,
"\n```\n");
}
@Click
public void mdTitle(View view) {
insertString("## ", tipFont, " ##");
}
@Click
public void mdList(View v) {
insertString("\n - ", tipFont, "");
}
@Click
public void mdDivide(View v) {
insertString("\n----------\n", tipFont, "");
}
@Click
public void mdPhoto(View v) {
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
builder.setTitle("上传图片")
.setItems(R.array.camera_gallery, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
if (which == 0) {
camera();
} else {
photo();
}
}
}).show();
}
private void camera() {
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
fileUri = CameraPhotoUtil.getOutputMediaFileUri();
intent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri);
startActivityForResult(intent, RESULT_REQUEST_PHOTO);
}
private void photo() {
Intent i = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
startActivityForResult(i, RESULT_REQUEST_PHOTO);
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == RESULT_REQUEST_PHOTO) {
if (resultCode == Activity.RESULT_OK) {
try {
showProgressBar(true, "正在上传图片...");
setProgressBarProgress();
if (data != null) {
Uri url = data.getData();
if (url != null) {
fileUri = url;
}
}
File outputFile = new PhotoOperate(getActivity()).scal(fileUri);
RequestParams params = new RequestParams();
params.put("dir", 0);
params.put("file", outputFile);
postNetwork(hostUploadPhoto, params, hostUploadPhoto);
} catch (Exception e) {
showProgressBar(false);
}
}
}
}
@Override
public void parseJson(int code, JSONObject respanse, String tag, int pos, Object data) throws JSONException {
if (tag.equals(hostUploadPhoto)) {
showProgressBar(false);
if (code == 0) {
String fileUri;
JSONObject jsonData = respanse.optJSONObject("data");
if (jsonData != null) {
AttachmentFileObject fileObject = new AttachmentFileObject(jsonData);
fileUri = fileObject.owner_preview;
} else {
fileUri = respanse.optString("data", "");
}
String mdPhotoUri = String.format("![图片](%s)\n", fileUri);
insertString(mdPhotoUri, "", "");
} else {
showErrorMsg(code, respanse);
}
}
}
private void insertString(String begin, String middle, String end) {
edit.requestFocus();
Global.popSoftkeyboard(getActivity(), edit, true);
String insertString = String.format("%s%s%s", begin, middle, end);
int insertPos = edit.getSelectionStart();
int selectBegin = insertPos - begin.length();
int selectEnd = selectBegin + insertString.length();
Editable editable = edit.getText();
String currentInput = editable.toString();
if (0 <= selectBegin &&
selectEnd <= currentInput.length() &&
insertString.equals(currentInput.substring(selectBegin, selectEnd))) { //
editable.replace(selectBegin, selectEnd, middle);
edit.setSelection(selectBegin, selectBegin + middle.length());
} else {
editable.replace(insertPos, edit.getSelectionEnd(), insertString);
edit.setSelection(insertPos + begin.length(), insertPos + begin.length() + middle.length());
}
}
}