package com.example.slidingmenu.yujing.client.activity.friends;
import org.json.JSONException;
import android.app.ProgressDialog;
import android.content.ContentValues;
import android.content.Intent;
import android.database.Cursor;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.AsyncTask.Status;
import android.view.ContextMenu;
import android.view.MenuItem;
import android.view.View;
import android.view.ContextMenu.ContextMenuInfo;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.AdapterView.OnItemClickListener;
import com.example.slidingmenu.R;
import com.example.slidingmenu.yujing.client.activity.ProfileActivity;
import com.example.slidingmenu.yujing.client.activity.controller.BaseActivity;
import com.example.slidingmenu.yujing.client.activity.letter.SendLetterActivity;
import com.example.slidingmenu.yujing.client.application.ClientApplication;
import com.example.slidingmenu.yujing.client.contentprovider.DataProvider;
import com.example.slidingmenu.yujing.client.database.table.Friend;
import com.example.slidingmenu.yujing.client.network.HttpClient;
import com.example.slidingmenu.yujing.client.network.Request;
import com.example.slidingmenu.yujing.client.network.mode.RequestParam;
import com.example.slidingmenu.yujing.client.network.mode.ResponseParam;
import com.example.slidingmenu.yujing.client.network.mode.friend.GetFriendResponseParam;
import com.example.slidingmenu.yujing.client.service.MsgRefresh;
import com.example.slidingmenu.yujing.client.service.MsgService;
public class FriendsActivity extends BaseActivity implements MsgRefresh {
private ClientApplication clientApplication;
private ListView friendsList;
private AllFriendsAdapter fAdapter;
private GetAllFriendTask mGetAllFriendTask;
private DeleteFriendTask mDeleteFriendTask;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.friends_layout);
clientApplication = (ClientApplication) getApplication();
friendsList = (ListView) findViewById(R.id.friends_list);
init();
setListAdapter();
if(fAdapter.getCount() == 0) {
getFriendFromNetwork2();
}
friendsList.setOnItemClickListener(new ClickListView());
registerForContextMenu(friendsList);
}
public void onRefrehClick(View v) {
getFriendFromNetwork();
}
private void getFriendFromNetwork() {
RequestParam requestParam = new RequestParam();
requestParam.setUserName(clientApplication.getLoginUserInfo().getString(RequestParam.USER_NAME, null));
requestParam.setPassword(clientApplication.getLoginUserInfo().getString(RequestParam.PASSWORD, null));
requestParam.setRandomKey("1234");
requestParam.setRequestType(RequestParam.GET_NEW_FRIENDS);
requestParam.setParams(new String[]{""});
mGetAllFriendTask = new GetAllFriendTask();
mGetAllFriendTask.execute(requestParam);
}
private void getFriendFromNetwork2() {
RequestParam requestParam = new RequestParam();
requestParam.setUserName(clientApplication.getLoginUserInfo().getString(RequestParam.USER_NAME, null));
requestParam.setPassword(clientApplication.getLoginUserInfo().getString(RequestParam.PASSWORD, null));
requestParam.setRandomKey("1234");
requestParam.setRequestType(RequestParam.GET_ALL_FRIENDS);
requestParam.setParams(new String[]{""});
mGetAllFriendTask = new GetAllFriendTask();
mGetAllFriendTask.execute(requestParam);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if(requestCode == ADD_FRIEND && resultCode == RESULT_OK) {
getFriendFromNetwork();
}
super.onActivityResult(requestCode, resultCode, data);
}
public void onAddClick(View v){
startActivityForResult(new Intent(this, AddFriendsActivity.class), ADD_FRIEND);
}
private void setListAdapter(){
String user = clientApplication.getLoginUserInfo().getString(RequestParam.USER_NAME, "");
Cursor cs = managedQuery(DataProvider.Friend_CONTENT_URI, null, Friend.UID
+ "=?", new String[] {user}, Friend.name + " COLLATE LOCALIZED ASC ");
fAdapter = new AllFriendsAdapter(FriendsActivity.this,
R.layout.friends_layout_item,
cs,
false);
friendsList.setAdapter(fAdapter);
}
@Override
public void onCreateContextMenu( ContextMenu menu, View v,
ContextMenuInfo menuInfo ) {
menu.add( 0, 0, 0, "私信" );
menu.add( 0, 1, 0, "查看" );
menu.add( 0, 2, 0, "删除" );
super.onCreateContextMenu( menu, v, menuInfo );
}
@Override
public boolean onContextItemSelected(MenuItem item) {
AdapterView.AdapterContextMenuInfo menuInfo;
menuInfo = (AdapterView.AdapterContextMenuInfo) item.getMenuInfo();
ContentValues values = this.fAdapter.getItem(menuInfo.position);
switch (item.getItemId()) {
// 私信
case 0:
Intent intent1 = new Intent(this, SendLetterActivity.class);
intent1.putExtra("values", values);
startActivityForResult(intent1, SEND_LETTER);
break;
// 查看
case 1:
Intent intent2 = new Intent();
intent2.putExtra("values", values);
intent2.setClass(FriendsActivity.this, ProfileActivity.class);
startActivity(intent2);
break;
// 删除
case 2:
RequestParam requestParam = new RequestParam();
requestParam.setUserName(clientApplication.getLoginUserInfo().getString(RequestParam.USER_NAME, null));
requestParam.setPassword(clientApplication.getLoginUserInfo().getString(RequestParam.PASSWORD, null));
requestParam.setRandomKey("1234");
requestParam.setRequestType(RequestParam.DEL_FRIENDS);
requestParam.setParams(new String[] { values.getAsString(Friend.mobile)});
mDeleteFriendTask = new DeleteFriendTask();
mDeleteFriendTask.execute(requestParam, values.getAsInteger(Friend._id));
break;
}
return super.onContextItemSelected(item);
}
@Override
protected void onDestroy() {
if(mGetAllFriendTask != null && mGetAllFriendTask.getStatus() == Status.RUNNING) {
mGetAllFriendTask.cancel(true);
mGetAllFriendTask = null;
}
if(mDeleteFriendTask != null && mDeleteFriendTask.getStatus() == Status.RUNNING) {
mDeleteFriendTask.cancel(true);
mDeleteFriendTask = null;
}
super.onDestroy();
}
private class GetAllFriendTask extends AsyncTask<RequestParam, Integer, Boolean>{
private ProgressDialog dialog;
@Override
protected void onPreExecute() {
dialog = ProgressDialog.show(FriendsActivity.this, "", getText(R.string.waiting));
super.onPreExecute();
}
@Override
protected Boolean doInBackground(RequestParam... param) {
//如果网络没有连接则更新进度为 网络连接异常
if(!HttpClient.isConnect(clientApplication.getApplicationContext())) {
return false;
}
RequestParam requestParam = param[0];
String res = Request.request(requestParam.getJSON());
// 如果请求结果为空字符串,则请求失败
if ("".equals(res)) {
return false;
}
try {
GetFriendResponseParam response = new GetFriendResponseParam(res);
if (response.getResult() != GetFriendResponseParam.RESULT_SUCCESS) {
return false;
}
for(ContentValues values : response.getAllFriend()){
Friend.insertFriend(clientApplication.getDatabaseHelper(), values);
}
} catch (JSONException e) {
e.printStackTrace();
return false;
}
return true;
}
@Override
protected void onPostExecute(Boolean result) {
if (result) {
fAdapter.refresh();
}
dialog.dismiss();
super.onPostExecute(result);
}
}
private class ClickListView implements OnItemClickListener{
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int position,
long id) {
Intent intent = new Intent();
intent.putExtra("values", fAdapter.getItem(position));
intent.setClass(FriendsActivity.this, ProfileActivity.class);
startActivity(intent);
}
}
private class DeleteFriendTask extends AsyncTask<Object, Integer, Boolean>{
private ProgressDialog dialog;
@Override
protected void onPreExecute() {
dialog = ProgressDialog.show(FriendsActivity.this, "", getText(R.string.waiting));
super.onPreExecute();
}
@Override
protected Boolean doInBackground(Object... param) {
//如果网络没有连接则更新进度为 网络连接异常
if( !HttpClient.isConnect( clientApplication.getApplicationContext() ) ) {
return false;
}
RequestParam requestParam = (RequestParam) param[0];
int _id = (Integer)param[1];
String res = Request.request(requestParam.getJSON());
if ("".equals(res)) {
return false;
}
try {
ResponseParam response = new ResponseParam(res);
if (response.getResult() != ResponseParam.RESULT_SUCCESS) {
return false;
}
Friend.deleteFriend(clientApplication.getDatabaseHelper(), _id);
} catch (JSONException e) {
e.printStackTrace();
return false;
}
return true;
}
@Override
protected void onPostExecute(Boolean result) {
if (result) {
fAdapter.refresh();
}
dialog.dismiss();
super.onPostExecute(result);
}
}
@Override
public void init() {
MsgService.acList.add(this);
}
@Override
public void refresh(int what, Object... objects) {
fAdapter.refresh();
}
}