Catch possible crash in getUserBadgedIcon

Happening on Google Pixel 4 XL, Android 8.1.0
This commit is contained in:
emanuele-f 2024-05-31 10:00:30 +02:00
parent 0351e7b9ac
commit 308de20cc7

View File

@ -29,6 +29,7 @@ import android.os.UserHandle;
import androidx.annotation.Nullable;
import com.emanuelef.remote_capture.CaptureService;
import com.emanuelef.remote_capture.Log;
import com.emanuelef.remote_capture.interfaces.DrawableLoader;
import java.io.Serializable;
@ -41,6 +42,8 @@ public class AppDescriptor implements Comparable<AppDescriptor>, Serializable {
private Drawable mIcon;
private final DrawableLoader mIconLoader;
private String mDescription;
private static final String TAG = "AppDescriptor";
private static boolean badgedIconFails = false;
// NULL for virtual apps
PackageManager mPm;
@ -97,8 +100,18 @@ public class AppDescriptor implements Comparable<AppDescriptor>, Serializable {
// the badge is added below via getUserHandleForUid
mIcon = mPackageInfo.applicationInfo.loadUnbadgedIcon(mPm);
UserHandle handle = UserHandle.getUserHandleForUid(mUid);
mIcon = mPm.getUserBadgedIcon(mIcon, handle);
if (!badgedIconFails) {
try {
UserHandle handle = UserHandle.getUserHandleForUid(mUid);
// On some systems may throw "java.lang.SecurityException: You need MANAGE_USERS permission to:
// check if specified user a managed profile outside your profile group"
mIcon = mPm.getUserBadgedIcon(mIcon, handle);
} catch (SecurityException e) {
Log.w(TAG, "getUserBadgedIcon failed, using icons without badges: " + e.getMessage());
badgedIconFails = true;
}
}
} else
mIcon = mPackageInfo.applicationInfo.loadIcon(mPm);