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

Commit 0d093e65 authored by Bart Sears's avatar Bart Sears Committed by Russell Brenner
Browse files

resolved conflicts for merge of 0d0f2577 to lmp-mr1-dev-plus-aosp

Change-Id: Ibf441059ff30faeb104a036f348a58eb17c8fbce
parents e7620f73 0d0f2577
Loading
Loading
Loading
Loading
+37 −13
Original line number Diff line number Diff line
@@ -24,6 +24,7 @@ import android.net.wifi.WifiManager;
import android.os.Build;
import android.os.RemoteException;
import android.os.SystemProperties;
import android.provider.Settings;
import android.telephony.TelephonyManager;
import android.text.TextUtils;
import android.util.Slog;
@@ -223,6 +224,28 @@ public final class MccTable {
        }
    }

    // Bug 19232829: It is possible to get through provisioning without setting up a persistent
    // locale value. We don't modify the locale if the device has completed "provisioning" because
    // we don't want to change the locale if the user inserts a new SIM or a new version of Android
    // is better at recognizing MCC values than an older version.
    private static boolean canUpdateLocale(Context context) {
        return !(userHasPersistedLocale() || isDeviceProvisioned(context));
    }

    private static boolean userHasPersistedLocale() {
        final String persistedLocale = SystemProperties.get("persist.sys.locale", "");
        return !persistedLocale.isEmpty();
    }

    private static boolean isDeviceProvisioned(Context context) {
        try {
            return Settings.Global.getInt(
                    context.getContentResolver(), Settings.Global.DEVICE_PROVISIONED) != 0;
        } catch (Settings.SettingNotFoundException e) {
            return false;
        }
    }

    /**
     * Return Locale for the language and country or null if no good match.
     *
@@ -243,22 +266,13 @@ public final class MccTable {
        }

        // Check whether a developer is trying to test an arbitrary MCC.
        boolean debuggingMccOverride = false;
        if (Build.IS_DEBUGGABLE) {
            String overrideMcc = SystemProperties.get("persist.sys.override_mcc", "");
            if (!overrideMcc.isEmpty()) {
                debuggingMccOverride = true;
            }
        }
        boolean debuggingMccOverride = isDebuggingMccOverride();

        // If this is a regular user and they already have a persisted locale, we're done.
        if (!debuggingMccOverride) {
            final String persistedLocale = SystemProperties.get("persist.sys.locale", "");
            if (!persistedLocale.isEmpty()) {
                Slog.d(LOG_TAG, "getLocaleForLanguageCountry: skipping already persisted");
        if (!(debuggingMccOverride || canUpdateLocale(context))) {
            Slog.d(LOG_TAG, "getLocaleForLanguageCountry: not permitted to update locale");
            return null;
        }
        }

        // Find the best match we actually have a localization for.
        // TODO: this should really follow the CLDR chain of parent locales!
@@ -314,6 +328,16 @@ public final class MccTable {
        return null;
    }

    private static boolean isDebuggingMccOverride() {
        if (Build.IS_DEBUGGABLE) {
            String overrideMcc = SystemProperties.get("persist.sys.override_mcc", "");
            if (!overrideMcc.isEmpty()) {
                return true;
            }
        }
        return false;
    }

    /**
     * Utility code to set the system locale if it's not set already
     * @param context Context to act on.