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

Commit 6a3a3e2a authored by Yiyi Shen's avatar Yiyi Shen Committed by Android (Google) Code Review
Browse files

Merge "[Audiosharing] Show/hide audio sharing settings based on BT state." into main

parents 83cb0a9c bdc870a4
Loading
Loading
Loading
Loading
+32 −12
Original line number Diff line number Diff line
@@ -16,8 +16,12 @@

package com.android.settings.connecteddevice.audiosharing;

import android.bluetooth.BluetoothAdapter;
import android.content.Context;

import androidx.annotation.NonNull;
import androidx.lifecycle.DefaultLifecycleObserver;
import androidx.lifecycle.LifecycleOwner;
import androidx.preference.Preference;
import androidx.preference.PreferenceScreen;

@@ -26,14 +30,18 @@ import com.android.settings.core.BasePreferenceController;
import com.android.settings.flags.Flags;
import com.android.settingslib.bluetooth.LocalBluetoothLeBroadcast;
import com.android.settingslib.bluetooth.LocalBluetoothManager;
import com.android.settingslib.utils.ThreadUtils;

public abstract class AudioSharingBasePreferenceController extends BasePreferenceController {
public abstract class AudioSharingBasePreferenceController extends BasePreferenceController
        implements DefaultLifecycleObserver {
    private final BluetoothAdapter mBluetoothAdapter;
    private final LocalBluetoothManager mBtManager;
    protected final LocalBluetoothLeBroadcast mBroadcast;
    protected Preference mPreference;

    public AudioSharingBasePreferenceController(Context context, String preferenceKey) {
        super(context, preferenceKey);
        mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
        mBtManager = Utils.getLocalBtManager(context);
        mBroadcast =
                mBtManager == null
@@ -43,28 +51,40 @@ public abstract class AudioSharingBasePreferenceController extends BasePreferenc

    @Override
    public int getAvailabilityStatus() {
        return mBtManager != null && Flags.enableLeAudioSharing()
                ? AVAILABLE
                : UNSUPPORTED_ON_DEVICE;
        return Flags.enableLeAudioSharing() ? AVAILABLE : UNSUPPORTED_ON_DEVICE;
    }

    @Override
    public void displayPreference(PreferenceScreen screen) {
        super.displayPreference(screen);
        mPreference = screen.findPreference(getPreferenceKey());
        updateVisibility(isBroadcasting());
    }

    /**
     * Update the visibility of the preference.
     *
     * @param isVisible the latest visibility state for the preference.
     */
    public void updateVisibility(boolean isVisible) {
        mPreference.setVisible(isVisible);
    @Override
    public void onStart(@NonNull LifecycleOwner owner) {
        if (isAvailable()) {
            updateVisibility();
        }
    }

    /** Update the visibility of the preference. */
    protected void updateVisibility() {
        if (mPreference != null) {
            var unused =
                    ThreadUtils.postOnBackgroundThread(
                            () -> {
                                boolean isVisible = isBroadcasting() && isBluetoothStateOn();
                                ThreadUtils.postOnMainThread(
                                        () -> mPreference.setVisible(isVisible));
                            });
        }
    }

    protected boolean isBroadcasting() {
        return mBroadcast != null && mBroadcast.isEnabled(null);
    }

    protected boolean isBluetoothStateOn() {
        return mBluetoothAdapter != null && mBluetoothAdapter.isEnabled();
    }
}
+7 −7
Original line number Diff line number Diff line
@@ -93,14 +93,14 @@ public class AudioSharingDashboardFragment extends DashboardFragment
    }

    @Override
    public void onSwitchBarChanged(boolean newState) {
        updateVisibilityForAttachedPreferences(newState);
    public void onSwitchBarChanged() {
        updateVisibilityForAttachedPreferences();
    }

    private void updateVisibilityForAttachedPreferences(boolean isVisible) {
        mAudioSharingDeviceVolumeGroupController.updateVisibility(isVisible);
        mCallsAndAlarmsPreferenceController.updateVisibility(isVisible);
        mAudioSharingNamePreferenceController.updateVisibility(isVisible);
        mAudioStreamsCategoryController.updateVisibility(isVisible);
    private void updateVisibilityForAttachedPreferences() {
        mAudioSharingDeviceVolumeGroupController.updateVisibility();
        mCallsAndAlarmsPreferenceController.updateVisibility();
        mAudioSharingNamePreferenceController.updateVisibility();
        mAudioStreamsCategoryController.updateVisibility();
    }
}
+8 −5
Original line number Diff line number Diff line
@@ -27,7 +27,6 @@ import android.util.Log;

import androidx.annotation.NonNull;
import androidx.fragment.app.FragmentManager;
import androidx.lifecycle.DefaultLifecycleObserver;
import androidx.lifecycle.LifecycleOwner;
import androidx.preference.Preference;
import androidx.preference.PreferenceGroup;
@@ -48,7 +47,7 @@ import java.util.concurrent.Executor;
import java.util.concurrent.Executors;

public class AudioSharingDeviceVolumeGroupController extends AudioSharingBasePreferenceController
        implements DefaultLifecycleObserver, DevicePreferenceCallback {
        implements DevicePreferenceCallback {

    private static final String TAG = "AudioSharingDeviceVolumeGroupController";
    private static final String KEY = "audio_sharing_device_volume_group";
@@ -162,6 +161,7 @@ public class AudioSharingDeviceVolumeGroupController extends AudioSharingBasePre

    @Override
    public void onStart(@NonNull LifecycleOwner owner) {
        super.onStart(owner);
        if (mAssistant == null) {
            Log.d(TAG, "onStart() Broadcast or assistant is not supported on this device");
            return;
@@ -176,6 +176,7 @@ public class AudioSharingDeviceVolumeGroupController extends AudioSharingBasePre

    @Override
    public void onStop(@NonNull LifecycleOwner owner) {
        super.onStop(owner);
        if (mAssistant == null) {
            Log.d(TAG, "onStop() Broadcast or assistant is not supported on this device");
            return;
@@ -233,10 +234,12 @@ public class AudioSharingDeviceVolumeGroupController extends AudioSharingBasePre
    }

    @Override
    public void updateVisibility(boolean isVisible) {
        super.updateVisibility(isVisible);
    public void updateVisibility() {
        if (mPreferenceGroup != null) {
            mPreferenceGroup.setVisible(mPreferenceGroup.getPreferenceCount() > 0);
            mPreferenceGroup.setVisible(false);
            if (mPreferenceGroup.getPreferenceCount() > 0) {
                super.updateVisibility();
            }
        }
    }

+3 −4
Original line number Diff line number Diff line
@@ -19,16 +19,13 @@ package com.android.settings.connecteddevice.audiosharing;
import android.content.Context;

import androidx.annotation.NonNull;
import androidx.lifecycle.DefaultLifecycleObserver;
import androidx.lifecycle.LifecycleOwner;
import androidx.preference.Preference;

import com.android.settings.widget.ValidatedEditTextPreference;

public class AudioSharingNamePreferenceController extends AudioSharingBasePreferenceController
        implements ValidatedEditTextPreference.Validator,
                Preference.OnPreferenceChangeListener,
                DefaultLifecycleObserver {
        implements ValidatedEditTextPreference.Validator, Preference.OnPreferenceChangeListener {

    private static final String TAG = "AudioSharingNamePreferenceController";

@@ -59,11 +56,13 @@ public class AudioSharingNamePreferenceController extends AudioSharingBasePrefer

    @Override
    public void onStart(@NonNull LifecycleOwner owner) {
        super.onStart(owner);
        // TODO
    }

    @Override
    public void onStop(@NonNull LifecycleOwner owner) {
        super.onStop(owner);
        // TODO
    }
}
+19 −12
Original line number Diff line number Diff line
@@ -31,6 +31,7 @@ import android.widget.CompoundButton;
import android.widget.CompoundButton.OnCheckedChangeListener;

import androidx.annotation.NonNull;
import androidx.annotation.VisibleForTesting;
import androidx.lifecycle.DefaultLifecycleObserver;
import androidx.lifecycle.LifecycleOwner;

@@ -58,19 +59,20 @@ public class AudioSharingSwitchBarController extends BasePreferenceController
    private static final String PREF_KEY = "audio_sharing_main_switch";

    interface OnSwitchBarChangedListener {
        void onSwitchBarChanged(boolean newState);
        void onSwitchBarChanged();
    }

    private final SettingsMainSwitchBar mSwitchBar;
    private final BluetoothAdapter mBluetoothAdapter;
    private final IntentFilter mIntentFilter;
    private final LocalBluetoothManager mBtManager;
    private final LocalBluetoothLeBroadcast mBroadcast;
    private final LocalBluetoothLeBroadcastAssistant mAssistant;
    private final Executor mExecutor;
    private final OnSwitchBarChangedListener mListener;
    private DashboardFragment mFragment;
    @VisibleForTesting IntentFilter mIntentFilter;

    @VisibleForTesting
    BroadcastReceiver mReceiver =
            new BroadcastReceiver() {
                @Override
@@ -80,6 +82,7 @@ public class AudioSharingSwitchBarController extends BasePreferenceController
                            intent.getIntExtra(BluetoothAdapter.EXTRA_STATE, BluetoothDevice.ERROR);
                    mSwitchBar.setChecked(isBroadcasting());
                    mSwitchBar.setEnabled(adapterState == BluetoothAdapter.STATE_ON);
                    mListener.onSwitchBarChanged();
                }
            };

@@ -346,14 +349,18 @@ public class AudioSharingSwitchBarController extends BasePreferenceController
    }

    private void updateSwitch() {
        ThreadUtils.postOnMainThread(
        var unused =
                ThreadUtils.postOnBackgroundThread(
                        () -> {
                            boolean isBroadcasting = isBroadcasting();
                            ThreadUtils.postOnMainThread(
                                    () -> {
                                        if (mSwitchBar.isChecked() != isBroadcasting) {
                                            mSwitchBar.setChecked(isBroadcasting);
                                        }
                                        mSwitchBar.setEnabled(true);
                    mListener.onSwitchBarChanged(isBroadcasting);
                                        mListener.onSwitchBarChanged();
                                    });
                        });
    }

Loading