summaryrefslogtreecommitdiff
path: root/java/com/android/dialer
diff options
context:
space:
mode:
authorTreehugger Robot <treehugger-gerrit@google.com>2018-03-16 21:08:10 +0000
committerGerrit Code Review <noreply-gerritcodereview@google.com>2018-03-16 21:08:10 +0000
commit6121b933d52225cbea79918240703243bb30aa4f (patch)
tree73969f4f879b3919944241f6dfc6a83346c06fec /java/com/android/dialer
parent51d7805925a35fa7e84c1d235ea53519aabec9c5 (diff)
parent73ae7522a6d9faca76f24b94e3bb3e2088e5f74f (diff)
Merge "Use current county ISO for PhoneLookupHistoryRecorder"
Diffstat (limited to 'java/com/android/dialer')
-rw-r--r--java/com/android/dialer/location/CountryDetector.java13
-rw-r--r--java/com/android/dialer/location/GeoUtil.java7
-rw-r--r--java/com/android/dialer/telecom/TelecomCallUtil.java43
3 files changed, 29 insertions, 34 deletions
diff --git a/java/com/android/dialer/location/CountryDetector.java b/java/com/android/dialer/location/CountryDetector.java
index 5c5ed9c84..664bb50d5 100644
--- a/java/com/android/dialer/location/CountryDetector.java
+++ b/java/com/android/dialer/location/CountryDetector.java
@@ -16,10 +16,12 @@
package com.android.dialer.location;
+import android.Manifest.permission;
import android.app.PendingIntent;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
+import android.content.pm.PackageManager;
import android.location.Address;
import android.location.Geocoder;
import android.location.Location;
@@ -35,7 +37,6 @@ import com.android.dialer.common.Assert;
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.util.PermissionsUtil;
import java.util.List;
import java.util.Locale;
@@ -98,8 +99,9 @@ public class CountryDetector {
}
}
+ @SuppressWarnings("missingPermission")
private static void registerForLocationUpdates(Context context, LocationManager locationManager) {
- if (!PermissionsUtil.hasLocationPermissions(context)) {
+ if (!hasLocationPermissions(context)) {
LogUtil.w(
"CountryDetector.registerForLocationUpdates",
"no location permissions, not registering for location updates");
@@ -163,7 +165,7 @@ public class CountryDetector {
@Nullable
private String getLocationBasedCountryIso() {
if (!Geocoder.isPresent()
- || !PermissionsUtil.hasLocationPermissions(appContext)
+ || !hasLocationPermissions(appContext)
|| !UserManagerCompat.isUserUnlocked(appContext)) {
return null;
}
@@ -265,4 +267,9 @@ public class CountryDetector {
return null;
}
}
+
+ private static boolean hasLocationPermissions(Context context) {
+ return context.checkSelfPermission(permission.ACCESS_FINE_LOCATION)
+ == PackageManager.PERMISSION_GRANTED;
+ }
}
diff --git a/java/com/android/dialer/location/GeoUtil.java b/java/com/android/dialer/location/GeoUtil.java
index 27fbf2315..8a875e842 100644
--- a/java/com/android/dialer/location/GeoUtil.java
+++ b/java/com/android/dialer/location/GeoUtil.java
@@ -22,7 +22,12 @@ import android.os.Trace;
/** Static methods related to Geo. */
public class GeoUtil {
- /** @return the ISO 3166-1 two letters country code of the country the user is in. */
+ /**
+ * Return the ISO 3166-1 two letters country code of the country the user is in.
+ *
+ * <p>WARNING: {@link CountryDetector} caches TelephonyManager and other system services in a
+ * static. {@link CountryDetector#instance} must be reset in tests.
+ */
public static String getCurrentCountryIso(Context context) {
// The {@link CountryDetector} should never return null so this is safe to return as-is.
Trace.beginSection("GeoUtil.getCurrentCountryIso");
diff --git a/java/com/android/dialer/telecom/TelecomCallUtil.java b/java/com/android/dialer/telecom/TelecomCallUtil.java
index 3ae952357..6b66d868e 100644
--- a/java/com/android/dialer/telecom/TelecomCallUtil.java
+++ b/java/com/android/dialer/telecom/TelecomCallUtil.java
@@ -22,14 +22,11 @@ import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.annotation.WorkerThread;
import android.telecom.Call;
-import android.telecom.PhoneAccountHandle;
import android.telephony.PhoneNumberUtils;
-import android.telephony.SubscriptionInfo;
import android.text.TextUtils;
import com.android.dialer.common.Assert;
-import com.android.dialer.common.LogUtil;
+import com.android.dialer.location.GeoUtil;
import com.google.common.base.Optional;
-import java.util.Locale;
/**
* Class to provide a standard interface for obtaining information from the underlying
@@ -72,11 +69,12 @@ public class TelecomCallUtil {
}
/**
- * Normalizes the number of the {@code call} to E.164. The country of the SIM associated with the
- * call is used to determine the country.
+ * Normalizes the number of the {@code call} to E.164. If the number for the call does not contain
+ * a country code, then the current location as defined by {@link
+ * GeoUtil#getCurrentCountryIso(Context)} is used.
*
- * <p>If the number cannot be formatted (because for example the country cannot be determined),
- * returns the number with non-dialable digits removed.
+ * <p>If the number cannot be formatted (because for example number is invalid), returns the
+ * number with non-dialable digits removed.
*/
@WorkerThread
public static Optional<String> getNormalizedNumber(Context appContext, Call call) {
@@ -94,11 +92,12 @@ public class TelecomCallUtil {
}
/**
- * Formats the number of the {@code call} to E.164 if it is valid. The country of the SIM
- * associated with the call is used to determine the country.
+ * Formats the number of the {@code call} to E.164 if it is valid. If the number for the call does
+ * not contain a country code, then the current location as defined by {@link
+ * GeoUtil#getCurrentCountryIso(Context)} is used.
*
- * <p>If the number cannot be formatted (because for example it is invalid or the country cannot
- * be determined), returns {@link Optional#absent()}.
+ * <p>If the number cannot be formatted (because for example it is invalid), returns {@link
+ * Optional#absent()}.
*/
@WorkerThread
public static Optional<String> getValidE164Number(Context appContext, Call call) {
@@ -107,23 +106,7 @@ public class TelecomCallUtil {
if (TextUtils.isEmpty(rawNumber)) {
return Optional.absent();
}
- Optional<String> countryCode = getCountryCode(appContext, call);
- if (!countryCode.isPresent()) {
- LogUtil.w("TelecomCallUtil.getValidE164Number", "couldn't find a country code for call");
- return Optional.absent();
- }
- return Optional.fromNullable(PhoneNumberUtils.formatNumberToE164(rawNumber, countryCode.get()));
- }
-
- @WorkerThread
- public static Optional<String> getCountryCode(Context appContext, Call call) {
- Assert.isWorkerThread();
- PhoneAccountHandle phoneAccountHandle = call.getDetails().getAccountHandle();
- Optional<SubscriptionInfo> subscriptionInfo =
- TelecomUtil.getSubscriptionInfo(appContext, phoneAccountHandle);
- if (subscriptionInfo.isPresent() && subscriptionInfo.get().getCountryIso() != null) {
- return Optional.of(subscriptionInfo.get().getCountryIso().toUpperCase(Locale.US));
- }
- return Optional.absent();
+ return Optional.fromNullable(
+ PhoneNumberUtils.formatNumberToE164(rawNumber, GeoUtil.getCurrentCountryIso(appContext)));
}
}