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

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

Merge changes I0ea498d2,I2d650eb3,I8adcf27e into tm-d1-dev

* changes:
  Grey out LE audio offload switcher as LE audio isn't enabled/supported
  Unify the LE audio string and refine the layout to put LE audio switch together
  Add LE Audio feature switcher in the developer option menu
parents 7f6ae241 b51ae978
Loading
Loading
Loading
Loading
+7 −2
Original line number Diff line number Diff line
@@ -342,8 +342,8 @@
    <!-- UI debug setting: Disable Bluetooth A2DP hardware offload [CHAR LIMIT=none] -->
    <string name="bluetooth_disable_a2dp_hw_offload">Disable Bluetooth A2DP hardware offload</string>
    <!-- UI debug setting: Disable Bluetooth LE AUDIO hardware offload [CHAR LIMIT=none] -->
    <string name="bluetooth_disable_le_audio_hw_offload">Disable Bluetooth LE AUDIO hardware offload</string>
    <!-- UI debug setting: Disable Bluetooth LE audio hardware offload [CHAR LIMIT=none] -->
    <string name="bluetooth_disable_le_audio_hw_offload">Disable Bluetooth LE audio hardware offload</string>
    <!-- UI debug setting: Disable Bluetooth hardware offload [CHAR LIMIT=none] -->
    <string name="bluetooth_disable_hw_offload_dialog_title">Restart Device?</string>
    <!-- UI debug setting: Disable Bluetooth hardware offload [CHAR LIMIT=none] -->
@@ -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 Bluetooth LE audio</string>
    <!-- Summary of checkbox for enabling Bluetooth LE audio [CHAR LIMIT=none]-->
    <string name="bluetooth_enable_leaudio_summary">Enables Bluetooth LE audio feature if the 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]-->
+7 −2
Original line number Diff line number Diff line
@@ -320,13 +320,18 @@
            android:summary="@string/bluetooth_disable_absolute_volume_summary" />

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

        <SwitchPreference
            android:key="bluetooth_disable_le_audio_hw_offload"
            android:title="@string/bluetooth_disable_le_audio_hw_offload" />

        <SwitchPreference
            android:key="bluetooth_disable_a2dp_hw_offload"
            android:title="@string/bluetooth_disable_a2dp_hw_offload" />

        <ListPreference
            android:key="bluetooth_select_avrcp_version"
            android:title="@string/bluetooth_select_avrcp_version_string"
+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;
    }
}
+29 −7
Original line number Diff line number Diff line
@@ -18,6 +18,9 @@ package com.android.settings.development;

import static com.android.settings.development.BluetoothA2dpHwOffloadPreferenceController.A2DP_OFFLOAD_SUPPORTED_PROPERTY;

import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothManager;
import android.bluetooth.BluetoothStatusCodes;
import android.content.Context;
import android.os.SystemProperties;

@@ -43,6 +46,9 @@ public class BluetoothLeAudioHwOffloadPreferenceController
    static final String LE_AUDIO_OFFLOAD_SUPPORTED_PROPERTY =
            "ro.bluetooth.leaudio_offload.supported";

    @VisibleForTesting
    BluetoothAdapter mBluetoothAdapter;

    @VisibleForTesting
    boolean mChanged = false;

@@ -50,6 +56,7 @@ public class BluetoothLeAudioHwOffloadPreferenceController
            DevelopmentSettingsDashboardFragment fragment) {
        super(context);
        mFragment = fragment;
        mBluetoothAdapter = context.getSystemService(BluetoothManager.class).getAdapter();
    }

    @Override
@@ -59,17 +66,24 @@ public class BluetoothLeAudioHwOffloadPreferenceController

    @Override
    public boolean onPreferenceChange(Preference preference, Object newValue) {
        BluetoothHwOffloadRebootDialog.show(mFragment);
        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);

        final boolean offloadSupported =
                SystemProperties.getBoolean(A2DP_OFFLOAD_SUPPORTED_PROPERTY, false)
                && SystemProperties.getBoolean(LE_AUDIO_OFFLOAD_SUPPORTED_PROPERTY, false);
        if (offloadSupported) {
        if (leAudioEnabled && offloadSupported) {
            final boolean offloadDisabled =
                    SystemProperties.getBoolean(LE_AUDIO_OFFLOAD_DISABLED_PROPERTY, true);
            ((SwitchPreference) mPreference).setChecked(offloadDisabled);
@@ -82,12 +96,20 @@ public class BluetoothLeAudioHwOffloadPreferenceController
    @Override
    protected void onDeveloperOptionsSwitchDisabled() {
        super.onDeveloperOptionsSwitchDisabled();
        if (mBluetoothAdapter == null) {
            return;
        }

        final boolean leAudioEnabled =
                (mBluetoothAdapter.isLeAudioSupported() == BluetoothStatusCodes.FEATURE_SUPPORTED);
        final boolean offloadSupported =
                SystemProperties.getBoolean(A2DP_OFFLOAD_SUPPORTED_PROPERTY, false)
                && SystemProperties.getBoolean(LE_AUDIO_OFFLOAD_SUPPORTED_PROPERTY, false);
        if (offloadSupported) {
        if (leAudioEnabled && offloadSupported) {
            ((SwitchPreference) mPreference).setChecked(true);
            SystemProperties.set(LE_AUDIO_OFFLOAD_DISABLED_PROPERTY, "true");
        } else {
            mPreference.setEnabled(false);
        }
    }

@@ -104,9 +126,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 +141,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