diff --git a/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBarTransitions.java b/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBarTransitions.java index a4de9ffbfa514..20b50325f65f2 100644 --- a/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBarTransitions.java +++ b/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBarTransitions.java @@ -36,6 +36,7 @@ import com.android.systemui.statusbar.phone.BarTransitions; import com.android.systemui.statusbar.phone.LightBarTransitionsController; import java.io.PrintWriter; +import java.lang.ref.WeakReference; import java.util.ArrayList; import java.util.List; @@ -76,15 +77,27 @@ public final class NavigationBarTransitions extends BarTransitions implements private List mDarkIntensityListeners; private final Handler mHandler = Handler.getMain(); - private final IWallpaperVisibilityListener mWallpaperVisibilityListener = - new IWallpaperVisibilityListener.Stub() { + + static final class WallpaperVisibilityListener extends IWallpaperVisibilityListener.Stub { + private final WeakReference mSelf; + + WallpaperVisibilityListener(NavigationBarTransitions self) { + mSelf = new WeakReference<>(self); + } + @Override public void onWallpaperVisibilityChanged(boolean newVisibility, - int displayId) throws RemoteException { - mWallpaperVisible = newVisibility; - mHandler.post(() -> applyLightsOut(true, false)); + int displayId) throws RemoteException { + NavigationBarTransitions self = mSelf.get(); + if (self == null) { + return; + } + self.mWallpaperVisible = newVisibility; + self.mHandler.post(() -> self.applyLightsOut(true, false)); } - }; + } + + private final IWallpaperVisibilityListener mWallpaperVisibilityListener; @Inject public NavigationBarTransitions( @@ -93,6 +106,7 @@ public final class NavigationBarTransitions extends BarTransitions implements LightBarTransitionsController.Factory lightBarTransitionsControllerFactory, DisplayTracker displayTracker) { super(view, R.drawable.nav_background); + mView = view; mWindowManagerService = windowManagerService; mLightTransitionsController = lightBarTransitionsControllerFactory.create(this); @@ -101,6 +115,7 @@ public final class NavigationBarTransitions extends BarTransitions implements .getBoolean(R.bool.config_navigation_bar_enable_auto_dim_no_visible_wallpaper); mDarkIntensityListeners = new ArrayList(); + mWallpaperVisibilityListener = new WallpaperVisibilityListener(this); try { mWallpaperVisible = mWindowManagerService.registerWallpaperVisibilityListener( mWallpaperVisibilityListener, mDisplayTracker.getDefaultDisplayId());