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

Commit c17d3298 authored by Jason Monk's avatar Jason Monk
Browse files

Fix rare crash in bt detail panel

Since bond state is gotten directly from the bluetooth stack it is
possible it could change, and therefore change the number of devices
if pairing happens while the detail panel is updating.  Fix this by
just dropping them into a list.

Bug: 26258223
Change-Id: I7703520391798fd7c9ab097b0057b7b43b877212
parent 650e3b70
Loading
Loading
Loading
Loading
+4 −15
Original line number Diff line number Diff line
@@ -34,6 +34,7 @@ import com.android.systemui.qs.QSDetailItems.Item;
import com.android.systemui.qs.QSTile;
import com.android.systemui.statusbar.policy.BluetoothController;

import java.util.ArrayList;
import java.util.Collection;

/** Quick settings tile: Bluetooth **/
@@ -217,11 +218,9 @@ public class BluetoothTile extends QSTile<QSTile.BooleanState> {

        private void updateItems() {
            if (mItems == null) return;
            Item[] items = null;
            ArrayList<Item> items = new ArrayList<Item>();
            final Collection<CachedBluetoothDevice> devices = mController.getDevices();
            if (devices != null) {
                items = new Item[getBondedCount(devices)];
                int i = 0;
                for (CachedBluetoothDevice device : devices) {
                    if (device.getBondState() == BluetoothDevice.BOND_NONE) continue;
                    final Item item = new Item();
@@ -237,20 +236,10 @@ public class BluetoothTile extends QSTile<QSTile.BooleanState> {
                        item.line2 = mContext.getString(R.string.quick_settings_connecting);
                    }
                    item.tag = device;
                    items[i++] = item;
                    items.add(item);
                }
            }
            mItems.setItems(items);
        }

        private int getBondedCount(Collection<CachedBluetoothDevice> devices) {
            int ct = 0;
            for (CachedBluetoothDevice device : devices) {
                if (device.getBondState() != BluetoothDevice.BOND_NONE) {
                    ct++;
                }
            }
            return ct;
            mItems.setItems(items.toArray(new Item[items.size()]));
        }

        @Override