package net.coding.program.project.init.create; import android.app.Activity; import android.content.DialogInterface; import android.content.Intent; import android.graphics.Bitmap; import android.net.Uri; import android.provider.MediaStore; import android.support.v7.app.AlertDialog; import android.text.Editable; import android.text.TextUtils; import android.util.Log; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; import android.widget.CheckBox; import android.widget.EditText; import android.widget.ImageView; import android.widget.TextView; import com.loopj.android.http.RequestParams; import com.nostra13.universalimageloader.core.listener.SimpleImageLoadingListener; import net.coding.program.R; import net.coding.program.common.Global; import net.coding.program.common.ImageLoadTool; import net.coding.program.common.enter.SimpleTextWatcher; import net.coding.program.common.photopick.CameraPhotoUtil; import net.coding.program.common.ui.BaseFragment; import net.coding.program.common.umeng.UmengEvent; import net.coding.program.common.util.FileUtil; import net.coding.program.project.ProjectHomeActivity_; import net.coding.program.project.detail.ProjectActivity; import net.coding.program.project.init.InitProUtils; import org.androidannotations.annotations.AfterViews; import org.androidannotations.annotations.CheckedChange; import org.androidannotations.annotations.Click; import org.androidannotations.annotations.EFragment; import org.androidannotations.annotations.OptionsMenu; import org.androidannotations.annotations.ViewById; import org.json.JSONException; import org.json.JSONObject; import java.io.File; /** * Created by jack wang on 2015/3/31. */ @EFragment(R.layout.init_fragment_project_create) @OptionsMenu(R.menu.menu_fragment_create) public class ProjectCreateFragment extends BaseFragment { public static final int RESULT_REQUEST_PHOTO = 2003; public static final int RESULT_REQUEST_PICK_TYPE = 2004; private static final String TAG = "ProjectCreateFragment"; final String host = Global.HOST_API + "/project"; private final int RESULT_REQUEST_PHOTO_CROP = 2006; String currentType = ProjectTypeActivity.TYPE_PRIVATE; ProjectInfo projectInfo; MenuItem mMenuSave; @ViewById ImageView projectIcon; @ViewById EditText projectName; @ViewById EditText description; @ViewById CheckBox generateReadme; @ViewById View item; @ViewById TextView projectTypeText; private Uri fileUri; private Uri fileCropUri; private String defaultIconUrl; private ImageLoadTool imageLoadTool = new ImageLoadTool(); @AfterViews protected void init() { projectInfo = new ProjectInfo(); projectTypeText.setText(currentType); imageLoadTool.loadImage(projectIcon, IconRandom.getRandomUrl(), ImageLoadTool.optionsRounded2, new SimpleImageLoadingListener() { @Override public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) { if (!isResumed()) { return; } File imageFile = imageLoadTool.imageLoader.getDiskCache().get(imageUri); if (imageFile == null) { // 不可能为空,但看umeng日志又有可能 showMiddleToast("载入默认项目图标失败"); return; } File newFile = new File(imageFile.getPath() + ".png"); if (newFile.exists() || imageFile.renameTo(newFile)) { defaultIconUrl = newFile.getPath(); } else { defaultIconUrl = imageFile.getPath(); } } }); projectName.addTextChangedListener(new SimpleTextWatcher() { @Override public void afterTextChanged(Editable s) { updateSendButton(); } }); Global.popSoftkeyboard(getActivity(), description, false); } @Click void item() { Intent intent = new Intent(getActivity(), ProjectTypeActivity_.class); intent.putExtra("type", currentType); startActivityForResult(intent, RESULT_REQUEST_PICK_TYPE); } @Click void projectIcon() { AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); builder.setTitle("选择图片") .setCancelable(true) .setItems(R.array.camera_gallery, (dialog, 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) { if (data != null) { fileUri = data.getData(); } fileCropUri = CameraPhotoUtil.getOutputMediaFileUri(); Global.cropImageUri(this, fileUri, fileCropUri, 600, 600, RESULT_REQUEST_PHOTO_CROP); } } else if (requestCode == RESULT_REQUEST_PHOTO_CROP) { if (resultCode == Activity.RESULT_OK) { try { String filePath = FileUtil.getPath(getActivity(), fileCropUri); projectIcon.setImageURI(fileCropUri); projectInfo.icon = filePath; } catch (Exception e) { Global.errorLog(e); } } } else if (requestCode == RESULT_REQUEST_PICK_TYPE) { if (resultCode == Activity.RESULT_OK) { String type = data.getStringExtra("type"); if (TextUtils.isEmpty(type)) { return; } currentType = type; projectTypeText.setText(currentType); } } else { super.onActivityResult(requestCode, resultCode, data); } } @Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { mMenuSave = menu.findItem(R.id.action_finish); updateSendButton(); super.onCreateOptionsMenu(menu, inflater); } @Override public boolean onOptionsItemSelected(MenuItem item) { boolean handled = super.onOptionsItemSelected(item); if (handled) { return true; } int itemId_ = item.getItemId(); if (itemId_ == R.id.action_finish) { action_done(); return true; } return false; } private void updateSendButton() { if (projectName.getText().toString().isEmpty() ) { enableSendButton(false); } else { enableSendButton(true); } } private void enableSendButton(boolean enable) { if (mMenuSave == null) { return; } if (enable) { mMenuSave.setIcon(R.drawable.ic_menu_ok); mMenuSave.setEnabled(true); } else { mMenuSave.setIcon(R.drawable.ic_menu_ok_unable); mMenuSave.setEnabled(false); } } private void action_done() { initProjectInfo(); } private void initProjectInfo() { projectInfo.name = projectName.getText().toString().trim(); if (TextUtils.isEmpty(projectInfo.name)) { showButtomToast("项目名不能为空..."); return; } if (!InitProUtils.textValidate(projectInfo.name)) { showWarningDialog(); return; } projectInfo.description = description.getText().toString().trim(); if (currentType.equals(ProjectTypeActivity.TYPE_PUBLIC)) { projectInfo.type = 1; } /*projectInfo.icon="";*/ showProgressBar(true, "正在创建项目..."); createProject(); } @CheckedChange void generateReadme(boolean checked) { projectInfo.gitReadmeEnabled = checked; } private void createProject() { RequestParams params = new RequestParams(); params.put("name", projectInfo.name); params.put("description", projectInfo.description); params.put("type", projectInfo.type); params.put("gitEnabled", projectInfo.gitEnable); params.put("gitReadmeEnabled", projectInfo.gitReadmeEnabled); params.put("gitIgnore", projectInfo.gitIgnore); params.put("gitLicense", projectInfo.gitLicense); params.put("importFrom", projectInfo.importFrom); params.put("vcsType", projectInfo.vcsType); try { if (!TextUtils.isEmpty(projectInfo.icon)) { Log.d(TAG, "icon=" + projectInfo.icon); params.put("icon", new File(projectInfo.icon)); } else if (!TextUtils.isEmpty(defaultIconUrl)) { params.put("icon", new File(defaultIconUrl)); } } catch (Exception e) { Log.d(TAG, "" + e.toString()); } postNetwork(host, params, host); } @Override public void parseJson(int code, JSONObject respanse, String tag, int pos, Object data) throws JSONException { showProgressBar(false); if (tag.equals(host)) { if (code == 0) { // InitProUtils.intentToMain(getActivity()); umengEvent(UmengEvent.PROJECT, "新建项目"); String path = respanse.optString("data"); ProjectHomeActivity_ .intent(this) .mJumpParam(new ProjectActivity.ProjectJumpParam(path)) .mNeedUpdateList(true) .start(); getActivity().finish(); showButtomToast("项目创建成功..."); } else { showErrorMsg(code, respanse); } } } private void showWarningDialog() { LayoutInflater factory = LayoutInflater.from(getActivity()); final View textEntryView = factory.inflate(R.layout.init_dialog_text_entry2, null); AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); AlertDialog dialog = builder.setTitle("提示") .setView(textEntryView) .setPositiveButton("关闭", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); } }) .show(); } public static class IconRandom { public static final String[] iconUrls = { "https://coding.net/static/project_icon/scenery-1.png", "https://coding.net/static/project_icon/scenery-2.png", "https://coding.net/static/project_icon/scenery-3.png", "https://coding.net/static/project_icon/scenery-4.png", "https://coding.net/static/project_icon/scenery-5.png", "https://coding.net/static/project_icon/scenery-6.png", "https://coding.net/static/project_icon/scenery-7.png", "https://coding.net/static/project_icon/scenery-8.png", "https://coding.net/static/project_icon/scenery-9.png", "https://coding.net/static/project_icon/scenery-10.png", "https://coding.net/static/project_icon/scenery-11.png", "https://coding.net/static/project_icon/scenery-12.png", "https://coding.net/static/project_icon/scenery-13.png", "https://coding.net/static/project_icon/scenery-14.png", "https://coding.net/static/project_icon/scenery-15.png", "https://coding.net/static/project_icon/scenery-16.png", "https://coding.net/static/project_icon/scenery-17.png", "https://coding.net/static/project_icon/scenery-18.png", "https://coding.net/static/project_icon/scenery-19.png", "https://coding.net/static/project_icon/scenery-20.png", "https://coding.net/static/project_icon/scenery-21.png", "https://coding.net/static/project_icon/scenery-22.png", "https://coding.net/static/project_icon/scenery-23.png", "https://coding.net/static/project_icon/scenery-24.png" }; public static String getRandomUrl() { int index = (int) (Math.random() * iconUrls.length); return iconUrls[index]; } } public final class ProjectInfo { String name; String description; int type = 2; // 默认私有 boolean gitEnable = true; boolean gitReadmeEnabled = false; String gitIgnore = "no"; String gitLicense = "no"; String importFrom = ""; String vcsType = "git"; String icon = ""; } }