Catch potential SecurityException in app shortcut deserialization
Close #665
This commit is contained in:
parent
37db43405f
commit
bb55961b21
@ -6,6 +6,7 @@ import android.content.Intent.ShortcutIconResource
|
|||||||
import android.content.pm.LauncherApps
|
import android.content.pm.LauncherApps
|
||||||
import android.content.pm.PackageManager
|
import android.content.pm.PackageManager
|
||||||
import android.os.UserManager
|
import android.os.UserManager
|
||||||
|
import android.util.Log
|
||||||
import androidx.core.content.getSystemService
|
import androidx.core.content.getSystemService
|
||||||
import de.mm20.launcher2.ktx.jsonObjectOf
|
import de.mm20.launcher2.ktx.jsonObjectOf
|
||||||
import de.mm20.launcher2.search.SavableSearchable
|
import de.mm20.launcher2.search.SavableSearchable
|
||||||
@ -35,7 +36,9 @@ class LauncherShortcutDeserializer(
|
|||||||
) : SearchableDeserializer, KoinComponent {
|
) : SearchableDeserializer, KoinComponent {
|
||||||
|
|
||||||
override suspend fun deserialize(serialized: String): SavableSearchable? {
|
override suspend fun deserialize(serialized: String): SavableSearchable? {
|
||||||
val launcherApps = context.getSystemService(Context.LAUNCHER_APPS_SERVICE) as LauncherApps
|
try {
|
||||||
|
val launcherApps =
|
||||||
|
context.getSystemService(Context.LAUNCHER_APPS_SERVICE) as LauncherApps
|
||||||
|
|
||||||
val json = JSONObject(serialized)
|
val json = JSONObject(serialized)
|
||||||
val packageName = json.getString("packagename")
|
val packageName = json.getString("packagename")
|
||||||
@ -47,11 +50,11 @@ class LauncherShortcutDeserializer(
|
|||||||
|
|
||||||
if (!launcherApps.hasShortcutHostPermission()) {
|
if (!launcherApps.hasShortcutHostPermission()) {
|
||||||
return UnavailableShortcut(context, id, packageName, user, userSerial)
|
return UnavailableShortcut(context, id, packageName, user, userSerial)
|
||||||
}
|
} else {
|
||||||
else {
|
|
||||||
val query = LauncherApps.ShortcutQuery()
|
val query = LauncherApps.ShortcutQuery()
|
||||||
query.setPackage(packageName)
|
query.setPackage(packageName)
|
||||||
query.setQueryFlags(LauncherApps.ShortcutQuery.FLAG_MATCH_PINNED or
|
query.setQueryFlags(
|
||||||
|
LauncherApps.ShortcutQuery.FLAG_MATCH_PINNED or
|
||||||
LauncherApps.ShortcutQuery.FLAG_MATCH_DYNAMIC or
|
LauncherApps.ShortcutQuery.FLAG_MATCH_DYNAMIC or
|
||||||
LauncherApps.ShortcutQuery.FLAG_MATCH_MANIFEST or
|
LauncherApps.ShortcutQuery.FLAG_MATCH_MANIFEST or
|
||||||
LauncherApps.ShortcutQuery.FLAG_MATCH_CACHED or
|
LauncherApps.ShortcutQuery.FLAG_MATCH_CACHED or
|
||||||
@ -72,6 +75,10 @@ class LauncherShortcutDeserializer(
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
} catch (e: SecurityException) {
|
||||||
|
Log.e("MM20", "Failed to deserialize shortcut: $serialized", e)
|
||||||
|
return null
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user