From 0ef326f365e44a03deaa69c7880feb5cc92a2bf6 Mon Sep 17 00:00:00 2001 From: jeffreyhuang Date: Thu, 12 Oct 2017 16:39:26 -0700 Subject: [PATCH] Introduce BluetoothAudioCodecPreferenceController - Create new BluetoothAudioCodecPreferenceController - Create controller inside the DashboardFragment - Port logic from DevelopmentSettings into the controller Bug: 34203528 Test: make RunSettingsRoboTests -j40 Change-Id: I90a0e58328196315fccbecd6d46531b4f0fcaef1 --- ...ractBluetoothA2dpPreferenceController.java | 26 +-- .../development/BluetoothA2dpLock.java | 25 +++ ...uetoothAudioCodecPreferenceController.java | 156 ++++++++++++++++++ ...thAudioSampleRatePreferenceController.java | 15 +- .../DevelopmentSettingsDashboardFragment.java | 19 ++- .../bluetooth/BluetoothCodecConfig.java | 6 + ...BluetoothA2dpPreferenceControllerTest.java | 6 +- ...othAudioCodecPreferenceControllerTest.java | 117 +++++++++++++ ...dioSampleRatePreferenceControllerTest.java | 2 +- 9 files changed, 325 insertions(+), 47 deletions(-) create mode 100644 src/com/android/settings/development/BluetoothA2dpLock.java create mode 100644 src/com/android/settings/development/BluetoothAudioCodecPreferenceController.java create mode 100644 tests/robotests/src/com/android/settings/development/BluetoothAudioCodecPreferenceControllerTest.java diff --git a/src/com/android/settings/development/AbstractBluetoothA2dpPreferenceController.java b/src/com/android/settings/development/AbstractBluetoothA2dpPreferenceController.java index bb03df1f7b4..e4e64938866 100644 --- a/src/com/android/settings/development/AbstractBluetoothA2dpPreferenceController.java +++ b/src/com/android/settings/development/AbstractBluetoothA2dpPreferenceController.java @@ -40,17 +40,15 @@ public abstract class AbstractBluetoothA2dpPreferenceController extends static final int STREAMING_LABEL_ID = R.string.bluetooth_select_a2dp_codec_streaming_label; protected final BluetoothA2dpConfigStore mBluetoothA2dpConfigStore; - protected final Object mBluetoothA2dpLock; protected BluetoothA2dp mBluetoothA2dp; + protected ListPreference mPreference; private final String[] mListValues; private final String[] mListSummaries; - private ListPreference mPreference; public AbstractBluetoothA2dpPreferenceController(Context context, Lifecycle lifecycle, - Object bluetoothA2dpLock, BluetoothA2dpConfigStore store) { + BluetoothA2dpConfigStore store) { super(context); - mBluetoothA2dpLock = bluetoothA2dpLock; mBluetoothA2dpConfigStore = store; mListValues = getListValues(); mListSummaries = getListSummaries(); @@ -80,7 +78,7 @@ public abstract class AbstractBluetoothA2dpPreferenceController extends writeConfigurationValues(newValue); final BluetoothCodecConfig codecConfig = mBluetoothA2dpConfigStore.createCodecConfig(); - synchronized (mBluetoothA2dpLock) { + synchronized (mBluetoothA2dpConfigStore) { if (mBluetoothA2dp != null) { setCodecConfigPreference(codecConfig); } @@ -106,7 +104,7 @@ public abstract class AbstractBluetoothA2dpPreferenceController extends } BluetoothCodecConfig codecConfig; - synchronized (mBluetoothA2dpLock) { + synchronized (mBluetoothA2dpConfigStore) { codecConfig = getCodecConfig(); } @@ -168,7 +166,7 @@ public abstract class AbstractBluetoothA2dpPreferenceController extends protected abstract String[] getListSummaries(); /** - * Updates the new value to the {@link BluetoothA2dpConfigStore}. + * Updates the new value to the {@link BluetoothA2dpConfigStore} and the {@link BluetoothA2dp}. * * @param newValue the new setting value */ @@ -197,18 +195,4 @@ public abstract class AbstractBluetoothA2dpPreferenceController extends return mBluetoothA2dp.getCodecStatus().getCodecConfig(); } - - @VisibleForTesting - BluetoothCodecConfig createCodecConfig(int codecTypeValue, int codecPriorityValue, - int sampleRateValue, int bitsPerSampleValue, - int channelModeValue, long codecSpecific1Value, - long codecSpecific2Value, long codecSpecific3Value, - long codecSpecific4Value) { - return new BluetoothCodecConfig(codecTypeValue, codecPriorityValue, - sampleRateValue, bitsPerSampleValue, - channelModeValue, codecSpecific1Value, - codecSpecific2Value, codecSpecific3Value, - codecSpecific4Value); - } - } diff --git a/src/com/android/settings/development/BluetoothA2dpLock.java b/src/com/android/settings/development/BluetoothA2dpLock.java new file mode 100644 index 00000000000..70586658c35 --- /dev/null +++ b/src/com/android/settings/development/BluetoothA2dpLock.java @@ -0,0 +1,25 @@ +/* + * 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.development; + +import android.bluetooth.BluetoothA2dp; + +/** + * Utility class to provide synchronization locks for {@link BluetoothA2dp} + */ +public class BluetoothA2dpLock { +} diff --git a/src/com/android/settings/development/BluetoothAudioCodecPreferenceController.java b/src/com/android/settings/development/BluetoothAudioCodecPreferenceController.java new file mode 100644 index 00000000000..2163a7092c6 --- /dev/null +++ b/src/com/android/settings/development/BluetoothAudioCodecPreferenceController.java @@ -0,0 +1,156 @@ +/* + * 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.development; + +import android.bluetooth.BluetoothCodecConfig; +import android.content.Context; + +import com.android.settings.R; +import com.android.settingslib.core.lifecycle.Lifecycle; + +public class BluetoothAudioCodecPreferenceController extends + AbstractBluetoothA2dpPreferenceController { + + private static final int DEFAULT_INDEX = 0; + private static final String BLUETOOTH_SELECT_A2DP_CODEC_KEY = "bluetooth_select_a2dp_codec"; + + public BluetoothAudioCodecPreferenceController(Context context, Lifecycle lifecycle, + BluetoothA2dpConfigStore store) { + super(context, lifecycle, store); + } + + @Override + public String getPreferenceKey() { + return BLUETOOTH_SELECT_A2DP_CODEC_KEY; + } + + @Override + protected String[] getListValues() { + return mContext.getResources().getStringArray( + R.array.bluetooth_a2dp_codec_values); + } + + @Override + protected String[] getListSummaries() { + return mContext.getResources().getStringArray( + R.array.bluetooth_a2dp_codec_summaries); + } + + @Override + protected int getDefaultIndex() { + return DEFAULT_INDEX; + } + + @Override + protected void writeConfigurationValues(Object newValue) { + final int index = mPreference.findIndexOfValue(newValue.toString()); + int codecTypeValue = BluetoothCodecConfig.SAMPLE_RATE_NONE; // default + int codecPriorityValue = BluetoothCodecConfig.CODEC_PRIORITY_DEFAULT; + switch (index) { + case 0: + // Reset the priority of the current codec to default + final String oldValue = mPreference.getValue(); + switch (mPreference.findIndexOfValue(oldValue)) { + case 0: + break; // No current codec + case 1: + codecTypeValue = BluetoothCodecConfig.SOURCE_CODEC_TYPE_SBC; + break; + case 2: + codecTypeValue = BluetoothCodecConfig.SOURCE_CODEC_TYPE_AAC; + break; + case 3: + codecTypeValue = BluetoothCodecConfig.SOURCE_CODEC_TYPE_APTX; + break; + case 4: + codecTypeValue = BluetoothCodecConfig.SOURCE_CODEC_TYPE_APTX_HD; + break; + case 5: + codecTypeValue = BluetoothCodecConfig.SOURCE_CODEC_TYPE_LDAC; + break; + default: + break; + } + break; + case 1: + codecTypeValue = BluetoothCodecConfig.SOURCE_CODEC_TYPE_SBC; + codecPriorityValue = BluetoothCodecConfig.CODEC_PRIORITY_HIGHEST; + break; + case 2: + codecTypeValue = BluetoothCodecConfig.SOURCE_CODEC_TYPE_AAC; + codecPriorityValue = BluetoothCodecConfig.CODEC_PRIORITY_HIGHEST; + break; + case 3: + codecTypeValue = BluetoothCodecConfig.SOURCE_CODEC_TYPE_APTX; + codecPriorityValue = BluetoothCodecConfig.CODEC_PRIORITY_HIGHEST; + break; + case 4: + codecTypeValue = BluetoothCodecConfig.SOURCE_CODEC_TYPE_APTX_HD; + codecPriorityValue = BluetoothCodecConfig.CODEC_PRIORITY_HIGHEST; + break; + case 5: + codecTypeValue = BluetoothCodecConfig.SOURCE_CODEC_TYPE_LDAC; + codecPriorityValue = BluetoothCodecConfig.CODEC_PRIORITY_HIGHEST; + break; + case 6: + synchronized (mBluetoothA2dpConfigStore) { + if (mBluetoothA2dp != null) { + mBluetoothA2dp.enableOptionalCodecs(); + } + } + return; + case 7: + synchronized (mBluetoothA2dpConfigStore) { + if (mBluetoothA2dp != null) { + mBluetoothA2dp.disableOptionalCodecs(); + } + } + return; + default: + break; + } + mBluetoothA2dpConfigStore.setCodecType(codecTypeValue); + mBluetoothA2dpConfigStore.setCodecPriority(codecPriorityValue); + } + + @Override + protected int getCurrentA2dpSettingIndex(BluetoothCodecConfig config) { + final int codecType = config.getCodecType(); + int index = DEFAULT_INDEX; + switch (codecType) { + case BluetoothCodecConfig.SOURCE_CODEC_TYPE_SBC: + index = 1; + break; + case BluetoothCodecConfig.SOURCE_CODEC_TYPE_AAC: + index = 2; + break; + case BluetoothCodecConfig.SOURCE_CODEC_TYPE_APTX: + index = 3; + break; + case BluetoothCodecConfig.SOURCE_CODEC_TYPE_APTX_HD: + index = 4; + break; + case BluetoothCodecConfig.SOURCE_CODEC_TYPE_LDAC: + index = 5; + break; + case BluetoothCodecConfig.SOURCE_CODEC_TYPE_INVALID: + default: + break; + } + return index; + } +} diff --git a/src/com/android/settings/development/BluetoothAudioSampleRatePreferenceController.java b/src/com/android/settings/development/BluetoothAudioSampleRatePreferenceController.java index 5d84de8f94d..35b449e6b2b 100644 --- a/src/com/android/settings/development/BluetoothAudioSampleRatePreferenceController.java +++ b/src/com/android/settings/development/BluetoothAudioSampleRatePreferenceController.java @@ -18,8 +18,6 @@ package com.android.settings.development; import android.bluetooth.BluetoothCodecConfig; import android.content.Context; -import android.support.v7.preference.ListPreference; -import android.support.v7.preference.PreferenceScreen; import com.android.settings.R; import com.android.settingslib.core.lifecycle.Lifecycle; @@ -31,11 +29,9 @@ public class BluetoothAudioSampleRatePreferenceController extends private static final String BLUETOOTH_SELECT_A2DP_SAMPLE_RATE_KEY = "bluetooth_select_a2dp_sample_rate"; - private ListPreference mPreference; - public BluetoothAudioSampleRatePreferenceController(Context context, Lifecycle lifecycle, - Object bluetoothA2dpLock, BluetoothA2dpConfigStore store) { - super(context, lifecycle, bluetoothA2dpLock, store); + BluetoothA2dpConfigStore store) { + super(context, lifecycle, store); } @Override @@ -43,13 +39,6 @@ public class BluetoothAudioSampleRatePreferenceController extends return BLUETOOTH_SELECT_A2DP_SAMPLE_RATE_KEY; } - @Override - public void displayPreference(PreferenceScreen screen) { - super.displayPreference(screen); - - mPreference = (ListPreference) screen.findPreference(getPreferenceKey()); - } - @Override protected String[] getListValues() { return mContext.getResources().getStringArray( diff --git a/src/com/android/settings/development/DevelopmentSettingsDashboardFragment.java b/src/com/android/settings/development/DevelopmentSettingsDashboardFragment.java index 885532dba8d..e6d4ba4d595 100644 --- a/src/com/android/settings/development/DevelopmentSettingsDashboardFragment.java +++ b/src/com/android/settings/development/DevelopmentSettingsDashboardFragment.java @@ -60,7 +60,8 @@ public class DevelopmentSettingsDashboardFragment extends RestrictedDashboardFra private static final String TAG = "DevSettingsDashboard"; - private final Object mBluetoothA2dpLock = new Object(); + private final BluetoothA2dpConfigStore mBluetoothA2dpConfigStore = + new BluetoothA2dpConfigStore(); private boolean mIsAvailable = true; private SwitchBar mSwitchBar; @@ -104,7 +105,7 @@ public class DevelopmentSettingsDashboardFragment extends RestrictedDashboardFra @Override public void onServiceConnected(int profile, BluetoothProfile proxy) { - synchronized (mBluetoothA2dpLock) { + synchronized (mBluetoothA2dpConfigStore) { mBluetoothA2dp = (BluetoothA2dp) proxy; } for (AbstractPreferenceController controller : mPreferenceControllers) { @@ -117,7 +118,7 @@ public class DevelopmentSettingsDashboardFragment extends RestrictedDashboardFra @Override public void onServiceDisconnected(int profile) { - synchronized (mBluetoothA2dpLock) { + synchronized (mBluetoothA2dpConfigStore) { mBluetoothA2dp = null; } for (AbstractPreferenceController controller : mPreferenceControllers) { @@ -298,7 +299,7 @@ public class DevelopmentSettingsDashboardFragment extends RestrictedDashboardFra @Override protected List getPreferenceControllers(Context context) { mPreferenceControllers = buildPreferenceControllers(context, getActivity(), getLifecycle(), - this /* devOptionsDashboardFragment */, mBluetoothA2dpLock, + this /* devOptionsDashboardFragment */, new BluetoothA2dpConfigStore()); return mPreferenceControllers; } @@ -334,7 +335,7 @@ public class DevelopmentSettingsDashboardFragment extends RestrictedDashboardFra private static List buildPreferenceControllers(Context context, Activity activity, Lifecycle lifecycle, DevelopmentSettingsDashboardFragment fragment, - Object bluetoothA2dpLock, BluetoothA2dpConfigStore bluetoothA2dpConfigStore) { + BluetoothA2dpConfigStore bluetoothA2dpConfigStore) { final List controllers = new ArrayList<>(); controllers.add(new BugReportPreferenceControllerV2(context)); controllers.add(new LocalBackupPasswordPreferenceController(context)); @@ -376,10 +377,10 @@ public class DevelopmentSettingsDashboardFragment extends RestrictedDashboardFra controllers.add(new BluetoothAbsoluteVolumePreferenceController(context)); controllers.add(new BluetoothInbandRingingPreferenceController(context)); controllers.add(new BluetoothAvrcpVersionPreferenceController(context)); - //controllers.add(new BluetoothAudioCodecPreferenceController(context, lifecycle, - // bluetoothA2dpLock, bluetoothA2dpConfigStore)); + controllers.add(new BluetoothAudioCodecPreferenceController(context, lifecycle, + bluetoothA2dpConfigStore)); controllers.add(new BluetoothAudioSampleRatePreferenceController(context, lifecycle, - bluetoothA2dpLock, bluetoothA2dpConfigStore)); + bluetoothA2dpConfigStore)); // bluetooth audio bits per sample // bluetooth audio channel mode // bluetooth audio ldac codec: playback quality @@ -447,7 +448,7 @@ public class DevelopmentSettingsDashboardFragment extends RestrictedDashboardFra context) { return buildPreferenceControllers(context, null /* activity */, null /* lifecycle */, null /* devOptionsDashboardFragment */, - null /* bluetoothA2dpLock */, null /* bluetoothA2dpConfigStore */); + null /* bluetoothA2dpConfigStore */); } }; } diff --git a/tests/robotests/src/android/bluetooth/BluetoothCodecConfig.java b/tests/robotests/src/android/bluetooth/BluetoothCodecConfig.java index c6350efa76d..676fce4f304 100644 --- a/tests/robotests/src/android/bluetooth/BluetoothCodecConfig.java +++ b/tests/robotests/src/android/bluetooth/BluetoothCodecConfig.java @@ -24,11 +24,17 @@ public class BluetoothCodecConfig { public static final int SAMPLE_RATE_NONE = 0; public static final int SAMPLE_RATE_48000 = 0x1 << 1; public static final int SOURCE_CODEC_TYPE_INVALID = 1000 * 1000; + public static final int SOURCE_CODEC_TYPE_AAC = 1; public static final int CODEC_PRIORITY_DEFAULT = 0; + public static final int CODEC_PRIORITY_HIGHEST = 1000 * 1000; public static final int BITS_PER_SAMPLE_NONE = 0; public static final int CHANNEL_MODE_NONE = 0; public int getSampleRate() { return 0; } + + public int getCodecType() { + return 0; + } } diff --git a/tests/robotests/src/com/android/settings/development/AbstractBluetoothA2dpPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/development/AbstractBluetoothA2dpPreferenceControllerTest.java index e78dd7fc518..dd2962738d4 100644 --- a/tests/robotests/src/com/android/settings/development/AbstractBluetoothA2dpPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/development/AbstractBluetoothA2dpPreferenceControllerTest.java @@ -74,7 +74,7 @@ public class AbstractBluetoothA2dpPreferenceControllerTest { mContext = RuntimeEnvironment.application; mLifecycle = new Lifecycle(); mController = spy(new AbstractBluetoothA2dpPreferenceControllerImpl(mContext, mLifecycle, - new Object(), mBluetoothA2dpConfigStore)); + mBluetoothA2dpConfigStore)); doReturn(mBluetoothCodecConfig).when(mController).getCodecConfig(); doNothing().when(mController).setCodecConfigPreference(any()); when(mBluetoothA2dpConfigStore.createCodecConfig()).thenReturn(mBluetoothCodecConfig); @@ -138,8 +138,8 @@ public class AbstractBluetoothA2dpPreferenceControllerTest { AbstractBluetoothA2dpPreferenceController { public AbstractBluetoothA2dpPreferenceControllerImpl(Context context, - Lifecycle lifecycle, Object bluetoothA2dpLock, BluetoothA2dpConfigStore store) { - super(context, lifecycle, bluetoothA2dpLock, store); + Lifecycle lifecycle, BluetoothA2dpConfigStore store) { + super(context, lifecycle, store); } @Override diff --git a/tests/robotests/src/com/android/settings/development/BluetoothAudioCodecPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/development/BluetoothAudioCodecPreferenceControllerTest.java new file mode 100644 index 00000000000..560a9c33ce2 --- /dev/null +++ b/tests/robotests/src/com/android/settings/development/BluetoothAudioCodecPreferenceControllerTest.java @@ -0,0 +1,117 @@ +/* + * 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.development; + +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.BluetoothCodecConfig; +import android.content.Context; +import android.support.v7.preference.ListPreference; +import android.support.v7.preference.PreferenceScreen; + +import com.android.settings.TestConfig; +import com.android.settings.testutils.SettingsRobolectricTestRunner; +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.RuntimeEnvironment; +import org.robolectric.annotation.Config; + +@RunWith(SettingsRobolectricTestRunner.class) +@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION) +public class BluetoothAudioCodecPreferenceControllerTest { + + @Mock + private BluetoothCodecConfig mBluetoothCodecConfig; + @Mock + private ListPreference mPreference; + @Mock + private PreferenceScreen mScreen; + @Mock + private BluetoothA2dpConfigStore mBluetoothA2dpConfigStore; + + /** + * 0: Use System Selection (Default) + * 1: SBC + * 2: AAC + * 3: Qualcomm aptX audio + * 4: Qualcomm aptX HD audio + * 5: LDAC + * 6: Enable Optional Codecs + * 7: Disable Optional Codecs + */ + private String[] mListValues; + private Context mContext; + private BluetoothAudioCodecPreferenceController mController; + + @Before + public void setup() { + MockitoAnnotations.initMocks(this); + mContext = RuntimeEnvironment.application; + mController = spy(new BluetoothAudioCodecPreferenceController(mContext, new Lifecycle(), + mBluetoothA2dpConfigStore)); + mListValues = mController.getListValues(); + when(mScreen.findPreference(mController.getPreferenceKey())).thenReturn(mPreference); + mController.displayPreference(mScreen); + } + + @Test + public void writeConfigurationValues_option2_shouldWriteOption2ToSharedStore() { + when(mPreference.findIndexOfValue(mListValues[2])).thenReturn(2); + mController.writeConfigurationValues(mListValues[2]); + + verify(mBluetoothA2dpConfigStore).setCodecType(BluetoothCodecConfig.SOURCE_CODEC_TYPE_AAC); + verify(mBluetoothA2dpConfigStore).setCodecPriority( + BluetoothCodecConfig.CODEC_PRIORITY_HIGHEST); + } + + @Test + public void writeConfigurationValues_default_shouldSetDefaultPriority() { + when(mPreference.findIndexOfValue(mListValues[0])).thenReturn(0); + mController.writeConfigurationValues(mListValues[0]); + + verify(mBluetoothA2dpConfigStore).setCodecPriority( + BluetoothCodecConfig.CODEC_PRIORITY_DEFAULT); + } + + @Test + public void getCurrentA2dpSettingIndex_option2_shouldReturnSecondIndex() { + when(mBluetoothCodecConfig.getCodecType()).thenReturn( + BluetoothCodecConfig.SOURCE_CODEC_TYPE_AAC); + + final int index = mController.getCurrentA2dpSettingIndex(mBluetoothCodecConfig); + + assertThat(index).isEqualTo(2); + } + + @Test + public void getCurrentA2dpSettingIndex_unknownOption_shouldReturnDefault() { + when(mBluetoothCodecConfig.getCodecType()).thenReturn(1381391835); + + final int index = mController.getCurrentA2dpSettingIndex(mBluetoothCodecConfig); + + assertThat(index).isEqualTo(0); + } +} diff --git a/tests/robotests/src/com/android/settings/development/BluetoothAudioSampleRatePreferenceControllerTest.java b/tests/robotests/src/com/android/settings/development/BluetoothAudioSampleRatePreferenceControllerTest.java index 89195766e5d..f683d21c4d7 100644 --- a/tests/robotests/src/com/android/settings/development/BluetoothAudioSampleRatePreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/development/BluetoothAudioSampleRatePreferenceControllerTest.java @@ -70,7 +70,7 @@ public class BluetoothAudioSampleRatePreferenceControllerTest { mContext = RuntimeEnvironment.application; mLifecycle = new Lifecycle(); mController = spy(new BluetoothAudioSampleRatePreferenceController(mContext, mLifecycle, - new Object(), mBluetoothA2dpConfigStore)); + mBluetoothA2dpConfigStore)); mListValues = mController.getListValues(); when(mScreen.findPreference(mController.getPreferenceKey())).thenReturn(mPreference); mController.displayPreference(mScreen);