@Override
  public void loadAllContacts() { // called by beforetext changed.
    String number = mDialpad.getNumber();
    if (TextUtils.isEmpty(number)) { // enter first number, shold load contacts.
      log("loadAllContacts() loadDialpadItems...");
      final List<DialpadItem> items = PimEngine.getInstance(this).loadDialpadItems(false);

      mItemAdapter.setIsShowInFilterList(true);
      mItemAdapter.update(items, true);
    }
  }
  public void categorizeCallLog(int logType) {
    if (null != mItemAdapter) {
      final List<DialpadItem> logGroups = PimEngine.getInstance(this).loadDialpadItems(false);

      final int count = logGroups.size();
      if (count > 0) {
        final ArrayList<DialpadItem> newValues = new ArrayList<DialpadItem>(count);
        for (int i = 0; i < count; i++) {
          final DialpadItem item = logGroups.get(i);
          if ((DialpadView.CALLLOG_TYPE_ALL == logType || item.hasCallType(logType))
              && DialpadItem.CALLLOG_TYPE == item.getType()) {
            // add by zenghuaying fix bug #8908
            if (item.getContactId() == 0) {
              item.setName(null);
            }
            // add end
            newValues.add(item);
          }
        }
        mItemAdapter.setIsShowInFilterList(false); // add by zenghuaying
        mItemAdapter.setFilterCallType(logType);
        mItemAdapter.update(newValues, false);
        loge("categorizeCallLog  adapter update");
      }

      if (Calls.OUTGOING_TYPE == logType) {
        setLogsEmptyHint(getResources().getText(R.string.outgoing_logs_empty));
      } else if (Calls.INCOMING_TYPE == logType) {
        setLogsEmptyHint(getResources().getText(R.string.incoming_logs_empty));
      } else if (Calls.MISSED_TYPE == logType) {
        setLogsEmptyHint(getResources().getText(R.string.missed_logs_empty));
      } else {
        setLogsEmptyHint(getResources().getText(R.string.call_logs_empty));
      }
    }
  }