Home | History | Annotate | Download | only in util
      1 /*
      2  * Copyright (C) 2012 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.util;
     18 
     19 import static android.provider.ContactsContract.CommonDataKinds.Phone;
     20 
     21 import android.content.Context;
     22 import android.util.Log;
     23 
     24 import com.android.contacts.common.R;
     25 import com.android.internal.util.Preconditions;
     26 
     27 /**
     28  * Methods for handling various contact data labels.
     29  */
     30 public class ContactDisplayUtils {
     31 
     32     private static final String TAG = ContactDisplayUtils.class.getSimpleName();
     33 
     34     public static final int INTERACTION_CALL = 1;
     35     public static final int INTERACTION_SMS = 2;
     36 
     37     /**
     38      * Checks if the given data type is a custom type.
     39      *
     40      * @param type Phone data type.
     41      * @return {@literal true} if the type is custom.  {@literal false} if not.
     42      */
     43     public static boolean isCustomPhoneType(Integer type) {
     44         return type == Phone.TYPE_CUSTOM || type == Phone.TYPE_ASSISTANT;
     45     }
     46 
     47     /**
     48      * Gets a display label for a given phone type.
     49      *
     50      * @param type The type of number.
     51      * @param customLabel A custom label to use if the phone is determined to be of custom type
     52      * determined by {@link #isCustomPhoneType(Integer))}
     53      * @param interactionType whether this is a call or sms.  Either {@link #INTERACTION_CALL} or
     54      * {@link #INTERACTION_SMS}.
     55      * @param context The application context.
     56      * @return An appropriate string label
     57      */
     58     public static CharSequence getLabelForCallOrSms(Integer type, CharSequence customLabel,
     59             int interactionType, Context context) {
     60         Preconditions.checkNotNull(context);
     61 
     62         if (isCustomPhoneType(type)) {
     63             return (customLabel == null) ? "" : customLabel;
     64         } else {
     65             int resId;
     66             if (interactionType == INTERACTION_SMS) {
     67                 resId = getSmsLabelResourceId(type);
     68             } else {
     69                 resId = getPhoneLabelResourceId(type);
     70                 if (interactionType != INTERACTION_CALL) {
     71                     Log.e(TAG, "Un-recognized interaction type: " + interactionType +
     72                             ". Defaulting to ContactDisplayUtils.INTERACTION_CALL.");
     73                 }
     74             }
     75 
     76             return context.getResources().getText(resId);
     77         }
     78     }
     79 
     80     /**
     81      * Find a label for calling.
     82      *
     83      * @param type The type of number.
     84      * @return An appropriate string label.
     85      */
     86     public static int getPhoneLabelResourceId(Integer type) {
     87         if (type == null) return R.string.call_other;
     88         switch (type) {
     89             case Phone.TYPE_HOME:
     90                 return R.string.call_home;
     91             case Phone.TYPE_MOBILE:
     92                 return R.string.call_mobile;
     93             case Phone.TYPE_WORK:
     94                 return R.string.call_work;
     95             case Phone.TYPE_FAX_WORK:
     96                 return R.string.call_fax_work;
     97             case Phone.TYPE_FAX_HOME:
     98                 return R.string.call_fax_home;
     99             case Phone.TYPE_PAGER:
    100                 return R.string.call_pager;
    101             case Phone.TYPE_OTHER:
    102                 return R.string.call_other;
    103             case Phone.TYPE_CALLBACK:
    104                 return R.string.call_callback;
    105             case Phone.TYPE_CAR:
    106                 return R.string.call_car;
    107             case Phone.TYPE_COMPANY_MAIN:
    108                 return R.string.call_company_main;
    109             case Phone.TYPE_ISDN:
    110                 return R.string.call_isdn;
    111             case Phone.TYPE_MAIN:
    112                 return R.string.call_main;
    113             case Phone.TYPE_OTHER_FAX:
    114                 return R.string.call_other_fax;
    115             case Phone.TYPE_RADIO:
    116                 return R.string.call_radio;
    117             case Phone.TYPE_TELEX:
    118                 return R.string.call_telex;
    119             case Phone.TYPE_TTY_TDD:
    120                 return R.string.call_tty_tdd;
    121             case Phone.TYPE_WORK_MOBILE:
    122                 return R.string.call_work_mobile;
    123             case Phone.TYPE_WORK_PAGER:
    124                 return R.string.call_work_pager;
    125             case Phone.TYPE_ASSISTANT:
    126                 return R.string.call_assistant;
    127             case Phone.TYPE_MMS:
    128                 return R.string.call_mms;
    129             default:
    130                 return R.string.call_custom;
    131         }
    132 
    133     }
    134 
    135     /**
    136      * Find a label for sending an sms.
    137      *
    138      * @param type The type of number.
    139      * @return An appropriate string label.
    140      */
    141     public static int getSmsLabelResourceId(Integer type) {
    142         if (type == null) return R.string.sms_other;
    143         switch (type) {
    144             case Phone.TYPE_HOME:
    145                 return R.string.sms_home;
    146             case Phone.TYPE_MOBILE:
    147                 return R.string.sms_mobile;
    148             case Phone.TYPE_WORK:
    149                 return R.string.sms_work;
    150             case Phone.TYPE_FAX_WORK:
    151                 return R.string.sms_fax_work;
    152             case Phone.TYPE_FAX_HOME:
    153                 return R.string.sms_fax_home;
    154             case Phone.TYPE_PAGER:
    155                 return R.string.sms_pager;
    156             case Phone.TYPE_OTHER:
    157                 return R.string.sms_other;
    158             case Phone.TYPE_CALLBACK:
    159                 return R.string.sms_callback;
    160             case Phone.TYPE_CAR:
    161                 return R.string.sms_car;
    162             case Phone.TYPE_COMPANY_MAIN:
    163                 return R.string.sms_company_main;
    164             case Phone.TYPE_ISDN:
    165                 return R.string.sms_isdn;
    166             case Phone.TYPE_MAIN:
    167                 return R.string.sms_main;
    168             case Phone.TYPE_OTHER_FAX:
    169                 return R.string.sms_other_fax;
    170             case Phone.TYPE_RADIO:
    171                 return R.string.sms_radio;
    172             case Phone.TYPE_TELEX:
    173                 return R.string.sms_telex;
    174             case Phone.TYPE_TTY_TDD:
    175                 return R.string.sms_tty_tdd;
    176             case Phone.TYPE_WORK_MOBILE:
    177                 return R.string.sms_work_mobile;
    178             case Phone.TYPE_WORK_PAGER:
    179                 return R.string.sms_work_pager;
    180             case Phone.TYPE_ASSISTANT:
    181                 return R.string.sms_assistant;
    182             case Phone.TYPE_MMS:
    183                 return R.string.sms_mms;
    184             default:
    185                 return R.string.sms_custom;
    186         }
    187     }
    188 
    189 }
    190