Java源码示例:android.telephony.PhoneNumberFormattingTextWatcher
示例1
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mDualPane = getResources().getBoolean(R.bool.use_dual_panes);
digitFormater = new PhoneNumberFormattingTextWatcher();
// Auto complete list in case of text
autoCompleteAdapter = new ContactsSearchAdapter(getActivity());
autoCompleteListItemListener = new OnAutoCompleteListItemClicked(autoCompleteAdapter);
if(isDigit == null) {
isDigit = !prefsWrapper.getPreferenceBooleanValue(SipConfigManager.START_WITH_TEXT_DIALER);
}
setHasOptionsMenu(true);
}
示例2
/**
* Builds the editor view.
*
* @param activity The activity on top of which the UI should be displayed.
* @param observerForTest Optional event observer for testing.
*/
public EditorView(Activity activity, PaymentRequestObserverForTest observerForTest) {
super(activity, R.style.FullscreenWhiteDialog);
mContext = activity;
mObserverForTest = observerForTest;
mHandler = new Handler();
mPhoneFormatterTask = new AsyncTask<Void, Void, PhoneNumberFormattingTextWatcher>() {
@Override
protected PhoneNumberFormattingTextWatcher doInBackground(Void... unused) {
return new PhoneNumberFormattingTextWatcher();
}
}.execute();
mEditorActionListener = new TextView.OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
if (actionId == EditorInfo.IME_ACTION_DONE) {
mDoneButton.performClick();
return true;
} else if (actionId == EditorInfo.IME_ACTION_NEXT) {
View next = v.focusSearch(View.FOCUS_FORWARD);
if (next != null && next instanceof AutoCompleteTextView) {
focusInputField(next);
return true;
}
}
return false;
}
};
}
示例3
/** Immediately returns the phone formatter or null if it has not initialized yet. */
private PhoneNumberFormattingTextWatcher getPhoneFormatter() {
try {
return mPhoneFormatterTask.get(0, TimeUnit.MILLISECONDS);
} catch (CancellationException | ExecutionException | InterruptedException
| TimeoutException e) {
return null;
}
}
示例4
private void init() {
if (isInEditMode()) {
return;
}
setInputType(InputType.TYPE_CLASS_PHONE);
InputFilter[] filters = { new LengthFilter(14) };
setFilters(filters);
addTextChangedListener(new PhoneNumberFormattingTextWatcher());
}
示例5
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = super.onCreateView(inflater, container, savedInstanceState);
firstNameField = (Version1EditText) view.findViewById(R.id.fragment_account_name_firstName);
lastNameField = (Version1EditText) view.findViewById(R.id.fragment_account_name_lastName);
mobileNumberField = (Version1EditText) view.findViewById(R.id.fragment_account_phone_number);
// including the "1 " and "-" marks that get added by the PhoneNumberFormattingTextWatcher
mobileNumberField.setFilters(new InputFilter[]{new InputFilter.LengthFilter(14)});
mobileNumberField.addTextChangedListener(new PhoneNumberFormattingTextWatcher());
cameraBtn = (ImageView) view.findViewById(R.id.fragment_account_camera);
FrameLayout photoLayout = (FrameLayout) view.findViewById(R.id.photo_layout);
// Initialize the circular image with a person avatar illustration
ImageManager.with(getActivity())
.putDrawableResource(R.drawable.image_user)
.fit()
.into(cameraBtn)
.execute();
photoLayout.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
PersonModel personModel = SessionController.instance().getPerson();
if (personModel == null) {
return;
}
ImageManager.with(getActivity())
.putUserGeneratedPersonImage(personModel.getId())
.fromCameraOrGallery()
.withTransform(new CropCircleTransformation())
.useAsWallpaper(AlphaPreset.LIGHTEN)
.into(cameraBtn)
.execute();
}
});
DeviceContact contact = getController().getDeviceContact();
if(contact != null) {
firstNameField.setText(contact.getFirstName());
lastNameField.setText(contact.getLastName());
}
return view;
}
示例6
public EditorTextField(Context context, final EditorFieldModel fieldModel,
OnEditorActionListener actionlistener, PhoneNumberFormattingTextWatcher formatter,
PaymentRequestObserverForTest observer) {
super(context);
assert fieldModel.getInputTypeHint() != EditorFieldModel.INPUT_TYPE_HINT_DROPDOWN;
mEditorFieldModel = fieldModel;
mObserverForTest = observer;
// Build up the label. Required fields are indicated by appending a '*'.
CharSequence label = fieldModel.getLabel();
if (fieldModel.isRequired()) label = label + REQUIRED_FIELD_INDICATOR;
setHint(label);
// The EditText becomes a child of this class. The TextInputLayout manages how it looks.
LayoutInflater.from(context).inflate(R.layout.payments_request_editor_textview, this, true);
mInput = (AutoCompleteTextView) findViewById(R.id.text_view);
mInput.setText(fieldModel.getValue());
mInput.setOnEditorActionListener(actionlistener);
// Validate the field when the user de-focuses it.
mInput.setOnFocusChangeListener(new OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
if (hasFocus) {
mHasFocusedAtLeastOnce = true;
} else if (mHasFocusedAtLeastOnce) {
// Show no errors until the user has already tried to edit the field once.
updateDisplayedError(!mEditorFieldModel.isValid());
}
}
});
// Update the model as the user edits the field.
mInput.addTextChangedListener(new TextWatcher() {
@Override
public void afterTextChanged(Editable s) {
fieldModel.setValue(s.toString());
updateDisplayedError(false);
if (mObserverForTest != null) {
mObserverForTest.onPaymentRequestEditorTextUpdate();
}
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {}
});
// Display any autofill suggestions.
if (fieldModel.getSuggestions() != null && !fieldModel.getSuggestions().isEmpty()) {
mInput.setAdapter(new ArrayAdapter<CharSequence>(getContext(),
android.R.layout.simple_spinner_dropdown_item,
fieldModel.getSuggestions()));
mInput.setThreshold(0);
}
switch (fieldModel.getInputTypeHint()) {
case EditorFieldModel.INPUT_TYPE_HINT_PHONE:
mInput.setInputType(InputType.TYPE_CLASS_PHONE);
break;
case EditorFieldModel.INPUT_TYPE_HINT_EMAIL:
mInput.setInputType(InputType.TYPE_CLASS_TEXT
| InputType.TYPE_TEXT_VARIATION_EMAIL_ADDRESS);
break;
case EditorFieldModel.INPUT_TYPE_HINT_STREET_LINES:
// TODO(rouslan): Provide a hint to the keyboard that the street lines are
// likely to have numbers.
mInput.setInputType(InputType.TYPE_CLASS_TEXT
| InputType.TYPE_TEXT_FLAG_CAP_WORDS
| InputType.TYPE_TEXT_FLAG_MULTI_LINE
| InputType.TYPE_TEXT_VARIATION_POSTAL_ADDRESS);
break;
case EditorFieldModel.INPUT_TYPE_HINT_PERSON_NAME:
mInput.setInputType(InputType.TYPE_CLASS_TEXT
| InputType.TYPE_TEXT_FLAG_CAP_WORDS
| InputType.TYPE_TEXT_VARIATION_PERSON_NAME);
break;
case EditorFieldModel.INPUT_TYPE_HINT_REGION:
mInput.setInputType(InputType.TYPE_CLASS_TEXT
| InputType.TYPE_TEXT_FLAG_CAP_CHARACTERS
| InputType.TYPE_TEXT_VARIATION_POSTAL_ADDRESS);
break;
case EditorFieldModel.INPUT_TYPE_HINT_ALPHA_NUMERIC:
// Intentionally fall through.
// TODO(rouslan): Provide a hint to the keyboard that postal code and sorting
// code are likely to have numbers.
default:
mInput.setInputType(InputType.TYPE_CLASS_TEXT
| InputType.TYPE_TEXT_FLAG_CAP_WORDS
| InputType.TYPE_TEXT_VARIATION_POSTAL_ADDRESS);
break;
}
}
示例7
/**
* Builds the editor view.
*
* @param activity The activity on top of which the UI should be displayed.
* @param observerForTest Optional event observer for testing.
*/
public EditorView(Activity activity, PaymentRequestObserverForTest observerForTest) {
super(activity, R.style.FullscreenWhite);
mContext = activity;
mObserverForTest = observerForTest;
mHandler = new Handler();
mEditorActionListener = new TextView.OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
if (actionId == EditorInfo.IME_ACTION_DONE) {
mDoneButton.performClick();
return true;
} else if (actionId == EditorInfo.IME_ACTION_NEXT) {
View next = v.focusSearch(View.FOCUS_FORWARD);
if (next != null) {
next.requestFocus();
return true;
}
}
return false;
}
};
mHalfRowMargin = activity.getResources().getDimensionPixelSize(
R.dimen.payments_section_large_spacing);
mFieldViews = new ArrayList<>();
mEditableTextFields = new ArrayList<>();
mDropdownFields = new ArrayList<>();
final Pattern cardNumberPattern = Pattern.compile("^[\\d- ]*$");
mCardNumberInputFilter = new InputFilter() {
@Override
public CharSequence filter(
CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {
// Accept deletions.
if (start == end) return null;
// Accept digits, "-", and spaces.
if (cardNumberPattern.matcher(source.subSequence(start, end)).matches()) {
return null;
}
// Reject everything else.
return "";
}
};
mCardNumberFormatter = new CreditCardNumberFormattingTextWatcher();
new AsyncTask<Void, Void, PhoneNumberFormattingTextWatcher>() {
@Override
protected PhoneNumberFormattingTextWatcher doInBackground(Void... unused) {
return new PhoneNumberFormattingTextWatcher();
}
@Override
protected void onPostExecute(PhoneNumberFormattingTextWatcher result) {
mPhoneFormatter = result;
if (mPhoneInput != null) {
mPhoneInput.addTextChangedListener(mPhoneFormatter);
}
}
}.execute();
}