Prevent NPE in SettingsSliceProvider

NPE is raised when run `adb shell content query --uri
content://com.android.settings/settings/slice_uri_pairs`

Bug: 312400299
Test: manual test
Change-Id: I686476e5ea6b68bddbd6045c34bf889e249fa6b5
This commit is contained in:
Jacky Wang
2023-11-22 16:32:49 +08:00
parent 41252bc6e6
commit 2a617ae872

View File

@@ -474,18 +474,25 @@ public class SettingsSliceProvider extends SliceProvider {
@VisibleForTesting @VisibleForTesting
boolean isPrivateSlicesNeeded(Uri uri) { boolean isPrivateSlicesNeeded(Uri uri) {
final String queryUri = getContext().getString(R.string.config_non_public_slice_query_uri); final Context context = getContext();
final String queryUri = context.getString(R.string.config_non_public_slice_query_uri);
if (!TextUtils.isEmpty(queryUri) && TextUtils.equals(uri.toString(), queryUri)) { if (!TextUtils.isEmpty(queryUri) && TextUtils.equals(uri.toString(), queryUri)) {
// check if the calling package is eligible for private slices // check if the calling package is eligible for private slices
final int callingUid = Binder.getCallingUid(); final int callingUid = Binder.getCallingUid();
final boolean hasPermission = getContext().checkPermission( final boolean hasPermission =
android.Manifest.permission.READ_SEARCH_INDEXABLES, Binder.getCallingPid(), context.checkPermission(
callingUid) == PackageManager.PERMISSION_GRANTED; android.Manifest.permission.READ_SEARCH_INDEXABLES,
final String callingPackage = getContext().getPackageManager() Binder.getCallingPid(),
.getPackagesForUid(callingUid)[0]; callingUid)
return hasPermission && TextUtils.equals(callingPackage, == PackageManager.PERMISSION_GRANTED;
getContext().getString(R.string.config_settingsintelligence_package_name)); final String[] packages = context.getPackageManager().getPackagesForUid(callingUid);
final String callingPackage =
packages != null && packages.length > 0 ? packages[0] : null;
return hasPermission
&& TextUtils.equals(
callingPackage,
context.getString(R.string.config_settingsintelligence_package_name));
} }
return false; return false;
} }