Fixes AOSP crash when WPP isn't installed.
If there is no installed application with the ability to start an activity with the SET_WALLPAPER action, we no longer show the "Shortcuts" entry under the "Display > Lock screen" settings page. Flag: CUSTOMIZABLE_LOCK_SCREEN_QUICK_AFFORDANCES Fix: 274075866 Test: expanded unit test Test: manually verified that, if Intent.resolveActivity returns false, the shortcuts item isn't present in settings. Change-Id: I919427d1e71a88a520c762307029a53065a68f46
This commit is contained in:
@@ -50,7 +50,7 @@ public class CustomizableLockScreenQuickAffordancesPreferenceController extends
|
||||
final Preference preference = screen.findPreference(getPreferenceKey());
|
||||
if (preference != null) {
|
||||
preference.setOnPreferenceClickListener(preference1 -> {
|
||||
final Intent intent = new Intent(Intent.ACTION_SET_WALLPAPER);
|
||||
final Intent intent = CustomizableLockScreenUtils.newIntent();
|
||||
final String packageName =
|
||||
mContext.getString(R.string.config_wallpaper_picker_package);
|
||||
if (!TextUtils.isEmpty(packageName)) {
|
||||
|
@@ -18,6 +18,8 @@ package com.android.settings.display;
|
||||
|
||||
import android.content.ContentResolver;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.content.pm.PackageManager;
|
||||
import android.database.Cursor;
|
||||
import android.net.Uri;
|
||||
import android.text.TextUtils;
|
||||
@@ -67,6 +69,10 @@ public final class CustomizableLockScreenUtils {
|
||||
* <p>This is a slow, blocking call that shouldn't be made on the main thread.
|
||||
*/
|
||||
public static boolean isFeatureEnabled(Context context) {
|
||||
if (!isWallpaperPickerInstalled(context)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
try (Cursor cursor = context.getContentResolver().query(
|
||||
FLAGS_URI,
|
||||
null,
|
||||
@@ -151,4 +157,17 @@ public final class CustomizableLockScreenUtils {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a new {@link Intent} that can be used to start the wallpaper picker
|
||||
* activity.
|
||||
*/
|
||||
public static Intent newIntent() {
|
||||
return new Intent(Intent.ACTION_SET_WALLPAPER);
|
||||
}
|
||||
|
||||
private static boolean isWallpaperPickerInstalled(Context context) {
|
||||
final PackageManager packageManager = context.getPackageManager();
|
||||
return newIntent().resolveActivity(packageManager) != null;
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user