Only inset IME by 48dp instead of 60dp when taskbar is present

- Update providedInternalImeInsets whenever taskbar height changes, since the insets are subtracted from the taskbar window height. This ensures the IME always has the same bottom inset (48dp) regardless of taskbar's window size
- Also translate nav buttons down to center in the new size when IME is showing

Test: Open IME from home and in apps, both in gesture nav and 3 button mode. Ensure IME bottom inset is always 48dp and nav buttons center within that space
Fixes: 201115344
Change-Id: I5ed25b0ffc08145b2221cc5c960e669cc21b2aa7
This commit is contained in:
Tony Wickham
2021-12-09 17:26:38 +00:00
parent b5a051ca0b
commit 1a2d581cf0
3 changed files with 47 additions and 13 deletions

View File

@@ -106,6 +106,9 @@ public class NavbarButtonsViewController {
private final AnimatedFloat mTaskbarNavButtonTranslationY = new AnimatedFloat(
this::updateNavButtonTranslationY);
private final AnimatedFloat mTaskbarNavButtonTranslationYForIme = new AnimatedFloat(
this::updateNavButtonTranslationY);
// Only applies to mTaskbarNavButtonTranslationY
private final AnimatedFloat mNavButtonTranslationYMultiplier = new AnimatedFloat(
this::updateNavButtonTranslationY);
private final AnimatedFloat mTaskbarNavButtonDarkIntensity = new AnimatedFloat(
@@ -162,14 +165,26 @@ public class NavbarButtonsViewController {
.getKeyguardBgTaskbar(),
flags -> (flags & FLAG_KEYGUARD_VISIBLE) == 0, AnimatedFloat.VALUE, 1, 0));
// Make sure to remove nav bar buttons translation when notification shade is expanded.
mPropertyHolders.add(new StatePropertyHolder(mNavButtonTranslationYMultiplier,
flags -> (flags & FLAG_NOTIFICATION_SHADE_EXPANDED) != 0, AnimatedFloat.VALUE,
0, 1));
// Force nav buttons (specifically back button) to be visible during setup wizard.
boolean isInSetup = !mContext.isUserSetupComplete();
if (isThreeButtonNav || isInSetup) {
boolean alwaysShowButtons = isThreeButtonNav || isInSetup;
// Make sure to remove nav bar buttons translation when notification shade is expanded or
// IME is showing (add separate translation for IME).
int flagsToRemoveTranslation = FLAG_NOTIFICATION_SHADE_EXPANDED | FLAG_IME_VISIBLE;
mPropertyHolders.add(new StatePropertyHolder(mNavButtonTranslationYMultiplier,
flags -> (flags & flagsToRemoveTranslation) != 0, AnimatedFloat.VALUE,
0, 1));
// Center nav buttons in new height for IME.
float transForIme = (mContext.getDeviceProfile().taskbarSize
- mContext.getTaskbarHeightForIme()) / 2f;
// For gesture nav, nav buttons only show for IME anyway so keep them translated down.
float defaultButtonTransY = alwaysShowButtons ? 0 : transForIme;
mPropertyHolders.add(new StatePropertyHolder(mTaskbarNavButtonTranslationYForIme,
flags -> (flags & FLAG_IME_VISIBLE) != 0, AnimatedFloat.VALUE, transForIme,
defaultButtonTransY));
if (alwaysShowButtons) {
initButtons(mNavButtonContainer, mEndContextualContainer,
mControllers.navButtonController);
@@ -408,8 +423,10 @@ public class NavbarButtonsViewController {
}
private void updateNavButtonTranslationY() {
mNavButtonsView.setTranslationY(mTaskbarNavButtonTranslationY.value
* mNavButtonTranslationYMultiplier.value);
float normalTranslationY = mTaskbarNavButtonTranslationY.value
* mNavButtonTranslationYMultiplier.value;
float otherTranslationY = mTaskbarNavButtonTranslationYForIme.value;
mNavButtonsView.setTranslationY(normalTranslationY + otherTranslationY);
}
private void updateNavButtonDarkIntensity() {