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

Commit 8e5017d2 authored by Michael W's avatar Michael W Committed by Bruno Martins
Browse files

LineageParts: Stats: Try getting a valid country code

* As per https://developer.android.com/reference/android/telephony/TelephonyManager#getNetworkCountryIso()
  we are either getting a valid lowercase 2 character alpha-2 country
  code or an empty string. Make it uppercase so the server needs to do
  less work on those strings
* Additionally the doc states to be unreliable on CDMA networks, so in
  those case don't use the result
* To get a country code anyway, use getCountry() on the current locale
  - we will get either an uppercase 2-letter or a 3-digit code,
  which we only use when it's the 2-letter result

Change-Id: I2c2538e1d77502f3c240543b544c954226175061
parent f9a1ec6f
Loading
Loading
Loading
Loading
+13 −3
Original line number Diff line number Diff line
@@ -28,6 +28,7 @@ import lineageos.providers.LineageSettings;
import java.math.BigInteger;
import java.net.NetworkInterface;
import java.security.MessageDigest;
import java.util.Locale;

public class Utilities {
    public static String getUniqueID(Context context) {
@@ -55,10 +56,15 @@ public class Utilities {

    public static String getCountryCode(Context context) {
        TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
        String countryCode = tm.getNetworkCountryIso();
        if (TextUtils.isEmpty(countryCode)) {
        String countryCode = tm.getNetworkCountryIso().toUpperCase();
        if (TextUtils.isEmpty(countryCode) || isCdmaPhone(tm)) {
            String localeCountryCode = Locale.getDefault().getCountry();
            if (localeCountryCode.length() == 2) {
                countryCode = localeCountryCode;
            } else {
                countryCode = "Unknown";
            }
        }
        return countryCode;
    }

@@ -99,4 +105,8 @@ public class Utilities {
        LineageSettings.Secure.putInt(context.getContentResolver(),
                LineageSettings.Secure.STATS_COLLECTION, enable);
    }

    private static boolean isCdmaPhone(TelephonyManager tm) {
        return tm != null && tm.getPhoneType() == TelephonyManager.PHONE_TYPE_CDMA;
    }
}