1ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian/* 2ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian * Copyright (C) 2011 The Android Open Source Project 3ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian * 4ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian * Licensed under the Apache License, Version 2.0 (the "License"); 5ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian * you may not use this file except in compliance with the License. 6ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian * You may obtain a copy of the License at 7ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian * 8ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian * http://www.apache.org/licenses/LICENSE-2.0 9ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian * 10ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian * Unless required by applicable law or agreed to in writing, software 11ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian * distributed under the License is distributed on an "AS IS" BASIS, 12ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian * See the License for the specific language governing permissions and 14ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian * limitations under the License. 15ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian */ 16ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian 17d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanianpackage com.android.dialer.calllogutils; 18ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian 19ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanianimport android.content.Context; 20ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanianimport android.provider.CallLog.Calls; 21b06d00924123aa13086be564fee6404215fcc0d5linyuhimport android.telephony.PhoneNumberUtils; 22ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanianimport android.text.BidiFormatter; 23ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanianimport android.text.TextDirectionHeuristics; 24ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanianimport android.text.TextUtils; 25ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanianimport com.android.dialer.phonenumberutil.PhoneNumberHelper; 2603b13198537df025febb842db7f95794a1faad8fzachhimport com.google.common.base.Optional; 27ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian 28ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian/** Helper for formatting and managing the display of phone numbers. */ 29ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanianpublic class PhoneNumberDisplayUtil { 30ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian 31ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian /** Returns the string to display for the given phone number if there is no matching contact. */ 32d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian public static CharSequence getDisplayName( 33ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian Context context, CharSequence number, int presentation, boolean isVoicemail) { 3403b13198537df025febb842db7f95794a1faad8fzachh Optional<String> presentationString = getNameForPresentation(context, presentation); 3503b13198537df025febb842db7f95794a1faad8fzachh if (presentationString.isPresent()) { 3603b13198537df025febb842db7f95794a1faad8fzachh return presentationString.get(); 37ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian } 38ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian if (isVoicemail) { 39d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian return context.getResources().getString(R.string.voicemail_string); 40ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian } 41ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian if (PhoneNumberHelper.isLegacyUnknownNumbers(number)) { 42ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian return context.getResources().getString(R.string.unknown); 43ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian } 44ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian return ""; 45ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian } 46ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian 4703b13198537df025febb842db7f95794a1faad8fzachh /** Returns the string associated with the given presentation. */ 4803b13198537df025febb842db7f95794a1faad8fzachh public static Optional<String> getNameForPresentation(Context appContext, int presentation) { 4903b13198537df025febb842db7f95794a1faad8fzachh if (presentation == Calls.PRESENTATION_UNKNOWN) { 5003b13198537df025febb842db7f95794a1faad8fzachh return Optional.of(appContext.getResources().getString(R.string.unknown)); 5103b13198537df025febb842db7f95794a1faad8fzachh } 5203b13198537df025febb842db7f95794a1faad8fzachh if (presentation == Calls.PRESENTATION_RESTRICTED) { 5303b13198537df025febb842db7f95794a1faad8fzachh return Optional.of(PhoneNumberHelper.getDisplayNameForRestrictedNumber(appContext)); 5403b13198537df025febb842db7f95794a1faad8fzachh } 5503b13198537df025febb842db7f95794a1faad8fzachh if (presentation == Calls.PRESENTATION_PAYPHONE) { 5603b13198537df025febb842db7f95794a1faad8fzachh return Optional.of(appContext.getResources().getString(R.string.payphone)); 5703b13198537df025febb842db7f95794a1faad8fzachh } 5803b13198537df025febb842db7f95794a1faad8fzachh return Optional.absent(); 5903b13198537df025febb842db7f95794a1faad8fzachh } 6003b13198537df025febb842db7f95794a1faad8fzachh 61ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian /** 62ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian * Returns the string to display for the given phone number. 63ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian * 64ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian * @param number the number to display 65ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian * @param formattedNumber the formatted number if available, may be null 66ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian */ 6703b13198537df025febb842db7f95794a1faad8fzachh static CharSequence getDisplayNumber( 68ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian Context context, 69ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian CharSequence number, 70ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian int presentation, 71ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian CharSequence formattedNumber, 72ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian CharSequence postDialDigits, 73ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian boolean isVoicemail) { 74ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian final CharSequence displayName = getDisplayName(context, number, presentation, isVoicemail); 75ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian if (!TextUtils.isEmpty(displayName)) { 76ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian return getTtsSpannableLtrNumber(displayName); 77ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian } 78ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian 79ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian if (!TextUtils.isEmpty(formattedNumber)) { 80ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian return getTtsSpannableLtrNumber(formattedNumber); 81ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian } else if (!TextUtils.isEmpty(number)) { 82ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian return getTtsSpannableLtrNumber(number.toString() + postDialDigits); 83ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian } else { 84ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian return context.getResources().getString(R.string.unknown); 85ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian } 86ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian } 87ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian 88ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian /** Returns number annotated as phone number in LTR direction. */ 89b06d00924123aa13086be564fee6404215fcc0d5linyuh private static CharSequence getTtsSpannableLtrNumber(CharSequence number) { 90b06d00924123aa13086be564fee6404215fcc0d5linyuh return PhoneNumberUtils.createTtsSpannable( 91ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian BidiFormatter.getInstance().unicodeWrap(number.toString(), TextDirectionHeuristics.LTR)); 92ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian } 93ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian} 94