Pipe dark intensity through OverviewProxy

Test: in 3 button mode, nav buttons in taskbar are dark on light wallpaper; in both 3 button and fully gestural, IME dismiss button is dark on light IME
Bug: 204256643
Change-Id: Ib6488a393e9cf021c806a5caf5b81654cf5164eb
This commit is contained in:
Tony Wickham
2021-11-12 14:00:05 -08:00
parent dd9f25b195
commit a20b9203ac
7 changed files with 72 additions and 6 deletions

View File

@@ -95,4 +95,9 @@ oneway interface IOverviewProxy {
* Sent when screen turned on and ready to use (blocker scrim is hidden)
*/
void onScreenTurnedOn() = 21;
/**
* Sent when the desired dark intensity of the nav buttons has changed
*/
void onNavButtonsDarkIntensityChanged(float darkIntensity) = 22;
}

View File

@@ -57,6 +57,7 @@ import com.android.systemui.statusbar.CommandQueue;
import com.android.systemui.statusbar.CommandQueue.Callbacks;
import com.android.systemui.statusbar.phone.AutoHideController;
import com.android.systemui.statusbar.phone.BarTransitions.TransitionMode;
import com.android.systemui.statusbar.phone.LightBarController;
import com.android.systemui.statusbar.policy.ConfigurationController;
import java.io.FileDescriptor;
@@ -104,7 +105,8 @@ public class NavigationBarController implements
TaskbarDelegate taskbarDelegate,
NavigationBar.Factory navigationBarFactory,
DumpManager dumpManager,
AutoHideController autoHideController) {
AutoHideController autoHideController,
LightBarController lightBarController) {
mContext = context;
mHandler = mainHandler;
mNavigationBarFactory = navigationBarFactory;
@@ -116,7 +118,7 @@ public class NavigationBarController implements
mTaskbarDelegate = taskbarDelegate;
mTaskbarDelegate.setDependencies(commandQueue, overviewProxyService,
navBarHelper, navigationModeController, sysUiFlagsContainer,
dumpManager, autoHideController);
dumpManager, autoHideController, lightBarController);
mIsTablet = isTablet(mContext);
dumpManager.registerDumpable(this);
}

View File

