Merge "BP2 now handles old browser URI"
diff --git a/res/drawable-hdpi/bg_bookmark_widget_holo.9.png b/res/drawable-hdpi/bg_bookmark_widget_holo.9.png
new file mode 100644
index 0000000..8a23d6f
--- /dev/null
+++ b/res/drawable-hdpi/bg_bookmark_widget_holo.9.png
Binary files differ
diff --git a/res/drawable-hdpi/btn_ic_back_bookmark_widget_holo_dark.png b/res/drawable-hdpi/btn_ic_back_bookmark_widget_holo_dark.png
new file mode 100644
index 0000000..447f3af
--- /dev/null
+++ b/res/drawable-hdpi/btn_ic_back_bookmark_widget_holo_dark.png
Binary files differ
diff --git a/res/drawable-hdpi/btn_ic_bookmark_bookmark_widget_holo_dark.png b/res/drawable-hdpi/btn_ic_bookmark_bookmark_widget_holo_dark.png
new file mode 100644
index 0000000..1c10e98
--- /dev/null
+++ b/res/drawable-hdpi/btn_ic_bookmark_bookmark_widget_holo_dark.png
Binary files differ
diff --git a/res/drawable-hdpi/gradient_overlay_bg_bookmark_widget_holo.png b/res/drawable-hdpi/gradient_overlay_bg_bookmark_widget_holo.png
new file mode 100644
index 0000000..1a84583
--- /dev/null
+++ b/res/drawable-hdpi/gradient_overlay_bg_bookmark_widget_holo.png
Binary files differ
diff --git a/res/drawable-hdpi/header_bg_bookmark_widget_holo.png b/res/drawable-hdpi/header_bg_bookmark_widget_holo.png
new file mode 100644
index 0000000..8d0706a
--- /dev/null
+++ b/res/drawable-hdpi/header_bg_bookmark_widget_holo.png
Binary files differ
diff --git a/res/drawable-hdpi/header_row_focused_bookmark_widget_holo.9.png b/res/drawable-hdpi/header_row_focused_bookmark_widget_holo.9.png
new file mode 100644
index 0000000..b3406fd
--- /dev/null
+++ b/res/drawable-hdpi/header_row_focused_bookmark_widget_holo.9.png
Binary files differ
diff --git a/res/drawable-hdpi/header_row_press_bookmark_widget_holo.9.png b/res/drawable-hdpi/header_row_press_bookmark_widget_holo.9.png
new file mode 100644
index 0000000..2a6ff60
--- /dev/null
+++ b/res/drawable-hdpi/header_row_press_bookmark_widget_holo.9.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_browser_bookmark_widget_holo.png b/res/drawable-hdpi/ic_browser_bookmark_widget_holo.png
new file mode 100644
index 0000000..1fb772e
--- /dev/null
+++ b/res/drawable-hdpi/ic_browser_bookmark_widget_holo.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_folder_bookmark_widget_holo_dark.png b/res/drawable-hdpi/ic_folder_bookmark_widget_holo_dark.png
new file mode 100644
index 0000000..8a167e2
--- /dev/null
+++ b/res/drawable-hdpi/ic_folder_bookmark_widget_holo_dark.png
Binary files differ
diff --git a/res/drawable-hdpi/list_div_bookmark_widget_holo.9.png b/res/drawable-hdpi/list_div_bookmark_widget_holo.9.png
new file mode 100644
index 0000000..65f42ba
--- /dev/null
+++ b/res/drawable-hdpi/list_div_bookmark_widget_holo.9.png
Binary files differ
diff --git a/res/drawable-hdpi/list_div_top_btm_bookmark_widget_holo.9.png b/res/drawable-hdpi/list_div_top_btm_bookmark_widget_holo.9.png
new file mode 100644
index 0000000..e9165d2
--- /dev/null
+++ b/res/drawable-hdpi/list_div_top_btm_bookmark_widget_holo.9.png
Binary files differ
diff --git a/res/drawable-hdpi/row_activated_bookmark_widget_holo.9.png b/res/drawable-hdpi/row_activated_bookmark_widget_holo.9.png
new file mode 100644
index 0000000..b6cfc4c
--- /dev/null
+++ b/res/drawable-hdpi/row_activated_bookmark_widget_holo.9.png
Binary files differ
diff --git a/res/drawable-hdpi/stripes_overlay_bg_bookmark_widget_holo.png b/res/drawable-hdpi/stripes_overlay_bg_bookmark_widget_holo.png
new file mode 100644
index 0000000..95d24fa
--- /dev/null
+++ b/res/drawable-hdpi/stripes_overlay_bg_bookmark_widget_holo.png
Binary files differ
diff --git a/res/drawable-mdpi/bg_bookmark_widget_holo.9.png b/res/drawable-mdpi/bg_bookmark_widget_holo.9.png
new file mode 100644
index 0000000..ac56bbe
--- /dev/null
+++ b/res/drawable-mdpi/bg_bookmark_widget_holo.9.png
Binary files differ
diff --git a/res/drawable-mdpi/btn_ic_back_bookmark_widget_holo_dark.png b/res/drawable-mdpi/btn_ic_back_bookmark_widget_holo_dark.png
new file mode 100644
index 0000000..d8697b8
--- /dev/null
+++ b/res/drawable-mdpi/btn_ic_back_bookmark_widget_holo_dark.png
Binary files differ
diff --git a/res/drawable-mdpi/btn_ic_bookmark_bookmark_widget_holo_dark.png b/res/drawable-mdpi/btn_ic_bookmark_bookmark_widget_holo_dark.png
new file mode 100644
index 0000000..21a2cc3
--- /dev/null
+++ b/res/drawable-mdpi/btn_ic_bookmark_bookmark_widget_holo_dark.png
Binary files differ
diff --git a/res/drawable-mdpi/gradient_overlay_bg_bookmark_widget_holo.png b/res/drawable-mdpi/gradient_overlay_bg_bookmark_widget_holo.png
new file mode 100644
index 0000000..1673338
--- /dev/null
+++ b/res/drawable-mdpi/gradient_overlay_bg_bookmark_widget_holo.png
Binary files differ
diff --git a/res/drawable-mdpi/header_bg_bookmark_widget_holo.png b/res/drawable-mdpi/header_bg_bookmark_widget_holo.png
new file mode 100644
index 0000000..9c3f7a6
--- /dev/null
+++ b/res/drawable-mdpi/header_bg_bookmark_widget_holo.png
Binary files differ
diff --git a/res/drawable-mdpi/header_row_focused_bookmark_widget_holo.9.png b/res/drawable-mdpi/header_row_focused_bookmark_widget_holo.9.png
new file mode 100644
index 0000000..b745159
--- /dev/null
+++ b/res/drawable-mdpi/header_row_focused_bookmark_widget_holo.9.png
Binary files differ
diff --git a/res/drawable-mdpi/header_row_press_bookmark_widget_holo.9.png b/res/drawable-mdpi/header_row_press_bookmark_widget_holo.9.png
new file mode 100644
index 0000000..2e8874e
--- /dev/null
+++ b/res/drawable-mdpi/header_row_press_bookmark_widget_holo.9.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_browser_bookmark_widget_holo.png b/res/drawable-mdpi/ic_browser_bookmark_widget_holo.png
new file mode 100644
index 0000000..0d9e49d
--- /dev/null
+++ b/res/drawable-mdpi/ic_browser_bookmark_widget_holo.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_folder_bookmark_widget_holo_dark.png b/res/drawable-mdpi/ic_folder_bookmark_widget_holo_dark.png
new file mode 100644
index 0000000..910e9ec
--- /dev/null
+++ b/res/drawable-mdpi/ic_folder_bookmark_widget_holo_dark.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_pie_back.png b/res/drawable-mdpi/ic_pie_back.png
new file mode 100644
index 0000000..daddaea
--- /dev/null
+++ b/res/drawable-mdpi/ic_pie_back.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_pie_bookmarks.png b/res/drawable-mdpi/ic_pie_bookmarks.png
new file mode 100644
index 0000000..ffa430d
--- /dev/null
+++ b/res/drawable-mdpi/ic_pie_bookmarks.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_pie_close_tab.png b/res/drawable-mdpi/ic_pie_close_tab.png
new file mode 100644
index 0000000..62396f4
--- /dev/null
+++ b/res/drawable-mdpi/ic_pie_close_tab.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_pie_forward.png b/res/drawable-mdpi/ic_pie_forward.png
new file mode 100644
index 0000000..bd8dcac
--- /dev/null
+++ b/res/drawable-mdpi/ic_pie_forward.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_pie_more.png b/res/drawable-mdpi/ic_pie_more.png
new file mode 100644
index 0000000..c96c6a4
--- /dev/null
+++ b/res/drawable-mdpi/ic_pie_more.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_pie_new_tab.png b/res/drawable-mdpi/ic_pie_new_tab.png
new file mode 100644
index 0000000..206675a
--- /dev/null
+++ b/res/drawable-mdpi/ic_pie_new_tab.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_pie_refresh.png b/res/drawable-mdpi/ic_pie_refresh.png
new file mode 100644
index 0000000..5980f8b
--- /dev/null
+++ b/res/drawable-mdpi/ic_pie_refresh.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_pie_search.png b/res/drawable-mdpi/ic_pie_search.png
new file mode 100644
index 0000000..6981697
--- /dev/null
+++ b/res/drawable-mdpi/ic_pie_search.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_pie_tabs.png b/res/drawable-mdpi/ic_pie_tabs.png
new file mode 100644
index 0000000..fda262a
--- /dev/null
+++ b/res/drawable-mdpi/ic_pie_tabs.png
Binary files differ
diff --git a/res/drawable-mdpi/list_div_bookmark_widget_holo.9.png b/res/drawable-mdpi/list_div_bookmark_widget_holo.9.png
new file mode 100644
index 0000000..fc1946f
--- /dev/null
+++ b/res/drawable-mdpi/list_div_bookmark_widget_holo.9.png
Binary files differ
diff --git a/res/drawable-mdpi/list_div_top_btm_bookmark_widget_holo.9.png b/res/drawable-mdpi/list_div_top_btm_bookmark_widget_holo.9.png
new file mode 100644
index 0000000..309b608
--- /dev/null
+++ b/res/drawable-mdpi/list_div_top_btm_bookmark_widget_holo.9.png
Binary files differ
diff --git a/res/drawable-mdpi/row_activated_bookmark_widget_holo.9.png b/res/drawable-mdpi/row_activated_bookmark_widget_holo.9.png
new file mode 100644
index 0000000..ed8760f
--- /dev/null
+++ b/res/drawable-mdpi/row_activated_bookmark_widget_holo.9.png
Binary files differ
diff --git a/res/drawable-mdpi/stripes_overlay_bg_bookmark_widget_holo.png b/res/drawable-mdpi/stripes_overlay_bg_bookmark_widget_holo.png
new file mode 100644
index 0000000..8c9614b
--- /dev/null
+++ b/res/drawable-mdpi/stripes_overlay_bg_bookmark_widget_holo.png
Binary files differ
diff --git a/res/drawable/preview.png b/res/drawable/preview.png
index b363ab5..b239716 100644
--- a/res/drawable/preview.png
+++ b/res/drawable/preview.png
Binary files differ
diff --git a/res/drawable/widget_background.xml b/res/drawable/widget_background.xml
new file mode 100644
index 0000000..de6c3f2
--- /dev/null
+++ b/res/drawable/widget_background.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2010 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<layer-list
+ xmlns:android="http://schemas.android.com/apk/res/android">
+ <item>
+ <bitmap
+ android:src="@drawable/gradient_overlay_bg_bookmark_widget_holo"
+ android:gravity="top|fill_horizontal" />
+ </item>
+ <item>
+ <bitmap
+ android:src="@drawable/stripes_overlay_bg_bookmark_widget_holo"
+ android:gravity="top|fill_horizontal" />
+ </item>
+</layer-list>
diff --git a/res/drawable/widget_header_selector.xml b/res/drawable/widget_header_selector.xml
new file mode 100644
index 0000000..0e6bc47
--- /dev/null
+++ b/res/drawable/widget_header_selector.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2010 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<selector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:exitFadeDuration="@android:integer/config_mediumAnimTime">
+ <item
+ android:state_window_focused="false"
+ android:drawable="@android:color/transparent" />
+ <item
+ android:state_focused="true"
+ android:state_pressed="true"
+ android:drawable="@drawable/header_row_press_bookmark_widget_holo" />
+ <item
+ android:state_focused="false"
+ android:state_pressed="true"
+ android:drawable="@drawable/header_row_press_bookmark_widget_holo" />
+ <item
+ android:state_focused="true"
+ android:drawable="@drawable/header_row_focused_bookmark_widget_holo" />
+</selector>
diff --git a/res/layout/bookmarklistwidget.xml b/res/layout/bookmarklistwidget.xml
index 17aee1d..f3857f8 100644
--- a/res/layout/bookmarklistwidget.xml
+++ b/res/layout/bookmarklistwidget.xml
@@ -13,41 +13,87 @@
See the License for the specific language governing permissions and
limitations under the License.
-->
-
-<LinearLayout
+<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
- android:orientation="vertical"
- android:background="@null"
- android:focusable="true"
- android:clickable="true">
+ android:paddingTop="4dip"
+ android:paddingBottom="20dip"
+ android:paddingLeft="12dip"
+ android:paddingRight="12dip">
<LinearLayout
- android:id="@+id/header"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:orientation="horizontal"
- android:padding="8dip"
- android:background="@color/bookmarkWidgetHeader">
- <ImageView
- android:id="@+id/logo"
- android:layout_width="32dp"
- android:layout_height="32dp"
- android:src="@mipmap/ic_launcher_browser" />
- <TextView
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_gravity="center_vertical"
- android:text="@string/tab_bookmarks"
- android:textAppearance="?android:attr/textAppearanceMedium"
- android:paddingLeft="8dip" />
- </LinearLayout>
- <ListView
- android:id="@+id/bookmarks_list"
android:layout_width="match_parent"
android:layout_height="match_parent"
- android:background="@color/bookmarkWidgetItemBackground"
- android:cacheColorHint="@color/bookmarkWidgetItemBackground"
- android:dividerHeight="1px"
- android:divider="@color/bookmarkWidgetDivider" />
-</LinearLayout>
+ android:orientation="vertical"
+ android:background="@drawable/bg_bookmark_widget_holo"
+ android:paddingLeft="0dip"
+ android:paddingRight="0dip"
+ android:paddingBottom="0dip">
+ <LinearLayout
+ android:layout_width="match_parent"
+ android:layout_height="42dip"
+ android:orientation="horizontal"
+ android:background="@drawable/header_bg_bookmark_widget_holo"
+ android:layout_marginLeft="5dip"
+ android:layout_marginRight="5dip">
+ <LinearLayout
+ android:id="@+id/header_browser"
+ android:layout_width="0dip"
+ android:layout_height="match_parent"
+ android:layout_weight="1"
+ android:orientation="horizontal"
+ android:paddingLeft="16dip"
+ android:focusable="true"
+ android:clickable="true"
+ android:background="@drawable/widget_header_selector">
+ <ImageView
+ android:id="@+id/logo"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_gravity="center_vertical"
+ android:src="@drawable/ic_browser_bookmark_widget_holo" />
+ <TextView
+ android:layout_width="0dip"
+ android:layout_height="wrap_content"
+ android:layout_weight="1"
+ android:layout_gravity="center_vertical"
+ android:text="@string/application_name"
+ android:textAppearance="?android:attr/textAppearanceMedium"
+ android:textStyle="bold"
+ android:paddingLeft="8dip" />
+ </LinearLayout>
+ <ImageView
+ android:id="@+id/header_bookmarks"
+ android:layout_width="wrap_content"
+ android:layout_height="match_parent"
+ android:src="@drawable/btn_ic_bookmark_bookmark_widget_holo_dark"
+ android:scaleType="centerInside"
+ android:focusable="true"
+ android:clickable="true"
+ android:background="@drawable/widget_header_selector"
+ android:paddingLeft="8dip"
+ android:paddingRight="8dip" />
+ </LinearLayout>
+ <ImageView android:background="@drawable/list_div_top_btm_bookmark_widget_holo"
+ android:layout_height="wrap_content"
+ android:layout_width="match_parent"
+ android:layout_marginLeft="2dip"
+ android:layout_marginRight="2dip" />
+ <ListView
+ android:id="@+id/bookmarks_list"
+ android:layout_width="match_parent"
+ android:layout_height="0dip"
+ android:layout_weight="1"
+ android:background="@drawable/widget_background"
+ android:cacheColorHint="@android:color/transparent"
+ android:divider="@drawable/list_div_bookmark_widget_holo"
+ android:layout_marginLeft="5dip"
+ android:layout_marginRight="5dip" />
+ <ImageView android:background="@drawable/list_div_top_btm_bookmark_widget_holo"
+ android:layout_height="wrap_content"
+ android:layout_width="match_parent"
+ android:layout_marginLeft="2dip"
+ android:layout_marginRight="2dip"
+ android:layout_marginBottom="2dip" />
+ </LinearLayout>
+</FrameLayout>
diff --git a/res/layout/bookmarklistwidget_item.xml b/res/layout/bookmarklistwidget_item.xml
index 9e41d39..039bc2c 100644
--- a/res/layout/bookmarklistwidget_item.xml
+++ b/res/layout/bookmarklistwidget_item.xml
@@ -18,23 +18,23 @@
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/list_item"
android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:minHeight="@dimen/widgetItemMinHeight"
+ android:layout_height="48dp"
android:orientation="horizontal"
- android:padding="8dip"
- android:background="@color/bookmarkWidgetFolderBackground">
+ android:background="@drawable/row_activated_bookmark_widget_holo">
<ImageView
android:id="@+id/thumb"
android:src="@drawable/browser_thumbnail"
- android:layout_height="24dp"
- android:layout_width="24dp"
+ android:layout_height="32dp"
+ android:layout_width="32dp"
android:layout_gravity="center_vertical"
+ android:layout_marginLeft="16dp"
android:scaleType="fitXY"/>
<TextView
android:id="@+id/label"
- android:layout_width="wrap_content"
+ android:layout_width="0dip"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
+ android:layout_weight="1"
android:textAppearance="?android:attr/textAppearanceSmall"
android:paddingLeft="8dip"
android:maxLines="1"
diff --git a/res/layout/browser_add_bookmark.xml b/res/layout/browser_add_bookmark.xml
index c547389..8b6feab 100644
--- a/res/layout/browser_add_bookmark.xml
+++ b/res/layout/browser_add_bookmark.xml
@@ -50,7 +50,7 @@
</RelativeLayout>
<TextView android:id="@+id/fake_title"
android:layout_width="wrap_content"
- android:layout_height="wrap_content"
+ android:layout_height="?android:attr/listPreferredItemHeight"
android:drawableLeft="@drawable/ic_list_bookmark"
android:text="@string/bookmark_this_page"
android:layout_gravity="left"
diff --git a/res/layout/url_bar.xml b/res/layout/url_bar.xml
index 61b03ed..884267e 100644
--- a/res/layout/url_bar.xml
+++ b/res/layout/url_bar.xml
@@ -48,7 +48,14 @@
android:layout_weight="1.0"
android:layout_marginLeft="16dip"
android:orientation="horizontal"
- android:background="@drawable/textfield_active_holo_dark">
+ android:background="@drawable/textfield_default_holo_dark">
+ <ImageView
+ android:id="@+id/voice_icon"
+ android:layout_width="wrap_content"
+ android:layout_height="match_parent"
+ android:src="@drawable/ic_search_light"
+ style="@style/HoloIcon"
+ android:visibility="gone" />
<ImageView
android:id="@+id/lock"
android:layout_width="wrap_content"
diff --git a/res/menu-xlarge/browser.xml b/res/menu-xlarge/browser.xml
index 7af3e8c..a4dc72c 100644
--- a/res/menu-xlarge/browser.xml
+++ b/res/menu-xlarge/browser.xml
@@ -16,7 +16,7 @@
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<group android:id="@+id/MAIN_MENU">
- <item android:id="@+id/newtab"
+ <item android:id="@+id/new_tab_menu_id"
android:icon="@drawable/ic_menu_new_window"
android:title="@string/new_tab"
android:showAsAction="never"
diff --git a/res/values-ar/strings.xml b/res/values-ar/strings.xml
index c7802c6..b8875d2 100644
--- a/res/values-ar/strings.xml
+++ b/res/values-ar/strings.xml
@@ -100,8 +100,8 @@
<string name="bookmark_cannot_save_url" msgid="791722768778386941">"لا يمكن وضع إشارة على عنوان URL هذا."</string>
<string name="delete_bookmark" msgid="2422989994934201992">"حذف"</string>
<string name="bookmark_page" msgid="6845189305130307274">"وضع إشارة على آخر صفحة تم عرضها"</string>
- <!-- outdated translation 3104780739986130377 --> <string name="bookmark_thumbnail_view" msgid="3164068314718522138">"عرض صورة مصغرة"</string>
- <!-- outdated translation 7394379479920174576 --> <string name="bookmark_list_view" msgid="7848510619500937839">"عرض القائمة"</string>
+ <string name="bookmark_thumbnail_view" msgid="3164068314718522138">"الصور المصغرة"</string>
+ <string name="bookmark_list_view" msgid="7848510619500937839">"قائمة"</string>
<string name="current_page" msgid="7510129573681663135">"من "</string>
<string name="delete_bookmark_warning" msgid="758043186202032205">"سيتم حذف الإشارة \"<xliff:g id="BOOKMARK">%s</xliff:g>\"."</string>
<string name="open_in_new_window" msgid="6596775546468054510">"فتح في نافذة جديدة"</string>
@@ -391,6 +391,7 @@
<skip />
<!-- no translation found for import_bookmarks_dialog_import (6933613853573899218) -->
<skip />
- <!-- no translation found for menu_share_url (5851814357333739700) -->
+ <string name="menu_share_url" msgid="5851814357333739700">"مشاركة"</string>
+ <!-- no translation found for max_tabs_warning (4122034303809457570) -->
<skip />
</resources>
diff --git a/res/values-bg/strings.xml b/res/values-bg/strings.xml
index d43f3e5..eb4381d 100644
--- a/res/values-bg/strings.xml
+++ b/res/values-bg/strings.xml
@@ -100,8 +100,8 @@
<string name="bookmark_cannot_save_url" msgid="791722768778386941">"Не може да бъде създадена отметка към този URL адрес."</string>
<string name="delete_bookmark" msgid="2422989994934201992">"Изтриване"</string>
<string name="bookmark_page" msgid="6845189305130307274">"Отметка към последно разглежданата страница"</string>
- <!-- outdated translation 3104780739986130377 --> <string name="bookmark_thumbnail_view" msgid="3164068314718522138">"Изглед с миниизображения"</string>
- <!-- outdated translation 7394379479920174576 --> <string name="bookmark_list_view" msgid="7848510619500937839">"Списъчен изглед"</string>
+ <string name="bookmark_thumbnail_view" msgid="3164068314718522138">"Миниизображения"</string>
+ <string name="bookmark_list_view" msgid="7848510619500937839">"Списък"</string>
<string name="current_page" msgid="7510129573681663135">"от "</string>
<string name="delete_bookmark_warning" msgid="758043186202032205">"Отметката „<xliff:g id="BOOKMARK">%s</xliff:g>“ ще бъде изтрита."</string>
<string name="open_in_new_window" msgid="6596775546468054510">"Отваряне в нов прозорец"</string>
@@ -229,7 +229,7 @@
<skip />
<!-- no translation found for autofill_profile_editor_delete_profile (2754563301088418752) -->
<skip />
- <string name="autofill_setup_dialog_message" msgid="6605682320156223114">"Браузърът може автоматично да попълва уеб формуляри като този. Искате ли да настроите профила си?"</string>
+ <string name="autofill_setup_dialog_message" msgid="6605682320156223114">"Браузърът може автоматично да попълва уеб формуляри като този. Искате ли да настроите потребителския си профил?"</string>
<string name="autofill_setup_dialog_negative_toast" msgid="4653039631354546610">"Автоматичното попълване винаги може да се конфигурира от „Настройки на браузъра“ -> „Лични настройки“."</string>
<string name="pref_privacy_title" msgid="1052470980370846151">"Настройки за поверителност"</string>
<string name="pref_privacy_clear_cache" msgid="3380316479925886998">"Изчистване на кеша"</string>
@@ -391,6 +391,7 @@
<skip />
<!-- no translation found for import_bookmarks_dialog_import (6933613853573899218) -->
<skip />
- <!-- no translation found for menu_share_url (5851814357333739700) -->
+ <string name="menu_share_url" msgid="5851814357333739700">"Споделяне"</string>
+ <!-- no translation found for max_tabs_warning (4122034303809457570) -->
<skip />
</resources>
diff --git a/res/values-ca/strings.xml b/res/values-ca/strings.xml
index cf0bf1f..dfc88b6 100644
--- a/res/values-ca/strings.xml
+++ b/res/values-ca/strings.xml
@@ -100,8 +100,8 @@
<string name="bookmark_cannot_save_url" msgid="791722768778386941">"Aquest URL no es pot afegir a les adreces d\'interès."</string>
<string name="delete_bookmark" msgid="2422989994934201992">"Supressió"</string>
<string name="bookmark_page" msgid="6845189305130307274">"Afegeix l\'última pàgina visualitzada a les adreces d\'interès"</string>
- <!-- outdated translation 3104780739986130377 --> <string name="bookmark_thumbnail_view" msgid="3164068314718522138">"Visualització en miniatura"</string>
- <!-- outdated translation 7394379479920174576 --> <string name="bookmark_list_view" msgid="7848510619500937839">"Visualització de llista"</string>
+ <string name="bookmark_thumbnail_view" msgid="3164068314718522138">"Miniatures"</string>
+ <string name="bookmark_list_view" msgid="7848510619500937839">"Llista"</string>
<string name="current_page" msgid="7510129573681663135">"de "</string>
<string name="delete_bookmark_warning" msgid="758043186202032205">"Se suprimirà l\'adreça d\'interès \"<xliff:g id="BOOKMARK">%s</xliff:g>\"."</string>
<string name="open_in_new_window" msgid="6596775546468054510">"Obre en una finestra nova"</string>
@@ -229,7 +229,7 @@
<skip />
<!-- no translation found for autofill_profile_editor_delete_profile (2754563301088418752) -->
<skip />
- <string name="autofill_setup_dialog_message" msgid="6605682320156223114">"El navegador pot emplenar formularis web com aquest automàticament. Vols configurar els teu perfil?"</string>
+ <string name="autofill_setup_dialog_message" msgid="6605682320156223114">"El navegador pot emplenar formularis web com aquest automàticament. Vols configurar el teu perfil?"</string>
<string name="autofill_setup_dialog_negative_toast" msgid="4653039631354546610">"L\'emplenament automàtic es pot configurar en qualsevol moment mitjançant la configuració del navegador -> configuració personal."</string>
<string name="pref_privacy_title" msgid="1052470980370846151">"Configuració de privadesa"</string>
<string name="pref_privacy_clear_cache" msgid="3380316479925886998">"Esborra la memòria cau"</string>
@@ -391,6 +391,7 @@
<skip />
<!-- no translation found for import_bookmarks_dialog_import (6933613853573899218) -->
<skip />
- <!-- no translation found for menu_share_url (5851814357333739700) -->
+ <string name="menu_share_url" msgid="5851814357333739700">"Comparteix"</string>
+ <!-- no translation found for max_tabs_warning (4122034303809457570) -->
<skip />
</resources>
diff --git a/res/values-cs/strings.xml b/res/values-cs/strings.xml
index ccbd92f..7163e02 100644
--- a/res/values-cs/strings.xml
+++ b/res/values-cs/strings.xml
@@ -92,8 +92,8 @@
<string name="bookmark_cannot_save_url" msgid="791722768778386941">"Tuto adresu URL nelze přidat do záložek."</string>
<string name="delete_bookmark" msgid="2422989994934201992">"Smazat"</string>
<string name="bookmark_page" msgid="6845189305130307274">"Přidat poslední zobrazenou stránku do záložek"</string>
- <!-- outdated translation 3104780739986130377 --> <string name="bookmark_thumbnail_view" msgid="3164068314718522138">"Zobrazit jako miniatury"</string>
- <!-- outdated translation 7394379479920174576 --> <string name="bookmark_list_view" msgid="7848510619500937839">"Zobrazit jako seznam"</string>
+ <string name="bookmark_thumbnail_view" msgid="3164068314718522138">"Miniatury"</string>
+ <string name="bookmark_list_view" msgid="7848510619500937839">"Seznam"</string>
<string name="current_page" msgid="7510129573681663135">"od "</string>
<string name="delete_bookmark_warning" msgid="758043186202032205">"Záložka <xliff:g id="BOOKMARK">%s</xliff:g> bude smazána."</string>
<string name="open_in_new_window" msgid="6596775546468054510">"Otevřít v novém okně"</string>
@@ -347,6 +347,7 @@
<string name="import_bookmarks_dialog_description" msgid="2187665745413495303">"Vaše záložky v systému Android nejsou přidruženy k účtu Google."</string>
<string name="import_bookmarks_dialog_remove" msgid="8105572409059113340">"Odebrat záložky systému Android"</string>
<string name="import_bookmarks_dialog_import" msgid="6933613853573899218">"Přidat všechny záložky systému Android do záložek účtu <xliff:g id="GOOGLE_ACCOUNT">%s</xliff:g>"</string>
- <!-- no translation found for menu_share_url (5851814357333739700) -->
+ <string name="menu_share_url" msgid="5851814357333739700">"Sdílet"</string>
+ <!-- no translation found for max_tabs_warning (4122034303809457570) -->
<skip />
</resources>
diff --git a/res/values-da/strings.xml b/res/values-da/strings.xml
index 9e750b8..3322568 100644
--- a/res/values-da/strings.xml
+++ b/res/values-da/strings.xml
@@ -92,8 +92,8 @@
<string name="bookmark_cannot_save_url" msgid="791722768778386941">"Denne webadresse kan ikke tilføjes som bogmærke."</string>
<string name="delete_bookmark" msgid="2422989994934201992">"Slet"</string>
<string name="bookmark_page" msgid="6845189305130307274">"Opret bogmærke for sidst viste side"</string>
- <!-- outdated translation 3104780739986130377 --> <string name="bookmark_thumbnail_view" msgid="3164068314718522138">"Miniaturevisning"</string>
- <!-- outdated translation 7394379479920174576 --> <string name="bookmark_list_view" msgid="7848510619500937839">"Listevisning"</string>
+ <string name="bookmark_thumbnail_view" msgid="3164068314718522138">"Miniaturebilleder"</string>
+ <string name="bookmark_list_view" msgid="7848510619500937839">"Liste"</string>
<string name="current_page" msgid="7510129573681663135">"fra "</string>
<string name="delete_bookmark_warning" msgid="758043186202032205">"Bogmærket \"<xliff:g id="BOOKMARK">%s</xliff:g>\" slettes."</string>
<string name="open_in_new_window" msgid="6596775546468054510">"Åbn i et nyt vindue"</string>
@@ -347,6 +347,7 @@
<string name="import_bookmarks_dialog_description" msgid="2187665745413495303">"Dine Android-bogmærker er ikke tilknyttet en Google-konto"</string>
<string name="import_bookmarks_dialog_remove" msgid="8105572409059113340">"Fjern dine Android-bogmærker"</string>
<string name="import_bookmarks_dialog_import" msgid="6933613853573899218">"Føj dine Android-bogmærker til bogmærker for <xliff:g id="GOOGLE_ACCOUNT">%s</xliff:g>"</string>
- <!-- no translation found for menu_share_url (5851814357333739700) -->
+ <string name="menu_share_url" msgid="5851814357333739700">"Del"</string>
+ <!-- no translation found for max_tabs_warning (4122034303809457570) -->
<skip />
</resources>
diff --git a/res/values-de/strings.xml b/res/values-de/strings.xml
index 78f8a96..1a038b1 100644
--- a/res/values-de/strings.xml
+++ b/res/values-de/strings.xml
@@ -92,8 +92,8 @@
<string name="bookmark_cannot_save_url" msgid="791722768778386941">"Diese URL kann nicht als Lesezeichen gespeichert werden."</string>
<string name="delete_bookmark" msgid="2422989994934201992">"Löschen"</string>
<string name="bookmark_page" msgid="6845189305130307274">"Lesezeichen für zuletzt besuchte Seite"</string>
- <!-- outdated translation 3104780739986130377 --> <string name="bookmark_thumbnail_view" msgid="3164068314718522138">"Miniaturansicht"</string>
- <!-- outdated translation 7394379479920174576 --> <string name="bookmark_list_view" msgid="7848510619500937839">"Listenansicht"</string>
+ <string name="bookmark_thumbnail_view" msgid="3164068314718522138">"Miniaturansichten"</string>
+ <string name="bookmark_list_view" msgid="7848510619500937839">"Liste"</string>
<string name="current_page" msgid="7510129573681663135">"von "</string>
<string name="delete_bookmark_warning" msgid="758043186202032205">"Lesezeichen \"<xliff:g id="BOOKMARK">%s</xliff:g>\" wird gelöscht."</string>
<string name="open_in_new_window" msgid="6596775546468054510">"In neuem Fenster öffnen"</string>
@@ -347,6 +347,7 @@
<string name="import_bookmarks_dialog_description" msgid="2187665745413495303">"Ihre Android-Lesezeichen sind mit keinem Google-Konto verknüpft."</string>
<string name="import_bookmarks_dialog_remove" msgid="8105572409059113340">"Android-Lesezeichen entfernen"</string>
<string name="import_bookmarks_dialog_import" msgid="6933613853573899218">"Ihre Android-Lesezeichen den Lesezeichen für <xliff:g id="GOOGLE_ACCOUNT">%s</xliff:g> hinzufügen"</string>
- <!-- no translation found for menu_share_url (5851814357333739700) -->
+ <string name="menu_share_url" msgid="5851814357333739700">"Weiterleiten"</string>
+ <!-- no translation found for max_tabs_warning (4122034303809457570) -->
<skip />
</resources>
diff --git a/res/values-el/strings.xml b/res/values-el/strings.xml
index 0aaea1e..126038c 100644
--- a/res/values-el/strings.xml
+++ b/res/values-el/strings.xml
@@ -92,8 +92,8 @@
<string name="bookmark_cannot_save_url" msgid="791722768778386941">"Η διεύθυνση URL δεν ήταν δυνατό να προστεθεί στους σελιδοδείκτες."</string>
<string name="delete_bookmark" msgid="2422989994934201992">"Διαγραφή"</string>
<string name="bookmark_page" msgid="6845189305130307274">"Προσθήκη της τελευταίας σελίδας που προβλήθηκε στους σελιδοδείκτες"</string>
- <!-- outdated translation 3104780739986130377 --> <string name="bookmark_thumbnail_view" msgid="3164068314718522138">"Προβολή μικρογραφίας"</string>
- <!-- outdated translation 7394379479920174576 --> <string name="bookmark_list_view" msgid="7848510619500937839">"Προβολή λίστας"</string>
+ <string name="bookmark_thumbnail_view" msgid="3164068314718522138">"Μικρογραφίες"</string>
+ <string name="bookmark_list_view" msgid="7848510619500937839">"Λίστα"</string>
<string name="current_page" msgid="7510129573681663135">"από "</string>
<string name="delete_bookmark_warning" msgid="758043186202032205">"Ο σελιδοδείκτης \"<xliff:g id="BOOKMARK">%s</xliff:g>\" θα διαγραφεί."</string>
<string name="open_in_new_window" msgid="6596775546468054510">"Άνοιγμα σε νέο παράθυρο"</string>
@@ -347,6 +347,7 @@
<string name="import_bookmarks_dialog_description" msgid="2187665745413495303">"Οι σελιδοδείκτες σας Android δεν σχετίζονται με κάποιον Λογαριασμό Google"</string>
<string name="import_bookmarks_dialog_remove" msgid="8105572409059113340">"Καταργήστε τους σελιδοδείκτες σας Android"</string>
<string name="import_bookmarks_dialog_import" msgid="6933613853573899218">"Προσθ. τους σελιδοδείκτες Android στους σελιδοδείκτες του <xliff:g id="GOOGLE_ACCOUNT">%s</xliff:g>"</string>
- <!-- no translation found for menu_share_url (5851814357333739700) -->
+ <string name="menu_share_url" msgid="5851814357333739700">"Κοινή χρήση"</string>
+ <!-- no translation found for max_tabs_warning (4122034303809457570) -->
<skip />
</resources>
diff --git a/res/values-en-rGB/strings.xml b/res/values-en-rGB/strings.xml
index 831f97d..79f4da6 100644
--- a/res/values-en-rGB/strings.xml
+++ b/res/values-en-rGB/strings.xml
@@ -100,8 +100,8 @@
<string name="bookmark_cannot_save_url" msgid="791722768778386941">"This URL cannot be bookmarked."</string>
<string name="delete_bookmark" msgid="2422989994934201992">"Delete"</string>
<string name="bookmark_page" msgid="6845189305130307274">"Bookmark last viewed page"</string>
- <!-- outdated translation 3104780739986130377 --> <string name="bookmark_thumbnail_view" msgid="3164068314718522138">"Thumbnail view"</string>
- <!-- outdated translation 7394379479920174576 --> <string name="bookmark_list_view" msgid="7848510619500937839">"List view"</string>
+ <string name="bookmark_thumbnail_view" msgid="3164068314718522138">"Thumbnails"</string>
+ <string name="bookmark_list_view" msgid="7848510619500937839">"List"</string>
<string name="current_page" msgid="7510129573681663135">"from "</string>
<string name="delete_bookmark_warning" msgid="758043186202032205">"Bookmark \"<xliff:g id="BOOKMARK">%s</xliff:g>\" will be deleted."</string>
<string name="open_in_new_window" msgid="6596775546468054510">"Open in new window"</string>
@@ -386,6 +386,7 @@
<skip />
<!-- no translation found for import_bookmarks_dialog_import (6933613853573899218) -->
<skip />
- <!-- no translation found for menu_share_url (5851814357333739700) -->
+ <string name="menu_share_url" msgid="5851814357333739700">"Share"</string>
+ <!-- no translation found for max_tabs_warning (4122034303809457570) -->
<skip />
</resources>
diff --git a/res/values-es-rUS/strings.xml b/res/values-es-rUS/strings.xml
index 2fb3614..8a3d2cd 100644
--- a/res/values-es-rUS/strings.xml
+++ b/res/values-es-rUS/strings.xml
@@ -92,8 +92,8 @@
<string name="bookmark_cannot_save_url" msgid="791722768778386941">"No se puede agregar esta URL a los marcadores."</string>
<string name="delete_bookmark" msgid="2422989994934201992">"Eliminar"</string>
<string name="bookmark_page" msgid="6845189305130307274">"Última página vista del marcador"</string>
- <!-- outdated translation 3104780739986130377 --> <string name="bookmark_thumbnail_view" msgid="3164068314718522138">"Vista en miniatura"</string>
- <!-- outdated translation 7394379479920174576 --> <string name="bookmark_list_view" msgid="7848510619500937839">"Vista de lista"</string>
+ <string name="bookmark_thumbnail_view" msgid="3164068314718522138">"Miniaturas"</string>
+ <string name="bookmark_list_view" msgid="7848510619500937839">"Lista"</string>
<string name="current_page" msgid="7510129573681663135">"de "</string>
<string name="delete_bookmark_warning" msgid="758043186202032205">"El marcador \"<xliff:g id="BOOKMARK">%s</xliff:g>\" se eliminará."</string>
<string name="open_in_new_window" msgid="6596775546468054510">"Abrir en una ventana nueva"</string>
@@ -347,6 +347,7 @@
<string name="import_bookmarks_dialog_description" msgid="2187665745413495303">"Tus favoritos de Android no están asociados con una cuenta de Google."</string>
<string name="import_bookmarks_dialog_remove" msgid="8105572409059113340">"Eliminar tus favoritos de Android"</string>
<string name="import_bookmarks_dialog_import" msgid="6933613853573899218">"Agrega tus favoritos de Android a tus favoritos para <xliff:g id="GOOGLE_ACCOUNT">%s</xliff:g>."</string>
- <!-- no translation found for menu_share_url (5851814357333739700) -->
+ <string name="menu_share_url" msgid="5851814357333739700">"Compartir"</string>
+ <!-- no translation found for max_tabs_warning (4122034303809457570) -->
<skip />
</resources>
diff --git a/res/values-es/strings.xml b/res/values-es/strings.xml
index 5961345..618dee6 100644
--- a/res/values-es/strings.xml
+++ b/res/values-es/strings.xml
@@ -92,8 +92,8 @@
<string name="bookmark_cannot_save_url" msgid="791722768778386941">"Esta URL no se puede añadir a marcadores."</string>
<string name="delete_bookmark" msgid="2422989994934201992">"Eliminar"</string>
<string name="bookmark_page" msgid="6845189305130307274">"Marcar como última página vista"</string>
- <!-- outdated translation 3104780739986130377 --> <string name="bookmark_thumbnail_view" msgid="3164068314718522138">"Vista de miniaturas"</string>
- <!-- outdated translation 7394379479920174576 --> <string name="bookmark_list_view" msgid="7848510619500937839">"Vista de lista"</string>
+ <string name="bookmark_thumbnail_view" msgid="3164068314718522138">"Miniaturas"</string>
+ <string name="bookmark_list_view" msgid="7848510619500937839">"Lista"</string>
<string name="current_page" msgid="7510129573681663135">"de "</string>
<string name="delete_bookmark_warning" msgid="758043186202032205">"Se eliminará el marcador \"<xliff:g id="BOOKMARK">%s</xliff:g>\"."</string>
<string name="open_in_new_window" msgid="6596775546468054510">"Abrir en ventana nueva"</string>
@@ -347,6 +347,7 @@
<string name="import_bookmarks_dialog_description" msgid="2187665745413495303">"Tus marcadores de Android no se han asociado a una cuenta de Google."</string>
<string name="import_bookmarks_dialog_remove" msgid="8105572409059113340">"Eliminar los marcadores de Android"</string>
<string name="import_bookmarks_dialog_import" msgid="6933613853573899218">"Añadir tus marcadores de Android a marcadores de <xliff:g id="GOOGLE_ACCOUNT">%s</xliff:g>"</string>
- <!-- no translation found for menu_share_url (5851814357333739700) -->
+ <string name="menu_share_url" msgid="5851814357333739700">"Compartir"</string>
+ <!-- no translation found for max_tabs_warning (4122034303809457570) -->
<skip />
</resources>
diff --git a/res/values-fa/strings.xml b/res/values-fa/strings.xml
index 82e01de..cd05cf7 100644
--- a/res/values-fa/strings.xml
+++ b/res/values-fa/strings.xml
@@ -100,8 +100,8 @@
<string name="bookmark_cannot_save_url" msgid="791722768778386941">"این URL قابل نشانک گذاری نمی باشد."</string>
<string name="delete_bookmark" msgid="2422989994934201992">"حذف"</string>
<string name="bookmark_page" msgid="6845189305130307274">"نشانک گذاری آخرین صفحه مشاهده شده"</string>
- <!-- outdated translation 3104780739986130377 --> <string name="bookmark_thumbnail_view" msgid="3164068314718522138">"نمای تصاویر کوچک"</string>
- <!-- outdated translation 7394379479920174576 --> <string name="bookmark_list_view" msgid="7848510619500937839">"نمای لیست"</string>
+ <string name="bookmark_thumbnail_view" msgid="3164068314718522138">"تصاویر کوچک"</string>
+ <string name="bookmark_list_view" msgid="7848510619500937839">"لیست"</string>
<string name="current_page" msgid="7510129573681663135">"از "</string>
<string name="delete_bookmark_warning" msgid="758043186202032205">"نشانک \"<xliff:g id="BOOKMARK">%s</xliff:g>\" حذف می شود."</string>
<string name="open_in_new_window" msgid="6596775546468054510">"باز کردن در پنجره جدید"</string>
@@ -391,6 +391,7 @@
<skip />
<!-- no translation found for import_bookmarks_dialog_import (6933613853573899218) -->
<skip />
- <!-- no translation found for menu_share_url (5851814357333739700) -->
+ <string name="menu_share_url" msgid="5851814357333739700">"اشتراک گذاری"</string>
+ <!-- no translation found for max_tabs_warning (4122034303809457570) -->
<skip />
</resources>
diff --git a/res/values-fi/strings.xml b/res/values-fi/strings.xml
index c4cf9bb..85ac889 100644
--- a/res/values-fi/strings.xml
+++ b/res/values-fi/strings.xml
@@ -100,8 +100,8 @@
<string name="bookmark_cannot_save_url" msgid="791722768778386941">"Tätä URL-osoitetta ei voi lisätä kirjanmerkkeihin."</string>
<string name="delete_bookmark" msgid="2422989994934201992">"Poista"</string>
<string name="bookmark_page" msgid="6845189305130307274">"Lisää viimeksi avattu sivu kirjanmerkkeihin"</string>
- <!-- outdated translation 3104780739986130377 --> <string name="bookmark_thumbnail_view" msgid="3164068314718522138">"Pikkukuvanäkymä"</string>
- <!-- outdated translation 7394379479920174576 --> <string name="bookmark_list_view" msgid="7848510619500937839">"Luettelonäkymä"</string>
+ <string name="bookmark_thumbnail_view" msgid="3164068314718522138">"Pikkukuvat"</string>
+ <string name="bookmark_list_view" msgid="7848510619500937839">"Luettelo"</string>
<string name="current_page" msgid="7510129573681663135">"kohteesta "</string>
<string name="delete_bookmark_warning" msgid="758043186202032205">"Kirjanmerkki \"<xliff:g id="BOOKMARK">%s</xliff:g>\" poistetaan."</string>
<string name="open_in_new_window" msgid="6596775546468054510">"Avaa uudessa ikkunassa"</string>
@@ -389,6 +389,7 @@
<skip />
<!-- no translation found for import_bookmarks_dialog_import (6933613853573899218) -->
<skip />
- <!-- no translation found for menu_share_url (5851814357333739700) -->
+ <string name="menu_share_url" msgid="5851814357333739700">"Jaa"</string>
+ <!-- no translation found for max_tabs_warning (4122034303809457570) -->
<skip />
</resources>
diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml
index ea562ce..fc07d6e 100644
--- a/res/values-fr/strings.xml
+++ b/res/values-fr/strings.xml
@@ -92,8 +92,8 @@
<string name="bookmark_cannot_save_url" msgid="791722768778386941">"Impossible d\'ajouter cette URL à vos favoris."</string>
<string name="delete_bookmark" msgid="2422989994934201992">"Supprimer"</string>
<string name="bookmark_page" msgid="6845189305130307274">"Ajouter la dernière page consultée"</string>
- <!-- outdated translation 3104780739986130377 --> <string name="bookmark_thumbnail_view" msgid="3164068314718522138">"Vignettes"</string>
- <!-- outdated translation 7394379479920174576 --> <string name="bookmark_list_view" msgid="7848510619500937839">"Liste"</string>
+ <string name="bookmark_thumbnail_view" msgid="3164068314718522138">"Vignettes"</string>
+ <string name="bookmark_list_view" msgid="7848510619500937839">"Liste"</string>
<string name="current_page" msgid="7510129573681663135">"de "</string>
<string name="delete_bookmark_warning" msgid="758043186202032205">"Le favori \"<xliff:g id="BOOKMARK">%s</xliff:g>\" sera supprimé."</string>
<string name="open_in_new_window" msgid="6596775546468054510">"Nouvelle fenêtre"</string>
@@ -347,6 +347,7 @@
<string name="import_bookmarks_dialog_description" msgid="2187665745413495303">"Vos favoris Android ne sont associés à aucun compte Google."</string>
<string name="import_bookmarks_dialog_remove" msgid="8105572409059113340">"Supprimer vos favoris Android"</string>
<string name="import_bookmarks_dialog_import" msgid="6933613853573899218">"Ajouter vos favoris Android à ceux de <xliff:g id="GOOGLE_ACCOUNT">%s</xliff:g>"</string>
- <!-- no translation found for menu_share_url (5851814357333739700) -->
+ <string name="menu_share_url" msgid="5851814357333739700">"Partagez"</string>
+ <!-- no translation found for max_tabs_warning (4122034303809457570) -->
<skip />
</resources>
diff --git a/res/values-hr/strings.xml b/res/values-hr/strings.xml
index b3581ab..4d1a72e 100644
--- a/res/values-hr/strings.xml
+++ b/res/values-hr/strings.xml
@@ -100,8 +100,8 @@
<string name="bookmark_cannot_save_url" msgid="791722768778386941">"Ovaj se URL ne može zabilježiti kao knjižna oznaka."</string>
<string name="delete_bookmark" msgid="2422989994934201992">"Izbriši"</string>
<string name="bookmark_page" msgid="6845189305130307274">"Označi posljednju prikazanu stranicu"</string>
- <!-- outdated translation 3104780739986130377 --> <string name="bookmark_thumbnail_view" msgid="3164068314718522138">"Prikaz sličice"</string>
- <!-- outdated translation 7394379479920174576 --> <string name="bookmark_list_view" msgid="7848510619500937839">"Prikaz popisa"</string>
+ <string name="bookmark_thumbnail_view" msgid="3164068314718522138">"Minijature"</string>
+ <string name="bookmark_list_view" msgid="7848510619500937839">"Popis"</string>
<string name="current_page" msgid="7510129573681663135">"s lokacije "</string>
<string name="delete_bookmark_warning" msgid="758043186202032205">"Oznaka \"<xliff:g id="BOOKMARK">%s</xliff:g>\" izbrisat će se."</string>
<string name="open_in_new_window" msgid="6596775546468054510">"Otvori u novom prozoru"</string>
@@ -391,6 +391,7 @@
<skip />
<!-- no translation found for import_bookmarks_dialog_import (6933613853573899218) -->
<skip />
- <!-- no translation found for menu_share_url (5851814357333739700) -->
+ <string name="menu_share_url" msgid="5851814357333739700">"Dijeli"</string>
+ <!-- no translation found for max_tabs_warning (4122034303809457570) -->
<skip />
</resources>
diff --git a/res/values-hu/strings.xml b/res/values-hu/strings.xml
index aa9bbfc..87af218 100644
--- a/res/values-hu/strings.xml
+++ b/res/values-hu/strings.xml
@@ -100,8 +100,8 @@
<string name="bookmark_cannot_save_url" msgid="791722768778386941">"Ezt az URL-t nem lehet a könyvjelzők közé tenni."</string>
<string name="delete_bookmark" msgid="2422989994934201992">"Törlés"</string>
<string name="bookmark_page" msgid="6845189305130307274">"Az utoljára megtekintett oldal felvétele a könyvjelzők közé"</string>
- <!-- outdated translation 3104780739986130377 --> <string name="bookmark_thumbnail_view" msgid="3164068314718522138">"Indexképek"</string>
- <!-- outdated translation 7394379479920174576 --> <string name="bookmark_list_view" msgid="7848510619500937839">"Lista"</string>
+ <string name="bookmark_thumbnail_view" msgid="3164068314718522138">"Indexképek"</string>
+ <string name="bookmark_list_view" msgid="7848510619500937839">"Lista"</string>
<string name="current_page" msgid="7510129573681663135">"innen: "</string>
<string name="delete_bookmark_warning" msgid="758043186202032205">"A(z) \"<xliff:g id="BOOKMARK">%s</xliff:g>\" könyvjelző törlésre kerül."</string>
<string name="open_in_new_window" msgid="6596775546468054510">"Megnyitás új ablakban"</string>
@@ -391,6 +391,7 @@
<skip />
<!-- no translation found for import_bookmarks_dialog_import (6933613853573899218) -->
<skip />
- <!-- no translation found for menu_share_url (5851814357333739700) -->
+ <string name="menu_share_url" msgid="5851814357333739700">"Megosztás"</string>
+ <!-- no translation found for max_tabs_warning (4122034303809457570) -->
<skip />
</resources>
diff --git a/res/values-in/strings.xml b/res/values-in/strings.xml
index 8d1537e..fa977f1 100644
--- a/res/values-in/strings.xml
+++ b/res/values-in/strings.xml
@@ -100,8 +100,8 @@
<string name="bookmark_cannot_save_url" msgid="791722768778386941">"URL ini tidak dapat di-bookmark."</string>
<string name="delete_bookmark" msgid="2422989994934201992">"Hapus"</string>
<string name="bookmark_page" msgid="6845189305130307274">"Bookmark laman yang terakhir dilihat."</string>
- <!-- outdated translation 3104780739986130377 --> <string name="bookmark_thumbnail_view" msgid="3164068314718522138">"Tampilan thumbnail"</string>
- <!-- outdated translation 7394379479920174576 --> <string name="bookmark_list_view" msgid="7848510619500937839">"Tampilan daftar"</string>
+ <string name="bookmark_thumbnail_view" msgid="3164068314718522138">"Thumbnail"</string>
+ <string name="bookmark_list_view" msgid="7848510619500937839">"Daftar"</string>
<string name="current_page" msgid="7510129573681663135">"dari "</string>
<string name="delete_bookmark_warning" msgid="758043186202032205">"Bookmark \"<xliff:g id="BOOKMARK">%s</xliff:g>\" akan dihapus."</string>
<string name="open_in_new_window" msgid="6596775546468054510">"Buka di jendela baru"</string>
@@ -391,6 +391,7 @@
<skip />
<!-- no translation found for import_bookmarks_dialog_import (6933613853573899218) -->
<skip />
- <!-- no translation found for menu_share_url (5851814357333739700) -->
+ <string name="menu_share_url" msgid="5851814357333739700">"Bagikan"</string>
+ <!-- no translation found for max_tabs_warning (4122034303809457570) -->
<skip />
</resources>
diff --git a/res/values-it/strings.xml b/res/values-it/strings.xml
index ac4100a..422b611 100644
--- a/res/values-it/strings.xml
+++ b/res/values-it/strings.xml
@@ -92,8 +92,8 @@
<string name="bookmark_cannot_save_url" msgid="791722768778386941">"L\'URL non può essere aggiunto ai segnalibri."</string>
<string name="delete_bookmark" msgid="2422989994934201992">"Elimina"</string>
<string name="bookmark_page" msgid="6845189305130307274">"Aggiungi ultima pagina visualizzata ai segnalibri"</string>
- <!-- outdated translation 3104780739986130377 --> <string name="bookmark_thumbnail_view" msgid="3164068314718522138">"Visualizzazione miniatura"</string>
- <!-- outdated translation 7394379479920174576 --> <string name="bookmark_list_view" msgid="7848510619500937839">"Visualizzazione elenco"</string>
+ <string name="bookmark_thumbnail_view" msgid="3164068314718522138">"Miniature"</string>
+ <string name="bookmark_list_view" msgid="7848510619500937839">"Elenco"</string>
<string name="current_page" msgid="7510129573681663135">"da "</string>
<string name="delete_bookmark_warning" msgid="758043186202032205">"Il segnalibro \"<xliff:g id="BOOKMARK">%s</xliff:g>\" verrà eliminato."</string>
<string name="open_in_new_window" msgid="6596775546468054510">"Apri in nuova finestra"</string>
@@ -347,6 +347,7 @@
<string name="import_bookmarks_dialog_description" msgid="2187665745413495303">"I tuoi Segnalibri Android non sono associati a un account Google"</string>
<string name="import_bookmarks_dialog_remove" msgid="8105572409059113340">"Rimuovi i tuoi Segnalibri Android"</string>
<string name="import_bookmarks_dialog_import" msgid="6933613853573899218">"Aggiungi i tuoi Segnalibri Android a quelli per <xliff:g id="GOOGLE_ACCOUNT">%s</xliff:g>"</string>
- <!-- no translation found for menu_share_url (5851814357333739700) -->
+ <string name="menu_share_url" msgid="5851814357333739700">"Condividi"</string>
+ <!-- no translation found for max_tabs_warning (4122034303809457570) -->
<skip />
</resources>
diff --git a/res/values-iw/strings.xml b/res/values-iw/strings.xml
index a09640a..dcb4314 100644
--- a/res/values-iw/strings.xml
+++ b/res/values-iw/strings.xml
@@ -100,8 +100,8 @@
<string name="bookmark_cannot_save_url" msgid="791722768778386941">"לא ניתן להפוך כתובת אתר זו לסימניה."</string>
<string name="delete_bookmark" msgid="2422989994934201992">"מחק"</string>
<string name="bookmark_page" msgid="6845189305130307274">"סמן בסימניה את הדף האחרון שהוצג"</string>
- <!-- outdated translation 3104780739986130377 --> <string name="bookmark_thumbnail_view" msgid="3164068314718522138">"תצוגת תמונה ממוזערת"</string>
- <!-- outdated translation 7394379479920174576 --> <string name="bookmark_list_view" msgid="7848510619500937839">"תצוגת רשימה"</string>
+ <string name="bookmark_thumbnail_view" msgid="3164068314718522138">"תמונות ממוזערות"</string>
+ <string name="bookmark_list_view" msgid="7848510619500937839">"רשימה"</string>
<string name="current_page" msgid="7510129573681663135">"מ "</string>
<string name="delete_bookmark_warning" msgid="758043186202032205">"הסימניה \"<xliff:g id="BOOKMARK">%s</xliff:g>\" תימחק."</string>
<string name="open_in_new_window" msgid="6596775546468054510">"פתח בחלון חדש"</string>
@@ -391,6 +391,7 @@
<skip />
<!-- no translation found for import_bookmarks_dialog_import (6933613853573899218) -->
<skip />
- <!-- no translation found for menu_share_url (5851814357333739700) -->
+ <string name="menu_share_url" msgid="5851814357333739700">"שתף"</string>
+ <!-- no translation found for max_tabs_warning (4122034303809457570) -->
<skip />
</resources>
diff --git a/res/values-ja/strings.xml b/res/values-ja/strings.xml
index 114aa0b..30ae18f 100644
--- a/res/values-ja/strings.xml
+++ b/res/values-ja/strings.xml
@@ -92,8 +92,8 @@
<string name="bookmark_cannot_save_url" msgid="791722768778386941">"このURLはブックマークに追加できません。"</string>
<string name="delete_bookmark" msgid="2422989994934201992">"削除"</string>
<string name="bookmark_page" msgid="6845189305130307274">"最後に表示したページをブックマークする"</string>
- <!-- outdated translation 3104780739986130377 --> <string name="bookmark_thumbnail_view" msgid="3164068314718522138">"サムネイル表示"</string>
- <!-- outdated translation 7394379479920174576 --> <string name="bookmark_list_view" msgid="7848510619500937839">"リスト表示"</string>
+ <string name="bookmark_thumbnail_view" msgid="3164068314718522138">"サムネイル"</string>
+ <string name="bookmark_list_view" msgid="7848510619500937839">"リスト"</string>
<string name="current_page" msgid="7510129573681663135">"URL "</string>
<string name="delete_bookmark_warning" msgid="758043186202032205">"ブックマーク「<xliff:g id="BOOKMARK">%s</xliff:g>」を削除します。"</string>
<string name="open_in_new_window" msgid="6596775546468054510">"新しいウィンドウで開く"</string>
@@ -347,6 +347,7 @@
<string name="import_bookmarks_dialog_description" msgid="2187665745413495303">"AndroidのブックマークはGoogleアカウントに関連付けられていません"</string>
<string name="import_bookmarks_dialog_remove" msgid="8105572409059113340">"Androidのブックマークを削除"</string>
<string name="import_bookmarks_dialog_import" msgid="6933613853573899218">"Androidのブックマークを<xliff:g id="GOOGLE_ACCOUNT">%s</xliff:g>のブックマークに追加"</string>
- <!-- no translation found for menu_share_url (5851814357333739700) -->
+ <string name="menu_share_url" msgid="5851814357333739700">"共有"</string>
+ <!-- no translation found for max_tabs_warning (4122034303809457570) -->
<skip />
</resources>
diff --git a/res/values-ko/strings.xml b/res/values-ko/strings.xml
index 5ca6fe7..894c93c 100644
--- a/res/values-ko/strings.xml
+++ b/res/values-ko/strings.xml
@@ -92,8 +92,8 @@
<string name="bookmark_cannot_save_url" msgid="791722768778386941">"URL을 북마크에 추가할 수 없습니다."</string>
<string name="delete_bookmark" msgid="2422989994934201992">"삭제"</string>
<string name="bookmark_page" msgid="6845189305130307274">"마지막으로 본 페이지를 북마크 설정"</string>
- <!-- outdated translation 3104780739986130377 --> <string name="bookmark_thumbnail_view" msgid="3164068314718522138">"미리보기 이미지 보기"</string>
- <!-- outdated translation 7394379479920174576 --> <string name="bookmark_list_view" msgid="7848510619500937839">"목록 보기"</string>
+ <string name="bookmark_thumbnail_view" msgid="3164068314718522138">"미리보기 이미지"</string>
+ <string name="bookmark_list_view" msgid="7848510619500937839">"목록"</string>
<string name="current_page" msgid="7510129573681663135">"북마크할 페이지 "</string>
<string name="delete_bookmark_warning" msgid="758043186202032205">"\'<xliff:g id="BOOKMARK">%s</xliff:g>\' 북마크가 삭제됩니다."</string>
<string name="open_in_new_window" msgid="6596775546468054510">"새 창에서 열기"</string>
@@ -347,6 +347,7 @@
<string name="import_bookmarks_dialog_description" msgid="2187665745413495303">"사용자의 Android 북마크는 Google 계정과 연결되지 않았습니다."</string>
<string name="import_bookmarks_dialog_remove" msgid="8105572409059113340">"Android 북마크 삭제"</string>
<string name="import_bookmarks_dialog_import" msgid="6933613853573899218">"<xliff:g id="GOOGLE_ACCOUNT">%s</xliff:g>에 대한 북마크에 Android 북마크 추가"</string>
- <!-- no translation found for menu_share_url (5851814357333739700) -->
+ <string name="menu_share_url" msgid="5851814357333739700">"공유"</string>
+ <!-- no translation found for max_tabs_warning (4122034303809457570) -->
<skip />
</resources>
diff --git a/res/values-lt/strings.xml b/res/values-lt/strings.xml
index 5b41cd5..d6dbe4f 100644
--- a/res/values-lt/strings.xml
+++ b/res/values-lt/strings.xml
@@ -100,8 +100,8 @@
<string name="bookmark_cannot_save_url" msgid="791722768778386941">"Negalima žymėti URL."</string>
<string name="delete_bookmark" msgid="2422989994934201992">"Ištrinti"</string>
<string name="bookmark_page" msgid="6845189305130307274">"Žymėti paskutinį peržiūrėtą puslapį"</string>
- <!-- outdated translation 3104780739986130377 --> <string name="bookmark_thumbnail_view" msgid="3164068314718522138">"Miniatiūros rodinys"</string>
- <!-- outdated translation 7394379479920174576 --> <string name="bookmark_list_view" msgid="7848510619500937839">"Sąrašo rodinys"</string>
+ <string name="bookmark_thumbnail_view" msgid="3164068314718522138">"Miniatiūros"</string>
+ <string name="bookmark_list_view" msgid="7848510619500937839">"Sąrašas"</string>
<string name="current_page" msgid="7510129573681663135">"nuo "</string>
<string name="delete_bookmark_warning" msgid="758043186202032205">"Žymė „<xliff:g id="BOOKMARK">%s</xliff:g>“ bus ištrinta."</string>
<string name="open_in_new_window" msgid="6596775546468054510">"Atidaryti naujame lange"</string>
@@ -391,6 +391,7 @@
<skip />
<!-- no translation found for import_bookmarks_dialog_import (6933613853573899218) -->
<skip />
- <!-- no translation found for menu_share_url (5851814357333739700) -->
+ <string name="menu_share_url" msgid="5851814357333739700">"Bendrinti"</string>
+ <!-- no translation found for max_tabs_warning (4122034303809457570) -->
<skip />
</resources>
diff --git a/res/values-lv/strings.xml b/res/values-lv/strings.xml
index 7b71f40..d41ee32 100644
--- a/res/values-lv/strings.xml
+++ b/res/values-lv/strings.xml
@@ -100,8 +100,8 @@
<string name="bookmark_cannot_save_url" msgid="791722768778386941">"Šo URL nevar atzīmēt ar grāmatzīmi."</string>
<string name="delete_bookmark" msgid="2422989994934201992">"Dzēst"</string>
<string name="bookmark_page" msgid="6845189305130307274">"Atzīmēt ar grāmatzīmi pēdējo skatīto lapu"</string>
- <!-- outdated translation 3104780739986130377 --> <string name="bookmark_thumbnail_view" msgid="3164068314718522138">"Sīktēlu skatījums"</string>
- <!-- outdated translation 7394379479920174576 --> <string name="bookmark_list_view" msgid="7848510619500937839">"Saraksta skatījums"</string>
+ <string name="bookmark_thumbnail_view" msgid="3164068314718522138">"Sīktēli"</string>
+ <string name="bookmark_list_view" msgid="7848510619500937839">"Saraksts"</string>
<string name="current_page" msgid="7510129573681663135">"no "</string>
<string name="delete_bookmark_warning" msgid="758043186202032205">"Grāmatzīme “<xliff:g id="BOOKMARK">%s</xliff:g>” tiks dzēsta."</string>
<string name="open_in_new_window" msgid="6596775546468054510">"Atvērt jaunā logā"</string>
@@ -391,6 +391,7 @@
<skip />
<!-- no translation found for import_bookmarks_dialog_import (6933613853573899218) -->
<skip />
- <!-- no translation found for menu_share_url (5851814357333739700) -->
+ <string name="menu_share_url" msgid="5851814357333739700">"Kopīgot"</string>
+ <!-- no translation found for max_tabs_warning (4122034303809457570) -->
<skip />
</resources>
diff --git a/res/values-nb/strings.xml b/res/values-nb/strings.xml
index 012698b..4447a54 100644
--- a/res/values-nb/strings.xml
+++ b/res/values-nb/strings.xml
@@ -92,8 +92,8 @@
<string name="bookmark_cannot_save_url" msgid="791722768778386941">"Kan ikke legge til et bokmerke for denne nettadressen."</string>
<string name="delete_bookmark" msgid="2422989994934201992">"Slett"</string>
<string name="bookmark_page" msgid="6845189305130307274">"Bokmerk sist viste side"</string>
- <!-- outdated translation 3104780739986130377 --> <string name="bookmark_thumbnail_view" msgid="3164068314718522138">"Miniatyrbildevisning"</string>
- <!-- outdated translation 7394379479920174576 --> <string name="bookmark_list_view" msgid="7848510619500937839">"Listevisning"</string>
+ <string name="bookmark_thumbnail_view" msgid="3164068314718522138">"Miniatyrbilder"</string>
+ <string name="bookmark_list_view" msgid="7848510619500937839">"Liste"</string>
<string name="current_page" msgid="7510129573681663135">"fra "</string>
<string name="delete_bookmark_warning" msgid="758043186202032205">"Bokmerket \"<xliff:g id="BOOKMARK">%s</xliff:g>\" vil bli slettet."</string>
<string name="open_in_new_window" msgid="6596775546468054510">"Åpne i nytt vindu"</string>
@@ -347,6 +347,7 @@
<string name="import_bookmarks_dialog_description" msgid="2187665745413495303">"Dine Android-bokmerker er ikke tilknyttet en Google-konto"</string>
<string name="import_bookmarks_dialog_remove" msgid="8105572409059113340">"Fjern Android-bokmerkene"</string>
<string name="import_bookmarks_dialog_import" msgid="6933613853573899218">"Legg til Android-bokmerker i bokmerker for <xliff:g id="GOOGLE_ACCOUNT">%s</xliff:g>"</string>
- <!-- no translation found for menu_share_url (5851814357333739700) -->
+ <string name="menu_share_url" msgid="5851814357333739700">"Del"</string>
+ <!-- no translation found for max_tabs_warning (4122034303809457570) -->
<skip />
</resources>
diff --git a/res/values-nl/strings.xml b/res/values-nl/strings.xml
index c582815..ab47265 100644
--- a/res/values-nl/strings.xml
+++ b/res/values-nl/strings.xml
@@ -92,8 +92,8 @@
<string name="bookmark_cannot_save_url" msgid="791722768778386941">"U kunt geen bladwijzer instellen voor deze URL."</string>
<string name="delete_bookmark" msgid="2422989994934201992">"Verwijderen"</string>
<string name="bookmark_page" msgid="6845189305130307274">"Bladwijzer voor laatst weergegeven pagina"</string>
- <!-- outdated translation 3104780739986130377 --> <string name="bookmark_thumbnail_view" msgid="3164068314718522138">"Miniatuurweergave"</string>
- <!-- outdated translation 7394379479920174576 --> <string name="bookmark_list_view" msgid="7848510619500937839">"Lijstweergave"</string>
+ <string name="bookmark_thumbnail_view" msgid="3164068314718522138">"Miniaturen"</string>
+ <string name="bookmark_list_view" msgid="7848510619500937839">"Lijst"</string>
<string name="current_page" msgid="7510129573681663135">"van "</string>
<string name="delete_bookmark_warning" msgid="758043186202032205">"Bladwijzer \'<xliff:g id="BOOKMARK">%s</xliff:g>\' wordt verwijderd."</string>
<string name="open_in_new_window" msgid="6596775546468054510">"Openen in een nieuw venster"</string>
@@ -347,6 +347,7 @@
<string name="import_bookmarks_dialog_description" msgid="2187665745413495303">"Uw Android-bladwijzers zijn niet gekoppeld aan een Google-account"</string>
<string name="import_bookmarks_dialog_remove" msgid="8105572409059113340">"Uw Android-bladwijzers verwijderen"</string>
<string name="import_bookmarks_dialog_import" msgid="6933613853573899218">"Uw Android-bladwijzers toevoegen aan bladwijzers voor <xliff:g id="GOOGLE_ACCOUNT">%s</xliff:g>"</string>
- <!-- no translation found for menu_share_url (5851814357333739700) -->
+ <string name="menu_share_url" msgid="5851814357333739700">"Delen"</string>
+ <!-- no translation found for max_tabs_warning (4122034303809457570) -->
<skip />
</resources>
diff --git a/res/values-pl/strings.xml b/res/values-pl/strings.xml
index b888b41..35c6c27 100644
--- a/res/values-pl/strings.xml
+++ b/res/values-pl/strings.xml
@@ -92,8 +92,8 @@
<string name="bookmark_cannot_save_url" msgid="791722768778386941">"Nie można dodać tego adresu URL do zakładek."</string>
<string name="delete_bookmark" msgid="2422989994934201992">"Usuń"</string>
<string name="bookmark_page" msgid="6845189305130307274">"Dodaj do zakładek ostatnio wyświetlaną stronę"</string>
- <!-- outdated translation 3104780739986130377 --> <string name="bookmark_thumbnail_view" msgid="3164068314718522138">"Widok miniatur"</string>
- <!-- outdated translation 7394379479920174576 --> <string name="bookmark_list_view" msgid="7848510619500937839">"Widok listy"</string>
+ <string name="bookmark_thumbnail_view" msgid="3164068314718522138">"Miniaturki"</string>
+ <string name="bookmark_list_view" msgid="7848510619500937839">"Lista"</string>
<string name="current_page" msgid="7510129573681663135">"z "</string>
<string name="delete_bookmark_warning" msgid="758043186202032205">"Zakładka „<xliff:g id="BOOKMARK">%s</xliff:g>” zostanie usunięta."</string>
<string name="open_in_new_window" msgid="6596775546468054510">"Otwórz w nowym oknie"</string>
@@ -347,6 +347,7 @@
<string name="import_bookmarks_dialog_description" msgid="2187665745413495303">"Zakładki w systemie Android nie są powiązane z kontem Google"</string>
<string name="import_bookmarks_dialog_remove" msgid="8105572409059113340">"Usuń zakładki w systemie Android"</string>
<string name="import_bookmarks_dialog_import" msgid="6933613853573899218">"Dodaj zakładki z systemu Android do zakładek na koncie <xliff:g id="GOOGLE_ACCOUNT">%s</xliff:g>"</string>
- <!-- no translation found for menu_share_url (5851814357333739700) -->
+ <string name="menu_share_url" msgid="5851814357333739700">"Udostępnij"</string>
+ <!-- no translation found for max_tabs_warning (4122034303809457570) -->
<skip />
</resources>
diff --git a/res/values-pt-rPT/strings.xml b/res/values-pt-rPT/strings.xml
index ee3c1ab..f62c9fb 100644
--- a/res/values-pt-rPT/strings.xml
+++ b/res/values-pt-rPT/strings.xml
@@ -92,8 +92,8 @@
<string name="bookmark_cannot_save_url" msgid="791722768778386941">"Este URL não pode ser adicionado aos marcadores."</string>
<string name="delete_bookmark" msgid="2422989994934201992">"Eliminar"</string>
<string name="bookmark_page" msgid="6845189305130307274">"Adicionar aos marcadores a última página visualizada"</string>
- <!-- outdated translation 3104780739986130377 --> <string name="bookmark_thumbnail_view" msgid="3164068314718522138">"Vista de miniatura"</string>
- <!-- outdated translation 7394379479920174576 --> <string name="bookmark_list_view" msgid="7848510619500937839">"Vista de lista"</string>
+ <string name="bookmark_thumbnail_view" msgid="3164068314718522138">"Miniaturas"</string>
+ <string name="bookmark_list_view" msgid="7848510619500937839">"Lista"</string>
<string name="current_page" msgid="7510129573681663135">"de "</string>
<string name="delete_bookmark_warning" msgid="758043186202032205">"O marcador \"<xliff:g id="BOOKMARK">%s</xliff:g>\" será eliminado."</string>
<string name="open_in_new_window" msgid="6596775546468054510">"Abrir numa janela nova"</string>
@@ -347,6 +347,7 @@
<string name="import_bookmarks_dialog_description" msgid="2187665745413495303">"Os seus marcadores do Android não estão associados a uma conta Google"</string>
<string name="import_bookmarks_dialog_remove" msgid="8105572409059113340">"Remover marcadores do Android"</string>
<string name="import_bookmarks_dialog_import" msgid="6933613853573899218">"Adicionar os seus marcadores do Android aos marcadores da <xliff:g id="GOOGLE_ACCOUNT">%s</xliff:g>"</string>
- <!-- no translation found for menu_share_url (5851814357333739700) -->
+ <string name="menu_share_url" msgid="5851814357333739700">"Partilhar"</string>
+ <!-- no translation found for max_tabs_warning (4122034303809457570) -->
<skip />
</resources>
diff --git a/res/values-pt/strings.xml b/res/values-pt/strings.xml
index 497aa9e..39147f3 100644
--- a/res/values-pt/strings.xml
+++ b/res/values-pt/strings.xml
@@ -92,8 +92,8 @@
<string name="bookmark_cannot_save_url" msgid="791722768778386941">"Este URL não pode ser adicionado como favorito."</string>
<string name="delete_bookmark" msgid="2422989994934201992">"Excluir"</string>
<string name="bookmark_page" msgid="6845189305130307274">"Adicionar última página visualizada aos favoritos"</string>
- <!-- outdated translation 3104780739986130377 --> <string name="bookmark_thumbnail_view" msgid="3164068314718522138">"Visualização em miniatura"</string>
- <!-- outdated translation 7394379479920174576 --> <string name="bookmark_list_view" msgid="7848510619500937839">"Visualização em lista"</string>
+ <string name="bookmark_thumbnail_view" msgid="3164068314718522138">"Miniaturas"</string>
+ <string name="bookmark_list_view" msgid="7848510619500937839">"Lista"</string>
<string name="current_page" msgid="7510129573681663135">"de "</string>
<string name="delete_bookmark_warning" msgid="758043186202032205">"O favorito \"<xliff:g id="BOOKMARK">%s</xliff:g>\" será excluído."</string>
<string name="open_in_new_window" msgid="6596775546468054510">"Abrir em uma nova janela"</string>
@@ -347,6 +347,7 @@
<string name="import_bookmarks_dialog_description" msgid="2187665745413495303">"Seus favoritos do Android não estão associados a uma Conta do Google"</string>
<string name="import_bookmarks_dialog_remove" msgid="8105572409059113340">"Remover os favoritos do Android"</string>
<string name="import_bookmarks_dialog_import" msgid="6933613853573899218">"Adicionar favoritos do Android aos favoritos de <xliff:g id="GOOGLE_ACCOUNT">%s</xliff:g>"</string>
- <!-- no translation found for menu_share_url (5851814357333739700) -->
+ <string name="menu_share_url" msgid="5851814357333739700">"Compartilhar"</string>
+ <!-- no translation found for max_tabs_warning (4122034303809457570) -->
<skip />
</resources>
diff --git a/res/values-rm/strings.xml b/res/values-rm/strings.xml
index 39e9d18..50680ee 100644
--- a/res/values-rm/strings.xml
+++ b/res/values-rm/strings.xml
@@ -404,4 +404,6 @@
<skip />
<!-- no translation found for menu_share_url (5851814357333739700) -->
<skip />
+ <!-- no translation found for max_tabs_warning (4122034303809457570) -->
+ <skip />
</resources>
diff --git a/res/values-ro/strings.xml b/res/values-ro/strings.xml
index bd89fc8..f28d3fc 100644
--- a/res/values-ro/strings.xml
+++ b/res/values-ro/strings.xml
@@ -100,8 +100,8 @@
<string name="bookmark_cannot_save_url" msgid="791722768778386941">"Această adresă URL nu poate fi marcată."</string>
<string name="delete_bookmark" msgid="2422989994934201992">"Ştergeţi"</string>
<string name="bookmark_page" msgid="6845189305130307274">"Marcaţi ultima pagină afişată"</string>
- <!-- outdated translation 3104780739986130377 --> <string name="bookmark_thumbnail_view" msgid="3164068314718522138">"Vizualizare miniaturi"</string>
- <!-- outdated translation 7394379479920174576 --> <string name="bookmark_list_view" msgid="7848510619500937839">"Afişare listă"</string>
+ <string name="bookmark_thumbnail_view" msgid="3164068314718522138">"Miniaturi"</string>
+ <string name="bookmark_list_view" msgid="7848510619500937839">"Listă"</string>
<string name="current_page" msgid="7510129573681663135">"din "</string>
<string name="delete_bookmark_warning" msgid="758043186202032205">"Marcajul „<xliff:g id="BOOKMARK">%s</xliff:g>” va fi şters."</string>
<string name="open_in_new_window" msgid="6596775546468054510">"Deschideţi într-o fereastră nouă"</string>
@@ -391,6 +391,7 @@
<skip />
<!-- no translation found for import_bookmarks_dialog_import (6933613853573899218) -->
<skip />
- <!-- no translation found for menu_share_url (5851814357333739700) -->
+ <string name="menu_share_url" msgid="5851814357333739700">"Distribuiţi"</string>
+ <!-- no translation found for max_tabs_warning (4122034303809457570) -->
<skip />
</resources>
diff --git a/res/values-ru/strings.xml b/res/values-ru/strings.xml
index e125d8b..6e7623b 100644
--- a/res/values-ru/strings.xml
+++ b/res/values-ru/strings.xml
@@ -92,8 +92,8 @@
<string name="bookmark_cannot_save_url" msgid="791722768778386941">"Невозможно добавить этот URL в закладки"</string>
<string name="delete_bookmark" msgid="2422989994934201992">"Удалить"</string>
<string name="bookmark_page" msgid="6845189305130307274">"Добавить в закладки последнюю просмотренную страницу"</string>
- <!-- outdated translation 3104780739986130377 --> <string name="bookmark_thumbnail_view" msgid="3164068314718522138">"Значки"</string>
- <!-- outdated translation 7394379479920174576 --> <string name="bookmark_list_view" msgid="7848510619500937839">"Список"</string>
+ <string name="bookmark_thumbnail_view" msgid="3164068314718522138">"Изображения"</string>
+ <string name="bookmark_list_view" msgid="7848510619500937839">"Список"</string>
<string name="current_page" msgid="7510129573681663135">"на "</string>
<string name="delete_bookmark_warning" msgid="758043186202032205">"Закладка \"<xliff:g id="BOOKMARK">%s</xliff:g>\" будет удалена."</string>
<string name="open_in_new_window" msgid="6596775546468054510">"Открыть в новом окне"</string>
@@ -347,6 +347,7 @@
<string name="import_bookmarks_dialog_description" msgid="2187665745413495303">"Закладки Android не связаны с аккаунтом Google"</string>
<string name="import_bookmarks_dialog_remove" msgid="8105572409059113340">"Удалить закладки Android"</string>
<string name="import_bookmarks_dialog_import" msgid="6933613853573899218">"Добавить закладки Android в аккаунт <xliff:g id="GOOGLE_ACCOUNT">%s</xliff:g>"</string>
- <!-- no translation found for menu_share_url (5851814357333739700) -->
+ <string name="menu_share_url" msgid="5851814357333739700">"Отправить"</string>
+ <!-- no translation found for max_tabs_warning (4122034303809457570) -->
<skip />
</resources>
diff --git a/res/values-sk/strings.xml b/res/values-sk/strings.xml
index 8b76d7a..1d9e5d4 100644
--- a/res/values-sk/strings.xml
+++ b/res/values-sk/strings.xml
@@ -100,8 +100,8 @@
<string name="bookmark_cannot_save_url" msgid="791722768778386941">"Túto adresu URL nemožno pridať do záložiek."</string>
<string name="delete_bookmark" msgid="2422989994934201992">"Odstrániť"</string>
<string name="bookmark_page" msgid="6845189305130307274">"Pridať poslednú zobrazenú stránku medzi záložky"</string>
- <!-- outdated translation 3104780739986130377 --> <string name="bookmark_thumbnail_view" msgid="3164068314718522138">"Zobraziť ako miniatúry"</string>
- <!-- outdated translation 7394379479920174576 --> <string name="bookmark_list_view" msgid="7848510619500937839">"Zobraziť zoznam"</string>
+ <string name="bookmark_thumbnail_view" msgid="3164068314718522138">"Miniatúry"</string>
+ <string name="bookmark_list_view" msgid="7848510619500937839">"Zoznam"</string>
<string name="current_page" msgid="7510129573681663135">"od "</string>
<string name="delete_bookmark_warning" msgid="758043186202032205">"Záložka <xliff:g id="BOOKMARK">%s</xliff:g> bude odstránená."</string>
<string name="open_in_new_window" msgid="6596775546468054510">"Otvoriť v novom okne"</string>
@@ -230,7 +230,7 @@
<!-- no translation found for autofill_profile_editor_delete_profile (2754563301088418752) -->
<skip />
<string name="autofill_setup_dialog_message" msgid="6605682320156223114">"Prehliadač dokáže automaticky vyplniť webové formuláre, ako je tento. Chcete nastaviť svoj profil?"</string>
- <string name="autofill_setup_dialog_negative_toast" msgid="4653039631354546610">"Funkciu Automatické dopĺňanie môžete nakonfigurovať po prejdení na položku Nastavenia prehliadača –> Osobné nastavenia."</string>
+ <string name="autofill_setup_dialog_negative_toast" msgid="4653039631354546610">"Funkciu Automatické dopĺňanie môžete nakonfigurovať prechodom na položku Nastavenia prehliadača –> Osobné nastavenia."</string>
<string name="pref_privacy_title" msgid="1052470980370846151">"Nastavenia ochrany osobných údajov"</string>
<string name="pref_privacy_clear_cache" msgid="3380316479925886998">"Vymazať medzipamäť"</string>
<string name="pref_privacy_clear_cache_summary" msgid="2216463577207991454">"Vymazať všetok obsah a databázy uložené do miestnej medzipamäte"</string>
@@ -391,6 +391,7 @@
<skip />
<!-- no translation found for import_bookmarks_dialog_import (6933613853573899218) -->
<skip />
- <!-- no translation found for menu_share_url (5851814357333739700) -->
+ <string name="menu_share_url" msgid="5851814357333739700">"Zdieľať"</string>
+ <!-- no translation found for max_tabs_warning (4122034303809457570) -->
<skip />
</resources>
diff --git a/res/values-sl/strings.xml b/res/values-sl/strings.xml
index 83fb5c5..c305498 100644
--- a/res/values-sl/strings.xml
+++ b/res/values-sl/strings.xml
@@ -100,8 +100,8 @@
<string name="bookmark_cannot_save_url" msgid="791722768778386941">"URL-ja ni mogoče označiti z zaznamkom."</string>
<string name="delete_bookmark" msgid="2422989994934201992">"Izbriši"</string>
<string name="bookmark_page" msgid="6845189305130307274">"Zaznamuj nazadnje ogledano stran"</string>
- <!-- outdated translation 3104780739986130377 --> <string name="bookmark_thumbnail_view" msgid="3164068314718522138">"Pogled sličic"</string>
- <!-- outdated translation 7394379479920174576 --> <string name="bookmark_list_view" msgid="7848510619500937839">"Pogled seznama"</string>
+ <string name="bookmark_thumbnail_view" msgid="3164068314718522138">"Sličice"</string>
+ <string name="bookmark_list_view" msgid="7848510619500937839">"Seznam"</string>
<string name="current_page" msgid="7510129573681663135">"od "</string>
<string name="delete_bookmark_warning" msgid="758043186202032205">"Zaznamek »<xliff:g id="BOOKMARK">%s</xliff:g>« bo izbrisan"</string>
<string name="open_in_new_window" msgid="6596775546468054510">"Odpri v novem oknu"</string>
@@ -391,6 +391,7 @@
<skip />
<!-- no translation found for import_bookmarks_dialog_import (6933613853573899218) -->
<skip />
- <!-- no translation found for menu_share_url (5851814357333739700) -->
+ <string name="menu_share_url" msgid="5851814357333739700">"Skupna raba"</string>
+ <!-- no translation found for max_tabs_warning (4122034303809457570) -->
<skip />
</resources>
diff --git a/res/values-sr/strings.xml b/res/values-sr/strings.xml
index 0a2901a..eda647c 100644
--- a/res/values-sr/strings.xml
+++ b/res/values-sr/strings.xml
@@ -42,7 +42,7 @@
<string name="ssl_continue" msgid="8031515015829358457">"Настави"</string>
<string name="security_warning" msgid="6607795404322797541">"Безбедносно упозорење"</string>
<string name="view_certificate" msgid="1472768887529093862">"Прикажи сертификат"</string>
- <string name="ssl_go_back" msgid="4598951822061593819">"Врати се"</string>
+ <string name="ssl_go_back" msgid="4598951822061593819">"Назад"</string>
<string name="ssl_untrusted" msgid="5369967226521102194">"Овај сертификат не потиче од поузданог ауторитета."</string>
<string name="ssl_mismatch" msgid="558688832420069896">"Назив сајта се не подудара са називом на сертификату."</string>
<string name="ssl_expired" msgid="5739349389499575559">"Овај сертификат је истекао."</string>
@@ -100,8 +100,8 @@
<string name="bookmark_cannot_save_url" msgid="791722768778386941">"Ова URL адреса не може да се обележи."</string>
<string name="delete_bookmark" msgid="2422989994934201992">"Брисање"</string>
<string name="bookmark_page" msgid="6845189305130307274">"Обележи последњу приказану страницу"</string>
- <!-- outdated translation 3104780739986130377 --> <string name="bookmark_thumbnail_view" msgid="3164068314718522138">"Приказ сличица"</string>
- <!-- outdated translation 7394379479920174576 --> <string name="bookmark_list_view" msgid="7848510619500937839">"Приказ листе"</string>
+ <string name="bookmark_thumbnail_view" msgid="3164068314718522138">"Сличице"</string>
+ <string name="bookmark_list_view" msgid="7848510619500937839">"Листа"</string>
<string name="current_page" msgid="7510129573681663135">"са "</string>
<string name="delete_bookmark_warning" msgid="758043186202032205">"Обележивач „<xliff:g id="BOOKMARK">%s</xliff:g>“ ће бити избрисан."</string>
<string name="open_in_new_window" msgid="6596775546468054510">"Отвори у новом прозору"</string>
@@ -230,7 +230,7 @@
<!-- no translation found for autofill_profile_editor_delete_profile (2754563301088418752) -->
<skip />
<string name="autofill_setup_dialog_message" msgid="6605682320156223114">"Прегледач може аутоматски да попуњава веб обрасце попут овог. Желите ли да подесите профил?"</string>
- <string name="autofill_setup_dialog_negative_toast" msgid="4653039631354546610">"Аутоматско попуњавање увек можете конфигурисати преко Подешавања прегледача – > Лична подешавања."</string>
+ <string name="autofill_setup_dialog_negative_toast" msgid="4653039631354546610">"Аутоматско попуњавање увек можете да конфигуришете преко Подешавања прегледача – > Лична подешавања."</string>
<string name="pref_privacy_title" msgid="1052470980370846151">"Подешавања приватности"</string>
<string name="pref_privacy_clear_cache" msgid="3380316479925886998">"Обриши кеш"</string>
<string name="pref_privacy_clear_cache_summary" msgid="2216463577207991454">"Брисање садржаја и база података из локалног кеша"</string>
@@ -391,6 +391,7 @@
<skip />
<!-- no translation found for import_bookmarks_dialog_import (6933613853573899218) -->
<skip />
- <!-- no translation found for menu_share_url (5851814357333739700) -->
+ <string name="menu_share_url" msgid="5851814357333739700">"Дели"</string>
+ <!-- no translation found for max_tabs_warning (4122034303809457570) -->
<skip />
</resources>
diff --git a/res/values-sv/strings.xml b/res/values-sv/strings.xml
index 11488e8..dfc0d12 100644
--- a/res/values-sv/strings.xml
+++ b/res/values-sv/strings.xml
@@ -92,8 +92,8 @@
<string name="bookmark_cannot_save_url" msgid="791722768778386941">"Det går inte att spara webbadressen som ett bokmärke"</string>
<string name="delete_bookmark" msgid="2422989994934201992">"Ta bort"</string>
<string name="bookmark_page" msgid="6845189305130307274">"Skapa bokmärke för den senast visade sidan"</string>
- <!-- outdated translation 3104780739986130377 --> <string name="bookmark_thumbnail_view" msgid="3164068314718522138">"Miniatyrvy"</string>
- <!-- outdated translation 7394379479920174576 --> <string name="bookmark_list_view" msgid="7848510619500937839">"Listvy"</string>
+ <string name="bookmark_thumbnail_view" msgid="3164068314718522138">"Miniatyrer"</string>
+ <string name="bookmark_list_view" msgid="7848510619500937839">"Lista"</string>
<string name="current_page" msgid="7510129573681663135">"från "</string>
<string name="delete_bookmark_warning" msgid="758043186202032205">"Bokmärket <xliff:g id="BOOKMARK">%s</xliff:g> tas bort."</string>
<string name="open_in_new_window" msgid="6596775546468054510">"Öppna i nytt fönster"</string>
@@ -347,6 +347,7 @@
<string name="import_bookmarks_dialog_description" msgid="2187665745413495303">"Dina Android-bokmärken har inte kopplats till något Google-konto"</string>
<string name="import_bookmarks_dialog_remove" msgid="8105572409059113340">"Ta bort dina Android-bokmärken"</string>
<string name="import_bookmarks_dialog_import" msgid="6933613853573899218">"Lägg till dina Android-bokmärken i bokmärkena för <xliff:g id="GOOGLE_ACCOUNT">%s</xliff:g>"</string>
- <!-- no translation found for menu_share_url (5851814357333739700) -->
+ <string name="menu_share_url" msgid="5851814357333739700">"Dela"</string>
+ <!-- no translation found for max_tabs_warning (4122034303809457570) -->
<skip />
</resources>
diff --git a/res/values-th/strings.xml b/res/values-th/strings.xml
index 41c6c9b..bb670bf 100644
--- a/res/values-th/strings.xml
+++ b/res/values-th/strings.xml
@@ -100,8 +100,8 @@
<string name="bookmark_cannot_save_url" msgid="791722768778386941">"ไม่สามารถบุ๊กมาร์ก URL นี้ได้"</string>
<string name="delete_bookmark" msgid="2422989994934201992">"ลบ"</string>
<string name="bookmark_page" msgid="6845189305130307274">"บุ๊กมาร์กหน้าที่เพิ่งดูล่าสุด"</string>
- <!-- outdated translation 3104780739986130377 --> <string name="bookmark_thumbnail_view" msgid="3164068314718522138">"มุมมองภาพขนาดย่อ"</string>
- <!-- outdated translation 7394379479920174576 --> <string name="bookmark_list_view" msgid="7848510619500937839">"มุมมองรายการ"</string>
+ <string name="bookmark_thumbnail_view" msgid="3164068314718522138">"ภาพขนาดย่อ"</string>
+ <string name="bookmark_list_view" msgid="7848510619500937839">"รายการ"</string>
<string name="current_page" msgid="7510129573681663135">"จาก "</string>
<string name="delete_bookmark_warning" msgid="758043186202032205">"บุ๊กมาร์ก \"<xliff:g id="BOOKMARK">%s</xliff:g>\" จะถูกลบ"</string>
<string name="open_in_new_window" msgid="6596775546468054510">"เปิดในหน้าต่างใหม่"</string>
@@ -391,6 +391,7 @@
<skip />
<!-- no translation found for import_bookmarks_dialog_import (6933613853573899218) -->
<skip />
- <!-- no translation found for menu_share_url (5851814357333739700) -->
+ <string name="menu_share_url" msgid="5851814357333739700">"แบ่งปัน"</string>
+ <!-- no translation found for max_tabs_warning (4122034303809457570) -->
<skip />
</resources>
diff --git a/res/values-tl/strings.xml b/res/values-tl/strings.xml
index df95c14..dcaed6c 100644
--- a/res/values-tl/strings.xml
+++ b/res/values-tl/strings.xml
@@ -100,8 +100,8 @@
<string name="bookmark_cannot_save_url" msgid="791722768778386941">"Hindi mabu-bookmark ang URL na ito."</string>
<string name="delete_bookmark" msgid="2422989994934201992">"Tanggalin"</string>
<string name="bookmark_page" msgid="6845189305130307274">"I-bookmark ang huling tiningnang pahina"</string>
- <!-- outdated translation 3104780739986130377 --> <string name="bookmark_thumbnail_view" msgid="3164068314718522138">"Thumbnail na view"</string>
- <!-- outdated translation 7394379479920174576 --> <string name="bookmark_list_view" msgid="7848510619500937839">"Listahang view"</string>
+ <string name="bookmark_thumbnail_view" msgid="3164068314718522138">"Mga Thumbnail"</string>
+ <string name="bookmark_list_view" msgid="7848510619500937839">"Listahan"</string>
<string name="current_page" msgid="7510129573681663135">"mula sa "</string>
<string name="delete_bookmark_warning" msgid="758043186202032205">"Tatanggalin ang bookmark na \"<xliff:g id="BOOKMARK">%s</xliff:g>\"."</string>
<string name="open_in_new_window" msgid="6596775546468054510">"Buksan sa bagong window"</string>
@@ -391,6 +391,7 @@
<skip />
<!-- no translation found for import_bookmarks_dialog_import (6933613853573899218) -->
<skip />
- <!-- no translation found for menu_share_url (5851814357333739700) -->
+ <string name="menu_share_url" msgid="5851814357333739700">"Ibahagi"</string>
+ <!-- no translation found for max_tabs_warning (4122034303809457570) -->
<skip />
</resources>
diff --git a/res/values-tr/strings.xml b/res/values-tr/strings.xml
index 1a29b90..ee0c650 100644
--- a/res/values-tr/strings.xml
+++ b/res/values-tr/strings.xml
@@ -92,8 +92,8 @@
<string name="bookmark_cannot_save_url" msgid="791722768778386941">"Bu URL yer işareti olarak eklenemez."</string>
<string name="delete_bookmark" msgid="2422989994934201992">"Sil"</string>
<string name="bookmark_page" msgid="6845189305130307274">"Son görüntülenen sayfayı favori olarak işaretle"</string>
- <!-- outdated translation 3104780739986130377 --> <string name="bookmark_thumbnail_view" msgid="3164068314718522138">"Küçük resim görünümü"</string>
- <!-- outdated translation 7394379479920174576 --> <string name="bookmark_list_view" msgid="7848510619500937839">"Liste görünümü"</string>
+ <string name="bookmark_thumbnail_view" msgid="3164068314718522138">"Küçük resimler"</string>
+ <string name="bookmark_list_view" msgid="7848510619500937839">"Liste"</string>
<string name="current_page" msgid="7510129573681663135">"kaynak: "</string>
<string name="delete_bookmark_warning" msgid="758043186202032205">"Favori \"<xliff:g id="BOOKMARK">%s</xliff:g>\" silinecek."</string>
<string name="open_in_new_window" msgid="6596775546468054510">"Yeni pencerede aç"</string>
@@ -347,6 +347,7 @@
<string name="import_bookmarks_dialog_description" msgid="2187665745413495303">"Android yer işaretleriniz bir Google hesabı ile ilişkilendirilmemiş"</string>
<string name="import_bookmarks_dialog_remove" msgid="8105572409059113340">"Android yer işaretlerinizi kaldırın"</string>
<string name="import_bookmarks_dialog_import" msgid="6933613853573899218">"Android yer işaretlerinizi <xliff:g id="GOOGLE_ACCOUNT">%s</xliff:g> yer işaretlerine ekleyin"</string>
- <!-- no translation found for menu_share_url (5851814357333739700) -->
+ <string name="menu_share_url" msgid="5851814357333739700">"Paylaş"</string>
+ <!-- no translation found for max_tabs_warning (4122034303809457570) -->
<skip />
</resources>
diff --git a/res/values-uk/strings.xml b/res/values-uk/strings.xml
index 0216c85..d98679e 100644
--- a/res/values-uk/strings.xml
+++ b/res/values-uk/strings.xml
@@ -100,8 +100,8 @@
<string name="bookmark_cannot_save_url" msgid="791722768778386941">"Закладка для цієї URL-адр. неможлива"</string>
<string name="delete_bookmark" msgid="2422989994934201992">"Видалити"</string>
<string name="bookmark_page" msgid="6845189305130307274">"Створ. закладку для ост. стор."</string>
- <!-- outdated translation 3104780739986130377 --> <string name="bookmark_thumbnail_view" msgid="3164068314718522138">"Перегляд ескізів"</string>
- <!-- outdated translation 7394379479920174576 --> <string name="bookmark_list_view" msgid="7848510619500937839">"Перегляд списку"</string>
+ <string name="bookmark_thumbnail_view" msgid="3164068314718522138">"Ескізи"</string>
+ <string name="bookmark_list_view" msgid="7848510619500937839">"Список"</string>
<string name="current_page" msgid="7510129573681663135">"з "</string>
<string name="delete_bookmark_warning" msgid="758043186202032205">"Закладку \"<xliff:g id="BOOKMARK">%s</xliff:g>\" буде видалено."</string>
<string name="open_in_new_window" msgid="6596775546468054510">"Відкрити в нов. вікні"</string>
@@ -230,7 +230,7 @@
<!-- no translation found for autofill_profile_editor_delete_profile (2754563301088418752) -->
<skip />
<string name="autofill_setup_dialog_message" msgid="6605682320156223114">"Веб-переглядач може автоматично заповнювати подібні веб-форми. Налаштувати ваш профіль?"</string>
- <string name="autofill_setup_dialog_negative_toast" msgid="4653039631354546610">"Автозаповнення можна завжди налаштувати за допомогою команд \"Налаштування веб-переглядача\" –> \"Персональні налаштування\"."</string>
+ <string name="autofill_setup_dialog_negative_toast" msgid="4653039631354546610">"Автозаповнення можна завжди налаштувати за допомогою меню \"Налаштування веб-переглядача\" –> \"Персональні налаштування\"."</string>
<string name="pref_privacy_title" msgid="1052470980370846151">"Налашт. конфіденц."</string>
<string name="pref_privacy_clear_cache" msgid="3380316479925886998">"Очистити кеш"</string>
<string name="pref_privacy_clear_cache_summary" msgid="2216463577207991454">"Очистити локально кешов. вміст і бази даних"</string>
@@ -391,6 +391,7 @@
<skip />
<!-- no translation found for import_bookmarks_dialog_import (6933613853573899218) -->
<skip />
- <!-- no translation found for menu_share_url (5851814357333739700) -->
+ <string name="menu_share_url" msgid="5851814357333739700">"Надіслати"</string>
+ <!-- no translation found for max_tabs_warning (4122034303809457570) -->
<skip />
</resources>
diff --git a/res/values-vi/strings.xml b/res/values-vi/strings.xml
index 92eaf44..6020e73 100644
--- a/res/values-vi/strings.xml
+++ b/res/values-vi/strings.xml
@@ -100,8 +100,8 @@
<string name="bookmark_cannot_save_url" msgid="791722768778386941">"Không thể đánh dấu URL này."</string>
<string name="delete_bookmark" msgid="2422989994934201992">"Xoá"</string>
<string name="bookmark_page" msgid="6845189305130307274">"Đánh dấu trang xem lần cuối"</string>
- <!-- outdated translation 3104780739986130377 --> <string name="bookmark_thumbnail_view" msgid="3164068314718522138">"Chế độ xem hình thu nhỏ"</string>
- <!-- outdated translation 7394379479920174576 --> <string name="bookmark_list_view" msgid="7848510619500937839">"Chế độ xem danh sách"</string>
+ <string name="bookmark_thumbnail_view" msgid="3164068314718522138">"Hình thu nhỏ"</string>
+ <string name="bookmark_list_view" msgid="7848510619500937839">"Danh sách"</string>
<string name="current_page" msgid="7510129573681663135">"từ "</string>
<string name="delete_bookmark_warning" msgid="758043186202032205">"Dấu trang \"<xliff:g id="BOOKMARK">%s</xliff:g>\" sẽ bị xoá."</string>
<string name="open_in_new_window" msgid="6596775546468054510">"Mở trong cửa sổ mới"</string>
@@ -391,6 +391,7 @@
<skip />
<!-- no translation found for import_bookmarks_dialog_import (6933613853573899218) -->
<skip />
- <!-- no translation found for menu_share_url (5851814357333739700) -->
+ <string name="menu_share_url" msgid="5851814357333739700">"Chia sẻ"</string>
+ <!-- no translation found for max_tabs_warning (4122034303809457570) -->
<skip />
</resources>
diff --git a/res/values-zh-rCN/strings.xml b/res/values-zh-rCN/strings.xml
index 9cd46aa..524454b 100644
--- a/res/values-zh-rCN/strings.xml
+++ b/res/values-zh-rCN/strings.xml
@@ -92,8 +92,8 @@
<string name="bookmark_cannot_save_url" msgid="791722768778386941">"无法将此网址添加到书签。"</string>
<string name="delete_bookmark" msgid="2422989994934201992">"删除"</string>
<string name="bookmark_page" msgid="6845189305130307274">"将上次查看过的网页加为书签"</string>
- <!-- outdated translation 3104780739986130377 --> <string name="bookmark_thumbnail_view" msgid="3164068314718522138">"缩略图视图"</string>
- <!-- outdated translation 7394379479920174576 --> <string name="bookmark_list_view" msgid="7848510619500937839">"列表视图"</string>
+ <string name="bookmark_thumbnail_view" msgid="3164068314718522138">"缩略图"</string>
+ <string name="bookmark_list_view" msgid="7848510619500937839">"列表"</string>
<string name="current_page" msgid="7510129573681663135">"来源 "</string>
<string name="delete_bookmark_warning" msgid="758043186202032205">"将会删除书签“<xliff:g id="BOOKMARK">%s</xliff:g>”。"</string>
<string name="open_in_new_window" msgid="6596775546468054510">"在新窗口中打开"</string>
@@ -347,6 +347,7 @@
<string name="import_bookmarks_dialog_description" msgid="2187665745413495303">"Android 书签尚未与 Google 帐户关联"</string>
<string name="import_bookmarks_dialog_remove" msgid="8105572409059113340">"删除 Android 书签"</string>
<string name="import_bookmarks_dialog_import" msgid="6933613853573899218">"将 Android 书签添加到 <xliff:g id="GOOGLE_ACCOUNT">%s</xliff:g> 的书签中"</string>
- <!-- no translation found for menu_share_url (5851814357333739700) -->
+ <string name="menu_share_url" msgid="5851814357333739700">"分享"</string>
+ <!-- no translation found for max_tabs_warning (4122034303809457570) -->
<skip />
</resources>
diff --git a/res/values-zh-rTW/strings.xml b/res/values-zh-rTW/strings.xml
index 7a977a8..775f8df 100644
--- a/res/values-zh-rTW/strings.xml
+++ b/res/values-zh-rTW/strings.xml
@@ -92,8 +92,8 @@
<string name="bookmark_cannot_save_url" msgid="791722768778386941">"無法將此網址加入書籤。"</string>
<string name="delete_bookmark" msgid="2422989994934201992">"刪除"</string>
<string name="bookmark_page" msgid="6845189305130307274">"將最後瀏覽的網頁加入書籤"</string>
- <!-- outdated translation 3104780739986130377 --> <string name="bookmark_thumbnail_view" msgid="3164068314718522138">"縮圖檢視"</string>
- <!-- outdated translation 7394379479920174576 --> <string name="bookmark_list_view" msgid="7848510619500937839">"清單檢視"</string>
+ <string name="bookmark_thumbnail_view" msgid="3164068314718522138">"縮圖"</string>
+ <string name="bookmark_list_view" msgid="7848510619500937839">"清單"</string>
<string name="current_page" msgid="7510129573681663135">"來源 "</string>
<string name="delete_bookmark_warning" msgid="758043186202032205">"刪除「<xliff:g id="BOOKMARK">%s</xliff:g>」書籤?"</string>
<string name="open_in_new_window" msgid="6596775546468054510">"在新視窗開啟"</string>
@@ -184,8 +184,8 @@
<string name="autofill_profile_successful_save" msgid="6834102203944938409">"設定檔已儲存"</string>
<string name="autofill_profile_successful_delete" msgid="2421442112954362732">"個人資料已刪除"</string>
<!-- outdated translation 7112035941146003753 --> <string name="autofill_profile_editor_delete_profile" msgid="2754563301088418752">"刪除設定檔資料"</string>
- <string name="autofill_setup_dialog_message" msgid="6605682320156223114">"瀏覽器可以自動填寫這類網路表單,您要設定您的個人資料嗎?"</string>
- <string name="autofill_setup_dialog_negative_toast" msgid="4653039631354546610">"自動填入功能可隨時透過 [瀏覽器設定] -> [個人設定] 加以設定。"</string>
+ <string name="autofill_setup_dialog_message" msgid="6605682320156223114">"瀏覽器可以自動填寫這類網路表單,您要建立個人資料嗎?"</string>
+ <string name="autofill_setup_dialog_negative_toast" msgid="4653039631354546610">"自動填入功能可隨時透過 [瀏覽器設定] -> [個人設定] 加以調整。"</string>
<string name="pref_privacy_title" msgid="1052470980370846151">"隱私設定"</string>
<string name="pref_privacy_clear_cache" msgid="3380316479925886998">"清除快取"</string>
<string name="pref_privacy_clear_cache_summary" msgid="2216463577207991454">"清除本機快取內容與資料庫"</string>
@@ -347,6 +347,7 @@
<string name="import_bookmarks_dialog_description" msgid="2187665745413495303">"您的 Android 書籤未與任何 Google 帳戶建立關聯"</string>
<string name="import_bookmarks_dialog_remove" msgid="8105572409059113340">"移除您的 Android 書籤"</string>
<string name="import_bookmarks_dialog_import" msgid="6933613853573899218">"將您的 Android 書籤新增至 <xliff:g id="GOOGLE_ACCOUNT">%s</xliff:g> 的書籤"</string>
- <!-- no translation found for menu_share_url (5851814357333739700) -->
+ <string name="menu_share_url" msgid="5851814357333739700">"分享"</string>
+ <!-- no translation found for max_tabs_warning (4122034303809457570) -->
<skip />
</resources>
diff --git a/res/values/colors.xml b/res/values/colors.xml
index 5a5d255..31a8458 100644
--- a/res/values/colors.xml
+++ b/res/values/colors.xml
@@ -29,4 +29,6 @@
<color name="bookmarkWidgetDivider">#383847</color>
<color name="bookmarkWidgetItemBackground">#2b2b3c</color>
<color name="bookmarkWidgetFolderBackground">#A0383847</color>
+ <color name="qc_slice_normal">#C0A0A0A0</color>
+ <color name="qc_slice_active">#C02090FF</color>
</resources>
diff --git a/res/values/dimensions.xml b/res/values/dimensions.xml
index 7cfa3f6..a4ab90a 100644
--- a/res/values/dimensions.xml
+++ b/res/values/dimensions.xml
@@ -28,4 +28,7 @@
<dimen name="widgetItemMinHeight">48dip</dimen>
<dimen name="favicon_size">16dip</dimen>
<dimen name="favicon_padded_size">20dip</dimen>
+ <dimen name="qc_radius">130dip</dimen>
+ <dimen name="qc_radius_inc">100dip</dimen>
+ <dimen name="qc_slop">15dip</dimen>
</resources>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 1c8b71c..383ac9c 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -590,6 +590,13 @@
<item>EUC-KR</item>
</string-array>
<string name="pref_default_text_encoding_default" translatable="false">Latin-1</string>
+ <!-- Title for lab settings [CHAR LIMIT=25] -->
+ <string name="pref_lab_title">Lab</string>
+ <!-- Title for lab quick controls feature [CHAR LIMIT=40] -->
+ <string name="pref_lab_quick_controls">Quick Controls</string>
+ <!-- Summary for lab quick controls feature [CHAR LIMIT=80] -->
+ <string name="pref_lab_quick_controls_summary">
+ Swipe thumb from left or right edge to access quick controls</string>
<!-- Title for a dialog displayed when the browser has a data connectivity
problem -->
<string name="browserFrameNetworkErrorLabel">Data connectivity problem</string>
diff --git a/res/xml/lab_preferences.xml b/res/xml/lab_preferences.xml
new file mode 100644
index 0000000..2168471
--- /dev/null
+++ b/res/xml/lab_preferences.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2008 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<PreferenceScreen
+ xmlns:android="http://schemas.android.com/apk/res/android" >
+
+ <CheckBoxPreference
+ android:key="enable_quick_controls"
+ android:defaultValue="false"
+ android:title="@string/pref_lab_quick_controls"
+ android:summary="@string/pref_lab_quick_controls_summary" />
+
+</PreferenceScreen>
diff --git a/res/xml/preference_headers.xml b/res/xml/preference_headers.xml
index 1a54990..8533a3a 100644
--- a/res/xml/preference_headers.xml
+++ b/res/xml/preference_headers.xml
@@ -35,4 +35,9 @@
<header android:fragment="com.android.browser.preferences.AdvancedPreferencesFragment"
android:title="@string/pref_extras_title"
/>
+
+ <header android:fragment="com.android.browser.preferences.LabPreferencesFragment"
+ android:title="@string/pref_lab_title"
+ />
+
</preference-headers>
diff --git a/src/com/android/browser/AddBookmarkPage.java b/src/com/android/browser/AddBookmarkPage.java
index 6e3f8bc..ecd038f 100644
--- a/src/com/android/browser/AddBookmarkPage.java
+++ b/src/com/android/browser/AddBookmarkPage.java
@@ -79,8 +79,6 @@
private static final int MAX_CRUMBS_SHOWN = 2;
private final String LOGTAG = "Bookmarks";
- // Set to true to see the crash on the code I would like to run.
- private final boolean DEBUG_CRASH = false;
// IDs for the CursorLoaders that are used.
private final int LOADER_ID_FOLDER_CONTENTS = 0;
@@ -489,18 +487,13 @@
@Override
protected void onCreate(Bundle icicle) {
super.onCreate(icicle);
- if (DEBUG_CRASH) {
- requestWindowFeature(Window.FEATURE_NO_TITLE);
- }
+ requestWindowFeature(Window.FEATURE_NO_TITLE);
mMap = getIntent().getExtras();
setContentView(R.layout.browser_add_bookmark);
Window window = getWindow();
- if (!DEBUG_CRASH) {
- setTitle("");
- }
String title = null;
String url = null;
diff --git a/src/com/android/browser/BaseUi.java b/src/com/android/browser/BaseUi.java
index f220e70..1e9038d 100644
--- a/src/com/android/browser/BaseUi.java
+++ b/src/com/android/browser/BaseUi.java
@@ -16,19 +16,15 @@
package com.android.browser;
-import android.app.ActionBar;
import android.app.Activity;
-import android.content.Context;
import android.content.res.Configuration;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
-import android.graphics.PixelFormat;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.text.TextUtils;
import android.util.Log;
-import android.view.ActionMode;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.Menu;
@@ -52,16 +48,16 @@
/**
* UI interface definitions
*/
-public class BaseUi implements UI, WebViewFactory {
+public abstract class BaseUi implements UI, WebViewFactory {
private static final String LOGTAG = "BaseUi";
- private static final FrameLayout.LayoutParams COVER_SCREEN_PARAMS =
+ protected static final FrameLayout.LayoutParams COVER_SCREEN_PARAMS =
new FrameLayout.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.MATCH_PARENT);
- private static final FrameLayout.LayoutParams COVER_SCREEN_GRAVITY_CENTER =
+ protected static final FrameLayout.LayoutParams COVER_SCREEN_GRAVITY_CENTER =
new FrameLayout.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.MATCH_PARENT,
@@ -76,13 +72,9 @@
private Drawable mSecLockIcon;
private Drawable mMixLockIcon;
- private boolean mXLargeScreenSize;
private FrameLayout mBrowserFrameLayout;
- private FrameLayout mContentView;
+ protected FrameLayout mContentView;
private FrameLayout mCustomViewContainer;
- private TitleBarBase mTitleBar;
- private TitleBarBase mFakeTitleBar;
- private TabBar mTabBar;
private View mCustomView;
private WebChromeClient.CustomViewCallback mCustomViewCallback;
@@ -92,16 +84,12 @@
private LinearLayout mErrorConsoleContainer = null;
private Toast mStopToast;
- private ActiveTabsPage mActiveTabsPage;
// the default <video> poster
private Bitmap mDefaultVideoPoster;
// the video progress view
private View mVideoProgressView;
- boolean mExtendedMenuOpen;
- boolean mOptionsMenuOpen;
-
private boolean mActivityPaused;
public BaseUi(Activity browser, UiController controller) {
@@ -114,11 +102,6 @@
mSecLockIcon = res.getDrawable(R.drawable.ic_secure);
mMixLockIcon = res.getDrawable(R.drawable.ic_partial_secure);
-
- mXLargeScreenSize = (res.getConfiguration().screenLayout
- & Configuration.SCREENLAYOUT_SIZE_MASK)
- == Configuration.SCREENLAYOUT_SIZE_XLARGE;
-
FrameLayout frameLayout = (FrameLayout) mActivity.getWindow()
.getDecorView().findViewById(android.R.id.content);
mBrowserFrameLayout = (FrameLayout) LayoutInflater.from(mActivity)
@@ -131,61 +114,23 @@
.findViewById(R.id.fullscreen_custom_content);
frameLayout.addView(mBrowserFrameLayout, COVER_SCREEN_PARAMS);
- if (mXLargeScreenSize) {
- mTitleBar = new TitleBarXLarge(mActivity, mUiController, this);
- mTitleBar.setProgress(100);
- mFakeTitleBar = new TitleBarXLarge(mActivity, mUiController, this);
- ActionBar actionBar = mActivity.getActionBar();
- mTabBar = new TabBar(mActivity, mUiController, this);
- actionBar.setCustomNavigationMode(mTabBar);
- } else {
- mTitleBar = new TitleBar(mActivity, mUiController);
- // mTitleBar will be always be shown in the fully loaded mode on
- // phone
- mTitleBar.setProgress(100);
- mFakeTitleBar = new TitleBar(mActivity, mUiController);
- }
}
- // webview factory
-
- @Override
- public WebView createWebView(boolean privateBrowsing) {
- // Create a new WebView
- ScrollWebView w = new ScrollWebView(mActivity, null,
- android.R.attr.webViewStyle, privateBrowsing);
+ /**
+ * common webview initialization
+ * @param w the webview to initialize
+ */
+ protected void initWebViewSettings(WebView w) {
w.setScrollbarFadingEnabled(true);
w.setScrollBarStyle(View.SCROLLBARS_OUTSIDE_OVERLAY);
w.setMapTrackballToArrowKeys(false); // use trackball directly
// Enable the built-in zoom
w.getSettings().setBuiltInZoomControls(true);
- if (mXLargeScreenSize) {
- w.setScrollListener(this);
- w.getSettings().setDisplayZoomControls(false);
- }
// Add this WebView to the settings observer list and update the
// settings
final BrowserSettings s = BrowserSettings.getInstance();
s.addObserver(w.getSettings()).update(s, null);
- return w;
- }
-
- @Override
- public WebView createSubWebView(boolean privateBrowsing) {
- ScrollWebView web = (ScrollWebView) createWebView(privateBrowsing);
- if (mXLargeScreenSize) {
- // no scroll listener for subview
- web.setScrollListener(null);
- }
- return web;
- }
-
- void stopWebViewScrolling() {
- ScrollWebView web = (ScrollWebView) mUiController.getCurrentWebView();
- if (web != null) {
- web.stopScroll();
- }
}
private void cancelStopToast() {
@@ -198,13 +143,6 @@
// lifecycle
public void onPause() {
- // FIXME: This removes the active tabs page and resets the menu to
- // MAIN_MENU. A better solution might be to do this work in onNewIntent
- // but then we would need to save it in onSaveInstanceState and restore
- // it in onCreate/onRestoreInstanceState
- if (mActiveTabsPage != null) {
- mUiController.removeActiveTabsPage(true);
- }
if (isCustomViewShowing()) {
onHideCustomView();
}
@@ -216,8 +154,8 @@
mActivityPaused = false;
}
- public void onDestroy() {
- hideFakeTitleBar();
+ protected boolean isActivityPaused() {
+ return mActivityPaused;
}
public void onConfigurationChanged(Configuration config) {
@@ -227,11 +165,6 @@
@Override
public boolean onBackKey() {
- if (mActiveTabsPage != null) {
- // if tab page is showing, hide it
- mUiController.removeActiveTabsPage(true);
- return true;
- }
if (mComboView != null) {
if (!mComboView.onBackPressed()) {
mUiController.removeComboView();
@@ -254,25 +187,15 @@
setUrlTitle(tab, url, null);
setFavicon(tab, favicon);
}
- if (mXLargeScreenSize) {
- mTabBar.onPageStarted(tab, url, favicon);
- }
}
@Override
public void bookmarkedStatusHasChanged(Tab tab) {
- if (tab.inForeground() && mXLargeScreenSize) {
- boolean isBookmark = tab.isBookmarkedSite();
- ((TitleBarXLarge) mTitleBar).setCurrentUrlIsBookmark(isBookmark);
- ((TitleBarXLarge) mFakeTitleBar).setCurrentUrlIsBookmark(isBookmark);
- }
+ // no op in base case
}
@Override
public void onPageFinished(Tab tab, String url) {
- if (mXLargeScreenSize) {
- mTabBar.onPageFinished(tab);
- }
if (tab.inForeground()) {
// Reset the title and icon in case we stopped a provisional load.
resetTitleAndIcon(tab);
@@ -292,34 +215,12 @@
}
@Override
- public void onProgressChanged(Tab tab, int progress) {
- if (mXLargeScreenSize) {
- mTabBar.onProgress(tab, progress);
- }
- if (tab.inForeground()) {
- mFakeTitleBar.setProgress(progress);
- if (progress == 100) {
- if (!mOptionsMenuOpen || !mExtendedMenuOpen) {
- hideFakeTitleBar();
- }
- } else {
- if (!mOptionsMenuOpen || mExtendedMenuOpen) {
- showFakeTitleBar();
- }
- }
- }
- }
-
- @Override
public boolean needsRestoreAllTabs() {
- return mXLargeScreenSize;
+ return false;
}
@Override
public void addTab(Tab tab) {
- if (mXLargeScreenSize) {
- mTabBar.onNewTab(tab);
- }
}
@Override
@@ -330,35 +231,14 @@
mActiveTab = tab;
attachTabToContentView(tab);
setShouldShowErrorConsole(tab, mUiController.shouldShowErrorConsole());
+ }
- WebView view = tab.getWebView();
- // TabControl.setCurrentTab has been called before this,
- // so the tab is guaranteed to have a webview
- if (view == null) {
- Log.e(LOGTAG, "active tab with no webview detected");
- return;
- }
- view.setEmbeddedTitleBar(mTitleBar);
- if (tab.isInVoiceSearchMode()) {
- showVoiceTitleBar(tab.getVoiceDisplayTitle());
- } else {
- revertVoiceTitleBar(tab);
- }
-
- if (mXLargeScreenSize) {
- // Request focus on the top window.
- mTabBar.onSetActiveTab(tab);
- }
- resetTitleIconAndProgress(tab);
- updateLockIconToLatest(tab);
- tab.getTopWindow().requestFocus();
+ Tab getActiveTab() {
+ return mActiveTab;
}
@Override
public void updateTabs(List<Tab> tabs) {
- if (mXLargeScreenSize) {
- mTabBar.updateTabs(tabs);
- }
}
@Override
@@ -367,9 +247,6 @@
removeTabFromContentView(tab);
mActiveTab = null;
}
- if (mXLargeScreenSize) {
- mTabBar.onRemoveTab(tab);
- }
}
@Override
@@ -508,21 +385,8 @@
mContentView.addView(container, COVER_SCREEN_PARAMS);
}
- int getTitleBarWidth() {
- if (mTitleBar != null) {
- return mTitleBar.getWidth();
- }
- return 0;
- }
-
- void editUrl(boolean clearInput) {
- showFakeTitleBar();
- ((TitleBarXLarge) mFakeTitleBar).onEditUrl(clearInput);
- }
-
void showFakeTitleBar() {
- if (!isFakeTitleBarShowing() && mActiveTabsPage == null &&
- !mActivityPaused) {
+ if (!isFakeTitleBarShowing() && !isActivityPaused()) {
WebView mainView = mUiController.getCurrentWebView();
// if there is no current WebView, don't show the faked title bar;
if (mainView == null) {
@@ -535,68 +399,49 @@
// (i.e. find or select) is showing.
return;
}
- if (mXLargeScreenSize) {
- mContentView.addView(mFakeTitleBar);
- mTabBar.onShowTitleBar();
- } else {
- WindowManager manager = (WindowManager)
- mActivity.getSystemService(Context.WINDOW_SERVICE);
-
- // Add the title bar to the window manager so it can receive
- // touches
- // while the menu is up
- WindowManager.LayoutParams params =
- new WindowManager.LayoutParams(
- ViewGroup.LayoutParams.MATCH_PARENT,
- ViewGroup.LayoutParams.WRAP_CONTENT,
- WindowManager.LayoutParams.TYPE_APPLICATION,
- WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,
- PixelFormat.TRANSLUCENT);
- params.gravity = Gravity.TOP;
- boolean atTop = mainView.getScrollY() == 0;
- params.windowAnimations = atTop ? 0 : R.style.TitleBar;
- manager.addView(mFakeTitleBar, params);
- }
+ attachFakeTitleBar(mainView);
}
}
- void hideFakeTitleBar() {
- if (!isFakeTitleBarShowing()) return;
- if (mXLargeScreenSize) {
- mContentView.removeView(mFakeTitleBar);
- mTabBar.onHideTitleBar();
- } else {
- WindowManager.LayoutParams params =
- (WindowManager.LayoutParams) mFakeTitleBar.getLayoutParams();
- WebView mainView = mUiController.getCurrentWebView();
- // Although we decided whether or not to animate based on the
- // current
- // scroll position, the scroll position may have changed since the
- // fake title bar was displayed. Make sure it has the appropriate
- // animation/lack thereof before removing.
- params.windowAnimations =
- mainView != null && mainView.getScrollY() == 0 ?
- 0 : R.style.TitleBar;
- WindowManager manager = (WindowManager) mActivity
- .getSystemService(Context.WINDOW_SERVICE);
- manager.updateViewLayout(mFakeTitleBar, params);
- manager.removeView(mFakeTitleBar);
- }
+ protected abstract void attachFakeTitleBar(WebView mainView);
+
+ protected abstract void hideFakeTitleBar();
+
+ protected abstract boolean isFakeTitleBarShowing();
+
+ protected abstract TitleBarBase getFakeTitleBar();
+
+ protected abstract TitleBarBase getEmbeddedTitleBar();
+
+ @Override
+ public void showVoiceTitleBar(String title) {
+ getEmbeddedTitleBar().setInVoiceMode(true);
+ getEmbeddedTitleBar().setDisplayTitle(title);
+ getFakeTitleBar().setInVoiceMode(true);
+ getFakeTitleBar().setDisplayTitle(title);
}
- boolean isFakeTitleBarShowing() {
- return (mFakeTitleBar.getParent() != null);
+ @Override
+ public void revertVoiceTitleBar(Tab tab) {
+ getEmbeddedTitleBar().setInVoiceMode(false);
+ String url = tab.getCurrentUrl();
+ getEmbeddedTitleBar().setDisplayTitle(url);
+ getFakeTitleBar().setInVoiceMode(false);
+ getFakeTitleBar().setDisplayTitle(url);
}
@Override
public void showComboView(boolean startWithHistory, Bundle extras) {
+ if (mComboView != null) {
+ return;
+ }
mComboView = new CombinedBookmarkHistoryView(mActivity,
mUiController,
startWithHistory ?
CombinedBookmarkHistoryView.FRAGMENT_ID_HISTORY
: CombinedBookmarkHistoryView.FRAGMENT_ID_BOOKMARKS,
extras);
- mTitleBar.setVisibility(View.GONE);
+ getEmbeddedTitleBar().setVisibility(View.GONE);
hideFakeTitleBar();
dismissIME();
if (mActiveTab != null) {
@@ -613,7 +458,7 @@
public void hideComboView() {
if (mComboView != null) {
mContentView.removeView(mComboView);
- mTitleBar.setVisibility(View.VISIBLE);
+ getEmbeddedTitleBar().setVisibility(View.VISIBLE);
mComboView = null;
}
if (mActiveTab != null) {
@@ -664,30 +509,19 @@
return mCustomView != null;
}
- @Override
- public void showVoiceTitleBar(String title) {
- mTitleBar.setInVoiceMode(true);
- mTitleBar.setDisplayTitle(title);
- mFakeTitleBar.setInVoiceMode(true);
- mFakeTitleBar.setDisplayTitle(title);
- }
-
- @Override
- public void revertVoiceTitleBar(Tab tab) {
- mTitleBar.setInVoiceMode(false);
- String url = tab.getCurrentUrl();
- mTitleBar.setDisplayTitle(url);
- mFakeTitleBar.setInVoiceMode(false);
- mFakeTitleBar.setDisplayTitle(url);
- }
-
- private void dismissIME() {
+ protected void dismissIME() {
if (mInputManager.isActive()) {
mInputManager.hideSoftInputFromWindow(mContentView.getWindowToken(),
0);
}
}
+ @Override
+ public boolean showsWeb() {
+ return mCustomView == null
+ && mComboView == null;
+ }
+
// -------------------------------------------------------------------------
@Override
@@ -710,7 +544,7 @@
/**
* Update the lock icon to correspond to our latest state.
*/
- private void updateLockIconToLatest(Tab t) {
+ protected void updateLockIconToLatest(Tab t) {
if (t != null) {
updateLockIconImage(t.getLockIconType());
}
@@ -719,7 +553,7 @@
/**
* Reset the title, favicon, and progress.
*/
- private void resetTitleIconAndProgress(Tab tab) {
+ protected void resetTitleIconAndProgress(Tab tab) {
WebView current = tab.getWebView();
if (current == null) {
return;
@@ -759,38 +593,27 @@
} else if (lockIconType == Tab.LOCK_ICON_MIXED) {
d = mMixLockIcon;
}
- mTitleBar.setLock(d);
- mFakeTitleBar.setLock(d);
+ getEmbeddedTitleBar().setLock(d);
+ getFakeTitleBar().setLock(d);
}
- // active tabs page
-
- public void showActiveTabsPage() {
- mActiveTabsPage = new ActiveTabsPage(mActivity, mUiController);
- mTitleBar.setVisibility(View.GONE);
- hideFakeTitleBar();
- mContentView.addView(mActiveTabsPage, COVER_SCREEN_PARAMS);
- mActiveTabsPage.requestFocus();
- }
-
- /**
- * Remove the active tabs page.
- */
- public void removeActiveTabsPage() {
- mContentView.removeView(mActiveTabsPage);
- mTitleBar.setVisibility(View.VISIBLE);
- mActiveTabsPage = null;
- }
-
- // action mode callbacks
-
@Override
- public void onActionModeStarted(ActionMode mode) {
- if (!mXLargeScreenSize
- || !((TitleBarXLarge) mFakeTitleBar).isEditingUrl()) {
- // hide the fake title bar when CAB is shown
- hideFakeTitleBar();
+ public void setUrlTitle(Tab tab, String url, String title) {
+ if (TextUtils.isEmpty(title)) {
+ title = url;
}
+ if (tab.isInVoiceSearchMode()) return;
+ if (tab.inForeground()) {
+ getEmbeddedTitleBar().setDisplayTitle(url);
+ getFakeTitleBar().setDisplayTitle(url);
+ }
+ }
+
+ // Set the favicon in the title bar.
+ @Override
+ public void setFavicon(Tab tab, Bitmap icon) {
+ getEmbeddedTitleBar().setFavicon(icon);
+ getFakeTitleBar().setFavicon(icon);
}
@Override
@@ -802,56 +625,41 @@
}
}
+ // active tabs page
+
+ public void showActiveTabsPage() {
+ }
+
+ /**
+ * Remove the active tabs page.
+ */
+ public void removeActiveTabsPage() {
+ }
+
// menu handling callbacks
@Override
public void onOptionsMenuOpened() {
- mOptionsMenuOpen = true;
- // options menu opened, show fake title bar
- showFakeTitleBar();
}
@Override
public void onExtendedMenuOpened() {
- // Switching the menu to expanded view, so hide the
- // title bar.
- mExtendedMenuOpen = true;
- hideFakeTitleBar();
}
@Override
public void onOptionsMenuClosed(boolean inLoad) {
- mOptionsMenuOpen = false;
- if (!inLoad) {
- hideFakeTitleBar();
- }
}
@Override
public void onExtendedMenuClosed(boolean inLoad) {
- mExtendedMenuOpen = false;
- if (inLoad) {
- showFakeTitleBar();
- }
}
@Override
public void onContextMenuCreated(Menu menu) {
- hideFakeTitleBar();
}
@Override
public void onContextMenuClosed(Menu menu, boolean inLoad) {
- if (inLoad) {
- showFakeTitleBar();
- }
- }
-
- @Override
- public void onScroll(int visibleTitleHeight) {
- if (mTabBar != null) {
- mTabBar.onScroll(visibleTitleHeight);
- }
}
// error console
@@ -887,41 +695,9 @@
}
@Override
- public void setUrlTitle(Tab tab, String url, String title) {
- if (TextUtils.isEmpty(title)) {
- title = url;
- }
- if (tab.isInVoiceSearchMode()) return;
- if (tab.inForeground()) {
- mTitleBar.setDisplayTitle(url);
- mFakeTitleBar.setDisplayTitle(url);
- }
- if (mXLargeScreenSize) {
- mTabBar.onUrlAndTitle(tab, url, title);
- }
- }
-
- // Set the favicon in the title bar.
- @Override
- public void setFavicon(Tab tab, Bitmap icon) {
- mTitleBar.setFavicon(icon);
- mFakeTitleBar.setFavicon(icon);
- if (mXLargeScreenSize) {
- mTabBar.onFavicon(tab, icon);
- }
- }
- @Override
- public boolean showsWeb() {
- return mCustomView == null && mActiveTabsPage == null
- && mComboView == null;
- }
-
- @Override
public void onPrepareOptionsMenu(Menu menu) {
- if (!mXLargeScreenSize) {
- final MenuItem newtab = menu.findItem(R.id.new_tab_menu_id);
- newtab.setEnabled(mUiController.getTabControl().canCreateNewTab());
- }
+ final MenuItem newtab = menu.findItem(R.id.new_tab_menu_id);
+ newtab.setEnabled(mUiController.getTabControl().canCreateNewTab());
}
// -------------------------------------------------------------------------
diff --git a/src/com/android/browser/BrowserActivity.java b/src/com/android/browser/BrowserActivity.java
index 7c0f7c8..ba5ba29 100644
--- a/src/com/android/browser/BrowserActivity.java
+++ b/src/com/android/browser/BrowserActivity.java
@@ -39,6 +39,8 @@
public class BrowserActivity extends Activity {
+ public static final String ACTION_SHOW_BOOKMARKS = "show_bookmarks";
+ public static final String ACTION_SHOW_BROWSER = "show_browser";
public static final String ACTION_RESTART = "--restart--";
private static final String EXTRA_STATE = "state";
@@ -93,7 +95,14 @@
}
mController = new Controller(this);
- mUi = new BaseUi(this, mController);
+ boolean xlarge = (getResources().getConfiguration().screenLayout
+ & Configuration.SCREENLAYOUT_SIZE_MASK)
+ == Configuration.SCREENLAYOUT_SIZE_XLARGE;
+ if (xlarge) {
+ mUi = new XLargeUi(this, mController);
+ } else {
+ mUi = new PhoneUi(this, mController);
+ }
mController.setUi(mUi);
mController.setWebViewFactory((BaseUi) mUi);
diff --git a/src/com/android/browser/BrowserBookmarksAdapter.java b/src/com/android/browser/BrowserBookmarksAdapter.java
index f587f01..c680a88 100644
--- a/src/com/android/browser/BrowserBookmarksAdapter.java
+++ b/src/com/android/browser/BrowserBookmarksAdapter.java
@@ -81,7 +81,7 @@
tv.setText(cursor.getString(BookmarksLoader.COLUMN_INDEX_TITLE));
if (cursor.getInt(BookmarksLoader.COLUMN_INDEX_IS_FOLDER) != 0) {
// folder
- favicon.setImageResource(R.drawable.ic_folder);
+ favicon.setImageResource(R.drawable.ic_folder_bookmark_widget_holo_dark);
} else {
byte[] faviconData = cursor.getBlob(BookmarksLoader.COLUMN_INDEX_FAVICON);
Bitmap faviconBitmap = null;
diff --git a/src/com/android/browser/BrowserBookmarksPage.java b/src/com/android/browser/BrowserBookmarksPage.java
index c030915..c39218c 100644
--- a/src/com/android/browser/BrowserBookmarksPage.java
+++ b/src/com/android/browser/BrowserBookmarksPage.java
@@ -369,7 +369,7 @@
if (isFolder) {
item.setUrl(null);
Bitmap bitmap =
- BitmapFactory.decodeResource(getResources(), R.drawable.ic_folder);
+ BitmapFactory.decodeResource(getResources(), R.drawable.ic_folder_bookmark_widget_holo_dark);
item.setFavicon(bitmap);
new LookupBookmarkCount(getActivity(), item)
.execute(cursor.getLong(BookmarksLoader.COLUMN_INDEX_ID));
@@ -472,6 +472,7 @@
}
mCrumbs.setController(null);
mCrumbs = null;
+ getLoaderManager().stopLoader(LOADER_BOOKMARKS);
}
@Override
diff --git a/src/com/android/browser/BrowserHistoryPage.java b/src/com/android/browser/BrowserHistoryPage.java
index 18feee9..c623012 100644
--- a/src/com/android/browser/BrowserHistoryPage.java
+++ b/src/com/android/browser/BrowserHistoryPage.java
@@ -209,8 +209,8 @@
mEmptyView = root.findViewById(android.R.id.empty);
// Start the loader
- getLoaderManager().initLoader(LOADER_HISTORY, null, this);
- getLoaderManager().initLoader(LOADER_MOST_VISITED, null, this);
+ getLoaderManager().restartLoader(LOADER_HISTORY, null, this);
+ getLoaderManager().restartLoader(LOADER_MOST_VISITED, null, this);
// Register to receive icons in case they haven't all been loaded.
CombinedBookmarkHistoryView.getIconListenerSet().addListener(mIconReceiver);
diff --git a/src/com/android/browser/BrowserSettings.java b/src/com/android/browser/BrowserSettings.java
index 1f091e2..1b8acc6 100644
--- a/src/com/android/browser/BrowserSettings.java
+++ b/src/com/android/browser/BrowserSettings.java
@@ -117,6 +117,9 @@
private boolean navDump = false;
private boolean hardwareAccelerated = true;
+ // Lab settings
+ private boolean quickControls = false;
+
// By default the error console is shown once the user navigates to about:debug.
// The setting can be then toggled from the settings menu.
private boolean showConsole = true;
@@ -167,6 +170,8 @@
public final static String PREF_HARDWARE_ACCEL = "enable_hardware_accel";
public final static String PREF_USER_AGENT = "user_agent";
+ public final static String PREF_QUICK_CONTROLS = "enable_quick_controls";
+
private static final String DESKTOP_USERAGENT = "Mozilla/5.0 (Macintosh; " +
"U; Intel Mac OS X 10_6_3; en-us) AppleWebKit/533.16 (KHTML, " +
"like Gecko) Version/5.0 Safari/533.16";
@@ -490,6 +495,8 @@
navDump = p.getBoolean("enable_nav_dump", navDump);
}
+ quickControls = p.getBoolean(PREF_QUICK_CONTROLS, quickControls);
+
// Only set these on startup if it is a dev build
if (DEV_BUILD) {
userAgent = Integer.parseInt(p.getString(PREF_USER_AGENT, "0"));
@@ -573,6 +580,10 @@
return hardwareAccelerated;
}
+ public boolean useQuickControls() {
+ return quickControls;
+ }
+
public boolean showDebugSettings() {
return showDebugSettings;
}
@@ -836,6 +847,8 @@
} else if (PREF_USER_AGENT.equals(key)) {
userAgent = Integer.parseInt(p.getString(PREF_USER_AGENT, "0"));
update();
+ } else if (PREF_QUICK_CONTROLS.equals(key)) {
+ quickControls = p.getBoolean(PREF_QUICK_CONTROLS, quickControls);
}
}
}
diff --git a/src/com/android/browser/CombinedBookmarkHistoryView.java b/src/com/android/browser/CombinedBookmarkHistoryView.java
index e63d126..cc56489 100644
--- a/src/com/android/browser/CombinedBookmarkHistoryView.java
+++ b/src/com/android/browser/CombinedBookmarkHistoryView.java
@@ -43,7 +43,6 @@
interface BookmarksHistoryCallbacks {
public void onUrlSelected(String url, boolean newWindow);
public void onRemoveParentChildRelationships();
- public void onComboCanceled();
}
public class CombinedBookmarkHistoryView extends LinearLayout
diff --git a/src/com/android/browser/Controller.java b/src/com/android/browser/Controller.java
index 422fdff..8483efa 100644
--- a/src/com/android/browser/Controller.java
+++ b/src/com/android/browser/Controller.java
@@ -36,7 +36,6 @@
import android.database.ContentObserver;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
-import android.database.sqlite.SQLiteException;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Picture;
@@ -51,10 +50,10 @@
import android.preference.PreferenceActivity;
import android.provider.Browser;
import android.provider.BrowserContract;
-import android.provider.BrowserContract.History;
import android.provider.BrowserContract.Images;
import android.provider.ContactsContract;
import android.provider.ContactsContract.Intents.Insert;
+import android.speech.RecognizerIntent;
import android.speech.RecognizerResultsIntent;
import android.text.TextUtils;
import android.util.Log;
@@ -94,6 +93,9 @@
implements WebViewController, UiController {
private static final String LOGTAG = "Controller";
+ private static final String SEND_APP_ID_EXTRA =
+ "android.speech.extras.SEND_APPLICATION_ID_EXTRA";
+
// public message ids
public final static int LOAD_URL = 1001;
@@ -316,6 +318,9 @@
if (jsFlags.trim().length() != 0) {
getCurrentWebView().setJsFlags(jsFlags);
}
+ if (BrowserActivity.ACTION_SHOW_BOOKMARKS.equals(intent.getAction())) {
+ bookmarksOrHistoryPicker(false);
+ }
}
void setWebViewFactory(WebViewFactory factory) {
@@ -429,6 +434,8 @@
{
String url = (String) msg.getData().get("url");
String title = (String) msg.getData().get("title");
+ String src = (String) msg.getData().get("src");
+ if (url == "") url = src; // use image if no anchor
if (TextUtils.isEmpty(url)) {
break;
}
@@ -440,9 +447,11 @@
}
switch (msg.arg1) {
case R.id.open_context_menu_id:
- case R.id.view_image_context_menu_id:
loadUrlFromContext(getCurrentTopWebView(), url);
break;
+ case R.id.view_image_context_menu_id:
+ loadUrlFromContext(getCurrentTopWebView(), src);
+ break;
case R.id.open_newtab_context_menu_id:
final Tab parent = mTabControl.getCurrentTab();
final Tab newTab = openTab(parent, url, false);
@@ -1009,6 +1018,16 @@
null, false);
}
+ public void startVoiceSearch() {
+ Intent intent = new Intent(RecognizerIntent.ACTION_WEB_SEARCH);
+ intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL,
+ RecognizerIntent.LANGUAGE_MODEL_WEB_SEARCH);
+ intent.putExtra(RecognizerIntent.EXTRA_CALLING_PACKAGE,
+ mActivity.getComponentName().flattenToString());
+ intent.putExtra(SEND_APP_ID_EXTRA, false);
+ mActivity.startActivity(intent);
+ }
+
public void activateVoiceSearchMode(String title) {
mUi.showVoiceTitleBar(title);
}
@@ -1119,14 +1138,6 @@
}
/**
- * callback from ComboPage when dismissed
- */
- @Override
- public void onComboCanceled() {
- removeComboView();
- }
-
- /**
* dismiss the ComboPage
*/
@Override
@@ -1447,12 +1458,6 @@
// if main menu option is selected
removeComboView();
}
- // check the action bar button before mCanChord check, as the prepare call
- // doesn't come for action bar buttons
- if (item.getItemId() == R.id.newtab) {
- openTabToHomePage();
- return true;
- }
if (!mCanChord) {
// The user has already fired a shortcut with this hold down of the
// menu key.
diff --git a/src/com/android/browser/IntentHandler.java b/src/com/android/browser/IntentHandler.java
index cbbc482..bd5595f 100644
--- a/src/com/android/browser/IntentHandler.java
+++ b/src/com/android/browser/IntentHandler.java
@@ -84,6 +84,14 @@
// just resume the browser
return;
}
+ if (BrowserActivity.ACTION_SHOW_BOOKMARKS.equals(action)) {
+ mController.bookmarksOrHistoryPicker(false);
+ return;
+ }
+ if (BrowserActivity.ACTION_SHOW_BROWSER.equals(action)) {
+ mController.removeComboView();
+ return;
+ }
// In case the SearchDialog is open.
((SearchManager) mActivity.getSystemService(Context.SEARCH_SERVICE))
.stopSearch();
diff --git a/src/com/android/browser/PhoneUi.java b/src/com/android/browser/PhoneUi.java
new file mode 100644
index 0000000..e35e624
--- /dev/null
+++ b/src/com/android/browser/PhoneUi.java
@@ -0,0 +1,273 @@
+/*
+ * Copyright (C) 2010 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.browser;
+
+import android.app.Activity;
+import android.content.Context;
+import android.graphics.PixelFormat;
+import android.util.Log;
+import android.view.ActionMode;
+import android.view.Gravity;
+import android.view.Menu;
+import android.view.View;
+import android.view.ViewGroup;
+import android.view.WindowManager;
+import android.webkit.WebView;
+
+/**
+ * Ui for regular phone screen sizes
+ */
+public class PhoneUi extends BaseUi {
+
+ private static final String LOGTAG = "PhoneUi";
+
+ private TitleBar mTitleBar;
+ private TitleBar mFakeTitleBar;
+ private ActiveTabsPage mActiveTabsPage;
+
+ boolean mExtendedMenuOpen;
+ boolean mOptionsMenuOpen;
+
+ /**
+ * @param browser
+ * @param controller
+ */
+ public PhoneUi(Activity browser, UiController controller) {
+ super(browser, controller);
+ mTitleBar = new TitleBar(mActivity, mUiController);
+ // mTitleBar will be always be shown in the fully loaded mode on
+ // phone
+ mTitleBar.setProgress(100);
+ mFakeTitleBar = new TitleBar(mActivity, mUiController);
+
+ }
+
+ // webview factory
+
+ @Override
+ public WebView createWebView(boolean privateBrowsing) {
+ // Create a new WebView
+ WebView w = new WebView(mActivity, null,
+ android.R.attr.webViewStyle, privateBrowsing);
+ initWebViewSettings(w);
+ return w;
+ }
+
+ @Override
+ public WebView createSubWebView(boolean privateBrowsing) {
+ WebView web = createWebView(privateBrowsing);
+ return web;
+ }
+
+ // lifecycle
+
+ @Override
+ public void onPause() {
+ // FIXME: This removes the active tabs page and resets the menu to
+ // MAIN_MENU. A better solution might be to do this work in onNewIntent
+ // but then we would need to save it in onSaveInstanceState and restore
+ // it in onCreate/onRestoreInstanceState
+ if (mActiveTabsPage != null) {
+ mUiController.removeActiveTabsPage(true);
+ }
+ super.onPause();
+ }
+
+ @Override
+ public void onDestroy() {
+ hideFakeTitleBar();
+ }
+
+ @Override
+ public boolean onBackKey() {
+ if (mActiveTabsPage != null) {
+ // if tab page is showing, hide it
+ mUiController.removeActiveTabsPage(true);
+ return true;
+ }
+ return super.onBackKey();
+ }
+
+ @Override
+ public void onProgressChanged(Tab tab, int progress) {
+ if (tab.inForeground()) {
+ mFakeTitleBar.setProgress(progress);
+ if (progress == 100) {
+ if (!mOptionsMenuOpen || !mExtendedMenuOpen) {
+ hideFakeTitleBar();
+ }
+ } else {
+ if (!mOptionsMenuOpen || mExtendedMenuOpen) {
+ showFakeTitleBar();
+ }
+ }
+ }
+ }
+
+ @Override
+ public void setActiveTab(Tab tab) {
+ super.setActiveTab(tab);
+ WebView view = tab.getWebView();
+ // TabControl.setCurrentTab has been called before this,
+ // so the tab is guaranteed to have a webview
+ if (view == null) {
+ Log.e(LOGTAG, "active tab with no webview detected");
+ return;
+ }
+ view.setEmbeddedTitleBar(getEmbeddedTitleBar());
+ if (tab.isInVoiceSearchMode()) {
+ showVoiceTitleBar(tab.getVoiceDisplayTitle());
+ } else {
+ revertVoiceTitleBar(tab);
+ }
+ resetTitleIconAndProgress(tab);
+ updateLockIconToLatest(tab);
+ tab.getTopWindow().requestFocus();
+ }
+
+ @Override
+ protected void attachFakeTitleBar(WebView mainView) {
+ WindowManager manager = (WindowManager)
+ mActivity.getSystemService(Context.WINDOW_SERVICE);
+
+ // Add the title bar to the window manager so it can receive
+ // touches while the menu is up
+ WindowManager.LayoutParams params =
+ new WindowManager.LayoutParams(
+ ViewGroup.LayoutParams.MATCH_PARENT,
+ ViewGroup.LayoutParams.WRAP_CONTENT,
+ WindowManager.LayoutParams.TYPE_APPLICATION,
+ WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,
+ PixelFormat.TRANSLUCENT);
+ params.gravity = Gravity.TOP;
+ boolean atTop = mainView.getScrollY() == 0;
+ params.windowAnimations = atTop ? 0 : R.style.TitleBar;
+ manager.addView(mFakeTitleBar, params);
+ }
+
+ @Override
+ protected void hideFakeTitleBar() {
+ if (!isFakeTitleBarShowing()) return;
+ WindowManager.LayoutParams params =
+ (WindowManager.LayoutParams) mFakeTitleBar.getLayoutParams();
+ WebView mainView = mUiController.getCurrentWebView();
+ // Although we decided whether or not to animate based on the
+ // current
+ // scroll position, the scroll position may have changed since the
+ // fake title bar was displayed. Make sure it has the appropriate
+ // animation/lack thereof before removing.
+ params.windowAnimations =
+ mainView != null && mainView.getScrollY() == 0 ?
+ 0 : R.style.TitleBar;
+ WindowManager manager = (WindowManager) mActivity
+ .getSystemService(Context.WINDOW_SERVICE);
+ manager.updateViewLayout(mFakeTitleBar, params);
+ manager.removeView(mFakeTitleBar);
+ }
+
+ @Override
+ protected boolean isFakeTitleBarShowing() {
+ return (mFakeTitleBar.getParent() != null);
+ }
+
+ @Override
+ protected TitleBarBase getFakeTitleBar() {
+ return mFakeTitleBar;
+ }
+
+ @Override
+ protected TitleBarBase getEmbeddedTitleBar() {
+ return mTitleBar;
+ }
+
+ // active tabs page
+
+ @Override
+ public void showActiveTabsPage() {
+ mActiveTabsPage = new ActiveTabsPage(mActivity, mUiController);
+ mTitleBar.setVisibility(View.GONE);
+ hideFakeTitleBar();
+ mContentView.addView(mActiveTabsPage, COVER_SCREEN_PARAMS);
+ mActiveTabsPage.requestFocus();
+ }
+
+ /**
+ * Remove the active tabs page.
+ */
+ @Override
+ public void removeActiveTabsPage() {
+ mContentView.removeView(mActiveTabsPage);
+ mTitleBar.setVisibility(View.VISIBLE);
+ mActiveTabsPage = null;
+ }
+
+ @Override
+ public boolean showsWeb() {
+ return super.showsWeb() && mActiveTabsPage == null;
+ }
+
+ // menu handling callbacks
+
+ @Override
+ public void onOptionsMenuOpened() {
+ mOptionsMenuOpen = true;
+ // options menu opened, show fake title bar
+ showFakeTitleBar();
+ }
+
+ @Override
+ public void onExtendedMenuOpened() {
+ // Switching the menu to expanded view, so hide the
+ // title bar.
+ mExtendedMenuOpen = true;
+ hideFakeTitleBar();
+ }
+
+ @Override
+ public void onOptionsMenuClosed(boolean inLoad) {
+ mOptionsMenuOpen = false;
+ if (!inLoad) {
+ hideFakeTitleBar();
+ }
+ }
+
+ @Override
+ public void onExtendedMenuClosed(boolean inLoad) {
+ mExtendedMenuOpen = false;
+ showFakeTitleBar();
+ }
+
+ @Override
+ public void onContextMenuCreated(Menu menu) {
+ hideFakeTitleBar();
+ }
+
+ @Override
+ public void onContextMenuClosed(Menu menu, boolean inLoad) {
+ if (inLoad) {
+ showFakeTitleBar();
+ }
+ }
+
+ // action mode callbacks
+
+ @Override
+ public void onActionModeStarted(ActionMode mode) {
+ hideFakeTitleBar();
+ }
+
+}
diff --git a/src/com/android/browser/PieControl.java b/src/com/android/browser/PieControl.java
new file mode 100644
index 0000000..210e9ea
--- /dev/null
+++ b/src/com/android/browser/PieControl.java
@@ -0,0 +1,151 @@
+/*
+ * Copyright (C) 2010 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.browser;
+
+import com.android.browser.view.PieMenu;
+
+import android.app.Activity;
+import android.view.View;
+import android.view.View.OnClickListener;
+import android.view.ViewGroup.LayoutParams;
+import android.webkit.WebView;
+import android.widget.FrameLayout;
+import android.widget.ImageView;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * controller for Quick Controls pie menu
+ */
+public class PieControl implements OnClickListener, PieMenu.PieController {
+
+ private Activity mActivity;
+ private UiController mUiController;
+ private XLargeUi mUi;
+ private PieMenu mPie;
+ private ImageView mBack;
+ private ImageView mForward;
+ private ImageView mRefresh;
+ private ImageView mUrl;
+ private ImageView mOptions;
+ private ImageView mBookmarks;
+ private ImageView mNewTab;
+ private ImageView mClose;
+
+ private Map<View,Tab> mTabItems;
+
+ boolean mNewTabMode = true;
+
+ public PieControl(Activity activity, UiController controller, XLargeUi ui) {
+ mActivity = activity;
+ mUiController = controller;
+ mUi = ui;
+ mTabItems = new HashMap<View, Tab>();
+ }
+
+ protected void attachToContainer(FrameLayout container) {
+ if (mPie == null) {
+ mPie = new PieMenu(mActivity);
+ LayoutParams lp = new LayoutParams(LayoutParams.MATCH_PARENT,
+ LayoutParams.MATCH_PARENT);
+ mPie.setLayoutParams(lp);
+ mForward = makeMenuView(R.drawable.ic_pie_forward);
+ mPie.addItem(mForward);
+ mRefresh = makeMenuView(R.drawable.ic_pie_refresh);
+ mPie.addItem(mRefresh);
+ mBack = makeMenuView(R.drawable.ic_pie_back);
+ mPie.addItem(mBack);
+ mUrl = makeMenuView(R.drawable.ic_pie_search);
+ mPie.addItem(mUrl);
+ mBookmarks = makeMenuView(R.drawable.ic_pie_bookmarks);
+ mPie.addItem(mBookmarks);
+ mNewTab = makeMenuView(R.drawable.ic_pie_new_tab);
+ mPie.addItem(mNewTab);
+ mOptions = makeMenuView(R.drawable.ic_pie_more);
+ mPie.addItem(mOptions);
+ setClickListener(mBack, mForward, mRefresh, mUrl, mOptions,
+ mBookmarks, mNewTab);
+ mPie.setController(this);
+ }
+ container.addView(mPie);
+ }
+
+ protected void removeFromContainer(FrameLayout container) {
+ container.removeView(mPie);
+ }
+
+ private ImageView makeMenuView(int image) {
+ ImageView item = new ImageView(mActivity);
+ item.setImageResource(image);
+ LayoutParams lp = new LayoutParams(48, 48);
+ item.setLayoutParams(lp);
+ return item;
+ }
+
+ private void setClickListener(View... views) {
+ for (View view : views) {
+ view.setOnClickListener(this);
+ }
+ }
+
+ protected void forceToTop(FrameLayout container) {
+ if (mPie.getParent() != null) {
+ container.removeView(mPie);
+ container.addView(mPie);
+ }
+ }
+
+ @Override
+ public void onClick(View v) {
+ mPie.show(false);
+ Tab tab = mUiController.getTabControl().getCurrentTab();
+ WebView web = tab.getWebView();
+ if (mBack == v) {
+ web.goBack();
+ } else if (mForward == v) {
+ web.goForward();
+ } else if (mRefresh == v) {
+ if (tab.inPageLoad()) {
+ web.stopLoading();
+ } else {
+ web.reload();
+ }
+ } else if (mUrl == v) {
+ mUi.showFakeTitleBarAndEdit();
+ } else if (mOptions == v) {
+ mActivity.openOptionsMenu();
+ } else if (mBookmarks == v) {
+ mUiController.bookmarksOrHistoryPicker(false);
+ } else if (mNewTab == v) {
+ mUiController.openTabToHomePage();
+ } else if (mClose == v) {
+ mUiController.closeCurrentTab();
+ } else {
+ Tab ntab = mTabItems.get(v);
+ if (ntab != null) {
+ mUiController.switchToTab(mUiController.getTabControl().getTabIndex(ntab));
+ }
+ }
+ }
+
+ @Override
+ public boolean onOpen() {
+ return true;
+ }
+
+}
diff --git a/src/com/android/browser/SuggestionsAdapter.java b/src/com/android/browser/SuggestionsAdapter.java
index 6473dfd..260da6e 100644
--- a/src/com/android/browser/SuggestionsAdapter.java
+++ b/src/com/android/browser/SuggestionsAdapter.java
@@ -23,7 +23,6 @@
import android.database.Cursor;
import android.net.Uri;
import android.os.AsyncTask;
-import android.os.Handler;
import android.provider.BrowserContract;
import android.text.TextUtils;
import android.view.LayoutInflater;
@@ -69,6 +68,7 @@
int mLinesPortrait;
int mLinesLandscape;
Object mResultsLock = new Object();
+ List<String> mVoiceResults;
interface CompletionListener {
@@ -92,6 +92,11 @@
addSource(new CombinedCursor());
}
+ void setVoiceResults(List<String> voiceResults) {
+ mVoiceResults = voiceResults;
+ notifyDataSetChanged();
+ }
+
public void setLandscapeMode(boolean mode) {
mLandscapeMode = mode;
notifyDataSetChanged();
@@ -132,11 +137,18 @@
@Override
public int getCount() {
+ if (mVoiceResults != null) {
+ return mVoiceResults.size();
+ }
return (mMixedResults == null) ? 0 : mMixedResults.getLineCount();
}
@Override
public SuggestItem getItem(int position) {
+ if (mVoiceResults != null) {
+ return new SuggestItem(mVoiceResults.get(position), null,
+ TYPE_SEARCH);
+ }
if (mMixedResults == null) {
return null;
}
@@ -176,7 +188,7 @@
View s1 = view.findViewById(R.id.suggest1);
View s2 = view.findViewById(R.id.suggest2);
View div = view.findViewById(R.id.suggestion_divider);
- if (mLandscapeMode) {
+ if (mLandscapeMode && (mVoiceResults == null)) {
SuggestItem item = getItem(position);
div.setVisibility(View.VISIBLE);
if (item != null) {
@@ -310,25 +322,30 @@
@Override
protected FilterResults performFiltering(CharSequence constraint) {
FilterResults res = new FilterResults();
- if (TextUtils.isEmpty(constraint)) {
- res.count = 0;
- res.values = null;
- return res;
- }
- startSuggestionsAsync(constraint);
- List<SuggestItem> filterResults = new ArrayList<SuggestItem>();
- if (constraint != null) {
- for (CursorSource sc : mSources) {
- sc.runQuery(constraint);
+ if (mVoiceResults == null) {
+ if (TextUtils.isEmpty(constraint)) {
+ res.count = 0;
+ res.values = null;
+ return res;
}
- mixResults(filterResults);
+ startSuggestionsAsync(constraint);
+ List<SuggestItem> filterResults = new ArrayList<SuggestItem>();
+ if (constraint != null) {
+ for (CursorSource sc : mSources) {
+ sc.runQuery(constraint);
+ }
+ mixResults(filterResults);
+ }
+ synchronized (mResultsLock) {
+ mFilterResults = filterResults;
+ }
+ SuggestionResults mixed = buildSuggestionResults();
+ res.count = mixed.getLineCount();
+ res.values = mixed;
+ } else {
+ res.count = mVoiceResults.size();
+ res.values = mVoiceResults;
}
- synchronized (mResultsLock) {
- mFilterResults = filterResults;
- }
- SuggestionResults mixed = buildSuggestionResults();
- res.count = mixed.getLineCount();
- res.values = mixed;
return res;
}
@@ -348,8 +365,10 @@
@Override
protected void publishResults(CharSequence constraint, FilterResults fresults) {
- mMixedResults = (SuggestionResults) fresults.values;
- mListener.onFilterComplete(fresults.count);
+ if (fresults.values instanceof SuggestionResults) {
+ mMixedResults = (SuggestionResults) fresults.values;
+ mListener.onFilterComplete(fresults.count);
+ }
notifyDataSetChanged();
}
diff --git a/src/com/android/browser/TabBar.java b/src/com/android/browser/TabBar.java
index 7969955..ea734a6 100644
--- a/src/com/android/browser/TabBar.java
+++ b/src/com/android/browser/TabBar.java
@@ -25,7 +25,6 @@
import android.graphics.BitmapShader;
import android.graphics.Canvas;
import android.graphics.Color;
-import android.graphics.LinearGradient;
import android.graphics.Paint;
import android.graphics.Path;
import android.graphics.Shader;
@@ -60,7 +59,7 @@
private Activity mActivity;
private UiController mUiController;
private TabControl mTabControl;
- private BaseUi mUi;
+ private XLargeUi mUi;
private final int mTabWidthSelected;
private final int mTabWidthUnselected;
@@ -89,8 +88,9 @@
private int mTabOverlap;
private int mTabSliceWidth;
private int mTabPadding;
+ private boolean mUseQuickControls;
- public TabBar(Activity activity, UiController controller, BaseUi ui) {
+ public TabBar(Activity activity, UiController controller, XLargeUi ui) {
super(activity);
mActivity = activity;
mUiController = controller;
@@ -140,6 +140,14 @@
mShaderPaint.setAntiAlias(true);
}
+ void setUseQuickControls(boolean useQuickControls) {
+ mUseQuickControls = useQuickControls;
+ }
+
+ int getTabCount() {
+ return mTabMap.size();
+ }
+
void updateTabs(List<Tab> tabs) {
mTabs.clearTabs();
mTabMap.clear();
@@ -183,6 +191,7 @@
if (mNewTab == view) {
mUiController.openTabToHomePage();
} else if (mTabs.getSelectedTab() == view) {
+ if (mUseQuickControls) return;
if (mUi.isFakeTitleBarShowing() && !isLoading()) {
mUi.hideFakeTitleBar();
} else {
@@ -203,7 +212,7 @@
mUserRequestedUrlbar = true;
}
- private void showTitleBarIndicator(boolean show) {
+ void showTitleBarIndicator(boolean show) {
Tab tab = mTabControl.getCurrentTab();
if (tab != null) {
TabViewData tvd = mTabMap.get(tab);
@@ -230,9 +239,10 @@
@Override
public void onScroll(int visibleTitleHeight) {
+ if (mUseQuickControls) return;
// isLoading is using the current tab, which initially might not be set yet
if (mTabControl.getCurrentTab() != null) {
- if ((mVisibleTitleHeight > 0) && (visibleTitleHeight == 0)
+ if ((mVisibleTitleHeight != 0) && (visibleTitleHeight == 0)
&& !isLoading()) {
if (mUserRequestedUrlbar) {
mUi.hideFakeTitleBar();
@@ -320,7 +330,11 @@
}
void showIndicator(boolean show) {
- mIndicator.setVisibility(show ? View.VISIBLE : View.GONE);
+ if (mSelected) {
+ mIndicator.setVisibility(show ? View.VISIBLE : View.GONE);
+ } else {
+ mIndicator.setVisibility(View.GONE);
+ }
}
@Override
@@ -356,6 +370,7 @@
public void setActivated(boolean selected) {
mSelected = selected;
mClose.setVisibility(mSelected ? View.VISIBLE : View.GONE);
+ mIndicator.setVisibility(View.GONE);
mTitle.setTextAppearance(mActivity, mSelected ?
R.style.TabTitleSelected : R.style.TabTitleUnselected);
setHorizontalFadingEdgeEnabled(!mSelected);
@@ -413,7 +428,7 @@
int[] pos = new int[2];
getLocationInWindow(mWindowPos);
Drawable drawable = mSelected ? mActiveDrawable : mInactiveDrawable;
- drawable.setBounds(0, 0, mUi.getTitleBarWidth(), getHeight());
+ drawable.setBounds(0, 0, mUi.getContentWidth(), getHeight());
drawClipped(canvas, drawable, mPath, mWindowPos[0]);
canvas.restoreToCount(state);
super.dispatchDraw(canvas);
@@ -508,7 +523,11 @@
tvd.setProgress(tvd.mProgress);
// update the scroll state
WebView webview = tab.getWebView();
- onScroll(webview.getVisibleTitleHeight());
+ if (webview != null) {
+ int h = webview.getVisibleTitleHeight();
+ mVisibleTitleHeight = h -1;
+ onScroll(h);
+ }
}
}
diff --git a/src/com/android/browser/TitleBarXLarge.java b/src/com/android/browser/TitleBarXLarge.java
index b7497ec..f1c6c6b 100644
--- a/src/com/android/browser/TitleBarXLarge.java
+++ b/src/com/android/browser/TitleBarXLarge.java
@@ -36,6 +36,8 @@
import android.webkit.WebView;
import android.widget.ImageView;
+import java.util.List;
+
/**
* tabbed title bar for xlarge screen browser
*/
@@ -46,7 +48,7 @@
private static final int PROGRESS_MAX = 100;
private UiController mUiController;
- private BaseUi mUi;
+ private XLargeUi mUi;
private Drawable mStopDrawable;
private Drawable mReloadDrawable;
@@ -62,20 +64,31 @@
private View mAllButton;
private View mClearButton;
private View mVoiceSearch;
+ private View mVoiceSearchIndicator;
private PageProgressView mProgressView;
private UrlInputView mUrlInput;
+ private Drawable mFocusDrawable;
+ private Drawable mUnfocusDrawable;
+ private boolean mInVoiceMode;
private boolean mInLoad;
+ private boolean mEditable;
+ private boolean mUseQuickControls;
public TitleBarXLarge(Activity activity, UiController controller,
- BaseUi ui) {
+ XLargeUi ui) {
super(activity);
mUiController = controller;
mUi = ui;
Resources resources = activity.getResources();
mStopDrawable = resources.getDrawable(R.drawable.ic_stop_normal);
mReloadDrawable = resources.getDrawable(R.drawable.ic_refresh_normal);
+ mFocusDrawable = resources.getDrawable(
+ R.drawable.textfield_active_holo_dark);
+ mUnfocusDrawable = resources.getDrawable(
+ R.drawable.textfield_default_holo_dark);
rebuildLayout(activity, true);
+ mInVoiceMode = false;
}
private void rebuildLayout(Context context, boolean rebuildData) {
@@ -98,7 +111,7 @@
mVoiceSearch = findViewById(R.id.voicesearch);
mProgressView = (PageProgressView) findViewById(R.id.progress);
mUrlContainer = findViewById(R.id.urlbar_focused);
-
+ mVoiceSearchIndicator = findViewById(R.id.voice_icon);
mBackButton.setOnClickListener(this);
mForwardButton.setOnClickListener(this);
mStar.setOnClickListener(this);
@@ -107,6 +120,7 @@
mSearchButton.setOnClickListener(this);
mGoButton.setOnClickListener(this);
mClearButton.setOnClickListener(this);
+ mVoiceSearch.setOnClickListener(this);
mUrlContainer.setOnClickListener(this);
mUrlInput.setUrlInputListener(this);
mUrlInput.setContainer(mUrlContainer);
@@ -117,9 +131,48 @@
setUrlMode(false);
}
+ public void setEditable(boolean editable) {
+ mEditable = editable;
+ mUrlInput.setFocusable(mEditable);
+ if (!mEditable) {
+ mUrlInput.setOnClickListener(this);
+ } else {
+ mUrlContainer.setOnClickListener(null);
+ }
+ }
+
+ void setUseQuickControls(boolean useQuickControls) {
+ mUseQuickControls = useQuickControls;
+ if (mUseQuickControls) {
+ mBackButton.setVisibility(View.GONE);
+ mForwardButton.setVisibility(View.GONE);
+ mStopButton.setVisibility(View.GONE);
+ mAllButton.setVisibility(View.GONE);
+ } else {
+ mBackButton.setVisibility(View.VISIBLE);
+ mForwardButton.setVisibility(View.VISIBLE);
+ mStopButton.setVisibility(View.VISIBLE);
+ mAllButton.setVisibility(View.VISIBLE);
+ }
+ }
+
+ void setShowProgressOnly(boolean progress) {
+ if (progress) {
+ mContainer.setVisibility(View.GONE);
+ } else {
+ mContainer.setVisibility(View.VISIBLE);
+ }
+ }
+
@Override
public void onFocusChange(View view, boolean hasFocus) {
- setUrlMode(hasFocus);
+ if (!mEditable && hasFocus) {
+ mUi.editUrl(false);
+ } else {
+ setUrlMode(hasFocus);
+ }
+ mUrlContainer.setBackgroundDrawable(hasFocus
+ ? mFocusDrawable : mUnfocusDrawable);
}
public void setCurrentUrlIsBookmark(boolean isBookmark) {
@@ -133,9 +186,13 @@
* @param clearInput clear the input field
*/
void onEditUrl(boolean clearInput) {
- mUrlInput.requestFocusFromTouch();
+ if (!mUrlInput.hasFocus()) {
+ mUrlInput.requestFocus();
+ }
if (clearInput) {
mUrlInput.setText("");
+ } else if (mInVoiceMode) {
+ mUrlInput.showDropDown();
}
}
@@ -146,6 +203,8 @@
@Override
public void onClick(View v) {
if (mUrlInput == v) {
+ mUi.editUrl(false);
+ } else if (mUrlContainer == v) {
if (!mUrlInput.hasFocus()) {
mUi.editUrl(false);
}
@@ -169,6 +228,8 @@
}
} else if (mClearButton == v) {
clearOrClose();
+ } else if (mVoiceSearch == v) {
+ mUiController.startVoiceSearch();
}
}
@@ -198,7 +259,7 @@
@Override
public void onAction(String text, String extra, String source) {
mUiController.getCurrentTopWebView().requestFocus();
- ((BaseUi) mUiController.getUi()).hideFakeTitleBar();
+ mUi.hideFakeTitleBar();
Intent i = new Intent();
i.setAction(Intent.ACTION_SEARCH);
i.putExtra(SearchManager.QUERY, text);
@@ -221,10 +282,10 @@
if (top != null) {
mUiController.getCurrentTopWebView().requestFocus();
}
- ((BaseUi) mUiController.getUi()).hideFakeTitleBar();
+ mUi.hideFakeTitleBar();
setUrlMode(false);
// if top != null current must be set
- if (top != null) {
+ if ((top != null) && !mInVoiceMode) {
setDisplayTitle(mUiController.getCurrentWebView().getUrl());
}
}
@@ -248,14 +309,22 @@
mSearchButton.setVisibility(View.GONE);
mStar.setVisibility(View.GONE);
mClearButton.setVisibility(View.VISIBLE);
+ if (mInVoiceMode) {
+ mVoiceSearchIndicator.setVisibility(View.VISIBLE);
+ }
updateSearchMode();
} else {
mUrlInput.clearFocus();
- mSearchButton.setVisibility(View.VISIBLE);
mGoButton.setVisibility(View.GONE);
mVoiceSearch.setVisibility(View.GONE);
mStar.setVisibility(View.VISIBLE);
mClearButton.setVisibility(View.GONE);
+ mVoiceSearchIndicator.setVisibility(View.GONE);
+ if (mUseQuickControls) {
+ mSearchButton.setVisibility(View.GONE);
+ } else {
+ mSearchButton.setVisibility(View.VISIBLE);
+ }
}
}
@@ -315,6 +384,8 @@
if (mUrlInput.hasFocus()) {
// check if input field is empty and adjust voice search state
updateSearchMode();
+ // clear voice mode when user types
+ setInVoiceMode(false, null);
}
}
@@ -326,4 +397,18 @@
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
+ // voicesearch
+
+ @Override
+ public void setInVoiceMode(boolean voicemode) {
+ setInVoiceMode(voicemode, null);
+ }
+
+ public void setInVoiceMode(boolean voicemode, List<String> voiceResults) {
+ mInVoiceMode = voicemode;
+ mUrlInput.setVoiceResults(voiceResults);
+ mVoiceSearchIndicator.setVisibility(mInVoiceMode
+ ? View.VISIBLE : View.GONE);
+ }
+
}
diff --git a/src/com/android/browser/UI.java b/src/com/android/browser/UI.java
index b56ba30..9f03344 100644
--- a/src/com/android/browser/UI.java
+++ b/src/com/android/browser/UI.java
@@ -16,8 +16,6 @@
package com.android.browser;
-import com.android.browser.ScrollWebView.ScrollListener;
-
import android.content.res.Configuration;
import android.graphics.Bitmap;
import android.os.Bundle;
@@ -32,7 +30,7 @@
/**
* UI interface definitions
*/
-public interface UI extends ScrollListener {
+public interface UI {
public void onPause();
diff --git a/src/com/android/browser/UiController.java b/src/com/android/browser/UiController.java
index c74d74e..68a32d3 100644
--- a/src/com/android/browser/UiController.java
+++ b/src/com/android/browser/UiController.java
@@ -53,6 +53,8 @@
void bookmarksOrHistoryPicker(boolean openHistory);
+ void startVoiceSearch();
+
void showVoiceSearchResults(String title);
void editUrl();
diff --git a/src/com/android/browser/UrlInputView.java b/src/com/android/browser/UrlInputView.java
index bd47f6a..505662d 100644
--- a/src/com/android/browser/UrlInputView.java
+++ b/src/com/android/browser/UrlInputView.java
@@ -30,6 +30,8 @@
import android.widget.TextView;
import android.widget.TextView.OnEditorActionListener;
+import java.util.List;
+
/**
* url/search input view
* handling suggestions
@@ -48,6 +50,7 @@
private OnFocusChangeListener mWrappedFocusListener;
private View mContainer;
private boolean mLandscape;
+ private boolean mInVoiceMode;
public UrlInputView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
@@ -85,6 +88,11 @@
mContainer = container;
}
+ void setVoiceResults(List<String> voiceResults) {
+ mAdapter.setVoiceResults(voiceResults);
+ mInVoiceMode = (voiceResults != null);
+ }
+
@Override
protected void onConfigurationChanged(Configuration config) {
super.onConfigurationChanged(config);
@@ -134,6 +142,10 @@
public void onFocusChange(View v, boolean hasFocus) {
if (hasFocus) {
forceIme();
+ if (mInVoiceMode) {
+ performFiltering(getText().toString(), 0);
+ showDropDown();
+ }
} else {
finishInput(null, null, null);
}
diff --git a/src/com/android/browser/XLargeUi.java b/src/com/android/browser/XLargeUi.java
new file mode 100644
index 0000000..7f9baa7
--- /dev/null
+++ b/src/com/android/browser/XLargeUi.java
@@ -0,0 +1,364 @@
+/*
+ * Copyright (C) 2010 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.browser;
+
+import com.android.browser.ScrollWebView.ScrollListener;
+
+import android.app.ActionBar;
+import android.app.Activity;
+import android.graphics.Bitmap;
+import android.util.Log;
+import android.view.ActionMode;
+import android.view.Gravity;
+import android.webkit.WebView;
+import android.widget.FrameLayout;
+import android.widget.FrameLayout.LayoutParams;
+
+import java.util.List;
+
+/**
+ * Ui for xlarge screen sizes
+ */
+public class XLargeUi extends BaseUi implements ScrollListener {
+
+ private static final String LOGTAG = "XLargeUi";
+
+ private ActionBar mActionBar;
+ private TabBar mTabBar;
+
+ private TitleBarXLarge mTitleBar;
+ private TitleBarXLarge mFakeTitleBar;
+
+ private boolean mUseQuickControls;
+ private PieControl mPieControl;
+
+ /**
+ * @param browser
+ * @param controller
+ */
+ public XLargeUi(Activity browser, UiController controller) {
+ super(browser, controller);
+ mTitleBar = new TitleBarXLarge(mActivity, mUiController, this);
+ mTitleBar.setProgress(100);
+ mTitleBar.setEditable(false);
+ mFakeTitleBar = new TitleBarXLarge(mActivity, mUiController, this);
+ mFakeTitleBar.setEditable(true);
+ mTabBar = new TabBar(mActivity, mUiController, this);
+ mActionBar = mActivity.getActionBar();
+ mActionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM);
+ mActionBar.setCustomView(mTabBar);
+ setUseQuickControls(BrowserSettings.getInstance().useQuickControls());
+ }
+
+ private void setUseQuickControls(boolean useQuickControls) {
+ mUseQuickControls = useQuickControls;
+ if (useQuickControls) {
+ checkTabCount();
+ mPieControl = new PieControl(mActivity, mUiController, this);
+ mPieControl.attachToContainer(mContentView);
+ setFakeTitleBarGravity(Gravity.BOTTOM);
+
+ // remove embedded title bar if present
+ WebView web = mTabControl.getCurrentWebView();
+ if ((web != null) && (web.getVisibleTitleHeight() > 0)) {
+ web.setEmbeddedTitleBar(null);
+ }
+ } else {
+ mActivity.getActionBar().show();
+ if (mPieControl != null) {
+ mPieControl.removeFromContainer(mContentView);
+ }
+ setFakeTitleBarGravity(Gravity.TOP);
+ // remove embedded title bar if present
+ WebView web = mTabControl.getCurrentWebView();
+ if ((web != null) && (web.getVisibleTitleHeight() == 0)) {
+ web.setEmbeddedTitleBar(mTitleBar);
+ }
+ }
+ mTabBar.setUseQuickControls(mUseQuickControls);
+ mFakeTitleBar.setUseQuickControls(mUseQuickControls);
+ }
+
+ private void checkTabCount() {
+ if (mUseQuickControls) {
+ int n = mTabBar.getTabCount();
+ if (n >= 2) {
+ mActivity.getActionBar().show();
+ } else if (n == 1) {
+ mActivity.getActionBar().hide();
+ }
+ }
+ }
+
+ @Override
+ public void onDestroy() {
+ hideFakeTitleBar();
+ }
+
+ // webview factory
+
+ @Override
+ public WebView createWebView(boolean privateBrowsing) {
+ // Create a new WebView
+ ScrollWebView w = new ScrollWebView(mActivity, null,
+ android.R.attr.webViewStyle, privateBrowsing);
+ initWebViewSettings(w);
+ w.setScrollListener(this);
+ w.getSettings().setDisplayZoomControls(false);
+ return w;
+ }
+
+ @Override
+ public WebView createSubWebView(boolean privateBrowsing) {
+ ScrollWebView web = (ScrollWebView) createWebView(privateBrowsing);
+ // no scroll listener for subview
+ web.setScrollListener(null);
+ return web;
+ }
+
+ @Override
+ public void onScroll(int visibleTitleHeight) {
+ mTabBar.onScroll(visibleTitleHeight);
+ }
+
+ void stopWebViewScrolling() {
+ ScrollWebView web = (ScrollWebView) mUiController.getCurrentWebView();
+ if (web != null) {
+ web.stopScroll();
+ }
+ }
+
+ // WebView callbacks
+
+ @Override
+ public void onPageStarted(Tab tab, String url, Bitmap favicon) {
+ super.onPageStarted(tab, url, favicon);
+ mTabBar.onPageStarted(tab, url, favicon);
+ }
+
+ @Override
+ public void bookmarkedStatusHasChanged(Tab tab) {
+ if (tab.inForeground()) {
+ boolean isBookmark = tab.isBookmarkedSite();
+ mTitleBar.setCurrentUrlIsBookmark(isBookmark);
+ mFakeTitleBar.setCurrentUrlIsBookmark(isBookmark);
+ }
+ }
+
+ @Override
+ public void onPageFinished(Tab tab, String url) {
+ mTabBar.onPageFinished(tab);
+ super.onPageFinished(tab, url);
+ if (mUseQuickControls) {
+ mFakeTitleBar.setShowProgressOnly(false);
+ }
+ }
+
+ @Override
+ public void onProgressChanged(Tab tab, int progress) {
+ mTabBar.onProgress(tab, progress);
+ if (tab.inForeground()) {
+ mFakeTitleBar.setProgress(progress);
+ if (progress == 100) {
+ hideFakeTitleBar();
+ if (mUseQuickControls) {
+ mFakeTitleBar.setShowProgressOnly(false);
+ setFakeTitleBarGravity(Gravity.BOTTOM);
+ }
+ } else {
+ if (mUseQuickControls) {
+ mFakeTitleBar.setShowProgressOnly(true);
+ if (!isFakeTitleBarShowing()) {
+ setFakeTitleBarGravity(Gravity.TOP);
+ }
+ }
+ showFakeTitleBar();
+ }
+ }
+ }
+
+ @Override
+ public boolean needsRestoreAllTabs() {
+ return true;
+ }
+
+ @Override
+ public void addTab(Tab tab) {
+ mTabBar.onNewTab(tab);
+ checkTabCount();
+ }
+
+ @Override
+ public void setActiveTab(Tab tab) {
+ super.setActiveTab(tab);
+ ScrollWebView view = (ScrollWebView) tab.getWebView();
+ // TabControl.setCurrentTab has been called before this,
+ // so the tab is guaranteed to have a webview
+ if (view == null) {
+ Log.e(LOGTAG, "active tab with no webview detected");
+ return;
+ }
+ // Request focus on the top window.
+ if (mUseQuickControls) {
+ mPieControl.forceToTop(mContentView);
+ view.setScrollListener(null);
+ mTabBar.showTitleBarIndicator(false);
+ } else {
+ view.setEmbeddedTitleBar(mTitleBar);
+ view.setScrollListener(this);
+ }
+ mTabBar.onSetActiveTab(tab);
+ if (tab.isInVoiceSearchMode()) {
+ showVoiceTitleBar(tab.getVoiceDisplayTitle());
+ } else {
+ revertVoiceTitleBar(tab);
+ }
+ resetTitleIconAndProgress(tab);
+ updateLockIconToLatest(tab);
+ tab.getTopWindow().requestFocus();
+ }
+
+ @Override
+ public void updateTabs(List<Tab> tabs) {
+ mTabBar.updateTabs(tabs);
+ checkTabCount();
+ }
+
+ @Override
+ public void removeTab(Tab tab) {
+ super.removeTab(tab);
+ mTabBar.onRemoveTab(tab);
+ checkTabCount();
+ }
+
+ int getContentWidth() {
+ if (mContentView != null) {
+ return mContentView.getWidth();
+ }
+ return 0;
+ }
+
+ void editUrl(boolean clearInput) {
+ showFakeTitleBar();
+ mFakeTitleBar.onEditUrl(clearInput);
+ }
+
+ void setFakeTitleBarGravity(int gravity) {
+ FrameLayout.LayoutParams lp = (FrameLayout.LayoutParams)
+ mFakeTitleBar.getLayoutParams();
+ if (lp == null) {
+ lp = new FrameLayout.LayoutParams(LayoutParams.MATCH_PARENT,
+ LayoutParams.WRAP_CONTENT);
+ }
+ lp.gravity = gravity;
+ mFakeTitleBar.setLayoutParams(lp);
+ }
+
+ void showFakeTitleBarAndEdit() {
+ showFakeTitleBar();
+ mFakeTitleBar.onEditUrl(false);
+ }
+
+ @Override
+ protected void attachFakeTitleBar(WebView mainView) {
+ mContentView.addView(mFakeTitleBar);
+ mTabBar.onShowTitleBar();
+ }
+
+ @Override
+ protected void hideFakeTitleBar() {
+ if (isFakeTitleBarShowing()) {
+ mContentView.removeView(mFakeTitleBar);
+ mTabBar.onHideTitleBar();
+ }
+ }
+
+ @Override
+ protected boolean isFakeTitleBarShowing() {
+ return (mFakeTitleBar.getParent() != null);
+ }
+
+ @Override
+ protected TitleBarBase getFakeTitleBar() {
+ return mFakeTitleBar;
+ }
+
+ @Override
+ protected TitleBarBase getEmbeddedTitleBar() {
+ return mTitleBar;
+ }
+
+ // action mode callbacks
+
+ @Override
+ public void onActionModeStarted(ActionMode mode) {
+ if (mFakeTitleBar.isEditingUrl()) {
+ // hide the fake title bar when CAB is shown
+ hideFakeTitleBar();
+ }
+ }
+
+ @Override
+ public void onActionModeFinished(boolean inLoad) {
+ checkTabCount();
+ if (inLoad) {
+ // the titlebar was removed when the CAB was shown
+ // if the page is loading, show it again
+ mFakeTitleBar.setShowProgressOnly(true);
+ if (!isFakeTitleBarShowing()) {
+ setFakeTitleBarGravity(Gravity.TOP);
+ }
+ showFakeTitleBar();
+ }
+ }
+
+ @Override
+ public void setUrlTitle(Tab tab, String url, String title) {
+ super.setUrlTitle(tab, url, title);
+ mTabBar.onUrlAndTitle(tab, url, title);
+ }
+
+ // Set the favicon in the title bar.
+ @Override
+ public void setFavicon(Tab tab, Bitmap icon) {
+ super.setFavicon(tab, icon);
+ mTabBar.onFavicon(tab, icon);
+ }
+
+ @Override
+ public void showVoiceTitleBar(String title) {
+ List<String> vsresults = null;
+ if (getActiveTab() != null) {
+ vsresults = getActiveTab().getVoiceSearchResults();
+ }
+ mTitleBar.setInVoiceMode(true, null);
+ mTitleBar.setDisplayTitle(title);
+ mFakeTitleBar.setInVoiceMode(true, vsresults);
+ mFakeTitleBar.setDisplayTitle(title);
+ }
+
+ @Override
+ public void revertVoiceTitleBar(Tab tab) {
+ mTitleBar.setInVoiceMode(false, null);
+ String url = tab.getCurrentUrl();
+ mTitleBar.setDisplayTitle(url);
+ mFakeTitleBar.setInVoiceMode(false, null);
+ mFakeTitleBar.setDisplayTitle(url);
+ }
+
+
+}
diff --git a/src/com/android/browser/preferences/LabPreferencesFragment.java b/src/com/android/browser/preferences/LabPreferencesFragment.java
new file mode 100644
index 0000000..8a8546f
--- /dev/null
+++ b/src/com/android/browser/preferences/LabPreferencesFragment.java
@@ -0,0 +1,58 @@
+/*
+ * Copyright (C) 2010 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License
+ */
+
+package com.android.browser.preferences;
+
+import com.android.browser.BrowserActivity;
+import com.android.browser.BrowserSettings;
+import com.android.browser.Controller;
+import com.android.browser.R;
+
+import android.content.Context;
+import android.content.Intent;
+import android.os.AsyncTask;
+import android.os.Bundle;
+import android.preference.Preference;
+import android.preference.Preference.OnPreferenceChangeListener;
+import android.preference.PreferenceActivity.Header;
+import android.preference.PreferenceFragment;
+import android.preference.PreferenceManager.OnActivityResultListener;
+
+import java.io.IOException;
+import java.io.Serializable;
+
+public class LabPreferencesFragment extends PreferenceFragment
+ implements OnPreferenceChangeListener {
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+
+ // Load the XML preferences file
+ addPreferencesFromResource(R.xml.lab_preferences);
+
+ Preference e = findPreference(BrowserSettings.PREF_QUICK_CONTROLS);
+ e.setOnPreferenceChangeListener(this);
+ }
+
+ @Override
+ public boolean onPreferenceChange(Preference preference, Object newValue) {
+ // Attempt to restart
+ startActivity(new Intent(BrowserActivity.ACTION_RESTART, null,
+ getActivity(), BrowserActivity.class));
+ return true;
+ }
+
+}
diff --git a/src/com/android/browser/view/PieMenu.java b/src/com/android/browser/view/PieMenu.java
new file mode 100644
index 0000000..d838a34
--- /dev/null
+++ b/src/com/android/browser/view/PieMenu.java
@@ -0,0 +1,463 @@
+/*
+ * Copyright (C) 2010 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.browser.view;
+
+import com.android.browser.R;
+
+import android.content.Context;
+import android.content.res.Resources;
+import android.graphics.Canvas;
+import android.graphics.Paint;
+import android.graphics.Path;
+import android.graphics.Point;
+import android.graphics.PointF;
+import android.graphics.Rect;
+import android.graphics.RectF;
+import android.util.AttributeSet;
+import android.view.MotionEvent;
+import android.view.View;
+import android.widget.FrameLayout;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+public class PieMenu extends FrameLayout {
+
+ private static final int RADIUS_GAP = 10;
+
+ public interface PieController {
+ /**
+ * called before menu opens to customize menu
+ * returns if pie state has been changed
+ */
+ public boolean onOpen();
+ }
+ private Point mCenter;
+ private int mRadius;
+ private int mRadiusInc;
+ private int mSlop;
+
+ private boolean mOpen;
+ private Paint mPaint;
+ private Paint mSelectedPaint;
+ private PieController mController;
+
+ private Map<View, List<View>> mMenu;
+ private List<View> mStack;
+
+ private boolean mDirty;
+
+ /**
+ * @param context
+ * @param attrs
+ * @param defStyle
+ */
+ public PieMenu(Context context, AttributeSet attrs, int defStyle) {
+ super(context, attrs, defStyle);
+ init(context);
+ }
+
+ /**
+ * @param context
+ * @param attrs
+ */
+ public PieMenu(Context context, AttributeSet attrs) {
+ super(context, attrs);
+ init(context);
+ }
+
+ /**
+ * @param context
+ */
+ public PieMenu(Context context) {
+ super(context);
+ init(context);
+ }
+
+ private void init(Context ctx) {
+ this.setTag(new MenuTag(0));
+ mStack = new ArrayList<View>();
+ mStack.add(this);
+ Resources res = ctx.getResources();
+ mRadius = (int) res.getDimension(R.dimen.qc_radius);
+ mRadiusInc = (int) res.getDimension(R.dimen.qc_radius_inc);
+ mSlop = (int) res.getDimension(R.dimen.qc_slop);
+ mPaint = new Paint();
+ mPaint.setAntiAlias(true);
+ mPaint.setColor(res.getColor(R.color.qc_slice_normal));
+ mSelectedPaint = new Paint();
+ mSelectedPaint.setAntiAlias(true);
+ mSelectedPaint.setColor(res.getColor(R.color.qc_slice_active));
+ mOpen = false;
+ mMenu = new HashMap<View, List<View>>();
+ setWillNotDraw(false);
+ setDrawingCacheEnabled(false);
+ mCenter = new Point(0,0);
+ mDirty = true;
+ }
+
+ public void setController(PieController ctl) {
+ mController = ctl;
+ }
+
+ public void setRadius(int r) {
+ mRadius = r;
+ requestLayout();
+ }
+
+ public void setRadiusIncrement(int ri) {
+ mRadiusInc = ri;
+ requestLayout();
+ }
+
+ /**
+ * add a menu item to another item as a submenu
+ * @param item
+ * @param parent
+ */
+ public void addItem(View item, View parent) {
+ List<View> subs = mMenu.get(parent);
+ if (subs == null) {
+ subs = new ArrayList<View>();
+ mMenu.put(parent, subs);
+ }
+ subs.add(item);
+ MenuTag tag = new MenuTag(((MenuTag) parent.getTag()).level + 1);
+ item.setTag(tag);
+ }
+
+ public void addItem(View view) {
+ // add the item to the pie itself
+ addItem(view, this);
+ }
+
+ public void removeItem(View view) {
+ List<View> subs = mMenu.get(view);
+ mMenu.remove(view);
+ for (View p : mMenu.keySet()) {
+ List<View> sl = mMenu.get(p);
+ if (sl != null) {
+ sl.remove(view);
+ }
+ }
+ }
+
+ public void clearItems(View parent) {
+ List<View> subs = mMenu.remove(parent);
+ if (subs != null) {
+ for (View sub: subs) {
+ clearItems(sub);
+ }
+ }
+ }
+
+ public void clearItems() {
+ mMenu.clear();
+ }
+
+
+ public void show(boolean show) {
+ mOpen = show;
+ if (mOpen) {
+ if (mController != null) {
+ boolean changed = mController.onOpen();
+ }
+ mDirty = true;
+ }
+ if (!show) {
+ // hide sub items
+ mStack.clear();
+ mStack.add(this);
+ }
+ invalidate();
+ }
+
+ private void setCenter(int x, int y) {
+ if (x < mSlop) {
+ mCenter.x = 0;
+ } else {
+ mCenter.x = getWidth();
+ }
+ mCenter.y = y;
+ }
+
+ private boolean onTheLeft() {
+ return mCenter.x < mSlop;
+ }
+
+ @Override
+ protected void onDraw(Canvas canvas) {
+ if (mOpen) {
+ int radius = mRadius;
+ // start in the center for 0 level menu
+ float anchor = (float) Math.PI / 2;
+ PointF angles = new PointF();
+ int state = canvas.save();
+ if (onTheLeft()) {
+ // left handed
+ canvas.scale(-1, 1);
+ }
+ for (View parent : mStack) {
+ List<View> subs = mMenu.get(parent);
+ if (subs != null) {
+ setGeometry(anchor, subs.size(), angles);
+ }
+ anchor = drawSlices(canvas, subs, radius, angles.x, angles.y);
+ radius += mRadiusInc + RADIUS_GAP;
+ }
+ canvas.restoreToCount(state);
+ mDirty = false;
+ }
+ }
+
+ /**
+ * draw the set of slices
+ * @param canvas
+ * @param items
+ * @param radius
+ * @param start
+ * @param sweep
+ * @return the angle of the selected slice
+ */
+ private float drawSlices(Canvas canvas, List<View> items, int radius,
+ float start, float sweep) {
+ float angle = start + sweep / 2;
+ // gap between slices in degrees
+ float gap = 1f;
+ float newanchor = 0f;
+ for (View item : items) {
+ if (mDirty) {
+ item.measure(item.getLayoutParams().width,
+ item.getLayoutParams().height);
+ int w = item.getMeasuredWidth();
+ int h = item.getMeasuredHeight();
+ int x = (int) (radius * Math.sin(angle));
+ int y = mCenter.y - (int) (radius * Math.cos(angle)) - h / 2;
+ if (onTheLeft()) {
+ x = mCenter.x + x - w / 2;
+ } else {
+ x = mCenter.x - x - w / 2;
+ }
+ item.layout(x, y, x + w, y + h);
+ }
+ float itemstart = angle - sweep / 2;
+ int inner = radius - mRadiusInc / 2;
+ int outer = radius + mRadiusInc / 2;
+ Path slice = makeSlice(getDegrees(itemstart) - gap,
+ getDegrees(itemstart + sweep) + gap,
+ outer, inner, mCenter);
+ MenuTag tag = (MenuTag) item.getTag();
+ tag.start = itemstart;
+ tag.sweep = sweep;
+ tag.inner = inner;
+ tag.outer = outer;
+
+ Paint p = item.isPressed() ? mSelectedPaint : mPaint;
+ canvas.drawPath(slice, p);
+ int state = canvas.save();
+ if (onTheLeft()) {
+ canvas.scale(-1, 1);
+ }
+ canvas.translate(item.getX(), item.getY());
+ item.draw(canvas);
+ canvas.restoreToCount(state);
+ if (mStack.contains(item)) {
+ // item is anchor for sub menu
+ newanchor = angle;
+ }
+ angle += sweep;
+ }
+ return newanchor;
+ }
+
+ /**
+ * converts a
+ * @param angle from 0..PI to Android degrees (clockwise starting at 3 o'clock)
+ * @return skia angle
+ */
+ private float getDegrees(double angle) {
+ return (float) (270 - 180 * angle / Math.PI);
+ }
+
+ private Path makeSlice(float startangle, float endangle, int outerradius,
+ int innerradius, Point center) {
+ RectF bb = new RectF(center.x - outerradius, center.y - outerradius,
+ center.x + outerradius, center.y + outerradius);
+ RectF bbi = new RectF(center.x - innerradius, center.y - innerradius,
+ center.x + innerradius, center.y + innerradius);
+ Path path = new Path();
+ path.arcTo(bb, startangle, endangle - startangle, true);
+ path.arcTo(bbi, endangle, startangle - endangle);
+ path.close();
+ return path;
+ }
+
+ /**
+ * all angles are 0 .. MATH.PI where 0 points up, and rotate counterclockwise
+ * set the startangle and slice sweep in result
+ * @param anchorangle : angle at which the menu is anchored
+ * @param nslices
+ * @param result : x : start, y : sweep
+ */
+ private void setGeometry(float anchorangle, int nslices, PointF result) {
+ float span = (float) Math.min(anchorangle, Math.PI - anchorangle);
+ float sweep = 2 * span / (nslices + 1);
+ result.x = anchorangle - span + sweep / 2;
+ result.y = sweep;
+ }
+
+ // touch handling for pie
+
+ View mCurrentView;
+ Rect mHitRect = new Rect();
+
+ @Override
+ public boolean onTouchEvent(MotionEvent evt) {
+ float x = evt.getX();
+ float y = evt.getY();
+ int action = evt.getActionMasked();
+ int edges = evt.getEdgeFlags();
+ if (MotionEvent.ACTION_DOWN == action) {
+ if ((x > getWidth() - mSlop) || (x < mSlop)) {
+ setCenter((int) x, (int) y);
+ show(true);
+ return true;
+ }
+ } else if (MotionEvent.ACTION_UP == action) {
+ if (mOpen) {
+ View v = mCurrentView;
+ deselect();
+ if (v != null) {
+ v.performClick();
+ }
+ show(false);
+ return true;
+ }
+ } else if (MotionEvent.ACTION_CANCEL == action) {
+ if (mOpen) {
+ show(false);
+ }
+ deselect();
+ return false;
+ } else if (MotionEvent.ACTION_MOVE == action) {
+ View v = findView((int) x, (int) y);
+ if (mCurrentView != v) {
+ onEnter(v);
+ invalidate();
+ }
+ }
+ // always re-dispatch event
+ return false;
+ }
+
+ /**
+ * enter a slice for a view
+ * updates model only
+ * @param view
+ */
+ private void onEnter(View view) {
+ // deselect
+ if (mCurrentView != null) {
+ if (getLevel(mCurrentView) >= getLevel(view)) {
+ mCurrentView.setPressed(false);
+ }
+ }
+ if (view != null) {
+ // clear up stack
+ MenuTag tag = (MenuTag) view.getTag();
+ int i = mStack.size() - 1;
+ while (i > 0) {
+ View v = mStack.get(i);
+ if (((MenuTag) v.getTag()).level >= tag.level) {
+ v.setPressed(false);
+ mStack.remove(i);
+ } else {
+ break;
+ }
+ i--;
+ }
+ List<View> items = mMenu.get(view);
+ if (items != null) {
+ mStack.add(view);
+ mDirty = true;
+ }
+ view.setPressed(true);
+ }
+ mCurrentView = view;
+ }
+
+ private void deselect() {
+ if (mCurrentView != null) {
+ mCurrentView.setPressed(false);
+ }
+ mCurrentView = null;
+ }
+
+ private int getLevel(View v) {
+ if (v == null) return -1;
+ return ((MenuTag) v.getTag()).level;
+ }
+
+ private View findView(int x, int y) {
+ // get angle and radius from x/y
+ float angle = (float) Math.PI / 2;
+ x = mCenter.x - x;
+ if (mCenter.x < mSlop) {
+ x = -x;
+ }
+ y = mCenter.y - y;
+ float dist = (float) Math.sqrt(x * x + y * y);
+ if (y > 0) {
+ angle = (float) Math.asin(x / dist);
+ } else if (y < 0) {
+ angle = (float) (Math.PI - Math.asin(x / dist ));
+ }
+ // find the matching item:
+ for (View parent : mStack) {
+ List<View> subs = mMenu.get(parent);
+ if (subs != null) {
+ for (View item : subs) {
+ MenuTag tag = (MenuTag) item.getTag();
+ if ((tag.inner < dist)
+ && (tag.outer > dist)
+ && (tag.start < angle)
+ && (tag.start + tag.sweep > angle)) {
+ return item;
+ }
+ }
+ }
+ }
+ return null;
+ }
+
+ class MenuTag {
+
+ int level;
+ float start;
+ float sweep;
+ int inner;
+ int outer;
+
+ public MenuTag(int l) {
+ level = l;
+ }
+
+ }
+
+}
diff --git a/src/com/android/browser/widget/BookmarkListWidgetProvider.java b/src/com/android/browser/widget/BookmarkListWidgetProvider.java
index 2196ae0..99daaa1 100644
--- a/src/com/android/browser/widget/BookmarkListWidgetProvider.java
+++ b/src/com/android/browser/widget/BookmarkListWidgetProvider.java
@@ -79,6 +79,10 @@
private void performUpdate(Context context,
AppWidgetManager appWidgetManager, int[] appWidgetIds) {
+ Intent launchBrowser = new Intent(BrowserActivity.ACTION_SHOW_BROWSER,
+ null, context, BrowserActivity.class);
+ Intent launchBookmarks = new Intent(BrowserActivity.ACTION_SHOW_BOOKMARKS,
+ null, context, BrowserActivity.class);
// Update the widgets
for (int appWidgetId : appWidgetIds) {
Intent updateIntent = new Intent(context, BookmarkListWidgetService.class);
@@ -92,9 +96,10 @@
views.setPendingIntentTemplate(R.id.bookmarks_list,
PendingIntent.getService(context, 0, ic,
PendingIntent.FLAG_UPDATE_CURRENT));
- Intent launch = new Intent(context, BrowserActivity.class);
- views.setOnClickPendingIntent(R.id.header, PendingIntent
- .getActivity(context, 0, launch, PendingIntent.FLAG_CANCEL_CURRENT));
+ views.setOnClickPendingIntent(R.id.header_browser, PendingIntent
+ .getActivity(context, 0, launchBrowser, PendingIntent.FLAG_CANCEL_CURRENT));
+ views.setOnClickPendingIntent(R.id.header_bookmarks, PendingIntent
+ .getActivity(context, 0, launchBookmarks, PendingIntent.FLAG_CANCEL_CURRENT));
appWidgetManager.updateAppWidget(appWidgetId, views);
}
}
diff --git a/src/com/android/browser/widget/BookmarkListWidgetService.java b/src/com/android/browser/widget/BookmarkListWidgetService.java
index 8fbe807..8cf63a3 100644
--- a/src/com/android/browser/widget/BookmarkListWidgetService.java
+++ b/src/com/android/browser/widget/BookmarkListWidgetService.java
@@ -240,10 +240,10 @@
views.setDrawableParameters(R.id.list_item, true, 0, -1, null, -1);
if (res.mIsFolder) {
if (folder != null && res.mId == folder.mId) {
+ views.setImageViewResource(R.id.thumb, R.drawable.btn_ic_back_bookmark_widget_holo_dark);
views.setDrawableParameters(R.id.list_item, true, 255, -1, null, -1);
- views.setImageViewResource(R.id.thumb, R.drawable.ic_back_normal);
} else {
- views.setImageViewResource(R.id.thumb, R.drawable.ic_folder);
+ views.setImageViewResource(R.id.thumb, R.drawable.ic_folder_bookmark_widget_holo_dark);
}
} else {
if (res.mBitmap != null) {