Bug 1406338 - Part 2: Show favicons in tabs tray page. r=nechen

MozReview-Commit-ID: BXOFuxwI0sl

--HG--
extra : rebase_source : 24060ab31fb3df81fa341f54b0aa969b31e4564c
This commit is contained in:
Jing-wei Wu 2017-10-09 11:02:52 +08:00
parent 7ec87779b1
commit 4bcdd48869
7 changed files with 158 additions and 95 deletions

View File

@ -20,35 +20,47 @@
android:paddingRight="@dimen/tab_highlight_stroke_width"
android:paddingBottom="@dimen/tab_highlight_stroke_width">
<org.mozilla.gecko.widget.FadedSingleColorTextView
android:id="@+id/title"
android:layout_width="0dip"
android:layout_height="wrap_content"
android:layout_weight="1.0"
style="@style/TabLayoutItemTextAppearance"
android:textSize="14sp"
android:textColor="@color/tab_item_title"
android:singleLine="true"
android:duplicateParentState="true"
gecko:fadeWidth="15dp"
android:paddingRight="5dp"
android:paddingEnd="5dp"
android:paddingLeft="0dp"
android:paddingStart="0dp"
android:drawablePadding="6dp"/>
<org.mozilla.gecko.widget.FaviconView
android:id="@+id/favicon"
style="@style/TabsLayoutItemFavicon"
android:layout_width="16dp"
android:layout_height="16dp"
android:layout_gravity="center_vertical"
android:scaleType="centerInside"
gecko:dominantBorderEnabled="false"
gecko:overrideScaleType="false"/>
<org.mozilla.gecko.widget.FadedSingleColorTextView
android:id="@+id/title"
style="@style/TabLayoutItemTextAppearance"
android:layout_width="0dip"
android:layout_height="wrap_content"
android:layout_weight="1.0"
android:layout_gravity="center_vertical"
android:drawablePadding="6dp"
android:duplicateParentState="true"
android:paddingEnd="5dp"
android:paddingLeft="0dp"
android:paddingRight="5dp"
android:paddingStart="0dp"
android:singleLine="true"
android:textColor="@color/tab_item_title"
android:textSize="14sp"
gecko:fadeWidth="15dp"/>
<!-- Use of baselineAlignBottom only supported from API 11+ - if this needs to work on lower API versions
we'll need to override getBaseLine() and return image height, but we assume this won't happen -->
<ImageView android:id="@+id/close"
style="@style/TabsItemClose"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:scaleType="center"
android:baselineAlignBottom="true"
android:background="@android:color/transparent"
android:contentDescription="@string/close_tab"
android:src="@drawable/tab_item_close_button"
android:duplicateParentState="true"/>
<ImageView
android:id="@+id/close"
style="@style/TabsItemClose"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:background="@android:color/transparent"
android:contentDescription="@string/close_tab"
android:duplicateParentState="true"
android:scaleType="center"
android:src="@drawable/tab_item_close_button"/>
</LinearLayout>

View File

@ -20,35 +20,45 @@
android:paddingRight="@dimen/tab_highlight_stroke_width"
android:paddingBottom="@dimen/tab_highlight_stroke_width">
<org.mozilla.gecko.widget.FadedSingleColorTextView
android:id="@+id/title"
android:layout_width="0dip"
android:layout_height="wrap_content"
android:layout_weight="1.0"
style="@style/TabLayoutItemTextAppearance"
android:textSize="14sp"
android:textColor="@color/tab_item_title"
android:singleLine="true"
android:duplicateParentState="true"
gecko:fadeWidth="15dp"
android:paddingRight="5dp"
android:paddingEnd="5dp"
android:paddingLeft="0dp"
android:paddingStart="0dp"
android:drawablePadding="6dp"/>
<org.mozilla.gecko.widget.FaviconView
android:id="@+id/favicon"
style="@style/TabsLayoutItemFavicon"
android:layout_width="16dp"
android:layout_height="16dp"
android:layout_gravity="center_vertical"
android:scaleType="centerInside"
gecko:dominantBorderEnabled="false"
gecko:overrideScaleType="false"/>
<!-- Use of baselineAlignBottom only supported from API 11+ - if this needs to work on lower API versions
we'll need to override getBaseLine() and return image height, but we assume this won't happen -->
<ImageView android:id="@+id/close"
style="@style/TabsItemClose"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:scaleType="center"
android:baselineAlignBottom="true"
android:background="@android:color/transparent"
android:contentDescription="@string/close_tab"
android:src="@drawable/tab_item_close_button"
android:duplicateParentState="true"/>
<org.mozilla.gecko.widget.FadedSingleColorTextView
android:id="@+id/title"
style="@style/TabLayoutItemTextAppearance"
android:layout_width="0dip"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_weight="1.0"
android:drawablePadding="6dp"
android:duplicateParentState="true"
android:paddingEnd="5dp"
android:paddingLeft="0dp"
android:paddingRight="5dp"
android:paddingStart="0dp"
android:singleLine="true"
android:textColor="@color/tab_item_title"
android:textSize="14sp"
gecko:fadeWidth="15dp"/>
<ImageView
android:id="@+id/close"
style="@style/TabsItemClose"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:background="@android:color/transparent"
android:contentDescription="@string/close_tab"
android:duplicateParentState="true"
android:scaleType="center"
android:src="@drawable/tab_item_close_button"/>
</LinearLayout>

