Home | History | Annotate | Download | only in common
      1 /*
      2  * Copyright (C) 2009 The Android Open Source Project
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License");
      5  * you may not use this file except in compliance with the License.
      6  * You may obtain a copy of the License at
      7  *
      8  *      http://www.apache.org/licenses/LICENSE-2.0
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS,
     12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13  * See the License for the specific language governing permissions and
     14  * limitations under the License.
     15  */
     16 
     17 package com.android.contacts.common;
     18 
     19 import android.content.Context;
     20 import android.content.Intent;
     21 import android.database.Cursor;
     22 import android.provider.ContactsContract.CommonDataKinds.Im;
     23 import android.provider.ContactsContract.DisplayPhoto;
     24 import android.telephony.PhoneNumberUtils;
     25 import android.text.TextUtils;
     26 
     27 import com.android.contacts.common.model.account.AccountWithDataSet;
     28 import com.android.contacts.common.test.NeededForTesting;
     29 import com.android.contacts.common.model.AccountTypeManager;
     30 
     31 import java.util.List;
     32 
     33 public class ContactsUtils {
     34     private static final String TAG = "ContactsUtils";
     35 
     36     private static int sThumbnailSize = -1;
     37 
     38     // TODO find a proper place for the canonical version of these
     39     public interface ProviderNames {
     40         String YAHOO = "Yahoo";
     41         String GTALK = "GTalk";
     42         String MSN = "MSN";
     43         String ICQ = "ICQ";
     44         String AIM = "AIM";
     45         String XMPP = "XMPP";
     46         String JABBER = "JABBER";
     47         String SKYPE = "SKYPE";
     48         String QQ = "QQ";
     49     }
     50 
     51     /**
     52      * This looks up the provider name defined in
     53      * ProviderNames from the predefined IM protocol id.
     54      * This is used for interacting with the IM application.
     55      *
     56      * @param protocol the protocol ID
     57      * @return the provider name the IM app uses for the given protocol, or null if no
     58      * provider is defined for the given protocol
     59      * @hide
     60      */
     61     public static String lookupProviderNameFromId(int protocol) {
     62         switch (protocol) {
     63             case Im.PROTOCOL_GOOGLE_TALK:
     64                 return ProviderNames.GTALK;
     65             case Im.PROTOCOL_AIM:
     66                 return ProviderNames.AIM;
     67             case Im.PROTOCOL_MSN:
     68                 return ProviderNames.MSN;
     69             case Im.PROTOCOL_YAHOO:
     70                 return ProviderNames.YAHOO;
     71             case Im.PROTOCOL_ICQ:
     72                 return ProviderNames.ICQ;
     73             case Im.PROTOCOL_JABBER:
     74                 return ProviderNames.JABBER;
     75             case Im.PROTOCOL_SKYPE:
     76                 return ProviderNames.SKYPE;
     77             case Im.PROTOCOL_QQ:
     78                 return ProviderNames.QQ;
     79         }
     80         return null;
     81     }
     82 
     83     /**
     84      * Test if the given {@link CharSequence} contains any graphic characters,
     85      * first checking {@link TextUtils#isEmpty(CharSequence)} to handle null.
     86      */
     87     public static boolean isGraphic(CharSequence str) {
     88         return !TextUtils.isEmpty(str) && TextUtils.isGraphic(str);
     89     }
     90 
     91     /**
     92      * Returns true if two objects are considered equal.  Two null references are equal here.
     93      */
     94     @NeededForTesting
     95     public static boolean areObjectsEqual(Object a, Object b) {
     96         return a == b || (a != null && a.equals(b));
     97     }
     98 
     99     /**
    100      * Returns true if two {@link Intent}s are both null, or have the same action.
    101      */
    102     public static final boolean areIntentActionEqual(Intent a, Intent b) {
    103         if (a == b) {
    104             return true;
    105         }
    106         if (a == null || b == null) {
    107             return false;
    108         }
    109         return TextUtils.equals(a.getAction(), b.getAction());
    110     }
    111 
    112     public static boolean areContactWritableAccountsAvailable(Context context) {
    113         final List<AccountWithDataSet> accounts =
    114                 AccountTypeManager.getInstance(context).getAccounts(true /* writeable */);
    115         return !accounts.isEmpty();
    116     }
    117 
    118     public static boolean areGroupWritableAccountsAvailable(Context context) {
    119         final List<AccountWithDataSet> accounts =
    120                 AccountTypeManager.getInstance(context).getGroupWritableAccounts();
    121         return !accounts.isEmpty();
    122     }
    123 
    124     /**
    125      * Returns the size (width and height) of thumbnail pictures as configured in the provider. This
    126      * can safely be called from the UI thread, as the provider can serve this without performing
    127      * a database access
    128      */
    129     public static int getThumbnailSize(Context context) {
    130         if (sThumbnailSize == -1) {
    131             final Cursor c = context.getContentResolver().query(
    132                     DisplayPhoto.CONTENT_MAX_DIMENSIONS_URI,
    133                     new String[] { DisplayPhoto.THUMBNAIL_MAX_DIM }, null, null, null);
    134             try {
    135                 c.moveToFirst();
    136                 sThumbnailSize = c.getInt(0);
    137             } finally {
    138                 c.close();
    139             }
    140         }
    141         return sThumbnailSize;
    142     }
    143 
    144 }
    145