Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 52d52b13 authored by twyen's avatar twyen Committed by android-build-merger
Browse files

Merge "Use current county ISO for PhoneLookupHistoryRecorder"

am: 6121b933

Change-Id: I9c558228f748183ee35998dad4685c55cf88c941
parents 3a31549c 6121b933
Loading
Loading
Loading
Loading
+10 −3
Original line number Diff line number Diff line
@@ -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;
  }
}
+6 −1
Original line number Diff line number Diff line
@@ -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");
+13 −30
Original line number Diff line number Diff line
@@ -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)));
  }
}
+2 −2
Original line number Diff line number Diff line
@@ -24,6 +24,7 @@ import com.android.dialer.common.Assert;
import com.android.dialer.common.LogUtil;
import com.android.dialer.common.concurrent.DialerExecutorComponent;
import com.android.dialer.configprovider.ConfigProviderBindings;
import com.android.dialer.location.GeoUtil;
import com.android.dialer.phonelookup.PhoneLookupComponent;
import com.android.dialer.phonelookup.PhoneLookupInfo;
import com.android.dialer.phonelookup.database.contract.PhoneLookupHistoryContract.PhoneLookupHistory;
@@ -61,8 +62,7 @@ final class PhoneLookupHistoryRecorder {
              DialerPhoneNumberUtil dialerPhoneNumberUtil =
                  new DialerPhoneNumberUtil(PhoneNumberUtil.getInstance());
              return dialerPhoneNumberUtil.parse(
                  TelecomCallUtil.getNumber(call),
                  TelecomCallUtil.getCountryCode(appContext, call).orNull());
                  TelecomCallUtil.getNumber(call), GeoUtil.getCurrentCountryIso(appContext));
            });

    ListenableFuture<PhoneLookupInfo> infoFuture =