View File

@ -4,6 +4,7 @@
- file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
<org.mozilla.gecko.tabs.TabsLayoutItemView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:gecko="http://schemas.android.com/apk/res-auto"
style="@style/TabsItem"
android:focusable="true"
android:id="@+id/info"
@ -19,13 +20,13 @@
<!-- We set state_private on this View dynamically in TabsListLayout. -->
<org.mozilla.gecko.widget.TabThumbnailWrapper
android:id="@+id/wrapper"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="4dip"
android:background="@drawable/tab_thumbnail"
android:duplicateParentState="true"
android:clipToPadding="false">
android:id="@+id/wrapper"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="4dip"
android:background="@drawable/tab_thumbnail"
android:duplicateParentState="true"
android:clipToPadding="false">
<org.mozilla.gecko.tabs.TabsPanelThumbnailView
android:id="@+id/thumbnail"
@ -34,39 +35,35 @@
</org.mozilla.gecko.widget.TabThumbnailWrapper>
<LinearLayout android:layout_width="0dip"
android:layout_height="match_parent"
android:orientation="vertical"
android:layout_weight="1.0"
android:paddingTop="4dip"
android:paddingLeft="10dp"
android:paddingStart="10dp"
android:paddingRight="2dp"
android:paddingEnd="4dip"
android:duplicateParentState="true">
<org.mozilla.gecko.widget.FaviconView
android:id="@+id/favicon"
style="@style/TabsListItemFavicon"
android:layout_width="16dp"
android:layout_height="16dp"
android:layout_gravity="center_vertical"
android:scaleType="centerInside"
gecko:dominantBorderEnabled="false"
gecko:overrideScaleType="false"/>
<TextView android:id="@+id/title"
android:layout_width="match_parent"
android:layout_height="0dip"
android:layout_weight="1.0"
style="@style/TabLayoutItemTextAppearance"
android:textColor="@color/tab_item_title"
android:textSize="14sp"
android:gravity="center_vertical"
android:singleLine="false"
android:maxLines="4"
android:drawablePadding="6dp"
android:duplicateParentState="true"/>
</LinearLayout>
<TextView android:id="@+id/title"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
style="@style/TabLayoutItemTextAppearance"
android:textColor="@color/tab_item_title"
android:textSize="14sp"
android:layout_gravity="center_vertical"
android:singleLine="false"
android:maxLines="4"
android:duplicateParentState="true"/>
<ImageView android:id="@+id/close"
style="@style/TabsItemClose"
android:layout_width="34dip"
android:layout_height="match_parent"
android:scaleType="center"
android:contentDescription="@string/close_tab"
android:src="@drawable/tab_item_close_button"
android:duplicateParentState="true"/>
style="@style/TabsItemClose"
android:layout_width="34dip"
android:layout_height="match_parent"
android:contentDescription="@string/close_tab"
android:duplicateParentState="true"
android:scaleType="center"
android:src="@drawable/tab_item_close_button"/>
</org.mozilla.gecko.tabs.TabsLayoutItemView>

View File

@ -77,6 +77,15 @@
<item name="android:layout_marginRight">-3dp</item>
</style>
<style name="TabsLayoutItemFavicon">
<item name="android:layout_marginEnd">4dp</item>
</style>
<style name="TabsListItemFavicon">
<item name="android:layout_marginStart">10dp</item>
<item name="android:layout_marginEnd">6dp</item>
</style>
<style name="TabsTray.AddTab" parent="TabsTray.V17.AddTab" />
<style name="TabsTray.V17.AddTab" parent="TabsTray.Base.AddTab">
<item name="android:layout_marginEnd">-3dp</item>

