Loading core/java/android/os/storage/StorageManager.java +8 −0 Original line number Diff line number Diff line Loading @@ -665,4 +665,12 @@ public class StorageManager { public static final int CRYPT_TYPE_PATTERN = 2; /** @hide */ public static final int CRYPT_TYPE_PIN = 3; // Constants for the data available via MountService.getField. /** @hide */ public static final String SYSTEM_LOCALE_KEY = "SystemLocale"; /** @hide */ public static final String OWNER_INFO_KEY = "OwnerInfo"; /** @hide */ public static final String PATTERN_VISIBLE_KEY = "PatternVisible"; } core/java/com/android/internal/widget/LockPatternUtils.java +2 −2 Original line number Diff line number Diff line Loading @@ -604,7 +604,7 @@ public class LockPatternUtils { IMountService mountService = IMountService.Stub.asInterface(service); try { Log.d(TAG, "Setting owner info"); mountService.setField("OwnerInfo", ownerInfo); mountService.setField(StorageManager.OWNER_INFO_KEY, ownerInfo); } catch (RemoteException e) { Log.e(TAG, "Error changing user info", e); } Loading Loading @@ -1144,7 +1144,7 @@ public class LockPatternUtils { IMountService mountService = IMountService.Stub.asInterface(service); try { mountService.setField("PatternVisible", enabled ? "1" : "0"); mountService.setField(StorageManager.PATTERN_VISIBLE_KEY, enabled ? "1" : "0"); } catch (RemoteException e) { Log.e(TAG, "Error changing pattern visible state", e); } Loading services/core/java/com/android/server/MountService.java +29 −0 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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; Loading Loading @@ -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; Loading Loading @@ -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(); Loading @@ -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 */ Loading services/core/java/com/android/server/am/ActivityManagerService.java +17 −0 Original line number Diff line number Diff line Loading @@ -48,6 +48,8 @@ import android.graphics.Point; import android.graphics.Rect; import android.os.BatteryStats; import android.os.PersistableBundle; import android.os.storage.IMountService; import android.os.storage.StorageManager; import android.service.voice.IVoiceInteractionSession; import android.util.ArrayMap; import android.util.ArraySet; Loading Loading @@ -1192,6 +1194,7 @@ public final class ActivityManagerService extends ActivityManagerNative static final int ENTER_ANIMATION_COMPLETE_MSG = 44; static final int ENABLE_SCREEN_AFTER_BOOT_MSG = 45; static final int START_USER_SWITCH_MSG = 46; static final int SEND_LOCALE_TO_MOUNT_DAEMON_MSG = 47; static final int FIRST_ACTIVITY_STACK_MSG = 100; static final int FIRST_BROADCAST_QUEUE_MSG = 200; Loading Loading @@ -1878,6 +1881,18 @@ public final class ActivityManagerService extends ActivityManagerNative enableScreenAfterBoot(); break; } case SEND_LOCALE_TO_MOUNT_DAEMON_MSG: { try { Locale l = (Locale) msg.obj; IBinder service = ServiceManager.getService("mount"); IMountService mountService = IMountService.Stub.asInterface(service); Log.d(TAG, "Storing locale " + l.toLanguageTag() + " for decryption UI"); mountService.setField(StorageManager.SYSTEM_LOCALE_KEY, l.toLanguageTag()); } catch (RemoteException e) { Log.e(TAG, "Error storing locale for decryption UI", e); } break; } } } }; Loading Loading @@ -16258,6 +16273,8 @@ public final class ActivityManagerService extends ActivityManagerNative SystemProperties.set("persist.sys.language", l.getLanguage()); SystemProperties.set("persist.sys.country", l.getCountry()); SystemProperties.set("persist.sys.localevar", l.getVariant()); mHandler.sendMessage(mHandler.obtainMessage(SEND_LOCALE_TO_MOUNT_DAEMON_MSG, l)); } } Loading
core/java/android/os/storage/StorageManager.java +8 −0 Original line number Diff line number Diff line Loading @@ -665,4 +665,12 @@ public class StorageManager { public static final int CRYPT_TYPE_PATTERN = 2; /** @hide */ public static final int CRYPT_TYPE_PIN = 3; // Constants for the data available via MountService.getField. /** @hide */ public static final String SYSTEM_LOCALE_KEY = "SystemLocale"; /** @hide */ public static final String OWNER_INFO_KEY = "OwnerInfo"; /** @hide */ public static final String PATTERN_VISIBLE_KEY = "PatternVisible"; }
core/java/com/android/internal/widget/LockPatternUtils.java +2 −2 Original line number Diff line number Diff line Loading @@ -604,7 +604,7 @@ public class LockPatternUtils { IMountService mountService = IMountService.Stub.asInterface(service); try { Log.d(TAG, "Setting owner info"); mountService.setField("OwnerInfo", ownerInfo); mountService.setField(StorageManager.OWNER_INFO_KEY, ownerInfo); } catch (RemoteException e) { Log.e(TAG, "Error changing user info", e); } Loading Loading @@ -1144,7 +1144,7 @@ public class LockPatternUtils { IMountService mountService = IMountService.Stub.asInterface(service); try { mountService.setField("PatternVisible", enabled ? "1" : "0"); mountService.setField(StorageManager.PATTERN_VISIBLE_KEY, enabled ? "1" : "0"); } catch (RemoteException e) { Log.e(TAG, "Error changing pattern visible state", e); } Loading
services/core/java/com/android/server/MountService.java +29 −0 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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; Loading Loading @@ -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; Loading Loading @@ -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(); Loading @@ -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 */ Loading
services/core/java/com/android/server/am/ActivityManagerService.java +17 −0 Original line number Diff line number Diff line Loading @@ -48,6 +48,8 @@ import android.graphics.Point; import android.graphics.Rect; import android.os.BatteryStats; import android.os.PersistableBundle; import android.os.storage.IMountService; import android.os.storage.StorageManager; import android.service.voice.IVoiceInteractionSession; import android.util.ArrayMap; import android.util.ArraySet; Loading Loading @@ -1192,6 +1194,7 @@ public final class ActivityManagerService extends ActivityManagerNative static final int ENTER_ANIMATION_COMPLETE_MSG = 44; static final int ENABLE_SCREEN_AFTER_BOOT_MSG = 45; static final int START_USER_SWITCH_MSG = 46; static final int SEND_LOCALE_TO_MOUNT_DAEMON_MSG = 47; static final int FIRST_ACTIVITY_STACK_MSG = 100; static final int FIRST_BROADCAST_QUEUE_MSG = 200; Loading Loading @@ -1878,6 +1881,18 @@ public final class ActivityManagerService extends ActivityManagerNative enableScreenAfterBoot(); break; } case SEND_LOCALE_TO_MOUNT_DAEMON_MSG: { try { Locale l = (Locale) msg.obj; IBinder service = ServiceManager.getService("mount"); IMountService mountService = IMountService.Stub.asInterface(service); Log.d(TAG, "Storing locale " + l.toLanguageTag() + " for decryption UI"); mountService.setField(StorageManager.SYSTEM_LOCALE_KEY, l.toLanguageTag()); } catch (RemoteException e) { Log.e(TAG, "Error storing locale for decryption UI", e); } break; } } } }; Loading Loading @@ -16258,6 +16273,8 @@ public final class ActivityManagerService extends ActivityManagerNative SystemProperties.set("persist.sys.language", l.getLanguage()); SystemProperties.set("persist.sys.country", l.getCountry()); SystemProperties.set("persist.sys.localevar", l.getVariant()); mHandler.sendMessage(mHandler.obtainMessage(SEND_LOCALE_TO_MOUNT_DAEMON_MSG, l)); } }