summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--services/usb/java/com/android/server/usb/UsbDeviceManager.java60
1 files changed, 32 insertions, 28 deletions
diff --git a/services/usb/java/com/android/server/usb/UsbDeviceManager.java b/services/usb/java/com/android/server/usb/UsbDeviceManager.java
index e5f50dedc6bb..680694732b2d 100644
--- a/services/usb/java/com/android/server/usb/UsbDeviceManager.java
+++ b/services/usb/java/com/android/server/usb/UsbDeviceManager.java
@@ -103,6 +103,11 @@ public class UsbDeviceManager implements ActivityManagerInternal.ScreenObserver
private static final boolean DEBUG = false;
/**
+ * The name of the xml file in which screen unlocked functions are stored.
+ */
+ private static final String USB_PREFS_XML = "UsbDeviceManagerPrefs.xml";
+
+ /**
* The SharedPreference setting per user that stores the screen unlocked functions between
* sessions.
*/
@@ -229,14 +234,12 @@ public class UsbDeviceManager implements ActivityManagerInternal.ScreenObserver
int userHandle = ActivityManager.getCurrentUser();
boolean secure = mContext.getSystemService(KeyguardManager.class)
.isDeviceSecure(userHandle);
- boolean unlocking = mContext.getSystemService(UserManager.class)
- .isUserUnlockingOrUnlocked(userHandle);
if (DEBUG) {
Slog.v(TAG, "onKeyguardStateChanged: isShowing:" + isShowing + " secure:" + secure
- + " unlocking:" + unlocking + " user:" + userHandle);
+ + " user:" + userHandle);
}
- // We are unlocked when the keyguard is down or non-secure, and user storage is unlocked.
- mHandler.sendMessage(MSG_UPDATE_SCREEN_LOCK, (isShowing && secure) || !unlocking);
+ // We are unlocked when the keyguard is down or non-secure.
+ mHandler.sendMessage(MSG_UPDATE_SCREEN_LOCK, (isShowing && secure));
}
@Override
@@ -500,7 +503,6 @@ public class UsbDeviceManager implements ActivityManagerInternal.ScreenObserver
mContentResolver = context.getContentResolver();
mCurrentUser = ActivityManager.getCurrentUser();
- mScreenUnlockedFunctions = UsbManager.FUNCTION_NONE;
mScreenLocked = true;
/*
@@ -510,6 +512,16 @@ public class UsbDeviceManager implements ActivityManagerInternal.ScreenObserver
mAdbEnabled = UsbHandlerLegacy.containsFunction(getSystemProperty(
USB_PERSISTENT_CONFIG_PROPERTY, ""), UsbManager.USB_FUNCTION_ADB);
+ mSettings = getPinnedSharedPrefs(mContext);
+ if (mSettings == null) {
+ Slog.e(TAG, "Couldn't load shared preferences");
+ } else {
+ mScreenUnlockedFunctions = UsbManager.usbFunctionsFromString(
+ mSettings.getString(
+ String.format(Locale.ENGLISH, UNLOCKED_CONFIG_PREF, mCurrentUser),
+ ""));
+ }
+
// We do not show the USB notification if the primary volume supports mass storage.
// The legacy mass storage UI will be used instead.
final StorageManager storageManager = StorageManager.from(mContext);
@@ -664,11 +676,10 @@ public class UsbDeviceManager implements ActivityManagerInternal.ScreenObserver
}
protected SharedPreferences getPinnedSharedPrefs(Context context) {
- final File prefsFile = new File(new File(
- Environment.getDataUserCePackageDirectory(StorageManager.UUID_PRIVATE_INTERNAL,
- context.getUserId(), context.getPackageName()), "shared_prefs"),
- UsbDeviceManager.class.getSimpleName() + ".xml");
- return context.getSharedPreferences(prefsFile, Context.MODE_PRIVATE);
+ final File prefsFile = new File(
+ Environment.getDataSystemDeDirectory(UserHandle.USER_SYSTEM), USB_PREFS_XML);
+ return context.createDeviceProtectedStorageContext()
+ .getSharedPreferences(prefsFile, Context.MODE_PRIVATE);
}
private boolean isUsbStateChanged(Intent intent) {
@@ -888,11 +899,13 @@ public class UsbDeviceManager implements ActivityManagerInternal.ScreenObserver
break;
case MSG_SET_SCREEN_UNLOCKED_FUNCTIONS:
mScreenUnlockedFunctions = (Long) msg.obj;
- SharedPreferences.Editor editor = mSettings.edit();
- editor.putString(String.format(Locale.ENGLISH, UNLOCKED_CONFIG_PREF,
- mCurrentUser),
- UsbManager.usbFunctionsToString(mScreenUnlockedFunctions));
- editor.commit();
+ if (mSettings != null) {
+ SharedPreferences.Editor editor = mSettings.edit();
+ editor.putString(String.format(Locale.ENGLISH, UNLOCKED_CONFIG_PREF,
+ mCurrentUser),
+ UsbManager.usbFunctionsToString(mScreenUnlockedFunctions));
+ editor.commit();
+ }
if (!mScreenLocked && mScreenUnlockedFunctions != UsbManager.FUNCTION_NONE) {
// If the screen is unlocked, also set current functions.
setScreenUnlockedFunctions();
@@ -903,14 +916,6 @@ public class UsbDeviceManager implements ActivityManagerInternal.ScreenObserver
break;
}
mScreenLocked = msg.arg1 == 1;
- if (mSettings == null && !mScreenLocked) {
- // Shared preferences aren't accessible until the user has been unlocked.
- mSettings = getPinnedSharedPrefs(mContext);
- mScreenUnlockedFunctions = UsbManager.usbFunctionsFromString(
- mSettings.getString(
- String.format(Locale.ENGLISH, UNLOCKED_CONFIG_PREF, mCurrentUser),
- ""));
- }
if (!mBootCompleted) {
break;
}
@@ -964,12 +969,11 @@ public class UsbDeviceManager implements ActivityManagerInternal.ScreenObserver
}
mCurrentUser = msg.arg1;
mScreenLocked = true;
+ mScreenUnlockedFunctions = UsbManager.FUNCTION_NONE;
if (mSettings != null) {
mScreenUnlockedFunctions = UsbManager.usbFunctionsFromString(
- mSettings.getString(
- String.format(Locale.ENGLISH, UNLOCKED_CONFIG_PREF,
- mCurrentUser),
- ""));
+ mSettings.getString(String.format(Locale.ENGLISH,
+ UNLOCKED_CONFIG_PREF, mCurrentUser), ""));
}
setEnabledFunctions(UsbManager.FUNCTION_NONE, false);
}