summaryrefslogtreecommitdiff
path: root/java/com/android/dialer/phonelookup
diff options
context:
space:
mode:
authorTreehugger Robot <treehugger-gerrit@google.com>2018-05-10 01:14:47 +0000
committerGerrit Code Review <noreply-gerritcodereview@google.com>2018-05-10 01:14:47 +0000
commitced93f2d22bffce3b4cfb9c3bfce862b385537dd (patch)
tree2b4715070bcf45b8a8395ee0ae5c7fbb0ef8274c /java/com/android/dialer/phonelookup
parentc49c914e53500fc661ec47e365621c9d33e046ca (diff)
parent2f4a0075e9f546514359eda60a24ac9cd49ea80a (diff)
Merge changes Ia54e3421,Id2176e6e,I0311770e,I79f99c34,I8579afff, ...
* changes: Add some annotations that won't influence aosp. Update answer button logic. Hide new after call spam blocking promo behind an additional flag. Allow the TextView for call log primary text to adjust size when recycled. Format callback phone number. Added getLoggingName() to CallLogDataSource and PhoneLookup interfaces. Do not show bubble for outgoing call if it's not a background call. Always fetch status onResume and add logging for voicemail status in OldMainPeer and Place Duo calls with PreCall Creating CallIntent, AutoValue builder, to replace CallIntentBuilder. Set the DisplayNameSource to PHONE in DefaultLookupUriGenerator. Config correct layout boundaries to accommodate long text (call log & bottom sheet) Use info from EmergencyPhoneLookup to render UI for an emergency number. Implement EmergencyPhoneLookup for checking if a number is an emergency number. Add GlobalSpamListStatus and UserSpamListStatus Move SpamStatus classes into subpackage Delete obsolete checkSpamStatus(Listener) API Update callers of checkSpamStatus to use Future based API Fix bug that showing block option for private number. Add a null check for digitsHint. Don't commit fragment transactions if it's not safe. Add ListenableFuture based APIs for checkSpamStatus Pass activity between new call log's adapter/view holder. Replace assert checks with safety checks instead. Add SimpleSpamStatus and use it in FakeSpam and SpamStub Show calls to/from emergency numbers as "Emergency number" in call log & call details
Diffstat (limited to 'java/com/android/dialer/phonelookup')
-rw-r--r--java/com/android/dialer/phonelookup/PhoneLookup.java7
-rw-r--r--java/com/android/dialer/phonelookup/PhoneLookupModule.java3
-rw-r--r--java/com/android/dialer/phonelookup/blockednumber/SystemBlockedNumberPhoneLookup.java5
-rw-r--r--java/com/android/dialer/phonelookup/cequint/CequintPhoneLookup.java5
-rw-r--r--java/com/android/dialer/phonelookup/cnap/CnapPhoneLookup.java5
-rw-r--r--java/com/android/dialer/phonelookup/composite/CompositePhoneLookup.java42
-rw-r--r--java/com/android/dialer/phonelookup/consolidator/PhoneLookupInfoConsolidator.java8
-rw-r--r--java/com/android/dialer/phonelookup/cp2/Cp2DefaultDirectoryPhoneLookup.java5
-rw-r--r--java/com/android/dialer/phonelookup/cp2/Cp2ExtendedDirectoryPhoneLookup.java5
-rw-r--r--java/com/android/dialer/phonelookup/emergency/EmergencyPhoneLookup.java122
-rw-r--r--java/com/android/dialer/phonelookup/phone_lookup_info.proto9
-rw-r--r--java/com/android/dialer/phonelookup/spam/SpamPhoneLookup.java7
12 files changed, 202 insertions, 21 deletions
diff --git a/java/com/android/dialer/phonelookup/PhoneLookup.java b/java/com/android/dialer/phonelookup/PhoneLookup.java
index 0b9cbf6eb..1043ee775 100644
--- a/java/com/android/dialer/phonelookup/PhoneLookup.java
+++ b/java/com/android/dialer/phonelookup/PhoneLookup.java
@@ -135,4 +135,11 @@ public interface PhoneLookup<T> {
* disabled (because for example there was a problem with it).
*/
ListenableFuture<Void> clearData();
+
+ /**
+ * The name of this lookup for logging purposes. This is generally the same as the class name (but
+ * should not use methods from {@link Class} because the class names are generally obfuscated by
+ * Proguard.
+ */
+ String getLoggingName();
}
diff --git a/java/com/android/dialer/phonelookup/PhoneLookupModule.java b/java/com/android/dialer/phonelookup/PhoneLookupModule.java
index c6e91c4a4..16aa8e516 100644
--- a/java/com/android/dialer/phonelookup/PhoneLookupModule.java
+++ b/java/com/android/dialer/phonelookup/PhoneLookupModule.java
@@ -21,6 +21,7 @@ import com.android.dialer.phonelookup.cequint.CequintPhoneLookup;
import com.android.dialer.phonelookup.cnap.CnapPhoneLookup;
import com.android.dialer.phonelookup.cp2.Cp2DefaultDirectoryPhoneLookup;
import com.android.dialer.phonelookup.cp2.Cp2ExtendedDirectoryPhoneLookup;
+import com.android.dialer.phonelookup.emergency.EmergencyPhoneLookup;
import com.android.dialer.phonelookup.spam.SpamPhoneLookup;
import com.google.common.collect.ImmutableList;
import dagger.Module;
@@ -37,6 +38,7 @@ public abstract class PhoneLookupModule {
CnapPhoneLookup cnapPhoneLookup,
Cp2DefaultDirectoryPhoneLookup cp2DefaultDirectoryPhoneLookup,
Cp2ExtendedDirectoryPhoneLookup cp2ExtendedDirectoryPhoneLookup,
+ EmergencyPhoneLookup emergencyPhoneLookup,
SystemBlockedNumberPhoneLookup systemBlockedNumberPhoneLookup,
SpamPhoneLookup spamPhoneLookup) {
return ImmutableList.of(
@@ -44,6 +46,7 @@ public abstract class PhoneLookupModule {
cnapPhoneLookup,
cp2DefaultDirectoryPhoneLookup,
cp2ExtendedDirectoryPhoneLookup,
+ emergencyPhoneLookup,
systemBlockedNumberPhoneLookup,
spamPhoneLookup);
}
diff --git a/java/com/android/dialer/phonelookup/blockednumber/SystemBlockedNumberPhoneLookup.java b/java/com/android/dialer/phonelookup/blockednumber/SystemBlockedNumberPhoneLookup.java
index fe6642eef..4192e7932 100644
--- a/java/com/android/dialer/phonelookup/blockednumber/SystemBlockedNumberPhoneLookup.java
+++ b/java/com/android/dialer/phonelookup/blockednumber/SystemBlockedNumberPhoneLookup.java
@@ -181,4 +181,9 @@ public class SystemBlockedNumberPhoneLookup implements PhoneLookup<SystemBlocked
public ListenableFuture<Void> clearData() {
return Futures.immediateFuture(null);
}
+
+ @Override
+ public String getLoggingName() {
+ return "SystemBlockedNumberPhoneLookup";
+ }
}
diff --git a/java/com/android/dialer/phonelookup/cequint/CequintPhoneLookup.java b/java/com/android/dialer/phonelookup/cequint/CequintPhoneLookup.java
index 36d0be40f..b045d0396 100644
--- a/java/com/android/dialer/phonelookup/cequint/CequintPhoneLookup.java
+++ b/java/com/android/dialer/phonelookup/cequint/CequintPhoneLookup.java
@@ -141,6 +141,11 @@ public class CequintPhoneLookup implements PhoneLookup<CequintInfo> {
return Futures.immediateFuture(null);
}
+ @Override
+ public String getLoggingName() {
+ return "CequintPhoneLookup";
+ }
+
/**
* Builds a {@link CequintInfo} proto based on the given {@link CequintCallerIdContact} returned
* by {@link CequintCallerIdManager}.
diff --git a/java/com/android/dialer/phonelookup/cnap/CnapPhoneLookup.java b/java/com/android/dialer/phonelookup/cnap/CnapPhoneLookup.java
index db7c210fc..1b78a8e94 100644
--- a/java/com/android/dialer/phonelookup/cnap/CnapPhoneLookup.java
+++ b/java/com/android/dialer/phonelookup/cnap/CnapPhoneLookup.java
@@ -157,4 +157,9 @@ public final class CnapPhoneLookup implements PhoneLookup<CnapInfo> {
public ListenableFuture<Void> clearData() {
return Futures.immediateFuture(null);
}
+
+ @Override
+ public String getLoggingName() {
+ return "CnapPhoneLookup";
+ }
}
diff --git a/java/com/android/dialer/phonelookup/composite/CompositePhoneLookup.java b/java/com/android/dialer/phonelookup/composite/CompositePhoneLookup.java
index 1ac13df33..83223295b 100644
--- a/java/com/android/dialer/phonelookup/composite/CompositePhoneLookup.java
+++ b/java/com/android/dialer/phonelookup/composite/CompositePhoneLookup.java
@@ -89,13 +89,12 @@ public final class CompositePhoneLookup {
for (PhoneLookup<?> phoneLookup : phoneLookups) {
ListenableFuture<?> lookupFuture = phoneLookup.lookup(appContext, call);
String eventName =
- String.format(Metrics.LOOKUP_FOR_CALL_TEMPLATE, phoneLookup.getClass().getSimpleName());
+ String.format(Metrics.LOOKUP_FOR_CALL_TEMPLATE, phoneLookup.getLoggingName());
futureTimer.applyTiming(lookupFuture, eventName);
futures.add(lookupFuture);
}
ListenableFuture<PhoneLookupInfo> combinedFuture = combineSubMessageFutures(futures);
- String eventName =
- String.format(Metrics.LOOKUP_FOR_CALL_TEMPLATE, CompositePhoneLookup.class.getSimpleName());
+ String eventName = String.format(Metrics.LOOKUP_FOR_CALL_TEMPLATE, getLoggingName());
futureTimer.applyTiming(combinedFuture, eventName);
return combinedFuture;
}
@@ -114,14 +113,12 @@ public final class CompositePhoneLookup {
for (PhoneLookup<?> phoneLookup : phoneLookups) {
ListenableFuture<?> lookupFuture = phoneLookup.lookup(dialerPhoneNumber);
String eventName =
- String.format(Metrics.LOOKUP_FOR_NUMBER_TEMPLATE, phoneLookup.getClass().getSimpleName());
+ String.format(Metrics.LOOKUP_FOR_NUMBER_TEMPLATE, phoneLookup.getLoggingName());
futureTimer.applyTiming(lookupFuture, eventName);
futures.add(lookupFuture);
}
ListenableFuture<PhoneLookupInfo> combinedFuture = combineSubMessageFutures(futures);
- String eventName =
- String.format(
- Metrics.LOOKUP_FOR_NUMBER_TEMPLATE, CompositePhoneLookup.class.getSimpleName());
+ String eventName = String.format(Metrics.LOOKUP_FOR_NUMBER_TEMPLATE, getLoggingName());
futureTimer.applyTiming(combinedFuture, eventName);
return combinedFuture;
}
@@ -133,6 +130,7 @@ public final class CompositePhoneLookup {
return Futures.transform(
Futures.allAsList(subMessageFutures),
subMessages -> {
+ Preconditions.checkNotNull(subMessages);
Builder mergedInfo = PhoneLookupInfo.newBuilder();
for (int i = 0; i < subMessages.size(); i++) {
PhoneLookup phoneLookup = phoneLookups.get(i);
@@ -152,16 +150,14 @@ public final class CompositePhoneLookup {
for (PhoneLookup<?> phoneLookup : phoneLookups) {
ListenableFuture<Boolean> isDirtyFuture = phoneLookup.isDirty(phoneNumbers);
futures.add(isDirtyFuture);
- String eventName =
- String.format(Metrics.IS_DIRTY_TEMPLATE, phoneLookup.getClass().getSimpleName());
+ String eventName = String.format(Metrics.IS_DIRTY_TEMPLATE, phoneLookup.getLoggingName());
futureTimer.applyTiming(isDirtyFuture, eventName, LogCatMode.LOG_VALUES);
}
// Executes all child lookups (possibly in parallel), completing when the first composite lookup
// which returns "true" completes, and cancels the others.
ListenableFuture<Boolean> firstMatching =
DialerFutures.firstMatching(futures, Preconditions::checkNotNull, false /* defaultValue */);
- String eventName =
- String.format(Metrics.IS_DIRTY_TEMPLATE, CompositePhoneLookup.class.getSimpleName());
+ String eventName = String.format(Metrics.IS_DIRTY_TEMPLATE, getLoggingName());
futureTimer.applyTiming(firstMatching, eventName, LogCatMode.LOG_VALUES);
return firstMatching;
}
@@ -178,6 +174,7 @@ public final class CompositePhoneLookup {
return Futures.transformAsync(
callLogState.isBuilt(),
isBuilt -> {
+ Preconditions.checkNotNull(isBuilt);
List<ListenableFuture<ImmutableMap<DialerPhoneNumber, ?>>> futures = new ArrayList<>();
for (PhoneLookup phoneLookup : phoneLookups) {
futures.add(buildSubmapAndGetMostRecentInfo(existingInfoMap, phoneLookup, isBuilt));
@@ -186,6 +183,7 @@ public final class CompositePhoneLookup {
Futures.transform(
Futures.allAsList(futures),
(allMaps) -> {
+ Preconditions.checkNotNull(allMaps);
ImmutableMap.Builder<DialerPhoneNumber, PhoneLookupInfo> combinedMap =
ImmutableMap.builder();
for (DialerPhoneNumber dialerPhoneNumber : existingInfoMap.keySet()) {
@@ -206,7 +204,7 @@ public final class CompositePhoneLookup {
return combinedMap.build();
},
lightweightExecutorService);
- String eventName = getMostRecentInfoEventName(this, isBuilt);
+ String eventName = getMostRecentInfoEventName(getLoggingName(), isBuilt);
futureTimer.applyTiming(combinedFuture, eventName);
return combinedFuture;
},
@@ -224,7 +222,7 @@ public final class CompositePhoneLookup {
phoneLookup.getSubMessage(existingInfoMap.get(dialerPhoneNumber)));
ListenableFuture<ImmutableMap<DialerPhoneNumber, T>> mostRecentInfoFuture =
phoneLookup.getMostRecentInfo(ImmutableMap.copyOf(submap));
- String eventName = getMostRecentInfoEventName(phoneLookup, isBuilt);
+ String eventName = getMostRecentInfoEventName(phoneLookup.getLoggingName(), isBuilt);
futureTimer.applyTiming(mostRecentInfoFuture, eventName);
return mostRecentInfoFuture;
}
@@ -234,17 +232,19 @@ public final class CompositePhoneLookup {
return Futures.transformAsync(
callLogState.isBuilt(),
isBuilt -> {
+ Preconditions.checkNotNull(isBuilt);
List<ListenableFuture<Void>> futures = new ArrayList<>();
for (PhoneLookup<?> phoneLookup : phoneLookups) {
ListenableFuture<Void> phoneLookupFuture = phoneLookup.onSuccessfulBulkUpdate();
futures.add(phoneLookupFuture);
- String eventName = onSuccessfulBulkUpdatedEventName(phoneLookup, isBuilt);
+ String eventName =
+ onSuccessfulBulkUpdatedEventName(phoneLookup.getLoggingName(), isBuilt);
futureTimer.applyTiming(phoneLookupFuture, eventName);
}
ListenableFuture<Void> combinedFuture =
Futures.transform(
Futures.allAsList(futures), unused -> null, lightweightExecutorService);
- String eventName = onSuccessfulBulkUpdatedEventName(this, isBuilt);
+ String eventName = onSuccessfulBulkUpdatedEventName(getLoggingName(), isBuilt);
futureTimer.applyTiming(combinedFuture, eventName);
return combinedFuture;
},
@@ -278,19 +278,23 @@ public final class CompositePhoneLookup {
Futures.allAsList(futures), unused -> null, lightweightExecutorService);
}
- private static String getMostRecentInfoEventName(Object classNameSource, boolean isBuilt) {
+ private static String getMostRecentInfoEventName(String loggingName, boolean isBuilt) {
return String.format(
!isBuilt
? Metrics.INITIAL_GET_MOST_RECENT_INFO_TEMPLATE
: Metrics.GET_MOST_RECENT_INFO_TEMPLATE,
- classNameSource.getClass().getSimpleName());
+ loggingName);
}
- private static String onSuccessfulBulkUpdatedEventName(Object classNameSource, boolean isBuilt) {
+ private static String onSuccessfulBulkUpdatedEventName(String loggingName, boolean isBuilt) {
return String.format(
!isBuilt
? Metrics.INITIAL_ON_SUCCESSFUL_BULK_UPDATE_TEMPLATE
: Metrics.ON_SUCCESSFUL_BULK_UPDATE_TEMPLATE,
- classNameSource.getClass().getSimpleName());
+ loggingName);
+ }
+
+ private String getLoggingName() {
+ return "CompositePhoneLookup";
}
}
diff --git a/java/com/android/dialer/phonelookup/consolidator/PhoneLookupInfoConsolidator.java b/java/com/android/dialer/phonelookup/consolidator/PhoneLookupInfoConsolidator.java
index 23ecc8301..29a0de56b 100644
--- a/java/com/android/dialer/phonelookup/consolidator/PhoneLookupInfoConsolidator.java
+++ b/java/com/android/dialer/phonelookup/consolidator/PhoneLookupInfoConsolidator.java
@@ -347,6 +347,14 @@ public final class PhoneLookupInfoConsolidator {
/**
* The {@link PhoneLookupInfo} passed to the constructor is associated with a number. This method
+ * returns whether the number is an emergency number (e.g., 911 in the U.S.).
+ */
+ public boolean isEmergencyNumber() {
+ return phoneLookupInfo.getEmergencyInfo().getIsEmergencyNumber();
+ }
+
+ /**
+ * The {@link PhoneLookupInfo} passed to the constructor is associated with a number. This method
* returns whether the number can be reported as invalid.
*
* <p>As we currently report invalid numbers via the People API, only numbers from the People API
diff --git a/java/com/android/dialer/phonelookup/cp2/Cp2DefaultDirectoryPhoneLookup.java b/java/com/android/dialer/phonelookup/cp2/Cp2DefaultDirectoryPhoneLookup.java
index c5d4e53f2..1642f9b23 100644
--- a/java/com/android/dialer/phonelookup/cp2/Cp2DefaultDirectoryPhoneLookup.java
+++ b/java/com/android/dialer/phonelookup/cp2/Cp2DefaultDirectoryPhoneLookup.java
@@ -644,6 +644,11 @@ public final class Cp2DefaultDirectoryPhoneLookup implements PhoneLookup<Cp2Info
});
}
+ @Override
+ public String getLoggingName() {
+ return "Cp2DefaultDirectoryPhoneLookup";
+ }
+
/**
* 1. get all contact ids. if the id is unset, add the number to the list of contacts to look up.
* 2. reduce our list of contact ids to those that were updated after lastModified. 3. Now we have
diff --git a/java/com/android/dialer/phonelookup/cp2/Cp2ExtendedDirectoryPhoneLookup.java b/java/com/android/dialer/phonelookup/cp2/Cp2ExtendedDirectoryPhoneLookup.java
index 2b98f265c..77a95e79f 100644
--- a/java/com/android/dialer/phonelookup/cp2/Cp2ExtendedDirectoryPhoneLookup.java
+++ b/java/com/android/dialer/phonelookup/cp2/Cp2ExtendedDirectoryPhoneLookup.java
@@ -234,4 +234,9 @@ public final class Cp2ExtendedDirectoryPhoneLookup implements PhoneLookup<Cp2Inf
public ListenableFuture<Void> clearData() {
return Futures.immediateFuture(null);
}
+
+ @Override
+ public String getLoggingName() {
+ return "Cp2ExtendedDirectoryPhoneLookup";
+ }
}
diff --git a/java/com/android/dialer/phonelookup/emergency/EmergencyPhoneLookup.java b/java/com/android/dialer/phonelookup/emergency/EmergencyPhoneLookup.java
new file mode 100644
index 000000000..d31614a12
--- /dev/null
+++ b/java/com/android/dialer/phonelookup/emergency/EmergencyPhoneLookup.java
@@ -0,0 +1,122 @@
+/*
+ * Copyright (C) 2018 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.phonelookup.emergency;
+
+import android.content.Context;
+import com.android.dialer.DialerPhoneNumber;
+import com.android.dialer.common.concurrent.Annotations.BackgroundExecutor;
+import com.android.dialer.inject.ApplicationContext;
+import com.android.dialer.phonelookup.PhoneLookup;
+import com.android.dialer.phonelookup.PhoneLookupInfo;
+import com.android.dialer.phonelookup.PhoneLookupInfo.EmergencyInfo;
+import com.android.dialer.phonenumberutil.PhoneNumberHelper;
+import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.ImmutableSet;
+import com.google.common.util.concurrent.Futures;
+import com.google.common.util.concurrent.ListenableFuture;
+import com.google.common.util.concurrent.ListeningExecutorService;
+import javax.inject.Inject;
+
+/**
+ * PhoneLookup implementation for checking if a number is an emergency number.
+ *
+ * <p>The check has to be done in a PhoneLookup as it involves detecting the user's location and
+ * obtaining SIM info, which are expensive operations. Doing it in the main thread will make the UI
+ * super janky.
+ */
+public class EmergencyPhoneLookup implements PhoneLookup<EmergencyInfo> {
+
+ private final Context appContext;
+ private final ListeningExecutorService backgroundExecutorService;
+
+ @Inject
+ EmergencyPhoneLookup(
+ @ApplicationContext Context appContext,
+ @BackgroundExecutor ListeningExecutorService backgroundExecutorService) {
+ this.appContext = appContext;
+ this.backgroundExecutorService = backgroundExecutorService;
+ }
+
+ @Override
+ public ListenableFuture<EmergencyInfo> lookup(DialerPhoneNumber dialerPhoneNumber) {
+ return backgroundExecutorService.submit(
+ () ->
+ EmergencyInfo.newBuilder()
+ .setIsEmergencyNumber(
+ PhoneNumberHelper.isLocalEmergencyNumber(
+ appContext, dialerPhoneNumber.getNormalizedNumber()))
+ .build());
+ }
+
+ @Override
+ public ListenableFuture<Boolean> isDirty(ImmutableSet<DialerPhoneNumber> phoneNumbers) {
+ return Futures.immediateFuture(false);
+ }
+
+ @Override
+ public ListenableFuture<ImmutableMap<DialerPhoneNumber, EmergencyInfo>> getMostRecentInfo(
+ ImmutableMap<DialerPhoneNumber, EmergencyInfo> existingInfoMap) {
+ // We can update EmergencyInfo for all numbers in the provided map, but the negative impact on
+ // performance is intolerable as checking a single number involves detecting the user's location
+ // and obtaining SIM info, which will take more than 100ms (see
+ // android.telephony.PhoneNumberUtils#isLocalEmergencyNumber(Context, int, String) for details).
+ //
+ // As emergency numbers won't change in a country, the only case we will miss is that
+ // (1) a number is an emergency number in country A but not in country B,
+ // (2) a user has an emergency call entry when they are in country A, and
+ // (3) they travel from A to B,
+ // which is a rare event.
+ //
+ // We can update the implementation if telecom supports batch check in the future.
+ return Futures.immediateFuture(existingInfoMap);
+ }
+
+ @Override
+ public void setSubMessage(PhoneLookupInfo.Builder destination, EmergencyInfo subMessage) {
+ destination.setEmergencyInfo(subMessage);
+ }
+
+ @Override
+ public EmergencyInfo getSubMessage(PhoneLookupInfo phoneLookupInfo) {
+ return phoneLookupInfo.getEmergencyInfo();
+ }
+
+ @Override
+ public ListenableFuture<Void> onSuccessfulBulkUpdate() {
+ return Futures.immediateFuture(null);
+ }
+
+ @Override
+ public void registerContentObservers() {
+ // No content observer to register.
+ }
+
+ @Override
+ public void unregisterContentObservers() {
+ // Nothing to be done as no content observer is registered.
+ }
+
+ @Override
+ public ListenableFuture<Void> clearData() {
+ return Futures.immediateFuture(null);
+ }
+
+ @Override
+ public String getLoggingName() {
+ return "EmergencyPhoneLookup";
+ }
+}
diff --git a/java/com/android/dialer/phonelookup/phone_lookup_info.proto b/java/com/android/dialer/phonelookup/phone_lookup_info.proto
index 50817c4e3..9e9dfa918 100644
--- a/java/com/android/dialer/phonelookup/phone_lookup_info.proto
+++ b/java/com/android/dialer/phonelookup/phone_lookup_info.proto
@@ -14,7 +14,7 @@ package com.android.dialer.phonelookup;
// "cp2_info_in_default_directory" corresponds to class
// Cp2DefaultDirectoryPhoneLookup, and class Cp2DefaultDirectoryPhoneLookup
// alone is responsible for populating it.
-// Next ID: 9
+// Next ID: 10
message PhoneLookupInfo {
// Information about a PhoneNumber retrieved from CP2.
message Cp2Info {
@@ -175,4 +175,11 @@ message PhoneLookupInfo {
optional string photo_uri = 3;
}
optional CequintInfo cequint_info = 8;
+
+ // Message indicating whether a number is an emergency number.
+ // Next ID: 2
+ message EmergencyInfo {
+ optional bool is_emergency_number = 1;
+ }
+ optional EmergencyInfo emergency_info = 9;
} \ No newline at end of file
diff --git a/java/com/android/dialer/phonelookup/spam/SpamPhoneLookup.java b/java/com/android/dialer/phonelookup/spam/SpamPhoneLookup.java
index 6b77036cf..7e5c9734d 100644
--- a/java/com/android/dialer/phonelookup/spam/SpamPhoneLookup.java
+++ b/java/com/android/dialer/phonelookup/spam/SpamPhoneLookup.java
@@ -27,7 +27,7 @@ import com.android.dialer.phonelookup.PhoneLookup;
import com.android.dialer.phonelookup.PhoneLookupInfo;
import com.android.dialer.phonelookup.PhoneLookupInfo.SpamInfo;
import com.android.dialer.spam.Spam;
-import com.android.dialer.spam.SpamStatus;
+import com.android.dialer.spam.status.SpamStatus;
import com.android.dialer.storage.Unencrypted;
import com.google.common.base.Optional;
import com.google.common.collect.ImmutableMap;
@@ -167,4 +167,9 @@ public final class SpamPhoneLookup implements PhoneLookup<SpamInfo> {
return null;
});
}
+
+ @Override
+ public String getLoggingName() {
+ return "SpamPhoneLookup";
+ }
}