Merge "Make Nfc/Beam searchable based on feature availability" into pi-dev
diff --git a/src/com/android/settings/dashboard/DashboardFeatureProviderImpl.java b/src/com/android/settings/dashboard/DashboardFeatureProviderImpl.java
index 82a5b9b..f403e05 100644
--- a/src/com/android/settings/dashboard/DashboardFeatureProviderImpl.java
+++ b/src/com/android/settings/dashboard/DashboardFeatureProviderImpl.java
@@ -258,10 +258,9 @@
                     Log.w(TAG, "Failed to get icon from uri " + uri);
                     return;
                 }
-                tile.icon = Icon.createWithResource(iconInfo.first, iconInfo.second);
+                final Icon icon = Icon.createWithResource(iconInfo.first, iconInfo.second);
                 ThreadUtils.postOnMainThread(() -> {
-                        preference.setIcon(tile.icon.loadDrawable(preference.getContext()));
-                        tile.icon = null;
+                            preference.setIcon(icon.loadDrawable(preference.getContext()));
                     }
                 );
             });
diff --git a/src/com/android/settings/display/BrightnessLevelPreferenceController.java b/src/com/android/settings/display/BrightnessLevelPreferenceController.java
index bbd6f80..4bb0a99 100644
--- a/src/com/android/settings/display/BrightnessLevelPreferenceController.java
+++ b/src/com/android/settings/display/BrightnessLevelPreferenceController.java
@@ -13,6 +13,9 @@
  */
 package com.android.settings.display;
 
+import static com.android.settingslib.display.BrightnessUtils.GAMMA_SPACE_MAX;
+import static com.android.settingslib.display.BrightnessUtils.convertLinearToGamma;
+
 import android.content.ContentResolver;
 import android.content.Context;
 import android.database.ContentObserver;
@@ -63,12 +66,12 @@
     }
 
     private ContentObserver mBrightnessObserver =
