Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit db60997f authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge changes I145c2e25,I4abe87dd,I86575d17,I90a0e583

* changes:
  Introduce BluetoothAudioQualityPreferenceCtrl
  Introduce BluetoothAudioChannelModePreferenceCtrl
  Introduce BluetoothAudioBitsPerSamplePrefCtrl
  Introduce BluetoothAudioCodecPreferenceController
parents 47775667 af3ec754
Loading
Loading
Loading
Loading
+5 −21
Original line number Diff line number Diff line
@@ -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);
    }

}
+25 −0
Original line number Diff line number Diff line
/*
 * 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 {
}
+102 −0
Original line number Diff line number Diff line
/*
 * 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 BluetoothAudioBitsPerSamplePreferenceController extends
        AbstractBluetoothA2dpPreferenceController {

    private static final int DEFAULT_INDEX = 0;
    private static final String BLUETOOTH_SELECT_A2DP_BITS_PER_SAMPLE_KEY =
            "bluetooth_select_a2dp_bits_per_sample";

    public BluetoothAudioBitsPerSamplePreferenceController(Context context, Lifecycle lifecycle,
            BluetoothA2dpConfigStore store) {
        super(context, lifecycle, store);
    }

    @Override
    public String getPreferenceKey() {
        return BLUETOOTH_SELECT_A2DP_BITS_PER_SAMPLE_KEY;
    }

    @Override
    protected String[] getListValues() {
        return mContext.getResources().getStringArray(
                R.array.bluetooth_a2dp_codec_bits_per_sample_values);
    }

    @Override
    protected String[] getListSummaries() {
        return mContext.getResources().getStringArray(
                R.array.bluetooth_a2dp_codec_bits_per_sample_summaries);
    }

    @Override
    protected int getDefaultIndex() {
        return DEFAULT_INDEX;
    }

    @Override
    protected void writeConfigurationValues(Object newValue) {
        final int index = mPreference.findIndexOfValue(newValue.toString());
        int bitsPerSampleValue = BluetoothCodecConfig.BITS_PER_SAMPLE_NONE; // default
        switch (index) {
            case 0:
                // Reset to default
                break;
            case 1:
                bitsPerSampleValue = BluetoothCodecConfig.BITS_PER_SAMPLE_16;
                break;
            case 2:
                bitsPerSampleValue = BluetoothCodecConfig.BITS_PER_SAMPLE_24;
                break;
            case 3:
                bitsPerSampleValue = BluetoothCodecConfig.BITS_PER_SAMPLE_32;
                break;
            default:
                break;
        }
        mBluetoothA2dpConfigStore.setBitsPerSample(bitsPerSampleValue);
    }

    @Override
    protected int getCurrentA2dpSettingIndex(BluetoothCodecConfig config) {
        final int bitsPerSample = config.getBitsPerSample();
        int index = DEFAULT_INDEX;
        switch (bitsPerSample) {
            case BluetoothCodecConfig.BITS_PER_SAMPLE_16:
                index = 1;
                break;
            case BluetoothCodecConfig.BITS_PER_SAMPLE_24:
                index = 2;
                break;
            case BluetoothCodecConfig.BITS_PER_SAMPLE_32:
                index = 3;
                break;
            case BluetoothCodecConfig.BITS_PER_SAMPLE_NONE:
            default:
                break;
        }
        return index;
    }
}
+96 −0
Original line number Diff line number Diff line
/*
 * 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 BluetoothAudioChannelModePreferenceController extends
        AbstractBluetoothA2dpPreferenceController {

    private static final int DEFAULT_INDEX = 0;
    private static final String BLUETOOTH_SELECT_A2DP_CHANNEL_MODE_KEY =
            "bluetooth_select_a2dp_channel_mode";

    public BluetoothAudioChannelModePreferenceController(Context context, Lifecycle lifecycle,
            BluetoothA2dpConfigStore store) {
        super(context, lifecycle, store);
    }

    @Override
    public String getPreferenceKey() {
        return BLUETOOTH_SELECT_A2DP_CHANNEL_MODE_KEY;
    }

    @Override
    protected String[] getListValues() {
        return mContext.getResources().getStringArray(
                R.array.bluetooth_a2dp_codec_channel_mode_values);
    }

    @Override
    protected String[] getListSummaries() {
        return mContext.getResources().getStringArray(
                R.array.bluetooth_a2dp_codec_channel_mode_summaries);
    }

    @Override
    protected int getDefaultIndex() {
        return DEFAULT_INDEX;
    }

    @Override
    protected void writeConfigurationValues(Object newValue) {
        final int index = mPreference.findIndexOfValue(newValue.toString());
        int channelModeValue = BluetoothCodecConfig.CHANNEL_MODE_NONE; // default
        switch (index) {
            case 0:
                // Reset to default
                break;
            case 1:
                channelModeValue = BluetoothCodecConfig.CHANNEL_MODE_MONO;
                break;
            case 2:
                channelModeValue = BluetoothCodecConfig.CHANNEL_MODE_STEREO;
                break;
            default:
                break;
        }
        mBluetoothA2dpConfigStore.setChannelMode(channelModeValue);
    }

    @Override
    protected int getCurrentA2dpSettingIndex(BluetoothCodecConfig config) {
        final int channelMode = config.getChannelMode();
        int index = DEFAULT_INDEX;
        switch (channelMode) {
            case BluetoothCodecConfig.CHANNEL_MODE_MONO:
                index = 1;
                break;
            case BluetoothCodecConfig.CHANNEL_MODE_STEREO:
                index = 2;
                break;
            case BluetoothCodecConfig.CHANNEL_MODE_NONE:
            default:
                break;
        }
        return index;
    }
}
+156 −0
Original line number Diff line number Diff line
/*
 * 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;
    }
}
Loading