Lockdown settings in retail demo mode

When running in demo mode, additionally disable
the following settings screens:
- Date & Time
- More (network settings)

Bug: 27280140

Change-Id: I3132d0c46b24e1e9ca3842af058073eee3df0c90
diff --git a/src/com/android/settings/DateTimeSettings.java b/src/com/android/settings/DateTimeSettings.java
index 3ed3e82..94589f0 100644
--- a/src/com/android/settings/DateTimeSettings.java
+++ b/src/com/android/settings/DateTimeSettings.java
@@ -28,6 +28,8 @@
 import android.content.Intent;
 import android.content.IntentFilter;
 import android.os.Bundle;
+import android.os.UserManager;
+import android.provider.SearchIndexableResource;
 import android.provider.Settings;
 import android.provider.Settings.SettingNotFoundException;
 import android.support.v14.preference.SwitchPreference;
@@ -38,17 +40,21 @@
 import android.widget.TimePicker;
 import com.android.internal.logging.MetricsProto.MetricsEvent;
 import com.android.settings.dashboard.SummaryLoader;
+import com.android.settings.search.BaseSearchIndexProvider;
+import com.android.settings.search.Indexable;
 import com.android.settingslib.RestrictedLockUtils;
 import com.android.settingslib.RestrictedSwitchPreference;
 import com.android.settingslib.datetime.ZoneGetter;
 
+import java.util.ArrayList;
 import java.util.Calendar;
 import java.util.Date;
+import java.util.List;
 
 import static com.android.settingslib.RestrictedLockUtils.EnforcedAdmin;
 
 public class DateTimeSettings extends SettingsPreferenceFragment
-        implements OnTimeSetListener, OnDateSetListener, OnPreferenceChangeListener {
+        implements OnTimeSetListener, OnDateSetListener, OnPreferenceChangeListener, Indexable {
 
     private static final String HOURS_12 = "12";
     private static final String HOURS_24 = "24";
@@ -380,4 +386,26 @@
             return new SummaryProvider(activity, summaryLoader);
         }
     };
+
+    public static final Indexable.SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
+            new DateTimeSearchIndexProvider();
+
+    private static class DateTimeSearchIndexProvider extends BaseSearchIndexProvider {
+
+        @Override
+        public List<SearchIndexableResource> getXmlResourcesToIndex(
+                Context context, boolean enabled) {
+            List<SearchIndexableResource> result = new ArrayList<>();
+            // Remove data/time settings from search in demo mode
+            if (UserManager.isDeviceInDemoMode(context)) {
+                return result;
+            }
+
+            SearchIndexableResource sir = new SearchIndexableResource(context);
+            sir.xmlResId = R.xml.date_time_prefs;
+            result.add(sir);
+
+            return result;
+        }
+    }
 }
diff --git a/src/com/android/settings/SettingsActivity.java b/src/com/android/settings/SettingsActivity.java
index fcee935..17ce8a1 100644
--- a/src/com/android/settings/SettingsActivity.java
+++ b/src/com/android/settings/SettingsActivity.java
@@ -1058,6 +1058,13 @@
                 UserHandle.MU_ENABLED && UserManager.supportsMultipleUsers()
                 && !Utils.isMonkeyRunning(), isAdmin, pm);
 
+        setTileEnabled(new ComponentName(packageName,
+                        Settings.WirelessSettingsActivity.class.getName()),
+                !UserManager.isDeviceInDemoMode(this), isAdmin, pm);
+
+        setTileEnabled(new ComponentName(packageName,
+                        Settings.DateTimeSettingsActivity.class.getName()),
+                !UserManager.isDeviceInDemoMode(this), isAdmin, pm);
         NfcAdapter adapter = NfcAdapter.getDefaultAdapter(this);
         setTileEnabled(new ComponentName(packageName,
                         Settings.PaymentSettingsActivity.class.getName()),
diff --git a/src/com/android/settings/WirelessSettings.java b/src/com/android/settings/WirelessSettings.java
index 722a861..7e3b8d8 100644
--- a/src/com/android/settings/WirelessSettings.java
+++ b/src/com/android/settings/WirelessSettings.java
@@ -57,6 +57,7 @@
 
 import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.Collections;
 import java.util.List;
 
 public class WirelessSettings extends SettingsPreferenceFragment implements Indexable {
@@ -410,6 +411,10 @@
             @Override
             public List<SearchIndexableResource> getXmlResourcesToIndex(
                     Context context, boolean enabled) {
+                // Remove wireless settings from search in demo mode
+                if (UserManager.isDeviceInDemoMode(context)) {
+                    return Collections.emptyList();
+                }
                 SearchIndexableResource sir = new SearchIndexableResource(context);
                 sir.xmlResId = R.xml.wireless_settings;
                 return Arrays.asList(sir);
diff --git a/src/com/android/settings/search/SearchIndexableResources.java b/src/com/android/settings/search/SearchIndexableResources.java
index 08a0d0c..ff633e0 100644
--- a/src/com/android/settings/search/SearchIndexableResources.java
+++ b/src/com/android/settings/search/SearchIndexableResources.java
@@ -272,7 +272,7 @@
         sResMap.put(DateTimeSettings.class.getName(),
                 new SearchIndexableResource(
                         Ranking.getRankForClassName(DateTimeSettings.class.getName()),
-                        R.xml.date_time_prefs,
+                        NO_DATA_RES_ID,
                         DateTimeSettings.class.getName(),
                         R.drawable.ic_settings_date_time));