package com.ywwxhz.fragments; import android.app.DialogFragment; import android.content.res.Configuration; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.os.Bundle; import android.text.Editable; import android.text.TextWatcher; import android.util.DisplayMetrics; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.view.Window; import android.widget.Button; import android.widget.EditText; import android.widget.ImageView; import android.widget.Toast; import com.loopj.android.http.BinaryHttpResponseHandler; import com.loopj.android.http.JsonHttpResponseHandler; import com.loopj.android.http.RequestParams; import com.pnikosis.materialishprogress.ProgressWheel; import com.ywwxhz.cnbetareader.R; import com.ywwxhz.lib.Configure; import com.ywwxhz.lib.kits.NetKit; import com.ywwxhz.lib.kits.UIKit; import org.apache.http.Header; import org.json.JSONException; import org.json.JSONObject; /** * cnBetaReader * * Created by 远望の无限(ywwxhz) on 2014/11/5 17:54. */ public class AddNewCommentFragment extends DialogFragment implements View.OnClickListener { private static final String SID_KEY = "key_sid"; private static final String TOKEN_KEY = "key_token"; private static final String TID_KEY = "key_tid"; private int sid; private String tid; private String token; private EditText content; private EditText seccode; private Button send; private ProgressWheel progress; private ImageView seccodeImage; private boolean flushing = false; public static AddNewCommentFragment getInstance(int sid, String tid, String token) { AddNewCommentFragment fragment = new AddNewCommentFragment(); Bundle args = new Bundle(); args.putInt(SID_KEY, sid); args.putString(TID_KEY, tid); args.putString(TOKEN_KEY, token); fragment.setArguments(args); return fragment; } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); if (getArguments() != null) { sid = getArguments().getInt(SID_KEY); tid = getArguments().getString(TID_KEY); token = getArguments().getString(TOKEN_KEY); } } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { return inflater.inflate(R.layout.fragment_new_comment, container, false); } @Override public void onViewCreated(View view, Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); if (getDialog() != null) { getDialog().getWindow().requestFeature(Window.FEATURE_NO_TITLE); } content = (EditText) view.findViewById(R.id.push_content); seccode = (EditText) view.findViewById(R.id.seccode); seccodeImage = (ImageView) view.findViewById(R.id.seccodeImage); progress = (ProgressWheel) view.findViewById(R.id.seccodeProgress); content.addTextChangedListener(new TextWatcher() { @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { } @Override public void onTextChanged(CharSequence s, int start, int before, int count) { if (s.length() == 0) { send.setEnabled(false); } else { send.setEnabled(true); } } @Override public void afterTextChanged(Editable s) { } }); send = (Button)view.findViewById(R.id.send); send.setOnClickListener(this); if("0".equals(tid)){ send.setText("发布"); }else{ send.setText("回复"); } reflushscecode(); seccodeImage.setOnClickListener(reflushscecode); progress.setOnClickListener(reflushscecode); } private View.OnClickListener reflushscecode = new View.OnClickListener() { @Override public void onClick(View v) { reflushscecode(); } }; private void reflushscecode() { if (!flushing) { flushing = true; seccodeImage.setVisibility(View.GONE); progress.setVisibility(View.VISIBLE); RequestParams params = new RequestParams(); params.put("refresh", 1); params.put("_", System.currentTimeMillis()); NetKit.getAsyncClient().get(getActivity(), Configure.SECOND_VIEW, NetKit.getAuthHeader(), params, new JsonHttpResponseHandler() { @Override public void onStart() { progress.spin(); } @Override public void onSuccess(int statusCode, Header[] headers, JSONObject response) { try { String url = response.getString("url"); NetKit.getAsyncClient().get(getActivity(), Configure.BASE_URL + url, NetKit.getAuthHeader() , null, new BinaryHttpResponseHandler() { @Override public void onSuccess(int statusCode, Header[] headers, byte[] binaryData) { //工厂对象的decodeByteArray把字节转换成Bitmap对象 Bitmap bitmap = BitmapFactory.decodeByteArray(binaryData, 0, binaryData.length); //设置图片 seccodeImage.setImageBitmap(bitmap); } @Override public void onFailure(int statusCode, Header[] headers, byte[] binaryData, Throwable error) { seccodeImage.setImageBitmap(null); error.printStackTrace(); showToast("获取验证码失败"); } @Override public void onFinish() { flushing = false; seccodeImage.setVisibility(View.VISIBLE); progress.setVisibility(View.GONE); } @Override public void onProgress(int bytesWritten, int totalSize) { progress.setProgress(bytesWritten * 1.0f / totalSize); } }); } catch (JSONException e) { e.printStackTrace(); showToast("获取验证码失败了"); flushing = false; } } @Override public void onFailure(int statusCode, Header[] headers, Throwable throwable, JSONObject errorResponse) { showToast("获取验证码失败了"); flushing = false; seccodeImage.setImageBitmap(null); seccodeImage.setVisibility(View.VISIBLE); progress.setVisibility(View.GONE); } } ); } } @Override public void onStart() { super.onStart(); DisplayMetrics dm = new DisplayMetrics(); getActivity().getWindowManager().getDefaultDisplay().getMetrics(dm); int width = dm.widthPixels; if (width > UIKit.dip2px(getActivity(), 450)) { width = UIKit.dip2px(getActivity(), 450); } getDialog().getWindow().setLayout(width, getDialog().getWindow().getAttributes().height); } @Override public void onClick(View v) { if (v.getId() == R.id.send) { if (seccode.getText().length() == 4) { RequestParams params = new RequestParams(); params.put("op", "publish"); params.put("content", content.getText().toString()); params.put("sid", sid); params.put("pid", tid); params.put("seccode", seccode.getText().toString()); params.put("csrf_token", token); NetKit.getAsyncClient().post(getActivity(), Configure.COMMENT_VIEW, NetKit.getAuthHeader(), params, NetKit.CONTENT_TYPE, new JsonHttpResponseHandler() { @Override public void onSuccess(int statusCode, Header[] headers, JSONObject response) { System.out.println("statusCode = [" + statusCode + "], response = [" + response + "]"); try { if ("success".equals(response.getString("state"))) { String action; if ("0".equals(tid)) { action = "发布"; } else { action = "回复"; } showToast(action + "成功"); dismiss(); } else if ("error".equals(response.getString("state"))) { showToast(response.getString("error") + ""); } else { throw new JSONException("response error"); } } catch (JSONException e) { onFailure(statusCode, headers, e, response); } } @Override public void onFailure(int statusCode, Header[] headers, Throwable throwable, JSONObject errorResponse) { throwable.printStackTrace(); String action; if ("0".equals(tid)) { action = "发布"; } else { action = "回复"; } showToast(action + "失败"); } } ); } else { showToast("验证码不能为空"); } } } private void showToast(String message) { if (getActivity() != null) Toast.makeText(getActivity(), message, Toast.LENGTH_LONG).show(); } @Override public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); DisplayMetrics dm = new DisplayMetrics(); getActivity().getWindowManager().getDefaultDisplay().getMetrics(dm); int width = dm.widthPixels; if (width > UIKit.dip2px(getActivity(), 420)) { width = UIKit.dip2px(getActivity(), 420); } getDialog().getWindow().setLayout(width, getDialog().getWindow().getAttributes().height); } }