Merge "Index Nightdisplay Settings into search"
diff --git a/res/xml/night_display_settings.xml b/res/xml/night_display_settings.xml
index dc4fecd..8f2bb97 100644
--- a/res/xml/night_display_settings.xml
+++ b/res/xml/night_display_settings.xml
@@ -16,7 +16,8 @@
 
 <PreferenceScreen
         xmlns:android="http://schemas.android.com/apk/res/android"
-        android:title="@string/night_display_title">
+        android:title="@string/night_display_title"
+        android:key="night_display_title">
 
     <DropDownPreference
             android:key="night_display_auto_mode"
diff --git a/src/com/android/settings/DisplaySettings.java b/src/com/android/settings/DisplaySettings.java
index b91481a..e726c63 100644
--- a/src/com/android/settings/DisplaySettings.java
+++ b/src/com/android/settings/DisplaySettings.java
@@ -56,6 +56,8 @@
     private static final String KEY_SCREEN_TIMEOUT = "screen_timeout";
     private static final String KEY_AMBIENT_DISPLAY = "ambient_display";
 
+    private static final String KEY_NIGHT_DISPLAY = "night_display";
+
     @Override
     public int getMetricsCategory() {
         return MetricsEvent.DISPLAY;
@@ -126,6 +128,7 @@
                     keys.add(KEY_DISPLAY_SIZE);
                     keys.add(WallpaperPreferenceController.KEY_WALLPAPER);
                     keys.add(KEY_AMBIENT_DISPLAY);
+                    keys.add(KEY_NIGHT_DISPLAY);
                     return keys;
                 }
 
diff --git a/src/com/android/settings/display/NightDisplayPreferenceController.java b/src/com/android/settings/display/NightDisplayPreferenceController.java
index 643f1d4..2761eca 100644
--- a/src/com/android/settings/display/NightDisplayPreferenceController.java
+++ b/src/com/android/settings/display/NightDisplayPreferenceController.java
@@ -37,4 +37,4 @@
     public String getPreferenceKey() {
         return KEY_NIGHT_DISPLAY;
     }
-}
+}
\ No newline at end of file
diff --git a/src/com/android/settings/display/NightDisplaySettings.java b/src/com/android/settings/display/NightDisplaySettings.java
index 1718d6c..4e0ebcd 100644
--- a/src/com/android/settings/display/NightDisplaySettings.java
+++ b/src/com/android/settings/display/NightDisplaySettings.java
@@ -20,27 +20,34 @@
 import android.app.TimePickerDialog;
 import android.content.Context;
 import android.os.Bundle;
+import android.provider.SearchIndexableResource;
 import android.support.v7.preference.DropDownPreference;
 import android.support.v7.preference.Preference;
 import android.support.v7.preference.TwoStatePreference;
-import android.widget.TimePicker;
 
 import com.android.internal.app.ColorDisplayController;
 import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
 import com.android.settings.R;
+import com.android.settings.search.BaseSearchIndexProvider;
+import com.android.settings.search.Indexable;
 import com.android.settings.widget.SeekBarPreference;
 import com.android.settings.SettingsPreferenceFragment;
+import com.android.settingslib.core.AbstractPreferenceController;
 
 import java.text.DateFormat;
 import java.time.LocalTime;
+import java.util.ArrayList;
 import java.util.Calendar;
+import java.util.List;
 import java.util.TimeZone;
 
 /**
  * Settings screen for Night display.
+ * TODO (b/69912911) Upgrade to Dashboard fragment
  */
 public class NightDisplaySettings extends SettingsPreferenceFragment
