private void updateGroupCheckStateForNumber(PhoneNumber phoneNumber, Group excludedGroup) {
    ArrayList<Group> phoneGroups = phoneNumber.getGroups();
    if (phoneGroups == null) {
      return;
    }

    if (phoneNumber.isChecked() && phoneNumber.isDefault()) {
      for (Group group : phoneGroups) {
        if (group == excludedGroup || group.isLocal()) {
          continue;
        }
        boolean checked = true;
        for (PhoneNumber number : group.getPhoneNumbers()) {
          if (number.isDefault() && !number.isChecked()) {
            checked = false;
            break;
          }
        }
        group.setChecked(checked);
      }
    } else if (!phoneNumber.isChecked()) {
      for (Group group : phoneGroups) {
        if (group != excludedGroup) {
          group.setChecked(false);
        }
      }
    }
  }
  private void checkGroup(Group group, boolean check) {
    group.setChecked(check);
    if (group.isLocal()) {
      if (group.isChecked()) {
        mLocalGroups.add(group);
      } else {
        mLocalGroups.remove(group);
      }
      return;
    }
    ArrayList<PhoneNumber> phoneNumbers = group.getPhoneNumbers();

    if (phoneNumbers != null) {
      for (PhoneNumber phoneNumber : phoneNumbers) {
        if (phoneNumber.isDefault()) {
          selectPhoneNumber(phoneNumber, check);
          updateGroupCheckStateForNumber(phoneNumber, group);
        }
      }
    }
  }