@Override public void clearAllFields() { if (mFieldEditTexts != null) { for (EditText fieldEditText : mFieldEditTexts) { // Update UI (which will trigger a state change through the {@link TextWatcher}) fieldEditText.setText(""); } } if (localGroupsSelectors != null) { for (LocalGroupsSelector selector : localGroupsSelectors) { selector.clear(); } } }
@Override public boolean isEmpty() { for (int i = 0; i < mFields.getChildCount(); i++) { View editor = mFields.getChildAt(i); if (editor instanceof EditText) { EditText editText = (EditText) editor; if (!TextUtils.isEmpty(editText.getText())) { return false; } } else if (editor instanceof LocalGroupsSelector) { LocalGroupsSelector selector = (LocalGroupsSelector) editor; if (selector.getGroupId() > -1) { return false; } } } return true; }
@Override public void setValues( DataKind kind, ValuesDelta entry, EntityDelta state, boolean readOnly, ViewIdGenerator vig) { super.setValues(kind, entry, state, readOnly, vig); // Remove edit texts that we currently have if (mFieldEditTexts != null) { for (EditText fieldEditText : mFieldEditTexts) { mFields.removeView(fieldEditText); } mFieldEditTexts = null; } if (localGroupsSelectors != null) { for (View view : localGroupsSelectors) { mFields.removeView(view); } localGroupsSelectors = null; } boolean hidePossible = false; int fieldCount = kind.fieldList.size(); if (LocalGroup.CONTENT_ITEM_TYPE.equals(kind.mimeType)) localGroupsSelectors = new LocalGroupsSelector[fieldCount]; else mFieldEditTexts = new EditText[fieldCount]; for (int index = 0; index < fieldCount; index++) { final EditField field = kind.fieldList.get(index); if (LocalGroup.CONTENT_ITEM_TYPE.equals(kind.mimeType)) { final LocalGroupsSelector localGroupsSelector = new LocalGroupsSelector(mContext, entry, field.column); localGroupsSelector.setOnGroupSelectListener( new OnGroupSelectListener() { @Override public void onGroupChanged() { setDeleteButtonVisible(localGroupsSelector.getGroupId() > -1); } }); // Show the delete button if we have a non-null value setDeleteButtonVisible(localGroupsSelector.getGroupId() > -1); localGroupsSelectors[index] = localGroupsSelector; mFields.addView(localGroupsSelector); } else { final EditText fieldView = new EditText(mContext); /*Begin: Modified by bxinchun for change the layout 2012/07/24*/ /*Begin: Modified by xiepengfei for change the layout 2012/05/02*/ LinearLayout.LayoutParams params = new LinearLayout.LayoutParams( LayoutParams.MATCH_PARENT, field.isMultiLine() ? LayoutParams.WRAP_CONTENT : mMinFieldHeight); params.bottomMargin = 10; fieldView.setLayoutParams(params); /*End: Modified by xiepengfei for change the layout 2012/05/02*/ /*End: Modified by bxinchun for change the layout 2012/07/24*/ // Set either a minimum line requirement or a minimum height (because {@link TextView} // only takes one or the other at a single time). if (field.minLines != 0) { fieldView.setMinLines(field.minLines); } else { fieldView.setMinHeight(mMinFieldHeight); } fieldView.setTextAppearance(getContext(), android.R.style.TextAppearance_Medium); fieldView.setGravity(Gravity.TOP); /*Begin: Modified by xiepengfei for change the layout 2012/05/02*/ fieldView.setBackgroundResource(R.drawable.edit_editor_background); fieldView.setTextSize(20); fieldView.setTextColor(Color.BLACK); /*End: Modified by xiepengfei for change the layout 2012/05/02*/ mFieldEditTexts[index] = fieldView; fieldView.setId(vig.getId(state, kind, entry, index)); if (field.titleRes > 0) { fieldView.setHint(field.titleRes); } int inputType = field.inputType; fieldView.setInputType(inputType); if (inputType == InputType.TYPE_CLASS_PHONE) { PhoneNumberFormatter.setPhoneNumberFormattingTextWatcher(mContext, fieldView); } // Show the "next" button in IME to navigate between text fields // TODO: Still need to properly navigate to/from sections without text fields, // See Bug: 5713510 fieldView.setImeOptions(EditorInfo.IME_ACTION_NEXT); // Read current value from state final String column = field.column; final String value = entry.getAsString(column); fieldView.setText(value); // Show the delete button if we have a non-null value setDeleteButtonVisible(value != null); // Prepare listener for writing changes fieldView.addTextChangedListener( new TextWatcher() { @Override public void afterTextChanged(Editable s) { // Trigger event for newly changed value onFieldChanged(column, s.toString()); } @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) {} @Override public void onTextChanged(CharSequence s, int start, int before, int count) {} }); fieldView.setEnabled(isEnabled() && !readOnly); if (field.shortForm) { hidePossible = true; mHasShortAndLongForms = true; fieldView.setVisibility(mHideOptional ? View.VISIBLE : View.GONE); } else if (field.longForm) { hidePossible = true; mHasShortAndLongForms = true; fieldView.setVisibility(mHideOptional ? View.GONE : View.VISIBLE); } else { // Hide field when empty and optional value final boolean couldHide = (!ContactsUtils.isGraphic(value) && field.optional); final boolean willHide = (mHideOptional && couldHide); fieldView.setVisibility(willHide ? View.GONE : View.VISIBLE); hidePossible = hidePossible || couldHide; } mFields.addView(fieldView); } } // When hiding fields, place expandable setupExpansionView(hidePossible, mHideOptional); mExpansionView.setEnabled(!readOnly && isEnabled()); }