summaryrefslogtreecommitdiffstats
path: root/src/com/android/dialer/lookup/ReverseLookupService.java
diff options
context:
space:
mode:
authorXiao-Long Chen <chenxiaolong@cxl.epac.to>2014-11-12 17:01:47 -0800
committerSteve Kondik <steve@cyngn.com>2015-11-16 19:53:26 -0800
commitb5478f99a71f65c84f4664aad86eb9fee5d5e3ca (patch)
treee1f56abc80ca1d353ecb3311fba406881c2af20e /src/com/android/dialer/lookup/ReverseLookupService.java
parent412dd31efe837c14f09a56511d93e2a7150cd340 (diff)
downloadpackages_apps_Dialer-b5478f99a71f65c84f4664aad86eb9fee5d5e3ca.tar.gz
packages_apps_Dialer-b5478f99a71f65c84f4664aad86eb9fee5d5e3ca.tar.bz2
packages_apps_Dialer-b5478f99a71f65c84f4664aad86eb9fee5d5e3ca.zip
Dialer lookup.
Squashed commit of the following: commit 934fbc79312a7cb0a4bd821d80af3b87f27c5beb Author: Xiao-Long Chen <chenxiaolong@cxl.epac.to> Date: Sun Feb 23 14:33:41 2014 -0500 New API Change-Id: I0822407bb808382da56146ecf7e52cacb7cb8613 commit 4e81f04c716fead182cb453791d4a77f7eb54a89 Author: Xiao-Long Chen <chenxiaolong@cxl.epac.to> Date: Sat Feb 15 21:04:15 2014 -0500 My old email is gone Change-Id: Icfeccd195b9fbd269dc3400194dd42f215859049 commit 8a01ae35f9696275f1f156ea0486b1164a8d205e Author: Xiao-Long Chen <chenxiaolong@cxl.epac.to> Date: Sat Feb 15 15:12:55 2014 -0500 Dialer: Upgrade path for Google reverse lookup Change-Id: I9e02beff958ed529f2520ac7023730392500606a commit c0f2fae26eea774c1a5e5eae7d6ba97be32f16cc Author: Xiao-Long Chen <chenxiaolong@cxl.epac.to> Date: Sat Feb 15 13:38:56 2014 -0500 [1/2] Remove Google Reverse Lookup: Auth may violate terms of service Change-Id: I2055770a43163cb2020daec6707fd45f0577584b commit 8804367536eb38eb917c61172d9e4b6406b59c44 Author: Xiao-Long Chen <chenxiaolong@cxl.epac.to> Date: Tue Feb 11 19:11:10 2014 -0500 [2/2] Dialer: Add YellowPages Canada reverse lookup provider Change-Id: I07ca3932d024a5c834c25e23b2e16094ed1f974e commit cdf5c18588b4b0e2ed0f12b5912c7ae90b51120a Author: Xiao-Long Chen <chenxiaolong@cxl.epac.to> Date: Tue Feb 11 12:27:53 2014 -0500 Nitpicks. Change-Id: If8ce155246beb5395d81db8ab432046181b6d97f commit 79aeb53db82c75adbb90f8f152e5d66d95706314 Author: Xiao-Long Chen <chenxiaolong@cxl.epac.to> Date: Tue Feb 11 00:20:50 2014 -0500 [2/2] Dialer: Add WhitePages Canada reverse lookup provider Change-Id: Ie4d5302945c39efca9f4b5fbf6dee9a63ec24184 commit c6fe12ffe357f209c2723c2c16aa6b853494a477 Author: Xiao-Long Chen <chenxiaolong@cxl.epac.to> Date: Mon Feb 10 12:02:59 2014 -0500 Dialer: Use PackageManager to detect of Google Play Services is installed Change-Id: I7b39867c0e8ec79c6c02c731ac27f78663358910 commit 9787c0b312df649840b55fbd35f5a6d87fceb5bb Author: Xiao-Long Chen <chenxiaolong@cxl.epac.to> Date: Fri Jan 31 22:41:09 2014 -0500 Dialer: Add support for forward and reverse lookups Change-Id: I848db0bbbe6a648064d1eace4993814a16aa9fa0 Change-Id: Iec295b05d72680f770367fcaf1dae9ec68b3d6e9 commit 71b121d082d777e54f7fc02338b609cbfc31ff9c Author: Xiao-Long Chen <chenxiaolong@cxl.epac.to> Date: Sat Mar 22 15:32:10 2014 -0400 Dialer: Add support for OpenCNAM paid accounts Change-Id: I09c67eed706311a40569617980585a357f1d74aa commit 50cc4c8615d99e92a481981289ff9a7ec83b4c04 Author: Ricardo Cerqueira <cyanogenmod@cerqueira.org> Date: Mon Jun 2 13:31:15 2014 -0700 ReverseLookup: Don't return OpenCNAM errors as caller IDs Skip the API entirely for non-US numbers, and ignore any non-200 bodies to avoid names of the "Limit Exceeded" variety PS2: Use constant from HttpStatus and don't check for null on normalizedNumber Change-Id: I1ea107ba828e6dba44fa0828ad5fedecb8faf4de commit 7fde43587525973b2172123c8696d06f2fd67e37 Author: Dan Pasanen <dan.pasanen@gmail.com> Date: Mon Jun 2 17:08:18 2014 -0500 OpenCnameReverseLookup: fix import class Change-Id: Ib10877aecbdc1e07f8912e1ce35df6e8a112f131 commit 6605b6292df97b66785a06927d7bcd28c217d121 Author: Adnan <adnan@cyngn.com> Date: Tue Jun 10 19:02:33 2014 -0700 Chinese Location Lookup [1/2] Dialer: Chinese Reverse Lookup PS6: Add static integers for reference Change-Id: I22ede59cfa8785ac04ad1b1f19d1c69e24b9fb89 commit cff06b01e0a4c4487d69be7f21de1ddb7f663f38 Author: Danny Baumann <dannybaumann@web.de> Date: Wed Aug 27 09:04:14 2014 +0200 Add reverse lookup provider "Das Telefonbuch" (DE). Change-Id: I0ad72bb3e57da3d27fb1c50c58c112234c39b585 commit 887609d1f6d00d883783e9d03bf16b24e716e234 Author: Danny Baumann <dannybaumann@web.de> Date: Wed Sep 3 09:09:19 2014 +0200 Refine regexes for Das Telefonbuch. Looks like private and business numbers have a slightly differing format. Change-Id: I7eae982fe81cf890686f49b88417e604ba0171a0 commit e64d747e3ae87cc6ddf83b96882e7bcad6ebcd31 Author: Danny Baumann <dannybaumann@web.de> Date: Thu Oct 2 12:55:23 2014 +0200 Code cleanup. Avoid repetetive boilerplate code by using helper methods. Change-Id: Id3ce8d07d35d59c08cbc67fa35bbf6daa67c9608 commit c10bafdd9bab3af4e9dca4fae749fd0ab2202acd Author: Adnan <adnan@cyngn.com> Date: Wed Oct 1 17:13:14 2014 -0700 Dialer: Scrub debug logging for identifiable information. Change-Id: I2b45ec7c37a7f69c972feb3dde1eac87306259f6 Change-Id: I4445ac7a3aa7f60a912fe33dde1eac87306259f2 Move lookup settings to dialer app (2/2) Change-Id: I3d4da7cc1db60963b3e47370a36a6e839ec112d6 Make reverse lookup implement the phone number lookup interface (1/2) Change-Id: I35195d6c5a89cf22ac0f31d48e2ef89102a453c1 Add missing entry for 'Das Telefonbuch' reverse lookup. Change-Id: I4ab793d38ff9d9cf0d43130f31bff03f81b0b7b3 Added Reverse Lookup Gebeld (NL) Change-Id: Icc69b9aac2f50f54ab2a97365297620ccd547177
Diffstat (limited to 'src/com/android/dialer/lookup/ReverseLookupService.java')
-rw-r--r--src/com/android/dialer/lookup/ReverseLookupService.java203
1 files changed, 203 insertions, 0 deletions
diff --git a/src/com/android/dialer/lookup/ReverseLookupService.java b/src/com/android/dialer/lookup/ReverseLookupService.java
new file mode 100644
index 000000000..25c3f4a85
--- /dev/null
+++ b/src/com/android/dialer/lookup/ReverseLookupService.java
@@ -0,0 +1,203 @@
+/*
+ * Copyright (C) 2014 Xiao-Long Chen <chillermillerlong@hotmail.com>
+ *
+ * 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.lookup;
+
+import android.content.Context;
+import android.graphics.Bitmap;
+import android.net.Uri;
+import android.os.Handler;
+import android.os.HandlerThread;
+import android.os.Message;
+import android.telephony.PhoneNumberUtils;
+import android.telephony.TelephonyManager;
+
+import com.android.contacts.common.GeoUtil;
+import com.android.dialer.calllog.ContactInfo;
+import com.android.incallui.service.PhoneNumberService;
+
+import java.io.IOException;
+
+public class ReverseLookupService implements PhoneNumberService, Handler.Callback {
+ private final HandlerThread mBackgroundThread;
+ private final Handler mBackgroundHandler;
+ private final Handler mHandler;
+ private final Context mContext;
+ private final TelephonyManager mTelephonyManager;
+
+ private static final int MSG_LOOKUP = 1;
+ private static final int MSG_NOTIFY_NUMBER = 2;
+ private static final int MSG_NOTIFY_IMAGE = 3;
+
+ public ReverseLookupService(Context context) {
+ mContext = context;
+ mTelephonyManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
+
+ // TODO: stop after a while?
+ mBackgroundThread = new HandlerThread("ReverseLookup");
+ mBackgroundThread.start();
+
+ mBackgroundHandler = new Handler(mBackgroundThread.getLooper(), this);
+ mHandler = new Handler(this);
+ }
+
+ @Override
+ public void getPhoneNumberInfo(String phoneNumber, NumberLookupListener numberListener,
+ ImageLookupListener imageListener, boolean isIncoming) {
+ if (!LookupSettings.isReverseLookupEnabled(mContext)) {
+ LookupCache.deleteCachedContacts(mContext);
+ return;
+ }
+
+ // Can't do reverse lookup without a number
+ if (phoneNumber == null) {
+ return;
+ }
+
+ LookupRequest request = new LookupRequest();
+ String countryIso = mTelephonyManager.getSimCountryIso().toUpperCase();
+ request.normalizedNumber = PhoneNumberUtils.formatNumberToE164(phoneNumber, countryIso);
+ request.formattedNumber = PhoneNumberUtils.formatNumber(phoneNumber,
+ request.normalizedNumber, GeoUtil.getCurrentCountryIso(mContext));
+ request.numberListener = numberListener;
+ request.imageListener = imageListener;
+
+ mBackgroundHandler.obtainMessage(MSG_LOOKUP, request).sendToTarget();
+ }
+
+ @Override
+ public boolean handleMessage(Message msg) {
+ switch (msg.what) {
+ case MSG_LOOKUP: {
+ // background thread
+ LookupRequest request = (LookupRequest) msg.obj;
+ request.contactInfo = doLookup(request);
+ if (request.contactInfo != null) {
+ mHandler.obtainMessage(MSG_NOTIFY_NUMBER, request).sendToTarget();
+ if (request.imageListener != null && request.contactInfo.photoUri != null) {
+ request.photo = fetchImage(request, request.contactInfo.photoUri);
+ if (request.photo != null) {
+ mHandler.obtainMessage(MSG_NOTIFY_IMAGE, request).sendToTarget();
+ }
+ }
+ }
+ break;
+ }
+ case MSG_NOTIFY_NUMBER: {
+ // main thread
+ LookupRequest request = (LookupRequest) msg.obj;
+ if (request.numberListener != null) {
+ LookupNumberInfo info = new LookupNumberInfo(request.contactInfo);
+ request.numberListener.onPhoneNumberInfoComplete(info);
+ }
+ break;
+ }
+ case MSG_NOTIFY_IMAGE:
+ // main thread
+ LookupRequest request = (LookupRequest) msg.obj;
+ if (request.imageListener != null) {
+ request.imageListener.onImageFetchComplete(request.photo);
+ }
+ break;
+ }
+
+ return true;
+ }
+
+ private ContactInfo doLookup(LookupRequest request) {
+ final String number = request.normalizedNumber;
+
+ if (LookupCache.hasCachedContact(mContext, number)) {
+ ContactInfo info = LookupCache.getCachedContact(mContext, number);
+ if (!ContactInfo.EMPTY.equals(info)) {
+ return info;
+ } else if (info != null) {
+ // If we have an empty cached contact, remove it and redo lookup
+ LookupCache.deleteCachedContact(mContext, number);
+ }
+ }
+
+ try {
+ ContactInfo info = ReverseLookup.getInstance(mContext).lookupNumber(mContext,
+ number, request.formattedNumber);
+ if (info != null && !info.equals(ContactInfo.EMPTY)) {
+ LookupCache.cacheContact(mContext, info);
+ return info;
+ }
+ } catch (IOException e) {
+ // ignored
+ }
+
+ return null;
+ }
+
+ private Bitmap fetchImage(LookupRequest request, Uri uri) {
+ if (!LookupCache.hasCachedImage(mContext, request.normalizedNumber)) {
+ Bitmap bmp = ReverseLookup.getInstance(mContext).lookupImage(mContext, uri);
+ if (bmp != null) {
+ LookupCache.cacheImage(mContext, request.normalizedNumber, bmp);
+ }
+ }
+
+ return LookupCache.getCachedImage(mContext, request.normalizedNumber);
+ }
+
+ private static class LookupRequest {
+ String normalizedNumber;
+ String formattedNumber;
+ NumberLookupListener numberListener;
+ ImageLookupListener imageListener;
+ ContactInfo contactInfo;
+ Bitmap photo;
+ }
+
+ private static class LookupNumberInfo implements PhoneNumberInfo {
+ private ContactInfo mInfo;
+ private LookupNumberInfo(ContactInfo info) {
+ mInfo = info;
+ }
+
+ @Override
+ public String getDisplayName() {
+ return mInfo.name;
+ }
+ @Override
+ public String getNumber() {
+ return mInfo.number;
+ }
+ @Override
+ public int getPhoneType() {
+ return mInfo.type;
+ }
+ @Override
+ public String getPhoneLabel() {
+ return mInfo.label;
+ }
+ @Override
+ public String getNormalizedNumber() {
+ return mInfo.normalizedNumber;
+ }
+ @Override
+ public String getImageUrl() {
+ return mInfo.photoUri != null ? mInfo.photoUri.toString() : null;
+ }
+ @Override
+ public boolean isBusiness() {
+ // FIXME
+ return false;
+ }
+ }
+}