Don't offer menu items it they are no-op

In the permission apps screen we have a menu item to show/hide
system apps. It is possible that no system app uses the permission
making the menu item do nothing. We don't add the menu item if
no system app uses the permission.

bug:29395895

Change-Id: I1756981b2f711fc7a886bd4227196fef1a3cea03
diff --git a/src/com/android/packageinstaller/permission/ui/handheld/PermissionAppsFragment.java b/src/com/android/packageinstaller/permission/ui/handheld/PermissionAppsFragment.java
index df0bdd4..1a21f2d 100644
--- a/src/com/android/packageinstaller/permission/ui/handheld/PermissionAppsFragment.java
+++ b/src/com/android/packageinstaller/permission/ui/handheld/PermissionAppsFragment.java
@@ -34,9 +34,6 @@
 import android.view.MenuInflater;
 import android.view.MenuItem;
 import android.view.View;
-import android.view.ViewGroup;
-import android.widget.ImageView;
-import android.widget.TextView;
 import com.android.packageinstaller.DeviceUtils;
 import com.android.packageinstaller.R;
 import com.android.packageinstaller.permission.model.AppPermissionGroup;
@@ -81,6 +78,7 @@
     private boolean mHasConfirmedRevoke;
 
     private boolean mShowSystem;
+    private boolean mHasSystemApps;
     private MenuItem mShowSystemMenu;
     private MenuItem mHideSystemMenu;
 
@@ -110,13 +108,16 @@
 
     @Override
     public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
-        mShowSystemMenu = menu.add(Menu.NONE, MENU_SHOW_SYSTEM, Menu.NONE,
-                R.string.menu_show_system);
-        mHideSystemMenu = menu.add(Menu.NONE, MENU_HIDE_SYSTEM, Menu.NONE,
-                R.string.menu_hide_system);
+        if (mHasSystemApps) {
+            mShowSystemMenu = menu.add(Menu.NONE, MENU_SHOW_SYSTEM, Menu.NONE,
+                    R.string.menu_show_system);
+            mHideSystemMenu = menu.add(Menu.NONE, MENU_HIDE_SYSTEM, Menu.NONE,
+                    R.string.menu_hide_system);
+            updateMenu();
+        }
+
         HelpUtils.prepareHelpMenuItem(getActivity(), menu, R.string.help_app_permissions,
                 getClass().getName());
-        updateMenu();
     }
 
     @Override
@@ -186,6 +187,9 @@
             }
         }
 
+        mHasSystemApps = false;
+        boolean menuOptionsInvalided = false;
+
         for (PermissionApp app : permissionApps.getApps()) {
             if (!Utils.shouldShowPermission(app)) {
                 continue;
@@ -199,6 +203,13 @@
             }
 
             boolean isSystemApp = Utils.isSystem(app, mLauncherPkgs);
+
+            if (isSystemApp && !menuOptionsInvalided) {
+                mHasSystemApps = true;
+                getActivity().invalidateOptionsMenu();
+                menuOptionsInvalided = true;
+            }
+
             if (isSystemApp && !isTelevision && !mShowSystem) {
                 if (existingPref != null) {
                     screen.removePreference(existingPref);
diff --git a/src/com/android/packageinstaller/permission/ui/television/PermissionAppsFragment.java b/src/com/android/packageinstaller/permission/ui/television/PermissionAppsFragment.java
index 29839c1..ec32070 100644
--- a/src/com/android/packageinstaller/permission/ui/television/PermissionAppsFragment.java
+++ b/src/com/android/packageinstaller/permission/ui/television/PermissionAppsFragment.java
@@ -81,6 +81,7 @@
     private boolean mHasConfirmedRevoke;
 
     private boolean mShowSystem;
+    private boolean mHasSystemApps;
     private MenuItem mShowSystemMenu;
     private MenuItem mHideSystemMenu;
 
@@ -110,11 +111,13 @@
 
     @Override
     public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
-        mShowSystemMenu = menu.add(Menu.NONE, MENU_SHOW_SYSTEM, Menu.NONE,
-                R.string.menu_show_system);
-        mHideSystemMenu = menu.add(Menu.NONE, MENU_HIDE_SYSTEM, Menu.NONE,
-                R.string.menu_hide_system);
-        updateMenu();
+        if (mHasSystemApps) {
+            mShowSystemMenu = menu.add(Menu.NONE, MENU_SHOW_SYSTEM, Menu.NONE,
+                    R.string.menu_show_system);
+            mHideSystemMenu = menu.add(Menu.NONE, MENU_HIDE_SYSTEM, Menu.NONE,
+                    R.string.menu_hide_system);
+            updateMenu();
+        }
     }
 
     @Override
@@ -184,6 +187,9 @@
             }
         }
 
+        mHasSystemApps = false;
+        boolean menuOptionsInvalided = false;
+
         for (PermissionApp app : permissionApps.getApps()) {
             if (!Utils.shouldShowPermission(app)) {
                 continue;
@@ -197,6 +203,13 @@
             }
 
             boolean isSystemApp = Utils.isSystem(app, mLauncherPkgs);
+
+            if (isSystemApp && !menuOptionsInvalided) {
+                mHasSystemApps = true;
+                getActivity().invalidateOptionsMenu();
+                menuOptionsInvalided = true;
+            }
+
             if (isSystemApp && !isTelevision && !mShowSystem) {
                 if (existingPref != null) {
                     screen.removePreference(existingPref);