diff --git a/app/src/main/java/com/emanuelef/remote_capture/model/AppDescriptor.java b/app/src/main/java/com/emanuelef/remote_capture/model/AppDescriptor.java index 54b33740..d73a370a 100644 --- a/app/src/main/java/com/emanuelef/remote_capture/model/AppDescriptor.java +++ b/app/src/main/java/com/emanuelef/remote_capture/model/AppDescriptor.java @@ -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, 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, 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);