Fixed possible crashes below U

This commit is contained in:
MrSluffy
2024-12-27 09:40:06 +08:00
parent 1bc5b0459c
commit 6033863bf8
2 changed files with 72 additions and 54 deletions

View File

@@ -77,55 +77,69 @@ open class SystemApiWrapper(context: Context?) : ApiWrapper(context) {
if (!enablePrivateSpace() || !LawnchairApp.isRecentsEnabled) { if (!enablePrivateSpace() || !LawnchairApp.isRecentsEnabled) {
return super.queryAllUsers() return super.queryAllUsers()
} }
val users = ArrayMap<UserHandle, UserIconInfo>() return try {
mContext.getSystemService(UserManager::class.java)!!.userProfiles?.forEach { user -> val users = ArrayMap<UserHandle, UserIconInfo>()
mContext.getSystemService(LauncherApps::class.java)!!.getLauncherUserInfo(user)?.apply { mContext.getSystemService(UserManager::class.java)!!.userProfiles?.forEach { user ->
users[user] = mContext.getSystemService(LauncherApps::class.java)!!.getLauncherUserInfo(user)?.apply {
UserIconInfo( users[user] =
user, UserIconInfo(
when (userType) { user,
UserManager.USER_TYPE_PROFILE_MANAGED -> UserIconInfo.TYPE_WORK when (userType) {
UserManager.USER_TYPE_PROFILE_CLONE -> UserIconInfo.TYPE_CLONED UserManager.USER_TYPE_PROFILE_MANAGED -> UserIconInfo.TYPE_WORK
UserManager.USER_TYPE_PROFILE_PRIVATE -> UserIconInfo.TYPE_PRIVATE UserManager.USER_TYPE_PROFILE_CLONE -> UserIconInfo.TYPE_CLONED
else -> UserIconInfo.TYPE_MAIN UserManager.USER_TYPE_PROFILE_PRIVATE -> UserIconInfo.TYPE_PRIVATE
}, else -> UserIconInfo.TYPE_MAIN
userSerialNumber.toLong() },
) userSerialNumber.toLong()
)
}
} }
return users
} catch (t : Throwable) {
return super.queryAllUsers()
} }
return users
} }
@RequiresApi(Build.VERSION_CODES.VANILLA_ICE_CREAM) @RequiresApi(Build.VERSION_CODES.VANILLA_ICE_CREAM)
override fun getPreInstalledSystemPackages(user: UserHandle): List<String> = override fun getPreInstalledSystemPackages(user: UserHandle): List<String> {
if (enablePrivateSpace() && privateSpaceSysAppsSeparation()) return try {
mContext if (enablePrivateSpace() && privateSpaceSysAppsSeparation())
.getSystemService(LauncherApps::class.java)!! mContext
.getPreInstalledSystemPackages(user) .getSystemService(LauncherApps::class.java)!!
else ArrayList() .getPreInstalledSystemPackages(user)
else ArrayList()
} catch (t: Throwable) {
super.getPreInstalledSystemPackages(user)
}
}
override fun getAppMarketActivityIntent(packageName: String, user: UserHandle): Intent = override fun getAppMarketActivityIntent(packageName: String, user: UserHandle): Intent {
if ( return try {
enablePrivateSpace() && if (
(privateSpaceAppInstallerButton() || enablePrivateSpaceInstallShortcut()) enablePrivateSpace() &&
) (privateSpaceAppInstallerButton() || enablePrivateSpaceInstallShortcut())
ProxyActivityStarter.getLaunchIntent(
mContext,
StartActivityParams(null as PendingIntent?, 0).apply {
intentSender =
mContext
.getSystemService(LauncherApps::class.java)!!
.getAppMarketActivityIntent(packageName, user)
options =
ActivityOptions.makeBasic()
.setPendingIntentBackgroundActivityStartMode(
ActivityOptions.MODE_BACKGROUND_ACTIVITY_START_ALLOWED
)
.toBundle()
requireActivityResult = false
}
) )
else super.getAppMarketActivityIntent(packageName, user) ProxyActivityStarter.getLaunchIntent(
mContext,
StartActivityParams(null as PendingIntent?, 0).apply {
intentSender =
mContext
.getSystemService(LauncherApps::class.java)!!
.getAppMarketActivityIntent(packageName, user)
options =
ActivityOptions.makeBasic()
.setPendingIntentBackgroundActivityStartMode(
ActivityOptions.MODE_BACKGROUND_ACTIVITY_START_ALLOWED
)
.toBundle()
requireActivityResult = false
}
)
else super.getAppMarketActivityIntent(packageName, user)
} catch (t: Throwable) {
super.getAppMarketActivityIntent(packageName, user)
}
}
/** Returns an intent which can be used to open Private Space Settings. */ /** Returns an intent which can be used to open Private Space Settings. */
override fun getPrivateSpaceSettingsIntent(): Intent? = override fun getPrivateSpaceSettingsIntent(): Intent? =

View File

@@ -101,19 +101,23 @@ public class ApiWrapper implements ResourceBasedOverride, SafeCloseable {
isWork ? UserIconInfo.TYPE_WORK : UserIconInfo.TYPE_MAIN, isWork ? UserIconInfo.TYPE_WORK : UserIconInfo.TYPE_MAIN,
serial); serial);
if (launcherApps != null && Utilities.ATLEAST_V) { try {
LauncherUserInfo userInfo = launcherApps.getLauncherUserInfo(user); if (Utilities.ATLEAST_U && launcherApps != null) {
if (userInfo != null) { LauncherUserInfo userInfo = launcherApps.getLauncherUserInfo(user);
var userType = userInfo.getUserType(); if (userInfo != null) {
info = new UserIconInfo( var userType = userInfo.getUserType();
user, info = new UserIconInfo(
userType.equals (UserManager.USER_TYPE_PROFILE_MANAGED) ? UserIconInfo.TYPE_WORK : user,
userType.equals (UserManager.USER_TYPE_PROFILE_CLONE) ? UserIconInfo.TYPE_CLONED : userType.equals (UserManager.USER_TYPE_PROFILE_MANAGED) ? UserIconInfo.TYPE_WORK :
userType.equals (UserManager.USER_TYPE_PROFILE_PRIVATE) ? UserIconInfo.TYPE_PRIVATE : userType.equals (UserManager.USER_TYPE_PROFILE_CLONE) ? UserIconInfo.TYPE_CLONED :
UserIconInfo.TYPE_MAIN, userType.equals (UserManager.USER_TYPE_PROFILE_PRIVATE) ? UserIconInfo.TYPE_PRIVATE :
serial UserIconInfo.TYPE_MAIN,
); serial
);
}
} }
} catch (Throwable t) {
// Ignore
} }
users.put(user, info); users.put(user, info);