View File

@ -175,6 +175,8 @@
<!-- TabsListLayout -->
<dimen name="tab_highlight_stroke_width">5dp</dimen>
<dimen name="tab_favicon_size">16dp</dimen>
<dimen name="tab_favicon_text_size">12sp</dimen>
<!-- PageActionButtons dimensions -->
<dimen name="page_action_button_width">@dimen/browser_toolbar_image_button_width</dimen>

View File

@ -518,6 +518,15 @@
<item name="android:nextFocusLeft">@+id/info</item>
</style>
<style name="TabsLayoutItemFavicon">
<item name="android:layout_marginRight">4dp</item>
</style>
<style name="TabsListItemFavicon">
<item name="android:layout_marginLeft">10dp</item>
<item name="android:layout_marginRight">6dp</item>
</style>
<style name="Widget.RemoteTabsItemView" parent="Widget.TwoLinePageRow"/>
<style name="Widget.RemoteTabsClientView" parent="Widget.TwoLinePageRow">

View File

@ -7,15 +7,18 @@ package org.mozilla.gecko.tabs;
import org.mozilla.gecko.R;
import org.mozilla.gecko.Tab;
import org.mozilla.gecko.Tabs;
import org.mozilla.gecko.icons.IconResponse;
import org.mozilla.gecko.icons.Icons;
import org.mozilla.gecko.widget.FaviconView;
import org.mozilla.gecko.widget.HoverDelegateWithReset;
import org.mozilla.gecko.widget.TabThumbnailWrapper;
import org.mozilla.gecko.widget.TouchDelegateWithReset;
import org.mozilla.gecko.widget.themed.ThemedRelativeLayout;
import android.content.Context;
import android.content.res.Resources;
import android.graphics.Rect;
import android.graphics.drawable.Drawable;
import android.support.v4.widget.TextViewCompat;
import android.support.v7.widget.ViewUtils;
import android.util.AttributeSet;
import android.util.TypedValue;
@ -26,6 +29,8 @@ import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import java.util.concurrent.Future;
public class TabsLayoutItemView extends LinearLayout
implements Checkable {
private static final String LOGTAG = "Gecko" + TabsLayoutItemView.class.getSimpleName();
@ -39,6 +44,9 @@ public class TabsLayoutItemView extends LinearLayout
private TabThumbnailWrapper mThumbnailWrapper;
private HoverDelegateWithReset mHoverDelegate;
private FaviconView mFaviconView;
private Future<IconResponse> mOngoingIconLoad;
public TabsLayoutItemView(Context context, AttributeSet attrs) {
super(context, attrs);
}
@ -98,6 +106,7 @@ public class TabsLayoutItemView extends LinearLayout
mThumbnail = (TabsPanelThumbnailView) findViewById(R.id.thumbnail);
mCloseButton = (ImageView) findViewById(R.id.close);
mThumbnailWrapper = (TabThumbnailWrapper) findViewById(R.id.wrapper);
mFaviconView = (FaviconView) findViewById(R.id.favicon);
growCloseButtonHitArea();
}
@ -169,12 +178,27 @@ public class TabsLayoutItemView extends LinearLayout
mCloseButton.setTag(this);
if (tab.isAudioPlaying()) {
TextViewCompat.setCompoundDrawablesRelativeWithIntrinsicBounds(mTitle, R.drawable.tab_audio_playing, 0, 0, 0);
mFaviconView.setImageResource(R.drawable.tab_audio_playing);
final String tabTitleWithAudio =
getResources().getString(R.string.tab_title_prefix_is_playing_audio, tabTitle);
mTitle.setContentDescription(tabTitleWithAudio);
} else {
TextViewCompat.setCompoundDrawablesRelative(mTitle, null, null, null, null);
if (mOngoingIconLoad != null) {
mOngoingIconLoad.cancel(true);
}
final Resources resources = getResources();
final int iconSize = resources.getDimensionPixelSize(R.dimen.tab_favicon_size);
final float textSize = resources.getDimensionPixelSize(R.dimen.tab_favicon_text_size);
mOngoingIconLoad = Icons.with(getContext())
.pageUrl(tab.getURL())
.skipNetwork()
.targetSize(iconSize)
.textSize(textSize)
.build()
.execute(mFaviconView.createIconCallback());
mTitle.setContentDescription(tabTitle);
}
}