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

Commit 226a950a authored by Hugh Chen's avatar Hugh Chen
Browse files

Fix anr when open connected devices

When advanced bluetooth icon not in cache, return basic bluetooth
icon instead of advanved bluetooth icon.

Bug: 187898551
Test: make RunSettingsLibRoboTests
Change-Id: Iea2c7818e895e16e236931bc9d0e8bccae68b4e1
parent 35a18790
Loading
Loading
Loading
Loading
+6 −3
Original line number Diff line number Diff line
@@ -1222,19 +1222,22 @@ public class CachedBluetoothDevice implements Comparable<CachedBluetoothDevice>
     */
    public Pair<Drawable, String> getDrawableWithDescription() {
        Uri uri = BluetoothUtils.getUriMetaData(mDevice, BluetoothDevice.METADATA_MAIN_ICON);
        Pair<Drawable, String> pair = BluetoothUtils.getBtClassDrawableWithDescription(
                mContext, this);

        if (BluetoothUtils.isAdvancedDetailsHeader(mDevice) && uri != null) {
            BitmapDrawable drawable = mDrawableCache.get(uri.toString());
            if (drawable != null) {
                Resources resources = mContext.getResources();
                return new Pair<>(new AdaptiveOutlineDrawable(
                        resources, drawable.getBitmap()),
                        BluetoothUtils.getBtClassDrawableWithDescription(mContext, this).second);
                        resources, drawable.getBitmap()), pair.second);
            }

            refresh();
        }

        return BluetoothUtils.getBtRainbowDrawableWithDescription(mContext, this);
        return new Pair<>(BluetoothUtils.buildBtRainbowDrawable(
                        mContext, pair.first, getAddress().hashCode()), pair.second);
    }

    void releaseLruCache() {
+6 −0
Original line number Diff line number Diff line
@@ -31,7 +31,9 @@ import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice;
import android.bluetooth.BluetoothProfile;
import android.content.Context;
import android.graphics.drawable.BitmapDrawable;
import android.media.AudioManager;
import android.util.LruCache;

import com.android.settingslib.R;
import com.android.settingslib.testutils.shadow.ShadowBluetoothAdapter;
@@ -961,6 +963,10 @@ public class CachedBluetoothDeviceTest {

    @Test
    public void getDrawableWithDescription_isAdvancedDevice_returnAdvancedIcon() {
        LruCache lruCache = mock(LruCache.class);
        mCachedDevice.mDrawableCache = lruCache;
        BitmapDrawable drawable = mock(BitmapDrawable.class);
        when(lruCache.get("fake_uri")).thenReturn(drawable);
        when(mDevice.getMetadata(BluetoothDevice.METADATA_MAIN_ICON))
                .thenReturn("fake_uri".getBytes());
        when(mDevice.getMetadata(BluetoothDevice.METADATA_IS_UNTETHERED_HEADSET))