Merge "Make some notification related slices public."
diff --git a/src/com/android/settings/core/FeatureFlags.java b/src/com/android/settings/core/FeatureFlags.java
index 91c333a..4f20a01 100644
--- a/src/com/android/settings/core/FeatureFlags.java
+++ b/src/com/android/settings/core/FeatureFlags.java
@@ -28,4 +28,5 @@
"settings_wifi_details_datausage_header";
public static final String PERSONAL_WORK_PROFILE = "settings_work_profile";
public static final String CONTROLLER_ENHANCEMENT = "settings_controller_loading_enhancement";
+ public static final String CONDITIONAL_CARDS = "settings_conditionals";
}
diff --git a/src/com/android/settings/development/bluetooth/BluetoothSampleRateDialogPreferenceController.java b/src/com/android/settings/development/bluetooth/BluetoothSampleRateDialogPreferenceController.java
new file mode 100644
index 0000000..9e4b99e
--- /dev/null
+++ b/src/com/android/settings/development/bluetooth/BluetoothSampleRateDialogPreferenceController.java
@@ -0,0 +1,133 @@
+/*
+ * Copyright (C) 2019 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.development.bluetooth;
+
+import android.bluetooth.BluetoothCodecConfig;
+import android.content.Context;
+import android.util.Log;
+
+import androidx.annotation.VisibleForTesting;
+import androidx.preference.PreferenceScreen;
+
+import com.android.settings.development.BluetoothA2dpConfigStore;
+import com.android.settingslib.core.lifecycle.Lifecycle;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Dialog preference controller to set the Bluetooth A2DP config of sample rate
+ */
+public class BluetoothSampleRateDialogPreferenceController extends
+ AbstractBluetoothDialogPreferenceController {
+
+ private static final String KEY = "bluetooth_sample_rate_settings";
+ private static final String TAG = "BtSampleRateCtr";
+
+ public BluetoothSampleRateDialogPreferenceController(Context context, Lifecycle lifecycle,
+ BluetoothA2dpConfigStore store) {
+ super(context, lifecycle, store);
+ }
+
+ @Override
+ public String getPreferenceKey() {
+ return KEY;
+ }
+
+ @Override
+ public void displayPreference(PreferenceScreen screen) {
+ super.displayPreference(screen);
+ ((BaseBluetoothDialogPreference) mPreference).setCallback(this);
+ }
+
+ @Override
+ protected void writeConfigurationValues(final int index) {
+ int sampleRateValue = BluetoothCodecConfig.SAMPLE_RATE_NONE; // default
+ switch (index) {
+ case 0:
+ final BluetoothCodecConfig currentConfig = getCurrentCodecConfig();
+ if (currentConfig != null) {
+ sampleRateValue = getHighestSampleRate(getSelectableByCodecType(
+ currentConfig.getCodecType()));
+ }
+ break;
+ case 1:
+ sampleRateValue = BluetoothCodecConfig.SAMPLE_RATE_44100;
+ break;
+ case 2:
+ sampleRateValue = BluetoothCodecConfig.SAMPLE_RATE_48000;
+ break;
+ case 3:
+ sampleRateValue = BluetoothCodecConfig.SAMPLE_RATE_88200;
+ break;
+ case 4:
+ sampleRateValue = BluetoothCodecConfig.SAMPLE_RATE_96000;
+ break;
+ default:
+ break;
+ }
+ mBluetoothA2dpConfigStore.setSampleRate(sampleRateValue);
+ }
+
+ @Override
+ protected int getCurrentIndexByConfig(BluetoothCodecConfig config) {
+ if (config == null) {
+ Log.e(TAG, "Unable to get current config index. Config is null.");
+ }
+ return convertCfgToBtnIndex(config.getSampleRate());
+ }
+
+ @Override
+ public List<Integer> getSelectableIndex() {
+ List<Integer> selectableIndex = new ArrayList<>();
+ selectableIndex.add(getDefaultIndex());
+ final BluetoothCodecConfig currentConfig = getCurrentCodecConfig();
+ if (currentConfig != null) {
+ final int configs =
+ getSelectableByCodecType(currentConfig.getCodecType()).getSampleRate();
+ for (int sampleRate : SAMPLE_RATES) {
+ if ((configs & sampleRate) != 0) {
+ selectableIndex.add(convertCfgToBtnIndex(sampleRate));
+ }
+ }
+ }
+ return selectableIndex;
+ }
+
+ @VisibleForTesting
+ int convertCfgToBtnIndex(int config) {
+ int index = getDefaultIndex();
+ switch (config) {
+ case BluetoothCodecConfig.SAMPLE_RATE_44100:
+ index = 1;
+ break;
+ case BluetoothCodecConfig.SAMPLE_RATE_48000:
+ index = 2;
+ break;
+ case BluetoothCodecConfig.SAMPLE_RATE_88200:
+ index = 3;
+ break;
+ case BluetoothCodecConfig.SAMPLE_RATE_96000:
+ index = 4;
+ break;
+ default:
+ Log.e(TAG, "Unsupported config:" + config);
+ break;
+ }
+ return index;
+ }
+}
diff --git a/src/com/android/settings/fuelgauge/BatteryWifiParser.java b/src/com/android/settings/fuelgauge/BatteryWifiParser.java
index 014c069..2aa6749 100644
--- a/src/com/android/settings/fuelgauge/BatteryWifiParser.java
+++ b/src/com/android/settings/fuelgauge/BatteryWifiParser.java
@@ -14,8 +14,8 @@
package com.android.settings.fuelgauge;
-import android.os.BatteryStats;
import android.os.BatteryStats.HistoryItem;
+import android.os.BatteryStatsManager;
public class BatteryWifiParser extends BatteryFlagParser {
@@ -27,12 +27,12 @@
protected boolean isSet(HistoryItem record) {
switch ((record.states2 & HistoryItem.STATE2_WIFI_SUPPL_STATE_MASK)
>> HistoryItem.STATE2_WIFI_SUPPL_STATE_SHIFT) {
- case BatteryStats.WIFI_SUPPL_STATE_DISCONNECTED:
- case BatteryStats.WIFI_SUPPL_STATE_DORMANT:
- case BatteryStats.WIFI_SUPPL_STATE_INACTIVE:
- case BatteryStats.WIFI_SUPPL_STATE_INTERFACE_DISABLED:
- case BatteryStats.WIFI_SUPPL_STATE_INVALID:
- case BatteryStats.WIFI_SUPPL_STATE_UNINITIALIZED:
+ case BatteryStatsManager.WIFI_SUPPL_STATE_DISCONNECTED:
+ case BatteryStatsManager.WIFI_SUPPL_STATE_DORMANT:
+ case BatteryStatsManager.WIFI_SUPPL_STATE_INACTIVE:
+ case BatteryStatsManager.WIFI_SUPPL_STATE_INTERFACE_DISABLED:
+ case BatteryStatsManager.WIFI_SUPPL_STATE_INVALID:
+ case BatteryStatsManager.WIFI_SUPPL_STATE_UNINITIALIZED:
return false;
}
return true;
diff --git a/src/com/android/settings/network/telephony/MobileDataSlice.java b/src/com/android/settings/network/telephony/MobileDataSlice.java
index 65eaf87..152028c 100644
--- a/src/com/android/settings/network/telephony/MobileDataSlice.java
+++ b/src/com/android/settings/network/telephony/MobileDataSlice.java
@@ -38,11 +38,11 @@
import com.android.settings.R;
import com.android.settings.Utils;
-import com.android.settings.network.AirplaneModePreferenceController;
import com.android.settings.network.MobileDataContentObserver;
import com.android.settings.slices.CustomSliceRegistry;
import com.android.settings.slices.CustomSliceable;
import com.android.settings.slices.SliceBackgroundWorker;
+import com.android.settingslib.WirelessUtils;
import com.google.common.annotations.VisibleForTesting;
@@ -184,10 +184,7 @@
@VisibleForTesting
boolean isAirplaneModeEnabled() {
- // Generic key since we only want the method check - no UI.
- AirplaneModePreferenceController controller = new AirplaneModePreferenceController(mContext,
- "key" /* Key */);
- return controller.isChecked();
+ return WirelessUtils.isAirplaneModeOn(mContext);
}
@VisibleForTesting
diff --git a/tests/robotests/src/com/android/settings/development/bluetooth/BluetoothSampleRateDialogPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/development/bluetooth/BluetoothSampleRateDialogPreferenceControllerTest.java
new file mode 100644
index 0000000..d274a57
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/development/bluetooth/BluetoothSampleRateDialogPreferenceControllerTest.java
@@ -0,0 +1,138 @@
+/*
+ * Copyright (C) 2019 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.development.bluetooth;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+import android.bluetooth.BluetoothA2dp;
+import android.bluetooth.BluetoothCodecConfig;
+import android.bluetooth.BluetoothCodecStatus;
+import android.content.Context;
+
+import androidx.lifecycle.LifecycleOwner;
+import androidx.preference.PreferenceScreen;
+
+import com.android.settings.development.BluetoothA2dpConfigStore;
+import com.android.settingslib.core.lifecycle.Lifecycle;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+import org.robolectric.RobolectricTestRunner;
+import org.robolectric.RuntimeEnvironment;
+
+import java.util.ArrayList;
+import java.util.List;
+
+@RunWith(RobolectricTestRunner.class)
+public class BluetoothSampleRateDialogPreferenceControllerTest {
+
+ @Mock
+ private BluetoothA2dp mBluetoothA2dp;
+ @Mock
+ private PreferenceScreen mScreen;
+
+ private BluetoothSampleRateDialogPreferenceController mController;
+ private BluetoothSampleRateDialogPreference mPreference;
+ private BluetoothA2dpConfigStore mBluetoothA2dpConfigStore;
+ private BluetoothCodecStatus mCodecStatus;
+ private BluetoothCodecConfig mCodecConfigAAC;
+ private BluetoothCodecConfig mCodecConfigSBC;
+ private Context mContext;
+ private LifecycleOwner mLifecycleOwner;
+ private Lifecycle mLifecycle;
+
+ @Before
+ public void setup() {
+ MockitoAnnotations.initMocks(this);
+ mContext = RuntimeEnvironment.application;
+ mLifecycleOwner = () -> mLifecycle;
+ mLifecycle = new Lifecycle(mLifecycleOwner);
+ mBluetoothA2dpConfigStore = spy(new BluetoothA2dpConfigStore());
+ mController = spy(new BluetoothSampleRateDialogPreferenceController(mContext, mLifecycle,
+ mBluetoothA2dpConfigStore));
+ mPreference = new BluetoothSampleRateDialogPreference(mContext);
+ when(mScreen.findPreference(mController.getPreferenceKey())).thenReturn(mPreference);
+ mController.displayPreference(mScreen);
+ mCodecConfigAAC = new BluetoothCodecConfig(BluetoothCodecConfig.SOURCE_CODEC_TYPE_AAC,
+ BluetoothCodecConfig.CODEC_PRIORITY_DEFAULT,
+ BluetoothCodecConfig.SAMPLE_RATE_48000 | BluetoothCodecConfig.SAMPLE_RATE_88200,
+ BluetoothCodecConfig.BITS_PER_SAMPLE_NONE,
+ BluetoothCodecConfig.CHANNEL_MODE_NONE,
+ 0, 0, 0, 0);
+ mCodecConfigSBC = new BluetoothCodecConfig(BluetoothCodecConfig.SOURCE_CODEC_TYPE_SBC,
+ BluetoothCodecConfig.CODEC_PRIORITY_DEFAULT,
+ BluetoothCodecConfig.SAMPLE_RATE_96000,
+ BluetoothCodecConfig.BITS_PER_SAMPLE_NONE,
+ BluetoothCodecConfig.CHANNEL_MODE_NONE,
+ 0, 0, 0, 0);
+ }
+
+ @Test
+ public void writeConfigurationValues_selectDefault_setHighest() {
+ mCodecConfigSBC = new BluetoothCodecConfig(BluetoothCodecConfig.SOURCE_CODEC_TYPE_SBC);
+ BluetoothCodecConfig[] mCodecConfigs = {mCodecConfigAAC, mCodecConfigSBC};
+ mCodecStatus = new BluetoothCodecStatus(mCodecConfigAAC, null, mCodecConfigs);
+ when(mBluetoothA2dp.getCodecStatus(null)).thenReturn(mCodecStatus);
+ mController.onBluetoothServiceConnected(mBluetoothA2dp);
+
+ mController.writeConfigurationValues(0);
+ verify(mBluetoothA2dpConfigStore).setSampleRate(BluetoothCodecConfig.SAMPLE_RATE_88200);
+ }
+
+ @Test
+ public void writeConfigurationValues_checkSampleRate() {
+ mController.writeConfigurationValues(1);
+ verify(mBluetoothA2dpConfigStore).setSampleRate(BluetoothCodecConfig.SAMPLE_RATE_44100);
+
+ mController.writeConfigurationValues(2);
+ verify(mBluetoothA2dpConfigStore).setSampleRate(BluetoothCodecConfig.SAMPLE_RATE_48000);
+
+ mController.writeConfigurationValues(3);
+ verify(mBluetoothA2dpConfigStore).setSampleRate(BluetoothCodecConfig.SAMPLE_RATE_88200);
+
+ mController.writeConfigurationValues(4);
+ verify(mBluetoothA2dpConfigStore).setSampleRate(BluetoothCodecConfig.SAMPLE_RATE_96000);
+ }
+
+ @Test
+ public void getCurrentIndexByConfig_verifyIndex() {
+ assertThat(mController.getCurrentIndexByConfig(mCodecConfigSBC)).isEqualTo(
+ mController.convertCfgToBtnIndex(BluetoothCodecConfig.SAMPLE_RATE_96000));
+ }
+
+ @Test
+ public void getSelectableIndex_verifyList() {
+ BluetoothCodecConfig[] mCodecConfigs = {mCodecConfigAAC, mCodecConfigSBC};
+ mCodecStatus = new BluetoothCodecStatus(mCodecConfigAAC, null, mCodecConfigs);
+ when(mBluetoothA2dp.getCodecStatus(null)).thenReturn(mCodecStatus);
+ mController.onBluetoothServiceConnected(mBluetoothA2dp);
+ List<Integer> indexList = new ArrayList<>();
+ indexList.add(mController.getDefaultIndex());
+ indexList.add(mController.convertCfgToBtnIndex(BluetoothCodecConfig.SAMPLE_RATE_48000));
+ indexList.add(mController.convertCfgToBtnIndex(BluetoothCodecConfig.SAMPLE_RATE_88200));
+
+ assertThat(mController.getSelectableIndex().containsAll(indexList)).isTrue();
+ assertThat(indexList.containsAll(mController.getSelectableIndex())).isTrue();
+ }
+}