RecipientsAdapter.java revision afab47f1ea6db50df7f045131fed5dba9cead6b0
172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project/* 272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * Copyright (C) 2008 Esmertec AG. 372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * Copyright (C) 2008 The Android Open Source Project 472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * 572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * you may not use this file except in compliance with the License. 772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * You may obtain a copy of the License at 872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * 972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 1072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * 1172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * Unless required by applicable law or agreed to in writing, software 1272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 1372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * See the License for the specific language governing permissions and 1572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * limitations under the License. 1672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project */ 1772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 1872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectpackage com.android.mms.ui; 1972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 20afab47f1ea6db50df7f045131fed5dba9cead6b0Dmitri Plotnikovimport com.android.internal.database.ArrayListCursor; 2172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport com.android.mms.R; 2220b79e068c8aebff46f24fd3803cf7697df4eac4Ficus Kirkpatrickimport com.android.mms.data.Contact; 2372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 2472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport android.content.ContentResolver; 2572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport android.content.Context; 2672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport android.database.Cursor; 2772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport android.database.MergeCursor; 28afab47f1ea6db50df7f045131fed5dba9cead6b0Dmitri Plotnikovimport android.net.Uri; 29afab47f1ea6db50df7f045131fed5dba9cead6b0Dmitri Plotnikovimport android.provider.ContactsContract.Contacts; 30afab47f1ea6db50df7f045131fed5dba9cead6b0Dmitri Plotnikovimport android.provider.ContactsContract.Data; 31afab47f1ea6db50df7f045131fed5dba9cead6b0Dmitri Plotnikovimport android.provider.ContactsContract.RawContacts; 32afab47f1ea6db50df7f045131fed5dba9cead6b0Dmitri Plotnikovimport android.provider.ContactsContract.CommonDataKinds.Phone; 3372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport android.telephony.PhoneNumberUtils; 3472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport android.text.Annotation; 3572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport android.text.Spannable; 3672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport android.text.SpannableString; 3772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport android.text.TextUtils; 3872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport android.view.View; 3972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport android.widget.ResourceCursorAdapter; 4072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport android.widget.TextView; 4172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 4272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport java.util.ArrayList; 4372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 4472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project/** 4572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * This adapter is used to filter contacts on both name and number. 4672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project */ 4772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectpublic class RecipientsAdapter extends ResourceCursorAdapter { 4872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 49afab47f1ea6db50df7f045131fed5dba9cead6b0Dmitri Plotnikov public static final int CONTACT_ID_INDEX = 1; 50afab47f1ea6db50df7f045131fed5dba9cead6b0Dmitri Plotnikov public static final int TYPE_INDEX = 2; 51afab47f1ea6db50df7f045131fed5dba9cead6b0Dmitri Plotnikov public static final int NUMBER_INDEX = 3; 52afab47f1ea6db50df7f045131fed5dba9cead6b0Dmitri Plotnikov public static final int LABEL_INDEX = 4; 53afab47f1ea6db50df7f045131fed5dba9cead6b0Dmitri Plotnikov public static final int NAME_INDEX = 5; 5472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 5572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project private static final String[] PROJECTION_PHONE = { 56afab47f1ea6db50df7f045131fed5dba9cead6b0Dmitri Plotnikov Data._ID, // 0 57afab47f1ea6db50df7f045131fed5dba9cead6b0Dmitri Plotnikov RawContacts.CONTACT_ID, // 1 58afab47f1ea6db50df7f045131fed5dba9cead6b0Dmitri Plotnikov Phone.TYPE, // 2 59afab47f1ea6db50df7f045131fed5dba9cead6b0Dmitri Plotnikov Phone.NUMBER, // 3 60afab47f1ea6db50df7f045131fed5dba9cead6b0Dmitri Plotnikov Phone.LABEL, // 4 61afab47f1ea6db50df7f045131fed5dba9cead6b0Dmitri Plotnikov Contacts.DISPLAY_NAME, // 5 6272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project }; 6372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 64afab47f1ea6db50df7f045131fed5dba9cead6b0Dmitri Plotnikov private static final String SORT_ORDER = Contacts.TIMES_CONTACTED + " DESC," 65afab47f1ea6db50df7f045131fed5dba9cead6b0Dmitri Plotnikov + Contacts.DISPLAY_NAME + "," + Phone.TYPE; 6672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 6772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project private final Context mContext; 6872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project private final ContentResolver mContentResolver; 6972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 7072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project public RecipientsAdapter(Context context) { 7172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project super(context, R.layout.recipient_filter_item, null); 7272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mContext = context; 7372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mContentResolver = context.getContentResolver(); 7472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 7572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 7672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project @Override 7772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project public final CharSequence convertToString(Cursor cursor) { 7872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project String name = cursor.getString(RecipientsAdapter.NAME_INDEX); 7972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project int type = cursor.getInt(RecipientsAdapter.TYPE_INDEX); 8072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project String number = cursor.getString(RecipientsAdapter.NUMBER_INDEX).trim(); 8172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 8272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project String label = cursor.getString(RecipientsAdapter.LABEL_INDEX); 83afab47f1ea6db50df7f045131fed5dba9cead6b0Dmitri Plotnikov CharSequence displayLabel = Phone.getDisplayLabel(mContext, type, label); 8472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 8572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project if (number.length() == 0) { 8672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project return number; 8772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 8872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 8972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project if (name == null) { 9072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project name = ""; 9172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 92afab47f1ea6db50df7f045131fed5dba9cead6b0Dmitri Plotnikov 9320b79e068c8aebff46f24fd3803cf7697df4eac4Ficus Kirkpatrick String nameAndNumber = Contact.formatNameAndNumber(name, number); 9472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 9572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project SpannableString out = new SpannableString(nameAndNumber); 9672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project int len = out.length(); 9772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 9872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project if (!TextUtils.isEmpty(name)) { 9972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project out.setSpan(new Annotation("name", name), 0, len, 10072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); 10172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } else { 10272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project out.setSpan(new Annotation("name", number), 0, len, 10372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); 10472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 10572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 106afab47f1ea6db50df7f045131fed5dba9cead6b0Dmitri Plotnikov String person_id = cursor.getString(RecipientsAdapter.CONTACT_ID_INDEX); 10772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project out.setSpan(new Annotation("person_id", person_id), 0, len, 10872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); 10972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project out.setSpan(new Annotation("label", displayLabel.toString()), 0, len, 11072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); 11172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project out.setSpan(new Annotation("number", number), 0, len, 11272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); 11372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 11472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project return out; 11572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 11672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 11772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project @Override 11872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project public final void bindView(View view, Context context, Cursor cursor) { 11972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project TextView name = (TextView) view.findViewById(R.id.name); 12072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project name.setText(cursor.getString(NAME_INDEX)); 12172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 12272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project TextView label = (TextView) view.findViewById(R.id.label); 12372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project int type = cursor.getInt(TYPE_INDEX); 124afab47f1ea6db50df7f045131fed5dba9cead6b0Dmitri Plotnikov label.setText(Phone.getDisplayLabel(mContext, type, cursor.getString(LABEL_INDEX))); 12572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 12672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project TextView number = (TextView) view.findViewById(R.id.number); 12772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project number.setText("(" + cursor.getString(NUMBER_INDEX) + ")"); 12872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 12972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 13072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project @Override 13172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project public Cursor runQueryOnBackgroundThread(CharSequence constraint) { 13272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project String phone = ""; 13372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project String cons = null; 13472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 13572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project if (constraint != null) { 13672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project cons = constraint.toString(); 13772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 13872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project if (usefulAsDigits(cons)) { 13972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project phone = PhoneNumberUtils.convertKeypadLettersToDigits(cons); 14072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project if (phone.equals(cons)) { 14172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project phone = ""; 14272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } else { 14372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project phone = phone.trim(); 14472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 14572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 14672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 14772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 148afab47f1ea6db50df7f045131fed5dba9cead6b0Dmitri Plotnikov Uri uri = Uri.withAppendedPath(Phone.CONTENT_FILTER_URI, Uri.encode(cons)); 149afab47f1ea6db50df7f045131fed5dba9cead6b0Dmitri Plotnikov Cursor phoneCursor = 150afab47f1ea6db50df7f045131fed5dba9cead6b0Dmitri Plotnikov mContentResolver.query(uri, PROJECTION_PHONE, Phone.TYPE + "=" + Phone.TYPE_MOBILE, 151afab47f1ea6db50df7f045131fed5dba9cead6b0Dmitri Plotnikov null, SORT_ORDER); 15272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 15372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project if (phone.length() > 0) { 15472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project ArrayList result = new ArrayList(); 15572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project result.add(Integer.valueOf(-1)); // ID 15672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project result.add(Long.valueOf(-1)); // PERSON_ID 157afab47f1ea6db50df7f045131fed5dba9cead6b0Dmitri Plotnikov result.add(Integer.valueOf(Phone.TYPE_CUSTOM)); // TYPE 15872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project result.add(phone); // NUMBER 15972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 16072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project /* 161afab47f1ea6db50df7f045131fed5dba9cead6b0Dmitri Plotnikov * The "\u00A0" keeps Phone.getDisplayLabel() from deciding 16272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * to display the default label ("Home") next to the transformation 16372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * of the letters into numbers. 16472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project */ 16572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project result.add("\u00A0"); // LABEL 16672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project result.add(cons); // NAME 16772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 16872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project ArrayList<ArrayList> wrap = new ArrayList<ArrayList>(); 16972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project wrap.add(result); 17072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 17172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project ArrayListCursor translated = new ArrayListCursor(PROJECTION_PHONE, wrap); 17272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 17372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project return new MergeCursor(new Cursor[] { translated, phoneCursor }); 17472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } else { 17572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project return phoneCursor; 17672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 17772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 17872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 17972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project /** 18072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * Returns true if all the characters are meaningful as digits 18172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * in a phone number -- letters, digits, and a few punctuation marks. 18272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project */ 18372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project private boolean usefulAsDigits(CharSequence cons) { 18472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project int len = cons.length(); 18572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 18672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project for (int i = 0; i < len; i++) { 18772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project char c = cons.charAt(i); 18872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 189afab47f1ea6db50df7f045131fed5dba9cead6b0Dmitri Plotnikov if ((c >= '0') && (c <= '9')) { 19072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project continue; 19172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 192afab47f1ea6db50df7f045131fed5dba9cead6b0Dmitri Plotnikov if ((c == ' ') || (c == '-') || (c == '(') || (c == ')') || (c == '.') || (c == '+') 193afab47f1ea6db50df7f045131fed5dba9cead6b0Dmitri Plotnikov || (c == '#') || (c == '*')) { 19472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project continue; 19572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 196afab47f1ea6db50df7f045131fed5dba9cead6b0Dmitri Plotnikov if ((c >= 'A') && (c <= 'Z')) { 19772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project continue; 19872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 199afab47f1ea6db50df7f045131fed5dba9cead6b0Dmitri Plotnikov if ((c >= 'a') && (c <= 'z')) { 20072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project continue; 20172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 20272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 20372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project return false; 20472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 20572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 20672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project return true; 20772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 20872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project} 209