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

Commit 6121b933 authored by Treehugger Robot's avatar Treehugger Robot Committed by Gerrit Code Review
Browse files

Merge "Use current county ISO for PhoneLookupHistoryRecorder"

parents 51d78059 73ae7522
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 =