Merge "Add keystore onUserAdded/Removed methods"

This commit is contained in:
Chad Brubaker
2015-05-12 23:26:34 +00:00
committed by Gerrit Code Review
3 changed files with 44 additions and 12 deletions

View File

@@ -75,4 +75,6 @@ interface IKeystoreService {
int abort(IBinder handle);
boolean isOperationAuthorized(IBinder token);
int addAuthToken(in byte[] authToken);
int onUserAdded(int userId, int parentId);
int onUserRemoved(int userId);
}

View File

@@ -545,6 +545,44 @@ public class KeyStore {
}
}
/**
* Notify keystore that a user was added.
*
* @param userId the new user.
* @param parentId the parent of the new user, or -1 if the user has no parent. If parentId is
* specified then the new user's keystore will be intialized with the same secure lockscreen
* password as the parent.
*/
public void onUserAdded(int userId, int parentId) {
try {
mBinder.onUserAdded(userId, parentId);
} catch (RemoteException e) {
Log.w(TAG, "Cannot connect to keystore", e);
}
}
/**
* Notify keystore that a user was added.
*
* @param userId the new user.
*/
public void onUserAdded(int userId) {
onUserAdded(userId, -1);
}
/**
* Notify keystore that a user was removed.
*
* @param userId the removed user.
*/
public void onUserRemoved(int userId) {
try {
mBinder.onUserRemoved(userId);
} catch (RemoteException e) {
Log.w(TAG, "Cannot connect to keystore", e);
}
}
public boolean onUserPasswordChanged(String newPassword) {
return onUserPasswordChanged(UserHandle.getUserId(Process.myUid()), newPassword);
}

View File

@@ -100,20 +100,13 @@ public class LockSettingsService extends ILockSettings.Stub {
@Override
public void onReceive(Context context, Intent intent) {
if (Intent.ACTION_USER_ADDED.equals(intent.getAction())) {
// Notify keystore that a new user was added.
final int userHandle = intent.getIntExtra(Intent.EXTRA_USER_HANDLE, 0);
final int userSysUid = UserHandle.getUid(userHandle, Process.SYSTEM_UID);
final KeyStore ks = KeyStore.getInstance();
// Clear up keystore in case anything was left behind by previous users
ks.resetUid(userSysUid);
// If this user has a parent, sync with its keystore password
final UserManager um = (UserManager) mContext.getSystemService(USER_SERVICE);
final UserInfo parentInfo = um.getProfileParent(userHandle);
if (parentInfo != null) {
final int parentSysUid = UserHandle.getUid(parentInfo.id, Process.SYSTEM_UID);
ks.syncUid(parentSysUid, userSysUid);
}
final int parentHandle = parentInfo != null ? parentInfo.id : -1;
ks.onUserAdded(userHandle, parentHandle);
} else if (Intent.ACTION_USER_STARTING.equals(intent.getAction())) {
final int userHandle = intent.getIntExtra(Intent.EXTRA_USER_HANDLE, 0);
mStorage.prefetchUser(userHandle);
@@ -392,8 +385,7 @@ public class LockSettingsService extends ILockSettings.Stub {
mStorage.removeUser(userId);
final KeyStore ks = KeyStore.getInstance();
final int userUid = UserHandle.getUid(userId, Process.SYSTEM_UID);
ks.resetUid(userUid);
ks.onUserRemoved(userId);
}
private static final String[] VALID_SETTINGS = new String[] {