diff options
3 files changed, 33 insertions, 14 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/ambient/touch/TouchMonitor.java b/packages/SystemUI/src/com/android/systemui/ambient/touch/TouchMonitor.java index 0898134a3db8..76df9c96c801 100644 --- a/packages/SystemUI/src/com/android/systemui/ambient/touch/TouchMonitor.java +++ b/packages/SystemUI/src/com/android/systemui/ambient/touch/TouchMonitor.java @@ -25,7 +25,6 @@ import static com.android.systemui.util.kotlin.JavaAdapterKt.collectFlow; import android.graphics.Rect; import android.graphics.Region; import android.os.RemoteException; -import android.util.Log; import android.view.GestureDetector; import android.view.ISystemGestureExclusionListener; import android.view.IWindowManager; @@ -76,10 +75,9 @@ import javax.inject.Named; * touches are consumed. */ public class TouchMonitor { + private final Logger mLogger; // This executor is used to protect {@code mActiveTouchSessions} from being modified // concurrently. Any operation that adds or removes values should use this executor. - public String TAG = "DreamOverlayTouchMonitor"; - private final Logger mLogger; private final Executor mMainExecutor; private final Executor mBackgroundExecutor; @@ -298,13 +296,12 @@ public class TouchMonitor { mWindowManagerService.registerSystemGestureExclusionListener( mGestureExclusionListener, mDisplayId); } catch (RemoteException e) { - // Handle the exception - Log.e(TAG, "Failed to register gesture exclusion listener", e); + mLogger.e("Failed to register gesture exclusion listener", e); } }); } mCurrentInputSession = mInputSessionFactory.create( - "dreamOverlay", + mLoggingName, mInputEventListener, mOnGestureListener, true) @@ -326,7 +323,7 @@ public class TouchMonitor { } } catch (RemoteException e) { // Handle the exception - Log.e(TAG, "unregisterSystemGestureExclusionListener: failed", e); + mLogger.e("unregisterSystemGestureExclusionListener: failed", e); } }); } @@ -543,6 +540,7 @@ public class TouchMonitor { private InputSession mCurrentInputSession; private final int mDisplayId; private final IWindowManager mWindowManagerService; + private final String mLoggingName; private Rect mMaxBounds; @@ -589,7 +587,8 @@ public class TouchMonitor { mDisplayHelper = displayHelper; mWindowManagerService = windowManagerService; mConfigurationInteractor = configurationInteractor; - mLogger = new Logger(logBuffer, loggingName + ":TouchMonitor"); + mLoggingName = loggingName + ":TouchMonitor"; + mLogger = new Logger(logBuffer, mLoggingName); } /** diff --git a/packages/SystemUI/src/com/android/systemui/shade/GlanceableHubContainerController.kt b/packages/SystemUI/src/com/android/systemui/shade/GlanceableHubContainerController.kt index 2e67277d8327..52cb8d6df7e1 100644 --- a/packages/SystemUI/src/com/android/systemui/shade/GlanceableHubContainerController.kt +++ b/packages/SystemUI/src/com/android/systemui/shade/GlanceableHubContainerController.kt @@ -289,6 +289,13 @@ constructor( ) } + private fun resetTouchMonitor() { + touchMonitor?.apply { + destroy() + touchMonitor = null + } + } + /** Override for testing. */ @VisibleForTesting internal fun initView(containerView: View): View { @@ -297,12 +304,13 @@ constructor( throw RuntimeException("Communal view has already been initialized") } - if (touchMonitor == null) { - touchMonitor = - ambientTouchComponentFactory.create(this, HashSet(), TAG).getTouchMonitor().apply { - init() - } - } + resetTouchMonitor() + + touchMonitor = + ambientTouchComponentFactory.create(this, HashSet(), TAG).getTouchMonitor().apply { + init() + } + lifecycleRegistry.addObserver(touchLifecycleLogger) lifecycleRegistry.currentState = Lifecycle.State.CREATED @@ -475,6 +483,8 @@ constructor( lifecycleRegistry.removeObserver(touchLifecycleLogger) + resetTouchMonitor() + logger.d("Hub container disposed") } diff --git a/packages/SystemUI/tests/src/com/android/systemui/shade/GlanceableHubContainerControllerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/shade/GlanceableHubContainerControllerTest.kt index b4a0f23be9b1..859f84edda39 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/shade/GlanceableHubContainerControllerTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/shade/GlanceableHubContainerControllerTest.kt @@ -76,6 +76,7 @@ import org.junit.Before import org.junit.Test import org.junit.runner.RunWith import org.mockito.kotlin.any +import org.mockito.kotlin.clearInvocations import org.mockito.kotlin.doReturn import org.mockito.kotlin.mock import org.mockito.kotlin.never @@ -717,6 +718,15 @@ class GlanceableHubContainerControllerTest : SysuiTestCase() { } } + @Test + fun disposeView_destroysTouchMonitor() { + clearInvocations(touchMonitor) + + underTest.disposeView() + + verify(touchMonitor).destroy() + } + private fun initAndAttachContainerView() { val mockInsets = mock<WindowInsets> { |