-        implements ColorDisplayController.Callback, Preference.OnPreferenceChangeListener {
+        implements ColorDisplayController.Callback, Preference.OnPreferenceChangeListener,
+        Indexable {
 
     private static final String KEY_NIGHT_DISPLAY_AUTO_MODE = "night_display_auto_mode";
     private static final String KEY_NIGHT_DISPLAY_START_TIME = "night_display_start_time";
@@ -92,12 +99,12 @@
         mActivatedPreference = (TwoStatePreference) findPreference(KEY_NIGHT_DISPLAY_ACTIVATED);
         mTemperaturePreference = (SeekBarPreference) findPreference(KEY_NIGHT_DISPLAY_TEMPERATURE);
 
-        mAutoModePreference.setEntries(new CharSequence[] {
+        mAutoModePreference.setEntries(new CharSequence[]{
                 getString(R.string.night_display_auto_mode_never),
                 getString(R.string.night_display_auto_mode_custom),
                 getString(R.string.night_display_auto_mode_twilight)
         });
-        mAutoModePreference.setEntryValues(new CharSequence[] {
+        mAutoModePreference.setEntryValues(new CharSequence[]{
                 String.valueOf(ColorDisplayController.AUTO_MODE_DISABLED),
                 String.valueOf(ColorDisplayController.AUTO_MODE_CUSTOM),
                 String.valueOf(ColorDisplayController.AUTO_MODE_TWILIGHT)
@@ -155,15 +162,12 @@
 
             final Context context = getContext();
             final boolean use24HourFormat = android.text.format.DateFormat.is24HourFormat(context);
-            return new TimePickerDialog(context, new TimePickerDialog.OnTimeSetListener() {
-                @Override
-                public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
-                    final LocalTime time = LocalTime.of(hourOfDay, minute);
-                    if (dialogId == DIALOG_START_TIME) {
-                        mController.setCustomStartTime(time);
-                    } else {
-                        mController.setCustomEndTime(time);
-                    }
+            return new TimePickerDialog(context, (view, hourOfDay, minute) -> {
+                final LocalTime time = LocalTime.of(hourOfDay, minute);
+                if (dialogId == DIALOG_START_TIME) {
+                    mController.setCustomStartTime(time);
+                } else {
+                    mController.setCustomEndTime(time);
                 }
             }, initialTime.getHour(), initialTime.getMinute(), use24HourFormat);
         }
@@ -247,4 +251,23 @@
     public int getMetricsCategory() {
         return MetricsEvent.NIGHT_DISPLAY_SETTINGS;
     }
+
+    public static final Indexable.SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
+            new BaseSearchIndexProvider() {
+                @Override
+                public List<SearchIndexableResource> getXmlResourcesToIndex(Context context,
+                        boolean enabled) {
+                    final ArrayList<SearchIndexableResource> result = new ArrayList<>();
+
+                    final SearchIndexableResource sir = new SearchIndexableResource(context);
+                    sir.xmlResId = R.xml.night_display_settings;
+                    result.add(sir);
+                    return result;
+                }
+
+                @Override
+                protected boolean isPageSearchEnabled(Context context) {
+                    return ColorDisplayController.isAvailable(context);
+                }
+            };
 }
diff --git a/src/com/android/settings/search/SearchIndexableResources.java b/src/com/android/settings/search/SearchIndexableResources.java
index 82ab020..1f88872 100644
--- a/src/com/android/settings/search/SearchIndexableResources.java
+++ b/src/com/android/settings/search/SearchIndexableResources.java
@@ -42,6 +42,7 @@
 import com.android.settings.deviceinfo.StorageDashboardFragment;
 import com.android.settings.deviceinfo.StorageSettings;
 import com.android.settings.display.AmbientDisplaySettings;
+import com.android.settings.display.NightDisplaySettings;
 import com.android.settings.display.ScreenZoomSettings;
 import com.android.settings.dream.DreamSettings;
 import com.android.settings.enterprise.EnterprisePrivacySettings;
@@ -170,6 +171,7 @@
         addIndex(WifiDisplaySettings.class);
         addIndex(ZenModeBehaviorSettings.class);
         addIndex(ZenModeAutomationSettings.class);
+        addIndex(NightDisplaySettings.class);
     }
 
     private SearchIndexableResources() {
diff --git a/tests/robotests/assets/grandfather_not_implementing_indexable b/tests/robotests/assets/grandfather_not_implementing_indexable
index 681e8f6..451bcd4 100644
--- a/tests/robotests/assets/grandfather_not_implementing_indexable
+++ b/tests/robotests/assets/grandfather_not_implementing_indexable
@@ -9,7 +9,6 @@
 com.android.settings.deviceinfo.ImeiInformation
 com.android.settings.datausage.DataUsageList
 com.android.settings.vpn2.AppManagementFragment
-com.android.settings.display.NightDisplaySettings
 com.android.settings.vpn2.VpnSettings
 com.android.settings.fingerprint.FingerprintSettings$FingerprintSettingsFragment
 com.android.settings.applications.ProcessStatsDetail
diff --git a/tests/robotests/src/com/android/settings/display/NightDisplaySettingsTest.java b/tests/robotests/src/com/android/settings/display/NightDisplaySettingsTest.java
new file mode 100644
index 0000000..113e7ec
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/display/NightDisplaySettingsTest.java
@@ -0,0 +1,60 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.android.settings.display;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import android.content.Context;
+import android.provider.SearchIndexableResource;
+
+import com.android.settings.R;
+import com.android.settings.TestConfig;
+import com.android.settings.testutils.SettingsRobolectricTestRunner;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.robolectric.RuntimeEnvironment;
+import org.robolectric.annotation.Config;
+
+import java.util.ArrayList;
+import java.util.List;
+
+@RunWith(SettingsRobolectricTestRunner.class)
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION_O)
+public class NightDisplaySettingsTest {
+
+    private Context mContext;
+
+    @Before
+    public void setUp() {
+        mContext = RuntimeEnvironment.application;
+    }
+
+    @Test
+    public void testNightDisplayIndexing_containsResource() {
+        List<SearchIndexableResource> resources =
+                NightDisplaySettings.SEARCH_INDEX_DATA_PROVIDER.getXmlResourcesToIndex(mContext,
+                        true /* enabled */);
+
+        List<Integer> indexedXml = new ArrayList<>();
+        for (SearchIndexableResource resource : resources) {
+            indexedXml.add(resource.xmlResId);
+        }
+
+        assertThat(indexedXml).contains(R.xml.night_display_settings);
+    }
+}