Merge "Allow user to get his own icon." into nyc-dev

am: 655f1df89d

* commit '655f1df89d53fcc1a6bd3b39b470eb970a16bd8b':
  Allow user to get his own icon.
This commit is contained in:
Oleksandr Peletskyi
2016-03-10 16:11:18 +00:00
committed by android-build-merger

View File

@@ -50,6 +50,7 @@ import android.os.PersistableBundle;
import android.os.Process; import android.os.Process;
import android.os.RemoteException; import android.os.RemoteException;
import android.os.ResultReceiver; import android.os.ResultReceiver;
import android.os.SELinux;
import android.os.ServiceManager; import android.os.ServiceManager;
import android.os.ShellCommand; import android.os.ShellCommand;
import android.os.UserHandle; import android.os.UserHandle;
@@ -758,23 +759,28 @@ public class UserManagerService extends IUserManager.Stub {
} }
@Override @Override
public ParcelFileDescriptor getUserIcon(int userId) { public ParcelFileDescriptor getUserIcon(int targetUserId) {
String iconPath; String iconPath;
synchronized (mPackagesLock) { synchronized (mPackagesLock) {
UserInfo info = getUserInfoNoChecks(userId); UserInfo targetUserInfo = getUserInfoNoChecks(targetUserId);
if (info == null || info.partial) { if (targetUserInfo == null || targetUserInfo.partial) {
Slog.w(LOG_TAG, "getUserIcon: unknown user #" + userId); Slog.w(LOG_TAG, "getUserIcon: unknown user #" + targetUserId);
return null; return null;
} }
int callingGroupId = getUserInfoNoChecks(UserHandle.getCallingUserId()).profileGroupId;
if (callingGroupId == UserInfo.NO_PROFILE_GROUP_ID final int callingUserId = UserHandle.getCallingUserId();
|| callingGroupId != info.profileGroupId) { final int callingGroupId = getUserInfoNoChecks(callingUserId).profileGroupId;
final int targetGroupId = targetUserInfo.profileGroupId;
final boolean sameGroup = (callingGroupId != UserInfo.NO_PROFILE_GROUP_ID
&& callingGroupId == targetGroupId);
if ((callingUserId != targetUserId) && !sameGroup) {
checkManageUsersPermission("get the icon of a user who is not related"); checkManageUsersPermission("get the icon of a user who is not related");
} }
if (info.iconPath == null) {
if (targetUserInfo.iconPath == null) {
return null; return null;
} }
iconPath = info.iconPath; iconPath = targetUserInfo.iconPath;
} }
try { try {
@@ -1229,7 +1235,7 @@ public class UserManagerService extends IUserManager.Stub {
} }
FileOutputStream os; FileOutputStream os;
if (bitmap.compress(Bitmap.CompressFormat.PNG, 100, os = new FileOutputStream(tmp)) if (bitmap.compress(Bitmap.CompressFormat.PNG, 100, os = new FileOutputStream(tmp))
&& tmp.renameTo(file)) { && tmp.renameTo(file) && SELinux.restorecon(file)) {
info.iconPath = file.getAbsolutePath(); info.iconPath = file.getAbsolutePath();
} }
try { try {