Merge "Fix removal of optional settings tiles" into lmp-dev
diff --git a/src/com/android/settings/SettingsActivity.java b/src/com/android/settings/SettingsActivity.java
index f4f34bc..bb5ac00 100644
--- a/src/com/android/settings/SettingsActivity.java
+++ b/src/com/android/settings/SettingsActivity.java
@@ -1084,19 +1084,21 @@
             while (n >= 0) {
 
                 DashboardTile tile = category.getTile(n);
-
+                boolean removeTile = false;
                 id = (int) tile.id;
                 if (id == R.id.operator_settings || id == R.id.manufacturer_settings) {
-                    Utils.updateTileToSpecificActivityFromMetaDataOrRemove(this, category, tile);
+                    if (!Utils.updateTileToSpecificActivityFromMetaDataOrRemove(this, tile)) {
+                        removeTile = true;
+                    }
                 } else if (id == R.id.wifi_settings) {
                     // Remove WiFi Settings if WiFi service is not available.
                     if (!getPackageManager().hasSystemFeature(PackageManager.FEATURE_WIFI)) {
-                        category.removeTile(n);
+                        removeTile = true;
                     }
                 } else if (id == R.id.bluetooth_settings) {
                     // Remove Bluetooth Settings if Bluetooth service is not available.
                     if (!getPackageManager().hasSystemFeature(PackageManager.FEATURE_BLUETOOTH)) {
-                        category.removeTile(n);
+                        removeTile = true;
                     }
                 } else if (id == R.id.data_usage_settings) {
                     // Remove data usage when kernel module not enabled
@@ -1104,7 +1106,7 @@
                             .asInterface(ServiceManager.getService(Context.NETWORKMANAGEMENT_SERVICE));
                     try {
                         if (!netManager.isBandwidthControlEnabled()) {
-                            category.removeTile(n);
+                            removeTile = true;
                         }
                     } catch (RemoteException e) {
                         // ignored
@@ -1113,11 +1115,11 @@
                     // Remove battery settings when battery is not available. (e.g. TV)
 
                     if (!mBatteryPresent) {
-                        category.removeTile(n);
+                        removeTile = true;
                     }
                 } else if (id == R.id.home_settings) {
                     if (!updateHomeSettingTiles(tile)) {
-                        category.removeTile(n);
+                        removeTile = true;
                     }
                 } else if (id == R.id.user_settings) {
                     boolean hasMultipleUsers =
@@ -1127,38 +1129,40 @@
                             || (!UserManager.supportsMultipleUsers()
                                     && !hasMultipleUsers)
                             || Utils.isMonkeyRunning()) {
-                        category.removeTile(n);
+                        removeTile = true;
                     }
                 } else if (id == R.id.nfc_payment_settings) {
                     if (!getPackageManager().hasSystemFeature(PackageManager.FEATURE_NFC)) {
-                        category.removeTile(n);
+                        removeTile = true;
                     } else {
                         // Only show if NFC is on and we have the HCE feature
                         NfcAdapter adapter = NfcAdapter.getDefaultAdapter(this);
                         if (!adapter.isEnabled() || !getPackageManager().hasSystemFeature(
                                 PackageManager.FEATURE_NFC_HOST_CARD_EMULATION)) {
-                            category.removeTile(n);
+                            removeTile = true;
                         }
                     }
                 } else if (id == R.id.print_settings) {
                     boolean hasPrintingSupport = getPackageManager().hasSystemFeature(
                             PackageManager.FEATURE_PRINTING);
                     if (!hasPrintingSupport) {
-                        category.removeTile(n);
+                        removeTile = true;
                     }
                 } else if (id == R.id.development_settings) {
                     if (!showDev || um.hasUserRestriction(
                             UserManager.DISALLOW_DEBUGGING_FEATURES)) {
-                        category.removeTile(n);
+                        removeTile = true;
                     }
                 }
 
                 if (UserHandle.MU_ENABLED && UserHandle.myUserId() != 0
-                        && !ArrayUtils.contains(SETTINGS_FOR_RESTRICTED, id)
-                        && n < category.getTilesCount()) {
-                    category.removeTile(n);
+                        && !ArrayUtils.contains(SETTINGS_FOR_RESTRICTED, id)) {
+                    removeTile = true;
                 }
 
+                if (removeTile && n < category.getTilesCount()) {
+                    category.removeTile(n);
+                }
                 n--;
             }
         }
diff --git a/src/com/android/settings/Utils.java b/src/com/android/settings/Utils.java
index df05adc..255ab58 100644
--- a/src/com/android/settings/Utils.java
+++ b/src/com/android/settings/Utils.java
@@ -177,7 +177,7 @@
     }
 
     public static boolean updateTileToSpecificActivityFromMetaDataOrRemove(Context context,
-            DashboardCategory target, DashboardTile tile) {
+            DashboardTile tile) {
 
         Intent intent = tile.intent;
         if (intent != null) {
@@ -230,9 +230,6 @@
             }
         }
 
-        // Did not find a matching activity, so remove the preference
-        target.removeTile(tile);
-
         return false;
     }