summaryrefslogtreecommitdiffstats
path: root/services/core/java/com/android/server/MountService.java
diff options
context:
space:
mode:
authorElliott Hughes <enh@google.com>2014-09-26 12:30:47 -0700
committerElliott Hughes <enh@google.com>2014-09-26 15:18:20 -0700
commitf839b4fcb6b179529585765517895a8c90fe315b (patch)
tree406660ee666f40dd9bda2ace4107fab9bd4d8d24 /services/core/java/com/android/server/MountService.java
parent6b0a880e13b217b670f27bfe8ef3a13b3bb51af0 (diff)
downloadframeworks_base-f839b4fcb6b179529585765517895a8c90fe315b.zip
frameworks_base-f839b4fcb6b179529585765517895a8c90fe315b.tar.gz
frameworks_base-f839b4fcb6b179529585765517895a8c90fe315b.tar.bz2
Set the system locale correctly even on an encrypted device.
Bug: 17659622 Change-Id: Ibbbd5b959bfab5345f20b556c4720d0910b50084
Diffstat (limited to 'services/core/java/com/android/server/MountService.java')
-rw-r--r--services/core/java/com/android/server/MountService.java29
1 files changed, 29 insertions, 0 deletions
diff --git a/services/core/java/com/android/server/MountService.java b/services/core/java/com/android/server/MountService.java
index ea24d7c..7f24d07 100644
--- a/services/core/java/com/android/server/MountService.java
+++ b/services/core/java/com/android/server/MountService.java
@@ -19,6 +19,7 @@ package com.android.server;
import static android.content.pm.PackageManager.PERMISSION_GRANTED;
import android.Manifest;
+import android.app.ActivityManagerNative;
import android.app.AppOpsManager;
import android.content.BroadcastReceiver;
import android.content.ComponentName;
@@ -28,6 +29,7 @@ import android.content.IntentFilter;
import android.content.ServiceConnection;
import android.content.pm.PackageManager;
import android.content.pm.UserInfo;
+import android.content.res.Configuration;
import android.content.res.ObbInfo;
import android.content.res.Resources;
import android.content.res.TypedArray;
@@ -94,6 +96,7 @@ import java.util.HashSet;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
+import java.util.Locale;
import java.util.Map;
import java.util.Map.Entry;
import java.util.concurrent.atomic.AtomicInteger;
@@ -821,6 +824,10 @@ class MountService extends IMountService.Stub
*/
mConnectedSignal.countDown();
+ // On an encrypted device we can't see system properties yet, so pull
+ // the system locale out of the mount service.
+ copyLocaleFromMountService();
+
// Let package manager load internal ASECs.
mPms.scanAvailableAsecs();
@@ -830,6 +837,28 @@ class MountService extends IMountService.Stub
}.start();
}
+ private void copyLocaleFromMountService() {
+ String systemLocale;
+ try {
+ systemLocale = getField(StorageManager.SYSTEM_LOCALE_KEY);
+ } catch (RemoteException e) {
+ return;
+ }
+ if (TextUtils.isEmpty(systemLocale)) {
+ return;
+ }
+
+ Slog.d(TAG, "Got locale " + systemLocale + " from mount service");
+ Locale locale = Locale.forLanguageTag(systemLocale);
+ Configuration config = new Configuration();
+ config.setLocale(locale);
+ try {
+ ActivityManagerNative.getDefault().updateConfiguration(config);
+ } catch (RemoteException e) {
+ Slog.e(TAG, "Error setting system locale from mount service", e);
+ }
+ }
+
/**
* Callback from NativeDaemonConnector
*/