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