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

Commit b1f70dc3 authored by Mill Chen's avatar Mill Chen
Browse files

Update the list of Take call on

To make sure that all connected devices can be shown in the list of Take
call on setting, we add a listener for local bluetooth profile change
and update the list when the profile is connected.

Fixes: 352236362
Test: manual test
Flag: EXEMPT bugfix
Change-Id: I76476d4e6201b6c5c2726747410d225ff1ade9da
parent 04ef86d1
Loading
Loading
Loading
Loading
+25 −1
Original line number Diff line number Diff line
@@ -45,6 +45,7 @@ import androidx.preference.PreferenceScreen;
import com.android.settings.bluetooth.Utils;
import com.android.settings.core.BasePreferenceController;
import com.android.settings.core.FeatureFlags;
import com.android.settings.sounde.AudioSwitchUtils;
import com.android.settingslib.bluetooth.A2dpProfile;
import com.android.settingslib.bluetooth.BluetoothCallback;
import com.android.settingslib.bluetooth.CachedBluetoothDevice;
@@ -68,7 +69,8 @@ import java.util.concurrent.FutureTask;
 * updating the current status of switcher entry. Subclasses must overwrite
 */
public abstract class AudioSwitchPreferenceController extends BasePreferenceController
        implements BluetoothCallback, LifecycleObserver, OnStart, OnStop {
        implements BluetoothCallback, LifecycleObserver, OnStart, OnStop,
        LocalBluetoothProfileManager.ServiceListener {

    private static final String TAG = "AudioSwitchPrefCtrl";

@@ -149,6 +151,11 @@ public abstract class AudioSwitchPreferenceController extends BasePreferenceCont
            return;
        }
        mLocalBluetoothManager.setForegroundActivity(mContext);
        if (!AudioSwitchUtils.isLeAudioProfileReady(mProfileManager)) {
            if (mProfileManager != null) {
                mProfileManager.addServiceListener(this);
            }
        }
        register();
    }

@@ -159,6 +166,9 @@ public abstract class AudioSwitchPreferenceController extends BasePreferenceCont
            return;
        }
        mLocalBluetoothManager.setForegroundActivity(null);
        if (mProfileManager != null) {
            mProfileManager.removeServiceListener(this);
        }
        unregister();
    }

@@ -193,6 +203,20 @@ public abstract class AudioSwitchPreferenceController extends BasePreferenceCont
        updateState(mPreference);
    }

    @Override
    public void onServiceConnected() {
        Log.d(TAG, "onServiceConnected");
        if (AudioSwitchUtils.isLeAudioProfileReady(mProfileManager)) {
            updateState(mPreference);
        }
    }

    @Override
    public void onServiceDisconnected() {
        Log.d(TAG, "onServiceDisconnected()");
        // Do nothing.
    }

    public void setCallback(AudioSwitchCallback callback) {
        mAudioSwitchPreferenceCallback = callback;
    }
+32 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2024 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.sounde

import com.android.settingslib.bluetooth.LocalBluetoothProfileManager

/**
 * Utilities class for audio switcher controllers
 */
class AudioSwitchUtils {
    companion object {

        /** Check if LE Audio profile is ready. */
        @JvmStatic
        fun isLeAudioProfileReady(profileManager: LocalBluetoothProfileManager?): Boolean =
            profileManager?.getLeAudioProfile()?.isProfileReady() ?: false
    }
}
 No newline at end of file