Merge "Improved UX when no debuggable apps are available." into rvc-dev
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 1b65359..ddcf22c 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -11322,6 +11322,10 @@
     <string name="platform_compat_default_disabled_title">Default disabled changes</string>
     <!-- Title for target SDK gated app compat changes category (do not translate 'targetSdkVersion') [CHAR LIMIT=50] -->
     <string name="platform_compat_target_sdk_title">Enabled for targetSdkVersion &gt; <xliff:g id="number" example="29">%d</xliff:g></string>
+    <!-- Title for the dialog shown when no debuggable apps are available [CHAR LIMIT=20] -->
+    <string name="platform_compat_dialog_title_no_apps">No apps available</string>
+    <!-- Explanatory text shown when no debuggable apps are available [CHAR LIMIT=NONE] -->
+    <string name="platform_compat_dialog_text_no_apps">App compatibility changes can only be modified for debuggable apps. Install a debuggable app and try again.</string>
 
     <!-- Slices Strings -->
 
diff --git a/src/com/android/settings/development/AppPicker.java b/src/com/android/settings/development/AppPicker.java
index 8e927db..51215a1 100644
--- a/src/com/android/settings/development/AppPicker.java
+++ b/src/com/android/settings/development/AppPicker.java
@@ -47,10 +47,14 @@
             = "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 @@
         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 @@
                 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 2f2c750..fe64948 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.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 @@
                 } 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 @@
     }
 
     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) {