diff options
| author | 2024-11-14 15:42:19 +0000 | |
|---|---|---|
| committer | 2024-11-14 15:42:19 +0000 | |
| commit | fb060b286241a942ba51631e53e94f14f394ba5d (patch) | |
| tree | 2c6840814ee3faa7949bc1e3dbb2454917cc2067 | |
| parent | 808e7212e30a388187d68e065808bc61c692a0fc (diff) | |
| parent | 8288bc22398ce5503eb6415b1e09f6474ce4a5b3 (diff) | |
Merge "TintController: add lock to fix NPE problem." into main
| -rw-r--r-- | services/core/java/com/android/server/display/color/TintController.java | 39 |
1 files changed, 29 insertions, 10 deletions
diff --git a/services/core/java/com/android/server/display/color/TintController.java b/services/core/java/com/android/server/display/color/TintController.java index 716661dd6c3c..68dc80fa51c8 100644 --- a/services/core/java/com/android/server/display/color/TintController.java +++ b/services/core/java/com/android/server/display/color/TintController.java @@ -19,6 +19,7 @@ package com.android.server.display.color; import android.animation.ValueAnimator; import android.content.Context; import android.util.Slog; +import com.android.internal.annotations.GuardedBy; import java.io.PrintWriter; @@ -29,23 +30,33 @@ abstract class TintController { */ private static final long TRANSITION_DURATION = 3000L; + private final Object mLock = new Object(); + + @GuardedBy("mLock") private ValueAnimator mAnimator; + @GuardedBy("mLock") private Boolean mIsActivated; public ValueAnimator getAnimator() { - return mAnimator; + synchronized (mLock) { + return mAnimator; + } } public void setAnimator(ValueAnimator animator) { - mAnimator = animator; + synchronized (mLock) { + mAnimator = animator; + } } /** * Cancel the animator if it's still running. */ public void cancelAnimator() { - if (mAnimator != null) { - mAnimator.cancel(); + synchronized (mLock) { + if (mAnimator != null) { + mAnimator.cancel(); + } } } @@ -53,22 +64,30 @@ abstract class TintController { * End the animator if it's still running, jumping to the end state. */ public void endAnimator() { - if (mAnimator != null) { - mAnimator.end(); - mAnimator = null; + synchronized (mLock) { + if (mAnimator != null) { + mAnimator.end(); + mAnimator = null; + } } } public void setActivated(Boolean isActivated) { - mIsActivated = isActivated; + synchronized (mLock) { + mIsActivated = isActivated; + } } public boolean isActivated() { - return mIsActivated != null && mIsActivated; + synchronized (mLock) { + return mIsActivated != null && mIsActivated; + } } public boolean isActivatedStateNotSet() { - return mIsActivated == null; + synchronized (mLock) { + return mIsActivated == null; + } } public long getTransitionDurationMilliseconds() { |