-        new ContentObserver(new Handler(Looper.getMainLooper())) {
-            @Override
-            public void onChange(boolean selfChange) {
-                updatedSummary(mPreference);
-            }
-        };
+            new ContentObserver(new Handler(Looper.getMainLooper())) {
+                @Override
+                public void onChange(boolean selfChange) {
+                    updatedSummary(mPreference);
+                }
+            };
 
     public BrightnessLevelPreferenceController(Context context, Lifecycle lifecycle) {
         super(context);
@@ -103,6 +106,7 @@
     public void updateState(Preference preference) {
         updatedSummary(preference);
     }
+
     @Override
     public void onStart() {
         mContentResolver.registerContentObserver(BRIGHTNESS_URI, false, mBrightnessObserver);
@@ -122,15 +126,18 @@
     }
 
     private double getCurrentBrightness() {
+        final int value;
         if (isInVrMode()) {
-            final double value = System.getInt(mContentResolver, System.SCREEN_BRIGHTNESS_FOR_VR,
-                    mMaxBrightness);
-            return getPercentage(value, mMinVrBrightness, mMaxVrBrightness);
+            value = convertLinearToGamma(System.getInt(mContentResolver,
+                    System.SCREEN_BRIGHTNESS_FOR_VR, mMaxBrightness),
+                    mMinVrBrightness, mMaxVrBrightness);
         } else {
-            final double value = Settings.System.getInt(mContentResolver, System.SCREEN_BRIGHTNESS,
-                    mMinBrightness);
-            return getPercentage(value, mMinBrightness, mMaxBrightness);
+            value = convertLinearToGamma(Settings.System.getInt(mContentResolver,
+                    System.SCREEN_BRIGHTNESS, mMinBrightness),
+                    mMinBrightness, mMaxBrightness);
+
         }
+        return getPercentage(value, 0, GAMMA_SPACE_MAX);
     }
 
     private double getPercentage(double value, int min, int max) {
diff --git a/src/com/android/settings/sound/AudioSwitchPreferenceController.java b/src/com/android/settings/sound/AudioSwitchPreferenceController.java
index 28ad3f5..b2dafcc 100644
--- a/src/com/android/settings/sound/AudioSwitchPreferenceController.java
+++ b/src/com/android/settings/sound/AudioSwitchPreferenceController.java
@@ -134,6 +134,7 @@
     public void displayPreference(PreferenceScreen screen) {
         super.displayPreference(screen);
         mPreference = screen.findPreference(mPreferenceKey);
+        mPreference.setVisible(false);
     }
 
     @Override
diff --git a/src/com/android/settings/sound/HandsFreeProfileOutputPreferenceController.java b/src/com/android/settings/sound/HandsFreeProfileOutputPreferenceController.java
index 2f21f1b..58ea7b7 100644
--- a/src/com/android/settings/sound/HandsFreeProfileOutputPreferenceController.java
+++ b/src/com/android/settings/sound/HandsFreeProfileOutputPreferenceController.java
@@ -47,7 +47,7 @@
 
         if (!isOngoingCallStatus()) {
             // Without phone call, disable the switch entry.
-            preference.setEnabled(false);
+            mPreference.setVisible(false);
             preference.setSummary(mContext.getText(R.string.media_output_default_summary));
             return;
         }
@@ -67,12 +67,12 @@
         final int numDevices = ArrayUtils.size(mConnectedDevices);
         if (numDevices == 0) {
             // No connected devices, disable switch entry.
-            preference.setEnabled(false);
+            mPreference.setVisible(false);
             preference.setSummary(mContext.getText(R.string.media_output_default_summary));
             return;
         }
 
-        preference.setEnabled(true);
+        mPreference.setVisible(true);
         CharSequence[] mediaOutputs = new CharSequence[numDevices + 1];
         CharSequence[] mediaValues = new CharSequence[numDevices + 1];
 
diff --git a/src/com/android/settings/sound/MediaOutputPreferenceController.java b/src/com/android/settings/sound/MediaOutputPreferenceController.java
index df07dc5..dce19f1 100644
--- a/src/com/android/settings/sound/MediaOutputPreferenceController.java
+++ b/src/com/android/settings/sound/MediaOutputPreferenceController.java
@@ -52,14 +52,14 @@
 
         if (isStreamFromOutputDevice(STREAM_MUSIC, DEVICE_OUT_REMOTE_SUBMIX)) {
             // In cast mode, disable switch entry.
-            preference.setEnabled(false);
+            mPreference.setVisible(false);
             preference.setSummary(mContext.getText(R.string.media_output_summary_unavailable));
             return;
         }
 
         if (isOngoingCallStatus()) {
             // Ongoing call status, switch entry for media will be disabled.
-            preference.setEnabled(false);
+            mPreference.setVisible(false);
             preference.setSummary(
                     mContext.getText(R.string.media_out_summary_ongoing_call_state));
             return;
@@ -79,12 +79,12 @@
         final int numDevices = ArrayUtils.size(mConnectedDevices);
         if (numDevices == 0) {
             // Disable switch entry if there is no connected devices.
-            preference.setEnabled(false);
+            mPreference.setVisible(false);
             preference.setSummary(mContext.getText(R.string.media_output_default_summary));
             return;
         }
 
-        preference.setEnabled(true);
+        mPreference.setVisible(true);
         CharSequence[] mediaOutputs = new CharSequence[numDevices + 1];
         CharSequence[] mediaValues = new CharSequence[numDevices + 1];
 
diff --git a/tests/robotests/src/com/android/settings/display/BrightnessLevelPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/display/BrightnessLevelPreferenceControllerTest.java
index adc3b66..e29ded0 100644
--- a/tests/robotests/src/com/android/settings/display/BrightnessLevelPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/display/BrightnessLevelPreferenceControllerTest.java
@@ -122,7 +122,7 @@
 
         mController.updateState(mPreference);
 
-        verify(mPreference).setSummary("85%");
+        verify(mPreference).setSummary("97%");
     }
 
     @Test
@@ -135,7 +135,7 @@
 
         mController.updateState(mPreference);
 
-        verify(mPreference).setSummary("31%");
+        verify(mPreference).setSummary("78%");
     }
 
     @Test
@@ -148,7 +148,7 @@
 
         mController.updateState(mPreference);
 
-        verify(mPreference).setSummary("45%");
+        verify(mPreference).setSummary("85%");
     }
 
     @Test
