diff options
Diffstat (limited to 'java')
4 files changed, 161 insertions, 108 deletions
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<ContactActionModule> 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<ContactActionModule> modules) { + Context context, List<ContactActionModule> 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<ContactActionModule> 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. - * - * <p>We infer whether a contact is existing or not by checking if the lookup URI is "encoded" or - * not. - * - * <p>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<ContactActionModule> 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<ContactActionModule> 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<ContactActionModule> modules) { + Context context, List<ContactActionModule> 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 @@ <resources> - <!-- Option shown in call log menu to add the phone number from an entry to an existing contact - (also provides option to create a new contact from the number). [CHAR LIMIT=30] --> - <string name="add_to_contacts">Add to contacts</string> - - <!-- Option displayed in call log menu to copy phone number. [CHAR LIMIT=30] --> - <string name="copy_number">Copy number</string> - - <!-- Options shown in call log menu to send a SMS to the number represented by the call log entry. - [CHAR LIMIT=30] --> - <string name="send_a_message">Send a message</string> - <!-- Option shown in call log menu to navigate the user to the call details screen where the user can view details for the call log entry. [CHAR LIMIT=30] --> <string name="call_details_menu_label">Call details</string> 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<ContactActionModule> 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. + * + * <p>We infer whether a contact is existing or not by checking if the lookup URI is "encoded" or + * not. + * + * <p>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<ContactActionModule> 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<ContactActionModule> 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 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- + ~ 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 + --> + +<resources> + <!-- Option shown in call log menu/voicemail to add the phone number from an entry to an existing contact + (also provides option to create a new contact from the number). [CHAR LIMIT=30] --> + <string name="add_to_contacts">Add to contacts</string> + + <!-- Options shown in call log/voicemail menu to send a SMS to the number represented by the call log/voicemailentry. + [CHAR LIMIT=30] --> + <string name="send_a_message">Send a message</string> + + <!-- Option displayed in call log/voicemail menu to copy phone number. [CHAR LIMIT=30] --> + <string name="copy_number">Copy number</string> +</resources>
\ No newline at end of file |