/** Called when the activity is first created. */
  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main_swipe);
    initView();
    for (int i = 0; i < 20; i++) {
      HashMap<String, Object> itemData = new HashMap<String, Object>();
      itemData.put("ManName", "阿根廷球迷" + i);
      itemData.put("LastTime", "最近发言:十分钟以前");
      data.add(itemData);
    }

    baseAdapter =
        new BaseAdapter() {
          @Override
          public int getCount() {
            return data.size();
          }

          @Override
          public Object getItem(int position) {
            return data.get(position);
          }

          @Override
          public long getItemId(int position) {
            return position;
          }

          @Override
          public View getView(int position, View convertView, ViewGroup parent) {
            if (convertView == null) {
              LayoutInflater layoutInflater = getLayoutInflater();
              convertView =
                  layoutInflater.inflate(R.layout.manager_group_list_item_parent, parent, false);
            }
            Map<String, Object> itemData = (Map<String, Object>) getItem(position);
            ImageView ManImg = (ImageView) convertView.findViewById(R.id.ManImg);
            TextView ManName = (TextView) convertView.findViewById(R.id.ManName);
            TextView LastTime = (TextView) convertView.findViewById(R.id.LastTime);
            ManName.setText(itemData.get("ManName").toString());
            LastTime.setText(itemData.get("LastTime").toString());
            return convertView;
          }
        };
    GroupManList.setAdapter(baseAdapter);
    final ListViewSwipeGesture touchListener =
        new ListViewSwipeGesture(GroupManList, swipeListener, this);
    touchListener.SwipeType = ListViewSwipeGesture.Double; // 设置两个选项列表项的背景
    GroupManList.setOnTouchListener(touchListener);
  }
  @Override
  public void onActivityCreated(Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);
    if (savedInstanceState != null && savedInstanceState.getBoolean("isConflict", false)) return;
    inputMethodManager =
        (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
    errorItem = (RelativeLayout) getView().findViewById(R.id.rl_error_item);
    errorText = (TextView) errorItem.findViewById(R.id.tv_connect_errormsg);

    conversationList.addAll(loadConversationsWithRecentChat());
    listView = (ListView) getView().findViewById(R.id.list);
    back = (ImageView) getView().findViewById(R.id.back);
    back.setOnClickListener(this);
    adapter = new ChatAllHistoryAdapter(getActivity(), 1, conversationList);
    // 设置adapter
    listView.setAdapter(adapter);

    final String st2 = getResources().getString(R.string.Cant_chat_with_yourself);
    listView.setOnItemClickListener(
        new OnItemClickListener() {

          @Override
          public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            EMConversation conversation = adapter.getItem(position);
            String username = conversation.getUserName();
            if (username.equals(PricesApplication.getInstance().getUserName()))
              Toast.makeText(getActivity(), st2, Toast.LENGTH_SHORT).show();
            else {
              // 进入聊天页面
              Intent intent = new Intent(getActivity(), ChatActivity.class);
              if (conversation.isGroup()) {
                if (conversation.getType() == EMConversationType.ChatRoom) {
                  // it is group chat
                  intent.putExtra("chatType", ChatActivity.CHATTYPE_CHATROOM);
                  intent.putExtra("groupId", username);
                } else {
                  // it is group chat
                  intent.putExtra("chatType", ChatActivity.CHATTYPE_GROUP);
                  intent.putExtra("groupId", username);
                }

              } else {
                // it is single chat
                intent.putExtra("userId", username);
              }
              startActivity(intent);
            }
          }
        });
    // 注册上下文菜单
    registerForContextMenu(listView);

    listView.setOnTouchListener(
        new OnTouchListener() {

          @Override
          public boolean onTouch(View v, MotionEvent event) {
            // 隐藏软键盘
            hideSoftKeyboard();
            return false;
          }
        });
    // 搜索框
    query = (EditText) getView().findViewById(R.id.query);
    String strSearch = getResources().getString(R.string.search);
    query.setHint(strSearch);
    // 搜索框中清除button
    clearSearch = (ImageButton) getView().findViewById(R.id.search_clear);
    query.addTextChangedListener(
        new TextWatcher() {
          public void onTextChanged(CharSequence s, int start, int before, int count) {
            adapter.getFilter().filter(s);
            if (s.length() > 0) {
              clearSearch.setVisibility(View.VISIBLE);
            } else {
              clearSearch.setVisibility(View.INVISIBLE);
            }
          }

          public void beforeTextChanged(CharSequence s, int start, int count, int after) {}

          public void afterTextChanged(Editable s) {}
        });
    clearSearch.setOnClickListener(
        new OnClickListener() {
          @Override
          public void onClick(View v) {
            query.getText().clear();
            hideSoftKeyboard();
          }
        });
  }
  /**
   * Initializing the QuickScroll, this function must be called.
   *
   * <p>
   *
   * @param type the QuickScroll type. Available inputs: <b>QuickScroll.TYPE_POPUP</b> or
   *     <b>QuickScroll.TYPE_INDICATOR</b>
   * @param list the ListView
   * @param scrollable the adapter, must implement Scrollable interface
   */
  public void init(
      final int type, final ListView list, final Scrollable scrollable, final int style) {
    if (mInitialized) return;

    mType = type;
    mList = list;
    mScrollable = scrollable;
    mGroupPosition = -1;
    mFadeIn = new AlphaAnimation(.0f, 1.0f);
    mFadeIn.setFillAfter(true);
    mFadeOut = new AlphaAnimation(1.0f, .0f);
    mFadeOut.setFillAfter(true);
    mFadeOut.setAnimationListener(
        new AnimationListener() {

          public void onAnimationStart(Animation animation) {}

          public void onAnimationRepeat(Animation animation) {}

          public void onAnimationEnd(Animation animation) {
            mScrolling = false;
          }
        });
    mScrolling = false;

    final float density = getResources().getDisplayMetrics().density;

    mList.setOnTouchListener(
        new OnTouchListener() {

          public boolean onTouch(View v, MotionEvent event) {
            if (mScrolling
                && (event.getAction() == MotionEvent.ACTION_MOVE
                    || event.getAction() == MotionEvent.ACTION_DOWN)) {
              return true;
            }
            return false;
          }
        });

    final RelativeLayout.LayoutParams containerparams =
        new RelativeLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
    final RelativeLayout container = new RelativeLayout(getContext());
    container.setBackgroundColor(Color.TRANSPARENT);
    containerparams.addRule(RelativeLayout.ALIGN_TOP, getId());
    containerparams.addRule(RelativeLayout.ALIGN_BOTTOM, getId());
    container.setLayoutParams(containerparams);

    if (mType == TYPE_POPUP || mType == TYPE_POPUP_WITH_HANDLE) {

      mScrollIndicatorText = new TextView(getContext());
      mScrollIndicatorText.setTextColor(Color.WHITE);
      mScrollIndicatorText.setVisibility(View.INVISIBLE);
      mScrollIndicatorText.setGravity(Gravity.CENTER);
      final RelativeLayout.LayoutParams popupparams =
          new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);

      popupparams.addRule(RelativeLayout.CENTER_IN_PARENT);
      mScrollIndicatorText.setLayoutParams(popupparams);

      setPopupColor(GREY_LIGHT, GREY_DARK, 1, Color.WHITE, 1);
      setTextPadding(mTextPadding, mTextPadding, mTextPadding, mTextPadding);

      container.addView(mScrollIndicatorText);
    } else if (mType == TYPE_INDICATOR || mType == TYPE_INDICATOR_WITH_HANDLE) {
      mScrollIndicator = createPin();
      mScrollIndicatorText = (TextView) mScrollIndicator.findViewById(ID_PIN_TEXT);

      (mScrollIndicator.findViewById(ID_PIN)).getLayoutParams().width = 25;

      container.addView(mScrollIndicator);
    }

    // setting scrollbar width
    getLayoutParams().width = (int) (30 * density);
    mScrollIndicatorText.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 32);

    // scrollbar setup
    if (style != STYLE_NONE) {
      final RelativeLayout layout = new RelativeLayout(getContext());
      final RelativeLayout.LayoutParams params =
          new RelativeLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
      params.addRule(RelativeLayout.ALIGN_LEFT, getId());
      params.addRule(RelativeLayout.ALIGN_TOP, getId());
      params.addRule(RelativeLayout.ALIGN_RIGHT, getId());
      params.addRule(RelativeLayout.ALIGN_BOTTOM, getId());
      layout.setLayoutParams(params);

      mScrollbar = new View(getContext());
      mScrollbar.setBackgroundColor(GREY_SCROLLBAR);
      final RelativeLayout.LayoutParams scrollbarparams =
          new RelativeLayout.LayoutParams(1, LayoutParams.MATCH_PARENT);
      scrollbarparams.addRule(RelativeLayout.CENTER_HORIZONTAL);
      scrollbarparams.topMargin = mScrollbarMargin;
      scrollbarparams.bottomMargin = mScrollbarMargin;
      mScrollbar.setLayoutParams(scrollbarparams);
      layout.addView(mScrollbar);
      ((ViewGroup) mList.getParent()).addView(layout);
      // creating the handlebar
      if (mType == TYPE_INDICATOR_WITH_HANDLE || mType == TYPE_POPUP_WITH_HANDLE) {
        mHandlebar = new View(getContext());
        setHandlebarColor(BLUE_LIGHT, BLUE_LIGHT, BLUE_LIGHT_SEMITRANSPARENT);
        final RelativeLayout.LayoutParams handleparams =
            new RelativeLayout.LayoutParams((int) (12 * density), (int) (36 * density));
        mHandlebar.setLayoutParams(handleparams);
        ((RelativeLayout.LayoutParams) mHandlebar.getLayoutParams())
            .addRule(RelativeLayout.CENTER_HORIZONTAL);
        layout.addView(mHandlebar);

        mList.setOnScrollListener(
            new OnScrollListener() {

              public void onScrollStateChanged(AbsListView view, int scrollState) {}

              @SuppressLint("NewApi")
              public void onScroll(
                  AbsListView view,
                  int firstVisibleItem,
                  int visibleItemCount,
                  int totalItemCount) {
                if (!mScrolling && totalItemCount - visibleItemCount > 0) {
                  moveHandlebar(
                      getHeight() * firstVisibleItem / (totalItemCount - visibleItemCount));
                }
              }
            });
      }
    }

    mInitialized = true;

    ((ViewGroup) mList.getParent()).addView(container);
  }