From ab499948f25899cff60c3065955ad3d0dad741a1 Mon Sep 17 00:00:00 2001 From: uabdullah Date: Thu, 14 Dec 2017 15:53:13 -0800 Subject: Refactor add to contacts, send a message and copy number modules for bottom sheet These three modules are to be shared between the voicemail and call log bottom sheets. This CL refactors it such that the functions take in generic parameters instead of coalesced annotated call log row so that they can be used by the voicemail tab. Bug: 64882313,70682949 Test: Existing tests PiperOrigin-RevId: 179110882 Change-Id: I2e8edafbf50e51d2299bfbcb95957e40c1b366ec --- .../android/dialer/calllog/ui/menu/Modules.java | 106 ++---------------- .../dialer/calllog/ui/menu/res/values/strings.xml | 11 -- .../dialer/contactactions/SharedModules.java | 123 +++++++++++++++++++++ .../dialer/contactactions/res/values/strings.xml | 29 +++++ 4 files changed, 161 insertions(+), 108 deletions(-) create mode 100644 java/com/android/dialer/contactactions/SharedModules.java create mode 100644 java/com/android/dialer/contactactions/res/values/strings.xml (limited to 'java/com') diff --git a/java/com/android/dialer/calllog/ui/menu/Modules.java b/java/com/android/dialer/calllog/ui/menu/Modules.java index cccaa731d..97b0483b0 100644 --- a/java/com/android/dialer/calllog/ui/menu/Modules.java +++ b/java/com/android/dialer/calllog/ui/menu/Modules.java @@ -17,24 +17,19 @@ package com.android.dialer.calllog.ui.menu; import android.content.Context; -import android.content.Intent; -import android.net.Uri; import android.provider.CallLog.Calls; -import android.provider.ContactsContract; import android.telecom.PhoneAccountHandle; import android.text.TextUtils; import com.android.dialer.calldetails.CallDetailsActivity; import com.android.dialer.callintent.CallInitiationType; import com.android.dialer.calllog.model.CoalescedRow; import com.android.dialer.calllogutils.PhoneAccountUtils; -import com.android.dialer.clipboard.ClipboardUtils; import com.android.dialer.contactactions.ContactActionModule; import com.android.dialer.contactactions.DividerModule; import com.android.dialer.contactactions.IntentModule; +import com.android.dialer.contactactions.SharedModules; import com.android.dialer.dialercontact.DialerContact; import com.android.dialer.lettertile.LetterTileDrawable; -import com.android.dialer.util.IntentUtil; -import com.android.dialer.util.UriUtils; import java.util.ArrayList; import java.util.List; @@ -48,11 +43,12 @@ final class Modules { // Conditionally add each module, which are items in the bottom sheet's menu. List modules = new ArrayList<>(); - maybeAddModuleForVideoOrAudioCall(context, row, modules); - maybeAddModuleForAddingToContacts(context, row, modules); + maybeAddModuleForVideoOrAudioCall(context, modules, row); + SharedModules.maybeAddModuleForAddingToContacts( + context, modules, row.number(), row.name(), row.lookupUri()); String originalNumber = row.number().getRawInput().getNumber(); - maybeAddModuleForSendingTextMessage(context, originalNumber, modules); + SharedModules.maybeAddModuleForSendingTextMessage(context, modules, originalNumber); if (!modules.isEmpty()) { modules.add(new DividerModule()); @@ -60,17 +56,17 @@ final class Modules { // TODO(zachh): Module for blocking/unblocking spam. // TODO(zachh): Module for CallComposer. - maybeAddModuleForCopyingNumber(context, originalNumber, modules); + SharedModules.maybeAddModuleForCopyingNumber(context, modules, originalNumber); // TODO(zachh): Revisit if DialerContact is the best thing to pass to CallDetails; could // it use a ContactPrimaryActionInfo instead? - addModuleForAccessingCallDetails(context, row, modules); + addModuleForAccessingCallDetails(context, modules, row); return modules; } private static void maybeAddModuleForVideoOrAudioCall( - Context context, CoalescedRow row, List modules) { + Context context, List modules, CoalescedRow row) { String originalNumber = row.number().getRawInput().getNumber(); if (TextUtils.isEmpty(originalNumber)) { // Skip adding the menu item if the phone number is unknown. @@ -96,92 +92,8 @@ final class Modules { } } - private static void maybeAddModuleForAddingToContacts( - Context context, CoalescedRow row, List modules) { - // TODO(zachh): Only show this for non-spam/blocked numbers. - - // Skip showing the menu item for existing contacts. - if (isExistingContact(row)) { - return; - } - - // Skip showing the menu item if there is no number. - String originalNumber = row.number().getRawInput().getNumber(); - if (TextUtils.isEmpty(originalNumber)) { - return; - } - - Intent intent = new Intent(Intent.ACTION_INSERT_OR_EDIT); - intent.setType(ContactsContract.Contacts.CONTENT_ITEM_TYPE); - intent.putExtra(ContactsContract.Intents.Insert.PHONE, originalNumber); - - if (!TextUtils.isEmpty(row.name())) { - intent.putExtra(ContactsContract.Intents.Insert.NAME, row.name()); - } - modules.add( - new IntentModule( - context, - intent, - R.string.add_to_contacts, - R.drawable.quantum_ic_person_add_vd_theme_24)); - } - - /** - * Lookup URIs are currently fetched from the cached column of the system call log. This URI - * contains encoded information for non-contacts for the purposes of populating contact cards. - * - *

We infer whether a contact is existing or not by checking if the lookup URI is "encoded" or - * not. - * - *

TODO(zachh): We should revisit this once the contact URI is no longer being read from the - * cached column in the system database, in case we decide not to overload the column. - */ - private static boolean isExistingContact(CoalescedRow row) { - return !TextUtils.isEmpty(row.lookupUri()) - && !UriUtils.isEncodedContactUri(Uri.parse(row.lookupUri())); - } - - private static void maybeAddModuleForSendingTextMessage( - Context context, String originalNumber, List modules) { - // TODO(zachh): There are some conditions where this module should not be shown; consider - // voicemail, business numbers, blocked numbers, spam numbers, etc. - if (!TextUtils.isEmpty(originalNumber)) { - modules.add( - new IntentModule( - context, - IntentUtil.getSendSmsIntent(originalNumber), - R.string.send_a_message, - R.drawable.quantum_ic_message_vd_theme_24)); - } - } - - private static void maybeAddModuleForCopyingNumber( - Context context, String originalNumber, List modules) { - if (TextUtils.isEmpty(originalNumber)) { - return; - } - modules.add( - new ContactActionModule() { - @Override - public int getStringId() { - return R.string.copy_number; - } - - @Override - public int getDrawableId() { - return R.drawable.quantum_ic_content_copy_vd_theme_24; - } - - @Override - public boolean onClick() { - ClipboardUtils.copyText(context, null, originalNumber, true); - return false; - } - }); - } - private static void addModuleForAccessingCallDetails( - Context context, CoalescedRow row, List modules) { + Context context, List modules, CoalescedRow row) { // TODO(zachh): Load canReportInaccurateNumber in CallDetailsActivity // (see also isPeopleApiSource(sourceType)). boolean canReportInaccurateNumber = false; diff --git a/java/com/android/dialer/calllog/ui/menu/res/values/strings.xml b/java/com/android/dialer/calllog/ui/menu/res/values/strings.xml index cea1f3877..46fbae3bc 100644 --- a/java/com/android/dialer/calllog/ui/menu/res/values/strings.xml +++ b/java/com/android/dialer/calllog/ui/menu/res/values/strings.xml @@ -17,17 +17,6 @@ - - Add to contacts - - - Copy number - - - Send a message - Call details diff --git a/java/com/android/dialer/contactactions/SharedModules.java b/java/com/android/dialer/contactactions/SharedModules.java new file mode 100644 index 000000000..6c6f6b238 --- /dev/null +++ b/java/com/android/dialer/contactactions/SharedModules.java @@ -0,0 +1,123 @@ +/* + * Copyright (C) 2017 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.contactactions; + +import android.content.Context; +import android.content.Intent; +import android.net.Uri; +import android.provider.ContactsContract; +import android.support.annotation.NonNull; +import android.support.annotation.Nullable; +import android.text.TextUtils; +import com.android.dialer.DialerPhoneNumber; +import com.android.dialer.clipboard.ClipboardUtils; +import com.android.dialer.util.IntentUtil; +import com.android.dialer.util.UriUtils; +import java.util.List; + +/** + * Modules for the bottom sheet that are shared between NewVoicemailFragment and NewCallLogFragment + */ +public class SharedModules { + + public static void maybeAddModuleForAddingToContacts( + Context context, + List modules, + @NonNull DialerPhoneNumber number, + @Nullable String name, + @Nullable String lookupUri) { + // TODO(zachh): Only show this for non-spam/blocked numbers. + + // Skip showing the menu item for existing contacts. + if (isExistingContact(lookupUri)) { + return; + } + + // Skip showing the menu item if there is no number. + String originalNumber = number.getRawInput().getNumber(); + if (TextUtils.isEmpty(originalNumber)) { + return; + } + + Intent intent = new Intent(Intent.ACTION_INSERT_OR_EDIT); + intent.setType(ContactsContract.Contacts.CONTENT_ITEM_TYPE); + intent.putExtra(ContactsContract.Intents.Insert.PHONE, originalNumber); + + if (!TextUtils.isEmpty(name)) { + intent.putExtra(ContactsContract.Intents.Insert.NAME, name); + } + modules.add( + new IntentModule( + context, + intent, + R.string.add_to_contacts, + R.drawable.quantum_ic_person_add_vd_theme_24)); + } + + /** + * Lookup URIs are currently fetched from the cached column of the system call log. This URI + * contains encoded information for non-contacts for the purposes of populating contact cards. + * + *

We infer whether a contact is existing or not by checking if the lookup URI is "encoded" or + * not. + * + *

TODO(zachh): We should revisit this once the contact URI is no longer being read from the + * cached column in the system database, in case we decide not to overload the column. + */ + public static boolean isExistingContact(@Nullable String lookupUri) { + return !TextUtils.isEmpty(lookupUri) && !UriUtils.isEncodedContactUri(Uri.parse(lookupUri)); + } + + public static void maybeAddModuleForSendingTextMessage( + Context context, List modules, String originalNumber) { + // TODO(zachh): There are some conditions where this module should not be shown; consider + // voicemail, business numbers, blocked numbers, spam numbers, etc. + if (!TextUtils.isEmpty(originalNumber)) { + modules.add( + new IntentModule( + context, + IntentUtil.getSendSmsIntent(originalNumber), + R.string.send_a_message, + R.drawable.quantum_ic_message_vd_theme_24)); + } + } + + public static void maybeAddModuleForCopyingNumber( + Context context, List modules, String originalNumber) { + if (TextUtils.isEmpty(originalNumber)) { + return; + } + modules.add( + new ContactActionModule() { + @Override + public int getStringId() { + return R.string.copy_number; + } + + @Override + public int getDrawableId() { + return R.drawable.quantum_ic_content_copy_vd_theme_24; + } + + @Override + public boolean onClick() { + ClipboardUtils.copyText(context, null, originalNumber, true); + return false; + } + }); + } +} diff --git a/java/com/android/dialer/contactactions/res/values/strings.xml b/java/com/android/dialer/contactactions/res/values/strings.xml new file mode 100644 index 000000000..0e953a56d --- /dev/null +++ b/java/com/android/dialer/contactactions/res/values/strings.xml @@ -0,0 +1,29 @@ + + + + + + Add to contacts + + + Send a message + + + Copy number + \ No newline at end of file -- cgit v1.2.3