From cded3beaf28a703e1ef8f71bbc6836e6806c3736 Mon Sep 17 00:00:00 2001 From: Tobias Thierer Date: Fri, 9 Jun 2017 14:16:05 +0000 Subject: Revert "Update AOSP Dialer source from internal google3 repository at cl/158012278. am: 91ce7d2a47" This reverts commit c67d658e7daa453fe9ad9fd1a37f81eaf2048c44. Reason for revert: This CL broke the sailfish-userdebug_javac-all target on master. Change-Id: I9b54333a654c00154ca84f4ece84bea4f07cc19b --- .../android/dialer/oem/CequintCallerIdManager.java | 98 ++++++++++++++++------ 1 file changed, 71 insertions(+), 27 deletions(-) (limited to 'java/com/android/dialer/oem/CequintCallerIdManager.java') diff --git a/java/com/android/dialer/oem/CequintCallerIdManager.java b/java/com/android/dialer/oem/CequintCallerIdManager.java index 806d553eb..095ee4e66 100644 --- a/java/com/android/dialer/oem/CequintCallerIdManager.java +++ b/java/com/android/dialer/oem/CequintCallerIdManager.java @@ -18,6 +18,7 @@ package com.android.dialer.oem; import android.annotation.TargetApi; import android.content.Context; import android.content.pm.PackageManager; +import android.database.ContentObserver; import android.database.Cursor; import android.net.Uri; import android.os.Build.VERSION_CODES; @@ -30,6 +31,7 @@ import android.text.TextUtils; import com.android.dialer.common.Assert; import com.android.dialer.common.ConfigProviderBindings; import com.android.dialer.common.LogUtil; +import com.android.dialer.util.PermissionsUtil; import java.util.concurrent.ConcurrentHashMap; /** @@ -71,12 +73,17 @@ public class CequintCallerIdManager { private static final String IMAGE = "cid_pLogo"; private static final String DISPLAY_NAME = "cid_pDisplayName"; + // TODO: Revisit it and maybe remove it if it's not necessary. + private static final ConcurrentHashMap callLogCache = + new ConcurrentHashMap<>(); + private static final ConcurrentHashMap incallIncomingCallCache = + new ConcurrentHashMap<>(); + private static final ConcurrentHashMap incallOutgoingCallCache = + new ConcurrentHashMap<>(); + private static boolean hasRegisteredContentObserver; private static boolean hasAlreadyCheckedCequintCallerIdPackage; private static boolean isCequintCallerIdEnabled; - // TODO: Revisit it and maybe remove it if it's not necessary. - private final ConcurrentHashMap callLogCache; - /** Cequint caller id contact information. */ public static class CequintCallerIdContact { public final String name; @@ -110,8 +117,27 @@ public class CequintCallerIdManager { return isCequintCallerIdEnabled; } - public static CequintCallerIdManager createInstanceForCallLog() { - return new CequintCallerIdManager(); + @WorkerThread + @Nullable + public static CequintCallerIdContact getCequintCallerIdContact(Context context, String number) { + Assert.isWorkerThread(); + LogUtil.d( + "CequintCallerIdManager.getCequintCallerIdContact", + "number: %s", + LogUtil.sanitizePhoneNumber(number)); + if (callLogCache.containsKey(number)) { + return callLogCache.get(number); + } + CequintCallerIdContact cequintCallerIdContact = + lookup( + context, + CONTENT_URI, + PhoneNumberUtils.stripSeparators(number), + new String[] {"system"}); + if (cequintCallerIdContact != null) { + callLogCache.put(number, cequintCallerIdContact); + } + return cequintCallerIdContact; } @WorkerThread @@ -125,6 +151,12 @@ public class CequintCallerIdManager { LogUtil.sanitizePhoneNumber(number), LogUtil.sanitizePii(cnapName), isIncoming); + registerContentObserver(context); + if (isIncoming && incallIncomingCallCache.containsKey(number)) { + return incallIncomingCallCache.get(number); + } else if (!isIncoming && incallOutgoingCallCache.containsKey(number)) { + return incallOutgoingCallCache.get(number); + } int flag = 0; if (isIncoming) { flag |= CALLER_ID_LOOKUP_INCOMING_CALL; @@ -133,28 +165,14 @@ public class CequintCallerIdManager { flag |= CALLER_ID_LOOKUP_USER_PROVIDED_CID; } String[] flags = {cnapName, String.valueOf(flag)}; - return lookup(context, CONTENT_URI_FOR_INCALL, number, flags); - } - - @WorkerThread - @Nullable - public CequintCallerIdContact getCequintCallerIdContact(Context context, String number) { - Assert.isWorkerThread(); - LogUtil.d( - "CequintCallerIdManager.getCequintCallerIdContact", - "number: %s", - LogUtil.sanitizePhoneNumber(number)); - if (callLogCache.containsKey(number)) { - return callLogCache.get(number); - } CequintCallerIdContact cequintCallerIdContact = - lookup( - context, - CONTENT_URI, - PhoneNumberUtils.stripSeparators(number), - new String[] {"system"}); + lookup(context, CONTENT_URI_FOR_INCALL, number, flags); if (cequintCallerIdContact != null) { - callLogCache.put(number, cequintCallerIdContact); + if (isIncoming) { + incallIncomingCallCache.put(number, cequintCallerIdContact); + } else { + incallOutgoingCallCache.put(number, cequintCallerIdContact); + } } return cequintCallerIdContact; } @@ -267,7 +285,33 @@ public class CequintCallerIdManager { return geoDescription; } - private CequintCallerIdManager() { - callLogCache = new ConcurrentHashMap<>(); + private static synchronized void registerContentObserver(Context context) { + if (!PermissionsUtil.hasCequintPermissions(context)) { + LogUtil.i("CequintCallerIdManager.registerContentObserver", "no cequint permissions"); + return; + } + + if (hasRegisteredContentObserver) { + return; + } + ContentObserver contentObserver = + new ContentObserver(null) { + @Override + public void onChange(boolean selfChange) { + invalidateCache(); + } + }; + + context + .getContentResolver() + .registerContentObserver(CONTENT_URI_FOR_INCALL, true, contentObserver); + hasRegisteredContentObserver = true; + } + + private static void invalidateCache() { + incallIncomingCallCache.clear(); + incallOutgoingCallCache.clear(); } + + private CequintCallerIdManager() {} } -- cgit v1.2.3