diff --git a/res/values/strings.xml b/res/values/strings.xml index 6db0aa3a625..1676dae30af 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -11345,6 +11345,10 @@ Default disabled changes Enabled for targetSdkVersion > %d + + No apps available + + App compatibility changes can only be modified for debuggable apps. Install a debuggable app and try again. diff --git a/src/com/android/settings/development/AppPicker.java b/src/com/android/settings/development/AppPicker.java index 8e927dbc94e..51215a15ae5 100644 --- a/src/com/android/settings/development/AppPicker.java +++ b/src/com/android/settings/development/AppPicker.java @@ -47,10 +47,14 @@ public class AppPicker extends ListActivity { = "com.android.settings.extra.REQUESTIING_PERMISSION"; public static final String EXTRA_DEBUGGABLE = "com.android.settings.extra.DEBUGGABLE"; public static final String EXTRA_NON_SYSTEM = "com.android.settings.extra.NON_SYSTEM"; + public static final String EXTRA_INCLUDE_NOTHING = "com.android.settings.extra.INCLUDE_NOTHING"; + + public static final int RESULT_NO_MATCHING_APPS = -2; private String mPermissionName; private boolean mDebuggableOnly; private boolean mNonSystemOnly; + private boolean mIncludeNothing; @Override protected void onCreate(Bundle icicle) { @@ -60,9 +64,11 @@ public class AppPicker extends ListActivity { mPermissionName = getIntent().getStringExtra(EXTRA_REQUESTIING_PERMISSION); mDebuggableOnly = getIntent().getBooleanExtra(EXTRA_DEBUGGABLE, false); mNonSystemOnly = getIntent().getBooleanExtra(EXTRA_NON_SYSTEM, false); + mIncludeNothing = getIntent().getBooleanExtra(EXTRA_INCLUDE_NOTHING, true); mAdapter = new AppListAdapter(this); if (mAdapter.getCount() <= 0) { + setResult(RESULT_NO_MATCHING_APPS); finish(); } else { setListAdapter(mAdapter); @@ -160,9 +166,11 @@ public class AppPicker extends ListActivity { mPackageInfoList.add(info); } Collections.sort(mPackageInfoList, sDisplayNameComparator); - MyApplicationInfo info = new MyApplicationInfo(); - info.label = context.getText(R.string.no_application); - mPackageInfoList.add(0, info); + if (mIncludeNothing) { + MyApplicationInfo info = new MyApplicationInfo(); + info.label = context.getText(R.string.no_application); + mPackageInfoList.add(0, info); + } addAll(mPackageInfoList); } diff --git a/src/com/android/settings/development/compat/PlatformCompatDashboard.java b/src/com/android/settings/development/compat/PlatformCompatDashboard.java index 2f2c7509851..fe64948e905 100644 --- a/src/com/android/settings/development/compat/PlatformCompatDashboard.java +++ b/src/com/android/settings/development/compat/PlatformCompatDashboard.java @@ -20,6 +20,7 @@ import static com.android.internal.compat.OverrideAllowedState.ALLOWED; import static com.android.settings.development.DevelopmentOptionsActivityRequestCodes.REQUEST_COMPAT_CHANGE_APP; import android.app.Activity; +import android.app.AlertDialog; import android.app.settings.SettingsEnums; import android.compat.Compatibility.ChangeConfig; import android.content.Context; @@ -124,6 +125,14 @@ public class PlatformCompatDashboard extends DashboardFragment { } catch (PackageManager.NameNotFoundException e) { startAppPicker(); } + } else if (resultCode == AppPicker.RESULT_NO_MATCHING_APPS) { + new AlertDialog.Builder(getContext()) + .setTitle(R.string.platform_compat_dialog_title_no_apps) + .setMessage(R.string.platform_compat_dialog_text_no_apps) + .setPositiveButton(R.string.okay, (dialog, which) -> finish()) + .setOnDismissListener(dialog -> finish()) + .setCancelable(false) + .show(); } return; } @@ -254,7 +263,8 @@ public class PlatformCompatDashboard extends DashboardFragment { } private void startAppPicker() { - final Intent intent = new Intent(getContext(), AppPicker.class); + final Intent intent = new Intent(getContext(), AppPicker.class) + .putExtra(AppPicker.EXTRA_INCLUDE_NOTHING, false); // If build is neither userdebug nor eng, only include debuggable apps final boolean debuggableBuild = mAndroidBuildClassifier.isDebuggableBuild(); if (!debuggableBuild) {