diff options
| author | 2024-12-23 10:49:32 +0800 | |
|---|---|---|
| committer | 2024-12-29 01:08:42 -0800 | |
| commit | bf82514b27043fa84665a223b995294210b3e75c (patch) | |
| tree | b1b130c1449a0aa78f61aa41452bd8fdd1ce224e | |
| parent | a17154f1d134e5a84d334104ed5aebbca91b34c4 (diff) | |
fix the NPE problem due to add null InsetsControlTarget object to map .
We may add null InsetsControlTarget object to map when call the onPostLayout method in InsetsSourceProvider java file.
Test: OEM monkey test
Flag: EXEMPT bugfix
Bug: 385565551
Change-Id: I466df1d0229b2f71fbed30e88ec7edd5d44370fe
Merged-In: I8be582c42c6ba7524a3d6edc0a36aa4856e10e71
3 files changed, 4 insertions, 3 deletions
diff --git a/services/core/java/com/android/server/wm/ImeInsetsSourceProvider.java b/services/core/java/com/android/server/wm/ImeInsetsSourceProvider.java index e178203fed92..8763c8f18f70 100644 --- a/services/core/java/com/android/server/wm/ImeInsetsSourceProvider.java +++ b/services/core/java/com/android/server/wm/ImeInsetsSourceProvider.java @@ -100,7 +100,8 @@ final class ImeInsetsSourceProvider extends InsetsSourceProvider { // isLeashReadyForDispatching (used to dispatch the leash of the control) is // depending on mGivenInsetsReady. Therefore, triggering notifyControlChanged here // again, so that the control with leash can be eventually dispatched - if (!mGivenInsetsReady && mServerVisible && !givenInsetsPending) { + if (!mGivenInsetsReady && mServerVisible && !givenInsetsPending + && mControlTarget != null) { mGivenInsetsReady = true; ImeTracker.forLogging().onProgress(mStatsToken, ImeTracker.PHASE_WM_POST_LAYOUT_NOTIFY_CONTROLS_CHANGED); diff --git a/services/core/java/com/android/server/wm/InsetsSourceProvider.java b/services/core/java/com/android/server/wm/InsetsSourceProvider.java index d3cae4c7b940..8d7447c5182f 100644 --- a/services/core/java/com/android/server/wm/InsetsSourceProvider.java +++ b/services/core/java/com/android/server/wm/InsetsSourceProvider.java @@ -379,7 +379,7 @@ class InsetsSourceProvider { final boolean serverVisibleChanged = mServerVisible != isServerVisible; setServerVisible(isServerVisible); final boolean positionChanged = updateInsetsControlPosition(windowState); - if (mControl != null && !positionChanged + if (mControl != null && mControlTarget != null && !positionChanged // The insets hint would be updated if the position is changed. Here updates it for // the possible change of the bounds or the server visibility. && (updateInsetsHint() diff --git a/services/core/java/com/android/server/wm/InsetsStateController.java b/services/core/java/com/android/server/wm/InsetsStateController.java index 3e39a45fa5f3..6ae23410864e 100644 --- a/services/core/java/com/android/server/wm/InsetsStateController.java +++ b/services/core/java/com/android/server/wm/InsetsStateController.java @@ -373,7 +373,7 @@ class InsetsStateController { array.add(provider); } - void notifyControlChanged(InsetsControlTarget target, InsetsSourceProvider provider) { + void notifyControlChanged(@NonNull InsetsControlTarget target, InsetsSourceProvider provider) { addToPendingControlMaps(target, provider); notifyPendingInsetsControlChanged(); |