diff --git a/tests/robotests/src/com/android/settings/sound/AudioOutputSwitchPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/sound/AudioOutputSwitchPreferenceControllerTest.java
index 2168a2a..e0877e4 100644
--- a/tests/robotests/src/com/android/settings/sound/AudioOutputSwitchPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/sound/AudioOutputSwitchPreferenceControllerTest.java
@@ -245,7 +245,7 @@
 
         @Override
         public String getPreferenceKey() {
-            return null;
+            return TEST_KEY;
         }
     }
 }
\ No newline at end of file
diff --git a/tests/robotests/src/com/android/settings/sound/HandsFreeProfileOutputPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/sound/HandsFreeProfileOutputPreferenceControllerTest.java
index f3f1c83..0692c9c 100644
--- a/tests/robotests/src/com/android/settings/sound/HandsFreeProfileOutputPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/sound/HandsFreeProfileOutputPreferenceControllerTest.java
@@ -159,7 +159,7 @@
 
     /**
      * One Headset Bluetooth device is available and activated
-     * Preference should be enabled
+     * Preference should be visible
      * Preference summary should be activate device name
      */
     @Test
@@ -170,13 +170,13 @@
 
         mController.updateState(mPreference);
 
-        assertThat(mPreference.isEnabled()).isTrue();
+        assertThat(mPreference.isVisible()).isTrue();
         assertThat(mPreference.getSummary()).isEqualTo(mBluetoothDevice.getName());
     }
 
     /**
      * More than one Headset Bluetooth devices are available, and second device is active.
-     * Preference should be enabled
+     * Preference should be visible
      * Preference summary should be activate device name
      */
     @Test
@@ -196,14 +196,14 @@
 
         mController.updateState(mPreference);
 
-        assertThat(mPreference.isEnabled()).isTrue();
+        assertThat(mPreference.isVisible()).isTrue();
         assertThat(mPreference.getSummary()).isEqualTo(secondBluetoothDevice.getName());
     }
 
     /**
      * Hands Free Profile Bluetooth device(s) are available, but wired headset is plugged in
      * and activated.
-     * Preference should be enabled
+     * Preference should be visible
      * Preference summary should be "This device"
      */
     @Test
@@ -216,14 +216,14 @@
 
         mController.updateState(mPreference);
 
-        assertThat(mPreference.isEnabled()).isTrue();
+        assertThat(mPreference.isVisible()).isTrue();
         assertThat(mPreference.getSummary()).isEqualTo(
                 mContext.getText(R.string.media_output_default_summary));
     }
 
     /**
      * No available Headset BT devices
-     * Preference should be disabled
+     * Preference should be invisible
      * Preference summary should be "This device"
      */
     @Test
@@ -234,7 +234,7 @@
 
         mController.updateState(mPreference);
 
-        assertThat(mPreference.isEnabled()).isFalse();
+        assertThat(mPreference.isVisible()).isFalse();
         assertThat(mPreference.getSummary()).isEqualTo(
                 mContext.getText(R.string.media_output_default_summary));
     }
