summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--packages/SystemUI/src/com/android/systemui/navigationbar/NavBarHelper.java39
-rw-r--r--packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBar.java7
-rw-r--r--packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBarTransitions.java48
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/navigationbar/NavBarHelperTest.java4
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/navigationbar/NavigationBarTransitionsTest.java5
5 files changed, 55 insertions, 48 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/navigationbar/NavBarHelper.java b/packages/SystemUI/src/com/android/systemui/navigationbar/NavBarHelper.java
index 24098122aec6..59d6bfae5368 100644
--- a/packages/SystemUI/src/com/android/systemui/navigationbar/NavBarHelper.java
+++ b/packages/SystemUI/src/com/android/systemui/navigationbar/NavBarHelper.java
@@ -47,6 +47,7 @@ import android.provider.Settings;
import android.provider.Settings.Secure;
import android.util.Log;
import android.view.IRotationWatcher;
+import android.view.IWallpaperVisibilityListener;
import android.view.IWindowManager;
import android.view.View;
import android.view.WindowInsets;
@@ -119,6 +120,7 @@ public final class NavBarHelper implements
private int mA11yButtonState;
private int mRotationWatcherRotation;
private boolean mTogglingNavbarTaskbar;
+ private boolean mWallpaperVisible;
// Attributes used in NavBarHelper.CurrentSysuiState
private int mWindowStateDisplayId;
@@ -132,6 +134,19 @@ public final class NavBarHelper implements
}
};
+ // Listens for changes to the wallpaper visibility
+ private final IWallpaperVisibilityListener mWallpaperVisibilityListener =
+ new IWallpaperVisibilityListener.Stub() {
+ @Override
+ public void onWallpaperVisibilityChanged(boolean visible,
+ int displayId) throws RemoteException {
+ mHandler.post(() -> {
+ mWallpaperVisible = visible;
+ dispatchWallpaperVisibilityChanged(visible, displayId);
+ });
+ }
+ };
+
// Listens for changes to display rotation
private final IRotationWatcher mRotationWatcher = new IRotationWatcher.Stub() {
@Override
@@ -219,6 +234,14 @@ public final class NavBarHelper implements
} catch (Exception e) {
Log.w(TAG, "Failed to register rotation watcher", e);
}
+
+ // Setup wallpaper visibility listener
+ try {
+ mWallpaperVisible = mWm.registerWallpaperVisibilityListener(
+ mWallpaperVisibilityListener, mDefaultDisplayId);
+ } catch (Exception e) {
+ Log.w(TAG, "Failed to register wallpaper visibility listener", e);
+ }
}
/**
@@ -239,6 +262,14 @@ public final class NavBarHelper implements
} catch (Exception e) {
Log.w(TAG, "Failed to unregister rotation watcher", e);
}
+
+ // Clean up wallpaper visibility listener
+ try {
+ mWm.unregisterWallpaperVisibilityListener(mWallpaperVisibilityListener,
+ mDefaultDisplayId);
+ } catch (Exception e) {
+ Log.w(TAG, "Failed to register wallpaper visibility listener", e);
+ }
}
/**
@@ -258,6 +289,7 @@ public final class NavBarHelper implements
listener.updateAccessibilityServicesState();
listener.updateAssistantAvailable(mAssistantAvailable, mLongPressHomeEnabled);
}
+ listener.updateWallpaperVisibility(mWallpaperVisible, mDefaultDisplayId);
listener.updateRotationWatcherState(mRotationWatcherRotation);
}
@@ -435,6 +467,12 @@ public final class NavBarHelper implements
mWindowState = state;
}
+ private void dispatchWallpaperVisibilityChanged(boolean visible, int displayId) {
+ for (NavbarTaskbarStateUpdater listener : mStateListeners) {
+ listener.updateWallpaperVisibility(visible, displayId);
+ }
+ }
+
private void dispatchRotationChanged(int rotation) {
for (NavbarTaskbarStateUpdater listener : mStateListeners) {
listener.updateRotationWatcherState(rotation);
@@ -452,6 +490,7 @@ public final class NavBarHelper implements
public interface NavbarTaskbarStateUpdater {
void updateAccessibilityServicesState();
void updateAssistantAvailable(boolean available, boolean longPressHomeEnabled);
+ default void updateWallpaperVisibility(boolean visible, int displayId) {}
default void updateRotationWatcherState(int rotation) {}
}
diff --git a/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBar.java b/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBar.java
index db545099f8ac..ab7581d2d10d 100644
--- a/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBar.java
+++ b/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBar.java
@@ -164,7 +164,6 @@ import java.util.Locale;
import java.util.Map;
import java.util.Optional;
import java.util.concurrent.Executor;
-import java.util.function.Consumer;
import javax.inject.Inject;
@@ -350,6 +349,12 @@ public class NavigationBar extends ViewController<NavigationBarView> implements
mLongPressHomeEnabled = longPressHomeEnabled;
updateAssistantEntrypoints(available, longPressHomeEnabled);
}
+
+ @Override
+ public void updateWallpaperVisibility(boolean visible, int displayId) {
+ mNavigationBarTransitions.setWallpaperVisibility(visible);
+ }
+
@Override
public void updateRotationWatcherState(int rotation) {
if (mIsOnDefaultDisplay && mView != null) {
diff --git a/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBarTransitions.java b/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBarTransitions.java
index 20b50325f65f..1d73bc205dc4 100644
--- a/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBarTransitions.java
+++ b/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBarTransitions.java
@@ -21,11 +21,7 @@ import static android.view.WindowManagerPolicyConstants.NAV_BAR_MODE_3BUTTON;
import static com.android.systemui.util.Utils.isGesturalModeOnDefaultDisplay;
import android.graphics.Rect;
-import android.os.Handler;
-import android.os.RemoteException;
import android.util.SparseArray;
-import android.view.IWallpaperVisibilityListener;
-import android.view.IWindowManager;
import android.view.View;
import com.android.systemui.R;
@@ -36,7 +32,6 @@ 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;
@@ -63,8 +58,6 @@ public final class NavigationBarTransitions extends BarTransitions implements
}
private final NavigationBarView mView;
- @org.jetbrains.annotations.NotNull
- private final IWindowManager mWindowManagerService;
private final LightBarTransitionsController mLightTransitionsController;
private final DisplayTracker mDisplayTracker;
private final boolean mAllowAutoDimWallpaperNotVisible;
@@ -76,51 +69,20 @@ public final class NavigationBarTransitions extends BarTransitions implements
private int mNavBarMode = NAV_BAR_MODE_3BUTTON;
private List<DarkIntensityListener> mDarkIntensityListeners;
- private final Handler mHandler = Handler.getMain();
-
- static final class WallpaperVisibilityListener extends IWallpaperVisibilityListener.Stub {
- private final WeakReference<NavigationBarTransitions> mSelf;
-
- WallpaperVisibilityListener(NavigationBarTransitions self) {
- mSelf = new WeakReference<>(self);
- }
-
- @Override
- public void onWallpaperVisibilityChanged(boolean newVisibility,
- 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(
NavigationBarView view,
- IWindowManager windowManagerService,
LightBarTransitionsController.Factory lightBarTransitionsControllerFactory,
DisplayTracker displayTracker) {
super(view, R.drawable.nav_background);
mView = view;
- mWindowManagerService = windowManagerService;
mLightTransitionsController = lightBarTransitionsControllerFactory.create(this);
mDisplayTracker = displayTracker;
mAllowAutoDimWallpaperNotVisible = view.getContext().getResources()
.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());
- } catch (RemoteException e) {
- }
mView.addOnLayoutChangeListener(
(v, left, top, right, bottom, oldLeft, oldTop, oldRight, oldBottom) -> {
View currentView = mView.getCurrentView();
@@ -142,14 +104,14 @@ public final class NavigationBarTransitions extends BarTransitions implements
@Override
public void destroy() {
- try {
- mWindowManagerService.unregisterWallpaperVisibilityListener(mWallpaperVisibilityListener,
- mDisplayTracker.getDefaultDisplayId());
- } catch (RemoteException e) {
- }
mLightTransitionsController.destroy();
}
+ void setWallpaperVisibility(boolean visible) {
+ mWallpaperVisible = visible;
+ applyLightsOut(true, false);
+ }
+
@Override
public void setAutoDim(boolean autoDim) {
// Ensure we aren't in gestural nav if we are triggering auto dim
diff --git a/packages/SystemUI/tests/src/com/android/systemui/navigationbar/NavBarHelperTest.java b/packages/SystemUI/tests/src/com/android/systemui/navigationbar/NavBarHelperTest.java
index 1076f9f1a947..56894d7903dc 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/navigationbar/NavBarHelperTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/navigationbar/NavBarHelperTest.java
@@ -150,6 +150,7 @@ public class NavBarHelperTest extends SysuiTestCase {
mNavBarHelper);
verify(mAssistManager, times(1)).getAssistInfoForUser(anyInt());
verify(mWm, times(1)).watchRotation(any(), anyInt());
+ verify(mWm, times(1)).registerWallpaperVisibilityListener(any(), anyInt());
}
@Test
@@ -161,6 +162,7 @@ public class NavBarHelperTest extends SysuiTestCase {
verify(mAccessibilityManager, times(1)).removeAccessibilityServicesStateChangeListener(
mNavBarHelper);
verify(mWm, times(1)).removeRotationWatcher(any());
+ verify(mWm, times(1)).unregisterWallpaperVisibilityListener(any(), anyInt());
}
@Test
@@ -183,6 +185,8 @@ public class NavBarHelperTest extends SysuiTestCase {
.updateAssistantAvailable(anyBoolean(), anyBoolean());
verify(mNavbarTaskbarStateUpdater, times(1))
.updateRotationWatcherState(anyInt());
+ verify(mNavbarTaskbarStateUpdater, times(1))
+ .updateWallpaperVisibility(anyBoolean(), anyInt());
}
@Test
diff --git a/packages/SystemUI/tests/src/com/android/systemui/navigationbar/NavigationBarTransitionsTest.java b/packages/SystemUI/tests/src/com/android/systemui/navigationbar/NavigationBarTransitionsTest.java
index 5270737b7f3e..54aec3014f95 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/navigationbar/NavigationBarTransitionsTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/navigationbar/NavigationBarTransitionsTest.java
@@ -27,7 +27,6 @@ import static org.mockito.Mockito.when;
import android.content.Context;
import android.testing.AndroidTestingRunner;
import android.testing.TestableLooper.RunWithLooper;
-import android.view.IWindowManager;
import androidx.test.filters.SmallTest;
@@ -60,8 +59,6 @@ public class NavigationBarTransitionsTest extends SysuiTestCase {
EdgeBackGestureHandler.Factory mEdgeBackGestureHandlerFactory;
@Mock
EdgeBackGestureHandler mEdgeBackGestureHandler;
- @Mock
- IWindowManager mIWindowManager;
private NavigationBarTransitions mTransitions;
private final FakeDisplayTracker mDisplayTracker = new FakeDisplayTracker(mContext);
@@ -88,7 +85,7 @@ public class NavigationBarTransitionsTest extends SysuiTestCase {
when(navBar.getCurrentView()).thenReturn(navBar);
when(navBar.findViewById(anyInt())).thenReturn(navBar);
mTransitions = new NavigationBarTransitions(
- navBar, mIWindowManager, mLightBarTransitionsFactory, mDisplayTracker);
+ navBar, mLightBarTransitionsFactory, mDisplayTracker);
}
@Test