diff options
| author | Andrew Lee <anwlee@google.com> | 2015-06-25 16:53:56 -0700 |
|---|---|---|
| committer | Andrew Lee <anwlee@google.com> | 2015-06-26 16:42:09 -0700 |
| commit | d3f6a6c56dec7d47bae1121ed1030f67c26736fe (patch) | |
| tree | 8cfb3c4141d56449711e95aecebe6ed832f74802 /src/com/android/dialer/util | |
| parent | 0feab0229c1c70248ca411d0e95f79aa2ac70c00 (diff) | |
| download | packages_apps_Dialer-d3f6a6c56dec7d47bae1121ed1030f67c26736fe.tar.gz packages_apps_Dialer-d3f6a6c56dec7d47bae1121ed1030f67c26736fe.tar.bz2 packages_apps_Dialer-d3f6a6c56dec7d47bae1121ed1030f67c26736fe.zip | |
Cache repeated Telecom requests from call log.
This improves call log scrolling performance.
+ Split "Wrapper" into a utility and a cache.
+ Use cache for repeated calls related to call logs.
+ In the process of fixing plumbing and typer, moved some phone call
detail classes into the more appropriate call log package.
+ Update tests.
Bug: 20524705
Change-Id: Ib8ee21e417c19f98f6474a5793416e8f99103b55
Diffstat (limited to 'src/com/android/dialer/util')
| -rw-r--r-- | src/com/android/dialer/util/PhoneNumberUtil.java | 95 |
1 files changed, 95 insertions, 0 deletions
diff --git a/src/com/android/dialer/util/PhoneNumberUtil.java b/src/com/android/dialer/util/PhoneNumberUtil.java new file mode 100644 index 000000000..84f58aa85 --- /dev/null +++ b/src/com/android/dialer/util/PhoneNumberUtil.java @@ -0,0 +1,95 @@ +/* + * Copyright (C) 2013 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License + */ + +package com.android.dialer.util; + +import android.content.Context; +import android.provider.CallLog; +import android.telecom.PhoneAccountHandle; +import android.telecom.TelecomManager; +import android.text.TextUtils; +import android.util.Log; +import android.util.Pair; + +import com.android.contacts.common.util.PhoneNumberHelper; +import com.google.common.collect.Sets; + +import java.util.HashMap; +import java.util.Map; +import java.util.Set; + +public class PhoneNumberUtil { + private static final Set<String> LEGACY_UNKNOWN_NUMBERS = Sets.newHashSet("-1", "-2", "-3"); + + /** Returns true if it is possible to place a call to the given number. */ + public static boolean canPlaceCallsTo(CharSequence number, int presentation) { + return presentation == CallLog.Calls.PRESENTATION_ALLOWED + && !TextUtils.isEmpty(number) && !isLegacyUnknownNumbers(number); + } + + /** + * Returns true if the given number is the number of the configured voicemail. To be able to + * mock-out this, it is not a static method. + */ + public static boolean isVoicemailNumber( + Context context, PhoneAccountHandle accountHandle, CharSequence number) { + if (TextUtils.isEmpty(number)) { + return false; + } + + final TelecomManager telecomManager = + (TelecomManager) context.getSystemService(Context.TELECOM_SERVICE); + return telecomManager.isVoiceMailNumber(accountHandle, number.toString()); + } + + /** + * Returns true if the given number is a SIP address. To be able to mock-out this, it is not a + * static method. + */ + public static boolean isSipNumber(CharSequence number) { + return number != null && PhoneNumberHelper.isUriNumber(number.toString()); + } + + public static boolean isUnknownNumberThatCanBeLookedUp( + Context context, + PhoneAccountHandle accountHandle, + CharSequence number, + int presentation) { + if (presentation == CallLog.Calls.PRESENTATION_UNKNOWN) { + return false; + } + if (presentation == CallLog.Calls.PRESENTATION_RESTRICTED) { + return false; + } + if (presentation == CallLog.Calls.PRESENTATION_PAYPHONE) { + return false; + } + if (TextUtils.isEmpty(number)) { + return false; + } + if (isVoicemailNumber(context, accountHandle, number)) { + return false; + } + if (isLegacyUnknownNumbers(number)) { + return false; + } + return true; + } + + public static boolean isLegacyUnknownNumbers(CharSequence number) { + return number != null && LEGACY_UNKNOWN_NUMBERS.contains(number.toString()); + } +} |
