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

Commit 5081110e authored by Fabián Kozynski's avatar Fabián Kozynski
Browse files

Properly dispose of JavaAdapter collector

This allows to use a mock view in the test that will is not
attached/dettached and prevent leaks.

Test: atest com.android.systemui.qs
Fixes: 378522890
Flag: com.android.systemui.scene_container
Change-Id: Id1716a912a76bc9161d65faf9d0161efccf19b3c
parent b8581404
Loading
Loading
Loading
Loading
+6 −6
Original line number Diff line number Diff line
@@ -21,9 +21,6 @@ import static com.android.systemui.flags.SceneContainerFlagParameterizationKt.pa

import static com.google.common.truth.Truth.assertThat;

import static kotlinx.coroutines.flow.FlowKt.asStateFlow;
import static kotlinx.coroutines.flow.StateFlowKt.MutableStateFlow;

import static org.junit.Assert.assertEquals;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyBoolean;
@@ -39,6 +36,9 @@ import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;

import static kotlinx.coroutines.flow.FlowKt.asStateFlow;
import static kotlinx.coroutines.flow.StateFlowKt.MutableStateFlow;

import android.content.res.Configuration;
import android.content.res.Resources;
import android.platform.test.annotations.DisableFlags;
@@ -70,9 +70,6 @@ import com.android.systemui.scene.shared.flag.SceneContainerFlag;
import com.android.systemui.statusbar.policy.ResourcesSplitShadeStateController;
import com.android.systemui.util.animation.DisappearParameters;

import kotlinx.coroutines.flow.MutableStateFlow;
import kotlinx.coroutines.flow.StateFlow;

import org.junit.After;
import org.junit.Before;
import org.junit.Rule;
@@ -88,6 +85,8 @@ import java.util.List;

import javax.inject.Provider;

import kotlinx.coroutines.flow.MutableStateFlow;
import kotlinx.coroutines.flow.StateFlow;
import platform.test.runner.parameterized.ParameterizedAndroidJunit4;
import platform.test.runner.parameterized.Parameters;

@@ -232,6 +231,7 @@ public class QSPanelControllerBaseTest extends SysuiTestCase {

    @After
    public void tearDown() {
        mController.destroy();
        disallowTestableLooperAsMainThread();
    }

+26 −24
Original line number Diff line number Diff line
package com.android.systemui.qs

import android.content.res.Configuration
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
import android.testing.TestableResources
import android.view.ContextThemeWrapper
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
import com.android.internal.logging.MetricsLogger
import com.android.internal.logging.UiEventLogger
import com.android.systemui.SysuiTestCase
@@ -37,8 +37,8 @@ import org.mockito.Mockito.any
import org.mockito.Mockito.never
import org.mockito.Mockito.reset
import org.mockito.Mockito.verify
import org.mockito.MockitoAnnotations
import org.mockito.Mockito.`when` as whenever
import org.mockito.MockitoAnnotations

@SmallTest
@RunWith(AndroidJUnit4::class)
@@ -88,7 +88,8 @@ class QSPanelControllerTest : SysuiTestCase() {
            whenever(qsPanel.isListening).thenReturn(it.getArgument(0))
        }

        controller = QSPanelController(
        controller =
            QSPanelController(
                qsPanel,
                tunerService,
                qsHost,
@@ -112,6 +113,7 @@ class QSPanelControllerTest : SysuiTestCase() {

    @After
    fun tearDown() {
        controller.destroy()
        reset(mediaHost)
    }

+4 −3
Original line number Diff line number Diff line
@@ -34,6 +34,7 @@ import com.android.systemui.qs.logging.QSLogger
import com.android.systemui.res.R
import com.android.systemui.statusbar.policy.ResourcesSplitShadeStateController
import com.android.systemui.util.leak.RotationUtils
import javax.inject.Provider
import org.junit.After
import org.junit.Before
import org.junit.Test
@@ -45,9 +46,8 @@ import org.mockito.Mockito.any
import org.mockito.Mockito.reset
import org.mockito.Mockito.times
import org.mockito.Mockito.verify
import org.mockito.MockitoAnnotations
import javax.inject.Provider
import org.mockito.Mockito.`when` as whenever
import org.mockito.MockitoAnnotations

@SmallTest
@RunWith(AndroidJUnit4::class)
@@ -108,6 +108,7 @@ class QuickQSPanelControllerTest : SysuiTestCase() {
    @After
    fun tearDown() {
        controller.onViewDetached()
        controller.destroy()
    }

    @Test
@@ -184,7 +185,7 @@ class QuickQSPanelControllerTest : SysuiTestCase() {
            dumpManager,
            ResourcesSplitShadeStateController(),
            longPressEffectProvider,
            mediaCarouselInteractor
            mediaCarouselInteractor,
        ) {

        private var rotation = RotationUtils.ROTATION_NONE
+7 −1
Original line number Diff line number Diff line
@@ -50,6 +50,7 @@ import com.android.systemui.util.kotlin.JavaAdapterKt;
import kotlin.Unit;
import kotlin.jvm.functions.Function1;

import kotlinx.coroutines.DisposableHandle;
import kotlinx.coroutines.flow.StateFlow;

import java.io.PrintWriter;
@@ -107,6 +108,8 @@ public abstract class QSPanelControllerBase<T extends QSPanel> extends ViewContr
        setLayoutForMediaInScene();
    };

    private DisposableHandle mJavaAdapterDisposableHandle;

    private boolean mLastListening;

    @VisibleForTesting
@@ -221,6 +224,9 @@ public abstract class QSPanelControllerBase<T extends QSPanel> extends ViewContr
            mView.removeTile(record);
        }
        mRecords.clear();
        if (mJavaAdapterDisposableHandle != null) {
            mJavaAdapterDisposableHandle.dispose();
        }
    }

    @Override
@@ -255,7 +261,7 @@ public abstract class QSPanelControllerBase<T extends QSPanel> extends ViewContr
    }

    private void registerForMediaInteractorChanges() {
        JavaAdapterKt.collectFlow(
        mJavaAdapterDisposableHandle = JavaAdapterKt.collectFlow(
                mView,
                getMediaVisibleFlow(),
                mMediaOrRecommendationVisibleConsumer