diff options
Diffstat (limited to 'java')
-rw-r--r-- | java/com/android/dialer/calllog/ui/menu/DeleteCallLogItemModule.java | 6 | ||||
-rw-r--r-- | java/com/android/dialer/calllog/ui/menu/Modules.java | 108 | ||||
-rw-r--r-- | java/com/android/dialer/calllog/ui/menu/NewCallLogMenu.java | 4 | ||||
-rw-r--r-- | java/com/android/dialer/calllog/ui/menu/PrimaryAction.java | 6 | ||||
-rw-r--r-- | java/com/android/dialer/historyitemactions/AndroidManifest.xml (renamed from java/com/android/dialer/contactactions/AndroidManifest.xml) | 2 | ||||
-rw-r--r-- | java/com/android/dialer/historyitemactions/DividerModule.java (renamed from java/com/android/dialer/contactactions/DividerModule.java) | 8 | ||||
-rw-r--r-- | java/com/android/dialer/historyitemactions/HistoryItemActionBottomSheet.java (renamed from java/com/android/dialer/contactactions/ContactActionBottomSheet.java) | 54 | ||||
-rw-r--r-- | java/com/android/dialer/historyitemactions/HistoryItemActionModule.java (renamed from java/com/android/dialer/contactactions/ContactActionModule.java) | 9 | ||||
-rw-r--r-- | java/com/android/dialer/historyitemactions/HistoryItemPrimaryActionInfo.java (renamed from java/com/android/dialer/contactactions/ContactPrimaryActionInfo.java) | 15 | ||||
-rw-r--r-- | java/com/android/dialer/historyitemactions/IntentModule.java (renamed from java/com/android/dialer/contactactions/IntentModule.java) | 7 | ||||
-rw-r--r-- | java/com/android/dialer/historyitemactions/SharedModules.java (renamed from java/com/android/dialer/contactactions/SharedModules.java) | 208 | ||||
-rw-r--r-- | java/com/android/dialer/historyitemactions/res/drawable-xxxhdpi/ic_unblock.png (renamed from java/com/android/dialer/contactactions/res/drawable-xxxhdpi/ic_unblock.png) | bin | 1034 -> 1034 bytes | |||
-rw-r--r-- | java/com/android/dialer/historyitemactions/res/layout/contact_layout.xml (renamed from java/com/android/dialer/contactactions/res/layout/contact_layout.xml) | 0 | ||||
-rw-r--r-- | java/com/android/dialer/historyitemactions/res/layout/divider_layout.xml (renamed from java/com/android/dialer/contactactions/res/layout/divider_layout.xml) | 0 | ||||
-rw-r--r-- | java/com/android/dialer/historyitemactions/res/layout/module_layout.xml (renamed from java/com/android/dialer/contactactions/res/layout/module_layout.xml) | 0 | ||||
-rw-r--r-- | java/com/android/dialer/historyitemactions/res/layout/sheet_layout.xml (renamed from java/com/android/dialer/contactactions/res/layout/sheet_layout.xml) | 0 | ||||
-rw-r--r-- | java/com/android/dialer/historyitemactions/res/values/dimens.xml (renamed from java/com/android/dialer/contactactions/res/values/dimens.xml) | 0 | ||||
-rw-r--r-- | java/com/android/dialer/historyitemactions/res/values/strings.xml (renamed from java/com/android/dialer/contactactions/res/values/strings.xml) | 0 | ||||
-rw-r--r-- | java/com/android/dialer/voicemail/listui/menu/Modules.java | 67 | ||||
-rw-r--r-- | java/com/android/dialer/voicemail/listui/menu/NewVoicemailMenu.java | 4 | ||||
-rw-r--r-- | java/com/android/dialer/voicemail/listui/menu/PrimaryAction.java | 6 |
21 files changed, 265 insertions, 239 deletions
diff --git a/java/com/android/dialer/calllog/ui/menu/DeleteCallLogItemModule.java b/java/com/android/dialer/calllog/ui/menu/DeleteCallLogItemModule.java index ac2e3b3da..ad5671e45 100644 --- a/java/com/android/dialer/calllog/ui/menu/DeleteCallLogItemModule.java +++ b/java/com/android/dialer/calllog/ui/menu/DeleteCallLogItemModule.java @@ -28,13 +28,13 @@ import com.android.dialer.common.LogUtil; import com.android.dialer.common.concurrent.DialerExecutor.Worker; import com.android.dialer.common.concurrent.DialerExecutorComponent; import com.android.dialer.common.database.Selection; -import com.android.dialer.contactactions.ContactActionModule; +import com.android.dialer.historyitemactions.HistoryItemActionModule; import java.lang.ref.WeakReference; import java.util.ArrayList; import java.util.List; -/** {@link ContactActionModule} for deleting a call log item in the new call log. */ -public final class DeleteCallLogItemModule implements ContactActionModule { +/** {@link HistoryItemActionModule} for deleting a call log item in the new call log. */ +public final class DeleteCallLogItemModule implements HistoryItemActionModule { private static final String TAG = DeleteCallLogItemModule.class.getName(); private final Context context; diff --git a/java/com/android/dialer/calllog/ui/menu/Modules.java b/java/com/android/dialer/calllog/ui/menu/Modules.java index d86c04dd5..147972710 100644 --- a/java/com/android/dialer/calllog/ui/menu/Modules.java +++ b/java/com/android/dialer/calllog/ui/menu/Modules.java @@ -25,36 +25,42 @@ import com.android.dialer.callintent.CallInitiationType; import com.android.dialer.calllog.model.CoalescedRow; import com.android.dialer.calllogutils.CallLogContactTypes; import com.android.dialer.calllogutils.PhoneNumberDisplayUtil; -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.historyitemactions.DividerModule; +import com.android.dialer.historyitemactions.HistoryItemActionModule; +import com.android.dialer.historyitemactions.IntentModule; +import com.android.dialer.historyitemactions.SharedModules; import com.android.dialer.logging.ReportingLocation; import com.android.dialer.phonenumberutil.PhoneNumberHelper; import com.android.dialer.telecom.TelecomUtil; import com.google.common.base.Optional; import java.util.ArrayList; +import java.util.Collections; import java.util.List; /** * Configures the modules for the bottom sheet; these are the rows below the top row (primary * action) in the bottom sheet. */ +@SuppressWarnings("Guava") final class Modules { - static List<ContactActionModule> fromRow(Context context, CoalescedRow row) { + static List<HistoryItemActionModule> fromRow(Context context, CoalescedRow row) { // Conditionally add each module, which are items in the bottom sheet's menu. - List<ContactActionModule> modules = new ArrayList<>(); + List<HistoryItemActionModule> modules = new ArrayList<>(); String normalizedNumber = row.number().getNormalizedNumber(); boolean canPlaceCalls = PhoneNumberHelper.canPlaceCallsTo(normalizedNumber, row.numberPresentation()); if (canPlaceCalls) { - addModuleForCalls(context, modules, row, normalizedNumber); - SharedModules.maybeAddModuleForSendingTextMessage( - context, modules, normalizedNumber, row.numberAttributes().getIsBlocked()); + modules.addAll(createModulesForCalls(context, row, normalizedNumber)); + Optional<HistoryItemActionModule> moduleForSendingTextMessage = + SharedModules.createModuleForSendingTextMessage( + context, normalizedNumber, row.numberAttributes().getIsBlocked()); + if (moduleForSendingTextMessage.isPresent()) { + modules.add(moduleForSendingTextMessage.get()); + } } if (!modules.isEmpty()) { @@ -65,45 +71,52 @@ final class Modules { // TODO(zachh): Module for CallComposer. if (canPlaceCalls) { - SharedModules.maybeAddModuleForAddingToContacts( - context, - modules, - row.number(), - row.numberAttributes().getName(), - row.numberAttributes().getLookupUri(), - row.numberAttributes().getIsBlocked(), - row.numberAttributes().getIsSpam()); - SharedModules.addModulesHandlingBlockedOrSpamNumber( - context, - modules, - row.number().getNormalizedNumber(), - row.number().getCountryIso(), - row.callType(), - row.numberAttributes().getIsBlocked(), - row.numberAttributes().getIsSpam(), - ReportingLocation.Type.CALL_LOG_HISTORY); - SharedModules.maybeAddModuleForCopyingNumber(context, modules, normalizedNumber); + Optional<HistoryItemActionModule> moduleForAddingToContacts = + SharedModules.createModuleForAddingToContacts( + context, + row.number(), + row.numberAttributes().getName(), + row.numberAttributes().getLookupUri(), + row.numberAttributes().getIsBlocked(), + row.numberAttributes().getIsSpam()); + if (moduleForAddingToContacts.isPresent()) { + modules.add(moduleForAddingToContacts.get()); + } + + modules.addAll( + SharedModules.createModulesHandlingBlockedOrSpamNumber( + context, + row.number().getNormalizedNumber(), + row.number().getCountryIso(), + row.callType(), + row.numberAttributes().getIsBlocked(), + row.numberAttributes().getIsSpam(), + ReportingLocation.Type.CALL_LOG_HISTORY)); + + Optional<HistoryItemActionModule> moduleForCopyingNumber = + SharedModules.createModuleForCopyingNumber(context, normalizedNumber); + if (moduleForCopyingNumber.isPresent()) { + modules.add(moduleForCopyingNumber.get()); + } } // TODO(zachh): Revisit if DialerContact is the best thing to pass to CallDetails; could - // it use a ContactPrimaryActionInfo instead? - addModuleForAccessingCallDetails(context, modules, row); + // it use a HistoryItemPrimaryActionInfo instead? + modules.add(createModuleForAccessingCallDetails(context, row)); modules.add(new DeleteCallLogItemModule(context, row.coalescedIds())); return modules; } - private static void addModuleForCalls( - Context context, - List<ContactActionModule> modules, - CoalescedRow row, - String normalizedNumber) { + private static List<HistoryItemActionModule> createModulesForCalls( + Context context, CoalescedRow row, String normalizedNumber) { // Don't add call options if a number is blocked. if (row.numberAttributes().getIsBlocked()) { - return; + return Collections.emptyList(); } + List<HistoryItemActionModule> modules = new ArrayList<>(); PhoneAccountHandle phoneAccountHandle = TelecomUtil.composePhoneAccountHandle( row.phoneAccountComponentName(), row.phoneAccountId()); @@ -123,24 +136,25 @@ final class Modules { // TODO(zachh): Also show video option if the call log entry is for an audio call but video // capabilities are present? + + return modules; } - private static void addModuleForAccessingCallDetails( - Context context, List<ContactActionModule> modules, CoalescedRow row) { + private static HistoryItemActionModule createModuleForAccessingCallDetails( + Context context, CoalescedRow row) { boolean canReportAsInvalidNumber = row.numberAttributes().getCanReportAsInvalidNumber(); boolean canSupportAssistedDialing = !TextUtils.isEmpty(row.numberAttributes().getLookupUri()); - modules.add( - new IntentModule( + return new IntentModule( + context, + CallDetailsActivity.newInstance( context, - CallDetailsActivity.newInstance( - context, - row.coalescedIds(), - createDialerContactFromRow(context, row), - canReportAsInvalidNumber, - canSupportAssistedDialing), - R.string.call_details_menu_label, - R.drawable.quantum_ic_info_outline_vd_theme_24)); + row.coalescedIds(), + createDialerContactFromRow(context, row), + canReportAsInvalidNumber, + canSupportAssistedDialing), + R.string.call_details_menu_label, + R.drawable.quantum_ic_info_outline_vd_theme_24); } private static DialerContact createDialerContactFromRow(Context context, CoalescedRow row) { diff --git a/java/com/android/dialer/calllog/ui/menu/NewCallLogMenu.java b/java/com/android/dialer/calllog/ui/menu/NewCallLogMenu.java index 02724e628..9efe907e3 100644 --- a/java/com/android/dialer/calllog/ui/menu/NewCallLogMenu.java +++ b/java/com/android/dialer/calllog/ui/menu/NewCallLogMenu.java @@ -22,8 +22,8 @@ import android.view.View; import com.android.dialer.calllog.CallLogComponent; import com.android.dialer.calllog.model.CoalescedRow; import com.android.dialer.common.concurrent.DefaultFutureCallback; -import com.android.dialer.contactactions.ContactActionBottomSheet; import com.android.dialer.glidephotomanager.GlidePhotoManager; +import com.android.dialer.historyitemactions.HistoryItemActionBottomSheet; import com.google.common.util.concurrent.Futures; import com.google.common.util.concurrent.MoreExecutors; @@ -34,7 +34,7 @@ public final class NewCallLogMenu { public static View.OnClickListener createOnClickListener( Context context, CoalescedRow row, GlidePhotoManager glidePhotoManager) { return view -> { - ContactActionBottomSheet.show( + HistoryItemActionBottomSheet.show( context, PrimaryAction.fromRow(context, row), Modules.fromRow(context, row), diff --git a/java/com/android/dialer/calllog/ui/menu/PrimaryAction.java b/java/com/android/dialer/calllog/ui/menu/PrimaryAction.java index 92a8453f4..de4a70c30 100644 --- a/java/com/android/dialer/calllog/ui/menu/PrimaryAction.java +++ b/java/com/android/dialer/calllog/ui/menu/PrimaryAction.java @@ -22,14 +22,14 @@ import com.android.dialer.calllog.model.CoalescedRow; import com.android.dialer.calllogutils.CallLogEntryText; import com.android.dialer.calllogutils.CallLogIntents; import com.android.dialer.calllogutils.NumberAttributesConverter; -import com.android.dialer.contactactions.ContactPrimaryActionInfo; +import com.android.dialer.historyitemactions.HistoryItemPrimaryActionInfo; /** Configures the primary action row (top row) for the bottom sheet. */ final class PrimaryAction { - static ContactPrimaryActionInfo fromRow(Context context, CoalescedRow row) { + static HistoryItemPrimaryActionInfo fromRow(Context context, CoalescedRow row) { CharSequence primaryText = CallLogEntryText.buildPrimaryText(context, row); - return ContactPrimaryActionInfo.builder() + return HistoryItemPrimaryActionInfo.builder() .setNumber(row.number()) .setPhotoInfo( NumberAttributesConverter.toPhotoInfoBuilder(row.numberAttributes()) diff --git a/java/com/android/dialer/contactactions/AndroidManifest.xml b/java/com/android/dialer/historyitemactions/AndroidManifest.xml index a64066e0b..4d302685f 100644 --- a/java/com/android/dialer/contactactions/AndroidManifest.xml +++ b/java/com/android/dialer/historyitemactions/AndroidManifest.xml @@ -13,4 +13,4 @@ ~ See the License for the specific language governing permissions and ~ limitations under the License --> -<manifest package="com.android.dialer.contactactions"/> +<manifest package="com.android.dialer.historyitemactions"/> diff --git a/java/com/android/dialer/contactactions/DividerModule.java b/java/com/android/dialer/historyitemactions/DividerModule.java index aabd160db..a5ca62abe 100644 --- a/java/com/android/dialer/contactactions/DividerModule.java +++ b/java/com/android/dialer/historyitemactions/DividerModule.java @@ -14,15 +14,15 @@ * limitations under the License. */ -package com.android.dialer.contactactions; +package com.android.dialer.historyitemactions; import com.android.dialer.common.Assert; /** - * A module that inserts a grey line divider into {@link ContactActionModule}. Layout it provided in - * R.layout.divider_layout.xml + * A module that inserts a grey line divider into {@link HistoryItemActionModule}. Layout it + * provided in R.layout.divider_layout.xml */ -public final class DividerModule implements ContactActionModule { +public final class DividerModule implements HistoryItemActionModule { @Override public int getStringId() { diff --git a/java/com/android/dialer/contactactions/ContactActionBottomSheet.java b/java/com/android/dialer/historyitemactions/HistoryItemActionBottomSheet.java index 98a5dd115..47aa1003f 100644 --- a/java/com/android/dialer/contactactions/ContactActionBottomSheet.java +++ b/java/com/android/dialer/historyitemactions/HistoryItemActionBottomSheet.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.android.dialer.contactactions; +package com.android.dialer.historyitemactions; import android.content.Context; import android.os.Bundle; @@ -32,37 +32,38 @@ import com.android.dialer.glidephotomanager.GlidePhotoManager; import java.util.List; /** - * {@link BottomSheetDialog} used for building a list of contact actions in a bottom sheet menu. + * {@link BottomSheetDialog} used to show a list of actions in a bottom sheet menu. * - * <p>{@link #show(Context, ContactPrimaryActionInfo, List)} should be used to create and display - * the menu. Modules are built using {@link ContactActionModule} and some defaults are provided by - * {@link IntentModule} and {@link DividerModule}. + * <p>{@link #show(Context, HistoryItemPrimaryActionInfo, List, GlidePhotoManager)} should be used + * to create and display the menu. Modules are built using {@link HistoryItemActionModule} and some + * defaults are provided by {@link IntentModule} and {@link DividerModule}. */ -public class ContactActionBottomSheet extends BottomSheetDialog implements OnClickListener { +public class HistoryItemActionBottomSheet extends BottomSheetDialog implements OnClickListener { - private final List<ContactActionModule> modules; - private final ContactPrimaryActionInfo contactPrimaryActionInfo; + private final List<HistoryItemActionModule> modules; + private final HistoryItemPrimaryActionInfo historyItemPrimaryActionInfo; private final GlidePhotoManager glidePhotoManager; - private ContactActionBottomSheet( + private HistoryItemActionBottomSheet( Context context, - ContactPrimaryActionInfo contactPrimaryActionInfo, - List<ContactActionModule> modules, + HistoryItemPrimaryActionInfo historyItemPrimaryActionInfo, + List<HistoryItemActionModule> modules, GlidePhotoManager glidePhotoManager) { super(context); this.modules = modules; - this.contactPrimaryActionInfo = contactPrimaryActionInfo; + this.historyItemPrimaryActionInfo = historyItemPrimaryActionInfo; this.glidePhotoManager = glidePhotoManager; setContentView(LayoutInflater.from(context).inflate(R.layout.sheet_layout, null)); } - public static ContactActionBottomSheet show( + public static HistoryItemActionBottomSheet show( Context context, - ContactPrimaryActionInfo contactPrimaryActionInfo, - List<ContactActionModule> modules, + HistoryItemPrimaryActionInfo historyItemPrimaryActionInfo, + List<HistoryItemActionModule> modules, GlidePhotoManager glidePhotoManager) { - ContactActionBottomSheet sheet = - new ContactActionBottomSheet(context, contactPrimaryActionInfo, modules, glidePhotoManager); + HistoryItemActionBottomSheet sheet = + new HistoryItemActionBottomSheet( + context, historyItemPrimaryActionInfo, modules, glidePhotoManager); sheet.show(); return sheet; } @@ -73,7 +74,7 @@ public class ContactActionBottomSheet extends BottomSheetDialog implements OnCli LinearLayout container = Assert.isNotNull(findViewById(R.id.action_container)); container.addView(getContactView(container)); - for (ContactActionModule module : modules) { + for (HistoryItemActionModule module : modules) { if (module instanceof DividerModule) { container.addView(getDividerView(container)); } else { @@ -88,22 +89,23 @@ public class ContactActionBottomSheet extends BottomSheetDialog implements OnCli // TODO(zachh): The contact image should be badged with a video icon if it is for a video call. glidePhotoManager.loadQuickContactBadge( - contactView.findViewById(R.id.quick_contact_photo), contactPrimaryActionInfo.photoInfo()); + contactView.findViewById(R.id.quick_contact_photo), + historyItemPrimaryActionInfo.photoInfo()); TextView primaryTextView = contactView.findViewById(R.id.primary_text); TextView secondaryTextView = contactView.findViewById(R.id.secondary_text); - primaryTextView.setText(contactPrimaryActionInfo.primaryText()); - if (!TextUtils.isEmpty(contactPrimaryActionInfo.secondaryText())) { - secondaryTextView.setText(contactPrimaryActionInfo.secondaryText()); + primaryTextView.setText(historyItemPrimaryActionInfo.primaryText()); + if (!TextUtils.isEmpty(historyItemPrimaryActionInfo.secondaryText())) { + secondaryTextView.setText(historyItemPrimaryActionInfo.secondaryText()); } else { secondaryTextView.setVisibility(View.GONE); secondaryTextView.setText(null); } - if (contactPrimaryActionInfo.intent() != null) { + if (historyItemPrimaryActionInfo.intent() != null) { contactView.setOnClickListener( (view) -> { - getContext().startActivity(contactPrimaryActionInfo.intent()); + getContext().startActivity(historyItemPrimaryActionInfo.intent()); dismiss(); }); } @@ -115,7 +117,7 @@ public class ContactActionBottomSheet extends BottomSheetDialog implements OnCli return inflater.inflate(R.layout.divider_layout, container, false); } - private View getModuleView(ViewGroup container, ContactActionModule module) { + private View getModuleView(ViewGroup container, HistoryItemActionModule module) { LayoutInflater inflater = LayoutInflater.from(getContext()); View moduleView = inflater.inflate(R.layout.module_layout, container, false); ((TextView) moduleView.findViewById(R.id.module_text)).setText(module.getStringId()); @@ -128,7 +130,7 @@ public class ContactActionBottomSheet extends BottomSheetDialog implements OnCli @Override public void onClick(View view) { - if (((ContactActionModule) view.getTag()).onClick()) { + if (((HistoryItemActionModule) view.getTag()).onClick()) { dismiss(); } } diff --git a/java/com/android/dialer/contactactions/ContactActionModule.java b/java/com/android/dialer/historyitemactions/HistoryItemActionModule.java index 8089edc7b..d64cbca53 100644 --- a/java/com/android/dialer/contactactions/ContactActionModule.java +++ b/java/com/android/dialer/historyitemactions/HistoryItemActionModule.java @@ -14,18 +14,17 @@ * limitations under the License. */ -package com.android.dialer.contactactions; +package com.android.dialer.historyitemactions; import android.support.annotation.DrawableRes; import android.support.annotation.StringRes; /** - * Modules used to build {@link ContactActionBottomSheet}. + * Modules used to build {@link HistoryItemActionBottomSheet}. * - * <p>Contacts as they relate to this class should be thought of as any entity that an action can be - * performed on like unknown/restricted contacts, along with saved and non-saved contacts. + * <p>A history item is one that is displayed in the call log or the voicemail fragment. */ -public interface ContactActionModule { +public interface HistoryItemActionModule { @StringRes int getStringId(); diff --git a/java/com/android/dialer/contactactions/ContactPrimaryActionInfo.java b/java/com/android/dialer/historyitemactions/HistoryItemPrimaryActionInfo.java index 5017d83b9..f4338ce7a 100644 --- a/java/com/android/dialer/contactactions/ContactPrimaryActionInfo.java +++ b/java/com/android/dialer/historyitemactions/HistoryItemPrimaryActionInfo.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.android.dialer.contactactions; +package com.android.dialer.historyitemactions; import android.content.Intent; import android.support.annotation.NonNull; @@ -23,13 +23,12 @@ import com.android.dialer.glidephotomanager.PhotoInfo; import com.google.auto.value.AutoValue; /** - * Contains information necessary to construct the primary action for a contact bottom sheet. + * Contains information necessary to construct the primary action for a history item's bottom sheet. * - * <p>This may include information about the call, for instance when the bottom sheet is shown from - * the call log. + * <p>A history item is one that is displayed in the call log or the voicemail fragment. */ @AutoValue -public abstract class ContactPrimaryActionInfo { +public abstract class HistoryItemPrimaryActionInfo { @Nullable public abstract DialerPhoneNumber number(); @@ -52,7 +51,7 @@ public abstract class ContactPrimaryActionInfo { // TODO(zachh): Add SIM info here if should be shown in bottom sheet. - /** Builder for {@link ContactPrimaryActionInfo}. */ + /** Builder for {@link HistoryItemPrimaryActionInfo}. */ @AutoValue.Builder public abstract static class Builder { public abstract Builder setNumber(@Nullable DialerPhoneNumber dialerPhoneNumber); @@ -65,10 +64,10 @@ public abstract class ContactPrimaryActionInfo { public abstract Builder setIntent(@Nullable Intent intent); - public abstract ContactPrimaryActionInfo build(); + public abstract HistoryItemPrimaryActionInfo build(); } public static Builder builder() { - return new AutoValue_ContactPrimaryActionInfo.Builder(); + return new AutoValue_HistoryItemPrimaryActionInfo.Builder(); } } diff --git a/java/com/android/dialer/contactactions/IntentModule.java b/java/com/android/dialer/historyitemactions/IntentModule.java index 9a345c669..dfe9bb064 100644 --- a/java/com/android/dialer/contactactions/IntentModule.java +++ b/java/com/android/dialer/historyitemactions/IntentModule.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.android.dialer.contactactions; +package com.android.dialer.historyitemactions; import android.content.Context; import android.content.Intent; @@ -28,9 +28,10 @@ import com.android.dialer.precall.PreCall; import com.android.dialer.util.DialerUtils; /** - * {@link ContactActionModule} useful for making easy to build modules based on starting an intent. + * {@link HistoryItemActionModule} useful for making easy to build modules based on starting an + * intent. */ -public class IntentModule implements ContactActionModule { +public class IntentModule implements HistoryItemActionModule { private final Context context; private final Intent intent; diff --git a/java/com/android/dialer/contactactions/SharedModules.java b/java/com/android/dialer/historyitemactions/SharedModules.java index 3007a5990..7cfee37bb 100644 --- a/java/com/android/dialer/contactactions/SharedModules.java +++ b/java/com/android/dialer/historyitemactions/SharedModules.java @@ -14,7 +14,7 @@ * limitations under the License */ -package com.android.dialer.contactactions; +package com.android.dialer.historyitemactions; import android.content.Context; import android.content.Intent; @@ -29,17 +29,19 @@ import com.android.dialer.clipboard.ClipboardUtils; import com.android.dialer.logging.ReportingLocation; import com.android.dialer.util.IntentUtil; import com.android.dialer.util.UriUtils; +import com.google.common.base.Optional; +import java.util.ArrayList; import java.util.List; import java.util.Locale; /** * Modules for the bottom sheet that are shared between NewVoicemailFragment and NewCallLogFragment */ +@SuppressWarnings("Guava") public class SharedModules { - public static void maybeAddModuleForAddingToContacts( + public static Optional<HistoryItemActionModule> createModuleForAddingToContacts( Context context, - List<ContactActionModule> modules, DialerPhoneNumber dialerPhoneNumber, String name, String lookupUri, @@ -47,18 +49,18 @@ public class SharedModules { boolean isSpam) { // Skip showing the menu item for a spam/blocked number. if (isBlocked || isSpam) { - return; + return Optional.absent(); } // Skip showing the menu item for existing contacts. if (isExistingContact(lookupUri)) { - return; + return Optional.absent(); } // Skip showing the menu item if there is no number. String normalizedNumber = dialerPhoneNumber.getNormalizedNumber(); if (TextUtils.isEmpty(normalizedNumber)) { - return; + return Optional.absent(); } Intent intent = new Intent(Intent.ACTION_INSERT_OR_EDIT); @@ -68,7 +70,8 @@ public class SharedModules { if (!TextUtils.isEmpty(name)) { intent.putExtra(ContactsContract.Intents.Insert.NAME, name); } - modules.add( + + return Optional.of( new IntentModule( context, intent, @@ -86,31 +89,28 @@ public class SharedModules { * <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) { + private 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 normalizedNumber, - boolean isBlocked) { + public static Optional<HistoryItemActionModule> createModuleForSendingTextMessage( + Context context, String normalizedNumber, boolean isBlocked) { // Don't show the option to send a text message if the number is blocked. if (isBlocked) { - return; + return Optional.absent(); } // TODO(zachh): There are some conditions where this module should not be shown; consider // voicemail, business numbers, etc. - if (!TextUtils.isEmpty(normalizedNumber)) { - modules.add( - new IntentModule( - context, - IntentUtil.getSendSmsIntent(normalizedNumber), - R.string.send_a_message, - R.drawable.quantum_ic_message_vd_theme_24)); - } + return !TextUtils.isEmpty(normalizedNumber) + ? Optional.of( + new IntentModule( + context, + IntentUtil.getSendSmsIntent(normalizedNumber), + R.string.send_a_message, + R.drawable.quantum_ic_message_vd_theme_24)) + : Optional.absent(); } /** @@ -122,34 +122,38 @@ public class SharedModules { * @param reportingLocation The location where the number is reported. See {@link * ReportingLocation.Type}. */ - public static void addModulesHandlingBlockedOrSpamNumber( + public static List<HistoryItemActionModule> createModulesHandlingBlockedOrSpamNumber( Context context, - List<ContactActionModule> modules, String normalizedNumber, String countryIso, int callType, boolean isBlocked, boolean isSpam, ReportingLocation.Type reportingLocation) { + List<HistoryItemActionModule> modules = new ArrayList<>(); + // For a spam number, add two options: // (1) "Not spam" and "Block", or // (2) "Not spam" and "Unblock". if (isSpam) { - addModuleForMarkingNumberAsNonSpam( - context, modules, normalizedNumber, countryIso, callType, reportingLocation); - addModuleForBlockingOrUnblockingNumber(context, modules, normalizedNumber, isBlocked); - return; + modules.add( + createModuleForMarkingNumberAsNonSpam( + context, normalizedNumber, countryIso, callType, reportingLocation)); + modules.add(createModuleForBlockingOrUnblockingNumber(context, normalizedNumber, isBlocked)); + return modules; } // For a blocked non-spam number, add "Unblock" option. if (isBlocked) { - addModuleForBlockingOrUnblockingNumber(context, modules, normalizedNumber, isBlocked); - return; + modules.add(createModuleForBlockingOrUnblockingNumber(context, normalizedNumber, isBlocked)); + return modules; } // For a number that is neither a spam number nor blocked, add "Block/Report spam" option. - addModuleForBlockingNumberAndOptionallyReportingSpam( - context, modules, normalizedNumber, countryIso, callType, reportingLocation); + modules.add( + createModuleForBlockingNumberAndOptionallyReportingSpam( + context, normalizedNumber, countryIso, callType, reportingLocation)); + return modules; } /** @@ -161,67 +165,61 @@ public class SharedModules { * @param reportingLocation The location where the number is reported. See {@link * ReportingLocation.Type}. */ - private static void addModuleForMarkingNumberAsNonSpam( + private static HistoryItemActionModule createModuleForMarkingNumberAsNonSpam( Context context, - List<ContactActionModule> modules, String normalizedNumber, String countryIso, int callType, ReportingLocation.Type reportingLocation) { - modules.add( - new ContactActionModule() { - @Override - public int getStringId() { - return R.string.not_spam; - } + return new HistoryItemActionModule() { + @Override + public int getStringId() { + return R.string.not_spam; + } - @Override - public int getDrawableId() { - return R.drawable.quantum_ic_report_off_vd_theme_24; - } + @Override + public int getDrawableId() { + return R.drawable.quantum_ic_report_off_vd_theme_24; + } - @Override - public boolean onClick() { - ShowBlockReportSpamDialogNotifier.notifyShowDialogToReportNotSpam( - context, normalizedNumber, countryIso, callType, reportingLocation); - return true; // Close the bottom sheet. - } - }); + @Override + public boolean onClick() { + ShowBlockReportSpamDialogNotifier.notifyShowDialogToReportNotSpam( + context, normalizedNumber, countryIso, callType, reportingLocation); + return true; // Close the bottom sheet. + } + }; } - private static void addModuleForBlockingOrUnblockingNumber( - Context context, - List<ContactActionModule> modules, - String normalizedNumber, - boolean isBlocked) { - modules.add( - new ContactActionModule() { - @Override - public int getStringId() { - return isBlocked ? R.string.unblock_number : R.string.block_number; - } + private static HistoryItemActionModule createModuleForBlockingOrUnblockingNumber( + Context context, String normalizedNumber, boolean isBlocked) { + return new HistoryItemActionModule() { + @Override + public int getStringId() { + return isBlocked ? R.string.unblock_number : R.string.block_number; + } - @Override - public int getDrawableId() { - return isBlocked - ? R.drawable.ic_unblock // TODO(a bug): use a vector icon - : R.drawable.quantum_ic_block_vd_theme_24; - } + @Override + public int getDrawableId() { + return isBlocked + ? R.drawable.ic_unblock // TODO(a bug): use a vector icon + : R.drawable.quantum_ic_block_vd_theme_24; + } - @Override - public boolean onClick() { - // TODO(a bug): implement this method. - Toast.makeText( - context, - String.format( - Locale.ENGLISH, - "TODO: " + (isBlocked ? "Unblock " : "Block ") + " number %s.", - normalizedNumber), - Toast.LENGTH_SHORT) - .show(); - return true; // Close the bottom sheet. - } - }); + @Override + public boolean onClick() { + // TODO(a bug): implement this method. + Toast.makeText( + context, + String.format( + Locale.ENGLISH, + "TODO: " + (isBlocked ? "Unblock " : "Block ") + " number %s.", + normalizedNumber), + Toast.LENGTH_SHORT) + .show(); + return true; // Close the bottom sheet. + } + }; } /** @@ -233,41 +231,39 @@ public class SharedModules { * @param reportingLocation The location where the number is reported. See {@link * ReportingLocation.Type}. */ - private static void addModuleForBlockingNumberAndOptionallyReportingSpam( + private static HistoryItemActionModule createModuleForBlockingNumberAndOptionallyReportingSpam( Context context, - List<ContactActionModule> modules, String normalizedNumber, String countryIso, int callType, ReportingLocation.Type reportingLocation) { - modules.add( - new ContactActionModule() { - @Override - public int getStringId() { - return R.string.block_and_optionally_report_spam; - } + return new HistoryItemActionModule() { + @Override + public int getStringId() { + return R.string.block_and_optionally_report_spam; + } - @Override - public int getDrawableId() { - return R.drawable.quantum_ic_block_vd_theme_24; - } + @Override + public int getDrawableId() { + return R.drawable.quantum_ic_block_vd_theme_24; + } - @Override - public boolean onClick() { - ShowBlockReportSpamDialogNotifier.notifyShowDialogToBlockNumberAndOptionallyReportSpam( - context, normalizedNumber, countryIso, callType, reportingLocation); - return true; // Close the bottom sheet. - } - }); + @Override + public boolean onClick() { + ShowBlockReportSpamDialogNotifier.notifyShowDialogToBlockNumberAndOptionallyReportSpam( + context, normalizedNumber, countryIso, callType, reportingLocation); + return true; // Close the bottom sheet. + } + }; } - public static void maybeAddModuleForCopyingNumber( - Context context, List<ContactActionModule> modules, String normalizedNumber) { + public static Optional<HistoryItemActionModule> createModuleForCopyingNumber( + Context context, String normalizedNumber) { if (TextUtils.isEmpty(normalizedNumber)) { - return; + return Optional.absent(); } - modules.add( - new ContactActionModule() { + return Optional.of( + new HistoryItemActionModule() { @Override public int getStringId() { return R.string.copy_number; diff --git a/java/com/android/dialer/contactactions/res/drawable-xxxhdpi/ic_unblock.png b/java/com/android/dialer/historyitemactions/res/drawable-xxxhdpi/ic_unblock.png Binary files differindex 01551e2fc..01551e2fc 100644 --- a/java/com/android/dialer/contactactions/res/drawable-xxxhdpi/ic_unblock.png +++ b/java/com/android/dialer/historyitemactions/res/drawable-xxxhdpi/ic_unblock.png diff --git a/java/com/android/dialer/contactactions/res/layout/contact_layout.xml b/java/com/android/dialer/historyitemactions/res/layout/contact_layout.xml index 4deef3e07..4deef3e07 100644 --- a/java/com/android/dialer/contactactions/res/layout/contact_layout.xml +++ b/java/com/android/dialer/historyitemactions/res/layout/contact_layout.xml diff --git a/java/com/android/dialer/contactactions/res/layout/divider_layout.xml b/java/com/android/dialer/historyitemactions/res/layout/divider_layout.xml index fdee50e48..fdee50e48 100644 --- a/java/com/android/dialer/contactactions/res/layout/divider_layout.xml +++ b/java/com/android/dialer/historyitemactions/res/layout/divider_layout.xml diff --git a/java/com/android/dialer/contactactions/res/layout/module_layout.xml b/java/com/android/dialer/historyitemactions/res/layout/module_layout.xml index 9aee67937..9aee67937 100644 --- a/java/com/android/dialer/contactactions/res/layout/module_layout.xml +++ b/java/com/android/dialer/historyitemactions/res/layout/module_layout.xml diff --git a/java/com/android/dialer/contactactions/res/layout/sheet_layout.xml b/java/com/android/dialer/historyitemactions/res/layout/sheet_layout.xml index 6984367bf..6984367bf 100644 --- a/java/com/android/dialer/contactactions/res/layout/sheet_layout.xml +++ b/java/com/android/dialer/historyitemactions/res/layout/sheet_layout.xml diff --git a/java/com/android/dialer/contactactions/res/values/dimens.xml b/java/com/android/dialer/historyitemactions/res/values/dimens.xml index 47bf804ac..47bf804ac 100644 --- a/java/com/android/dialer/contactactions/res/values/dimens.xml +++ b/java/com/android/dialer/historyitemactions/res/values/dimens.xml diff --git a/java/com/android/dialer/contactactions/res/values/strings.xml b/java/com/android/dialer/historyitemactions/res/values/strings.xml index 4d598a930..4d598a930 100644 --- a/java/com/android/dialer/contactactions/res/values/strings.xml +++ b/java/com/android/dialer/historyitemactions/res/values/strings.xml diff --git a/java/com/android/dialer/voicemail/listui/menu/Modules.java b/java/com/android/dialer/voicemail/listui/menu/Modules.java index 76ce172b8..9473b80e1 100644 --- a/java/com/android/dialer/voicemail/listui/menu/Modules.java +++ b/java/com/android/dialer/voicemail/listui/menu/Modules.java @@ -17,11 +17,12 @@ package com.android.dialer.voicemail.listui.menu; import android.content.Context; -import com.android.dialer.contactactions.ContactActionModule; -import com.android.dialer.contactactions.DividerModule; -import com.android.dialer.contactactions.SharedModules; +import com.android.dialer.historyitemactions.DividerModule; +import com.android.dialer.historyitemactions.HistoryItemActionModule; +import com.android.dialer.historyitemactions.SharedModules; import com.android.dialer.logging.ReportingLocation; import com.android.dialer.voicemail.model.VoicemailEntry; +import com.google.common.base.Optional; import java.util.ArrayList; import java.util.List; @@ -29,43 +30,57 @@ import java.util.List; * Configures the modules for the voicemail bottom sheet; these are the rows below the top row * (primary action) in the bottom sheet. */ +@SuppressWarnings("Guava") final class Modules { - static List<ContactActionModule> fromVoicemailEntry( + static List<HistoryItemActionModule> fromVoicemailEntry( Context context, VoicemailEntry voicemailEntry) { // Conditionally add each module, which are items in the bottom sheet's menu. - List<ContactActionModule> modules = new ArrayList<>(); + List<HistoryItemActionModule> modules = new ArrayList<>(); // TODO(uabdullah): Handle maybeAddModuleForVideoOrAudioCall(context, modules, row); - SharedModules.maybeAddModuleForAddingToContacts( - context, - modules, - voicemailEntry.number(), - voicemailEntry.numberAttributes().getName(), - voicemailEntry.numberAttributes().getLookupUri(), - voicemailEntry.numberAttributes().getIsBlocked(), - voicemailEntry.numberAttributes().getIsSpam()); + Optional<HistoryItemActionModule> moduleForAddingContacts = + SharedModules.createModuleForAddingToContacts( + context, + voicemailEntry.number(), + voicemailEntry.numberAttributes().getName(), + voicemailEntry.numberAttributes().getLookupUri(), + voicemailEntry.numberAttributes().getIsBlocked(), + voicemailEntry.numberAttributes().getIsSpam()); + if (moduleForAddingContacts.isPresent()) { + modules.add(moduleForAddingContacts.get()); + } - String normalizedNumber = voicemailEntry.number().getNormalizedNumber(); - SharedModules.maybeAddModuleForSendingTextMessage( - context, modules, normalizedNumber, voicemailEntry.numberAttributes().getIsBlocked()); + Optional<HistoryItemActionModule> moduleForSendingTextMessage = + SharedModules.createModuleForSendingTextMessage( + context, + voicemailEntry.number().getNormalizedNumber(), + voicemailEntry.numberAttributes().getIsBlocked()); + if (moduleForSendingTextMessage.isPresent()) { + modules.add(moduleForSendingTextMessage.get()); + } if (!modules.isEmpty()) { modules.add(new DividerModule()); } - SharedModules.addModulesHandlingBlockedOrSpamNumber( - context, - modules, - voicemailEntry.number().getNormalizedNumber(), - voicemailEntry.number().getCountryIso(), - voicemailEntry.callType(), - voicemailEntry.numberAttributes().getIsBlocked(), - voicemailEntry.numberAttributes().getIsSpam(), - ReportingLocation.Type.VOICEMAIL_HISTORY); + modules.addAll( + SharedModules.createModulesHandlingBlockedOrSpamNumber( + context, + voicemailEntry.number().getNormalizedNumber(), + voicemailEntry.number().getCountryIso(), + voicemailEntry.callType(), + voicemailEntry.numberAttributes().getIsBlocked(), + voicemailEntry.numberAttributes().getIsSpam(), + ReportingLocation.Type.VOICEMAIL_HISTORY)); // TODO(zachh): Module for CallComposer. - SharedModules.maybeAddModuleForCopyingNumber(context, modules, normalizedNumber); + Optional<HistoryItemActionModule> moduleForCopyingNumber = + SharedModules.createModuleForCopyingNumber( + context, voicemailEntry.number().getNormalizedNumber()); + if (moduleForCopyingNumber.isPresent()) { + modules.add(moduleForCopyingNumber.get()); + } return modules; } diff --git a/java/com/android/dialer/voicemail/listui/menu/NewVoicemailMenu.java b/java/com/android/dialer/voicemail/listui/menu/NewVoicemailMenu.java index fbd7fe854..7c669e194 100644 --- a/java/com/android/dialer/voicemail/listui/menu/NewVoicemailMenu.java +++ b/java/com/android/dialer/voicemail/listui/menu/NewVoicemailMenu.java @@ -18,8 +18,8 @@ package com.android.dialer.voicemail.listui.menu; import android.content.Context; import android.view.View; -import com.android.dialer.contactactions.ContactActionBottomSheet; import com.android.dialer.glidephotomanager.GlidePhotoManager; +import com.android.dialer.historyitemactions.HistoryItemActionBottomSheet; import com.android.dialer.voicemail.model.VoicemailEntry; /** Handles configuration of the bottom sheet menus for voicemail entries. */ @@ -29,7 +29,7 @@ public final class NewVoicemailMenu { public static View.OnClickListener createOnClickListener( Context context, VoicemailEntry voicemailEntry, GlidePhotoManager glidePhotoManager) { return (view) -> - ContactActionBottomSheet.show( + HistoryItemActionBottomSheet.show( context, PrimaryAction.fromVoicemailEntry(context, voicemailEntry), Modules.fromVoicemailEntry(context, voicemailEntry), diff --git a/java/com/android/dialer/voicemail/listui/menu/PrimaryAction.java b/java/com/android/dialer/voicemail/listui/menu/PrimaryAction.java index 91f505cb0..9a5aa1886 100644 --- a/java/com/android/dialer/voicemail/listui/menu/PrimaryAction.java +++ b/java/com/android/dialer/voicemail/listui/menu/PrimaryAction.java @@ -19,7 +19,7 @@ package com.android.dialer.voicemail.listui.menu; import android.content.Context; import android.text.TextUtils; import com.android.dialer.calllogutils.NumberAttributesConverter; -import com.android.dialer.contactactions.ContactPrimaryActionInfo; +import com.android.dialer.historyitemactions.HistoryItemPrimaryActionInfo; import com.android.dialer.voicemail.model.VoicemailEntry; /** Configures the primary action row (top row) for theottom sheet for the Voicemail Tab */ @@ -31,9 +31,9 @@ final class PrimaryAction { // setIntent - allow video calling // setPrimaryText - check in with UX // setSecondaryText - check in with UX - static ContactPrimaryActionInfo fromVoicemailEntry( + static HistoryItemPrimaryActionInfo fromVoicemailEntry( Context context, VoicemailEntry voicemailEntry) { - return ContactPrimaryActionInfo.builder() + return HistoryItemPrimaryActionInfo.builder() .setNumber(voicemailEntry.number()) .setPhotoInfo( NumberAttributesConverter.toPhotoInfoBuilder(voicemailEntry.numberAttributes()) |