From 1197d3322b7905724b3eefe40ff8374dd5e26939 Mon Sep 17 00:00:00 2001 From: Yorke Lee Date: Wed, 14 Aug 2013 08:55:53 -0700 Subject: Add outgoing call receiver to undemote a contact Bug: 10292569 Change-Id: I377220822970d46c6706a636fbcc54f8eb2c8758 --- .../interactions/PhoneNumberInteraction.java | 9 --- .../interactions/UndemoteOutgoingCallReceiver.java | 72 ++++++++++++++++++++++ 2 files changed, 72 insertions(+), 9 deletions(-) create mode 100644 src/com/android/dialer/interactions/UndemoteOutgoingCallReceiver.java (limited to 'src') diff --git a/src/com/android/dialer/interactions/PhoneNumberInteraction.java b/src/com/android/dialer/interactions/PhoneNumberInteraction.java index 8c64c5f7d..722b9b33e 100644 --- a/src/com/android/dialer/interactions/PhoneNumberInteraction.java +++ b/src/com/android/dialer/interactions/PhoneNumberInteraction.java @@ -309,15 +309,6 @@ public class PhoneNumberInteraction implements OnLoadCompleteListener { } private void performAction(String phoneNumber) { - if (mInteractionType == ContactDisplayUtils.INTERACTION_CALL && mContactId != - UNKNOWN_CONTACT_ID) { - // Since we are making an outgoing call to this contact, undemote it here. - // If the contact is not demoted, this will not do anything. - final ContentValues cv = new ContentValues(1); - cv.put(String.valueOf(mContactId), PinnedPositions.UNDEMOTE); - mContext.getContentResolver().update(PinnedPositions.UPDATE_URI, cv, null, null); - } - PhoneNumberInteraction.performAction(mContext, phoneNumber, mInteractionType, mCallOrigin); } diff --git a/src/com/android/dialer/interactions/UndemoteOutgoingCallReceiver.java b/src/com/android/dialer/interactions/UndemoteOutgoingCallReceiver.java new file mode 100644 index 000000000..8782ce426 --- /dev/null +++ b/src/com/android/dialer/interactions/UndemoteOutgoingCallReceiver.java @@ -0,0 +1,72 @@ +/* + * 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.interactions; + +import android.content.BroadcastReceiver; +import android.content.ContentValues; +import android.content.Context; +import android.content.Intent; +import android.database.Cursor; +import android.net.Uri; +import android.provider.ContactsContract.PhoneLookup; +import android.provider.ContactsContract.PinnedPositions; + +/** + * This broadcast receiver is used to listen to outgoing calls and undemote formerly demoted + * contacts if a phone call is made to a phone number belonging to that contact. + */ +public class UndemoteOutgoingCallReceiver extends BroadcastReceiver { + + private static final long NO_CONTACT_FOUND = -1; + + @Override + public void onReceive(Context context, Intent intent) { + if (intent != null && Intent.ACTION_NEW_OUTGOING_CALL.equals(intent.getAction())) { + final String number = intent.getStringExtra(Intent.EXTRA_PHONE_NUMBER); + final long id = getContactIdFromPhoneNumber(context, number); + if (id != NO_CONTACT_FOUND) { + undemoteContactWithId(context, id); + } + } + } + + private void undemoteContactWithId(Context context, long id) { + final ContentValues cv = new ContentValues(1); + cv.put(String.valueOf(id), PinnedPositions.UNDEMOTE); + // If the contact is not demoted, this will not do anything. Otherwise, it will + // restore it to an unpinned position. If it was a frequently called contact, it will + // show up once again show up on the favorites screen. + context.getContentResolver().update(PinnedPositions.UPDATE_URI, cv, null, null); + } + + private long getContactIdFromPhoneNumber(Context context, String number) { + final Uri contactUri = Uri.withAppendedPath(PhoneLookup.CONTENT_FILTER_URI, + Uri.encode(number)); + final Cursor cursor = context.getContentResolver().query(contactUri, new String[] { + PhoneLookup._ID}, null, null, null); + try { + if (cursor.moveToFirst()) { + final long id = cursor.getLong(0); + return id; + } else { + return NO_CONTACT_FOUND; + } + } finally { + cursor.close(); + } + } +} -- cgit v1.2.3