package com.suan.weclient.adapter;
import android.app.Activity;
import android.app.Dialog;
import android.content.Context;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.drawable.Drawable;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.AbsListView;
import android.widget.AbsListView.OnScrollListener;
import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.TextView;
import com.suan.weclient.R;
import com.suan.weclient.activity.LoginActivity;
import com.suan.weclient.activity.SplashActivity;
import com.suan.weclient.fragment.UserListFragment;
import com.suan.weclient.util.ListCacheManager;
import com.suan.weclient.util.SharedPreferenceManager;
import com.suan.weclient.util.Util;
import com.suan.weclient.util.data.DataManager;
import com.suan.weclient.util.data.bean.UserBean;
import com.suan.weclient.util.data.holder.UserGoupPushHelper;
import com.suan.weclient.util.data.UserListItem;
import com.suan.weclient.util.net.DataParser;
import com.suan.weclient.util.net.WeChatLoader;
import com.suan.weclient.util.net.WechatManager;
import com.suan.weclient.util.net.WechatManager.OnActionFinishListener;
import com.suan.weclient.util.net.images.ImageCacheManager;
import org.apache.http.Header;
import java.util.ArrayList;
public class UserListAdapter extends BaseAdapter implements OnScrollListener, AdapterView.OnItemClickListener, AdapterView.OnItemLongClickListener {
private LayoutInflater mInflater;
private ListCacheManager mListCacheManager;
private DataManager mDataManager;
private Activity mActivity;
private UserBean addBean;
private int selectPosition;
/*
* whether the scroll is busy
*/
private boolean mBusy = false;
/*
* whether the user cancel the last reply if so ,we will save it
*/
/*
about dialog
*/
private Dialog popDialog;
private TextView popContentTextView;
private TextView popTitleTextView;
private TextView popTextAmountTextView;
private Button popCancelButton, popSureButton;
private ArrayList<UserListItem> userListItems;
public UserListAdapter(Activity mActivity, DataManager dataManager) {
this.mInflater = LayoutInflater.from(mActivity);
this.mDataManager = dataManager;
this.mActivity = mActivity;
this.userListItems = new ArrayList<UserListItem>();
this.mListCacheManager = new ListCacheManager();
}
private ArrayList<UserListItem> getUserItems() {
if (userListItems.size() != mDataManager.getUserGroup().size() + 1) {
userListItems = new ArrayList<UserListItem>();
ArrayList<UserBean> userBeans = mDataManager.getUserGroup();
for (int i = 0; i < userBeans.size(); i++) {
userListItems.add(new UserListItem(userBeans.get(i), UserListItem.TYPE_USER));
}
userListItems.add(new UserListItem(null, UserListItem.TYPE_ADD));
}
return userListItems;
}
@Override
public int getCount() {
return getUserItems().size();
}
@Override
public Object getItem(int position) {
return getUserItems().get(position);
}
@Override
public long getItemId(int position) {
return position;
}
public void setSelectPosition(int position) {
selectPosition = position;
}
public void updateCache() {
mListCacheManager.clearData();
}
public View newView(final int position) {
View convertView = null;
switch (getUserItems().get(position).getItemType()) {
case UserListItem.TYPE_USER:
convertView = LayoutInflater.from(mActivity).inflate(
R.layout.user_group_user_item, null);
break;
case UserListItem.TYPE_ADD:
convertView = LayoutInflater.from(mActivity).inflate(
R.layout.user_group_add_item, null);
break;
}
return convertView;
}
private ItemViewHolder getHolder(final View view, int position) {
ItemViewHolder holder = (ItemViewHolder) view.getTag();
if (holder == null) {
holder = new ItemViewHolder(view, position);
view.setTag(holder);
}
return holder;
}
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
switch (getUserItems().get(position).getItemType()) {
case UserListItem.TYPE_USER:
mDataManager.setCurrentPosition(position);
UserGoupPushHelper userGoupPushHelper = new UserGoupPushHelper(SharedPreferenceManager.getPushUserGroup(mActivity));
userGoupPushHelper.updateUserGroup(mDataManager);
SharedPreferenceManager.putPushUserGroup(mActivity, userGoupPushHelper.getString());
mDataManager.doAutoLogin();
break;
case UserListItem.TYPE_ADD:
popDialog = Util.createLoginDialog(mActivity, "登录", new OnClickListener() {
@Override
public void onClick(View v) {
EditText userIdEdit = (EditText) popDialog.findViewById(R.id.dialog_login_edit_user_id);
EditText pwdEdit = (EditText) popDialog.findViewById(R.id.dialog_login_edit_pass_word);
String userId = userIdEdit.getText().toString();
String pwd = pwdEdit.getText().toString();
popDialog.dismiss();
addUserAfterLogin(userId, pwd);
}
}, new OnClickListener() {
@Override
public void onClick(View v) {
popDialog.dismiss();
}
}
);
popDialog.show();
/* Intent jumbIntent = new Intent();
jumbIntent.setClass(mActivity, LoginActivity.class);
jumbIntent.putExtra(SplashActivity.JUMB_KEY_ENTER_STATE, SplashActivity.JUMB_VALUE_NONE);
mActivity.startActivityForResult(jumbIntent,
UserListFragment.START_ACTIVITY_LOGIN);
*/
break;
}
mDataManager.getUserListControlListener().onUserListDismiss();
/*
funny things ,if not do this,the user index icon will not change
*/
notifyDataSetChanged();
}
@Override
public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
popDeleteUser(position);
notifyDataSetChanged();
return false;
}
public class ItemViewHolder {
private View parentView;
private ImageView profileImageView;
private TextView profileTextView;
private ImageView indexImageView;
public ItemViewHolder(View parentView, final int position) {
this.parentView = parentView;
switch (getUserItems().get(position).getItemType()) {
case UserListItem.TYPE_USER:
profileTextView = (TextView) parentView
.findViewById(R.id.user_group_text_user_name);
profileImageView = (ImageView) parentView
.findViewById(R.id.user_group_img_profile);
indexImageView = (ImageView) parentView.findViewById(R.id.user_group_img_index);
break;
case UserListItem.TYPE_ADD:
break;
}
}
}
private void setHeadImg(final ItemViewHolder holder, final int position) {
boolean imgLoaded = false;
if (holder.profileImageView.getTag() != null) {
imgLoaded = (Boolean) holder.profileImageView.getTag();
}
if (!mBusy && !imgLoaded) {
Bitmap headBitmap = mDataManager.getCacheManager().getBitmap(
ImageCacheManager.CACHE_USER_PROFILE
+ mDataManager.getUserGroup().get(position)
.getUserName());
if (headBitmap != null) {
holder.profileImageView.setImageBitmap(headBitmap);
} else {
holder.profileImageView.setTag(true);
mDataManager.getWechatManager().getUserImgDirectly(WechatManager.DIALOG_POP_NO,
position, holder.profileImageView, new OnActionFinishListener() {
@Override
public void onFinish(int code, Object object) {
// TODO Auto-generated method stub
if (code == WechatManager.ACTION_SUCCESS) {
if (object != null) {
holder.profileImageView.setTag(true);
Bitmap nowUserBitmap = (Bitmap) object;
mDataManager.getCacheManager().putBitmap(
ImageCacheManager.CACHE_USER_PROFILE
+ mDataManager.getUserGroup()
.get(position)
.getUserName(),
nowUserBitmap, true);
}
} else {
}
}
});
}
} else {
}
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
View v;
if (!mListCacheManager.containView(position + "|" + userListItems.get(position).getItemType())) {
v = newView(position);
mListCacheManager.putView(v, position + "|" + userListItems.get(position).getItemType());
} else {
v = mListCacheManager.getView(position + "|" + userListItems.get(position).getItemType());
}
bindView(v, position);
return v;
}
public void bindView(View view, final int position) {
ItemViewHolder holder = getHolder(view, position);
switch (getUserItems().get(position).getItemType()) {
case UserListItem.TYPE_USER:
String shortedName = Util.getShortString(mDataManager.getUserGroup().get(position)
.getNickname(), 6, 3);
holder.profileTextView.setText(shortedName
);
if (position == selectPosition) {
// row.setBackgroundResource(R.drawable.biz_navigation_tab_bg_pressed);
holder.profileTextView.setSelected(true);
}
setHeadImg(holder, position);
if (position == mDataManager.getCurrentPosition()) {
holder.indexImageView.setVisibility(View.VISIBLE);
} else {
holder.indexImageView.setVisibility(View.INVISIBLE);
}
break;
case UserListItem.TYPE_ADD:
break;
}
}
private void popDeleteUser(final int position) {
LayoutInflater inflater = (LayoutInflater)
mActivity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View dialogView = inflater.inflate(R.layout.dialog_ensure_layout, null);
popTitleTextView = (TextView) dialogView
.findViewById(R.id.dialog_ensure_text_title);
popContentTextView = (TextView) dialogView.findViewById(R.id.dialog_ensure_text_content);
popSureButton = (Button) dialogView
.findViewById(R.id.dialog_ensure_button_sure);
popCancelButton = (Button) dialogView
.findViewById(R.id.dialog_ensure_button_cancel);
popTitleTextView.setText("删除账户");
popContentTextView.setText("删除账户将删除账户相关的所有数据,确认删除?");
popSureButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
SharedPreferenceManager.deleteUser(mActivity,
mDataManager.getUserGroup().get(position)
.getUserName());
mDataManager.updateUserGroup();
mDataManager.doGroupChangeEnd();
popDialog.dismiss();
}
});
popCancelButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
popDialog.cancel();
}
});
popDialog = new Dialog(mActivity, R.style.dialog);
popDialog.setContentView(dialogView);
popDialog.show();
}
@Override
public void onScroll(AbsListView view, int firstVisibleItem,
int visibleItemCount, int totalItemCount) {
// TODO Auto-generated method stub
}
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
// TODO Auto-generated method stub
if (scrollState == OnScrollListener.SCROLL_STATE_IDLE) { // 滑动停止
mBusy = false;
} else if (scrollState == OnScrollListener.SCROLL_STATE_TOUCH_SCROLL) {// 滑动手未松开
mBusy = true;
} else if (scrollState == OnScrollListener.SCROLL_STATE_FLING) {// 滑动中手已松开
mBusy = true;
}
}
private void addUserAfterLogin(final String userName, final String pwd) {
WeChatLoader.wechatLogin(
new WeChatLoader.WechatLoginCallBack() {
@Override
public void onBack(int resultCode, String strResult, Header[] headers) {
// TODO Auto-generated method stub
switch (resultCode) {
case WeChatLoader.WECHAT_RESULT_MESSAGE_ERROR_TIMEOUT:
popDialog.dismiss();
popDialog = Util.createEnsureDialog(
new DataManager.DialogSureClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
popDialog.dismiss();
addUserAfterLogin(userName, pwd);
}
}, false, mActivity, "网络", "网络错误,重试?", true);
popDialog.show();
break;
case WeChatLoader.WECHAT_RESULT_MESSAGE_ERROR_OTHER:
popDialog.dismiss();
popDialog = Util.createEnsureDialog(
new DataManager.DialogSureClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
addUserAfterLogin(userName, pwd);
}
}, false, mActivity, "网络", "网络错误,重试?", true);
popDialog.show();
break;
case WeChatLoader.WECHAT_RESULT_MESSAGE_OK:
try {
addBean = new UserBean(userName, WeChatLoader
.getMD5Str(pwd));
DataParser.parseLogin(new DataParser.LoginParseCallBack() {
@Override
public void onBack(int code, UserBean userBean) {
switch (code) {
case DataParser.PARSE_SUCCESS:
SharedPreferenceManager
.insertUser(
mActivity,
addBean);
mDataManager.updateUserGroup();
mDataManager.doAddUser();
mDataManager.doGroupChangeEnd();
mDataManager.doAutoLogin();
popDialog.dismiss();
break;
case DataParser.PARSE_FAILED:
popDialog.dismiss();
popDialog = Util.createEnsureDialog(
new DataManager.DialogSureClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
popDialog.dismiss();
}
}, false, mActivity, "错误", "登录失败,请检查账户名和密码",
true);
popDialog.show();
break;
}
}
}, strResult, headers, addBean);
} catch (Exception exception) {
}
break;
}
}
}, userName, WeChatLoader
.getMD5Str(pwd), "", "json"
);
}
}