package net.dev123.yibo;
import java.util.ArrayList;
import java.util.List;
import net.dev123.commons.util.ListUtil;
import net.dev123.entity.BaseUser;
import net.dev123.mblog.entity.Group;
import net.dev123.yibo.common.Constants;
import net.dev123.yibo.common.SelectMode;
import net.dev123.yibo.common.theme.ThemeUtil;
import net.dev123.yibo.db.GroupDao;
import net.dev123.yibo.db.LocalAccount;
import net.dev123.yibo.service.adapter.GroupMemberListAdapter;
import net.dev123.yibo.service.listener.GoBackClickListener;
import net.dev123.yibo.service.listener.GroupMemberAddClickListener;
import net.dev123.yibo.service.listener.GroupMemberSelectorTextWatcher;
import net.dev123.yibo.service.listener.UserContextMenuListener;
import net.dev123.yibo.service.listener.UserSelectorRecyclerListener;
import net.dev123.yibo.service.task.GroupMemberAddTask;
import net.dev123.yibo.service.task.GroupMemberDeleteTask;
import net.dev123.yibo.service.task.GroupMemberTask;
import net.dev123.yibome.entity.LocalGroup;
import android.content.Intent;
import android.os.Bundle;
import android.text.TextWatcher;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.TextView;
public class GroupMemberActivity extends BaseActivity {
private SelectMode selectMode;
private LocalGroup group;
private GroupMemberListAdapter selectorAdapter;
private ListView lvUser;
private View listFooter;
private YiBoApplication yibo;
private LocalAccount account;
private UserSelectorRecyclerListener recyclerListener;
private boolean isFirstLoad = false;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.group_member);
yibo = (YiBoApplication)getApplication();
initParams();
initComponents();
bindEvent();
executeTask();
}
private void initParams() {
account = yibo.getCurrentAccount();
Intent intent = this.getIntent();
Bundle bundle = intent.getExtras();
String mode = bundle.getString("SELECT_MODE");
Group tempGroup = (Group)bundle.getSerializable("GROUP");
if (tempGroup instanceof LocalGroup) {
group = (LocalGroup)tempGroup;
} else {
GroupDao dao = new GroupDao(this);
group = dao.getGroup(account, tempGroup);
}
try {
selectMode = SelectMode.valueOf(mode);
} catch (Exception e) {
selectMode = SelectMode.Multiple;
}
}
private void initComponents() {
LinearLayout llRoot = (LinearLayout)this.findViewById(R.id.llRoot);
LinearLayout llHeaderBase = (LinearLayout)this.findViewById(R.id.llHeaderBase);
LinearLayout llHeaderUserSelector = (LinearLayout)this.findViewById(R.id.llHeaderUserSelector);
lvUser = (ListView)this.findViewById(R.id.lvUser);
LinearLayout llToolbar = (LinearLayout)this.findViewById(R.id.llToolbar);
Button btnDelete = (Button)this.findViewById(R.id.btnDelete);
Button btnCancel = (Button)this.findViewById(R.id.btnCancel);
ThemeUtil.setRootBackground(llRoot);
ThemeUtil.setSecondaryHeader(llHeaderBase);
ThemeUtil.setHeaderUserSelector(llHeaderUserSelector);
ThemeUtil.setListViewStyle(lvUser);
llToolbar.setBackgroundDrawable(theme.getDrawable("bg_toolbar"));
ThemeUtil.setBtnActionPositive(btnDelete);
ThemeUtil.setBtnActionNegative(btnCancel);
TextView tvTitle = (TextView)this.findViewById(R.id.tvTitle);
tvTitle.setText(group.getName());
selectorAdapter = new GroupMemberListAdapter(this, account, selectMode);
showLoadingFooter();
lvUser.setAdapter(selectorAdapter);
lvUser.setFastScrollEnabled(yibo.isSliderEnabled());
recyclerListener = new UserSelectorRecyclerListener();
lvUser.setRecyclerListener(recyclerListener);
lvUser.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
if (position == parent.getCount() - 1) {
view.performClick();
} else {
CheckBox checkBox = (CheckBox)view.findViewById(R.id.cbUser);
checkBox.performClick();
GroupMemberActivity.this.updateButtonState();
}
}
});
lvUser.setOnCreateContextMenuListener(new UserContextMenuListener(lvUser));
setBack2Top(lvUser);
}
private void bindEvent() {
Button btnBack = (Button)this.findViewById(R.id.btnBack);
btnBack.setOnClickListener(new GoBackClickListener());
Button btnOperate = (Button)this.findViewById(R.id.btnOperate);
btnOperate.setVisibility(View.VISIBLE);
btnOperate.setText(R.string.btn_add_member);
btnOperate.setOnClickListener(new GroupMemberAddClickListener());
EditText etFilterName = (EditText)this.findViewById(R.id.etFilterName);
TextWatcher textWatcher = new GroupMemberSelectorTextWatcher(selectorAdapter);
etFilterName.addTextChangedListener(textWatcher);
Button btnDelete = (Button)this.findViewById(R.id.btnDelete);
btnDelete.setEnabled(false);
btnDelete.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
List<BaseUser> listSelectedUser = selectorAdapter.getListSelectedUser();
List<BaseUser> listUser = new ArrayList<BaseUser>(listSelectedUser);
new GroupMemberDeleteTask(selectorAdapter, group, listUser).execute();
}
});
Button btnCancel = (Button)this.findViewById(R.id.btnCancel);
btnCancel.setOnClickListener(new GoBackClickListener());
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
switch (requestCode) {
case Constants.REQUEST_CODE_USER_SELECTOR:
if (resultCode == Constants.RESULT_CODE_SUCCESS) {
List<BaseUser> listUser = (List<BaseUser>) data.getSerializableExtra("LIST_USER");
new GroupMemberAddTask(selectorAdapter, group, listUser).execute();
}
break;
}
}
public void updateButtonState() {
List<BaseUser> listUser = selectorAdapter.getListSelectedUser();
Button btnDelete = (Button)this.findViewById(R.id.btnDelete);
if (ListUtil.isNotEmpty(listUser)) {
btnDelete.setEnabled(true);
} else {
btnDelete.setEnabled(false);
}
}
private void executeTask() {
new GroupMemberTask(selectorAdapter, group).execute();
}
public void showLoadingFooter() {
if (listFooter != null) {
lvUser.removeFooterView(listFooter);
}
listFooter = getLayoutInflater().inflate(R.layout.list_item_loading, null);
ThemeUtil.setListViewLoading(listFooter);
lvUser.addFooterView(listFooter);
}
public void showMoreFooter() {
if (listFooter != null) {
lvUser.removeFooterView(listFooter);
}
listFooter = getLayoutInflater().inflate(R.layout.list_item_more, null);
ThemeUtil.setListViewMore(listFooter);
listFooter.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
executeTask();
}
});
lvUser.addFooterView(listFooter);
}
public void showNoMoreFooter() {
if (listFooter != null) {
lvUser.removeFooterView(listFooter);
}
listFooter = getLayoutInflater().inflate(R.layout.list_item_more, null);
ThemeUtil.setListViewMore(listFooter);
TextView tvFooter = (TextView) listFooter.findViewById(R.id.tvFooter);
tvFooter.setText(R.string.label_no_more);
lvUser.addFooterView(listFooter);
}
public boolean isFirstLoad() {
return isFirstLoad;
}
public void setFirstLoad(boolean isFirstLoad) {
this.isFirstLoad = isFirstLoad;
}
}