Commit d244902a authored by Theresa's avatar Theresa Committed by Commit Bot

Drop verbose status when there's not enough space

BUG=884743

Change-Id: I5308c8f1496e39abc7d492fa0aa7e0be21c5d0b4
Reviewed-on: https://chromium-review.googlesource.com/c/1298244
Commit-Queue: Theresa <twellington@chromium.org>
Reviewed-by: default avatarTed Choc <tedchoc@chromium.org>
Cr-Commit-Position: refs/heads/master@{#602952}
parent b5e85221
...@@ -13,6 +13,8 @@ ...@@ -13,6 +13,8 @@
android:gravity="center_vertical" android:gravity="center_vertical"
android:textAlignment="viewStart" android:textAlignment="viewStart"
android:textAppearance="@style/TextAppearance.OmniboxVerboseStatus" android:textAppearance="@style/TextAppearance.OmniboxVerboseStatus"
android:ellipsize="end"
android:maxLines="1"
android:visibility="gone" /> android:visibility="gone" />
<!-- Separator is going to be shown or hidden together with the status defined above. --> <!-- Separator is going to be shown or hidden together with the status defined above. -->
...@@ -26,7 +28,7 @@ ...@@ -26,7 +28,7 @@
<!-- This space follows the verbose status and compliments the space that follows <!-- This space follows the verbose status and compliments the space that follows
the status. --> the status. -->
<Space android:id="@+id/location_bar_verbose_status_extra_space" <Space android:id="@+id/location_bar_verbose_status_extra_space"
android:layout_width="8dp" android:layout_width="@dimen/location_bar_status_separator_spacer"
android:layout_height="match_parent" android:layout_height="match_parent"
android:visibility="gone" /> android:visibility="gone" />
......
...@@ -263,10 +263,13 @@ ...@@ -263,10 +263,13 @@
<dimen name="location_bar_icon_width">28dp</dimen> <dimen name="location_bar_icon_width">28dp</dimen>
<dimen name="location_bar_start_icon_width">28dp</dimen> <dimen name="location_bar_start_icon_width">28dp</dimen>
<dimen name="location_bar_lateral_padding">10dp</dimen> <dimen name="location_bar_lateral_padding">10dp</dimen>
<dimen name="location_bar_status_separator_width">1dp</dimen>
<dimen name="location_bar_status_separator_spacer">8dp</dimen>
<dimen name="location_bar_min_url_width">68dp</dimen>
<dimen name="location_bar_min_verbose_status_text_width">48dp</dimen>
<dimen name="tablet_toolbar_start_padding">4dp</dimen> <dimen name="tablet_toolbar_start_padding">4dp</dimen>
<dimen name="tablet_toolbar_end_padding">6dp</dimen> <dimen name="tablet_toolbar_end_padding">6dp</dimen>
<dimen name="location_bar_status_separator_width">1dp</dimen>
<dimen name="toolbar_optional_button_animation_translation">10dp</dimen> <dimen name="toolbar_optional_button_animation_translation">10dp</dimen>
<!-- Modern toolbar dimensions --> <!-- Modern toolbar dimensions -->
......
...@@ -176,4 +176,18 @@ public interface LocationBar extends UrlBarDelegate { ...@@ -176,4 +176,18 @@ public interface LocationBar extends UrlBarDelegate {
* @param scrim The scrim for this location bar to use. * @param scrim The scrim for this location bar to use.
*/ */
void setScrim(ScrimView scrim); void setScrim(ScrimView scrim);
/**
* Called to set the width of the location bar when the url bar is not focused.
*
* Immediately after the animation to transition the URL bar from focused to unfocused finishes,
* the layout width returned from #getMeasuredWidth() can differ from the final unfocused width
* (e.g. this value) until the next layout pass is complete.
*
* This value may be used to determine whether optional child views should be visible in the
* unfocused location bar.
*
* @param unfocusedWidth The unfocused location bar width.
*/
void setUnfocusedWidth(float unfocusedWidth);
} }
...@@ -99,7 +99,7 @@ public class LocationBarLayout extends FrameLayout ...@@ -99,7 +99,7 @@ public class LocationBarLayout extends FrameLayout
private final List<Runnable> mDeferredNativeRunnables = new ArrayList<Runnable>(); private final List<Runnable> mDeferredNativeRunnables = new ArrayList<Runnable>();
protected StatusViewCoordinator mStatusViewCoordiantor; protected StatusViewCoordinator mStatusViewCoordinator;
private String mOriginalUrl = ""; private String mOriginalUrl = "";
...@@ -218,7 +218,7 @@ public class LocationBarLayout extends FrameLayout ...@@ -218,7 +218,7 @@ public class LocationBarLayout extends FrameLayout
setLayoutTransition(null); setLayoutTransition(null);
mStatusViewCoordiantor = new StatusViewCoordinator(mIsTablet, this, this); mStatusViewCoordinator = new StatusViewCoordinator(mIsTablet, this, this);
mUrlBar.setOnKeyListener(new UrlBarKeyListener()); mUrlBar.setOnKeyListener(new UrlBarKeyListener());
...@@ -269,7 +269,7 @@ public class LocationBarLayout extends FrameLayout ...@@ -269,7 +269,7 @@ public class LocationBarLayout extends FrameLayout
mWindowAndroid = windowAndroid; mWindowAndroid = windowAndroid;
mUrlCoordinator.setWindowDelegate(windowDelegate); mUrlCoordinator.setWindowDelegate(windowDelegate);
mStatusViewCoordiantor.setWindowAndroid(windowAndroid); mStatusViewCoordinator.setWindowAndroid(windowAndroid);
} }
/** /**
...@@ -301,7 +301,7 @@ public class LocationBarLayout extends FrameLayout ...@@ -301,7 +301,7 @@ public class LocationBarLayout extends FrameLayout
mNativeInitialized = true; mNativeInitialized = true;
mAutocompleteCoordinator.onNativeInitialized(); mAutocompleteCoordinator.onNativeInitialized();
mStatusViewCoordiantor.onNativeInitialized(); mStatusViewCoordinator.onNativeInitialized();
updateMicButtonState(); updateMicButtonState();
mDeleteButton.setOnClickListener(this); mDeleteButton.setOnClickListener(this);
mMicButton.setOnClickListener(this); mMicButton.setOnClickListener(this);
...@@ -445,7 +445,7 @@ public class LocationBarLayout extends FrameLayout ...@@ -445,7 +445,7 @@ public class LocationBarLayout extends FrameLayout
if (mToolbarDataProvider.isUsingBrandColor()) updateVisualsForState(); if (mToolbarDataProvider.isUsingBrandColor()) updateVisualsForState();
mStatusViewCoordiantor.onUrlFocusChange(mUrlHasFocus); mStatusViewCoordinator.onUrlFocusChange(mUrlHasFocus);
if (!mUrlFocusedWithoutAnimations) handleUrlFocusAnimation(hasFocus); if (!mUrlFocusedWithoutAnimations) handleUrlFocusAnimation(hasFocus);
...@@ -543,7 +543,7 @@ public class LocationBarLayout extends FrameLayout ...@@ -543,7 +543,7 @@ public class LocationBarLayout extends FrameLayout
updateButtonVisibility(); updateButtonVisibility();
mAutocompleteCoordinator.setToolbarDataProvider(toolbarDataProvider); mAutocompleteCoordinator.setToolbarDataProvider(toolbarDataProvider);
mStatusViewCoordiantor.setToolbarDataProvider(toolbarDataProvider); mStatusViewCoordinator.setToolbarDataProvider(toolbarDataProvider);
mUrlCoordinator.setOnFocusChangedCallback(this::onUrlFocusChange); mUrlCoordinator.setOnFocusChangedCallback(this::onUrlFocusChange);
} }
...@@ -583,7 +583,7 @@ public class LocationBarLayout extends FrameLayout ...@@ -583,7 +583,7 @@ public class LocationBarLayout extends FrameLayout
type = StatusViewCoordinator.NavigationButtonType.PAGE; type = StatusViewCoordinator.NavigationButtonType.PAGE;
} }
mStatusViewCoordiantor.setNavigationButtonType(type); mStatusViewCoordinator.setNavigationButtonType(type);
} }
/** /**
...@@ -591,7 +591,7 @@ public class LocationBarLayout extends FrameLayout ...@@ -591,7 +591,7 @@ public class LocationBarLayout extends FrameLayout
*/ */
@Override @Override
public void updateSecurityIcon() { public void updateSecurityIcon() {
mStatusViewCoordiantor.updateSecurityIcon(); mStatusViewCoordinator.updateSecurityIcon();
// Update the URL in case the scheme change triggers a URL emphasis change. // Update the URL in case the scheme change triggers a URL emphasis change.
setUrlToPageUrl(); setUrlToPageUrl();
} }
...@@ -976,7 +976,7 @@ public class LocationBarLayout extends FrameLayout ...@@ -976,7 +976,7 @@ public class LocationBarLayout extends FrameLayout
public void updateLoadingState(boolean updateUrl) { public void updateLoadingState(boolean updateUrl) {
if (updateUrl) setUrlToPageUrl(); if (updateUrl) setUrlToPageUrl();
updateNavigationButton(); updateNavigationButton();
mStatusViewCoordiantor.updateSecurityIcon(); mStatusViewCoordinator.updateSecurityIcon();
} }
/** @return The current active {@link Tab}. */ /** @return The current active {@link Tab}. */
...@@ -1061,6 +1061,11 @@ public class LocationBarLayout extends FrameLayout ...@@ -1061,6 +1061,11 @@ public class LocationBarLayout extends FrameLayout
} }
} }
@Override
public void setUnfocusedWidth(float unfocusedWidth) {
mStatusViewCoordinator.setUnfocusedLocationBarWidth(unfocusedWidth);
}
@Override @Override
public void onWindowFocusChanged(boolean hasWindowFocus) { public void onWindowFocusChanged(boolean hasWindowFocus) {
super.onWindowFocusChanged(hasWindowFocus); super.onWindowFocusChanged(hasWindowFocus);
...@@ -1119,7 +1124,7 @@ public class LocationBarLayout extends FrameLayout ...@@ -1119,7 +1124,7 @@ public class LocationBarLayout extends FrameLayout
*/ */
@Override @Override
public void updateVisualsForState() { public void updateVisualsForState() {
if (updateUseDarkColors()) mStatusViewCoordiantor.setUseDarkColors(mUseDarkColors); if (updateUseDarkColors()) mStatusViewCoordinator.setUseDarkColors(mUseDarkColors);
int id = mUseDarkColors ? R.color.dark_mode_tint : R.color.light_mode_tint; int id = mUseDarkColors ? R.color.dark_mode_tint : R.color.light_mode_tint;
ColorStateList colorStateList = AppCompatResources.getColorStateList(getContext(), id); ColorStateList colorStateList = AppCompatResources.getColorStateList(getContext(), id);
ApiCompatibilityUtils.setImageTintList(mMicButton, colorStateList); ApiCompatibilityUtils.setImageTintList(mMicButton, colorStateList);
...@@ -1167,7 +1172,7 @@ public class LocationBarLayout extends FrameLayout ...@@ -1167,7 +1172,7 @@ public class LocationBarLayout extends FrameLayout
@Override @Override
public View getSecurityIconView() { public View getSecurityIconView() {
return mStatusViewCoordiantor.getSecurityIconView(); return mStatusViewCoordinator.getSecurityIconView();
} }
@Override @Override
...@@ -1183,6 +1188,6 @@ public class LocationBarLayout extends FrameLayout ...@@ -1183,6 +1188,6 @@ public class LocationBarLayout extends FrameLayout
@VisibleForTesting @VisibleForTesting
public StatusViewCoordinator getStatusViewCoordinatorForTesting() { public StatusViewCoordinator getStatusViewCoordinatorForTesting() {
return mStatusViewCoordiantor; return mStatusViewCoordinator;
} }
} }
...@@ -198,7 +198,7 @@ public class LocationBarTablet extends LocationBarLayout { ...@@ -198,7 +198,7 @@ public class LocationBarTablet extends LocationBarLayout {
} }
private void finishUrlFocusChange(boolean hasFocus) { private void finishUrlFocusChange(boolean hasFocus) {
mStatusViewCoordiantor.setSecurityButtonVisibility(!hasFocus); mStatusViewCoordinator.setSecurityButtonVisibility(!hasFocus);
if (hasFocus) { if (hasFocus) {
if (getWindowDelegate().getWindowSoftInputMode() if (getWindowDelegate().getWindowSoftInputMode()
!= WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN) { != WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN) {
......
...@@ -11,6 +11,7 @@ import android.animation.AnimatorListenerAdapter; ...@@ -11,6 +11,7 @@ import android.animation.AnimatorListenerAdapter;
import android.animation.AnimatorSet; import android.animation.AnimatorSet;
import android.animation.ObjectAnimator; import android.animation.ObjectAnimator;
import android.app.Activity; import android.app.Activity;
import android.content.res.Resources;
import android.graphics.drawable.Drawable; import android.graphics.drawable.Drawable;
import android.support.annotation.DrawableRes; import android.support.annotation.DrawableRes;
import android.support.annotation.IntDef; import android.support.annotation.IntDef;
...@@ -76,6 +77,10 @@ public class StatusViewCoordinator implements View.OnClickListener { ...@@ -76,6 +77,10 @@ public class StatusViewCoordinator implements View.OnClickListener {
private final AppCompatImageButton mSecurityButton; private final AppCompatImageButton mSecurityButton;
private final TextView mVerboseStatusTextView; private final TextView mVerboseStatusTextView;
private final float mUrlMinWidth;
private final float mVerboseStatusMinWidth;
private final float mStatusSeparatorWidth;
private ToolbarDataProvider mToolbarDataProvider; private ToolbarDataProvider mToolbarDataProvider;
private WindowAndroid mWindowAndroid; private WindowAndroid mWindowAndroid;
...@@ -95,6 +100,9 @@ public class StatusViewCoordinator implements View.OnClickListener { ...@@ -95,6 +100,9 @@ public class StatusViewCoordinator implements View.OnClickListener {
private boolean mUrlHasFocus; private boolean mUrlHasFocus;
private boolean mUseDarkColors; private boolean mUseDarkColors;
private float mUnfocusedLocationBarWidth;
private int mVerboseStatusTextMaxWidth;
private boolean mHasSpaceForVerboseStatus;
/** /**
* Creates a new StatusViewCoordinator. * Creates a new StatusViewCoordinator.
...@@ -154,6 +162,16 @@ public class StatusViewCoordinator implements View.OnClickListener { ...@@ -154,6 +162,16 @@ public class StatusViewCoordinator implements View.OnClickListener {
ObjectAnimator.ofFloat(mSecurityButton, View.ALPHA, 0)); ObjectAnimator.ofFloat(mSecurityButton, View.ALPHA, 0));
mNavigationIconShowAnimator.setDuration(URL_FOCUS_CHANGE_ANIMATION_DURATION_MS); mNavigationIconShowAnimator.setDuration(URL_FOCUS_CHANGE_ANIMATION_DURATION_MS);
mNavigationIconShowAnimator.addListener(iconChangeAnimatorListener); mNavigationIconShowAnimator.addListener(iconChangeAnimatorListener);
Resources res = mParentView.getResources();
mUrlMinWidth = res.getDimensionPixelSize(R.dimen.location_bar_min_url_width)
+ res.getDimensionPixelSize(R.dimen.location_bar_start_icon_width)
+ (res.getDimensionPixelSize(R.dimen.location_bar_lateral_padding) * 2);
mStatusSeparatorWidth =
res.getDimensionPixelSize(R.dimen.location_bar_status_separator_width)
+ res.getDimensionPixelSize(R.dimen.location_bar_status_separator_spacer);
mVerboseStatusMinWidth = mStatusSeparatorWidth
+ res.getDimensionPixelSize(R.dimen.location_bar_min_verbose_status_text_width);
} }
/** /**
...@@ -356,8 +374,8 @@ public class StatusViewCoordinator implements View.OnClickListener { ...@@ -356,8 +374,8 @@ public class StatusViewCoordinator implements View.OnClickListener {
* omnibox. * omnibox.
*/ */
private void updateVerboseStatusVisibility() { private void updateVerboseStatusVisibility() {
boolean verboseStatusVisible = boolean verboseStatusVisible = !mUrlHasFocus
!mUrlHasFocus && mToolbarDataProvider.shouldShowVerboseStatus(); && mToolbarDataProvider.shouldShowVerboseStatus() && mHasSpaceForVerboseStatus;
int verboseStatusVisibility = verboseStatusVisible ? View.VISIBLE : View.GONE; int verboseStatusVisibility = verboseStatusVisible ? View.VISIBLE : View.GONE;
...@@ -418,4 +436,37 @@ public class StatusViewCoordinator implements View.OnClickListener { ...@@ -418,4 +436,37 @@ public class StatusViewCoordinator implements View.OnClickListener {
PageInfoController.OpenedFromSource.TOOLBAR); PageInfoController.OpenedFromSource.TOOLBAR);
} }
} }
/**
* Called to set the width of the location bar when the url bar is not focused.
* This value is used to determine whether the verbose status text should be visible.
* @param unfocusedWidth The unfocused location bar width.
*/
public void setUnfocusedLocationBarWidth(float unfocusedWidth) {
if (mUnfocusedLocationBarWidth == unfocusedWidth) return;
// This unfocused with is used rather than observing #onMeasure() to avoid showing the
// verbose status when the animation to unfocus the URL bar has finished. There is a call to
// LocationBarLayout#onMeasure() after the URL focus animation has finished and before the
// location bar has received its updated width layout param.
mUnfocusedLocationBarWidth = unfocusedWidth;
boolean previousHasSpace = mHasSpaceForVerboseStatus;
mHasSpaceForVerboseStatus =
mUnfocusedLocationBarWidth >= mUrlMinWidth + mVerboseStatusMinWidth;
if (mHasSpaceForVerboseStatus) {
int previousMaxWidth = mVerboseStatusTextMaxWidth;
mVerboseStatusTextMaxWidth =
(int) (mUnfocusedLocationBarWidth - mUrlMinWidth - mStatusSeparatorWidth);
// Skip setting the max width if it hasn't changed since TextView#setMaxWidth
// invalidates the view and requests a layout.
if (previousMaxWidth != mVerboseStatusTextMaxWidth) {
mVerboseStatusTextView.setMaxWidth(mVerboseStatusTextMaxWidth);
}
}
if (previousHasSpace != mHasSpaceForVerboseStatus) updateVerboseStatusVisibility();
}
} }
...@@ -834,4 +834,7 @@ public class CustomTabToolbar ...@@ -834,4 +834,7 @@ public class CustomTabToolbar
@Override @Override
public void setScrim(ScrimView scrim) {} public void setScrim(ScrimView scrim) {}
@Override
public void setUnfocusedWidth(float unfocusedWidth) {}
} }
...@@ -648,6 +648,7 @@ public class ToolbarPhone extends ToolbarLayout ...@@ -648,6 +648,7 @@ public class ToolbarPhone extends ToolbarLayout
mUnfocusedLocationBarLayoutWidth = rightViewBounds - leftViewBounds; mUnfocusedLocationBarLayoutWidth = rightViewBounds - leftViewBounds;
mUnfocusedLocationBarLayoutLeft = leftViewBounds; mUnfocusedLocationBarLayoutLeft = leftViewBounds;
mUnfocusedLocationBarLayoutRight = rightViewBounds; mUnfocusedLocationBarLayoutRight = rightViewBounds;
mLocationBar.setUnfocusedWidth(mUnfocusedLocationBarLayoutWidth);
} }
/** /**
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment