private void viewGroupChatInfo() {

    NmsGroupChatContact groupContact = (NmsGroupChatContact) contact;

    if (groupContact.isAlive() && isActive) {
      finish();
      Intent i = new Intent(this, NmsGroupChatInfoActivity.class);
      i.putExtra("groupId", groupContact.getId());
      startActivity(i);
    }
  }
  public void selectGroupMembers(String[] contactId) {
    List<String> members = new ArrayList<String>();
    NmsGroupChatContact groupContact = (NmsGroupChatContact) contact;
    short groupId = groupContact.getId();
    if (contactId != null) {
      NmsLog.trace(Tag, "Add group members to group chat, the groupId:" + groupId);
      if (groupId > 0) {
        for (String id : contactId) {
          short engineContactId = Short.valueOf(id);
          NmsContact contact = NmsIpMessageApiNative.nmsGetContactInfoViaEngineId(engineContactId);
          if (contact != null) {
            members.add(contact.getNumber());
          } else {
            NmsLog.error(Tag, "can't get contact info. engineContactId:" + id);
          }
        }

        boolean ret = NmsIpMessageApiNative.nmsAddMembersToGroup(groupId, members);
        if (ret) {
          for (String id : contactId) {
            short engineContactId = Short.valueOf(id);
            NmsContact contact =
                NmsIpMessageApiNative.nmsGetContactInfoViaEngineId(engineContactId);
            if (contact != null) {
              memberList.add(contact);
            } else {
              NmsLog.error(Tag, "can't get contact info. engineContactId:" + id);
            }
          }
          Toast.makeText(mContext, R.string.STR_NMS_ADD_GROUP_MEMBER_SUCCESS, Toast.LENGTH_SHORT)
              .show();
        } else {
          Toast.makeText(mContext, R.string.STR_NMS_ADD_GROUP_MEMBER_FAILED, Toast.LENGTH_SHORT)
              .show();
        }
      } else {
        for (String id : contactId) {
          short engineContactId = Short.valueOf(id);
          NmsContact contact = NmsIpMessageApiNative.nmsGetContactInfoViaEngineId(engineContactId);
          if (contact != null) {
            memberList.add(contact);
          } else {
            NmsLog.error(Tag, "can't get contact info. engineContactId:" + id);
          }
        }
      }
    }

    // if (GroupChatMode.VIEW == groupChatMode) {
    // buildViewGroupMembers();
    // }
  }
  public short getEngineContactIdViaNumber(String number) {
    String formatNumber = null;

    if (TextUtils.isEmpty(number)) {
      NmsLog.error(TAG, "number2engineId. number is empty!");
      return -1;
    }
    if (number.contains(",")) { // for broadcast
      formatNumber = number;
    } else {
      if (number.length() > NmsCustomUIConfig.PHONENUM_MAX_LENGTH
          && !NmsGroupChatContact.isGroupChatContactNumber(number)) {
        NmsLog.error(TAG, "number2engineId. number is too long!");
        return -1;
      }

      if (!NmsCommonUtils.isPhoneNumberValid(number)) {
        NmsLog.error(TAG, "number2engineId. number(" + number + ") is invalid!");
        return -1;
      }

      formatNumber = NmsCommonUtils.nmsGetStandardPhoneNum(number);
      if (TextUtils.isEmpty(formatNumber)) {
        NmsLog.error(TAG, "number2engineId. formatNumber is invalid!");
      }
    }

    return (short) engineadapter.get().nmsUIGetContactId(formatNumber);
  }
  public Bitmap getGroupChatContactAvatar(NmsGroupChatContact groupChatContact) {
    if (groupChatContact == null) {
      NmsLog.error(TAG, "groupChatContact is invalid!");
      return null;
    }

    ArrayList<Bitmap> bitmapList = new ArrayList<Bitmap>();

    short[] memberIds = groupChatContact.getMemberIds();

    if (memberIds != null) {
      for (int index = 0; index < memberIds.length && bitmapList.size() < 3; ++index) {
        Bitmap avatar = getAvatarViaEngineContactId(memberIds[index]);
        if (avatar != null) {
          bitmapList.add(avatar);
        }
      }
    } else {
      NmsLog.warn(TAG, "memberIds is null.");
    }

    if (bitmapList.size() < 3 && groupChatContact.isAlive()) {
      // myself bitmap
      Bitmap avatar = getMyselfAvatarViaSimId(groupChatContact.getSimId());
      if (avatar == null) {
        avatar = mDefaultBitmap;
      }
      bitmapList.add(avatar);
    }

    bitmapList =
        fillBitmapList(groupChatContact.getMemberCount(), bitmapList, mDefaultBitmap, mBlankBitmap);

    Bitmap result = null;
    if (bitmapList != null && bitmapList.size() == 3) {
      result = NmsCommonUtils.stitchBitmap(bitmapList.get(0), bitmapList.get(1), bitmapList.get(2));
    }

    return result;
  }
  private void initQuickGroupCard() {
    setContentView(R.layout.quick_group_contact);

    NmsGroupChatContact groupContact = (NmsGroupChatContact) contact;
    short[] members = groupContact.getMemberIds();
    buildGroupMembers(members, groupContact.isAlive());

    TextView tvName = (TextView) this.findViewById(R.id.tv_name);
    tvName.setText(groupContact.getName());

    TextView tvCount = (TextView) this.findViewById(R.id.tv_count);
    tvCount.setText(String.valueOf(groupContact.getMemberCount()));

    Button btnInvite = (Button) this.findViewById(R.id.btn_invite);
    btnInvite.setOnClickListener(
        new OnClickListener() {

          @Override
          public void onClick(View v) {
            // TODO Auto-generated method stub
            addGroupChatMembers();
          }
        });
    Button btnChat = (Button) this.findViewById(R.id.btn_chat);
    btnChat.setOnClickListener(
        new OnClickListener() {

          @Override
          public void onClick(View v) {
            // TODO Auto-generated method stub
            chat();
          }
        });

    Button btnWelcome = (Button) this.findViewById(R.id.btn_welcome);
    btnWelcome.setOnClickListener(
        new OnClickListener() {

          @Override
          public void onClick(View v) {
            // TODO Auto-generated method stub
            chat();
          }
        });
    LinearLayout llWelcome = (LinearLayout) this.findViewById(R.id.ll_group);

    if (groupContact.isAlive() && isActive) {
      btnWelcome.setVisibility(View.GONE);
    } else {
      llWelcome.setVisibility(View.GONE);
      btnWelcome.setVisibility(View.VISIBLE);
    }

    GridView gv = (GridView) this.findViewById(R.id.gv_group_card);

    GroupListAdapter adapter = new GroupListAdapter(this);
    gv.setAdapter(adapter);

    gv.setOnItemClickListener(
        new OnItemClickListener() {

          @Override
          public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
            // TODO Auto-generated method stub
            viewGroupChatInfo();
          }
        });
  }