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
diff --git a/src/org/lineageos/lineageparts/lineagestats/Utilities.java b/src/org/lineageos/lineageparts/lineagestats/Utilities.java
index de4bf07..511f6ed 100644
--- a/src/org/lineageos/lineageparts/lineagestats/Utilities.java
+++ b/src/org/lineageos/lineageparts/lineagestats/Utilities.java
@@ -28,6 +28,7 @@
 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,9 +56,14 @@
 
     public static String getCountryCode(Context context) {
         TelephonyManager tm = context.getSystemService(TelephonyManager.class);
-        String countryCode = tm.getNetworkCountryIso();
-        if (TextUtils.isEmpty(countryCode)) {
-            countryCode = "Unknown";
+        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 @@
         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;
+    }
 }