Merge changes Iebb58ac9,Ie79a59fa into main
* changes:
Do not allow GlanceableHub touch monitor to outlive view.
Improve logging and attribution in TouchMonitor.
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 0898134..76df9c9 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 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 @@
* 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 @@
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 @@
}
} catch (RemoteException e) {
// Handle the exception
- Log.e(TAG, "unregisterSystemGestureExclusionListener: failed", e);
+ mLogger.e("unregisterSystemGestureExclusionListener: failed", e);
}
});
}
@@ -543,6 +540,7 @@
private InputSession mCurrentInputSession;
private final int mDisplayId;
private final IWindowManager mWindowManagerService;
+ private final String mLoggingName;
private Rect mMaxBounds;
@@ -589,7 +587,8 @@
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 2e67277..52cb8d6 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 @@
)
}
+ private fun resetTouchMonitor() {
+ touchMonitor?.apply {
+ destroy()
+ touchMonitor = null
+ }
+ }
+
/** Override for testing. */
@VisibleForTesting
internal fun initView(containerView: View): View {
@@ -297,12 +304,13 @@
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 @@
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 b4a0f23..859f84e 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.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 @@
}
}
+ @Test
+ fun disposeView_destroysTouchMonitor() {
+ clearInvocations(touchMonitor)
+
+ underTest.disposeView()
+
+ verify(touchMonitor).destroy()
+ }
+
private fun initAndAttachContainerView() {
val mockInsets =
mock<WindowInsets> {