mirror of
https://github.com/LawnchairLauncher/lawnchair.git
synced 2026-03-01 00:06:47 +00:00
Merge "Show 3 button nav on phone in Taskbar (1/2)" into tm-qpr-dev
This commit is contained in:
@@ -15,15 +15,20 @@
|
||||
*/
|
||||
package com.android.launcher3.taskbar;
|
||||
|
||||
import static android.view.ViewGroup.LayoutParams.MATCH_PARENT;
|
||||
|
||||
import static com.android.launcher3.LauncherAnimUtils.VIEW_TRANSLATE_X;
|
||||
import static com.android.launcher3.Utilities.getDescendantCoordRelativeToAncestor;
|
||||
import static com.android.launcher3.taskbar.LauncherTaskbarUIController.SYSUI_SURFACE_PROGRESS_INDEX;
|
||||
import static com.android.launcher3.taskbar.TaskbarManager.isPhoneButtonNavMode;
|
||||
import static com.android.launcher3.taskbar.TaskbarManager.isPhoneMode;
|
||||
import static com.android.launcher3.taskbar.TaskbarNavButtonController.BUTTON_A11Y;
|
||||
import static com.android.launcher3.taskbar.TaskbarNavButtonController.BUTTON_BACK;
|
||||
import static com.android.launcher3.taskbar.TaskbarNavButtonController.BUTTON_HOME;
|
||||
import static com.android.launcher3.taskbar.TaskbarNavButtonController.BUTTON_IME_SWITCH;
|
||||
import static com.android.launcher3.taskbar.TaskbarNavButtonController.BUTTON_RECENTS;
|
||||
import static com.android.launcher3.taskbar.TaskbarViewController.ALPHA_INDEX_KEYGUARD;
|
||||
import static com.android.launcher3.taskbar.TaskbarViewController.ALPHA_INDEX_SMALL_SCREEN;
|
||||
import static com.android.launcher3.taskbar.Utilities.appendFlag;
|
||||
import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_A11Y_BUTTON_CLICKABLE;
|
||||
import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_A11Y_BUTTON_LONG_CLICKABLE;
|
||||
@@ -109,6 +114,7 @@ public class NavbarButtonsViewController implements TaskbarControllers.LoggableT
|
||||
private static final int FLAG_NOTIFICATION_SHADE_EXPANDED = 1 << 10;
|
||||
private static final int FLAG_SCREEN_PINNING_ACTIVE = 1 << 11;
|
||||
private static final int FLAG_VOICE_INTERACTION_WINDOW_SHOWING = 1 << 12;
|
||||
private static final int FLAG_SMALL_SCREEN = 1 << 13;
|
||||
|
||||
private static final String NAV_BUTTONS_SEPARATE_WINDOW_TITLE = "Taskbar Nav Buttons";
|
||||
|
||||
@@ -122,7 +128,7 @@ public class NavbarButtonsViewController implements TaskbarControllers.LoggableT
|
||||
|
||||
private final TaskbarActivityContext mContext;
|
||||
private final FrameLayout mNavButtonsView;
|
||||
private final ViewGroup mNavButtonContainer;
|
||||
private final LinearLayout mNavButtonContainer;
|
||||
// Used for IME+A11Y buttons
|
||||
private final ViewGroup mEndContextualContainer;
|
||||
private final ViewGroup mStartContextualContainer;
|
||||
@@ -180,9 +186,13 @@ public class NavbarButtonsViewController implements TaskbarControllers.LoggableT
|
||||
*/
|
||||
public void init(TaskbarControllers controllers) {
|
||||
mControllers = controllers;
|
||||
mNavButtonsView.getLayoutParams().height = mContext.getDeviceProfile().taskbarSize;
|
||||
|
||||
boolean isThreeButtonNav = mContext.isThreeButtonNav();
|
||||
DeviceProfile deviceProfile = mContext.getDeviceProfile();
|
||||
Resources resources = mContext.getResources();
|
||||
mNavButtonsView.getLayoutParams().height = !isPhoneMode(deviceProfile) ?
|
||||
deviceProfile.taskbarSize :
|
||||
resources.getDimensionPixelSize(R.dimen.taskbar_size);
|
||||
|
||||
mIsImeRenderingNavButtons =
|
||||
InputMethodService.canImeRenderGesturalNavButtons() && mContext.imeDrawsImeNavBar();
|
||||
if (!mIsImeRenderingNavButtons) {
|
||||
@@ -201,6 +211,11 @@ public class NavbarButtonsViewController implements TaskbarControllers.LoggableT
|
||||
flags -> (flags & FLAG_KEYGUARD_VISIBLE) == 0
|
||||
&& (flags & FLAG_SCREEN_PINNING_ACTIVE) == 0));
|
||||
|
||||
mPropertyHolders.add(new StatePropertyHolder(
|
||||
mControllers.taskbarViewController.getTaskbarIconAlpha()
|
||||
.getProperty(ALPHA_INDEX_SMALL_SCREEN),
|
||||
flags -> (flags & FLAG_SMALL_SCREEN) == 0));
|
||||
|
||||
mPropertyHolders.add(new StatePropertyHolder(mControllers.taskbarDragLayerController
|
||||
.getKeyguardBgTaskbar(), flags -> (flags & FLAG_KEYGUARD_VISIBLE) == 0));
|
||||
|
||||
@@ -231,7 +246,7 @@ public class NavbarButtonsViewController implements TaskbarControllers.LoggableT
|
||||
initButtons(mNavButtonContainer, mEndContextualContainer,
|
||||
mControllers.navButtonController);
|
||||
updateButtonLayoutSpacing();
|
||||
|
||||
updateStateForFlag(FLAG_SMALL_SCREEN, isPhoneButtonNavMode(mContext));
|
||||
if (isInSetup) {
|
||||
// Since setup wizard only has back button enabled, it looks strange to be
|
||||
// end-aligned, so start-align instead.
|
||||
@@ -244,18 +259,18 @@ public class NavbarButtonsViewController implements TaskbarControllers.LoggableT
|
||||
|
||||
// TODO(b/210906568) Dark intensity is currently not propagated during setup, so set
|
||||
// it based on dark theme for now.
|
||||
int mode = mContext.getResources().getConfiguration().uiMode
|
||||
int mode = resources.getConfiguration().uiMode
|
||||
& Configuration.UI_MODE_NIGHT_MASK;
|
||||
boolean isDarkTheme = mode == Configuration.UI_MODE_NIGHT_YES;
|
||||
mTaskbarNavButtonDarkIntensity.updateValue(isDarkTheme ? 0 : 1);
|
||||
} else if (isInKidsMode) {
|
||||
int iconSize = mContext.getResources().getDimensionPixelSize(
|
||||
int iconSize = resources.getDimensionPixelSize(
|
||||
R.dimen.taskbar_icon_size_kids);
|
||||
int buttonWidth = mContext.getResources().getDimensionPixelSize(
|
||||
int buttonWidth = resources.getDimensionPixelSize(
|
||||
R.dimen.taskbar_nav_buttons_width_kids);
|
||||
int buttonHeight = mContext.getResources().getDimensionPixelSize(
|
||||
int buttonHeight = resources.getDimensionPixelSize(
|
||||
R.dimen.taskbar_nav_buttons_height_kids);
|
||||
int buttonRadius = mContext.getResources().getDimensionPixelSize(
|
||||
int buttonRadius = resources.getDimensionPixelSize(
|
||||
R.dimen.taskbar_nav_buttons_corner_radius_kids);
|
||||
int paddingleft = (buttonWidth - iconSize) / 2;
|
||||
int paddingRight = paddingleft;
|
||||
@@ -277,7 +292,7 @@ public class NavbarButtonsViewController implements TaskbarControllers.LoggableT
|
||||
buttonWidth,
|
||||
buttonHeight
|
||||
);
|
||||
int homeButtonLeftMargin = mContext.getResources().getDimensionPixelSize(
|
||||
int homeButtonLeftMargin = resources.getDimensionPixelSize(
|
||||
R.dimen.taskbar_home_button_left_margin_kids);
|
||||
homeLayoutparams.setMargins(homeButtonLeftMargin, 0, 0, 0);
|
||||
mHomeButton.setLayoutParams(homeLayoutparams);
|
||||
@@ -287,7 +302,7 @@ public class NavbarButtonsViewController implements TaskbarControllers.LoggableT
|
||||
buttonWidth,
|
||||
buttonHeight
|
||||
);
|
||||
int backButtonLeftMargin = mContext.getResources().getDimensionPixelSize(
|
||||
int backButtonLeftMargin = resources.getDimensionPixelSize(
|
||||
R.dimen.taskbar_back_button_left_margin_kids);
|
||||
backLayoutParams.setMargins(backButtonLeftMargin, 0, 0, 0);
|
||||
mBackButton.setLayoutParams(backLayoutParams);
|
||||
@@ -342,7 +357,7 @@ public class NavbarButtonsViewController implements TaskbarControllers.LoggableT
|
||||
if (!mIsImeRenderingNavButtons) {
|
||||
View imeDownButton = addButton(R.drawable.ic_sysbar_back, BUTTON_BACK,
|
||||
mStartContextualContainer, mControllers.navButtonController, R.id.back);
|
||||
imeDownButton.setRotation(Utilities.isRtl(mContext.getResources()) ? 90 : -90);
|
||||
imeDownButton.setRotation(Utilities.isRtl(resources) ? 90 : -90);
|
||||
// Only show when IME is visible.
|
||||
mPropertyHolders.add(new StatePropertyHolder(imeDownButton,
|
||||
flags -> (flags & FLAG_IME_VISIBLE) != 0));
|
||||
@@ -614,6 +629,9 @@ public class NavbarButtonsViewController implements TaskbarControllers.LoggableT
|
||||
}
|
||||
|
||||
private void updateNavButtonTranslationY() {
|
||||
if (isPhoneButtonNavMode(mContext)) {
|
||||
return;
|
||||
}
|
||||
final float normalTranslationY = mTaskbarNavButtonTranslationY.value;
|
||||
final float imeAdjustmentTranslationY = mTaskbarNavButtonTranslationYForIme.value;
|
||||
TaskbarUIController uiController = mControllers.uiController;
|
||||
@@ -683,12 +701,22 @@ public class NavbarButtonsViewController implements TaskbarControllers.LoggableT
|
||||
if (!mContext.isThreeButtonNav() || mContext.isNavBarKidsModeActive()) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (isPhoneButtonNavMode(mContext)) {
|
||||
updatePhoneButtonSpacing();
|
||||
return;
|
||||
}
|
||||
|
||||
DeviceProfile dp = mContext.getDeviceProfile();
|
||||
Resources res = mContext.getResources();
|
||||
|
||||
// Add spacing after the end of the last nav button
|
||||
FrameLayout.LayoutParams navButtonParams =
|
||||
(FrameLayout.LayoutParams) mNavButtonContainer.getLayoutParams();
|
||||
navButtonParams.gravity = Gravity.END;
|
||||
navButtonParams.width = FrameLayout.LayoutParams.WRAP_CONTENT;
|
||||
navButtonParams.height = MATCH_PARENT;
|
||||
|
||||
int navMarginEnd = (int) res.getDimension(dp.inv.inlineNavButtonsEndSpacing);
|
||||
int contextualWidth = mEndContextualContainer.getWidth();
|
||||
// If contextual buttons are showing, we check if the end margin is enough for the
|
||||
@@ -706,6 +734,39 @@ public class NavbarButtonsViewController implements TaskbarControllers.LoggableT
|
||||
View navButton = mNavButtonContainer.getChildAt(i);
|
||||
LinearLayout.LayoutParams buttonLayoutParams =
|
||||
(LinearLayout.LayoutParams) navButton.getLayoutParams();
|
||||
buttonLayoutParams.weight = 0;
|
||||
if (i == 0) {
|
||||
buttonLayoutParams.setMarginEnd(spaceInBetween / 2);
|
||||
} else if (i == mNavButtonContainer.getChildCount() - 1) {
|
||||
buttonLayoutParams.setMarginStart(spaceInBetween / 2);
|
||||
} else {
|
||||
buttonLayoutParams.setMarginStart(spaceInBetween / 2);
|
||||
buttonLayoutParams.setMarginEnd(spaceInBetween / 2);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/** Uniformly spaces out the 3 button nav for smaller phone screens */
|
||||
private void updatePhoneButtonSpacing() {
|
||||
DeviceProfile dp = mContext.getDeviceProfile();
|
||||
Resources res = mContext.getResources();
|
||||
|
||||
// TODO: Polish pending, this is just to make it usable
|
||||
FrameLayout.LayoutParams navContainerParams =
|
||||
(FrameLayout.LayoutParams) mNavButtonContainer.getLayoutParams();
|
||||
int endStartMargins = res.getDimensionPixelSize(R.dimen.taskbar_nav_buttons_size);
|
||||
navContainerParams.gravity = Gravity.CENTER;
|
||||
navContainerParams.setMarginEnd(endStartMargins);
|
||||
navContainerParams.setMarginStart(endStartMargins);
|
||||
mNavButtonContainer.setLayoutParams(navContainerParams);
|
||||
|
||||
// Add the spaces in between the nav buttons
|
||||
int spaceInBetween = res.getDimensionPixelSize(R.dimen.taskbar_button_space_inbetween_phone);
|
||||
for (int i = 0; i < mNavButtonContainer.getChildCount(); i++) {
|
||||
View navButton = mNavButtonContainer.getChildAt(i);
|
||||
LinearLayout.LayoutParams buttonLayoutParams =
|
||||
(LinearLayout.LayoutParams) navButton.getLayoutParams();
|
||||
buttonLayoutParams.weight = 1;
|
||||
if (i == 0) {
|
||||
buttonLayoutParams.setMarginEnd(spaceInBetween / 2);
|
||||
} else if (i == mNavButtonContainer.getChildCount() - 1) {
|
||||
@@ -725,6 +786,8 @@ public class NavbarButtonsViewController implements TaskbarControllers.LoggableT
|
||||
}
|
||||
|
||||
moveNavButtonsBackToTaskbarWindow();
|
||||
mNavButtonContainer.removeAllViews();
|
||||
mAllButtons.clear();
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user