Loading quickstep/res/values/dimens.xml +1 −0 Original line number Diff line number Diff line Loading @@ -216,6 +216,7 @@ <!-- Taskbar --> <dimen name="taskbar_size">@*android:dimen/taskbar_frame_height</dimen> <dimen name="taskbar_ime_size">48dp</dimen> <dimen name="taskbar_icon_touch_size">48dp</dimen> <dimen name="taskbar_icon_drag_icon_size">54dp</dimen> <dimen name="taskbar_folder_margin">16dp</dimen> Loading quickstep/src/com/android/launcher3/taskbar/NavbarButtonsViewController.java +25 −8 Original line number Diff line number Diff line Loading @@ -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( Loading Loading @@ -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); Loading Loading @@ -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() { Loading quickstep/src/com/android/launcher3/taskbar/TaskbarActivityContext.java +21 −5 Original line number Diff line number Diff line Loading @@ -32,6 +32,7 @@ import android.content.Context; import android.content.Intent; import android.content.pm.ActivityInfo.Config; import android.content.pm.LauncherApps; import android.content.res.Resources; import android.graphics.Insets; import android.graphics.PixelFormat; import android.graphics.Rect; Loading Loading @@ -96,6 +97,7 @@ public class TaskbarActivityContext extends ContextThemeWrapper implements Activ private final WindowManager mWindowManager; private final @Nullable RoundedCorner mLeftCorner, mRightCorner; private final int mTaskbarHeightForIme; private WindowManager.LayoutParams mWindowLayoutParams; private boolean mIsFullscreen; // The size we should return to when we call setTaskbarWindowFullscreen(false) Loading @@ -122,10 +124,13 @@ public class TaskbarActivityContext extends ContextThemeWrapper implements Activ mIsUserSetupComplete = SettingsCache.INSTANCE.get(this).getValue( Settings.Secure.getUriFor(Settings.Secure.USER_SETUP_COMPLETE), 0); float taskbarIconSize = getResources().getDimension(R.dimen.taskbar_icon_size); mDeviceProfile.updateIconSize(1, getResources()); final Resources resources = getResources(); float taskbarIconSize = resources.getDimension(R.dimen.taskbar_icon_size); mDeviceProfile.updateIconSize(1, resources); float iconScale = taskbarIconSize / mDeviceProfile.iconSizePx; mDeviceProfile.updateIconSize(iconScale, getResources()); mDeviceProfile.updateIconSize(iconScale, resources); mTaskbarHeightForIme = resources.getDimensionPixelSize(R.dimen.taskbar_ime_size); mLayoutInflater = LayoutInflater.from(this).cloneInContext(this); Loading Loading @@ -197,7 +202,7 @@ public class TaskbarActivityContext extends ContextThemeWrapper implements Activ // Adjust the frame by the rounded corners (ie. leaving just the bar as the inset) when // the IME is showing mWindowLayoutParams.providedInternalImeInsets = Insets.of(0, getDefaultTaskbarWindowHeight() - mDeviceProfile.taskbarSize, 0, 0); getDefaultTaskbarWindowHeight() - mTaskbarHeightForIme, 0, 0); // Initialize controllers after all are constructed. mControllers.init(sharedState); Loading Loading @@ -423,7 +428,9 @@ public class TaskbarActivityContext extends ContextThemeWrapper implements Activ if (mWindowLayoutParams.height == height || mIsDestroyed) { return; } if (height != MATCH_PARENT) { if (height == MATCH_PARENT) { height = mDeviceProfile.heightPx; } else { mLastRequestedNonFullscreenHeight = height; if (mIsFullscreen) { // We still need to be fullscreen, so defer any change to our height until we call Loading @@ -434,6 +441,8 @@ public class TaskbarActivityContext extends ContextThemeWrapper implements Activ } } mWindowLayoutParams.height = height; mWindowLayoutParams.providedInternalImeInsets = Insets.of(0, height - mTaskbarHeightForIme, 0, 0); mWindowManager.updateViewLayout(mDragLayer, mWindowLayoutParams); } Loading @@ -444,6 +453,13 @@ public class TaskbarActivityContext extends ContextThemeWrapper implements Activ return mDeviceProfile.taskbarSize + Math.max(getLeftCornerRadius(), getRightCornerRadius()); } /** * Returns the bottom insets taskbar provides to the IME when IME is visible. */ public int getTaskbarHeightForIme() { return mTaskbarHeightForIme; } protected void onTaskbarIconClicked(View view) { Object tag = view.getTag(); if (tag instanceof Task) { Loading Loading
quickstep/res/values/dimens.xml +1 −0 Original line number Diff line number Diff line Loading @@ -216,6 +216,7 @@ <!-- Taskbar --> <dimen name="taskbar_size">@*android:dimen/taskbar_frame_height</dimen> <dimen name="taskbar_ime_size">48dp</dimen> <dimen name="taskbar_icon_touch_size">48dp</dimen> <dimen name="taskbar_icon_drag_icon_size">54dp</dimen> <dimen name="taskbar_folder_margin">16dp</dimen> Loading
quickstep/src/com/android/launcher3/taskbar/NavbarButtonsViewController.java +25 −8 Original line number Diff line number Diff line Loading @@ -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( Loading Loading @@ -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); Loading Loading @@ -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() { Loading
quickstep/src/com/android/launcher3/taskbar/TaskbarActivityContext.java +21 −5 Original line number Diff line number Diff line Loading @@ -32,6 +32,7 @@ import android.content.Context; import android.content.Intent; import android.content.pm.ActivityInfo.Config; import android.content.pm.LauncherApps; import android.content.res.Resources; import android.graphics.Insets; import android.graphics.PixelFormat; import android.graphics.Rect; Loading Loading @@ -96,6 +97,7 @@ public class TaskbarActivityContext extends ContextThemeWrapper implements Activ private final WindowManager mWindowManager; private final @Nullable RoundedCorner mLeftCorner, mRightCorner; private final int mTaskbarHeightForIme; private WindowManager.LayoutParams mWindowLayoutParams; private boolean mIsFullscreen; // The size we should return to when we call setTaskbarWindowFullscreen(false) Loading @@ -122,10 +124,13 @@ public class TaskbarActivityContext extends ContextThemeWrapper implements Activ mIsUserSetupComplete = SettingsCache.INSTANCE.get(this).getValue( Settings.Secure.getUriFor(Settings.Secure.USER_SETUP_COMPLETE), 0); float taskbarIconSize = getResources().getDimension(R.dimen.taskbar_icon_size); mDeviceProfile.updateIconSize(1, getResources()); final Resources resources = getResources(); float taskbarIconSize = resources.getDimension(R.dimen.taskbar_icon_size); mDeviceProfile.updateIconSize(1, resources); float iconScale = taskbarIconSize / mDeviceProfile.iconSizePx; mDeviceProfile.updateIconSize(iconScale, getResources()); mDeviceProfile.updateIconSize(iconScale, resources); mTaskbarHeightForIme = resources.getDimensionPixelSize(R.dimen.taskbar_ime_size); mLayoutInflater = LayoutInflater.from(this).cloneInContext(this); Loading Loading @@ -197,7 +202,7 @@ public class TaskbarActivityContext extends ContextThemeWrapper implements Activ // Adjust the frame by the rounded corners (ie. leaving just the bar as the inset) when // the IME is showing mWindowLayoutParams.providedInternalImeInsets = Insets.of(0, getDefaultTaskbarWindowHeight() - mDeviceProfile.taskbarSize, 0, 0); getDefaultTaskbarWindowHeight() - mTaskbarHeightForIme, 0, 0); // Initialize controllers after all are constructed. mControllers.init(sharedState); Loading Loading @@ -423,7 +428,9 @@ public class TaskbarActivityContext extends ContextThemeWrapper implements Activ if (mWindowLayoutParams.height == height || mIsDestroyed) { return; } if (height != MATCH_PARENT) { if (height == MATCH_PARENT) { height = mDeviceProfile.heightPx; } else { mLastRequestedNonFullscreenHeight = height; if (mIsFullscreen) { // We still need to be fullscreen, so defer any change to our height until we call Loading @@ -434,6 +441,8 @@ public class TaskbarActivityContext extends ContextThemeWrapper implements Activ } } mWindowLayoutParams.height = height; mWindowLayoutParams.providedInternalImeInsets = Insets.of(0, height - mTaskbarHeightForIme, 0, 0); mWindowManager.updateViewLayout(mDragLayer, mWindowLayoutParams); } Loading @@ -444,6 +453,13 @@ public class TaskbarActivityContext extends ContextThemeWrapper implements Activ return mDeviceProfile.taskbarSize + Math.max(getLeftCornerRadius(), getRightCornerRadius()); } /** * Returns the bottom insets taskbar provides to the IME when IME is visible. */ public int getTaskbarHeightForIme() { return mTaskbarHeightForIme; } protected void onTaskbarIconClicked(View view) { Object tag = view.getTag(); if (tag instanceof Task) { Loading