Loading java/com/android/dialer/calllog/ui/menu/Modules.java +9 −97 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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()); Loading @@ -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. Loading @@ -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; Loading java/com/android/dialer/calllog/ui/menu/res/values/strings.xml +0 −11 Original line number Diff line number Diff line Loading @@ -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> Loading java/com/android/dialer/contactactions/SharedModules.java 0 → 100644 +123 −0 Original line number Diff line number Diff line /* * 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; } }); } } java/com/android/dialer/contactactions/res/values/strings.xml 0 → 100644 +29 −0 Original line number Diff line number Diff line <?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 Loading
java/com/android/dialer/calllog/ui/menu/Modules.java +9 −97 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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()); Loading @@ -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. Loading @@ -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; Loading
java/com/android/dialer/calllog/ui/menu/res/values/strings.xml +0 −11 Original line number Diff line number Diff line Loading @@ -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> Loading
java/com/android/dialer/contactactions/SharedModules.java 0 → 100644 +123 −0 Original line number Diff line number Diff line /* * 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; } }); } }
java/com/android/dialer/contactactions/res/values/strings.xml 0 → 100644 +29 −0 Original line number Diff line number Diff line <?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