@@ -64,6 +64,9 @@ import com.android.systemui.shared.system.ActivityManagerWrapper;
import com.android.systemui.statusbar.AutoHideUiElement;
import com.android.systemui.statusbar.CommandQueue;
import com.android.systemui.statusbar.phone.AutoHideController;
import com.android.systemui.statusbar.phone.BarTransitions;
import com.android.systemui.statusbar.phone.LightBarController;
import com.android.systemui.statusbar.phone.LightBarTransitionsController;
import java.io.FileDescriptor;
import java.io.PrintWriter;
@@ -85,6 +88,8 @@ public class TaskbarDelegate implements CommandQueue.Callbacks,
private NavigationModeController mNavigationModeController;
private SysUiState mSysUiState;
private AutoHideController mAutoHideController;
private LightBarController mLightBarController;
private LightBarTransitionsController mLightBarTransitionsController;
private int mDisplayId;
private int mNavigationIconHints;
private final NavBarHelper.NavbarTaskbarStateUpdater mNavbarTaskbarStateUpdater =
@@ -141,7 +146,8 @@ public class TaskbarDelegate implements CommandQueue.Callbacks,
NavBarHelper navBarHelper,
NavigationModeController navigationModeController,
SysUiState sysUiState, DumpManager dumpManager,
AutoHideController autoHideController) {
AutoHideController autoHideController,
LightBarController lightBarController) {
// TODO: adding this in the ctor results in a dagger dependency cycle :(
mCommandQueue = commandQueue;
mOverviewProxyService = overviewProxyService;
@@ -150,6 +156,30 @@ public class TaskbarDelegate implements CommandQueue.Callbacks,
mSysUiState = sysUiState;
dumpManager.registerDumpable(this);
mAutoHideController = autoHideController;
mLightBarController = lightBarController;
mLightBarTransitionsController = createLightBarTransitionsController();
}
// Separated into a method to keep setDependencies() clean/readable.
private LightBarTransitionsController createLightBarTransitionsController() {
return new LightBarTransitionsController(mContext,
new LightBarTransitionsController.DarkIntensityApplier() {
@Override
public void applyDarkIntensity(float darkIntensity) {
mOverviewProxyService.onNavButtonsDarkIntensityChanged(darkIntensity);
}
@Override
public int getTintAnimationDuration() {
return LightBarTransitionsController.DEFAULT_TINT_ANIMATION_DURATION;
}
}, mCommandQueue) {
@Override
public boolean supportsIconTintForNavMode(int navigationMode) {
// Always tint taskbar nav buttons (region sampling handles gesture bar separately).
return true;
}
};
}
public void init(int displayId) {
@@ -171,6 +201,7 @@ public class TaskbarDelegate implements CommandQueue.Callbacks,
// Set initial state for any listeners
updateSysuiFlags();
mAutoHideController.setNavigationBar(mAutoHideUiElement);
mLightBarController.setNavigationBar(mLightBarTransitionsController);
mInitialized = true;
}
@@ -189,6 +220,8 @@ public class TaskbarDelegate implements CommandQueue.Callbacks,
mWindowContext = null;
}
mAutoHideController.setNavigationBar(null);
mLightBarTransitionsController.destroy(mContext);
mLightBarController.setNavigationBar(null);
mInitialized = false;
}
@@ -268,6 +301,10 @@ public class TaskbarDelegate implements CommandQueue.Callbacks,
AppearanceRegion[] appearanceRegions, boolean navbarColorManagedByIme, int behavior,
InsetsVisibilities requestedVisibilities, String packageName) {
mOverviewProxyService.onSystemBarAttributesChanged(displayId, behavior);
if (mLightBarController != null && displayId == mDisplayId) {
mLightBarController.onNavigationBarAppearanceChanged(appearance, false/*nbModeChanged*/,
BarTransitions.MODE_TRANSPARENT /*navigationBarMode*/, navbarColorManagedByIme);
}
if (mBehavior != behavior) {
mBehavior = behavior;
updateSysuiFlags();

View File

@@ -986,6 +986,18 @@ public class OverviewProxyService extends CurrentUserTracker implements
}
}
public void onNavButtonsDarkIntensityChanged(float darkIntensity) {
try {
if (mOverviewProxy != null) {
mOverviewProxy.onNavButtonsDarkIntensityChanged(darkIntensity);
} else {
Log.e(TAG_OPS, "Failed to get overview proxy to update nav buttons dark intensity");
}
} catch (RemoteException e) {
Log.e(TAG_OPS, "Failed to call onNavButtonsDarkIntensityChanged()", e);
}
}
private void updateEnabledState() {
final int currentUser = ActivityManagerWrapper.getInstance().getCurrentUserId();
mIsEnabled = mContext.getPackageManager().resolveServiceAsUser(mQuickStepIntent,

View File

@@ -37,7 +37,6 @@ import com.android.systemui.dagger.SysUISingleton;
import com.android.systemui.dump.DumpManager;
import com.android.systemui.navigationbar.NavigationModeController;
import com.android.systemui.plugins.DarkIconDispatcher;
import com.android.systemui.shared.system.QuickStepContract;
import com.android.systemui.statusbar.policy.BatteryController;
import java.io.FileDescriptor;
@@ -251,7 +250,7 @@ public class LightBarController implements BatteryController.BatteryStateChangeC
private void updateNavigation() {
if (mNavigationBarController != null
&& !QuickStepContract.isGesturalMode(mNavigationMode)) {
&& mNavigationBarController.supportsIconTintForNavMode(mNavigationMode)) {
mNavigationBarController.setIconsDark(mNavigationLight, animateChange());
}
}

View File

@@ -28,6 +28,7 @@ import com.android.systemui.Dependency;
import com.android.systemui.Dumpable;
import com.android.systemui.animation.Interpolators;
import com.android.systemui.plugins.statusbar.StatusBarStateController;
import com.android.systemui.shared.system.QuickStepContract;
import com.android.systemui.statusbar.CommandQueue;
import com.android.systemui.statusbar.CommandQueue.Callbacks;
import com.android.systemui.statusbar.policy.KeyguardStateController;
@@ -229,6 +230,14 @@ public class LightBarTransitionsController implements Dumpable, Callbacks,
dispatchDark();
}
/**
* Return whether to use the tint calculated in this class for nav icons.
*/
public boolean supportsIconTintForNavMode(int navigationMode) {
// In gesture mode, we already do region sampling to update tint based on content beneath.
return !QuickStepContract.isGesturalMode(navigationMode);
}
/**
* Interface to apply a specific dark intensity.
*/

View File

@@ -45,6 +45,7 @@ import com.android.systemui.model.SysUiState;
import com.android.systemui.recents.OverviewProxyService;
import com.android.systemui.statusbar.CommandQueue;
import com.android.systemui.statusbar.phone.AutoHideController;
import com.android.systemui.statusbar.phone.LightBarController;
import com.android.systemui.statusbar.policy.ConfigurationController;
import org.junit.After;
@@ -86,7 +87,8 @@ public class NavigationBarControllerTest extends SysuiTestCase {
mock(TaskbarDelegate.class),
mNavigationBarFactory,
mock(DumpManager.class),
mock(AutoHideController.class)));
mock(AutoHideController.class),
mock(LightBarController.class)));
initializeNavigationBars();
}