Loading java/com/android/dialer/calllogutils/CallLogEntryText.java +20 −16 Original line number Diff line number Diff line Loading @@ -21,6 +21,7 @@ import android.provider.CallLog.Calls; import android.text.TextUtils; import com.android.dialer.calllog.model.CoalescedRow; import com.android.dialer.duo.DuoComponent; import com.android.dialer.spam.Spam; import com.android.dialer.time.Clock; import com.google.common.base.Optional; import com.google.common.collect.Collections2; Loading Loading @@ -80,13 +81,15 @@ public final class CallLogEntryText { * <p>Rules: * * <ul> * <li>For emergency numbers: Date * <li>For numbers that are not spam or blocked: $Label(, Duo video|Carrier video)?|$Location • * Date * <li>For blocked non-spam numbers: Blocked • $Label(, Duo video|Carrier video)?|$Location • * Date * <li>For spam but not blocked numbers: Spam • $Label(, Duo video|Carrier video)? • Date * <li>For blocked spam numbers: Blocked • Spam • $Label(, Duo video|Carrier video)? • Date * <li>An emergency number: Date * <li>Number - not blocked, call - not spam: * <p>$Label(, Duo video|Carrier video)?|$Location • Date * <li>Number - blocked, call - not spam: * <p>Blocked • $Label(, Duo video|Carrier video)?|$Location • Date * <li>Number - not blocked, call - spam: * <p>Spam • $Label(, Duo video|Carrier video)? • Date * <li>Number - blocked, call - spam: * <p>Blocked • Spam • $Label(, Duo video|Carrier video)? • Date * </ul> * * <p>Examples: Loading Loading @@ -119,7 +122,7 @@ public final class CallLogEntryText { if (row.getNumberAttributes().getIsBlocked()) { components.add(context.getText(R.string.new_call_log_secondary_blocked)); } if (row.getNumberAttributes().getIsSpam()) { if (Spam.shouldShowAsSpam(row.getNumberAttributes().getIsSpam(), row.getCallType())) { components.add(context.getText(R.string.new_call_log_secondary_spam)); } Loading @@ -141,15 +144,15 @@ public final class CallLogEntryText { public static CharSequence buildSecondaryTextForBottomSheet(Context context, CoalescedRow row) { /* * Rules: * For emergency numbers: * For an emergency number: * Number * For numbers that are not spam or blocked: * Number - not blocked, call - not spam: * $Label(, Duo video|Carrier video)?|$Location [• NumberIfNoName]? * For blocked non-spam numbers: * Number - blocked, call - not spam: * Blocked • $Label(, Duo video|Carrier video)?|$Location [• NumberIfNoName]? * For spam but not blocked numbers: * Number - not blocked, call - spam: * Spam • $Label(, Duo video|Carrier video)? [• NumberIfNoName]? * For blocked spam numbers: * Number - blocked, call - spam: * Blocked • Spam • $Label(, Duo video|Carrier video)? [• NumberIfNoName]? * * The number is shown at the end if there is no name for the entry. (It is shown in primary Loading Loading @@ -178,7 +181,7 @@ public final class CallLogEntryText { if (row.getNumberAttributes().getIsBlocked()) { components.add(context.getText(R.string.new_call_log_secondary_blocked)); } if (row.getNumberAttributes().getIsSpam()) { if (Spam.shouldShowAsSpam(row.getNumberAttributes().getIsSpam(), row.getCallType())) { components.add(context.getText(R.string.new_call_log_secondary_spam)); } Loading Loading @@ -234,8 +237,9 @@ public final class CallLogEntryText { // Show the location if // (1) there is no number type label, and // (2) the number is not spam. if (TextUtils.isEmpty(numberTypeLabel) && !row.getNumberAttributes().getIsSpam()) { // (2) the call should not be shown as spam. if (TextUtils.isEmpty(numberTypeLabel) && !Spam.shouldShowAsSpam(row.getNumberAttributes().getIsSpam(), row.getCallType())) { // If number attributes contain a location (obtained from a PhoneLookup), use it instead // of the one from the annotated call log. String location = Loading java/com/android/dialer/calllogutils/PhotoInfoBuilder.java +9 −3 Original line number Diff line number Diff line Loading @@ -21,6 +21,7 @@ import android.support.v4.os.BuildCompat; import com.android.dialer.NumberAttributes; import com.android.dialer.calllog.model.CoalescedRow; import com.android.dialer.glidephotomanager.PhotoInfo; import com.android.dialer.spam.Spam; import com.android.dialer.voicemail.model.VoicemailEntry; /** Builds {@link PhotoInfo} from other data types. */ Loading @@ -31,6 +32,9 @@ public final class PhotoInfoBuilder { return fromNumberAttributes(coalescedRow.getNumberAttributes()) .setFormattedNumber(coalescedRow.getFormattedNumber()) .setIsVoicemail(coalescedRow.getIsVoicemailCall()) .setIsSpam( Spam.shouldShowAsSpam( coalescedRow.getNumberAttributes().getIsSpam(), coalescedRow.getCallType())) .setIsVideo((coalescedRow.getFeatures() & Calls.FEATURES_VIDEO) == Calls.FEATURES_VIDEO) .setIsRtt( BuildCompat.isAtLeastP() Loading @@ -40,7 +44,10 @@ public final class PhotoInfoBuilder { /** Returns a {@link PhotoInfo.Builder} with info from {@link VoicemailEntry}. */ public static PhotoInfo.Builder fromVoicemailEntry(VoicemailEntry voicemailEntry) { return fromNumberAttributes(voicemailEntry.getNumberAttributes()) .setFormattedNumber(voicemailEntry.getFormattedNumber()); .setFormattedNumber(voicemailEntry.getFormattedNumber()) .setIsSpam( Spam.shouldShowAsSpam( voicemailEntry.getNumberAttributes().getIsSpam(), voicemailEntry.getCallType())); } /** Returns a {@link PhotoInfo.Builder} with info from {@link NumberAttributes}. */ Loading @@ -51,7 +58,6 @@ public final class PhotoInfoBuilder { .setPhotoId(numberAttributes.getPhotoId()) .setLookupUri(numberAttributes.getLookupUri()) .setIsBusiness(numberAttributes.getIsBusiness()) .setIsBlocked(numberAttributes.getIsBlocked()) .setIsSpam(numberAttributes.getIsSpam()); .setIsBlocked(numberAttributes.getIsBlocked()); } } java/com/android/dialer/historyitemactions/HistoryItemActionModulesBuilder.java +17 −13 Original line number Diff line number Diff line Loading @@ -30,6 +30,7 @@ import com.android.dialer.common.Assert; import com.android.dialer.duo.Duo; import com.android.dialer.duo.DuoComponent; import com.android.dialer.logging.ReportingLocation; import com.android.dialer.spam.Spam; import com.android.dialer.util.CallUtil; import com.android.dialer.util.UriUtils; import java.util.ArrayList; Loading Loading @@ -120,8 +121,8 @@ public final class HistoryItemActionModulesBuilder { * <ul> * <li>the call is one made to/received from an emergency number, * <li>the call is one made to a voicemail box, * <li>the number is blocked, or * <li>the number is marked as spam. * <li>the call should be shown as spam, or * <li>the number is blocked. * </ul> * * <p>If the provided module info is for a Duo video call and Duo is available, add a Duo video Loading @@ -141,8 +142,8 @@ public final class HistoryItemActionModulesBuilder { public HistoryItemActionModulesBuilder addModuleForVideoCall() { if (moduleInfo.getIsEmergencyNumber() || moduleInfo.getIsVoicemailCall() || moduleInfo.getIsBlocked() || moduleInfo.getIsSpam()) { || Spam.shouldShowAsSpam(moduleInfo.getIsSpam(), moduleInfo.getCallType()) || moduleInfo.getIsBlocked()) { return this; } Loading Loading @@ -221,8 +222,8 @@ public final class HistoryItemActionModulesBuilder { * <ul> * <li>the call is one made to/received from an emergency number, * <li>the call is one made to a voicemail box, * <li>the call should be shown as spam, * <li>the number is blocked, * <li>the number is marked as spam, * <li>the number is empty, or * <li>the number belongs to an existing contact. * </ul> Loading @@ -230,8 +231,8 @@ public final class HistoryItemActionModulesBuilder { public HistoryItemActionModulesBuilder addModuleForAddingToContacts() { if (moduleInfo.getIsEmergencyNumber() || moduleInfo.getIsVoicemailCall() || Spam.shouldShowAsSpam(moduleInfo.getIsSpam(), moduleInfo.getCallType()) || moduleInfo.getIsBlocked() || moduleInfo.getIsSpam() || isExistingContact() || TextUtils.isEmpty(moduleInfo.getNormalizedNumber())) { return this; Loading Loading @@ -264,16 +265,17 @@ public final class HistoryItemActionModulesBuilder { * <li>the call is one made to a voicemail box. * </ul> * * <p>If a number is marked as spam, add two modules: * <p>If the call should be shown as spam, add two modules: * * <ul> * <li>"Not spam" and "Block", or * <li>"Not spam" and "Unblock". * </ul> * * <p>If a number is blocked but not marked as spam, add the "Unblock" module. * <p>If the number is blocked but the call should not be shown as spam, add the "Unblock" module. * * <p>If a number is not blocked or marked as spam, add the "Block/Report spam" module. * <p>If the number is not blocked and the call should not be shown as spam, add the "Block/Report * spam" module. */ public HistoryItemActionModulesBuilder addModuleForBlockedOrSpamNumber() { if (moduleInfo.getIsEmergencyNumber() || moduleInfo.getIsVoicemailCall()) { Loading @@ -289,10 +291,10 @@ public final class HistoryItemActionModulesBuilder { .setContactSource(moduleInfo.getContactSource()) .build(); // For a spam number, add two modules: // For a call that should be shown as spam, add two modules: // (1) "Not spam" and "Block", or // (2) "Not spam" and "Unblock". if (moduleInfo.getIsSpam()) { if (Spam.shouldShowAsSpam(moduleInfo.getIsSpam(), moduleInfo.getCallType())) { modules.add( BlockReportSpamModules.moduleForMarkingNumberAsNotSpam( context, blockReportSpamDialogInfo)); Loading @@ -303,14 +305,16 @@ public final class HistoryItemActionModulesBuilder { return this; } // For a blocked non-spam number, add the "Unblock" module. // For a blocked number associated with a call that should not be shown as spam, add the // "Unblock" module. if (moduleInfo.getIsBlocked()) { modules.add( BlockReportSpamModules.moduleForUnblockingNumber(context, blockReportSpamDialogInfo)); return this; } // For a number that is neither a spam number nor blocked, add the "Block/Report spam" module. // For a number that is not blocked and is associated with a call that should not be shown as // spam, add the "Block/Report spam" module. modules.add( BlockReportSpamModules.moduleForBlockingNumberAndOptionallyReportingSpam( context, blockReportSpamDialogInfo)); Loading java/com/android/dialer/spam/Spam.java +22 −0 Original line number Diff line number Diff line Loading @@ -18,6 +18,7 @@ package com.android.dialer.spam; import android.preference.Preference; import android.preference.Preference.OnPreferenceChangeListener; import android.provider.CallLog.Calls; import android.support.annotation.Nullable; import com.android.dialer.DialerPhoneNumber; import com.android.dialer.logging.ContactLookupResult; Loading Loading @@ -166,4 +167,25 @@ public interface Spam { int callType, ReportingLocation.Type from, ContactSource.Type contactSourceType); /** * Given a number's spam status and a call type, determine if the call should be shown as spam. * * <p>We show a call as spam if * * <ul> * <li>the number is marked as spam, and * <li>the call is not an outgoing call. * </ul> * * <p>This is because spammers can hide behind a legit number (e.g., a customer service number). * We don't want to show a spam icon when users call it. * * @param isNumberSpam Whether the number is spam. * @param callType One of the types in {@link android.provider.CallLog.Calls#TYPE}. * @return true if the number is spam *and* the call is not an outgoing call. */ static boolean shouldShowAsSpam(boolean isNumberSpam, int callType) { return isNumberSpam && (callType != Calls.OUTGOING_TYPE); } } Loading
java/com/android/dialer/calllogutils/CallLogEntryText.java +20 −16 Original line number Diff line number Diff line Loading @@ -21,6 +21,7 @@ import android.provider.CallLog.Calls; import android.text.TextUtils; import com.android.dialer.calllog.model.CoalescedRow; import com.android.dialer.duo.DuoComponent; import com.android.dialer.spam.Spam; import com.android.dialer.time.Clock; import com.google.common.base.Optional; import com.google.common.collect.Collections2; Loading Loading @@ -80,13 +81,15 @@ public final class CallLogEntryText { * <p>Rules: * * <ul> * <li>For emergency numbers: Date * <li>For numbers that are not spam or blocked: $Label(, Duo video|Carrier video)?|$Location • * Date * <li>For blocked non-spam numbers: Blocked • $Label(, Duo video|Carrier video)?|$Location • * Date * <li>For spam but not blocked numbers: Spam • $Label(, Duo video|Carrier video)? • Date * <li>For blocked spam numbers: Blocked • Spam • $Label(, Duo video|Carrier video)? • Date * <li>An emergency number: Date * <li>Number - not blocked, call - not spam: * <p>$Label(, Duo video|Carrier video)?|$Location • Date * <li>Number - blocked, call - not spam: * <p>Blocked • $Label(, Duo video|Carrier video)?|$Location • Date * <li>Number - not blocked, call - spam: * <p>Spam • $Label(, Duo video|Carrier video)? • Date * <li>Number - blocked, call - spam: * <p>Blocked • Spam • $Label(, Duo video|Carrier video)? • Date * </ul> * * <p>Examples: Loading Loading @@ -119,7 +122,7 @@ public final class CallLogEntryText { if (row.getNumberAttributes().getIsBlocked()) { components.add(context.getText(R.string.new_call_log_secondary_blocked)); } if (row.getNumberAttributes().getIsSpam()) { if (Spam.shouldShowAsSpam(row.getNumberAttributes().getIsSpam(), row.getCallType())) { components.add(context.getText(R.string.new_call_log_secondary_spam)); } Loading @@ -141,15 +144,15 @@ public final class CallLogEntryText { public static CharSequence buildSecondaryTextForBottomSheet(Context context, CoalescedRow row) { /* * Rules: * For emergency numbers: * For an emergency number: * Number * For numbers that are not spam or blocked: * Number - not blocked, call - not spam: * $Label(, Duo video|Carrier video)?|$Location [• NumberIfNoName]? * For blocked non-spam numbers: * Number - blocked, call - not spam: * Blocked • $Label(, Duo video|Carrier video)?|$Location [• NumberIfNoName]? * For spam but not blocked numbers: * Number - not blocked, call - spam: * Spam • $Label(, Duo video|Carrier video)? [• NumberIfNoName]? * For blocked spam numbers: * Number - blocked, call - spam: * Blocked • Spam • $Label(, Duo video|Carrier video)? [• NumberIfNoName]? * * The number is shown at the end if there is no name for the entry. (It is shown in primary Loading Loading @@ -178,7 +181,7 @@ public final class CallLogEntryText { if (row.getNumberAttributes().getIsBlocked()) { components.add(context.getText(R.string.new_call_log_secondary_blocked)); } if (row.getNumberAttributes().getIsSpam()) { if (Spam.shouldShowAsSpam(row.getNumberAttributes().getIsSpam(), row.getCallType())) { components.add(context.getText(R.string.new_call_log_secondary_spam)); } Loading Loading @@ -234,8 +237,9 @@ public final class CallLogEntryText { // Show the location if // (1) there is no number type label, and // (2) the number is not spam. if (TextUtils.isEmpty(numberTypeLabel) && !row.getNumberAttributes().getIsSpam()) { // (2) the call should not be shown as spam. if (TextUtils.isEmpty(numberTypeLabel) && !Spam.shouldShowAsSpam(row.getNumberAttributes().getIsSpam(), row.getCallType())) { // If number attributes contain a location (obtained from a PhoneLookup), use it instead // of the one from the annotated call log. String location = Loading
java/com/android/dialer/calllogutils/PhotoInfoBuilder.java +9 −3 Original line number Diff line number Diff line Loading @@ -21,6 +21,7 @@ import android.support.v4.os.BuildCompat; import com.android.dialer.NumberAttributes; import com.android.dialer.calllog.model.CoalescedRow; import com.android.dialer.glidephotomanager.PhotoInfo; import com.android.dialer.spam.Spam; import com.android.dialer.voicemail.model.VoicemailEntry; /** Builds {@link PhotoInfo} from other data types. */ Loading @@ -31,6 +32,9 @@ public final class PhotoInfoBuilder { return fromNumberAttributes(coalescedRow.getNumberAttributes()) .setFormattedNumber(coalescedRow.getFormattedNumber()) .setIsVoicemail(coalescedRow.getIsVoicemailCall()) .setIsSpam( Spam.shouldShowAsSpam( coalescedRow.getNumberAttributes().getIsSpam(), coalescedRow.getCallType())) .setIsVideo((coalescedRow.getFeatures() & Calls.FEATURES_VIDEO) == Calls.FEATURES_VIDEO) .setIsRtt( BuildCompat.isAtLeastP() Loading @@ -40,7 +44,10 @@ public final class PhotoInfoBuilder { /** Returns a {@link PhotoInfo.Builder} with info from {@link VoicemailEntry}. */ public static PhotoInfo.Builder fromVoicemailEntry(VoicemailEntry voicemailEntry) { return fromNumberAttributes(voicemailEntry.getNumberAttributes()) .setFormattedNumber(voicemailEntry.getFormattedNumber()); .setFormattedNumber(voicemailEntry.getFormattedNumber()) .setIsSpam( Spam.shouldShowAsSpam( voicemailEntry.getNumberAttributes().getIsSpam(), voicemailEntry.getCallType())); } /** Returns a {@link PhotoInfo.Builder} with info from {@link NumberAttributes}. */ Loading @@ -51,7 +58,6 @@ public final class PhotoInfoBuilder { .setPhotoId(numberAttributes.getPhotoId()) .setLookupUri(numberAttributes.getLookupUri()) .setIsBusiness(numberAttributes.getIsBusiness()) .setIsBlocked(numberAttributes.getIsBlocked()) .setIsSpam(numberAttributes.getIsSpam()); .setIsBlocked(numberAttributes.getIsBlocked()); } }
java/com/android/dialer/historyitemactions/HistoryItemActionModulesBuilder.java +17 −13 Original line number Diff line number Diff line Loading @@ -30,6 +30,7 @@ import com.android.dialer.common.Assert; import com.android.dialer.duo.Duo; import com.android.dialer.duo.DuoComponent; import com.android.dialer.logging.ReportingLocation; import com.android.dialer.spam.Spam; import com.android.dialer.util.CallUtil; import com.android.dialer.util.UriUtils; import java.util.ArrayList; Loading Loading @@ -120,8 +121,8 @@ public final class HistoryItemActionModulesBuilder { * <ul> * <li>the call is one made to/received from an emergency number, * <li>the call is one made to a voicemail box, * <li>the number is blocked, or * <li>the number is marked as spam. * <li>the call should be shown as spam, or * <li>the number is blocked. * </ul> * * <p>If the provided module info is for a Duo video call and Duo is available, add a Duo video Loading @@ -141,8 +142,8 @@ public final class HistoryItemActionModulesBuilder { public HistoryItemActionModulesBuilder addModuleForVideoCall() { if (moduleInfo.getIsEmergencyNumber() || moduleInfo.getIsVoicemailCall() || moduleInfo.getIsBlocked() || moduleInfo.getIsSpam()) { || Spam.shouldShowAsSpam(moduleInfo.getIsSpam(), moduleInfo.getCallType()) || moduleInfo.getIsBlocked()) { return this; } Loading Loading @@ -221,8 +222,8 @@ public final class HistoryItemActionModulesBuilder { * <ul> * <li>the call is one made to/received from an emergency number, * <li>the call is one made to a voicemail box, * <li>the call should be shown as spam, * <li>the number is blocked, * <li>the number is marked as spam, * <li>the number is empty, or * <li>the number belongs to an existing contact. * </ul> Loading @@ -230,8 +231,8 @@ public final class HistoryItemActionModulesBuilder { public HistoryItemActionModulesBuilder addModuleForAddingToContacts() { if (moduleInfo.getIsEmergencyNumber() || moduleInfo.getIsVoicemailCall() || Spam.shouldShowAsSpam(moduleInfo.getIsSpam(), moduleInfo.getCallType()) || moduleInfo.getIsBlocked() || moduleInfo.getIsSpam() || isExistingContact() || TextUtils.isEmpty(moduleInfo.getNormalizedNumber())) { return this; Loading Loading @@ -264,16 +265,17 @@ public final class HistoryItemActionModulesBuilder { * <li>the call is one made to a voicemail box. * </ul> * * <p>If a number is marked as spam, add two modules: * <p>If the call should be shown as spam, add two modules: * * <ul> * <li>"Not spam" and "Block", or * <li>"Not spam" and "Unblock". * </ul> * * <p>If a number is blocked but not marked as spam, add the "Unblock" module. * <p>If the number is blocked but the call should not be shown as spam, add the "Unblock" module. * * <p>If a number is not blocked or marked as spam, add the "Block/Report spam" module. * <p>If the number is not blocked and the call should not be shown as spam, add the "Block/Report * spam" module. */ public HistoryItemActionModulesBuilder addModuleForBlockedOrSpamNumber() { if (moduleInfo.getIsEmergencyNumber() || moduleInfo.getIsVoicemailCall()) { Loading @@ -289,10 +291,10 @@ public final class HistoryItemActionModulesBuilder { .setContactSource(moduleInfo.getContactSource()) .build(); // For a spam number, add two modules: // For a call that should be shown as spam, add two modules: // (1) "Not spam" and "Block", or // (2) "Not spam" and "Unblock". if (moduleInfo.getIsSpam()) { if (Spam.shouldShowAsSpam(moduleInfo.getIsSpam(), moduleInfo.getCallType())) { modules.add( BlockReportSpamModules.moduleForMarkingNumberAsNotSpam( context, blockReportSpamDialogInfo)); Loading @@ -303,14 +305,16 @@ public final class HistoryItemActionModulesBuilder { return this; } // For a blocked non-spam number, add the "Unblock" module. // For a blocked number associated with a call that should not be shown as spam, add the // "Unblock" module. if (moduleInfo.getIsBlocked()) { modules.add( BlockReportSpamModules.moduleForUnblockingNumber(context, blockReportSpamDialogInfo)); return this; } // For a number that is neither a spam number nor blocked, add the "Block/Report spam" module. // For a number that is not blocked and is associated with a call that should not be shown as // spam, add the "Block/Report spam" module. modules.add( BlockReportSpamModules.moduleForBlockingNumberAndOptionallyReportingSpam( context, blockReportSpamDialogInfo)); Loading
java/com/android/dialer/spam/Spam.java +22 −0 Original line number Diff line number Diff line Loading @@ -18,6 +18,7 @@ package com.android.dialer.spam; import android.preference.Preference; import android.preference.Preference.OnPreferenceChangeListener; import android.provider.CallLog.Calls; import android.support.annotation.Nullable; import com.android.dialer.DialerPhoneNumber; import com.android.dialer.logging.ContactLookupResult; Loading Loading @@ -166,4 +167,25 @@ public interface Spam { int callType, ReportingLocation.Type from, ContactSource.Type contactSourceType); /** * Given a number's spam status and a call type, determine if the call should be shown as spam. * * <p>We show a call as spam if * * <ul> * <li>the number is marked as spam, and * <li>the call is not an outgoing call. * </ul> * * <p>This is because spammers can hide behind a legit number (e.g., a customer service number). * We don't want to show a spam icon when users call it. * * @param isNumberSpam Whether the number is spam. * @param callType One of the types in {@link android.provider.CallLog.Calls#TYPE}. * @return true if the number is spam *and* the call is not an outgoing call. */ static boolean shouldShowAsSpam(boolean isNumberSpam, int callType) { return isNumberSpam && (callType != Calls.OUTGOING_TYPE); } }