diff --git a/tests/robotests/src/com/android/settings/sound/MediaOutputPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/sound/MediaOutputPreferenceControllerTest.java
index 1c7c1c4..b62e6b3 100644
--- a/tests/robotests/src/com/android/settings/sound/MediaOutputPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/sound/MediaOutputPreferenceControllerTest.java
@@ -160,7 +160,7 @@
 
     /**
      * On going call state:
-     * Preference should be disabled
+     * Preference should be invisible
      * Default string should be "Unavailable during calls"
      */
     @Test
@@ -169,14 +169,14 @@
 
         mController.updateState(mPreference);
 
-        assertThat(mPreference.isEnabled()).isFalse();
+        assertThat(mPreference.isVisible()).isFalse();
         assertThat(mPreference.getSummary()).isEqualTo(
                 mContext.getText(R.string.media_out_summary_ongoing_call_state));
     }
 
     /**
      * No available A2dp BT devices:
-     * Preference should be disabled
+     * Preference should be invisible
      * Preference summary should be "This device"
      */
     @Test
@@ -187,14 +187,14 @@
 
         mController.updateState(mPreference);
 
-        assertThat(mPreference.isEnabled()).isFalse();
+        assertThat(mPreference.isVisible()).isFalse();
         String defaultString = mContext.getString(R.string.media_output_default_summary);
         assertThat(mPreference.getSummary()).isEqualTo(defaultString);
     }
 
     /**
      * Media stream is captured by something else (cast device):
-     * Preference should be disabled
+     * Preference should be invisible
      * Preference summary should be "unavailable"
      */
     @Test
@@ -203,14 +203,14 @@
 
         mController.updateState(mPreference);
 
-        assertThat(mPreference.isEnabled()).isFalse();
+        assertThat(mPreference.isVisible()).isFalse();
         String defaultString = mContext.getString(R.string.media_output_summary_unavailable);
         assertThat(mPreference.getSummary()).isEqualTo(defaultString);
     }
 
     /**
      * One A2DP Bluetooth device is available and active.
-     * Preference should be enabled
+     * Preference should be visible
      * Preference summary should be activate device name
      */
     @Test
@@ -221,13 +221,13 @@
 
         mController.updateState(mPreference);
 
-        assertThat(mPreference.isEnabled()).isTrue();
+        assertThat(mPreference.isVisible()).isTrue();
         assertThat(mPreference.getSummary()).isEqualTo(mBluetoothDevice.getName());
     }
 
     /**
      * More than one A2DP Bluetooth devices are available, and second device is active.
-     * Preference should be enabled
+     * Preference should be visible
      * Preference summary should be activate device name
      */
     @Test
@@ -247,13 +247,13 @@
 
         mController.updateState(mPreference);
 
-        assertThat(mPreference.isEnabled()).isTrue();
+        assertThat(mPreference.isVisible()).isTrue();
         assertThat(mPreference.getSummary()).isEqualTo(secondBluetoothDevice.getName());
     }
 
     /**
      * A2DP Bluetooth device(s) are available, but wired headset is plugged in and activated
-     * Preference should be enabled
+     * Preference should be visible
      * Preference summary should be "This device"
      */
     @Test
@@ -266,7 +266,7 @@
 
         mController.updateState(mPreference);
 
-        assertThat(mPreference.isEnabled()).isTrue();
+        assertThat(mPreference.isVisible()).isTrue();
         String defaultString = mContext.getString(R.string.media_output_default_summary);
         assertThat(mPreference.getSummary()).isEqualTo(defaultString);
     }
@@ -274,7 +274,7 @@
 
     /**
      * A2DP Bluetooth device(s) are available, but current device speaker is activated
-     * Preference should be enabled
+     * Preference should be visible
      * Preference summary should be "This device"
      */
     @Test
@@ -285,7 +285,7 @@
 
         mController.updateState(mPreference);
 
-        assertThat(mPreference.isEnabled()).isTrue();
+        assertThat(mPreference.isVisible()).isTrue();
         String defaultString = mContext.getString(R.string.media_output_default_summary);
         assertThat(mPreference.getSummary()).isEqualTo(defaultString);
     }