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) {