package cn.fanfan.detail.question;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import org.apache.http.Header;
import org.apache.http.client.CookieStore;
import org.json.JSONException;
import org.json.JSONObject;
import com.loopj.android.http.AsyncHttpClient;
import com.loopj.android.http.AsyncHttpResponseHandler;
import com.loopj.android.http.PersistentCookieStore;
import com.loopj.android.http.RequestParams;
import com.umeng.analytics.MobclickAgent;
import cn.fanfan.asking.Bimp;
import cn.fanfan.asking.FileUtils;
import cn.fanfan.common.Config;
import cn.fanfan.common.MyProgressDialog;
import cn.fanfan.main.R;
import android.annotation.SuppressLint;
import android.app.ActionBar;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.provider.MediaStore;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.view.View.OnClickListener;
import android.view.ViewGroup.LayoutParams;
import android.view.ViewTreeObserver.OnPreDrawListener;
import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.EditText;
import android.widget.GridView;
import android.widget.HorizontalScrollView;
import android.widget.ImageView;
import android.widget.Toast;
import android.widget.AdapterView.OnItemClickListener;
public class WriteAnswerActivity extends Activity {
private AsyncHttpClient client;
private CookieStore myCookieStore;
private MyProgressDialog progressDialog;
private int attach_id;
private ActionBar actionBar;
private static Uri photoUri;
private File photo;
private float dp;
private GridView gridview;
private GridAdapter adapter;
private String question_id;
public List<Bitmap> bmp = new ArrayList<Bitmap>();
public List<String> drr = new ArrayList<String>();
private String[] items = new String[] { "ѡ��ͼƬ", "����" };
private HorizontalScrollView selectimg_horizontalScrollView;
private static String attach_access_key;
private EditText editText;
@SuppressLint("NewApi")
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.write_answer);
actionBar = getActionBar();
actionBar.setIcon(null);
actionBar.setTitle("�ش�");
actionBar.setDisplayUseLogoEnabled(false);
actionBar.setDisplayHomeAsUpEnabled(true);
actionBar.show();
Intent intent = getIntent();
question_id = intent.getStringExtra("questionid");
attach_access_key = md5(getAttachKey());
dp = getResources().getDimension(R.dimen.dp);
editText = (EditText) findViewById(R.id.answerdetil);
selectimg_horizontalScrollView = (HorizontalScrollView) findViewById(R.id.selectimg_horizontalScrollView);
gridview = (GridView) findViewById(R.id.noScrollgridview);
gridview.setSelector(new ColorDrawable(Color.TRANSPARENT));
client = new AsyncHttpClient();
myCookieStore = new PersistentCookieStore(this);
client.setCookieStore(myCookieStore);
progressDialog = new MyProgressDialog(this, "���ڼ�����", "���Ժ�...", false);
gridviewInit();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// TODO Auto-generated method stub
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.quespub, menu);
return super.onCreateOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// TODO Auto-generated method stub
switch (item.getItemId()) {
case R.id.publish:
RequestParams params = new RequestParams();
params.put("question_id", question_id);
params.put("answer_content", editText.getText().toString());
params.put("attach_access_key", attach_access_key);
postanswer(params);
break;
case android.R.id.home:
finish();
break;
default:
break;
}
return super.onOptionsItemSelected(item);
}
private void showDialog() {
new AlertDialog.Builder(this)
.setTitle("�ϴ�ͼƬ")
.setItems(items, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
switch (which) {
case 0:
Intent openAlbumIntent = new Intent(
Intent.ACTION_PICK,
android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
startActivityForResult(openAlbumIntent, 0);
break;
case 1:
Intent intent = new Intent(
"android.media.action.IMAGE_CAPTURE");
String pString = Environment
.getExternalStorageDirectory()
+ "/fanfantmp";
final File photodir = new File(pString);
if (!photodir.exists()) {
photodir.mkdirs();
}
// TODO Auto-generated method stub
photo = new File(photodir, getPhotoFileName());
photoUri = Uri.fromFile(photo);
intent.putExtra(MediaStore.EXTRA_OUTPUT, photoUri);
startActivityForResult(intent, 1);
break;
}
}
})
.setNegativeButton("ȡ��", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
}).show();
}
@SuppressLint("SimpleDateFormat")
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// TODO Auto-generated method stub
super.onActivityResult(requestCode, resultCode, data);
switch (requestCode) {
case 0:
if (resultCode != RESULT_CANCELED && null != data) {
Uri uri = data.getData();
String[] pojo = { MediaStore.Images.Media.DATA };
Cursor cursor = getContentResolver().query(uri, pojo, null,
null, null);
String picPath = null;
if (cursor != null) {
int columnIndex = cursor.getColumnIndex(pojo[0]);
cursor.moveToFirst();
picPath = cursor.getString(columnIndex);
cursor.close();
}
File photopic = new File(picPath);
photoUri = Uri.fromFile(photopic);
picpost(photoUri);
} else {
Toast.makeText(this, "ȡ��Ƭʧ�ܣ�", Toast.LENGTH_LONG).show();
}
break;
case 1:
if (resultCode != RESULT_CANCELED && photoUri != null) {
// startPhotoZoom(photoUri);
picpost(photoUri);
} else {
Toast.makeText(this, "����ʧ�ܣ�", Toast.LENGTH_LONG).show();
}
break;
default:
break;
}
}
@SuppressLint("SimpleDateFormat")
private void picpost(Uri photoUri) {
File picphoto = null;
try {
picphoto = new File(Bimp.revitionImageSize(photoUri.getPath()));
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
RequestParams params = new RequestParams();
try {
params.put("qqfile", picphoto);
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
postpic(params, "answer", attach_access_key);
}
public void postpic(RequestParams params, String id, String attach) {
String url = Config.getValue("PostPic") + "?id=" + id
+ "&attach_access_key=" + attach;
client.post(url, params, new AsyncHttpResponseHandler() {
@Override
public void onSuccess(int arg0, Header[] arg1, byte[] arg2) {
// TODO Auto-generated method stub
JSONObject jsonObject = new JSONObject();
JSONObject rsm = new JSONObject();
int errno = 0;
String err = null;
String result = new String(arg2);
try {
jsonObject = new JSONObject(result);
errno = jsonObject.getInt("errno");
err = jsonObject.getString("err");
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if (errno == 1) {
Toast.makeText(WriteAnswerActivity.this, "�ϴ��ɹ���", Toast.LENGTH_LONG)
.show();
try {
rsm = jsonObject.getJSONObject("rsm");
attach_id = rsm.getInt("attach_id");
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
editText.append("[attach]" + attach_id + "[/attach]");
Bitmap bitmap = Bimp.getLoacalBitmap(photoUri.getPath());
bitmap = Bimp.createFramedPhoto(480, 480, bitmap,
(int) (dp * 1.6f));
drr.add(photoUri.getPath());
bmp.add(bitmap);
gridviewInit();
}
if (errno == -1) {
Toast.makeText(WriteAnswerActivity.this, err, Toast.LENGTH_LONG)
.show();
}
}
@Override
public void onFailure(int arg0, Header[] arg1, byte[] arg2,
Throwable arg3) {
// TODO Auto-generated method stub
}
});
}
public void postanswer(RequestParams params) {
String url = Config.getValue("PostAnswer");
client.post(url, params, new AsyncHttpResponseHandler() {
@Override
public void onStart() {
// TODO Auto-generated method stub
progressDialog.show();
super.onStart();
}
@Override
public void onSuccess(int arg0, Header[] arg1, byte[] arg2) {
// TODO Auto-generated method stub
JSONObject jsonObject;
int errno = 0;
String err = null;
String result = new String(arg2);
try {
jsonObject = new JSONObject(result);
errno = jsonObject.getInt("errno");
err = jsonObject.getString("err");
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
progressDialog.hideAndCancle();
if (errno == 1) {
Toast.makeText(WriteAnswerActivity.this, "�ش�ɹ���", Toast.LENGTH_LONG)
.show();
attach_access_key = md5(getAttachKey());
setResult(RESULT_OK);
}
if (errno == -1) {
Toast.makeText(WriteAnswerActivity.this, err, Toast.LENGTH_LONG)
.show();
}
finish();
}
@Override
public void onFailure(int arg0, Header[] arg1, byte[] arg2,
Throwable arg3) {
// TODO Auto-generated method stub
}
});
}
@SuppressLint("SimpleDateFormat")
private String getAttachKey() {
Date date = new Date(System.currentTimeMillis());
SimpleDateFormat dateFormat = new SimpleDateFormat(
"'IMG'yyyyMMddHHmmss");
return dateFormat.format(date) + Math.random() * 100;
}
@SuppressLint("SimpleDateFormat")
private String getPhotoFileName() {
Date date = new Date(System.currentTimeMillis());
SimpleDateFormat dateFormat = new SimpleDateFormat(
"'IMG'_yyyyMMdd_HHmmss");
return dateFormat.format(date) + ".jpg";
}
public static String md5(String string) {
byte[] hash;
try {
hash = MessageDigest.getInstance("MD5").digest(
string.getBytes("UTF-8"));
} catch (NoSuchAlgorithmException e) {
throw new RuntimeException("Huh, MD5 should be supported?", e);
} catch (UnsupportedEncodingException e) {
throw new RuntimeException("Huh, UTF-8 should be supported?", e);
}
StringBuilder hex = new StringBuilder(hash.length * 2);
for (byte b : hash) {
if ((b & 0xFF) < 0x10)
hex.append("0");
hex.append(Integer.toHexString(b & 0xFF));
}
return hex.toString();
}
public void gridviewInit() {
adapter = new GridAdapter(this);
adapter.setSelectedPosition(0);
int size = 0;
if (bmp.size() < 6) {
size = bmp.size() + 1;
} else {
size = bmp.size();
}
LayoutParams params = gridview.getLayoutParams();
final int width = size * (int) (dp * 9.4f);
params.width = width;
gridview.setLayoutParams(params);
gridview.setColumnWidth((int) (dp * 9.4f));
gridview.setStretchMode(GridView.NO_STRETCH);
gridview.setNumColumns(size);
gridview.setAdapter(adapter);
gridview.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {
// TODO Auto-generated method stub
/*
* ((InputMethodManager)
* getActivity().getSystemService(INPUT_METHOD_SERVICE))
* .hideSoftInputFromWindow(getActivity()
* .getCurrentFocus().getWindowToken(),
* InputMethodManager.HIDE_NOT_ALWAYS);
*/
if (arg2 == bmp.size()) {
String sdcardState = Environment.getExternalStorageState();
if (Environment.MEDIA_MOUNTED.equals(sdcardState)) {
showDialog();
} else {
Toast.makeText(WriteAnswerActivity.this, "sdcard�Ѱγ�������ѡ����Ƭ",
Toast.LENGTH_SHORT).show();
}
} else {
}
}
});
selectimg_horizontalScrollView.getViewTreeObserver()
.addOnPreDrawListener(// �������
new OnPreDrawListener() {
public boolean onPreDraw() {
selectimg_horizontalScrollView.scrollTo(width,
0);
selectimg_horizontalScrollView
.getViewTreeObserver()
.removeOnPreDrawListener(this);
return false;
}
});
}
protected void onDestroy() {
FileUtils.deleteDir(FileUtils.SDPATH);
FileUtils.deleteDir(FileUtils.SDPATH1);
// ����ͼƬ����
super.onDestroy();
}
public class GridAdapter extends BaseAdapter {
private LayoutInflater listContainer;
private int selectedPosition = -1;
private boolean shape;
public boolean isShape() {
return shape;
}
public void setShape(boolean shape) {
this.shape = shape;
}
public class ViewHolder {
public ImageView image;
}
public GridAdapter(Context context) {
listContainer = LayoutInflater.from(context);
}
public int getCount() {
if (bmp.size() < 6) {
return bmp.size() + 1;
} else {
return bmp.size();
}
}
public Object getItem(int arg0) {
return null;
}
public long getItemId(int arg0) {
return 0;
}
public void setSelectedPosition(int position) {
selectedPosition = position;
}
public int getSelectedPosition() {
return selectedPosition;
}
/**
* ListView Item����
*/
public View getView(int position, View convertView, ViewGroup parent) {
final int sign = position;
// �Զ�����ͼ
ViewHolder holder = null;
if (convertView == null) {
holder = new ViewHolder();
// ��ȡlist_item�����ļ�����ͼ
convertView = listContainer.inflate(
R.layout.item_published_grida, null);
// ��ȡ�ؼ�����
holder.image = (ImageView) convertView
.findViewById(R.id.item_grida_image);
// ���ÿؼ�����convertView
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
if (position == bmp.size()) {
holder.image.setImageBitmap(BitmapFactory.decodeResource(
getResources(), R.drawable.icon_addpic_unfocused));
if (position == 6) {
holder.image.setVisibility(View.GONE);
}
} else {
holder.image.setImageBitmap(bmp.get(position));
holder.image.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
bmp.get(sign).recycle();
bmp.remove(sign);
drr.remove(sign);
gridviewInit();
}
});
}
return convertView;
}
}
public void onResume() {
super.onResume();
MobclickAgent.onResume(this);
}
public void onPause() {
super.onPause();
MobclickAgent.onPause(this);
}
}