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

Commit be615f93 authored by SongFerngWang's avatar SongFerngWang Committed by Automerger Merge Worker
Browse files

To refresh/register/unregister all of the devices with same groupId am: ef7a75c3

parents 9b6494cf ef7a75c3
Loading
Loading
Loading
Loading
+2 −17
Original line number Diff line number Diff line
@@ -16,7 +16,6 @@

package com.android.settings.bluetooth;

import android.bluetooth.BluetoothCsipSetCoordinator;
import android.bluetooth.BluetoothDevice;
import android.bluetooth.BluetoothProfile;
import android.content.Context;
@@ -89,7 +88,7 @@ public class BluetoothDetailsProfilesController extends BluetoothDetailsControll
        mManager = manager;
        mProfileManager = mManager.getProfileManager();
        mCachedDevice = device;
        mAllOfCachedDevices = getAllOfCachedBluetoothDevices();
        mAllOfCachedDevices = Utils.getAllOfCachedBluetoothDevices(mContext, mCachedDevice);
        lifecycle.addObserver(this);
    }

@@ -319,20 +318,6 @@ public class BluetoothDetailsProfilesController extends BluetoothDetailsControll
        return result;
    }

    private List<CachedBluetoothDevice> getAllOfCachedBluetoothDevices() {
        List<CachedBluetoothDevice> cachedBluetoothDevices = new ArrayList<>();
        if (mCachedDevice == null) {
            return cachedBluetoothDevices;
        }
        cachedBluetoothDevices.add(mCachedDevice);
        if (mCachedDevice.getGroupId() != BluetoothCsipSetCoordinator.GROUP_ID_INVALID) {
            for (CachedBluetoothDevice member : mCachedDevice.getMemberDevice()) {
                cachedBluetoothDevices.add(member);
            }
        }
        return cachedBluetoothDevices;
    }

    /**
     * Disable the Le Audio profile, VCP, and CSIP for each of the Le Audio devices.
     *
@@ -480,7 +465,7 @@ public class BluetoothDetailsProfilesController extends BluetoothDetailsControll
        for (CachedBluetoothDevice item : mAllOfCachedDevices) {
            item.unregisterCallback(this);
        }
        mAllOfCachedDevices = getAllOfCachedBluetoothDevices();
        mAllOfCachedDevices = Utils.getAllOfCachedBluetoothDevices(mContext, mCachedDevice);
        for (CachedBluetoothDevice item : mAllOfCachedDevices) {
            item.registerCallback(this);
        }
+18 −35
Original line number Diff line number Diff line
@@ -16,7 +16,6 @@

package com.android.settings.bluetooth;

import android.bluetooth.BluetoothCsipSetCoordinator;
import android.bluetooth.BluetoothLeAudio;
import android.bluetooth.BluetoothProfile;
import android.content.Context;
@@ -48,7 +47,6 @@ import com.android.settingslib.core.lifecycle.events.OnStart;
import com.android.settingslib.core.lifecycle.events.OnStop;
import com.android.settingslib.widget.LayoutPreference;

import java.util.ArrayList;
import java.util.List;

/**
@@ -91,7 +89,7 @@ public class LeAudioBluetoothDetailsHeaderController extends BasePreferenceContr
    @VisibleForTesting
    LayoutPreference mLayoutPreference;
    private CachedBluetoothDevice mCachedDevice;
    private List<CachedBluetoothDevice> mLeAudioDevices;
    private List<CachedBluetoothDevice> mAllOfCachedDevices;
    @VisibleForTesting
    Handler mHandler = new Handler(Looper.getMainLooper());
    @VisibleForTesting
@@ -129,13 +127,9 @@ public class LeAudioBluetoothDetailsHeaderController extends BasePreferenceContr
            return;
        }
        mIsRegisterCallback = true;
        if (mLeAudioDevices != null && !mLeAudioDevices.isEmpty()) {
            for (CachedBluetoothDevice item : mLeAudioDevices) {
        for (CachedBluetoothDevice item : mAllOfCachedDevices) {
            item.registerCallback(this);
        }
        } else {
            mCachedDevice.registerCallback(this);
        }
        refresh();
    }

@@ -144,13 +138,10 @@ public class LeAudioBluetoothDetailsHeaderController extends BasePreferenceContr
        if (!mIsRegisterCallback) {
            return;
        }
        if (mLeAudioDevices != null && !mLeAudioDevices.isEmpty()) {
            for (CachedBluetoothDevice item : mLeAudioDevices) {
        for (CachedBluetoothDevice item : mAllOfCachedDevices) {
            item.unregisterCallback(this);
        }
        } else {
            mCachedDevice.unregisterCallback(this);
        }

        mIsRegisterCallback = false;
    }

@@ -162,8 +153,7 @@ public class LeAudioBluetoothDetailsHeaderController extends BasePreferenceContr
            LocalBluetoothManager bluetoothManager) {
        mCachedDevice = cachedBluetoothDevice;
        mProfileManager = bluetoothManager.getProfileManager();
        mLeAudioDevices = getAllOfLeAudioDevices();

        mAllOfCachedDevices = Utils.getAllOfCachedBluetoothDevices(mContext, mCachedDevice);
    }

    @VisibleForTesting
@@ -234,26 +224,11 @@ public class LeAudioBluetoothDetailsHeaderController extends BasePreferenceContr
        updateBatteryLayout(R.id.bt_battery_right, BluetoothUtils.META_INT_ERROR);
    }

    private List<CachedBluetoothDevice> getAllOfLeAudioDevices() {
        if (mCachedDevice == null) {
            return null;
        }
        List<CachedBluetoothDevice> leAudioDevices = new ArrayList<>();
        leAudioDevices.add(mCachedDevice);
        if (mCachedDevice.getGroupId() != BluetoothCsipSetCoordinator.GROUP_ID_INVALID) {
            for (CachedBluetoothDevice member : mCachedDevice.getMemberDevice()) {
                leAudioDevices.add(member);
            }
        }
        Log.d(TAG, "mLeAudioDevices is " + mLeAudioDevices);
        return leAudioDevices;
    }

    private void updateBatteryLayout() {
        // Init the battery layouts.
        hideAllOfBatteryLayouts();
        LeAudioProfile leAudioProfile = mProfileManager.getLeAudioProfile();
        if (mLeAudioDevices == null || mLeAudioDevices.isEmpty()) {
        if (mAllOfCachedDevices.isEmpty()) {
            Log.e(TAG, "There is no LeAudioProfile.");
            return;
        }
@@ -267,7 +242,7 @@ public class LeAudioBluetoothDetailsHeaderController extends BasePreferenceContr
            return;
        }

        for (CachedBluetoothDevice cachedDevice : mLeAudioDevices) {
        for (CachedBluetoothDevice cachedDevice : mAllOfCachedDevices) {
            int deviceId = leAudioProfile.getAudioLocation(cachedDevice.getDevice());
            Log.d(TAG, "LeAudioDevices:" + cachedDevice.getDevice().getAnonymizedAddress()
                    + ", deviceId:" + deviceId);
@@ -322,7 +297,15 @@ public class LeAudioBluetoothDetailsHeaderController extends BasePreferenceContr

    @Override
    public void onDeviceAttributesChanged() {
        if (mCachedDevice != null) {
        for (CachedBluetoothDevice item : mAllOfCachedDevices) {
            item.unregisterCallback(this);
        }
        mAllOfCachedDevices = Utils.getAllOfCachedBluetoothDevices(mContext, mCachedDevice);
        for (CachedBluetoothDevice item : mAllOfCachedDevices) {
            item.registerCallback(this);
        }

        if (!mAllOfCachedDevices.isEmpty()) {
            refresh();
        }
    }
+47 −0
Original line number Diff line number Diff line
@@ -19,6 +19,7 @@ package com.android.settings.bluetooth;
import static android.os.Process.BLUETOOTH_UID;

import android.app.settings.SettingsEnums;
import android.bluetooth.BluetoothCsipSetCoordinator;
import android.bluetooth.BluetoothDevice;
import android.bluetooth.BluetoothProfile;
import android.content.Context;
@@ -39,9 +40,12 @@ import com.android.settings.R;
import com.android.settings.overlay.FeatureFactory;
import com.android.settingslib.bluetooth.BluetoothUtils;
import com.android.settingslib.bluetooth.BluetoothUtils.ErrorListener;
import com.android.settingslib.bluetooth.CachedBluetoothDevice;
import com.android.settingslib.bluetooth.LocalBluetoothManager;
import com.android.settingslib.bluetooth.LocalBluetoothManager.BluetoothManagerCallback;

import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;

@@ -225,4 +229,47 @@ public final class Utils {
        }
        throw new NameNotFoundException("Could not find main bluetooth package");
    }

    /**
     * Returns all cachedBluetoothDevices with the same groupId.
     * @param cachedBluetoothDevice The main cachedBluetoothDevice.
     * @return all cachedBluetoothDevices with the same groupId.
     */
    public static List<CachedBluetoothDevice> getAllOfCachedBluetoothDevices(Context context,
            CachedBluetoothDevice cachedBluetoothDevice) {
        List<CachedBluetoothDevice> cachedBluetoothDevices = new ArrayList<>();
        if (cachedBluetoothDevice == null) {
            Log.e(TAG, "getAllOfCachedBluetoothDevices: no cachedBluetoothDevice");
            return cachedBluetoothDevices;
        }
        int deviceGroupId = cachedBluetoothDevice.getGroupId();
        if (deviceGroupId == BluetoothCsipSetCoordinator.GROUP_ID_INVALID) {
            cachedBluetoothDevices.add(cachedBluetoothDevice);
            return cachedBluetoothDevices;
        }

        final LocalBluetoothManager localBtMgr = Utils.getLocalBtManager(context);
        if (localBtMgr == null) {
            Log.e(TAG, "getAllOfCachedBluetoothDevices: no LocalBluetoothManager");
            return cachedBluetoothDevices;
        }
        CachedBluetoothDevice mainDevice =
                localBtMgr.getCachedDeviceManager().getCachedDevicesCopy().stream()
                        .filter(cachedDevice -> cachedDevice.getGroupId() == deviceGroupId)
                        .findFirst().orElse(null);
        if (mainDevice == null) {
            Log.e(TAG, "getAllOfCachedBluetoothDevices: groupId = " + deviceGroupId
                    + ", no main device.");
            return cachedBluetoothDevices;
        }
        cachedBluetoothDevice = mainDevice;
        cachedBluetoothDevices.add(cachedBluetoothDevice);
        for (CachedBluetoothDevice member : cachedBluetoothDevice.getMemberDevice()) {
            cachedBluetoothDevices.add(member);
        }
        Log.d(TAG, "getAllOfCachedBluetoothDevices: groupId = " + deviceGroupId
                + " , cachedBluetoothDevice = " + cachedBluetoothDevice
                + " , deviceList = " + cachedBluetoothDevices);
        return cachedBluetoothDevices;
    }
}