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

Commit b045c57f authored by Alice Kuo's avatar Alice Kuo Committed by Automerger Merge Worker
Browse files

Add LE Audio feature switcher in the developer option menu am: 948b7cb9

parents 150bdf72 948b7cb9
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -353,6 +353,11 @@
    <!-- UI debug setting: Disable Bluetooth hardware offload [CHAR LIMIT=none] -->
    <string name="bluetooth_disable_hw_offload_dialog_cancel">Cancel</string>
    <!-- Setting Checkbox title for enabling Bluetooth LE Audio feature. [CHAR LIMIT=40] -->
    <string name="bluetooth_enable_leaudio">Enable LE Audio</string>
    <!-- Summary of checkbox for enabling Bluetooth le audio [CHAR LIMIT=none]-->
    <string name="bluetooth_enable_leaudio_summary">Enables the Bluetooth LE Audio feature if this device supports LE audio hardware capabilities.</string>
    <!-- Title for Bluetooth device group with media capability group [CHAR LIMIT=none]-->
    <string name="connected_device_media_device_title">Media devices</string>
    <!-- Title for Bluetooth device group with media capability group [CHAR LIMIT=none]-->
+5 −0
Original line number Diff line number Diff line
@@ -319,6 +319,11 @@
            android:title="@string/bluetooth_disable_absolute_volume"
            android:summary="@string/bluetooth_disable_absolute_volume_summary" />

        <SwitchPreference
            android:key="bluetooth_enable_leaudio"
            android:title="@string/bluetooth_enable_leaudio"
            android:summary="@string/bluetooth_enable_leaudio_summary" />

        <SwitchPreference
            android:key="bluetooth_disable_a2dp_hw_offload"
            android:title="@string/bluetooth_disable_a2dp_hw_offload" />
+5 −5
Original line number Diff line number Diff line
@@ -53,7 +53,7 @@ public class BluetoothA2dpHwOffloadPreferenceController extends DeveloperOptions

    @Override
    public boolean onPreferenceChange(Preference preference, Object newValue) {
        BluetoothHwOffloadRebootDialog.show(mFragment);
        BluetoothRebootDialog.show(mFragment);
        mChanged = true;
        return false;
    }
@@ -93,9 +93,9 @@ public class BluetoothA2dpHwOffloadPreferenceController extends DeveloperOptions
    }

    /**
     * Called when the HwOffloadDialog confirm is clicked.
     * Called when the RebootDialog confirm is clicked.
     */
    public void onHwOffloadDialogConfirmed() {
    public void onRebootDialogConfirmed() {
        if (!mChanged) {
            return;
        }
@@ -109,9 +109,9 @@ public class BluetoothA2dpHwOffloadPreferenceController extends DeveloperOptions
    }

    /**
     * Called when the HwOffloadDialog cancel is clicked.
     * Called when the RebootDialog cancel is clicked.
     */
    public void onHwOffloadDialogCanceled() {
    public void onRebootDialogCanceled() {
        mChanged = false;
    }
}
+5 −5
Original line number Diff line number Diff line
@@ -59,7 +59,7 @@ public class BluetoothLeAudioHwOffloadPreferenceController

    @Override
    public boolean onPreferenceChange(Preference preference, Object newValue) {
        BluetoothHwOffloadRebootDialog.show(mFragment);
        BluetoothRebootDialog.show(mFragment);
        mChanged = true;
        return false;
    }
@@ -104,9 +104,9 @@ public class BluetoothLeAudioHwOffloadPreferenceController
    }

    /**
     * Called when the HwOffloadDialog confirm is clicked.
     * Called when the RebootDialog confirm is clicked.
     */
    public void onHwOffloadDialogConfirmed() {
    public void onRebootDialogConfirmed() {
        if (!mChanged) {
            return;
        }
@@ -119,9 +119,9 @@ public class BluetoothLeAudioHwOffloadPreferenceController
    }

    /**
     * Called when the HwOffloadDialog cancel is clicked.
     * Called when the RebootDialog cancel is clicked.
     */
    public void onHwOffloadDialogCanceled() {
    public void onRebootDialogCanceled() {
        mChanged = false;
    }
}
+114 −0
Original line number Diff line number Diff line
/*
 * Copyright 2022 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.BluetoothAdapter;
import android.bluetooth.BluetoothManager;
import android.bluetooth.BluetoothStatusCodes;
import android.content.Context;
import android.os.SystemProperties;

import androidx.annotation.VisibleForTesting;
import androidx.preference.Preference;
import androidx.preference.SwitchPreference;

import com.android.settings.core.PreferenceControllerMixin;
import com.android.settingslib.development.DeveloperOptionsPreferenceController;

/**
 * Preference controller to control Bluetooth LE audio feature
 */
public class BluetoothLeAudioPreferenceController
        extends DeveloperOptionsPreferenceController
        implements Preference.OnPreferenceChangeListener, PreferenceControllerMixin {

    private static final String PREFERENCE_KEY = "bluetooth_enable_leaudio";

    private static final String LE_AUDIO_DYNAMIC_SWITCH_PROPERTY =
            "ro.bluetooth.leaudio_switcher.supported";
    @VisibleForTesting
    static final String LE_AUDIO_DYNAMIC_ENABLED_PROPERTY =
            "persist.bluetooth.leaudio_switcher.enabled";

    private final DevelopmentSettingsDashboardFragment mFragment;

    @VisibleForTesting
    BluetoothAdapter mBluetoothAdapter;

    @VisibleForTesting
    boolean mChanged = false;

    public BluetoothLeAudioPreferenceController(Context context,
            DevelopmentSettingsDashboardFragment fragment) {
        super(context);
        mFragment = fragment;
        mBluetoothAdapter = context.getSystemService(BluetoothManager.class).getAdapter();
    }

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

    @Override
    public boolean onPreferenceChange(Preference preference, Object newValue) {
        BluetoothRebootDialog.show(mFragment);
        mChanged = true;
        return false;
    }

    @Override
    public void updateState(Preference preference) {
        if (mBluetoothAdapter == null) {
            return;
        }

        final boolean leAudioEnabled =
                (mBluetoothAdapter.isLeAudioSupported() == BluetoothStatusCodes.FEATURE_SUPPORTED);
        ((SwitchPreference) mPreference).setChecked(leAudioEnabled);

        final boolean leAudioSwitchSupported =
                SystemProperties.getBoolean(LE_AUDIO_DYNAMIC_SWITCH_PROPERTY, false);
        if (!leAudioSwitchSupported) {
            mPreference.setEnabled(false);
        } else {
            SystemProperties.set(LE_AUDIO_DYNAMIC_ENABLED_PROPERTY,
                    Boolean.toString(leAudioEnabled));
        }
    }

    /**
     * Called when the RebootDialog confirm is clicked.
     */
    public void onRebootDialogConfirmed() {
        if (!mChanged || mBluetoothAdapter == null) {
            return;
        }

        final boolean leAudioEnabled =
                (mBluetoothAdapter.isLeAudioSupported() == BluetoothStatusCodes.FEATURE_SUPPORTED);
        SystemProperties.set(LE_AUDIO_DYNAMIC_ENABLED_PROPERTY,
                Boolean.toString(!leAudioEnabled));
    }

    /**
     * Called when the RebootDialog cancel is clicked.
     */
    public void onRebootDialogCanceled() {
        mChanged = false;
    }
}
Loading