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:
@@ -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 {
|
||||||
|
|||||||
Reference in New Issue
Block a user