Merge "Add searchable keywords for new usage and adaptive preferences screen" into sc-dev
diff --git a/res/values-night/colors.xml b/res/values-night/colors.xml
index 168fd0d..2cdbd3f 100644
--- a/res/values-night/colors.xml
+++ b/res/values-night/colors.xml
@@ -21,7 +21,6 @@
     <color name="homepage_support_background">#3F5FBD</color>
     <color name="homepage_card_dismissal_background">@*android:color/material_grey_900</color>
     <color name="contextual_card_background">@*android:color/material_grey_900</color>
-    <color name="search_bar_background">@*android:color/material_grey_900</color>
     <!-- Dialog background color. -->
     <color name="dialog_background">@*android:color/material_grey_800</color>
     <color name="notification_importance_selection_bg">@*android:color/material_grey_800</color>
diff --git a/res/values-night/themes.xml b/res/values-night/themes.xml
index 604610d..d80b271 100644
--- a/res/values-night/themes.xml
+++ b/res/values-night/themes.xml
@@ -23,12 +23,6 @@
         <item name="android:colorBackground">?android:attr/colorPrimaryDark</item>
     </style>
 
-    <style name="ThemeOverlay.Settings.SearchBar" parent="Theme.Settings">
-        <item name="android:colorBackground">?android:attr/colorPrimaryDark</item>
-        <item name="cardBackgroundColor">?android:attr/colorPrimary</item>
-        <item name="android:colorControlNormal">?android:attr/colorAccent</item>
-    </style>
-
     <style name="Theme.SubSettings" parent="Theme.SubSettings.Base"/>
 
     <style name="ThemeOverlay.SwitchBar.Settings" parent="ThemeOverlay.SwitchBar.Settings.Base">
diff --git a/res/values/colors.xml b/res/values/colors.xml
index be32412..ab8489c 100644
--- a/res/values/colors.xml
+++ b/res/values/colors.xml
@@ -14,7 +14,8 @@
      limitations under the License.
 -->
 
-<resources>
+<resources
+    xmlns:androidprv="http://schemas.android.com/apk/prv/res/android">
 
     <color name="crypt_keeper_clock_background">#ff9a9a9a</color>
     <color name="crypt_keeper_clock_foreground">#ff666666</color>
@@ -144,7 +145,7 @@
     <!-- End of QR code scanner colors -->
 
     <!-- Search bar background color -->
-    <color name="search_bar_background">@android:color/white</color>
+    <color name="search_bar_background">?androidprv:attr/colorSurface</color>
 
     <!-- Dialog background color -->
     <color name="dialog_background">@*android:color/background_device_default_light</color>
@@ -200,4 +201,4 @@
     <color name="accessibility_color_inversion_background">#546E7A</color>
 
     <color name="battery_info_error_color_red">#fce8e6</color> <!-- Material Red 50 -->
-</resources>
\ No newline at end of file
+</resources>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 06e2d87..a48ff77 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -5963,8 +5963,10 @@
     <string name="history_details_title">History details</string>
     <!-- Preference title for advanced battery usage [CHAR LIMIT=40] -->
     <string name="advanced_battery_preference_title">View battery usage</string>
-    <!-- Preference summary for advanced battery usage [CHAR LIMIT=40] -->
-    <string name="advanced_battery_preference_summary">View usage for past 24 hours</string>
+    <!-- Preference summary for advanced battery usage, for past 24 hours [CHAR LIMIT=40] -->
+    <string name="advanced_battery_preference_summary_with_hours">View usage for past 24 hours</string>
+    <!-- Preference summary for advanced battery usage, from last full charge [CHAR LIMIT=40] -->
+    <string name="advanced_battery_preference_summary">View usage from last full charge</string>
 
     <!-- Activity title for battery usage details for an app. or power consumer -->
     <string name="battery_details_title">Battery usage</string>
diff --git a/src/com/android/settings/applications/specialaccess/notificationaccess/TypeFilterPreferenceController.java b/src/com/android/settings/applications/specialaccess/notificationaccess/TypeFilterPreferenceController.java
index 68c342b..635d2dd 100644
--- a/src/com/android/settings/applications/specialaccess/notificationaccess/TypeFilterPreferenceController.java
+++ b/src/com/android/settings/applications/specialaccess/notificationaccess/TypeFilterPreferenceController.java
@@ -16,6 +16,11 @@
 
 package com.android.settings.applications.specialaccess.notificationaccess;
 
+import static android.service.notification.NotificationListenerService.FLAG_FILTER_TYPE_ALERTING;
+import static android.service.notification.NotificationListenerService.FLAG_FILTER_TYPE_CONVERSATIONS;
+import static android.service.notification.NotificationListenerService.FLAG_FILTER_TYPE_ONGOING;
+import static android.service.notification.NotificationListenerService.FLAG_FILTER_TYPE_SILENT;
+
 import android.content.ComponentName;
 import android.content.Context;
 import android.content.pm.ServiceInfo;
