|
@@ -18,6 +18,7 @@ Support for tablet mode is also included.
|
|
|
.../tab_management/TabGroupUiProperties.java | 6 ++-
|
|
|
.../tab_management/TabGroupUiToolbarView.java | 18 +++++++
|
|
|
.../tab_management/TabGroupUiViewBinder.java | 3 ++
|
|
|
+ .../tab_management/TabListRecyclerView.java | 18 ++++++-
|
|
|
.../tab_management/TabSwitcherMediator.java | 15 ++++++
|
|
|
.../ChromeAccessibilitySettingsDelegate.java | 52 +++++++++++++++++++
|
|
|
.../chrome/browser/app/ChromeActivity.java | 8 +++
|
|
@@ -52,7 +53,7 @@ Support for tablet mode is also included.
|
|
|
.../flags/android/chrome_feature_list.cc | 2 +
|
|
|
.../browser/flags/CachedFeatureFlags.java | 19 +++++++
|
|
|
.../browser/flags/ChromeFeatureList.java | 2 +
|
|
|
- .../chrome/browser/ui/appmenu/AppMenu.java | 4 ++
|
|
|
+ .../chrome/browser/ui/appmenu/AppMenu.java | 19 +++++++
|
|
|
.../omnibox/LocationBarCoordinator.java | 9 +++-
|
|
|
.../browser/omnibox/UrlBarCoordinator.java | 11 +++-
|
|
|
.../suggestions/AutocompleteCoordinator.java | 16 +++++-
|
|
@@ -75,7 +76,7 @@ Support for tablet mode is also included.
|
|
|
.../accessibility/AccessibilitySettings.java | 16 ++++++
|
|
|
.../AccessibilitySettingsDelegate.java | 6 +++
|
|
|
.../render_widget_host_view_android.cc | 3 ++
|
|
|
- 66 files changed, 674 insertions(+), 51 deletions(-)
|
|
|
+ 67 files changed, 706 insertions(+), 52 deletions(-)
|
|
|
|
|
|
diff --git a/cc/base/features.cc b/cc/base/features.cc
|
|
|
--- a/cc/base/features.cc
|
|
@@ -356,6 +357,69 @@ diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
+diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabListRecyclerView.java b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabListRecyclerView.java
|
|
|
+--- a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabListRecyclerView.java
|
|
|
++++ b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabListRecyclerView.java
|
|
|
+@@ -65,6 +65,8 @@ class TabListRecyclerView
|
|
|
+ public static final long BASE_ANIMATION_DURATION_MS = 218;
|
|
|
+ public static final long FINAL_FADE_IN_DURATION_MS = 50;
|
|
|
+
|
|
|
++ private boolean mIsVisible = false;
|
|
|
++
|
|
|
+ /**
|
|
|
+ * Field trial parameter for downsampling scaling factor.
|
|
|
+ */
|
|
|
+@@ -192,6 +194,7 @@ class TabListRecyclerView
|
|
|
+ ? FINAL_FADE_IN_DURATION_MS
|
|
|
+ : BASE_ANIMATION_DURATION_MS;
|
|
|
+
|
|
|
++ mIsVisible = true;
|
|
|
+ setAlpha(0);
|
|
|
+ setVisibility(View.VISIBLE);
|
|
|
+ mFadeInAnimator = ObjectAnimator.ofFloat(this, View.ALPHA, 1);
|
|
|
+@@ -220,6 +223,11 @@ class TabListRecyclerView
|
|
|
+ }
|
|
|
+
|
|
|
+ void setShadowVisibility(boolean shouldShowShadow) {
|
|
|
++ if (CachedFeatureFlags.isEnabled(ChromeFeatureList.MOVE_TOP_TOOLBAR_TO_BOTTOM)
|
|
|
++ && mIsVisible) {
|
|
|
++ // always show shadow
|
|
|
++ shouldShowShadow = true;
|
|
|
++ }
|
|
|
+ if (mShadowImageView == null) {
|
|
|
+ Context context = getContext();
|
|
|
+ mShadowImageView = new ImageView(context);
|
|
|
+@@ -238,7 +246,10 @@ class TabListRecyclerView
|
|
|
+ if (getParent() instanceof FrameLayout) {
|
|
|
+ // Add shadow for grid tab switcher.
|
|
|
+ FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(
|
|
|
+- LayoutParams.MATCH_PARENT, shadowHeight, Gravity.TOP);
|
|
|
++ LayoutParams.MATCH_PARENT, shadowHeight,
|
|
|
++ (CachedFeatureFlags.isEnabled(ChromeFeatureList.MOVE_TOP_TOOLBAR_TO_BOTTOM) ?
|
|
|
++ Gravity.BOTTOM :
|
|
|
++ Gravity.TOP));
|
|
|
+ mShadowImageView.setLayoutParams(params);
|
|
|
+ mShadowImageView.setTranslationY(mShadowTopOffset);
|
|
|
+ FrameLayout parent = (FrameLayout) getParent();
|
|
|
+@@ -265,6 +276,10 @@ class TabListRecyclerView
|
|
|
+
|
|
|
+ void setShadowTopOffset(int shadowTopOffset) {
|
|
|
+ mShadowTopOffset = shadowTopOffset;
|
|
|
++ if (CachedFeatureFlags.isEnabled(ChromeFeatureList.MOVE_TOP_TOOLBAR_TO_BOTTOM)) {
|
|
|
++ // invert the offset since Gravity is set to BOTTOM
|
|
|
++ mShadowTopOffset = -mShadowTopOffset;
|
|
|
++ }
|
|
|
+
|
|
|
+ if (mShadowImageView != null && getParent() instanceof FrameLayout) {
|
|
|
+ // Since the shadow has no functionality, other than just existing visually, we can use
|
|
|
+@@ -445,6 +460,7 @@ class TabListRecyclerView
|
|
|
+ mListener.finishedHiding();
|
|
|
+ }
|
|
|
+ });
|
|
|
++ mIsVisible = false;
|
|
|
+ setShadowVisibility(false);
|
|
|
+ mFadeOutAnimator.start();
|
|
|
+ if (!animate) mFadeOutAnimator.end();
|
|
|
diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabSwitcherMediator.java b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabSwitcherMediator.java
|
|
|
--- a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabSwitcherMediator.java
|
|
|
+++ b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabSwitcherMediator.java
|
|
@@ -1507,15 +1571,37 @@ diff --git a/chrome/browser/ui/android/appmenu/internal/java/src/org/chromium/ch
|
|
|
import org.chromium.chrome.browser.ui.appmenu.internal.R;
|
|
|
import org.chromium.components.browser_ui.styles.ChromeColors;
|
|
|
import org.chromium.components.browser_ui.widget.chips.ChipView;
|
|
|
-@@ -522,6 +524,8 @@ class AppMenu implements OnItemClickListener, OnKeyListener, AppMenuClickHandler
|
|
|
- View anchorView, @IdRes int groupDividerResourceId) {
|
|
|
- anchorView.getLocationOnScreen(mTempLocation);
|
|
|
- int anchorViewY = mTempLocation[1] - appDimensions.top;
|
|
|
-+ if (CachedFeatureFlags.isEnabled(ChromeFeatureList.MOVE_TOP_TOOLBAR_TO_BOTTOM))
|
|
|
-+ anchorViewY += mNegativeVerticalOffsetNotTopAnchored;
|
|
|
+@@ -341,6 +343,14 @@ class AppMenu implements OnItemClickListener, OnKeyListener, AppMenuClickHandler
|
|
|
+ int anchorViewX = tempLocation[0];
|
|
|
+ int anchorViewY = tempLocation[1];
|
|
|
|
|
|
- int anchorViewImpactHeight = mIsByPermanentButton ? anchorView.getHeight() : 0;
|
|
|
++ if (CachedFeatureFlags.isEnabled(ChromeFeatureList.MOVE_TOP_TOOLBAR_TO_BOTTOM)) {
|
|
|
++ // moves the view offset up by the height of the popup
|
|
|
++ anchorViewY -= popupHeight;
|
|
|
++ // fix it if it goes offscreen
|
|
|
++ if (anchorViewY <= negativeSoftwareVerticalOffset)
|
|
|
++ anchorViewY = negativeSoftwareVerticalOffset;
|
|
|
++ }
|
|
|
++
|
|
|
+ int[] offsets = new int[2];
|
|
|
+ // If we have a hardware menu button, locate the app menu closer to the estimated
|
|
|
+ // hardware menu button location.
|
|
|
+@@ -531,6 +541,15 @@ class AppMenu implements OnItemClickListener, OnKeyListener, AppMenuClickHandler
|
|
|
+ }
|
|
|
+ int availableScreenSpace = Math.max(
|
|
|
+ anchorViewY, appDimensions.height() - anchorViewY - anchorViewImpactHeight);
|
|
|
++ if (CachedFeatureFlags.isEnabled(ChromeFeatureList.MOVE_TOP_TOOLBAR_TO_BOTTOM)) {
|
|
|
++ // use all available space
|
|
|
++ availableScreenSpace = appDimensions.height() - anchorViewImpactHeight;
|
|
|
++ if (Build.VERSION.SDK_INT == Build.VERSION_CODES.N) {
|
|
|
++ // due to a bug in A7, the popup does not appear above the anchorview.
|
|
|
++ // the display is not pleasant, so we reduce the space
|
|
|
++ availableScreenSpace -= anchorView.getHeight();
|
|
|
++ }
|
|
|
++ }
|
|
|
|
|
|
+ availableScreenSpace -= (padding.bottom + footerHeight + headerHeight);
|
|
|
+ if (mIsByPermanentButton) availableScreenSpace -= padding.top;
|
|
|
diff --git a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/LocationBarCoordinator.java b/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/LocationBarCoordinator.java
|
|
|
--- a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/LocationBarCoordinator.java
|
|
|
+++ b/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/LocationBarCoordinator.java
|