package net.dev123.yibo; import java.util.ArrayList; import net.dev123.commons.util.ListUtil; import net.dev123.entity.BaseUser; import net.dev123.yibo.common.Constants; import net.dev123.yibo.common.SelectMode; import net.dev123.yibo.common.theme.ThemeUtil; import net.dev123.yibo.db.LocalAccount; import net.dev123.yibo.db.Relation; import net.dev123.yibo.db.TaskDao; import net.dev123.yibo.service.adapter.UserQuickSelectorListAdapter; import net.dev123.yibo.service.listener.GoBackClickListener; import net.dev123.yibo.service.listener.UserQuickSelectorTabChangeListener; import net.dev123.yibo.service.listener.UserQuickSelectorTextWatcher; import net.dev123.yibo.service.listener.UserSelectorRecyclerListener; import net.dev123.yibo.service.task.UserQuickSelectorRecentTask; import net.dev123.yibo.service.task.UserQuickSelectorTask; import net.dev123.yibo.widget.TabButton; import android.app.Activity; import android.content.Intent; import android.content.res.ColorStateList; import android.os.Bundle; import android.text.TextWatcher; import android.view.Gravity; 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 UserQuickSelectorActivity extends BaseActivity { private SelectMode selectMode; private String title; private UserQuickSelectorListAdapter selectorAdapter; private Relation relation; private TabButton tabButton; private Button btnFollowing; private Button btnRecentContact; 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.user_quick_selector); yibo = (YiBoApplication)getApplication(); initParams(); initComponents(); bindEvent(); relation = Relation.Followingship; executeTask(); } private void initParams() { Intent intent = this.getIntent(); Bundle bundle = intent.getExtras(); String mode = bundle.getString("SELECT_MODE"); int titleId = bundle.getInt("TITLE_ID", R.string.title_select_mention_user); title = this.getString(titleId); try { selectMode = SelectMode.valueOf(mode); } catch (Exception e) { selectMode = SelectMode.Multiple; } account = yibo.getCurrentAccount(); } 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); EditText etFilterName = (EditText)this.findViewById(R.id.etFilterName); Button btnSearch = (Button) findViewById(R.id.btnSearch); btnFollowing = (Button) findViewById(R.id.btnFollowing); btnRecentContact = (Button) findViewById(R.id.btnRecentContact); lvUser = (ListView)this.findViewById(R.id.lvUser); LinearLayout llToolbar = (LinearLayout)this.findViewById(R.id.llToolbar); Button btnConfirm = (Button)this.findViewById(R.id.btnConfirm); Button btnCancel = (Button)this.findViewById(R.id.btnCancel); ThemeUtil.setRootBackground(llRoot); ThemeUtil.setSecondaryHeader(llHeaderBase); llHeaderUserSelector.setBackgroundDrawable(theme.getDrawable("bg_header_corner_search")); int padding6 = theme.dip2px(6); int padding8 = theme.dip2px(8); llHeaderUserSelector.setPadding(padding6, padding8, padding6, padding8); etFilterName.setBackgroundDrawable(theme.getDrawable("bg_input_frame_left_half")); btnSearch.setBackgroundDrawable(theme.getDrawable("selector_btn_search")); btnFollowing.setBackgroundDrawable(theme.getDrawable("selector_tab_toggle_left")); btnFollowing.setPadding(0, 0, 0, 0); ColorStateList selectorBtnTab = theme.getColorStateList("selector_btn_tab"); btnFollowing.setTextColor(selectorBtnTab); btnFollowing.setGravity(Gravity.CENTER); btnRecentContact.setBackgroundDrawable(theme.getDrawable("selector_tab_toggle_right")); btnRecentContact.setPadding(0, 0, 0, 0); btnRecentContact.setTextColor(selectorBtnTab); btnRecentContact.setGravity(Gravity.CENTER); ThemeUtil.setListViewStyle(lvUser); llToolbar.setBackgroundDrawable(theme.getDrawable("bg_toolbar")); ThemeUtil.setBtnActionPositive(btnConfirm); ThemeUtil.setBtnActionNegative(btnCancel); TextView tvTitle = (TextView)this.findViewById(R.id.tvTitle); tvTitle.setText(title); selectorAdapter = new UserQuickSelectorListAdapter(this, account, selectMode); showLoadingFooter(); lvUser.setAdapter(selectorAdapter); lvUser.setFastScrollEnabled(yibo.isSliderEnabled()); setBack2Top(lvUser); 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(); UserQuickSelectorActivity.this.updateButtonState(); } } }); } private void bindEvent() { Button btnBack = (Button)this.findViewById(R.id.btnBack); btnBack.setOnClickListener(new GoBackClickListener()); EditText etFilterName = (EditText)this.findViewById(R.id.etFilterName); TextWatcher textWatcher = new UserQuickSelectorTextWatcher(selectorAdapter); etFilterName.addTextChangedListener(textWatcher); tabButton = new TabButton(); tabButton.addButton(btnFollowing); tabButton.addButton(btnRecentContact); tabButton.toggleButton(btnFollowing); UserQuickSelectorTabChangeListener tabChangeListener = new UserQuickSelectorTabChangeListener(this); tabButton.setOnTabChangeListener(tabChangeListener); Button btnConfirm = (Button)this.findViewById(R.id.btnConfirm); btnConfirm.setEnabled(false); btnConfirm.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(); Bundle bundle = new Bundle(); ArrayList<BaseUser> userList = pickupSelectedUsers(); //保存入最近联系人 TaskDao dao = new TaskDao(v.getContext()); dao.saveRecentContact(account, userList); bundle.putSerializable("LIST_USER", userList); intent.putExtras(bundle); ((Activity)v.getContext()).setResult(Constants.RESULT_CODE_SUCCESS, intent); ((Activity)v.getContext()).finish(); } }); Button btnCancel = (Button)this.findViewById(R.id.btnCancel); btnCancel.setOnClickListener(new GoBackClickListener()); } private ArrayList<BaseUser> pickupSelectedUsers() { ArrayList<BaseUser> listUser= new ArrayList<BaseUser>(); if (selectorAdapter != null) { for (BaseUser user : selectorAdapter.getListSelectedUser()) { if (!listUser.contains(user)) { listUser.add(user); } } } return listUser; } public void updateButtonState() { ArrayList<BaseUser> userList = pickupSelectedUsers(); Button btnConfirm = (Button) this.findViewById(R.id.btnConfirm); if (ListUtil.isNotEmpty(userList)) { btnConfirm.setEnabled(true); } else { btnConfirm.setEnabled(false); } } public void executeTask() { if (btnRecentContact != null && btnRecentContact.isEnabled()) { new UserQuickSelectorTask(selectorAdapter, relation).execute(); } else { new UserQuickSelectorRecentTask(selectorAdapter).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; } public UserQuickSelectorListAdapter getSelectorAdapter() { return selectorAdapter; } }