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

Commit 50120605 authored by Fabian Kozynski's avatar Fabian Kozynski
Browse files

Prevent Kotlin NPE

Adds tile spec before it's destroyed in TileQueryHelper
so the log won't have a nulltileSpec.

Fixes: 154700717
Test: atest TileQueryHelperTest
Change-Id: Ifc82937226b8bbed192241d5c07d520ba5d6a70e
parent edaedb06
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -118,6 +118,7 @@ public class TileQueryHelper {
            if (tile == null) {
                continue;
            } else if (!tile.isAvailable()) {
                tile.setTileSpec(spec);
                tile.destroy();
                continue;
            }
+25 −0
Original line number Diff line number Diff line
@@ -23,6 +23,7 @@ import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertThat;
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.any;
import static org.mockito.Mockito.atLeastOnce;
import static org.mockito.Mockito.doAnswer;
@@ -49,6 +50,10 @@ import com.android.systemui.R;
import com.android.systemui.SysuiTestCase;
import com.android.systemui.plugins.qs.QSTile;
import com.android.systemui.qs.QSTileHost;
import com.android.systemui.qs.logging.QSLogger;
import com.android.systemui.qs.tiles.HotspotTile;
import com.android.systemui.statusbar.policy.DataSaverController;
import com.android.systemui.statusbar.policy.HotspotController;
import com.android.systemui.util.concurrency.FakeExecutor;
import com.android.systemui.util.time.FakeSystemClock;

@@ -94,6 +99,8 @@ public class TileQueryHelperTest extends SysuiTestCase {
    private QSTileHost mQSTileHost;
    @Mock
    private PackageManager mPackageManager;
    @Mock
    private QSLogger mQSLogger;
    @Captor
    private ArgumentCaptor<List<TileQueryHelper.TileInfo>> mCaptor;

@@ -106,6 +113,7 @@ public class TileQueryHelperTest extends SysuiTestCase {
    public void setup() {
        MockitoAnnotations.initMocks(this);
        mContext.setMockPackageManager(mPackageManager);
        when(mQSTileHost.getQSLogger()).thenReturn(mQSLogger);

        mState = new QSTile.State();
        doAnswer(invocation -> {
@@ -269,4 +277,21 @@ public class TileQueryHelperTest extends SysuiTestCase {
                STOCK_TILES);
        mTileQueryHelper.queryTiles(mQSTileHost);
    }

    @Test
    public void testQueryTiles_notAvailableDestroyed_isNotNullSpec() {
        HotspotController mockHC = mock(HotspotController.class);
        DataSaverController mockDSC = mock(DataSaverController.class);
        when(mockHC.isHotspotSupported()).thenReturn(false);
        HotspotTile t = new HotspotTile(mQSTileHost, mockHC, mockDSC);
        when(mQSTileHost.createTile("hotspot")).thenReturn(t);

        mContext.getOrCreateTestableResources().addOverride(R.string.quick_settings_tiles_stock,
                "hotspot");

        mTileQueryHelper.queryTiles(mQSTileHost);

        FakeExecutor.exhaustExecutors(mMainExecutor, mBgExecutor);
        verify(mQSLogger).logTileDestroyed(eq("hotspot"), anyString());
    }
}