summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--chrome/android/java_staging/res/layout/hosted_toolbar.xml41
-rw-r--r--chrome/android/java_staging/res/values/dimens_staging.xml8
-rw-r--r--chrome/android/java_staging/src/org/chromium/chrome/browser/hosted/HostedIntentDataProvider.java17
-rw-r--r--chrome/android/java_staging/src/org/chromium/chrome/browser/omnibox/LocationBar.java5
-rw-r--r--chrome/android/java_staging/src/org/chromium/chrome/browser/omnibox/LocationBarLayout.java3
-rw-r--r--chrome/android/java_staging/src/org/chromium/chrome/browser/toolbar/HostedToolbar.java140
-rw-r--r--chrome/android/java_staging/src/org/chromium/chrome/browser/toolbar/ToolbarManager.java5
7 files changed, 174 insertions, 45 deletions
diff --git a/chrome/android/java_staging/res/layout/hosted_toolbar.xml b/chrome/android/java_staging/res/layout/hosted_toolbar.xml
index eb7f908..6c2bd7e 100644
--- a/chrome/android/java_staging/res/layout/hosted_toolbar.xml
+++ b/chrome/android/java_staging/res/layout/hosted_toolbar.xml
@@ -19,18 +19,43 @@
android:alpha="0"
android:visibility="gone"
android:contentDescription="@string/accessibility_toolbar_btn_security_lock" />
- <include
- android:id="@+id/url_container"
+ <FrameLayout
+ android:id="@+id/url_info_container"
+ android:background="@null"
android:layout_width="wrap_content"
- android:layout_height="match_parent"
- android:layout_marginTop="3dp"
- android:layout_marginBottom="3dp"
- android:layout_gravity="center_vertical"
- layout="@layout/url_container"
- />
+ android:layout_height="wrap_content"
+ android:layout_gravity="center_vertical" >
+ <TextView
+ android:id="@+id/title_bar"
+ android:background="@null"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_marginBottom="16dp"
+ android:layout_gravity="top"
+ android:maxLines="1"
+ android:paddingEnd="@dimen/toolbar_edge_padding"
+ android:textSize="@dimen/hosted_title_text_size"
+ android:inputType="none" />
+ <org.chromium.chrome.browser.omnibox.UrlBar
+ android:id="@+id/url_bar"
+ android:background="@null"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_gravity ="bottom"
+ android:maxLines="1"
+ android:paddingEnd="@dimen/toolbar_edge_padding"
+ android:textSize="@dimen/hosted_url_text_size"
+ android:inputType="none" />
+ </FrameLayout>
<ImageButton
android:id="@+id/action_button"
style="@style/ToolbarButton"
+ android:layout_width="wrap_content"
+ android:maxWidth="@dimen/hosted_toolbar_maxWidth"
+ android:paddingTop="@dimen/hosted_toolbar_vertical_padding"
+ android:paddingBottom="@dimen/hosted_toolbar_vertical_padding"
+ android:adjustViewBounds="true"
+ android:scaleType="centerInside"
android:layout_marginEnd="42dp"
android:layout_gravity="center_vertical|end"
android:visibility="gone"
diff --git a/chrome/android/java_staging/res/values/dimens_staging.xml b/chrome/android/java_staging/res/values/dimens_staging.xml
index beb720c..63817e2 100644
--- a/chrome/android/java_staging/res/values/dimens_staging.xml
+++ b/chrome/android/java_staging/res/values/dimens_staging.xml
@@ -145,4 +145,12 @@
<dimen name="enhanced_bookmark_list_mode_background_margin">10dp</dimen>
<dimen name="enhanced_bookmark_drawer_drawable_padding">18dp</dimen>
+ <!-- Hosted Mode dimensions -->
+ <dimen name="hosted_toolbar_maxWidth">60dp</dimen>
+ <dimen name="hosted_toolbar_vertical_padding">16dp</dimen>
+ <dimen name="toolbar_icon_height">24dp</dimen>
+ <dimen name="min_toolbar_icon_side_padding">6dp</dimen>
+ <dimen name="hosted_url_text_size">12sp</dimen>
+ <dimen name="hosted_title_text_size">16sp</dimen>
+
</resources>
diff --git a/chrome/android/java_staging/src/org/chromium/chrome/browser/hosted/HostedIntentDataProvider.java b/chrome/android/java_staging/src/org/chromium/chrome/browser/hosted/HostedIntentDataProvider.java
index d062186..927b2ad 100644
--- a/chrome/android/java_staging/src/org/chromium/chrome/browser/hosted/HostedIntentDataProvider.java
+++ b/chrome/android/java_staging/src/org/chromium/chrome/browser/hosted/HostedIntentDataProvider.java
@@ -123,8 +123,13 @@ public class HostedIntentDataProvider {
intent, EXTRA_HOSTED_ACTION_BUTTON_BUNDLE);
if (actionButtonBundle != null) {
mIcon = IntentUtils.safeGetParcelable(actionButtonBundle, KEY_HOSTED_ICON);
- mActionButtonPendingIntent = IntentUtils.safeGetParcelable(
- actionButtonBundle, KEY_HOSTED_PENDING_INTENT);
+ if (!checkBitmapSizeWithinBounds(context, mIcon)) {
+ mIcon.recycle();
+ mIcon = null;
+ } else {
+ mActionButtonPendingIntent = IntentUtils.safeGetParcelable(
+ actionButtonBundle, KEY_HOSTED_PENDING_INTENT);
+ }
}
List<Bundle> menuItems = IntentUtils.getParcelableArrayListExtra(
@@ -274,4 +279,12 @@ public class HostedIntentDataProvider {
Log.e(TAG, "CanceledException while sending pending intent in hosted mode");
}
}
+
+ private boolean checkBitmapSizeWithinBounds(Context context, Bitmap bitmap) {
+ int height = context.getResources().getDimensionPixelSize(R.dimen.toolbar_icon_height);
+ if (bitmap.getHeight() < height) return false;
+ int scaledWidth = bitmap.getWidth() / bitmap.getHeight() * height;
+ if (scaledWidth > 2 * height) return false;
+ return true;
+ }
}
diff --git a/chrome/android/java_staging/src/org/chromium/chrome/browser/omnibox/LocationBar.java b/chrome/android/java_staging/src/org/chromium/chrome/browser/omnibox/LocationBar.java
index 1280c6c..90bf1c8 100644
--- a/chrome/android/java_staging/src/org/chromium/chrome/browser/omnibox/LocationBar.java
+++ b/chrome/android/java_staging/src/org/chromium/chrome/browser/omnibox/LocationBar.java
@@ -58,6 +58,11 @@ public interface LocationBar extends UrlBarDelegate {
void setUrlToPageUrl();
/**
+ * Sets the displayed title to the page title.
+ */
+ void setTitleToPageTitle();
+
+ /**
* Update the visuals based on a loading state change.
* @param updateUrl Whether to update the URL as a result of the this call.
*/
diff --git a/chrome/android/java_staging/src/org/chromium/chrome/browser/omnibox/LocationBarLayout.java b/chrome/android/java_staging/src/org/chromium/chrome/browser/omnibox/LocationBarLayout.java
index 0ba64c3..3219045 100644
--- a/chrome/android/java_staging/src/org/chromium/chrome/browser/omnibox/LocationBarLayout.java
+++ b/chrome/android/java_staging/src/org/chromium/chrome/browser/omnibox/LocationBarLayout.java
@@ -2391,4 +2391,7 @@ public class LocationBarLayout extends FrameLayout implements OnClickListener,
public View getContainerView() {
return this;
}
+
+ @Override
+ public void setTitleToPageTitle() { }
}
diff --git a/chrome/android/java_staging/src/org/chromium/chrome/browser/toolbar/HostedToolbar.java b/chrome/android/java_staging/src/org/chromium/chrome/browser/toolbar/HostedToolbar.java
index 7677010..c6001f4 100644
--- a/chrome/android/java_staging/src/org/chromium/chrome/browser/toolbar/HostedToolbar.java
+++ b/chrome/android/java_staging/src/org/chromium/chrome/browser/toolbar/HostedToolbar.java
@@ -9,10 +9,13 @@ import android.animation.ObjectAnimator;
import android.annotation.SuppressLint;
import android.content.Context;
import android.content.res.ColorStateList;
+import android.content.res.Configuration;
+import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.ColorDrawable;
import android.text.TextUtils;
+import android.text.TextUtils.TruncateAt;
import android.util.AttributeSet;
import android.util.Pair;
import android.view.KeyEvent;
@@ -20,12 +23,15 @@ import android.view.MotionEvent;
import android.view.View;
import android.widget.ImageButton;
import android.widget.ImageView;
+import android.widget.TextView;
import com.google.android.apps.chrome.R;
import org.chromium.base.ApiCompatibilityUtils;
import org.chromium.chrome.browser.ContextualMenuBar.ActionBarDelegate;
import org.chromium.chrome.browser.CustomSelectionActionModeCallback;
+import org.chromium.chrome.browser.Tab;
+import org.chromium.chrome.browser.WebsiteSettingsPopup;
import org.chromium.chrome.browser.WindowDelegate;
import org.chromium.chrome.browser.appmenu.AppMenuButtonHelper;
import org.chromium.chrome.browser.document.BrandColorUtils;
@@ -36,7 +42,6 @@ import org.chromium.chrome.browser.ntp.NewTabPage;
import org.chromium.chrome.browser.omnibox.LocationBar;
import org.chromium.chrome.browser.omnibox.LocationBarLayout;
import org.chromium.chrome.browser.omnibox.UrlBar;
-import org.chromium.chrome.browser.omnibox.UrlContainer;
import org.chromium.chrome.browser.omnibox.UrlFocusChangeListener;
import org.chromium.chrome.browser.profiles.Profile;
import org.chromium.chrome.browser.ssl.ConnectionSecurityHelperSecurityLevel;
@@ -50,12 +55,13 @@ import org.chromium.ui.base.WindowAndroid;
* The Toolbar layout to be used for hosted mode. This is used for both phone and tablet UIs.
*/
public class HostedToolbar extends ToolbarLayout implements LocationBar {
+ private View mUrlInfoContainer;
private UrlBar mUrlBar;
+ private TextView mTitleBar;
private ImageView mSecurityButton;
private ImageButton mCustomActionButton;
private int mSecurityIconType;
private boolean mUseDarkColors;
- private UrlContainer mUrlContainer;
private TintedImageButton mBackButton;
private Animator mSecurityButtonShowAnimator;
private boolean mBackgroundColorSet;
@@ -75,7 +81,8 @@ public class HostedToolbar extends ToolbarLayout implements LocationBar {
mUrlBar.setHint("");
mUrlBar.setDelegate(this);
mUrlBar.setEnabled(false);
- mUrlContainer = (UrlContainer) findViewById(R.id.url_container);
+ mTitleBar = (TextView) findViewById(R.id.title_bar);
+ mUrlInfoContainer = findViewById(R.id.url_info_container);
mSecurityButton = (ImageButton) findViewById(R.id.security_button);
mSecurityIconType = ConnectionSecurityHelperSecurityLevel.NONE;
mCustomActionButton = (ImageButton) findViewById(R.id.action_button);
@@ -93,12 +100,42 @@ public class HostedToolbar extends ToolbarLayout implements LocationBar {
}
@Override
+ public void onNativeLibraryReady() {
+ super.onNativeLibraryReady();
+ mSecurityButton.setOnClickListener(new OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ Tab currentTab = getToolbarDataProvider().getTab();
+ if (currentTab == null || currentTab.getWebContents() == null) return;
+
+ WebsiteSettingsPopup.show(getContext(), currentTab.getProfile(),
+ currentTab.getWebContents());
+ }
+ });
+ }
+
+ @Override
public void setHostedBackClickHandler(OnClickListener listener) {
mBackButton.setOnClickListener(listener);
}
@Override
public void addCustomActionButton(Bitmap buttonSource, OnClickListener listener) {
+ Resources resources = getResources();
+
+ // The height will be scaled to match spec while keeping the aspect ratio, so get the scaled
+ // width through that.
+ int sourceHeight = buttonSource.getHeight();
+ int sourceScaledHeight = resources.getDimensionPixelSize(R.dimen.toolbar_icon_height);
+ int sourceWidth = buttonSource.getWidth();
+ int sourceScaledWidth = sourceWidth * sourceScaledHeight / sourceHeight;
+ int minPadding = resources.getDimensionPixelSize(R.dimen.min_toolbar_icon_side_padding);
+
+ int sidePadding = Math.max((2 * sourceScaledHeight - sourceScaledWidth) / 2, minPadding);
+ int topPadding = mCustomActionButton.getPaddingTop();
+ int bottomPadding = mCustomActionButton.getPaddingBottom();
+ mCustomActionButton.setPadding(sidePadding, topPadding, sidePadding, bottomPadding);
+
mCustomActionButton.setImageDrawable(new BitmapDrawable(getResources(), buttonSource));
mCustomActionButton.setOnClickListener(listener);
mCustomActionButton.setVisibility(VISIBLE);
@@ -126,9 +163,25 @@ public class HostedToolbar extends ToolbarLayout implements LocationBar {
}
@Override
+ public void setTitleToPageTitle() {
+ Tab currentTab = getToolbarDataProvider().getTab();
+ if (currentTab == null || TextUtils.isEmpty(currentTab.getTitle())) {
+ mTitleBar.setText("");
+ return;
+ }
+ mTitleBar.setText(currentTab.getTitle());
+ }
+
+ @Override
+ protected void onNavigatedToDifferentPage() {
+ super.onNavigatedToDifferentPage();
+ mTitleBar.setText("");
+ }
+
+ @Override
public void setUrlToPageUrl() {
if (getCurrentTab() == null) {
- mUrlContainer.setUrlText(null, null, "");
+ mUrlBar.setUrl("", null);
return;
}
@@ -136,13 +189,12 @@ public class HostedToolbar extends ToolbarLayout implements LocationBar {
if (NativePageFactory.isNativePageUrl(url, getCurrentTab().isIncognito())) {
// Don't show anything for Chrome URLs.
- mUrlContainer.setUrlText(null, null, "");
+ mUrlBar.setUrl("", null);
return;
}
String displayText = getToolbarDataProvider().getText();
Pair<String, String> urlText = LocationBarLayout.splitPathFromUrlDisplayText(displayText);
displayText = urlText.first;
- String path = urlText.second;
if (DomDistillerUrlUtils.isDistilledPage(url)) {
if (isStoredArticle(url)) {
@@ -160,7 +212,7 @@ public class HostedToolbar extends ToolbarLayout implements LocationBar {
}
}
- if (mUrlContainer.setUrlText(displayText, path, url)) {
+ if (mUrlBar.setUrl(url, displayText)) {
mUrlBar.deEmphasizeUrl();
mUrlBar.emphasizeUrl();
}
@@ -182,12 +234,17 @@ public class HostedToolbar extends ToolbarLayout implements LocationBar {
@Override
public void updateVisualsForState() {
+ Resources resources = getResources();
updateSecurityIcon(getSecurityLevel());
- ColorStateList colorStateList = getResources().getColorStateList(mUseDarkColors
+ ColorStateList colorStateList = resources.getColorStateList(mUseDarkColors
? R.color.dark_mode_tint : R.color.light_mode_tint);
mMenuButton.setTint(colorStateList);
mBackButton.setTint(colorStateList);
- mUrlContainer.setUseDarkTextColors(mUseDarkColors);
+ mUrlBar.setUseDarkTextColors(mUseDarkColors);
+
+ int titleTextColor = mUseDarkColors ? resources.getColor(R.color.url_emphasis_default_text)
+ : resources.getColor(R.color.url_emphasis_light_default_text);
+ mTitleBar.setTextColor(titleTextColor);
if (getProgressBar() != null) {
int progressBarResource = !mUseDarkColors
@@ -223,6 +280,13 @@ public class HostedToolbar extends ToolbarLayout implements LocationBar {
}
@Override
+ protected void onConfigurationChanged(Configuration newConfig) {
+ super.onConfigurationChanged(newConfig);
+ setTitleToPageTitle();
+ setUrlToPageUrl();
+ }
+
+ @Override
public ColorDrawable getBackground() {
return (ColorDrawable) super.getBackground();
}
@@ -274,18 +338,6 @@ public class HostedToolbar extends ToolbarLayout implements LocationBar {
}
@Override
- protected void onNavigatedToDifferentPage() {
- super.onNavigatedToDifferentPage();
- mUrlContainer.setTrailingTextVisible(true);
- }
-
- @Override
- public void setLoadProgress(int progress) {
- super.setLoadProgress(progress);
- if (progress == 100) mUrlContainer.setTrailingTextVisible(false);
- }
-
- @Override
public View getContainerView() {
return this;
}
@@ -297,7 +349,7 @@ public class HostedToolbar extends ToolbarLayout implements LocationBar {
private void updateLayoutParams() {
int startMargin = 0;
- int urlContainerChildIndex = -1;
+ int urlInfoContainerChildIndex = -1;
for (int i = 0; i < getChildCount(); i++) {
View childView = getChildAt(i);
if (childView.getVisibility() != GONE) {
@@ -306,8 +358,8 @@ public class HostedToolbar extends ToolbarLayout implements LocationBar {
ApiCompatibilityUtils.setMarginStart(childLayoutParams, startMargin);
childView.setLayoutParams(childLayoutParams);
}
- if (childView == mUrlContainer) {
- urlContainerChildIndex = i;
+ if (childView == mUrlInfoContainer) {
+ urlInfoContainerChildIndex = i;
break;
}
int widthMeasureSpec;
@@ -337,19 +389,19 @@ public class HostedToolbar extends ToolbarLayout implements LocationBar {
}
}
- assert urlContainerChildIndex != -1;
- int urlContainerMarginEnd = 0;
- for (int i = urlContainerChildIndex + 1; i < getChildCount(); i++) {
+ assert urlInfoContainerChildIndex != -1;
+ int urlInfoContainerMarginEnd = 0;
+ for (int i = urlInfoContainerChildIndex + 1; i < getChildCount(); i++) {
View childView = getChildAt(i);
if (childView.getVisibility() != GONE) {
- urlContainerMarginEnd += childView.getMeasuredWidth();
+ urlInfoContainerMarginEnd += childView.getMeasuredWidth();
}
}
- LayoutParams urlLayoutParams = (LayoutParams) mUrlContainer.getLayoutParams();
+ LayoutParams urlLayoutParams = (LayoutParams) mUrlInfoContainer.getLayoutParams();
- if (ApiCompatibilityUtils.getMarginEnd(urlLayoutParams) != urlContainerMarginEnd) {
- ApiCompatibilityUtils.setMarginEnd(urlLayoutParams, urlContainerMarginEnd);
- mUrlContainer.setLayoutParams(urlLayoutParams);
+ if (ApiCompatibilityUtils.getMarginEnd(urlLayoutParams) != urlInfoContainerMarginEnd) {
+ ApiCompatibilityUtils.setMarginEnd(urlLayoutParams, urlInfoContainerMarginEnd);
+ mUrlInfoContainer.setLayoutParams(urlLayoutParams);
}
}
@@ -364,12 +416,30 @@ public class HostedToolbar extends ToolbarLayout implements LocationBar {
return this;
}
+ @Override
+ protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
+ if (changed) {
+ final int availWidth = mUrlInfoContainer.getMeasuredWidth()
+ - mTitleBar.getPaddingEnd() - mTitleBar.getPaddingStart();
+ String currentText = mTitleBar.getText().toString();
+ String currentTitle;
+ Tab currentTab = getToolbarDataProvider().getTab();
+ if (currentTab == null || TextUtils.isEmpty(currentTab.getTitle())) {
+ currentTitle = "";
+ } else {
+ currentTitle = currentTab.getTitle();
+ }
+ String ellipsizedText = TextUtils.ellipsize(currentTitle,
+ mTitleBar.getPaint(), availWidth, TruncateAt.END).toString();
+ if (!ellipsizedText.equals(currentText)) mTitleBar.setText(ellipsizedText);
+ }
+ super.onLayout(changed, left, top, right, bottom);
+ }
+
// Toolbar and LocationBar calls that are not relevant here.
@Override
- public void setToolbarDataProvider(ToolbarDataProvider model) {
- assert model.equals(getToolbarDataProvider());
- }
+ public void setToolbarDataProvider(ToolbarDataProvider model) { }
@Override
public void onUrlPreFocusChanged(boolean gainFocus) {
diff --git a/chrome/android/java_staging/src/org/chromium/chrome/browser/toolbar/ToolbarManager.java b/chrome/android/java_staging/src/org/chromium/chrome/browser/toolbar/ToolbarManager.java
index 28f9b9f..6df7ded 100644
--- a/chrome/android/java_staging/src/org/chromium/chrome/browser/toolbar/ToolbarManager.java
+++ b/chrome/android/java_staging/src/org/chromium/chrome/browser/toolbar/ToolbarManager.java
@@ -241,6 +241,11 @@ class ToolbarManager implements ToolbarTabController, UrlFocusChangeListener {
}
@Override
+ public void onTitleUpdated(Tab tab) {
+ mLocationBar.setTitleToPageTitle();
+ }
+
+ @Override
public void onUrlUpdated(Tab tab) {
// Update the SSL security state as a result of this notification as it will
// sometimes be the only update we receive.