@@ -129,13 +134,24 @@
                     int types = 0;
                     String[] typeStrings = typeList.split(XML_SEPARATOR);
                     for (int i = 0; i < typeStrings.length; i++) {
-                        if (TextUtils.isEmpty(typeStrings[i])) {
+                        final String typeString = typeStrings[i];
+                        if (TextUtils.isEmpty(typeString)) {
                             continue;
                         }
-                        try {
-                            types |= Integer.parseInt(typeStrings[i]);
-                        } catch (NumberFormatException e) {
-                            // skip
+                        if (typeString.equalsIgnoreCase("ONGOING")) {
+                            types |= FLAG_FILTER_TYPE_ONGOING;
+                        } else if (typeString.equalsIgnoreCase("CONVERSATIONS")) {
+                            types |= FLAG_FILTER_TYPE_CONVERSATIONS;
+                        } else if (typeString.equalsIgnoreCase("SILENT")) {
+                            types |= FLAG_FILTER_TYPE_SILENT;
+                        } else if (typeString.equalsIgnoreCase("ALERTING")) {
+                            types |= FLAG_FILTER_TYPE_ALERTING;
+                        } else {
+                            try {
+                                types |= Integer.parseInt(typeString);
+                            } catch (NumberFormatException e) {
+                                // skip
+                            }
                         }
                     }
                     if (hasFlag(types, getType())) {
diff --git a/src/com/android/settings/fuelgauge/PowerUsageSummary.java b/src/com/android/settings/fuelgauge/PowerUsageSummary.java
index 326113e..19a8011 100644
--- a/src/com/android/settings/fuelgauge/PowerUsageSummary.java
+++ b/src/com/android/settings/fuelgauge/PowerUsageSummary.java
@@ -52,11 +52,14 @@
 public class PowerUsageSummary extends PowerUsageBase implements
         BatteryTipPreferenceController.BatteryTipListener {
 
-    private static final String KEY_BATTERY_ERROR = "battery_help_message";
-
     static final String TAG = "PowerUsageSummary";
 
     @VisibleForTesting
+    static final String KEY_BATTERY_ERROR = "battery_help_message";
+    @VisibleForTesting
+    static final String KEY_BATTERY_USAGE = "battery_usage_summary";
+
+    @VisibleForTesting
     static final int BATTERY_INFO_LOADER = 1;
     @VisibleForTesting
     static final int BATTERY_TIP_LOADER = 2;
@@ -78,6 +81,8 @@
     boolean mNeedUpdateBatteryTip;
     @VisibleForTesting
     Preference mHelpPreference;
+    @VisibleForTesting
+    Preference mBatteryUsagePreference;
 
     @VisibleForTesting
     final ContentObserver mSettingsObserver = new ContentObserver(new Handler()) {
@@ -154,12 +159,10 @@
         setAnimationAllowed(true);
 
         initFeatureProvider();
+        initPreference();
 
         mBatteryUtils = BatteryUtils.getInstance(getContext());
 
-        mHelpPreference = findPreference(KEY_BATTERY_ERROR);
-        mHelpPreference.setVisible(false);
-
         if (Utils.isBatteryPresent(getContext())) {
             restartBatteryInfoLoader();
         } else {
@@ -249,6 +252,18 @@
     }
 
     @VisibleForTesting
+    void initPreference() {
+        mBatteryUsagePreference = findPreference(KEY_BATTERY_USAGE);
+        mBatteryUsagePreference.setSummary(
+                mPowerFeatureProvider.isChartGraphEnabled(getContext()) ?
+                        getString(R.string.advanced_battery_preference_summary_with_hours) :
+                        getString(R.string.advanced_battery_preference_summary));
+
+        mHelpPreference = findPreference(KEY_BATTERY_ERROR);
+        mHelpPreference.setVisible(false);
+    }
+
+    @VisibleForTesting
     void restartBatteryInfoLoader() {
         if (getContext() == null) {
             return;
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetailTest.java b/tests/robotests/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetailTest.java
index 1c2c059..00c71df 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetailTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetailTest.java
@@ -575,7 +575,7 @@
         mFragment.initPreferenceForTriState(mContext);
 
         assertThat(mFooterPreference.getTitle().toString())
-                .isEqualTo("This app requires Optimized battery usage.");
+                .isEqualTo("This app requires optimized battery usage.");
     }
 
     @Test
@@ -586,7 +586,7 @@
         mFragment.initPreferenceForTriState(mContext);
 
         assertThat(mFooterPreference.getTitle()
-                .toString()).isEqualTo("This app requires Unrestricted battery usage.");
+                .toString()).isEqualTo("This app requires unrestricted battery usage.");
     }
 
     @Test
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/PowerUsageSummaryTest.java b/tests/robotests/src/com/android/settings/fuelgauge/PowerUsageSummaryTest.java
index 11b6ad2..843cc99 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/PowerUsageSummaryTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/PowerUsageSummaryTest.java
@@ -16,6 +16,8 @@
 package com.android.settings.fuelgauge;
 
 import static com.android.settings.fuelgauge.PowerUsageSummary.BATTERY_INFO_LOADER;
+import static com.android.settings.fuelgauge.PowerUsageSummary.KEY_BATTERY_ERROR;
+import static com.android.settings.fuelgauge.PowerUsageSummary.KEY_BATTERY_USAGE;
 
 import static com.google.common.truth.Truth.assertThat;
 
@@ -37,6 +39,7 @@
 import android.provider.Settings;
 
 import androidx.loader.app.LoaderManager;
+import androidx.preference.Preference;
 import androidx.preference.PreferenceScreen;
 
 import com.android.settings.R;
@@ -83,6 +86,10 @@
     private VisibilityLoggerMixin mVisibilityLoggerMixin;
     @Mock
     private PreferenceScreen mPreferenceScreen;
+    @Mock
+    private Preference mBatteryUsagePreference;
+    @Mock
+    private Preference mHelpPreference;
 
     private Context mRealContext;
     private TestFragment mFragment;
@@ -102,12 +109,16 @@
         when(mFragment.getActivity()).thenReturn(mSettingsActivity);
         when(mFeatureFactory.powerUsageFeatureProvider.getAdditionalBatteryInfoIntent())
                 .thenReturn(sAdditionalBatteryInfoIntent);
+        when(mFeatureFactory.powerUsageFeatureProvider.isChartGraphEnabled(mRealContext))
+                .thenReturn(true);
         mFragment.mBatteryUtils = spy(new BatteryUtils(mRealContext));
         ReflectionHelpers.setField(mFragment, "mVisibilityLoggerMixin", mVisibilityLoggerMixin);
         ReflectionHelpers.setField(mFragment, "mBatteryBroadcastReceiver",
                 mBatteryBroadcastReceiver);
         doReturn(mPreferenceScreen).when(mFragment).getPreferenceScreen();
         when(mFragment.getContentResolver()).thenReturn(mContentResolver);
+        when(mFragment.findPreference(KEY_BATTERY_USAGE)).thenReturn(mBatteryUsagePreference);
+        when(mFragment.findPreference(KEY_BATTERY_ERROR)).thenReturn(mHelpPreference);
     }
 
     @Test
@@ -124,6 +135,30 @@
     }
 
     @Test
+    public void initPreference_chartGraphEnabled_hasCorrectSummary() {
+        mFragment.initPreference();
+
+        verify(mBatteryUsagePreference).setSummary("View usage for past 24 hours");
+    }
+
+    @Test
+    public void initPreference_chartGraphDisabled_hasCorrectSummary() {
+        when(mFeatureFactory.powerUsageFeatureProvider.isChartGraphEnabled(mRealContext))
+                .thenReturn(false);
+
+        mFragment.initPreference();
+
+        verify(mBatteryUsagePreference).setSummary("View usage from last full charge");
+    }
+
+    @Test
+    public void initPreference_helpPreferenceInvisible() {
+        mFragment.initPreference();
+
+        verify(mHelpPreference).setVisible(false);
+    }
+
+    @Test
     public void restartBatteryTipLoader() {
         //TODO: add policy logic here when BatteryTipPolicy is implemented
         doReturn(mLoaderManager).when(mFragment).getLoaderManager();
diff --git a/tests/unit/src/com/android/settings/applications/specialaccess/notificationaccess/TypeFilterPreferenceControllerTest.java b/tests/unit/src/com/android/settings/applications/specialaccess/notificationaccess/TypeFilterPreferenceControllerTest.java
index 1aa8292..3f6103a 100644
--- a/tests/unit/src/com/android/settings/applications/specialaccess/notificationaccess/TypeFilterPreferenceControllerTest.java
+++ b/tests/unit/src/com/android/settings/applications/specialaccess/notificationaccess/TypeFilterPreferenceControllerTest.java
@@ -152,7 +152,7 @@
     public void updateState_enabled_metaData_disableFilter_notThisField() {
         mSi.metaData = new Bundle();
         mSi.metaData.putCharSequence(NotificationListenerService.META_DATA_DISABLED_FILTER_TYPES, 
-                "1,2");
+                "1,alerting");
         when(mNm.isNotificationListenerAccessGranted(mCn)).thenReturn(true);
         when(mNm.getListenerFilter(mCn, 0)).thenReturn(new NotificationListenerFilter());
         CheckBoxPreference pref = new CheckBoxPreference(mContext);
@@ -165,7 +165,7 @@
     public void updateState_enabled_metaData_disableFilter_thisField_stateIsChecked() {
         mSi.metaData = new Bundle();
         mSi.metaData.putCharSequence(NotificationListenerService.META_DATA_DISABLED_FILTER_TYPES,
-                "1,2,32");
+                "conversations,2,32");
         when(mNm.isNotificationListenerAccessGranted(mCn)).thenReturn(true);
         when(mNm.getListenerFilter(mCn, 0)).thenReturn(
                 new NotificationListenerFilter(32, new ArraySet<>()));