am 8fa17c4f: (-s ours) am 79f107bd: Do not merge
Merge commit '8fa17c4f225590d9dbe59b813a5054a506b3f19c'
* commit '8fa17c4f225590d9dbe59b813a5054a506b3f19c':
Do not merge
diff --git a/Android.mk b/Android.mk
index 33cd6ab..92fcb1c 100644
--- a/Android.mk
+++ b/Android.mk
@@ -1,11 +1,13 @@
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
-LOCAL_MODULE_TAGS := user
+LOCAL_MODULE_TAGS := optional
LOCAL_STATIC_JAVA_LIBRARIES := google-framework
-LOCAL_SRC_FILES := $(call all-subdir-java-files)
+LOCAL_SRC_FILES := \
+ $(call all-subdir-java-files) \
+ src/com/android/browser/EventLogTags.logtags
LOCAL_PACKAGE_NAME := Browser
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 3d970ab..e852560 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -18,8 +18,8 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.android.browser">
- <uses-permission android:name="com.google.android.googleapps.permission.GOOGLE_AUTH" />
<uses-permission android:name="android.permission.USE_CREDENTIALS" />
+ <uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_DOWNLOAD_MANAGER"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
@@ -27,6 +27,7 @@
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT"/>
<uses-permission android:name="android.permission.INTERNET" />
+ <uses-permission android:name="android.permission.SET_WALLPAPER" />
<uses-permission android:name="android.permission.WAKE_LOCK"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="com.android.browser.permission.READ_HISTORY_BOOKMARKS"/>
@@ -52,7 +53,8 @@
android:launchMode="singleTask"
android:alwaysRetainTaskState="true"
android:configChanges="orientation|keyboardHidden"
- android:theme="@style/BrowserTheme" >
+ android:theme="@style/BrowserTheme"
+ android:windowSoftInputMode="adjustResize" >
<!-- For these schemes were not particular MIME type has been
supplied, we are a good candidate. -->
<intent-filter>
@@ -150,10 +152,6 @@
android:configChanges="orientation|keyboardHidden">
</activity>
- <activity android:name="BrowserPluginList" android:label=""
- android:configChanges="orientation|keyboardHidden">
- </activity>
-
<activity android:name="WebsiteSettingsActivity" android:label=""
android:configChanges="orientation|keyboardHidden">
</activity>
@@ -183,13 +181,6 @@
<!-- Makes .BrowserActivity the search target for any activity in Browser -->
<meta-data android:name="android.app.default_searchable" android:value=".BrowserActivity" />
- <activity android:name="android.webkit.PluginActivity">
- <intent-filter>
- <action android:name="android.intent.webkit.PLUGIN" />
- <category android:name="android.intent.category.DEFAULT" />
- </intent-filter>
- </activity>
-
</application>
</manifest>
diff --git a/res/drawable/pattern_carbon_fiber_dark.png b/res/drawable/pattern_carbon_fiber_dark.png
deleted file mode 100644
index 07af4b6..0000000
--- a/res/drawable/pattern_carbon_fiber_dark.png
+++ /dev/null
Binary files differ
diff --git a/res/layout-land/http_authentication.xml b/res/layout-land/http_authentication.xml
index b2f012d..c008ceb 100644
--- a/res/layout-land/http_authentication.xml
+++ b/res/layout-land/http_authentication.xml
@@ -15,13 +15,13 @@
-->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="fill_parent"
+ android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_horizontal"
android:orientation="vertical">
<TableLayout
- android:layout_width="fill_parent"
+ android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="12dip"
android:gravity="center_horizontal" >
diff --git a/res/layout-land/page_info.xml b/res/layout-land/page_info.xml
index 63d18ca..f4397a5 100644
--- a/res/layout-land/page_info.xml
+++ b/res/layout-land/page_info.xml
@@ -16,12 +16,12 @@
<ScrollView
xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="fill_parent"
+ android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >
<LinearLayout
- android:layout_width="fill_parent"
+ android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >
@@ -40,7 +40,7 @@
<!-- Address: -->
<TableLayout
- android:layout_width="fill_parent"
+ android:layout_width="match_parent"
android:layout_height="wrap_content"
android:shrinkColumns="1"
android:orientation="vertical">
diff --git a/res/layout-land/ssl_certificate.xml b/res/layout-land/ssl_certificate.xml
index d6036c1..44c5904 100644
--- a/res/layout-land/ssl_certificate.xml
+++ b/res/layout-land/ssl_certificate.xml
@@ -16,11 +16,11 @@
<ScrollView
xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="fill_parent"
+ android:layout_width="match_parent"
android:layout_height="wrap_content" >
<LinearLayout
- android:layout_width="fill_parent"
+ android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >
@@ -28,7 +28,7 @@
<LinearLayout
android:id="@+id/placeholder"
android:layout_height="wrap_content"
- android:layout_width="fill_parent"
+ android:layout_width="match_parent"
android:layout_marginTop="12dip"
android:orientation="vertical" />
@@ -36,7 +36,7 @@
<ImageView
android:id="@+id/title_separator"
android:src="@android:drawable/divider_horizontal_dark"
- android:layout_width="fill_parent"
+ android:layout_width="match_parent"
android:layout_height="wrap_content"
android:scaleType="fitXY"
android:layout_weight="1"
@@ -46,7 +46,7 @@
android:layout_marginBottom="12dip" />
<TableLayout
- android:layout_width="fill_parent"
+ android:layout_width="match_parent"
android:layout_height="wrap_content"
android:shrinkColumns="1"
android:orientation="vertical">
diff --git a/res/layout/active_tabs.xml b/res/layout/active_tabs.xml
index d25f154..8b5fe9e 100644
--- a/res/layout/active_tabs.xml
+++ b/res/layout/active_tabs.xml
@@ -15,20 +15,20 @@
-->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_height="fill_parent"
- android:layout_width="fill_parent"
+ android:layout_height="match_parent"
+ android:layout_width="match_parent"
android:orientation="vertical"
android:background="@color/black"
>
<RelativeLayout
style="?android:attr/windowTitleBackgroundStyle"
- android:layout_width="fill_parent"
+ android:layout_width="match_parent"
android:layout_height="?android:attr/windowTitleSize"
>
<TextView android:id="@android:id/title"
style="?android:attr/windowTitleStyle"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
android:background="@null"
android:fadingEdge="horizontal"
android:gravity="center_vertical"
@@ -36,7 +36,7 @@
/>
</RelativeLayout>
<ListView android:id="@+id/list"
- android:layout_width="fill_parent"
+ android:layout_width="match_parent"
android:layout_height="0dip"
android:layout_weight="1"
android:cacheColorHint="@color/black"
diff --git a/res/layout/add_new_bookmark.xml b/res/layout/add_new_bookmark.xml
index 1880e20..d11a68a 100644
--- a/res/layout/add_new_bookmark.xml
+++ b/res/layout/add_new_bookmark.xml
@@ -15,7 +15,7 @@
-->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="fill_parent"
+ android:layout_width="match_parent"
android:layout_height="wrap_content"
android:minHeight="?android:attr/listPreferredItemHeight"
android:orientation="horizontal"
@@ -35,7 +35,7 @@
android:scaleType="fitCenter"
/>
<LinearLayout
- android:layout_width="fill_parent"
+ android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
>
diff --git a/res/layout/bookmark_thumbnail.xml b/res/layout/bookmark_thumbnail.xml
index 8dc5564..1f017d0 100644
--- a/res/layout/bookmark_thumbnail.xml
+++ b/res/layout/bookmark_thumbnail.xml
@@ -15,8 +15,8 @@
-->
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
android:orientation="vertical"
android:padding="0dip"
>
@@ -33,8 +33,8 @@
<!-- This holds the star for addbookmark -->
<LinearLayout android:id="@+id/holder"
- android:layout_height="fill_parent"
- android:layout_width="fill_parent"
+ android:layout_height="match_parent"
+ android:layout_width="match_parent"
android:orientation="horizontal"
android:background="#99000000"
android:gravity="center"
@@ -57,7 +57,7 @@
</LinearLayout>
<TextView android:id="@+id/label"
- android:layout_width="fill_parent"
+ android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
android:textAppearance="?android:attr/textAppearanceSmall"
diff --git a/res/layout/browser_add_bookmark.xml b/res/layout/browser_add_bookmark.xml
index 9fb2b46..e8a08a4 100644
--- a/res/layout/browser_add_bookmark.xml
+++ b/res/layout/browser_add_bookmark.xml
@@ -15,13 +15,13 @@
-->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="fill_parent"
+ android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
>
<ImageView android:id="@+id/titleDivider"
- android:layout_width="fill_parent"
+ android:layout_width="match_parent"
android:layout_height="1dip"
android:scaleType="fitXY"
android:gravity="fill_horizontal"
@@ -30,7 +30,7 @@
android:layout_marginRight="10dip"/>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="fill_parent"
+ android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:orientation="vertical"
@@ -78,7 +78,7 @@
</LinearLayout>
<LinearLayout
- android:layout_width="fill_parent"
+ android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#c6c3c6"
android:minHeight="54dip"
diff --git a/res/layout/browser_bookmarks_page.xml b/res/layout/browser_bookmarks_page.xml
index 3fb0308..a25dbdb 100644
--- a/res/layout/browser_bookmarks_page.xml
+++ b/res/layout/browser_bookmarks_page.xml
@@ -16,11 +16,11 @@
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
>
<ListView android:id="@+id/list"
- android:layout_width="fill_parent"
+ android:layout_width="match_parent"
android:layout_height="0dip"
android:layout_weight="1"
/>
diff --git a/res/layout/browser_download_item.xml b/res/layout/browser_download_item.xml
index c26aab9..cb8a690 100644
--- a/res/layout/browser_download_item.xml
+++ b/res/layout/browser_download_item.xml
@@ -20,7 +20,7 @@
-->
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="fill_parent"
+ android:layout_width="match_parent"
android:layout_height="wrap_content">
<ImageView android:id="@+id/download_icon"
@@ -70,7 +70,7 @@
<ProgressBar android:id="@+id/download_progress"
style="?android:attr/progressBarStyleHorizontal"
- android:layout_width="fill_parent"
+ android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/download_icon"
android:layout_alignParentLeft="true"
diff --git a/res/layout/browser_downloads_page.xml b/res/layout/browser_downloads_page.xml
index 1d4d4e6..b6c0c46 100644
--- a/res/layout/browser_downloads_page.xml
+++ b/res/layout/browser_downloads_page.xml
@@ -19,13 +19,13 @@
*/
-->
<merge xmlns:android="http://schemas.android.com/apk/res/android">
- <ListView
- android:id="@+id/list"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"/>
+ <ExpandableListView
+ android:id="@android:id/list"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"/>
<ViewStub
android:id="@+id/empty"
android:layout="@layout/no_downloads"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"/>
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"/>
</merge>
diff --git a/res/layout/browser_find.xml b/res/layout/browser_find.xml
index 7a77152..e2f0cf6 100644
--- a/res/layout/browser_find.xml
+++ b/res/layout/browser_find.xml
@@ -16,7 +16,7 @@
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/findControls"
- android:layout_width="fill_parent"
+ android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingTop="5dip"
android:paddingLeft="4dip"
@@ -45,7 +45,7 @@
android:layout_marginRight="6dip"
>
<EditText android:id="@+id/edit"
- android:layout_width="fill_parent"
+ android:layout_width="match_parent"
android:layout_height="wrap_content"
android:scrollHorizontally="true"
android:inputType="text"
diff --git a/res/layout/browser_subwindow.xml b/res/layout/browser_subwindow.xml
index 0eb9e72..76d72d5 100644
--- a/res/layout/browser_subwindow.xml
+++ b/res/layout/browser_subwindow.xml
@@ -16,27 +16,27 @@
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/subwindow_container"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent" >
+ android:layout_width="match_parent"
+ android:layout_height="match_parent" >
<FrameLayout
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
android:padding="10dip" >
<LinearLayout
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
android:orientation="vertical"
android:background="@android:drawable/dialog_frame" >
<WebView android:id="@+id/webview"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
android:fadeScrollbars="true"
android:scrollbarStyle="outsideOverlay"
android:layout_weight="1" />
</LinearLayout>
</FrameLayout>
<LinearLayout
- android:layout_width="fill_parent"
+ android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_gravity="right"
diff --git a/res/layout/custom_screen.xml b/res/layout/custom_screen.xml
index 8bc03fb..90dc324 100644
--- a/res/layout/custom_screen.xml
+++ b/res/layout/custom_screen.xml
@@ -18,21 +18,21 @@
<FrameLayout android:id="@+id/fullscreen_custom_content"
android:visibility="gone"
android:background="@color/black"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
/>
<LinearLayout android:orientation="vertical"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent">
+ android:layout_width="match_parent"
+ android:layout_height="match_parent">
<LinearLayout android:id="@+id/error_console"
- android:layout_width="fill_parent"
+ android:layout_width="match_parent"
android:layout_height="wrap_content"
/>
<FrameLayout android:id="@+id/main_content"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
/>
</LinearLayout>
</FrameLayout>
diff --git a/res/layout/empty_history.xml b/res/layout/empty_history.xml
index 8fd3c01..4484a16 100644
--- a/res/layout/empty_history.xml
+++ b/res/layout/empty_history.xml
@@ -16,8 +16,8 @@
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/empty_view"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
android:text="@string/empty_history"
android:background="@color/black"
android:textColor="@color/white"
diff --git a/res/layout/error_console.xml b/res/layout/error_console.xml
index 0fffcde..e239622 100644
--- a/res/layout/error_console.xml
+++ b/res/layout/error_console.xml
@@ -17,14 +17,14 @@
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/error_console_view_group_id"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
android:orientation="vertical"
android:background="#000000">
<TextView android:id="@+id/error_console_header_id"
android:text="@string/error_console_header_text_minimized"
- android:layout_width="fill_parent"
+ android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingTop="2dip"
android:paddingBottom="2dip"
@@ -35,7 +35,7 @@
<view class="com.android.browser.ErrorConsoleView$ErrorConsoleListView"
android:id="@+id/error_console_list_id"
- android:layout_width="fill_parent"
+ android:layout_width="match_parent"
android:layout_height="200dip"
android:visibility="gone"
android:layout_weight="1"
@@ -44,7 +44,7 @@
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/error_console_eval_view_group_id"
- android:layout_width="fill_parent"
+ android:layout_width="match_parent"
android:layout_height="wrap_content"
android:visibility="gone">
diff --git a/res/layout/geolocation_permissions_prompt.xml b/res/layout/geolocation_permissions_prompt.xml
index 357da00..cdb25d2 100755
--- a/res/layout/geolocation_permissions_prompt.xml
+++ b/res/layout/geolocation_permissions_prompt.xml
@@ -18,13 +18,13 @@
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:fitsSystemWindows="true"
- android:layout_width="fill_parent"
+ android:layout_width="match_parent"
android:layout_height="wrap_content">
<!-- Use an inner element as we can't show a hidden outermost element -->
<LinearLayout android:id="@+id/inner"
android:orientation="vertical"
- android:layout_width="fill_parent"
+ android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/black"
android:paddingTop="1px"
@@ -33,21 +33,21 @@
<!-- White line -->
<View
android:orientation="vertical"
- android:layout_width="fill_parent"
+ android:layout_width="match_parent"
android:layout_height="1px"
android:background="@color/white" />
<!-- Container for content -->
<LinearLayout
android:orientation="vertical"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
android:background="@color/geolocation_permissions_prompt_background"
android:padding="6dip">
<!-- 'google.com wants to know your location' -->
<TextView android:id="@+id/message"
- android:layout_width="fill_parent"
+ android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="14dip"
android:textColor="@color/black" />
@@ -55,7 +55,7 @@
<!-- Checkbox -->
<LinearLayout
android:orientation="horizontal"
- android:layout_width="fill_parent"
+ android:layout_width="match_parent"
android:layout_height="wrap_content">
<CheckBox android:id="@+id/remember"
android:layout_width="wrap_content"
@@ -71,7 +71,7 @@
<!-- Buttons -->
<LinearLayout
- android:layout_width="fill_parent"
+ android:layout_width="match_parent"
android:layout_height="wrap_content">
<Button android:id="@+id/share_button"
android:text="@string/geolocation_permissions_prompt_share"
diff --git a/res/layout/history_header.xml b/res/layout/history_header.xml
index a390c37..e03b009 100644
--- a/res/layout/history_header.xml
+++ b/res/layout/history_header.xml
@@ -15,7 +15,7 @@
-->
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="fill_parent"
+ android:layout_width="match_parent"
android:layout_height="wrap_content"
android:minHeight="?android:attr/listPreferredItemHeight"
android:textAppearance="?android:attr/textAppearanceMedium"
diff --git a/res/layout/history_item.xml b/res/layout/history_item.xml
index 50903a4..4522a75 100644
--- a/res/layout/history_item.xml
+++ b/res/layout/history_item.xml
@@ -15,7 +15,7 @@
-->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="fill_parent"
+ android:layout_width="match_parent"
android:layout_height="wrap_content"
android:minHeight="?android:attr/listPreferredItemHeight"
android:orientation="horizontal"
diff --git a/res/layout/http_authentication.xml b/res/layout/http_authentication.xml
index 01cd3af..cc785c9 100644
--- a/res/layout/http_authentication.xml
+++ b/res/layout/http_authentication.xml
@@ -15,7 +15,7 @@
-->
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="fill_parent"
+ android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_horizontal"
android:orientation="vertical">
diff --git a/res/layout/no_downloads.xml b/res/layout/no_downloads.xml
index 1c1e1cd..6918eab 100644
--- a/res/layout/no_downloads.xml
+++ b/res/layout/no_downloads.xml
@@ -15,8 +15,8 @@
-->
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
android:text="@string/no_downloads"
android:background="@color/black"
android:textColor="@color/white"
diff --git a/res/layout/page_info.xml b/res/layout/page_info.xml
index ee45082..275fcf4 100644
--- a/res/layout/page_info.xml
+++ b/res/layout/page_info.xml
@@ -16,12 +16,12 @@
<ScrollView
xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="fill_parent"
+ android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >
<LinearLayout
- android:layout_width="fill_parent"
+ android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >
@@ -40,7 +40,7 @@
<!-- Address: -->
<TableLayout
- android:layout_width="fill_parent"
+ android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
diff --git a/res/layout/permission_dialog.xml b/res/layout/permission_dialog.xml
index ff24eaf..a9c31a3 100644
--- a/res/layout/permission_dialog.xml
+++ b/res/layout/permission_dialog.xml
@@ -19,13 +19,13 @@
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:drawingCacheQuality="auto"
- android:layout_width="fill_parent"
+ android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="0dip">
<LinearLayout
- android:layout_width="fill_parent"
+ android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:padding="10dip">
@@ -51,12 +51,12 @@
</LinearLayout>
<LinearLayout
- android:layout_width="fill_parent"
+ android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<ImageView android:id="@+id/titleDivider"
- android:layout_width="fill_parent"
+ android:layout_width="match_parent"
android:layout_height="1dip"
android:scaleType="fitXY"
android:gravity="fill_horizontal"
@@ -67,14 +67,14 @@
</LinearLayout>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="fill_parent"
+ android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingBottom="10dip"
android:layout_weight="1">
<LinearLayout
android:orientation="vertical"
- android:layout_width="fill_parent"
+ android:layout_width="match_parent"
android:paddingTop="10dip"
android:paddingLeft="10dip"
android:paddingRight="10dip"
@@ -82,7 +82,7 @@
<TextView
android:id="@+id/origin"
- android:layout_width="fill_parent"
+ android:layout_width="match_parent"
android:layout_height="wrap_content"
android:visibility="gone"
android:textStyle="bold"
@@ -92,7 +92,7 @@
<TextView
android:id="@+id/dialog_message"
- android:layout_width="fill_parent"
+ android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingLeft="4dip"
android:paddingTop="10dip"
@@ -105,7 +105,7 @@
</ScrollView>
<LinearLayout
- android:layout_width="fill_parent"
+ android:layout_width="match_parent"
android:background="@color/gray"
android:layout_height="wrap_content"
android:paddingTop="4dip"
diff --git a/res/layout/ssl_certificate.xml b/res/layout/ssl_certificate.xml
index 9f9bbf1..a137d66 100644
--- a/res/layout/ssl_certificate.xml
+++ b/res/layout/ssl_certificate.xml
@@ -16,11 +16,11 @@
<ScrollView
xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="fill_parent"
+ android:layout_width="match_parent"
android:layout_height="wrap_content" >
<LinearLayout
- android:layout_width="fill_parent"
+ android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >
@@ -28,7 +28,7 @@
<LinearLayout
android:id="@+id/placeholder"
android:layout_height="wrap_content"
- android:layout_width="fill_parent"
+ android:layout_width="match_parent"
android:layout_marginTop="12dip"
android:orientation="vertical" />
@@ -36,7 +36,7 @@
<ImageView
android:id="@+id/title_separator"
android:src="@android:drawable/divider_horizontal_dark"
- android:layout_width="fill_parent"
+ android:layout_width="match_parent"
android:layout_height="wrap_content"
android:scaleType="fitXY"
android:layout_weight="1"
@@ -46,7 +46,7 @@
android:layout_marginBottom="12dip" />
<TableLayout
- android:layout_width="fill_parent"
+ android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
diff --git a/res/layout/ssl_success.xml b/res/layout/ssl_success.xml
index dad654a..e819f23 100644
--- a/res/layout/ssl_success.xml
+++ b/res/layout/ssl_success.xml
@@ -15,7 +15,7 @@
-->
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="fill_parent"
+ android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >
diff --git a/res/layout/ssl_warning.xml b/res/layout/ssl_warning.xml
index 8bc406a..285c189 100644
--- a/res/layout/ssl_warning.xml
+++ b/res/layout/ssl_warning.xml
@@ -15,7 +15,7 @@
-->
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="fill_parent"
+ android:layout_width="match_parent"
android:layout_height="wrap_content"
android:shrinkColumns="1"
android:orientation="horizontal" >
diff --git a/res/layout/ssl_warnings.xml b/res/layout/ssl_warnings.xml
index 5a02d97..7e43256 100644
--- a/res/layout/ssl_warnings.xml
+++ b/res/layout/ssl_warnings.xml
@@ -16,12 +16,12 @@
<ScrollView
xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="fill_parent"
+ android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<LinearLayout
- android:layout_width="fill_parent"
+ android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
@@ -29,7 +29,7 @@
<TextView
android:id="@+id/warnings_header"
android:layout_height="wrap_content"
- android:layout_width="fill_parent"
+ android:layout_width="match_parent"
android:textSize="18sp"
android:textColor="@color/ssl_text_label"
android:gravity="left"
@@ -42,7 +42,7 @@
<LinearLayout
android:id="@+id/placeholder"
android:layout_height="wrap_content"
- android:layout_width="fill_parent"
+ android:layout_width="match_parent"
android:layout_marginTop="12dip"
android:orientation="vertical" />
diff --git a/res/layout/tab.xml b/res/layout/tab.xml
index e6ec970..abef51d 100755
--- a/res/layout/tab.xml
+++ b/res/layout/tab.xml
@@ -22,19 +22,19 @@
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:fitsSystemWindows="true"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent">
+ android:layout_width="match_parent"
+ android:layout_height="match_parent">
<!-- Wrapper layout for the WebView, which must be in a FrameLayout. -->
<FrameLayout android:id="@+id/webview_wrapper"
- android:layout_width="fill_parent"
+ android:layout_width="match_parent"
android:layout_height="0dip"
android:layout_weight="1" />
<!-- Geolocation permissions prompt -->
<com.android.browser.GeolocationPermissionsPrompt
android:id="@+id/geolocation_permissions_prompt"
- android:layout_width="fill_parent"
+ android:layout_width="match_parent"
android:layout_height="wrap_content" />
</LinearLayout>
diff --git a/res/layout/tab_view.xml b/res/layout/tab_view.xml
index a5302f4..885f4cf 100644
--- a/res/layout/tab_view.xml
+++ b/res/layout/tab_view.xml
@@ -17,7 +17,7 @@
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_height="wrap_content"
android:minHeight="?android:attr/listPreferredItemHeight"
- android:layout_width="fill_parent"
+ android:layout_width="match_parent"
android:orientation="horizontal"
android:gravity="center_vertical"
>
@@ -37,7 +37,7 @@
android:orientation="vertical"
>
<TextView android:id="@+id/title"
- android:layout_width="fill_parent"
+ android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceMedium"
android:maxLines="1"
@@ -45,7 +45,7 @@
android:ellipsize="end"
/>
<TextView android:id="@+id/url"
- android:layout_width="fill_parent"
+ android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceSmall"
android:maxLines="1"
@@ -56,14 +56,14 @@
<View android:id="@+id/divider"
android:background="#ff313431"
android:layout_width="1dip"
- android:layout_height="fill_parent"
+ android:layout_height="match_parent"
android:layout_marginLeft="8dip"
android:layout_marginTop="5dip"
android:layout_marginBottom="5dip"
/>
<view class="com.android.browser.ActiveTabsPage$CloseHolder" android:id="@+id/close"
android:layout_width="wrap_content"
- android:layout_height="fill_parent"
+ android:layout_height="match_parent"
android:paddingLeft="18dip"
android:paddingRight="18dip"
android:background="@drawable/close_background"
diff --git a/res/layout/tab_view_add_tab.xml b/res/layout/tab_view_add_tab.xml
index 0752a84..f69865e 100644
--- a/res/layout/tab_view_add_tab.xml
+++ b/res/layout/tab_view_add_tab.xml
@@ -17,7 +17,7 @@
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_height="wrap_content"
android:minHeight="?android:attr/listPreferredItemHeight"
- android:layout_width="fill_parent"
+ android:layout_width="match_parent"
android:orientation="horizontal"
android:gravity="center_vertical"
>
@@ -28,7 +28,7 @@
android:layout_marginRight="8dip"
android:src="@drawable/ic_list_new_window"/>
<TextView
- android:layout_width="fill_parent"
+ android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceMedium"
android:maxLines="1"
diff --git a/res/layout/tabitem.xml b/res/layout/tabitem.xml
index 9c82972..6fbc0a3 100644
--- a/res/layout/tabitem.xml
+++ b/res/layout/tabitem.xml
@@ -15,18 +15,18 @@
-->
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="fill_parent"
+ android:layout_width="match_parent"
android:orientation="vertical"
android:padding="4dip"
android:background="@color/white">
<com.android.browser.FakeWebView android:id="@+id/icon"
android:background="@color/black"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent" />
+ android:layout_width="match_parent"
+ android:layout_height="match_parent" />
<TextView android:id="@+id/label"
- android:layout_width="fill_parent"
+ android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
android:textAppearance="?android:attr/textAppearanceMedium"
diff --git a/res/layout/tabs.xml b/res/layout/tabs.xml
index 759e0c7..c212547 100644
--- a/res/layout/tabs.xml
+++ b/res/layout/tabs.xml
@@ -15,21 +15,21 @@
-->
<TabHost xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@android:id/tabhost"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent">
+ android:layout_width="match_parent"
+ android:layout_height="match_parent">
<LinearLayout
android:orientation="vertical"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent">
+ android:layout_width="match_parent"
+ android:layout_height="match_parent">
<TabWidget android:id="@android:id/tabs"
- android:layout_width="fill_parent"
+ android:layout_width="match_parent"
android:layout_height="wrap_content"
/>
<FrameLayout android:id="@android:id/tabcontent"
- android:layout_width="fill_parent"
+ android:layout_width="match_parent"
android:layout_height="0dip"
android:layout_weight="1"
/>
diff --git a/res/layout/title_bar.xml b/res/layout/title_bar.xml
index 1ea33fc..d619d6b 100644
--- a/res/layout/title_bar.xml
+++ b/res/layout/title_bar.xml
@@ -16,7 +16,7 @@
-->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="fill_parent"
+ android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:paddingLeft="8dip"
@@ -27,13 +27,14 @@
<ProgressBar android:id="@+id/progress_horizontal"
style="?android:attr/progressBarStyleHorizontal"
- android:layout_width="fill_parent"
+ android:layout_width="match_parent"
android:layout_height="5dip"
+ android:layout_marginLeft="1dip"
android:max="100"
/>
<LinearLayout
- android:layout_width="fill_parent"
+ android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
>
@@ -74,7 +75,7 @@
<ImageView
android:id="@+id/rt_btn"
android:layout_width="wrap_content"
- android:layout_height="fill_parent"
+ android:layout_height="match_parent"
android:layout_marginLeft="6dip"
android:scaleType="center"
android:layout_marginBottom="4dip"
diff --git a/res/layout/title_bar_bg.xml b/res/layout/title_bar_bg.xml
index 3e19c5c..1dbc5e5 100644
--- a/res/layout/title_bar_bg.xml
+++ b/res/layout/title_bar_bg.xml
@@ -23,7 +23,7 @@
<view class="com.android.browser.BrowserActivity$Shadow"
android:id="@+id/shadow"
android:layout_height="5dip"
- android:layout_width="fill_parent"
+ android:layout_width="match_parent"
android:background="@*android:drawable/title_bar_shadow"
/>
</LinearLayout>
diff --git a/res/layout/website_settings_row.xml b/res/layout/website_settings_row.xml
index 4901ff1..6308035 100644
--- a/res/layout/website_settings_row.xml
+++ b/res/layout/website_settings_row.xml
@@ -16,17 +16,18 @@
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:drawingCacheQuality="auto"
- android:layout_width="fill_parent"
+ android:layout_width="match_parent"
android:layout_height="?android:attr/listPreferredItemHeight"
- android:gravity="center"
+ android:gravity="center_vertical"
android:padding="0dip">
<ImageView android:id="@+id/icon"
- android:layout_width="32dip"
- android:layout_height="32dip"
- android:layout_alignParentTop="true"
- android:layout_alignParentLeft="true"
- android:layout_alignParentBottom="true"
+ android:layout_width="20dip"
+ android:layout_height="20dip"
+ android:layout_marginLeft="18dip"
+ android:layout_marginRight="18dip"
+ android:layout_centerVertical="true"
+ android:background="@drawable/fav_icn_background"
android:padding="2dip" />
<LinearLayout android:id="@+id/features"
@@ -49,27 +50,37 @@
android:layout_height="32dip"
android:padding="2dip" />
+ <ImageView android:id="@+id/feature_icon"
+ android:layout_width="32dip"
+ android:layout_height="32dip"
+ android:padding="2dip"
+ android:layout_centerVertical="true"
+ android:layout_alignParentRight="true"
+ android:visibility="gone" />
</LinearLayout>
- <TextView android:id="@+id/title"
+ <LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
- android:layout_alignParentTop="true"
+ android:layout_toRightOf="@id/icon"
+ android:layout_toLeftOf="@id/features"
+ android:layout_centerVertical="true"
android:layout_alignWithParentIfMissing="true"
- android:layout_toRightOf="@id/icon"
- android:layout_toLeftOf="@id/features"
- android:layout_marginLeft="6dip"
- android:layout_marginTop="6dip"
- android:textAppearance="?android:attr/textAppearanceLarge"/>
+ android:orientation="vertical">
- <TextView android:id="@+id/subtitle"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_toRightOf="@id/icon"
- android:layout_toLeftOf="@id/features"
- android:layout_below="@id/title"
- android:layout_alignLeft="@id/title"
- android:layout_marginBottom="2dip"
- android:textAppearance="?android:attr/textAppearanceSmall"/>
+ <TextView android:id="@+id/title"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:textAppearance="?android:attr/textAppearanceMedium"
+ android:maxLines="2"
+ android:ellipsize="end" />
+ <TextView android:id="@+id/subtitle"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:textAppearance="?android:attr/textAppearanceSmall"
+ android:visibility="gone"
+ android:singleLine="true"
+ android:ellipsize="end" />
+ </LinearLayout>
</RelativeLayout>
diff --git a/res/menu/browsercontext.xml b/res/menu/browsercontext.xml
index 8b2678e..70cf8d4 100644
--- a/res/menu/browsercontext.xml
+++ b/res/menu/browsercontext.xml
@@ -54,6 +54,8 @@
android:title="@string/contextmenu_download_image"/>
<item android:id="@+id/view_image_context_menu_id"
android:title="@string/contextmenu_view_image"/>
+ <item android:id="@+id/set_wallpaper_context_menu_id"
+ android:title="@string/contextmenu_set_wallpaper"/>
</group>
</menu>
diff --git a/res/menu/downloadhistory.xml b/res/menu/downloadhistory.xml
index ee3b751..195b0db 100644
--- a/res/menu/downloadhistory.xml
+++ b/res/menu/downloadhistory.xml
@@ -16,9 +16,6 @@
<menu xmlns:android="http://schemas.android.com/apk/res/android">
- <item android:id="@+id/download_menu_clear_all"
- android:title="@string/download_menu_clear_all"
- android:icon="@*android:drawable/ic_menu_clear_playlist" />
<item android:id="@+id/download_menu_cancel_all"
android:title="@string/download_menu_cancel_all"
android:icon="@android:drawable/ic_menu_close_clear_cancel" />
diff --git a/res/menu/downloadhistorycontextfinished.xml b/res/menu/downloadhistorycontextfinished.xml
index 2714b5b..8d1fdd0 100644
--- a/res/menu/downloadhistorycontextfinished.xml
+++ b/res/menu/downloadhistorycontextfinished.xml
@@ -18,7 +18,7 @@
<item android:id="@+id/download_menu_open"
android:title="@string/download_menu_open" />
- <item android:id="@+id/download_menu_clear"
- android:title="@string/download_menu_clear" />
+ <item android:id="@+id/download_menu_delete"
+ android:title="@string/download_menu_delete" />
</menu>
diff --git a/res/values-cs/arrays.xml b/res/values-cs/arrays.xml
deleted file mode 100644
index 84ef7b7..0000000
--- a/res/values-cs/arrays.xml
+++ /dev/null
@@ -1,32 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2009 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.
--->
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string-array name="webstorage_quota_entries">
- <item msgid="5433313236875537673">"Není povolena žádná kvóta"</item>
- <item msgid="7374272188672967690">"5 MB"</item>
- <item msgid="8699352701856136738">"10 MB"</item>
- <item msgid="2018822431469084862">"30 MB"</item>
- <item msgid="5383642976774534074">"100 MB"</item>
- </string-array>
- <string-array name="webstorage_quota_entries_values">
- <item msgid="7620410313725236055">"0"</item>
- <item msgid="4302688814760304206">"5"</item>
- <item msgid="7291990205847586165">"10"</item>
- <item msgid="916913372287112423">"30"</item>
- <item msgid="3437188301324229987">"100"</item>
- </string-array>
-</resources>
diff --git a/res/values-cs/strings.xml b/res/values-cs/strings.xml
index 11e4938..33c9833 100644
--- a/res/values-cs/strings.xml
+++ b/res/values-cs/strings.xml
@@ -16,10 +16,12 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="application_name" msgid="1935869255545976415">"Prohlížeč"</string>
- <string name="new_tab" msgid="4505722538297295141">"Nové okno"</string>
- <string name="active_tabs" msgid="3050623868203544623">"Okna"</string>
+ <!-- no translation found for new_tab (4505722538297295141) -->
+ <skip />
+ <!-- no translation found for active_tabs (3050623868203544623) -->
+ <skip />
<string name="tab_bookmarks" msgid="2305793036003473653">"Záložky"</string>
- <string name="tab_most_visited" msgid="1077402532455000703">"Nejnavštěvovanější"</string>
+ <string name="tab_most_visited" msgid="1077402532455000703">"Často navštěvované"</string>
<string name="tab_history" msgid="1979267558744613746">"Historie"</string>
<string name="added_to_bookmarks" msgid="1020224130695956728">"Přidáno k záložkám"</string>
<string name="removed_from_bookmarks" msgid="6063705902028438800">"Odstraněno ze záložek"</string>
@@ -74,12 +76,14 @@
<string name="create_shortcut_bookmark" msgid="9202323987633899835">"Přidat odkaz na plochu"</string>
<string name="open_bookmark" msgid="8473581305759935790">"Otevřít"</string>
<string name="remove_bookmark" msgid="8407495852801410891">"Smazat záložku"</string>
- <string name="remove_from_bookmarks" msgid="4374080666576982775">"Zrušit přístup k poloze"</string>
+ <string name="remove_from_bookmarks" msgid="4374080666576982775">"Odebrat ze záložek"</string>
<string name="remove_history_item" msgid="5021424935726728618">"Odstranit z historie"</string>
<string name="set_as_homepage" msgid="4752937379414905560">"Nastavit jako domovskou stránku"</string>
<string name="bookmark_saved" msgid="2766434679871317557">"Uloženo do záložek."</string>
- <string name="bookmark_not_saved" msgid="700600955089376724">"Záložku nelze uložit."</string>
- <string name="homepage_set" msgid="8768087280310966395">"Domovská stránka byla nastavena."</string>
+ <!-- no translation found for bookmark_not_saved (700600955089376724) -->
+ <skip />
+ <!-- no translation found for homepage_set (8768087280310966395) -->
+ <skip />
<string name="bookmark_needs_title" msgid="6245900436119218187">"Záložka musí mít název."</string>
<string name="bookmark_needs_url" msgid="7809876865972755158">"Záložka musí mít umístění."</string>
<string name="empty_bookmark" msgid="7008697085928540511">"Nelze vytvořit prázdnou záložku."</string>
@@ -87,7 +91,7 @@
<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>
<string name="switch_to_thumbnails" msgid="5493351529609043151">"Zobrazit jako miniatury"</string>
- <string name="switch_to_list" msgid="8900531247982121055">"Zrušit přístup k poloze"</string>
+ <string name="switch_to_list" msgid="8900531247982121055">"Zobrazit jako 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>
@@ -107,7 +111,8 @@
<string name="shortcut_bookmark" msgid="3974876480401135895">"Přidat do záložek"</string>
<string name="history" msgid="2451240511251410032">"Historie"</string>
<string name="menu_view_download" msgid="2124570321712995120">"Stahování"</string>
- <string name="copy_page_url" msgid="7635062169011319208">"Kopírovat adresu URL stránky"</string>
+ <!-- no translation found for copy_page_url (7635062169011319208) -->
+ <skip />
<string name="share_page" msgid="593756995297268343">"Sdílet stránku"</string>
<string name="contextmenu_openlink" msgid="7237961252214188935">"Otevřít"</string>
<string name="contextmenu_openlink_newwindow" msgid="992765050093960353">"Otevřít v novém okně"</string>
@@ -122,49 +127,64 @@
<string name="contextmenu_add_contact" msgid="3183511922223645716">"Přidat kontakt"</string>
<string name="contextmenu_send_mail" msgid="1014513374828775660">"Odeslat e-mail"</string>
<string name="contextmenu_map" msgid="7471390435434034912">"Mapa"</string>
- <string name="choosertitle_sharevia" msgid="4600490613341909086">"Sdílet pomocí"</string>
+ <!-- no translation found for choosertitle_sharevia (4600490613341909086) -->
+ <skip />
<string name="clear" msgid="7070043081700011461">"Vymazat"</string>
<string name="replace" msgid="4843033491070384047">"Nahradit"</string>
<string name="browser_bookmarks_page_bookmarks_text" msgid="6787605028726162673">"Záložky"</string>
<string name="menu_preferences" msgid="6709237687234102240">"Nastavení"</string>
<string name="pref_content_title" msgid="722227111894838633">"Nastavení obsahu stránky"</string>
<string name="pref_content_load_images" msgid="2125616852957377561">"Načítat obrázky"</string>
- <string name="pref_content_load_images_summary" msgid="5055874125248398584">"Zobrazovat na webových stránkách obrázky"</string>
+ <!-- no translation found for pref_content_load_images_summary (5055874125248398584) -->
+ <skip />
<string name="pref_content_block_popups" msgid="7808433807197256726">"Blokovat vyskakovací okna"</string>
<string name="pref_content_javascript" msgid="4570972030299516843">"Povolit JavaScript"</string>
<string name="pref_content_open_in_background" msgid="824123779725118663">"Otevřít na pozadí"</string>
- <string name="pref_content_plugins" msgid="7231944644794301582">"Povolit pluginy"</string>
- <string name="pref_content_open_in_background_summary" msgid="1737664075721181678">"Otevírat nová okna za aktuálním oknem"</string>
+ <!-- no translation found for pref_content_plugins (7231944644794301582) -->
+ <skip />
+ <!-- no translation found for pref_content_open_in_background_summary (1737664075721181678) -->
+ <skip />
<string name="pref_content_homepage" msgid="6082437160778559806">"Nastavit domovskou stránku"</string>
- <string name="pref_content_autofit" msgid="8260474534053660809">"Automaticky přizpůsobit"</string>
- <string name="pref_content_autofit_summary" msgid="4587831659894879986">"Přizpůsobit velikost webových stránek obrazovce"</string>
- <string name="pref_content_landscape_only" msgid="2022546812766219672">"Zobrazení pouze na šířku"</string>
- <string name="pref_content_landscape_only_summary" msgid="1008238895535428855">"Zobrazit stránky pouze s displejem otočeným na šířku"</string>
+ <string name="pref_content_autofit" msgid="8260474534053660809">"Automaticky přizpůsobit stránky"</string>
+ <!-- no translation found for pref_content_autofit_summary (4587831659894879986) -->
+ <skip />
+ <!-- no translation found for pref_content_landscape_only (2022546812766219672) -->
+ <skip />
+ <!-- no translation found for pref_content_landscape_only_summary (1008238895535428855) -->
+ <skip />
<string name="pref_privacy_title" msgid="1052470980370846151">"Nastavení ochrany osobních údajů"</string>
<string name="pref_privacy_clear_cache" msgid="3380316479925886998">"Vymazat mezipaměť"</string>
<string name="pref_privacy_clear_cache_summary" msgid="2216463577207991454">"Vymazat všechen obsah a databáze uložené do místní mezipaměti"</string>
- <string name="pref_privacy_clear_cache_dlg" msgid="5541011591300753881">"Obsah a databáze uložené v místní mezipaměti budou vymazány."</string>
- <string name="pref_privacy_clear_cookies" msgid="3095583579133780331">"Vymazat soubory cookie"</string>
- <string name="pref_privacy_clear_cookies_summary" msgid="6962742063990677520">"Vymazat všechny soubory cookie prohlížeče"</string>
- <string name="pref_privacy_clear_cookies_dlg" msgid="552855688091432682">"Všechny soubory cookie budou vymazány."</string>
+ <!-- no translation found for pref_privacy_clear_cache_dlg (5541011591300753881) -->
+ <skip />
+ <string name="pref_privacy_clear_cookies" msgid="3095583579133780331">"Vymazat všechny soubory cookie"</string>
+ <!-- no translation found for pref_privacy_clear_cookies_summary (6962742063990677520) -->
+ <skip />
+ <!-- no translation found for pref_privacy_clear_cookies_dlg (552855688091432682) -->
+ <skip />
<string name="pref_privacy_clear_history" msgid="8723795508825198477">"Vymazat historii"</string>
- <string name="pref_privacy_clear_history_summary" msgid="6868501330708940734">"Vymazat historii navigace v prohlížeči"</string>
- <string name="pref_privacy_clear_history_dlg" msgid="544903007914753853">"Historie navigace v prohlížeči bude vymazána."</string>
+ <string name="pref_privacy_clear_history_summary" msgid="6868501330708940734">"Vymazat historii stránek prohlížeče"</string>
+ <!-- no translation found for pref_privacy_clear_history_dlg (544903007914753853) -->
+ <skip />
<string name="pref_privacy_clear_form_data" msgid="4232668196344383987">"Vymazat data formulářů"</string>
<string name="pref_privacy_clear_form_data_summary" msgid="1790390894719517167">"Vymazat všechna uložená data formulářů"</string>
- <string name="pref_privacy_clear_form_data_dlg" msgid="4443621086781197928">"Všechna uložená data formulářů budou vymazána."</string>
+ <!-- no translation found for pref_privacy_clear_form_data_dlg (4443621086781197928) -->
+ <skip />
<string name="pref_privacy_clear_passwords" msgid="4750234112289277480">"Vymazat hesla"</string>
- <string name="pref_privacy_clear_passwords_summary" msgid="8856782718942903335">"Vymazat všechna uložená hesla"</string>
- <string name="pref_privacy_clear_passwords_dlg" msgid="2083869328824248255">"Všechna uložená hesla budou vymazána."</string>
+ <!-- no translation found for pref_privacy_clear_passwords_summary (8856782718942903335) -->
+ <skip />
+ <!-- no translation found for pref_privacy_clear_passwords_dlg (2083869328824248255) -->
+ <skip />
<string name="pref_privacy_enable_geolocation" msgid="1395040170290765686">"Povolit polohu"</string>
- <string name="pref_privacy_enable_geolocation_summary" msgid="8437020934664306205">"Povolit webovým stránkám žádat o přístup k informacím o vaší poloze"</string>
- <string name="pref_privacy_clear_geolocation_access" msgid="6649680770030042980">"Zrušit přístup k poloze"</string>
- <string name="pref_privacy_clear_geolocation_access_summary" msgid="7750143359497314679">"Zrušit všem webovým stránkám přístup k poloze"</string>
- <string name="pref_privacy_clear_geolocation_access_dlg" msgid="7327063124488827244">"Zrušit všem webovým stránkám přístup k poloze"</string>
+ <string name="pref_privacy_enable_geolocation_summary" msgid="8437020934664306205">"Povolit webovým stránkám požádat o přístup k informacím o vaší poloze"</string>
+ <string name="pref_privacy_clear_geolocation_access" msgid="6649680770030042980">"Zrušit přístup k informacím o poloze"</string>
+ <string name="pref_privacy_clear_geolocation_access_summary" msgid="7750143359497314679">"Zrušit přístup k informacím o poloze pro všechny webové stránky"</string>
+ <string name="pref_privacy_clear_geolocation_access_dlg" msgid="7327063124488827244">"Zrušit přístup k informacím o poloze pro všechny webové stránky"</string>
<string name="pref_security_title" msgid="5763978646932160021">"Nastavení zabezpečení"</string>
<string name="pref_security_remember_passwords" msgid="6492957683454529549">"Zapamatovat hesla"</string>
- <string name="pref_security_remember_passwords_summary" msgid="256388703356349137">"Ukládat uživatelská jména a hesla pro webové stránky"</string>
- <string name="pref_security_save_form_data" msgid="1213669802810198893">"Zapamatovat data formulářů"</string>
+ <!-- no translation found for pref_security_remember_passwords_summary (256388703356349137) -->
+ <skip />
+ <string name="pref_security_save_form_data" msgid="1213669802810198893">"Zapamatovat data formuláře"</string>
<string name="pref_security_save_form_data_summary" msgid="4994074685153708026">"Zapamatovat si data zadaná do formulářů pro další použití"</string>
<string name="pref_security_show_security_warning" msgid="8901135676266754559">"Zobrazit upozornění zabezpečení"</string>
<string name="pref_security_show_security_warning_summary" msgid="8968906112720511704">"Zobrazit upozornění, pokud dojde k problému se zabezpečením webu"</string>
@@ -186,14 +206,17 @@
<item msgid="3840999588443167001">"Blízko"</item>
</string-array>
<string name="pref_default_zoom_dialogtitle" msgid="6095974367125109021">"Výchozí přiblížení"</string>
- <string name="pref_content_load_page" msgid="2219810141690955452">"Otevírat stránky v náhledu"</string>
- <string name="pref_content_load_page_summary" msgid="8792093504054149369">"Zobrazit náhled nově otevřených stránek"</string>
+ <!-- no translation found for pref_content_load_page (2219810141690955452) -->
+ <skip />
+ <!-- no translation found for pref_content_load_page_summary (8792093504054149369) -->
+ <skip />
<string name="pref_extras_title" msgid="3091250467679722382">"Upřesnit nastavení"</string>
- <string name="pref_extras_website_settings" msgid="67866640052455549">"Zrušit přístup k poloze"</string>
+ <string name="pref_extras_website_settings" msgid="67866640052455549">"Nastavení webových stránek"</string>
<string name="pref_extras_website_settings_summary" msgid="3917568895776162240">"Zobrazit pokročilá nastavení pro jednotlivé webové stránky"</string>
<string name="pref_extras_reset_default" msgid="8904000515846202110">"Obnovit výchozí"</string>
<string name="pref_extras_reset_default_summary" msgid="7984680562706914966">"Vymazat všechna data prohlížeče a obnovit všechna nastavení na výchozí hodnoty"</string>
- <string name="pref_extras_reset_default_dlg" msgid="6894807766578874830">"Budou vymazána všechna data prohlížeče a obnoveny výchozí hodnoty nastavení."</string>
+ <!-- no translation found for pref_extras_reset_default_dlg (6894807766578874830) -->
+ <skip />
<string name="pref_extras_reset_default_dlg_title" msgid="2250334970728938936">"Obnovit výchozí"</string>
<string name="pref_development_title" msgid="3263854204533056480">"Ladit"</string>
<string name="pref_default_text_encoding" msgid="5742965543955558478">"Kódování textu"</string>
@@ -206,20 +229,20 @@
</string-array>
<string name="pref_default_text_encoding_dialogtitle" msgid="5508255018084978547">"Kódování textu"</string>
<string name="pref_default_text_encoding_default" msgid="5272126711231936722">"Latin-1"</string>
- <string name="browserFrameRedirect" msgid="7049675479777828343">"Přesměrování"</string>
- <string name="browserFrame307Post" msgid="1429094844669510768">"Probíhá přesměrování webové stránky. Chcete data zadaná do formuláře znovu odeslat do nového umístění?"</string>
<string name="browserFrameNetworkErrorLabel" msgid="126892350904924893">"Problémy s datovým připojením"</string>
<string name="browserFrameFileErrorLabel" msgid="8063691502792670367">"Problém se souborem"</string>
<string name="browserFrameFormResubmitLabel" msgid="2685923472682180360">"Potvrdit"</string>
<string name="browserFrameFormResubmitMessage" msgid="2752182215695632138">"Stránka, kterou se pokoušíte zobrazit, obsahuje data, která již byla odeslána (POSTDATA). Pokud data odešlete znovu, jakákoli akce vykonaná pomocí formuláře na stránce bude provedena znovu (např. hledání či nákup online)."</string>
<string name="loadSuspendedTitle" msgid="675991625288706944">"Žádné připojení k síti"</string>
- <string name="loadSuspended" msgid="3133656588880851273">"Prohlížeč nemůže tuto stránku načíst, protože není k dispozici připojení k internetu."</string>
+ <!-- no translation found for loadSuspended (3133656588880851273) -->
+ <skip />
<string name="clear_history" msgid="5998307092715979619">"Vymazat historii"</string>
- <string name="browser_history" msgid="1038987118290272525">"Nedávno navštívené stránky"</string>
+ <!-- no translation found for browser_history (1038987118290272525) -->
+ <skip />
<string name="empty_history" msgid="8738772352308207274">"Historie prohlížeče je prázdná."</string>
<string name="add_new_bookmark" msgid="8086367791400349049">"Přidat záložku..."</string>
<string name="add_bookmark_short" msgid="3783984330998103735">"Přidat"</string>
- <string name="search_hint" msgid="4647356319916631820">"Zrušit přístup k poloze"</string>
+ <string name="search_hint" msgid="4647356319916631820">"Vyhledejte nebo zadejte adresu URL"</string>
<string name="search_button_text" msgid="5235226933877634410">"Přejít"</string>
<string name="search_settings_description" msgid="1422401062529014107">"Záložky a webová historie"</string>
<string name="attention" msgid="3473639060042811244">"Upozornění"</string>
@@ -258,37 +281,49 @@
<string name="download_pending_network" msgid="6548714525679461053">"Čekání na datové připojení..."</string>
<string name="download_running_paused" msgid="6418029352085656495">"Čekání na datové připojení..."</string>
<string name="download_canceled" msgid="6057083743144492515">"Stahování bylo zrušeno."</string>
- <string name="download_not_acceptable" msgid="313769696131563652">"Nelze stáhnout. Tento obsah není tímto telefonem podporován."</string>
+ <!-- no translation found for download_not_acceptable (313769696131563652) -->
+ <skip />
<string name="download_file_error" msgid="1206648050615176113">"Stahování nelze dokončit. Není dostatek místa."</string>
<string name="download_length_required" msgid="9038605488460437406">"Nelze stáhnout. Velikost položky nelze určit."</string>
<string name="download_precondition_failed" msgid="8327584102874295580">"Stahování bylo přerušeno a nelze v něm pokračovat."</string>
<string name="activity_instrumentation_test_runner" msgid="8215091309334005029">"Testovací verze prohlížeče"</string>
<string name="search_the_web" msgid="6046130189241962337">"Vyhledat na webu"</string>
- <string name="webstorage_outofspace_notification_title" msgid="1160474608059771788">"Zrušit přístup k poloze"</string>
+ <string name="webstorage_outofspace_notification_title" msgid="1160474608059771788">"Paměť prohlížeče je plná"</string>
<string name="webstorage_outofspace_notification_text" msgid="7341075135051829692">"Kliknutím uvolníte místo."</string>
- <string name="webstorage_clear_data_title" msgid="689484577124333977">"Zrušit přístup k poloze"</string>
- <string name="webstorage_clear_data_summary" msgid="3523128713743907805">"Zrušit přístup k poloze"</string>
+ <string name="webstorage_clear_data_title" msgid="689484577124333977">"Vymazat uložená data"</string>
+ <string name="webstorage_clear_data_summary" msgid="3523128713743907805">"Odebrat všechny databáze přidružené k těmto webovým stránkám"</string>
<string name="webstorage_clear_data_dialog_title" msgid="345457466368974706">"Vymazat uložená data"</string>
- <string name="webstorage_clear_data_dialog_message" msgid="6678281256970470125">"Zrušit přístup k poloze"</string>
- <string name="webstorage_clear_data_dialog_ok_button" msgid="2516563534211898636">"Vymazat vše"</string>
+ <string name="webstorage_clear_data_dialog_message" msgid="6678281256970470125">"Všechna data uložená těmito webovými stránkami budou smazána"</string>
+ <!-- no translation found for webstorage_clear_data_dialog_ok_button (2516563534211898636) -->
+ <skip />
<string name="webstorage_clear_data_dialog_cancel_button" msgid="2028867751958942762">"Zrušit"</string>
- <string name="webstorage_origin_summary_mb_stored" msgid="1985885826292236210">"Zrušit přístup k poloze"</string>
- <string name="loading_video" msgid="4887871585216091096">"Načítání videa"</string>
- <string name="geolocation_permissions_prompt_message" msgid="356796102004052471">"Web <xliff:g id="WEBSITE_ORIGIN">%s</xliff:g> požaduje informace o vaší poloze"</string>
- <string name="geolocation_permissions_prompt_share" msgid="9084486342048347976">"Sdílet polohu"</string>
- <string name="geolocation_permissions_prompt_dont_share" msgid="6303025160237860300">"Odmítnout"</string>
- <string name="geolocation_permissions_prompt_remember" msgid="3118526300707348308">"Zapamatovat předvolbu"</string>
- <string name="geolocation_settings_page_title" msgid="1745477985097536528">"Zrušit přístup k poloze"</string>
+ <string name="webstorage_origin_summary_mb_stored" msgid="1985885826292236210">"MB uloženo ve vašem telefonu"</string>
+ <!-- no translation found for loading_video (4887871585216091096) -->
+ <skip />
+ <!-- no translation found for geolocation_permissions_prompt_message (356796102004052471) -->
+ <skip />
+ <!-- no translation found for geolocation_permissions_prompt_share (9084486342048347976) -->
+ <skip />
+ <!-- no translation found for geolocation_permissions_prompt_dont_share (6303025160237860300) -->
+ <skip />
+ <!-- no translation found for geolocation_permissions_prompt_remember (3118526300707348308) -->
+ <skip />
+ <string name="geolocation_settings_page_title" msgid="1745477985097536528">"Zrušit přístup k informacím o poloze"</string>
<string name="geolocation_settings_page_summary_allowed" msgid="9180251524290811398">"Tyto stránky mohou aktuálně získat přístup k informacím o vaší poloze"</string>
- <string name="geolocation_settings_page_summary_not_allowed" msgid="4589649082203102544">"Zrušit přístup k poloze"</string>
- <string name="geolocation_settings_page_dialog_title" msgid="1549842043381347668">"Zrušit přístup k poloze"</string>
- <string name="geolocation_settings_page_dialog_message" msgid="7586671987576403993">"Přístup těchto webových stránek k poloze bude zrušen"</string>
+ <string name="geolocation_settings_page_summary_not_allowed" msgid="4589649082203102544">"Tyto stránky nemohou aktuálně získat přístup k informacím o vaší poloze"</string>
+ <string name="geolocation_settings_page_dialog_title" msgid="1549842043381347668">"Zrušit přístup k informacím o poloze"</string>
+ <string name="geolocation_settings_page_dialog_message" msgid="7586671987576403993">"Přístup těchto webových stránek k informacím o poloze bude zrušen"</string>
<string name="geolocation_settings_page_dialog_ok_button" msgid="4789434178048077287">"Zrušit přístup"</string>
<string name="geolocation_settings_page_dialog_cancel_button" msgid="7941036504673409747">"Zrušit"</string>
- <string name="website_settings_clear_all" msgid="8739804325997655980">"Vymazat vše"</string>
- <string name="website_settings_clear_all_dialog_title" msgid="7791826325122461718">"Vymazat všechna nastavení webu?"</string>
- <string name="website_settings_clear_all_dialog_message" msgid="6150502090601476333">"Všechna data webových stránek a oprávnění přistupovat k informacím o poloze budou vymazána."</string>
- <string name="website_settings_clear_all_dialog_ok_button" msgid="6401582240627669431">"Vymazat všechna data"</string>
- <string name="website_settings_clear_all_dialog_cancel_button" msgid="1896757051856611674">"Zrušit"</string>
+ <!-- no translation found for website_settings_clear_all (8739804325997655980) -->
+ <skip />
+ <!-- no translation found for website_settings_clear_all_dialog_title (7791826325122461718) -->
+ <skip />
+ <!-- no translation found for website_settings_clear_all_dialog_message (6150502090601476333) -->
+ <skip />
+ <!-- no translation found for website_settings_clear_all_dialog_ok_button (6401582240627669431) -->
+ <skip />
+ <!-- no translation found for website_settings_clear_all_dialog_cancel_button (1896757051856611674) -->
+ <skip />
<string name="zoom_overview_button_text" msgid="4146579940085488881">"Přehled"</string>
</resources>
diff --git a/res/values-da/arrays.xml b/res/values-da/arrays.xml
deleted file mode 100644
index 2048215..0000000
--- a/res/values-da/arrays.xml
+++ /dev/null
@@ -1,32 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2009 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.
--->
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string-array name="webstorage_quota_entries">
- <item msgid="5433313236875537673">"Der er ingen tilladt kvote"</item>
- <item msgid="7374272188672967690">"5 Mb"</item>
- <item msgid="8699352701856136738">"10 Mb"</item>
- <item msgid="2018822431469084862">"30 Mb"</item>
- <item msgid="5383642976774534074">"100 Mb"</item>
- </string-array>
- <string-array name="webstorage_quota_entries_values">
- <item msgid="7620410313725236055">"0"</item>
- <item msgid="4302688814760304206">"5"</item>
- <item msgid="7291990205847586165">"10"</item>
- <item msgid="916913372287112423">"30"</item>
- <item msgid="3437188301324229987">"100"</item>
- </string-array>
-</resources>
diff --git a/res/values-da/strings.xml b/res/values-da/strings.xml
index a5dde55..0a56413 100644
--- a/res/values-da/strings.xml
+++ b/res/values-da/strings.xml
@@ -16,8 +16,10 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="application_name" msgid="1935869255545976415">"Browser"</string>
- <string name="new_tab" msgid="4505722538297295141">"Nyt vindue"</string>
- <string name="active_tabs" msgid="3050623868203544623">"Vinduer"</string>
+ <!-- no translation found for new_tab (4505722538297295141) -->
+ <skip />
+ <!-- no translation found for active_tabs (3050623868203544623) -->
+ <skip />
<string name="tab_bookmarks" msgid="2305793036003473653">"Bogmærker"</string>
<string name="tab_most_visited" msgid="1077402532455000703">"Mest besøgte"</string>
<string name="tab_history" msgid="1979267558744613746">"Oversigt"</string>
@@ -44,7 +46,7 @@
<string name="ssl_continue" msgid="8031515015829358457">"Fortsæt"</string>
<string name="security_warning" msgid="6607795404322797541">"Sikkerhedsadvarsel"</string>
<string name="view_certificate" msgid="1472768887529093862">"Vis certifikat"</string>
- <string name="ssl_untrusted" msgid="5369967226521102194">"Dette certifikat stammer ikke fra en troværdig kilde."</string>
+ <string name="ssl_untrusted" msgid="5369967226521102194">"Dette certifikat stammer ikke fra en troværdig autoritet."</string>
<string name="ssl_mismatch" msgid="558688832420069896">"Navnet på dette websted stemmer ikke overens med navnet på certifikatet."</string>
<string name="ssl_expired" msgid="5739349389499575559">"Dette certifikat er udløbet."</string>
<string name="ssl_not_yet_valid" msgid="2893167846212645846">"Dette certifikat er ikke gyldigt endnu."</string>
@@ -58,8 +60,8 @@
<string name="validity_period" msgid="57988851973181309">"Gyldighed:"</string>
<string name="issued_on" msgid="2082890654801808368">"Udstedt den:"</string>
<string name="expires_on" msgid="8061200430557020704">"Udløber den:"</string>
- <string name="retrieving_creds_dlg_msg" msgid="9207671133094039879">"Henter loginoplysninger ..."</string>
- <string name="stopping" msgid="4839698519340302982">"Stopper ..."</string>
+ <string name="retrieving_creds_dlg_msg" msgid="9207671133094039879">"Henter logindetaljer ..."</string>
+ <string name="stopping" msgid="4839698519340302982">"Standser ..."</string>
<string name="stop" msgid="5687251076030630074">"Stop"</string>
<string name="reload" msgid="8585220783228408062">"Opdater"</string>
<string name="back" msgid="8414603107175713668">"Tilbage"</string>
@@ -76,16 +78,18 @@
<string name="remove_bookmark" msgid="8407495852801410891">"Slet bogmærke"</string>
<string name="remove_from_bookmarks" msgid="4374080666576982775">"Fjern fra bogmærker"</string>
<string name="remove_history_item" msgid="5021424935726728618">"Fjern fra oversigt"</string>
- <string name="set_as_homepage" msgid="4752937379414905560">"Angiv som startside"</string>
+ <string name="set_as_homepage" msgid="4752937379414905560">"Indstil som startside"</string>
<string name="bookmark_saved" msgid="2766434679871317557">"Gemt i bogmærker."</string>
- <string name="bookmark_not_saved" msgid="700600955089376724">"Bogmærket kunne ikke gemmes."</string>
- <string name="homepage_set" msgid="8768087280310966395">"Startsiden er indstillet."</string>
- <string name="bookmark_needs_title" msgid="6245900436119218187">"Bogmærket skal have et navn."</string>
- <string name="bookmark_needs_url" msgid="7809876865972755158">"Bogmærket skal have en placering."</string>
+ <!-- no translation found for bookmark_not_saved (700600955089376724) -->
+ <skip />
+ <!-- no translation found for homepage_set (8768087280310966395) -->
+ <skip />
+ <string name="bookmark_needs_title" msgid="6245900436119218187">"Bogmærke skal have et navn."</string>
+ <string name="bookmark_needs_url" msgid="7809876865972755158">"Bogmærke skal have en placering."</string>
<string name="empty_bookmark" msgid="7008697085928540511">"Der kan ikke oprettes et tomt bogmærke."</string>
- <string name="bookmark_url_not_valid" msgid="6719785633980202419">"Webadressen er ikke gyldig."</string>
+ <string name="bookmark_url_not_valid" msgid="6719785633980202419">"Webadresse er ikke gyldig."</string>
<string name="delete_bookmark" msgid="2422989994934201992">"Slet"</string>
- <string name="bookmark_page" msgid="6845189305130307274">"Opret bogmærke for sidst viste side"</string>
+ <string name="bookmark_page" msgid="6845189305130307274">"Tilføj bogmærke ved sidst viste side"</string>
<string name="switch_to_thumbnails" msgid="5493351529609043151">"Miniaturevisning"</string>
<string name="switch_to_list" msgid="8900531247982121055">"Listevisning"</string>
<string name="current_page" msgid="7510129573681663135">"fra "</string>
@@ -97,21 +101,22 @@
<string name="select_dot" msgid="6299170761900561967">"Vælg tekst"</string>
<string name="view_tabs" msgid="1119097492003550564">"Vinduesoversigt"</string>
<string name="view_tabs_condensed" msgid="5803955493821945369">"Vinduer"</string>
- <string name="tab_picker_title" msgid="864478399057782913">"Aktuelle vinduer"</string>
+ <string name="tab_picker_title" msgid="864478399057782913">"Nuværende vinduer"</string>
<string name="tab_picker_view_tab" msgid="2984342364915347656">"Vis"</string>
<string name="tab_picker_new_tab" msgid="3080280018986866528">"Nyt vindue"</string>
<string name="tab_picker_remove_tab" msgid="630087809802479397">"Luk"</string>
- <string name="tab_picker_bookmark" msgid="1084409404198995477">"Opret et bogmærke"</string>
+ <string name="tab_picker_bookmark" msgid="1084409404198995477">"Tilføj et bogmærke"</string>
<string name="tab_picker_send_url" msgid="9102803487525950021">"Del link"</string>
<string name="bookmarks" msgid="1961279134885867815">"Bogmærker"</string>
<string name="shortcut_bookmark" msgid="3974876480401135895">"Bogmærke"</string>
<string name="history" msgid="2451240511251410032">"Oversigt"</string>
<string name="menu_view_download" msgid="2124570321712995120">"Downloads"</string>
- <string name="copy_page_url" msgid="7635062169011319208">"Kopier sidens webadresse"</string>
+ <!-- no translation found for copy_page_url (7635062169011319208) -->
+ <skip />
<string name="share_page" msgid="593756995297268343">"Del side"</string>
<string name="contextmenu_openlink" msgid="7237961252214188935">"Åbn"</string>
<string name="contextmenu_openlink_newwindow" msgid="992765050093960353">"Åbn i et nyt vindue"</string>
- <string name="contextmenu_bookmark_thislink" msgid="8095373680616870021">"Opret et bogmærke for linket"</string>
+ <string name="contextmenu_bookmark_thislink" msgid="8095373680616870021">"Tilføj et bogmærke ved linket"</string>
<string name="contextmenu_savelink" msgid="5508554930832538184">"Gem link"</string>
<string name="contextmenu_sharelink" msgid="5392275392280130331">"Del link"</string>
<string name="contextmenu_copy" msgid="398860586635404030">"Kopier"</string>
@@ -122,54 +127,69 @@
<string name="contextmenu_add_contact" msgid="3183511922223645716">"Tilføj kontakt"</string>
<string name="contextmenu_send_mail" msgid="1014513374828775660">"Send e-mail"</string>
<string name="contextmenu_map" msgid="7471390435434034912">"Kort"</string>
- <string name="choosertitle_sharevia" msgid="4600490613341909086">"Del via"</string>
+ <!-- no translation found for choosertitle_sharevia (4600490613341909086) -->
+ <skip />
<string name="clear" msgid="7070043081700011461">"Ryd"</string>
<string name="replace" msgid="4843033491070384047">"Erstat"</string>
<string name="browser_bookmarks_page_bookmarks_text" msgid="6787605028726162673">"Bogmærker"</string>
<string name="menu_preferences" msgid="6709237687234102240">"Indstillinger"</string>
<string name="pref_content_title" msgid="722227111894838633">"Indstillinger for sideindhold"</string>
<string name="pref_content_load_images" msgid="2125616852957377561">"Indlæs billeder"</string>
- <string name="pref_content_load_images_summary" msgid="5055874125248398584">"Vis billeder på websider"</string>
+ <!-- no translation found for pref_content_load_images_summary (5055874125248398584) -->
+ <skip />
<string name="pref_content_block_popups" msgid="7808433807197256726">"Bloker pop op-vinduer"</string>
<string name="pref_content_javascript" msgid="4570972030299516843">"Aktiver Javascript"</string>
<string name="pref_content_open_in_background" msgid="824123779725118663">"Åbn i baggrunden"</string>
- <string name="pref_content_plugins" msgid="7231944644794301582">"Aktiver plugins"</string>
- <string name="pref_content_open_in_background_summary" msgid="1737664075721181678">"Åbn nye vinduer bag det aktive"</string>
- <string name="pref_content_homepage" msgid="6082437160778559806">"Angiv startside"</string>
- <string name="pref_content_autofit" msgid="8260474534053660809">"Tilpas sider automatisk"</string>
- <string name="pref_content_autofit_summary" msgid="4587831659894879986">"Tilpas websider, så de passer til skærmen"</string>
- <string name="pref_content_landscape_only" msgid="2022546812766219672">"Kun liggende visning"</string>
- <string name="pref_content_landscape_only_summary" msgid="1008238895535428855">"Vis kun sider i den brede liggende retning"</string>
- <string name="pref_privacy_title" msgid="1052470980370846151">"Indstillinger for fortrolighed"</string>
+ <!-- no translation found for pref_content_plugins (7231944644794301582) -->
+ <skip />
+ <!-- no translation found for pref_content_open_in_background_summary (1737664075721181678) -->
+ <skip />
+ <string name="pref_content_homepage" msgid="6082437160778559806">"Indstil startside"</string>
+ <string name="pref_content_autofit" msgid="8260474534053660809">"Aut. tilpassede sider"</string>
+ <!-- no translation found for pref_content_autofit_summary (4587831659894879986) -->
+ <skip />
+ <!-- no translation found for pref_content_landscape_only (2022546812766219672) -->
+ <skip />
+ <!-- no translation found for pref_content_landscape_only_summary (1008238895535428855) -->
+ <skip />
+ <string name="pref_privacy_title" msgid="1052470980370846151">"Fortrolighedsindstillinger"</string>
<string name="pref_privacy_clear_cache" msgid="3380316479925886998">"Ryd cache"</string>
<string name="pref_privacy_clear_cache_summary" msgid="2216463577207991454">"Ryd lokalt cachelagret indhold og databaser"</string>
- <string name="pref_privacy_clear_cache_dlg" msgid="5541011591300753881">"Lokalt cachelagret indhold og databaser slettes."</string>
+ <!-- no translation found for pref_privacy_clear_cache_dlg (5541011591300753881) -->
+ <skip />
<string name="pref_privacy_clear_cookies" msgid="3095583579133780331">"Ryd alle cookiedata"</string>
- <string name="pref_privacy_clear_cookies_summary" msgid="6962742063990677520">"Ryd alle browsercookies"</string>
- <string name="pref_privacy_clear_cookies_dlg" msgid="552855688091432682">"Alle cookies slettes."</string>
+ <!-- no translation found for pref_privacy_clear_cookies_summary (6962742063990677520) -->
+ <skip />
+ <!-- no translation found for pref_privacy_clear_cookies_dlg (552855688091432682) -->
+ <skip />
<string name="pref_privacy_clear_history" msgid="8723795508825198477">"Ryd oversigt"</string>
<string name="pref_privacy_clear_history_summary" msgid="6868501330708940734">"Ryd browserens navigationsoversigt"</string>
- <string name="pref_privacy_clear_history_dlg" msgid="544903007914753853">"Browserens navigationsoversigt slettes."</string>
+ <!-- no translation found for pref_privacy_clear_history_dlg (544903007914753853) -->
+ <skip />
<string name="pref_privacy_clear_form_data" msgid="4232668196344383987">"Ryd formulardata"</string>
<string name="pref_privacy_clear_form_data_summary" msgid="1790390894719517167">"Ryd alle gemte formulardata"</string>
- <string name="pref_privacy_clear_form_data_dlg" msgid="4443621086781197928">"Alle gemte formulardata ryddes."</string>
+ <!-- no translation found for pref_privacy_clear_form_data_dlg (4443621086781197928) -->
+ <skip />
<string name="pref_privacy_clear_passwords" msgid="4750234112289277480">"Ryd adgangskoder"</string>
- <string name="pref_privacy_clear_passwords_summary" msgid="8856782718942903335">"Ryd alle gemte adgangskoder"</string>
- <string name="pref_privacy_clear_passwords_dlg" msgid="2083869328824248255">"Alle gemte adgangskoder slettes."</string>
+ <!-- no translation found for pref_privacy_clear_passwords_summary (8856782718942903335) -->
+ <skip />
+ <!-- no translation found for pref_privacy_clear_passwords_dlg (2083869328824248255) -->
+ <skip />
<string name="pref_privacy_enable_geolocation" msgid="1395040170290765686">"Aktiver placering"</string>
- <string name="pref_privacy_enable_geolocation_summary" msgid="8437020934664306205">"Tillad, at websteder anmoder om adgang til din placering"</string>
+ <string name="pref_privacy_enable_geolocation_summary" msgid="8437020934664306205">"Tillad websteder at anmode om adgang til din placering"</string>
<string name="pref_privacy_clear_geolocation_access" msgid="6649680770030042980">"Ryd placeringsadgang"</string>
<string name="pref_privacy_clear_geolocation_access_summary" msgid="7750143359497314679">"Ryd placeringsadgang for alle websteder"</string>
<string name="pref_privacy_clear_geolocation_access_dlg" msgid="7327063124488827244">"Ryd placeringsadgang for alle websteder"</string>
<string name="pref_security_title" msgid="5763978646932160021">"Sikkerhedsindstillinger"</string>
<string name="pref_security_remember_passwords" msgid="6492957683454529549">"Husk adgangskoder"</string>
- <string name="pref_security_remember_passwords_summary" msgid="256388703356349137">"Gem brugernavne og adgangskoder til websteder"</string>
+ <!-- no translation found for pref_security_remember_passwords_summary (256388703356349137) -->
+ <skip />
<string name="pref_security_save_form_data" msgid="1213669802810198893">"Husk formulardata"</string>
<string name="pref_security_save_form_data_summary" msgid="4994074685153708026">"Husk data, jeg indtaster i formularer, til senere brug"</string>
<string name="pref_security_show_security_warning" msgid="8901135676266754559">"Vis sikkerhedsadvarsler"</string>
- <string name="pref_security_show_security_warning_summary" msgid="8968906112720511704">"Vis en advarsel, hvis der er problemer med sikkerheden på et websted"</string>
+ <string name="pref_security_show_security_warning_summary" msgid="8968906112720511704">"Vis advarsler, hvis der er et problem med et websteds sikkerhed"</string>
<string name="pref_security_accept_cookies" msgid="3201367661925047989">"Accepter cookies"</string>
- <string name="pref_security_accept_cookies_summary" msgid="1465118934875026920">"Tillad, at websteder gemmer og læser \"cookie\"-data"</string>
+ <string name="pref_security_accept_cookies_summary" msgid="1465118934875026920">"Tillad websteder at gemme og læse \"cookie\"-data"</string>
<string name="pref_text_size" msgid="3827031324346612208">"Tekststørrelse"</string>
<string-array name="pref_text_size_choices">
<item msgid="4952686548944739548">"Lillebitte"</item>
@@ -182,18 +202,21 @@
<string name="pref_default_zoom" msgid="8076142259097187395">"Standardzoom"</string>
<string-array name="pref_default_zoom_choices">
<item msgid="549583171195154919">"Langt væk"</item>
- <item msgid="5619034257768161024">"Normal"</item>
+ <item msgid="5619034257768161024">"Mellemlangt"</item>
<item msgid="3840999588443167001">"Luk"</item>
</string-array>
<string name="pref_default_zoom_dialogtitle" msgid="6095974367125109021">"Standardzoom"</string>
- <string name="pref_content_load_page" msgid="2219810141690955452">"Åbn sider i oversigt"</string>
- <string name="pref_content_load_page_summary" msgid="8792093504054149369">"Vis oversigt over sider, som er åbnet for nylig"</string>
+ <!-- no translation found for pref_content_load_page (2219810141690955452) -->
+ <skip />
+ <!-- no translation found for pref_content_load_page_summary (8792093504054149369) -->
+ <skip />
<string name="pref_extras_title" msgid="3091250467679722382">"Avancerede indstillinger"</string>
- <string name="pref_extras_website_settings" msgid="67866640052455549">"Indstillinger for websteder"</string>
+ <string name="pref_extras_website_settings" msgid="67866640052455549">"Webstedsindstillinger"</string>
<string name="pref_extras_website_settings_summary" msgid="3917568895776162240">"Vis avancerede indstillinger for individuelle websteder"</string>
<string name="pref_extras_reset_default" msgid="8904000515846202110">"Nulstil til standard"</string>
<string name="pref_extras_reset_default_summary" msgid="7984680562706914966">"Ryd alle browserdata, og nulstil alle indstillinger til standard"</string>
- <string name="pref_extras_reset_default_dlg" msgid="6894807766578874830">"Alle browserdata slettes, og indstillingerne nulstilles til standardværdier."</string>
+ <!-- no translation found for pref_extras_reset_default_dlg (6894807766578874830) -->
+ <skip />
<string name="pref_extras_reset_default_dlg_title" msgid="2250334970728938936">"Nulstil til standard"</string>
<string name="pref_development_title" msgid="3263854204533056480">"Fejlretning"</string>
<string name="pref_default_text_encoding" msgid="5742965543955558478">"Tekstkodning"</string>
@@ -206,18 +229,18 @@
</string-array>
<string name="pref_default_text_encoding_dialogtitle" msgid="5508255018084978547">"Tekstkodning"</string>
<string name="pref_default_text_encoding_default" msgid="5272126711231936722">"Latin-1"</string>
- <string name="browserFrameRedirect" msgid="7049675479777828343">"Omdiriger"</string>
- <string name="browserFrame307Post" msgid="1429094844669510768">"Dette websted omdirigeres. Send dine indtastede formulardata til den nye placering?"</string>
<string name="browserFrameNetworkErrorLabel" msgid="126892350904924893">"Dataforbindelsesproblem"</string>
<string name="browserFrameFileErrorLabel" msgid="8063691502792670367">"Der er et problem med filen"</string>
<string name="browserFrameFormResubmitLabel" msgid="2685923472682180360">"Bekræft"</string>
<string name="browserFrameFormResubmitMessage" msgid="2752182215695632138">"Den side, du prøver at få vist, indeholder data, der allerede er indsendt (\"POSTDATA\"). Hvis du sender dataene igen, gentages alle handlinger, som formularen på siden udførte (som f.eks. en søgning eller et online køb)."</string>
<string name="loadSuspendedTitle" msgid="675991625288706944">"Der er ingen netværksforbindelse"</string>
- <string name="loadSuspended" msgid="3133656588880851273">"Browseren kan ikke indlæse denne side, fordi der ikke er nogen internetforbindelse."</string>
+ <!-- no translation found for loadSuspended (3133656588880851273) -->
+ <skip />
<string name="clear_history" msgid="5998307092715979619">"Ryd oversigt"</string>
- <string name="browser_history" msgid="1038987118290272525">"Seneste besøgte sider"</string>
- <string name="empty_history" msgid="8738772352308207274">"Browseroversigten er tom."</string>
- <string name="add_new_bookmark" msgid="8086367791400349049">"Opret bogmærke ..."</string>
+ <!-- no translation found for browser_history (1038987118290272525) -->
+ <skip />
+ <string name="empty_history" msgid="8738772352308207274">"Browseroversigt er tom."</string>
+ <string name="add_new_bookmark" msgid="8086367791400349049">"Tilføj bogmærke ..."</string>
<string name="add_bookmark_short" msgid="3783984330998103735">"Tilføj"</string>
<string name="search_hint" msgid="4647356319916631820">"Søg efter eller indtast en webadresse"</string>
<string name="search_button_text" msgid="5235226933877634410">"Gå"</string>
@@ -226,14 +249,14 @@
<string name="popup_window_attempt" msgid="2673111696288657989">"Dette websted forsøger at åbne et pop op-vindue."</string>
<string name="allow" msgid="1157313689171991335">"Tillad"</string>
<string name="block" msgid="9172175889884707800">"Bloker"</string>
- <string name="too_many_windows_dialog_title" msgid="5175503564948906442">"Der kan ikke åbnes flere vinduer"</string>
- <string name="too_many_windows_dialog_message" msgid="1398571800233959583">"Der kan ikke åbnes et nyt vindue, fordi du allerede har åbnet det maksimale antal."</string>
+ <string name="too_many_windows_dialog_title" msgid="5175503564948906442">"Grænsen for vinduet er nået"</string>
+ <string name="too_many_windows_dialog_message" msgid="1398571800233959583">"Der kunne ikke åbnes et nyt vindue, fordi du allerede har åbnet det maksimale antal."</string>
<string name="too_many_subwindows_dialog_title" msgid="3805453941587725944">"Pop op er allerede åben"</string>
<string name="too_many_subwindows_dialog_message" msgid="5827289829907966657">"Der kunne ikke åbnes et nyt pop op-vindue, da der kun kan være ét åbent ad gangen."</string>
<string name="download_title" msgid="2122874021047565594">"Downloadoversigt"</string>
<string name="download_unknown_filename" msgid="4013465542563652175">"<Ukendt>"</string>
<string name="download_menu_open" msgid="4888327480367757513">"Åbn"</string>
- <string name="download_menu_clear" msgid="6264454531553418124">"Fjern fra listen"</string>
+ <string name="download_menu_clear" msgid="6264454531553418124">"Ryd fra listen"</string>
<string name="download_menu_cancel" msgid="2545333007601851574">"Annuller download"</string>
<string name="download_menu_cancel_all" msgid="2136550823151999166">"Annuller alle downloads"</string>
<string name="download_menu_clear_all" msgid="7423737413377703862">"Ryd liste"</string>
@@ -245,24 +268,25 @@
<string name="download_file_error_dlg_msg" msgid="5156405410324072471">"<xliff:g id="FILENAME">%s</xliff:g> kunne ikke downloades."\n"Frigør noget plads på din telefon, og prøv igen."</string>
<string name="download_failed_generic_dlg_title" msgid="6106781095337833391">"Download mislykkedes"</string>
<string name="download_no_sdcard_dlg_title" msgid="605904452159416792">"Der er intet SD-kort"</string>
- <string name="download_no_sdcard_dlg_msg" msgid="2616399456116301518">"Du skal bruge et SD-kort for at downloade <xliff:g id="FILENAME">%s</xliff:g>."</string>
- <string name="download_sdcard_busy_dlg_title" msgid="6877712666046917741">"SD-kortet er ikke tilgængeligt"</string>
+ <string name="download_no_sdcard_dlg_msg" msgid="2616399456116301518">"Et SD-kort er påkrævet for at downloade <xliff:g id="FILENAME">%s</xliff:g>."</string>
+ <string name="download_sdcard_busy_dlg_title" msgid="6877712666046917741">"SD-kort er ikke tilgængeligt"</string>
<string name="download_sdcard_busy_dlg_msg" msgid="3473883538192835204">"SD-kortet er optaget. Vælg \"Slå USB-lagring fra\" i meddelelsen for at tillade downloads."</string>
<string name="download_no_application" msgid="5054596425887523234">"Der blev ikke fundet et program, der kan åbne denne fil."</string>
<string name="retry" msgid="1835923075542266721">"Prøv igen"</string>
- <string name="no_downloads" msgid="3947445710685021498">"Downloadoversigten er tom."</string>
+ <string name="no_downloads" msgid="3947445710685021498">"Downloadoversigt er tom."</string>
<string name="download_error" msgid="413496839831257187">"Download mislykkedes."</string>
- <string name="download_success" msgid="2279041638155595203">"Download af <xliff:g id="FILE">%s</xliff:g> er afsluttet."</string>
+ <string name="download_success" msgid="2279041638155595203">"<xliff:g id="FILE">%s</xliff:g> Download afsluttet."</string>
<string name="download_running" msgid="2622942231322015059">"Downloader ..."</string>
<string name="download_pending" msgid="2599683668575349559">"Starter download ..."</string>
<string name="download_pending_network" msgid="6548714525679461053">"Venter på dataforbindelse ..."</string>
<string name="download_running_paused" msgid="6418029352085656495">"Venter på dataforbindelse ..."</string>
- <string name="download_canceled" msgid="6057083743144492515">"Download er annulleret."</string>
- <string name="download_not_acceptable" msgid="313769696131563652">"Der kan ikke downloades. Indholdet understøttes ikke på denne telefon."</string>
+ <string name="download_canceled" msgid="6057083743144492515">"Download annulleret."</string>
+ <!-- no translation found for download_not_acceptable (313769696131563652) -->
+ <skip />
<string name="download_file_error" msgid="1206648050615176113">"Download kan ikke afsluttes. Der er ikke nok plads."</string>
- <string name="download_length_required" msgid="9038605488460437406">"Der kan ikke downloades. Størrelsen på elementet kan ikke fastsættes."</string>
+ <string name="download_length_required" msgid="9038605488460437406">"Der kan ikke downloades. Størrelsen på elementet kan ikke afgøres."</string>
<string name="download_precondition_failed" msgid="8327584102874295580">"Download blev afbrudt. Den kan ikke genoptages."</string>
- <string name="activity_instrumentation_test_runner" msgid="8215091309334005029">"Testkørsel af browser"</string>
+ <string name="activity_instrumentation_test_runner" msgid="8215091309334005029">"Browsertestkørsel"</string>
<string name="search_the_web" msgid="6046130189241962337">"Søg på nettet"</string>
<string name="webstorage_outofspace_notification_title" msgid="1160474608059771788">"Browserlageret er fuldt"</string>
<string name="webstorage_outofspace_notification_text" msgid="7341075135051829692">"Klik her for at frigøre plads."</string>
@@ -270,25 +294,36 @@
<string name="webstorage_clear_data_summary" msgid="3523128713743907805">"Fjern alle databaser, der er tilknyttet dette websted"</string>
<string name="webstorage_clear_data_dialog_title" msgid="345457466368974706">"Ryd lagrede data"</string>
<string name="webstorage_clear_data_dialog_message" msgid="6678281256970470125">"Alle data, der er lagret af dette websted, slettes"</string>
- <string name="webstorage_clear_data_dialog_ok_button" msgid="2516563534211898636">"Ryd alle"</string>
+ <!-- no translation found for webstorage_clear_data_dialog_ok_button (2516563534211898636) -->
+ <skip />
<string name="webstorage_clear_data_dialog_cancel_button" msgid="2028867751958942762">"Annuller"</string>
<string name="webstorage_origin_summary_mb_stored" msgid="1985885826292236210">"Mb lagret på din telefon"</string>
- <string name="loading_video" msgid="4887871585216091096">"Indlæser video"</string>
- <string name="geolocation_permissions_prompt_message" msgid="356796102004052471">"<xliff:g id="WEBSITE_ORIGIN">%s</xliff:g> ønsker at kende din placering"</string>
- <string name="geolocation_permissions_prompt_share" msgid="9084486342048347976">"Del placering"</string>
- <string name="geolocation_permissions_prompt_dont_share" msgid="6303025160237860300">"Afvis"</string>
- <string name="geolocation_permissions_prompt_remember" msgid="3118526300707348308">"Husk indstilling"</string>
+ <!-- no translation found for loading_video (4887871585216091096) -->
+ <skip />
+ <!-- no translation found for geolocation_permissions_prompt_message (356796102004052471) -->
+ <skip />
+ <!-- no translation found for geolocation_permissions_prompt_share (9084486342048347976) -->
+ <skip />
+ <!-- no translation found for geolocation_permissions_prompt_dont_share (6303025160237860300) -->
+ <skip />
+ <!-- no translation found for geolocation_permissions_prompt_remember (3118526300707348308) -->
+ <skip />
<string name="geolocation_settings_page_title" msgid="1745477985097536528">"Ryd placeringsadgang"</string>
- <string name="geolocation_settings_page_summary_allowed" msgid="9180251524290811398">"Dette websted har i øjeblikket adgang til din placering"</string>
- <string name="geolocation_settings_page_summary_not_allowed" msgid="4589649082203102544">"Dette websted har i øjeblikket ikke adgang til din placering"</string>
+ <string name="geolocation_settings_page_summary_allowed" msgid="9180251524290811398">"Dette websted kan i øjeblikket få adgang til din placering"</string>
+ <string name="geolocation_settings_page_summary_not_allowed" msgid="4589649082203102544">"Dette websted har i øjeblikket adgang til din placering"</string>
<string name="geolocation_settings_page_dialog_title" msgid="1549842043381347668">"Ryd placeringsadgang"</string>
<string name="geolocation_settings_page_dialog_message" msgid="7586671987576403993">"Placeringsadgang ryddes for dette websted"</string>
<string name="geolocation_settings_page_dialog_ok_button" msgid="4789434178048077287">"Ryd adgang"</string>
<string name="geolocation_settings_page_dialog_cancel_button" msgid="7941036504673409747">"Annuller"</string>
- <string name="website_settings_clear_all" msgid="8739804325997655980">"Ryd alle"</string>
- <string name="website_settings_clear_all_dialog_title" msgid="7791826325122461718">"Vil du rydde alle indstillinger for websteder?"</string>
- <string name="website_settings_clear_all_dialog_message" msgid="6150502090601476333">"Alle webstedsdata og placeringstilladelser slettes."</string>
- <string name="website_settings_clear_all_dialog_ok_button" msgid="6401582240627669431">"Slet alle data"</string>
- <string name="website_settings_clear_all_dialog_cancel_button" msgid="1896757051856611674">"Annuller"</string>
+ <!-- no translation found for website_settings_clear_all (8739804325997655980) -->
+ <skip />
+ <!-- no translation found for website_settings_clear_all_dialog_title (7791826325122461718) -->
+ <skip />
+ <!-- no translation found for website_settings_clear_all_dialog_message (6150502090601476333) -->
+ <skip />
+ <!-- no translation found for website_settings_clear_all_dialog_ok_button (6401582240627669431) -->
+ <skip />
+ <!-- no translation found for website_settings_clear_all_dialog_cancel_button (1896757051856611674) -->
+ <skip />
<string name="zoom_overview_button_text" msgid="4146579940085488881">"Oversigt"</string>
</resources>
diff --git a/res/values-de/arrays.xml b/res/values-de/arrays.xml
deleted file mode 100644
index bfee20d..0000000
--- a/res/values-de/arrays.xml
+++ /dev/null
@@ -1,32 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2009 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.
--->
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string-array name="webstorage_quota_entries">
- <item msgid="5433313236875537673">"Kein Kontingent erlaubt"</item>
- <item msgid="7374272188672967690">"5 MB"</item>
- <item msgid="8699352701856136738">"10 MB"</item>
- <item msgid="2018822431469084862">"30 MB"</item>
- <item msgid="5383642976774534074">"100 MB"</item>
- </string-array>
- <string-array name="webstorage_quota_entries_values">
- <item msgid="7620410313725236055">"0"</item>
- <item msgid="4302688814760304206">"5"</item>
- <item msgid="7291990205847586165">"10"</item>
- <item msgid="916913372287112423">"30"</item>
- <item msgid="3437188301324229987">"100"</item>
- </string-array>
-</resources>
diff --git a/res/values-de/strings.xml b/res/values-de/strings.xml
index a865197..894b5f0 100644
--- a/res/values-de/strings.xml
+++ b/res/values-de/strings.xml
@@ -16,8 +16,10 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="application_name" msgid="1935869255545976415">"Browser"</string>
- <string name="new_tab" msgid="4505722538297295141">"Neues Fenster"</string>
- <string name="active_tabs" msgid="3050623868203544623">"Fenster"</string>
+ <!-- no translation found for new_tab (4505722538297295141) -->
+ <skip />
+ <!-- no translation found for active_tabs (3050623868203544623) -->
+ <skip />
<string name="tab_bookmarks" msgid="2305793036003473653">"Lesezeichen"</string>
<string name="tab_most_visited" msgid="1077402532455000703">"Meistbesucht"</string>
<string name="tab_history" msgid="1979267558744613746">"Verlauf"</string>
@@ -63,7 +65,7 @@
<string name="stop" msgid="5687251076030630074">"Anhalten"</string>
<string name="reload" msgid="8585220783228408062">"Aktualisieren"</string>
<string name="back" msgid="8414603107175713668">"Zurück"</string>
- <string name="forward" msgid="4288210890526641577">"Vorwärts"</string>
+ <string name="forward" msgid="4288210890526641577">"Weiter"</string>
<string name="save" msgid="5922311934992468496">"OK"</string>
<string name="do_not_save" msgid="6777633870113477714">"Abbrechen"</string>
<string name="location" msgid="969988560160364559">"Ort"</string>
@@ -71,15 +73,17 @@
<string name="http" msgid="2163722670597250102">"http://"</string>
<string name="save_to_bookmarks" msgid="588165100024086565">"Lesezeichen hinzufügen"</string>
<string name="edit_bookmark" msgid="5024089053490231905">"Lesezeichen bearbeiten"</string>
- <string name="create_shortcut_bookmark" msgid="9202323987633899835">"Verknüpfung auf dem Startbildschirm erstellen"</string>
+ <string name="create_shortcut_bookmark" msgid="9202323987633899835">"Shortcut zur Startseite hinzufügen"</string>
<string name="open_bookmark" msgid="8473581305759935790">"Öffnen"</string>
<string name="remove_bookmark" msgid="8407495852801410891">"Lesezeichen löschen"</string>
<string name="remove_from_bookmarks" msgid="4374080666576982775">"Aus Lesezeichen entfernen"</string>
<string name="remove_history_item" msgid="5021424935726728618">"Aus Verlauf entfernen"</string>
<string name="set_as_homepage" msgid="4752937379414905560">"Als Startseite festlegen"</string>
<string name="bookmark_saved" msgid="2766434679871317557">"Gespeichert in Lesezeichen."</string>
- <string name="bookmark_not_saved" msgid="700600955089376724">"Lesezeichen kann nicht gespeichert werden."</string>
- <string name="homepage_set" msgid="8768087280310966395">"Startseite festgelegt."</string>
+ <!-- no translation found for bookmark_not_saved (700600955089376724) -->
+ <skip />
+ <!-- no translation found for homepage_set (8768087280310966395) -->
+ <skip />
<string name="bookmark_needs_title" msgid="6245900436119218187">"Das Lesezeichen muss über einen Namen verfügen."</string>
<string name="bookmark_needs_url" msgid="7809876865972755158">"Das Lesezeichen muss über einen Speicherort verfügen."</string>
<string name="empty_bookmark" msgid="7008697085928540511">"Sie können kein leeres Lesezeichen erstellen."</string>
@@ -107,11 +111,12 @@
<string name="shortcut_bookmark" msgid="3974876480401135895">"Lesezeichen"</string>
<string name="history" msgid="2451240511251410032">"Verlauf"</string>
<string name="menu_view_download" msgid="2124570321712995120">"Downloads"</string>
- <string name="copy_page_url" msgid="7635062169011319208">"Seiten-URL kopieren"</string>
+ <!-- no translation found for copy_page_url (7635062169011319208) -->
+ <skip />
<string name="share_page" msgid="593756995297268343">"Seitenlink weiterleiten"</string>
<string name="contextmenu_openlink" msgid="7237961252214188935">"Öffnen"</string>
<string name="contextmenu_openlink_newwindow" msgid="992765050093960353">"In neuem Fenster öffnen"</string>
- <string name="contextmenu_bookmark_thislink" msgid="8095373680616870021">"Link zu Lesezeichen hinzufügen"</string>
+ <string name="contextmenu_bookmark_thislink" msgid="8095373680616870021">"Lesezeichen-Link"</string>
<string name="contextmenu_savelink" msgid="5508554930832538184">"Link speichern"</string>
<string name="contextmenu_sharelink" msgid="5392275392280130331">"Link weiterleiten"</string>
<string name="contextmenu_copy" msgid="398860586635404030">"Kopieren"</string>
@@ -122,40 +127,54 @@
<string name="contextmenu_add_contact" msgid="3183511922223645716">"Kontakt hinzufügen"</string>
<string name="contextmenu_send_mail" msgid="1014513374828775660">"E-Mail senden"</string>
<string name="contextmenu_map" msgid="7471390435434034912">"Karte"</string>
- <string name="choosertitle_sharevia" msgid="4600490613341909086">"Freigeben über"</string>
+ <!-- no translation found for choosertitle_sharevia (4600490613341909086) -->
+ <skip />
<string name="clear" msgid="7070043081700011461">"Löschen"</string>
<string name="replace" msgid="4843033491070384047">"Ersetzen"</string>
<string name="browser_bookmarks_page_bookmarks_text" msgid="6787605028726162673">"Lesezeichen"</string>
<string name="menu_preferences" msgid="6709237687234102240">"Einstellungen"</string>
<string name="pref_content_title" msgid="722227111894838633">"Einstellungen für Seiteninhalt"</string>
<string name="pref_content_load_images" msgid="2125616852957377561">"Bilder laden"</string>
- <string name="pref_content_load_images_summary" msgid="5055874125248398584">"Bilder auf Webseiten anzeigen"</string>
+ <!-- no translation found for pref_content_load_images_summary (5055874125248398584) -->
+ <skip />
<string name="pref_content_block_popups" msgid="7808433807197256726">"Popupfenster blockieren"</string>
<string name="pref_content_javascript" msgid="4570972030299516843">"JavaScript aktivieren"</string>
<string name="pref_content_open_in_background" msgid="824123779725118663">"Im Hintergrund öffnen"</string>
- <string name="pref_content_plugins" msgid="7231944644794301582">"Plug-ins aktivieren"</string>
- <string name="pref_content_open_in_background_summary" msgid="1737664075721181678">"Neues Fenster hinter dem aktuellen Fenster öffnen"</string>
+ <!-- no translation found for pref_content_plugins (7231944644794301582) -->
+ <skip />
+ <!-- no translation found for pref_content_open_in_background_summary (1737664075721181678) -->
+ <skip />
<string name="pref_content_homepage" msgid="6082437160778559806">"Startseite festlegen"</string>
<string name="pref_content_autofit" msgid="8260474534053660809">"Seiten autom. anpassen"</string>
- <string name="pref_content_autofit_summary" msgid="4587831659894879986">"Webseiten an den Bildschirm anpassen"</string>
- <string name="pref_content_landscape_only" msgid="2022546812766219672">"Anzeige nur im Querformat"</string>
- <string name="pref_content_landscape_only_summary" msgid="1008238895535428855">"Seiten nur im breiteren Querformat anzeigen"</string>
+ <!-- no translation found for pref_content_autofit_summary (4587831659894879986) -->
+ <skip />
+ <!-- no translation found for pref_content_landscape_only (2022546812766219672) -->
+ <skip />
+ <!-- no translation found for pref_content_landscape_only_summary (1008238895535428855) -->
+ <skip />
<string name="pref_privacy_title" msgid="1052470980370846151">"Datenschutzeinstellungen"</string>
<string name="pref_privacy_clear_cache" msgid="3380316479925886998">"Cache löschen"</string>
<string name="pref_privacy_clear_cache_summary" msgid="2216463577207991454">"Content und Datenbanken aus dem lokalen Cache löschen"</string>
- <string name="pref_privacy_clear_cache_dlg" msgid="5541011591300753881">"Content und Datenbanken werden aus dem lokalen Cache gelöscht."</string>
+ <!-- no translation found for pref_privacy_clear_cache_dlg (5541011591300753881) -->
+ <skip />
<string name="pref_privacy_clear_cookies" msgid="3095583579133780331">"Alle Cookiedaten löschen"</string>
- <string name="pref_privacy_clear_cookies_summary" msgid="6962742063990677520">"Alle Browser-Cookies löschen"</string>
- <string name="pref_privacy_clear_cookies_dlg" msgid="552855688091432682">"Alle Cookies werden gelöscht."</string>
+ <!-- no translation found for pref_privacy_clear_cookies_summary (6962742063990677520) -->
+ <skip />
+ <!-- no translation found for pref_privacy_clear_cookies_dlg (552855688091432682) -->
+ <skip />
<string name="pref_privacy_clear_history" msgid="8723795508825198477">"Verlauf löschen"</string>
<string name="pref_privacy_clear_history_summary" msgid="6868501330708940734">"Navigationsverlauf des Browsers löschen"</string>
- <string name="pref_privacy_clear_history_dlg" msgid="544903007914753853">"Der Navigationsverlauf des Browsers wird gelöscht."</string>
+ <!-- no translation found for pref_privacy_clear_history_dlg (544903007914753853) -->
+ <skip />
<string name="pref_privacy_clear_form_data" msgid="4232668196344383987">"Formulardaten löschen"</string>
<string name="pref_privacy_clear_form_data_summary" msgid="1790390894719517167">"Alle gespeicherten Formulardaten löschen"</string>
- <string name="pref_privacy_clear_form_data_dlg" msgid="4443621086781197928">"Alle gespeicherten Formulardaten werden gelöscht."</string>
+ <!-- no translation found for pref_privacy_clear_form_data_dlg (4443621086781197928) -->
+ <skip />
<string name="pref_privacy_clear_passwords" msgid="4750234112289277480">"Passwörter löschen"</string>
- <string name="pref_privacy_clear_passwords_summary" msgid="8856782718942903335">"Alle gespeicherten Passwörter löschen"</string>
- <string name="pref_privacy_clear_passwords_dlg" msgid="2083869328824248255">"Alle gespeicherten Passwörter werden gelöscht."</string>
+ <!-- no translation found for pref_privacy_clear_passwords_summary (8856782718942903335) -->
+ <skip />
+ <!-- no translation found for pref_privacy_clear_passwords_dlg (2083869328824248255) -->
+ <skip />
<string name="pref_privacy_enable_geolocation" msgid="1395040170290765686">"Standort aktivieren"</string>
<string name="pref_privacy_enable_geolocation_summary" msgid="8437020934664306205">"Zugriff auf Ihren Standort für Websites ermöglichen"</string>
<string name="pref_privacy_clear_geolocation_access" msgid="6649680770030042980">"Standortzugriff löschen"</string>
@@ -163,7 +182,8 @@
<string name="pref_privacy_clear_geolocation_access_dlg" msgid="7327063124488827244">"Standortzugriff für alle Websites löschen"</string>
<string name="pref_security_title" msgid="5763978646932160021">"Sicherheitseinstellungen"</string>
<string name="pref_security_remember_passwords" msgid="6492957683454529549">"Passwörter merken"</string>
- <string name="pref_security_remember_passwords_summary" msgid="256388703356349137">"Nutzernamen und Passwörter für Websites speichern"</string>
+ <!-- no translation found for pref_security_remember_passwords_summary (256388703356349137) -->
+ <skip />
<string name="pref_security_save_form_data" msgid="1213669802810198893">"Formulardaten merken"</string>
<string name="pref_security_save_form_data_summary" msgid="4994074685153708026">"Daten in Formularen zur späteren Verwendung merken"</string>
<string name="pref_security_show_security_warning" msgid="8901135676266754559">"Sicherheitswarnungen"</string>
@@ -183,17 +203,20 @@
<string-array name="pref_default_zoom_choices">
<item msgid="549583171195154919">"Entfernt"</item>
<item msgid="5619034257768161024">"Mittel"</item>
- <item msgid="3840999588443167001">"Nah"</item>
+ <item msgid="3840999588443167001">"Schließen"</item>
</string-array>
<string name="pref_default_zoom_dialogtitle" msgid="6095974367125109021">"Standard-Zoom"</string>
- <string name="pref_content_load_page" msgid="2219810141690955452">"Seiten in der Übersicht öffnen"</string>
- <string name="pref_content_load_page_summary" msgid="8792093504054149369">"Neue Seiten in der Übersicht anzeigen"</string>
+ <!-- no translation found for pref_content_load_page (2219810141690955452) -->
+ <skip />
+ <!-- no translation found for pref_content_load_page_summary (8792093504054149369) -->
+ <skip />
<string name="pref_extras_title" msgid="3091250467679722382">"Erweiterte Einstellungen"</string>
<string name="pref_extras_website_settings" msgid="67866640052455549">"Websiteeinstellungen"</string>
<string name="pref_extras_website_settings_summary" msgid="3917568895776162240">"Erweiterte Einstellungen für einzelne Websites anzeigen"</string>
<string name="pref_extras_reset_default" msgid="8904000515846202110">"Auf Standard zurücksetzen"</string>
- <string name="pref_extras_reset_default_summary" msgid="7984680562706914966">"Alle Browserdaten löschen und Einstellungen zurücksetzen"</string>
- <string name="pref_extras_reset_default_dlg" msgid="6894807766578874830">"Alle Browserdaten werden gelöscht. Alle Einstellungen werden auf die Standardeinstellung zurückgesetzt."</string>
+ <string name="pref_extras_reset_default_summary" msgid="7984680562706914966">"Alle Browserdaten löschen und Einstellungen auf Standard zurücksetzen"</string>
+ <!-- no translation found for pref_extras_reset_default_dlg (6894807766578874830) -->
+ <skip />
<string name="pref_extras_reset_default_dlg_title" msgid="2250334970728938936">"Auf Standardeinstellung zurücksetzen"</string>
<string name="pref_development_title" msgid="3263854204533056480">"Debuggen"</string>
<string name="pref_default_text_encoding" msgid="5742965543955558478">"Textcodierung"</string>
@@ -206,16 +229,16 @@
</string-array>
<string name="pref_default_text_encoding_dialogtitle" msgid="5508255018084978547">"Textcodierung"</string>
<string name="pref_default_text_encoding_default" msgid="5272126711231936722">"Latin-1"</string>
- <string name="browserFrameRedirect" msgid="7049675479777828343">"Redirect"</string>
- <string name="browserFrame307Post" msgid="1429094844669510768">"Diese Webseite wird umgeleitet. Sollen Ihre eingegebenen Formulardaten an den neuen Standort gesendet werden?"</string>
<string name="browserFrameNetworkErrorLabel" msgid="126892350904924893">"Datenverbindungsproblem"</string>
<string name="browserFrameFileErrorLabel" msgid="8063691502792670367">"Problem mit Datei"</string>
<string name="browserFrameFormResubmitLabel" msgid="2685923472682180360">"Bestätigen"</string>
<string name="browserFrameFormResubmitMessage" msgid="2752182215695632138">"Die Seite, die Sie anzuzeigen versuchen, enthält Daten, die bereits gesendet wurde (\"POST-DATEN\"). Wenn Sie die Daten erneut senden, wird jede Aktion, die das Formular auf der Seite ausgeführt hat, wiederholt (wie beispielsweise eine Suche oder ein Online-Kauf)."</string>
<string name="loadSuspendedTitle" msgid="675991625288706944">"Keine Netzwerkverbindung"</string>
- <string name="loadSuspended" msgid="3133656588880851273">"Der Browser kann diese Seite nicht laden, da keine Internetverbindung besteht."</string>
+ <!-- no translation found for loadSuspended (3133656588880851273) -->
+ <skip />
<string name="clear_history" msgid="5998307092715979619">"Verlauf löschen"</string>
- <string name="browser_history" msgid="1038987118290272525">"Kürzlich besuchte Seiten"</string>
+ <!-- no translation found for browser_history (1038987118290272525) -->
+ <skip />
<string name="empty_history" msgid="8738772352308207274">"Browserverlauf ist leer."</string>
<string name="add_new_bookmark" msgid="8086367791400349049">"Lesezeichen hinzufügen..."</string>
<string name="add_bookmark_short" msgid="3783984330998103735">"Hinzufügen"</string>
@@ -258,7 +281,8 @@
<string name="download_pending_network" msgid="6548714525679461053">"Warten auf Datenverbindung..."</string>
<string name="download_running_paused" msgid="6418029352085656495">"Warten auf Datenverbindung..."</string>
<string name="download_canceled" msgid="6057083743144492515">"Download abgebrochen."</string>
- <string name="download_not_acceptable" msgid="313769696131563652">"Der Download kann nicht durchgeführt werden, da der Content auf diesem Telefon nicht unterstützt wird."</string>
+ <!-- no translation found for download_not_acceptable (313769696131563652) -->
+ <skip />
<string name="download_file_error" msgid="1206648050615176113">"Download kann nicht beendet werden, da nicht genügend Speicherplatz vorhanden ist."</string>
<string name="download_length_required" msgid="9038605488460437406">"Download kann nicht gestartet werden, da die Größe des Elements nicht bestimmt werden kann."</string>
<string name="download_precondition_failed" msgid="8327584102874295580">"Download wurde unterbrochen und kann nicht fortgesetzt werden."</string>
@@ -270,14 +294,20 @@
<string name="webstorage_clear_data_summary" msgid="3523128713743907805">"Alle mit dieser Website verknüpften Datenbanken entfernen"</string>
<string name="webstorage_clear_data_dialog_title" msgid="345457466368974706">"Gespeicherte Daten löschen"</string>
<string name="webstorage_clear_data_dialog_message" msgid="6678281256970470125">"Alle von dieser Website gespeicherten Daten werden gelöscht."</string>
- <string name="webstorage_clear_data_dialog_ok_button" msgid="2516563534211898636">"Alles löschen"</string>
+ <!-- no translation found for webstorage_clear_data_dialog_ok_button (2516563534211898636) -->
+ <skip />
<string name="webstorage_clear_data_dialog_cancel_button" msgid="2028867751958942762">"Abbrechen"</string>
<string name="webstorage_origin_summary_mb_stored" msgid="1985885826292236210">"Auf Ihrem Telefon gespeicherte MB"</string>
- <string name="loading_video" msgid="4887871585216091096">"Video wird geladen"</string>
- <string name="geolocation_permissions_prompt_message" msgid="356796102004052471">"<xliff:g id="WEBSITE_ORIGIN">%s</xliff:g> möchte Ihren Standort in Erfahrung bringen."</string>
- <string name="geolocation_permissions_prompt_share" msgid="9084486342048347976">"Standort freigeben"</string>
- <string name="geolocation_permissions_prompt_dont_share" msgid="6303025160237860300">"Ablehnen"</string>
- <string name="geolocation_permissions_prompt_remember" msgid="3118526300707348308">"Voreinstellung speichern"</string>
+ <!-- no translation found for loading_video (4887871585216091096) -->
+ <skip />
+ <!-- no translation found for geolocation_permissions_prompt_message (356796102004052471) -->
+ <skip />
+ <!-- no translation found for geolocation_permissions_prompt_share (9084486342048347976) -->
+ <skip />
+ <!-- no translation found for geolocation_permissions_prompt_dont_share (6303025160237860300) -->
+ <skip />
+ <!-- no translation found for geolocation_permissions_prompt_remember (3118526300707348308) -->
+ <skip />
<string name="geolocation_settings_page_title" msgid="1745477985097536528">"Standortzugriff löschen"</string>
<string name="geolocation_settings_page_summary_allowed" msgid="9180251524290811398">"Diese Website hat derzeit Zugriff auf Ihren Standort."</string>
<string name="geolocation_settings_page_summary_not_allowed" msgid="4589649082203102544">"Diese Website hat derzeit keinen Zugriff auf Ihren Standort."</string>
@@ -285,10 +315,15 @@
<string name="geolocation_settings_page_dialog_message" msgid="7586671987576403993">"Der Standortzugriff für diese Website wird gelöscht."</string>
<string name="geolocation_settings_page_dialog_ok_button" msgid="4789434178048077287">"Zugriff löschen"</string>
<string name="geolocation_settings_page_dialog_cancel_button" msgid="7941036504673409747">"Abbrechen"</string>
- <string name="website_settings_clear_all" msgid="8739804325997655980">"Alles löschen"</string>
- <string name="website_settings_clear_all_dialog_title" msgid="7791826325122461718">"Sollen alle Website-Einstellungen gelöscht werden?"</string>
- <string name="website_settings_clear_all_dialog_message" msgid="6150502090601476333">"Alle Websitedaten und Standortberechtigungen werden gelöscht."</string>
- <string name="website_settings_clear_all_dialog_ok_button" msgid="6401582240627669431">"Alle Daten löschen"</string>
- <string name="website_settings_clear_all_dialog_cancel_button" msgid="1896757051856611674">"Abbrechen"</string>
+ <!-- no translation found for website_settings_clear_all (8739804325997655980) -->
+ <skip />
+ <!-- no translation found for website_settings_clear_all_dialog_title (7791826325122461718) -->
+ <skip />
+ <!-- no translation found for website_settings_clear_all_dialog_message (6150502090601476333) -->
+ <skip />
+ <!-- no translation found for website_settings_clear_all_dialog_ok_button (6401582240627669431) -->
+ <skip />
+ <!-- no translation found for website_settings_clear_all_dialog_cancel_button (1896757051856611674) -->
+ <skip />
<string name="zoom_overview_button_text" msgid="4146579940085488881">"Übersicht"</string>
</resources>
diff --git a/res/values-el/arrays.xml b/res/values-el/arrays.xml
deleted file mode 100644
index c1c25c5..0000000
--- a/res/values-el/arrays.xml
+++ /dev/null
@@ -1,32 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2009 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.
--->
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string-array name="webstorage_quota_entries">
- <item msgid="5433313236875537673">"Δεν επιτρέπονται όρια"</item>
- <item msgid="7374272188672967690">"5 MB"</item>
- <item msgid="8699352701856136738">"10 MB"</item>
- <item msgid="2018822431469084862">"30 MB"</item>
- <item msgid="5383642976774534074">"100 MB"</item>
- </string-array>
- <string-array name="webstorage_quota_entries_values">
- <item msgid="7620410313725236055">"0"</item>
- <item msgid="4302688814760304206">"5"</item>
- <item msgid="7291990205847586165">"10"</item>
- <item msgid="916913372287112423">"30"</item>
- <item msgid="3437188301324229987">"100"</item>
- </string-array>
-</resources>
diff --git a/res/values-el/strings.xml b/res/values-el/strings.xml
index 9273ec2..093ee6d 100644
--- a/res/values-el/strings.xml
+++ b/res/values-el/strings.xml
@@ -16,8 +16,10 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="application_name" msgid="1935869255545976415">"Internet"</string>
- <string name="new_tab" msgid="4505722538297295141">"Νέο παράθυρο"</string>
- <string name="active_tabs" msgid="3050623868203544623">"Παράθυρα"</string>
+ <!-- no translation found for new_tab (4505722538297295141) -->
+ <skip />
+ <!-- no translation found for active_tabs (3050623868203544623) -->
+ <skip />
<string name="tab_bookmarks" msgid="2305793036003473653">"Σελιδοδείκτες"</string>
<string name="tab_most_visited" msgid="1077402532455000703">"Οι πιο δημοφιλείς"</string>
<string name="tab_history" msgid="1979267558744613746">"Ιστορικό"</string>
@@ -78,8 +80,10 @@
<string name="remove_history_item" msgid="5021424935726728618">"Κατάργηση από το ιστορικό"</string>
<string name="set_as_homepage" msgid="4752937379414905560">"Ορισμός ως αρχική σελίδα"</string>
<string name="bookmark_saved" msgid="2766434679871317557">"Αποθηκεύτηκε στους σελιδοδείκτες."</string>
- <string name="bookmark_not_saved" msgid="700600955089376724">"Δεν ήταν δυνατή η αποθήκευση του σελιδοδείκτη."</string>
- <string name="homepage_set" msgid="8768087280310966395">"Ορισμός αρχικής σελίδας."</string>
+ <!-- no translation found for bookmark_not_saved (700600955089376724) -->
+ <skip />
+ <!-- no translation found for homepage_set (8768087280310966395) -->
+ <skip />
<string name="bookmark_needs_title" msgid="6245900436119218187">"Ο σελιδοδείκτης πρέπει να έχει ένα όνομα."</string>
<string name="bookmark_needs_url" msgid="7809876865972755158">"Ο σελιδοδείκτης πρέπει να έχει μια τοποθεσία."</string>
<string name="empty_bookmark" msgid="7008697085928540511">"Δεν είναι δυνατή η δημιουργία κενού σελιδοδείκτη."</string>
@@ -107,7 +111,8 @@
<string name="shortcut_bookmark" msgid="3974876480401135895">"Σελιδοδείκτης"</string>
<string name="history" msgid="2451240511251410032">"Ιστορικό"</string>
<string name="menu_view_download" msgid="2124570321712995120">"Λήψεις"</string>
- <string name="copy_page_url" msgid="7635062169011319208">"Αντιγραφή διεύθυνσης url της σελίδας"</string>
+ <!-- no translation found for copy_page_url (7635062169011319208) -->
+ <skip />
<string name="share_page" msgid="593756995297268343">"Κοινή χρήση σελίδας"</string>
<string name="contextmenu_openlink" msgid="7237961252214188935">"Άνοιγμα"</string>
<string name="contextmenu_openlink_newwindow" msgid="992765050093960353">"Άνοιγμα σε νέο παράθυρο"</string>
@@ -122,40 +127,54 @@
<string name="contextmenu_add_contact" msgid="3183511922223645716">"Προσθήκη επαφής"</string>
<string name="contextmenu_send_mail" msgid="1014513374828775660">"Αποστολή μηνύματος ηλεκτρονικού ταχυδρομείου"</string>
<string name="contextmenu_map" msgid="7471390435434034912">"Χάρτης"</string>
- <string name="choosertitle_sharevia" msgid="4600490613341909086">"Κοινή χρήση μέσω"</string>
+ <!-- no translation found for choosertitle_sharevia (4600490613341909086) -->
+ <skip />
<string name="clear" msgid="7070043081700011461">"Εκκαθάριση"</string>
<string name="replace" msgid="4843033491070384047">"Αντικατάσταση"</string>
<string name="browser_bookmarks_page_bookmarks_text" msgid="6787605028726162673">"Σελιδοδείκτες"</string>
<string name="menu_preferences" msgid="6709237687234102240">"Ρυθμίσεις"</string>
<string name="pref_content_title" msgid="722227111894838633">"Ρυθμίσεις περιεχομένου σελίδας"</string>
<string name="pref_content_load_images" msgid="2125616852957377561">"Φόρτωση εικόνων"</string>
- <string name="pref_content_load_images_summary" msgid="5055874125248398584">"Προβολή εικόνων στις ιστοσελίδες"</string>
+ <!-- no translation found for pref_content_load_images_summary (5055874125248398584) -->
+ <skip />
<string name="pref_content_block_popups" msgid="7808433807197256726">"Αποκλεισμός αναδυόμενων παραθύρων"</string>
<string name="pref_content_javascript" msgid="4570972030299516843">"Ενεργοποίηση JavaScript"</string>
<string name="pref_content_open_in_background" msgid="824123779725118663">"Άνοιγμα στο παρασκήνιο"</string>
- <string name="pref_content_plugins" msgid="7231944644794301582">"Ενεργοποίηση πρόσθετων"</string>
- <string name="pref_content_open_in_background_summary" msgid="1737664075721181678">"Άνοιγμα νέων παραθύρων πίσω από το τρέχον"</string>
+ <!-- no translation found for pref_content_plugins (7231944644794301582) -->
+ <skip />
+ <!-- no translation found for pref_content_open_in_background_summary (1737664075721181678) -->
+ <skip />
<string name="pref_content_homepage" msgid="6082437160778559806">"Ορισμός ως αρχική σελίδα"</string>
<string name="pref_content_autofit" msgid="8260474534053660809">"Αυτόματη προσαρμογή σελίδων"</string>
- <string name="pref_content_autofit_summary" msgid="4587831659894879986">"Μορφοποίηση ιστοσελίδων για την προσαρμογή τους στο μέγεθος της οθόνης"</string>
- <string name="pref_content_landscape_only" msgid="2022546812766219672">"Προβολή μόνο σε τοπίο"</string>
- <string name="pref_content_landscape_only_summary" msgid="1008238895535428855">"Προβολή σελίδων μόνο στον ευρύτερο προσανατολισμό τοπίου στην οθόνη"</string>
+ <!-- no translation found for pref_content_autofit_summary (4587831659894879986) -->
+ <skip />
+ <!-- no translation found for pref_content_landscape_only (2022546812766219672) -->
+ <skip />
+ <!-- no translation found for pref_content_landscape_only_summary (1008238895535428855) -->
+ <skip />
<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">"Εκκαθάριση τοπικά αποθηκευμένου στη μνήμη cache περιεχομένου και βάσεων δεδομένων"</string>
- <string name="pref_privacy_clear_cache_dlg" msgid="5541011591300753881">"Περιεχόμενο και βάσεις δεδομένων που έχουν αποθηκευτεί στην τοπική προσωρινή μνήμη θα διαγραφούν."</string>
+ <!-- no translation found for pref_privacy_clear_cache_dlg (5541011591300753881) -->
+ <skip />
<string name="pref_privacy_clear_cookies" msgid="3095583579133780331">"Εκκαθάριση όλων των δεδομένων cookie"</string>
- <string name="pref_privacy_clear_cookies_summary" msgid="6962742063990677520">"Εκκαθάριση όλων των cookie του προγράμματος περιήγησης"</string>
- <string name="pref_privacy_clear_cookies_dlg" msgid="552855688091432682">"Όλα τα cookie θα διαγραφούν."</string>
+ <!-- no translation found for pref_privacy_clear_cookies_summary (6962742063990677520) -->
+ <skip />
+ <!-- no translation found for pref_privacy_clear_cookies_dlg (552855688091432682) -->
+ <skip />
<string name="pref_privacy_clear_history" msgid="8723795508825198477">"Εκκαθάριση ιστορικού"</string>
<string name="pref_privacy_clear_history_summary" msgid="6868501330708940734">"Εκκαθάριση του ιστορικού πλοήγησης του προγράμματος περιήγησης"</string>
- <string name="pref_privacy_clear_history_dlg" msgid="544903007914753853">"Θα γίνει διαγραφή του ιστορικού πλοήγησης του προγράμματος περιήγησης."</string>
+ <!-- no translation found for pref_privacy_clear_history_dlg (544903007914753853) -->
+ <skip />
<string name="pref_privacy_clear_form_data" msgid="4232668196344383987">"Εκκαθάριση δεδομένων φόρμας"</string>
<string name="pref_privacy_clear_form_data_summary" msgid="1790390894719517167">"Εκκαθάριση όλων των αποθηκευμένων δεδομένων φόρμας"</string>
- <string name="pref_privacy_clear_form_data_dlg" msgid="4443621086781197928">"Θα γίνει διαγραφή όλων των αποθηκευμένων δεδομένων φόρμας."</string>
+ <!-- no translation found for pref_privacy_clear_form_data_dlg (4443621086781197928) -->
+ <skip />
<string name="pref_privacy_clear_passwords" msgid="4750234112289277480">"Εκκαθάριση κωδικών πρόσβασης"</string>
- <string name="pref_privacy_clear_passwords_summary" msgid="8856782718942903335">"Απαλοιφή όλων των αποθηκευμένων κωδικών πρόσβασης"</string>
- <string name="pref_privacy_clear_passwords_dlg" msgid="2083869328824248255">"Θα γίνει διαγραφή όλων των αποθηκευμένων κωδικών πρόσβασης."</string>
+ <!-- no translation found for pref_privacy_clear_passwords_summary (8856782718942903335) -->
+ <skip />
+ <!-- no translation found for pref_privacy_clear_passwords_dlg (2083869328824248255) -->
+ <skip />
<string name="pref_privacy_enable_geolocation" msgid="1395040170290765686">"Ενεργοποίηση τοποθεσίας"</string>
<string name="pref_privacy_enable_geolocation_summary" msgid="8437020934664306205">"Να επιτρέπεται σε ιστότοπους το αίτημα πρόσβασης στην τοποθεσία σας"</string>
<string name="pref_privacy_clear_geolocation_access" msgid="6649680770030042980">"Εκκαθάριση πρόσβασης τοποθεσίας"</string>
@@ -163,7 +182,8 @@
<string name="pref_privacy_clear_geolocation_access_dlg" msgid="7327063124488827244">"Εκκαθάριση πρόσβασης τοποθεσίας για όλους τους ιστότοπους"</string>
<string name="pref_security_title" msgid="5763978646932160021">"Ρυθμίσεις ασφαλείας"</string>
<string name="pref_security_remember_passwords" msgid="6492957683454529549">"Απομνημόνευση κωδικών πρόσβασης"</string>
- <string name="pref_security_remember_passwords_summary" msgid="256388703356349137">"Αποθήκευση ονομάτων χρήστη και κωδικών πρόσβασης για ιστότοπους"</string>
+ <!-- no translation found for pref_security_remember_passwords_summary (256388703356349137) -->
+ <skip />
<string name="pref_security_save_form_data" msgid="1213669802810198893">"Απομνημόνευση δεδομένων φόρμας"</string>
<string name="pref_security_save_form_data_summary" msgid="4994074685153708026">"Απομνημόν.των δεδομ.που εισάγ.σε φόρμ.για μελλοντ.χρήση"</string>
<string name="pref_security_show_security_warning" msgid="8901135676266754559">"Εμφάνιση προειδοποιήσεων ασφαλείας"</string>
@@ -183,17 +203,20 @@
<string-array name="pref_default_zoom_choices">
<item msgid="549583171195154919">"Μακριά"</item>
<item msgid="5619034257768161024">"Μέτριο"</item>
- <item msgid="3840999588443167001">"Κοντά"</item>
+ <item msgid="3840999588443167001">"Κλείσιμο"</item>
</string-array>
<string name="pref_default_zoom_dialogtitle" msgid="6095974367125109021">"Προεπιλεγμένο ζουμ"</string>
- <string name="pref_content_load_page" msgid="2219810141690955452">"Άνοιγμα σελίδων στην επισκόπιση"</string>
- <string name="pref_content_load_page_summary" msgid="8792093504054149369">"Εμφάνιση επισκόπισης σελίδων που ανοίξατε πρόσφατα"</string>
+ <!-- no translation found for pref_content_load_page (2219810141690955452) -->
+ <skip />
+ <!-- no translation found for pref_content_load_page_summary (8792093504054149369) -->
+ <skip />
<string name="pref_extras_title" msgid="3091250467679722382">"Σύνθετες ρυθμίσεις"</string>
<string name="pref_extras_website_settings" msgid="67866640052455549">"Ρυθμίσεις ιστότοπου"</string>
<string name="pref_extras_website_settings_summary" msgid="3917568895776162240">"Προβολή σύνθετων ρυθμίσεων για μεμονωμένους ιστότοπους"</string>
<string name="pref_extras_reset_default" msgid="8904000515846202110">"Επαναφορά προεπιλογών"</string>
<string name="pref_extras_reset_default_summary" msgid="7984680562706914966">"Εκκαθ.όλων των δεδ.του προγρ.περιήγ.και επαναφ.όλων των ρυθμ.στις προεπ.ρυθμ."</string>
- <string name="pref_extras_reset_default_dlg" msgid="6894807766578874830">"Θα γίνει διαγραφή όλων των δεδομένων του προγράμματος περιήγησης και επαναφορά των ρυθμίσεων στις προεπιλεγμένες τιμές."</string>
+ <!-- no translation found for pref_extras_reset_default_dlg (6894807766578874830) -->
+ <skip />
<string name="pref_extras_reset_default_dlg_title" msgid="2250334970728938936">"Επαναφορά προεπιλογών"</string>
<string name="pref_development_title" msgid="3263854204533056480">"Εντοπισμός σφαλμάτων"</string>
<string name="pref_default_text_encoding" msgid="5742965543955558478">"Κωδικοποίηση κειμένου"</string>
@@ -206,16 +229,16 @@
</string-array>
<string name="pref_default_text_encoding_dialogtitle" msgid="5508255018084978547">"Κωδικοποίηση κειμένου"</string>
<string name="pref_default_text_encoding_default" msgid="5272126711231936722">"Latin-1"</string>
- <string name="browserFrameRedirect" msgid="7049675479777828343">"Ανακατεύθυνση"</string>
- <string name="browserFrame307Post" msgid="1429094844669510768">"Γίνεται ανακατεύθυνση αυτής της ιστοσελίδας. Να αποσταλούν ξανά τα δεδομένα φόρμας που έχετε εισάγει, στην νέα τοποθεσία;"</string>
<string name="browserFrameNetworkErrorLabel" msgid="126892350904924893">"Πρόβλημα σύνδεσης δεδομένων"</string>
<string name="browserFrameFileErrorLabel" msgid="8063691502792670367">"Υπάρχει πρόβλημα με το αρχείο"</string>
<string name="browserFrameFormResubmitLabel" msgid="2685923472682180360">"Επιβεβαίωση"</string>
<string name="browserFrameFormResubmitMessage" msgid="2752182215695632138">"Η σελίδα που προσπαθείτε να προβάλλετε, περιέχει δεδομένα που έχουν ήδη υποβληθεί (\"POSTDATA\"). Εάν αποστείλετε ξανά τα δεδομένα, όλες οι ενέργειες που εκτελέστηκαν από τη φόρμα στη σελίδα (όπως μια αναζήτηση ή μια αγορά στο διαδίκτυο) θα επαναληφθούν."</string>
<string name="loadSuspendedTitle" msgid="675991625288706944">"Δεν υπάρχει σύνδεση δικτύου"</string>
- <string name="loadSuspended" msgid="3133656588880851273">"Το πρόγραμμα περιήγησης δεν μπορεί να φορτώσει αυτήν τη σελίδα διότι δεν υπάρχει σύνδεση στο διαδίκτυο."</string>
+ <!-- no translation found for loadSuspended (3133656588880851273) -->
+ <skip />
<string name="clear_history" msgid="5998307092715979619">"Εκκαθάριση ιστορικού"</string>
- <string name="browser_history" msgid="1038987118290272525">"Σελίδες που επισκεφθήκατε πρόσφατα"</string>
+ <!-- no translation found for browser_history (1038987118290272525) -->
+ <skip />
<string name="empty_history" msgid="8738772352308207274">"Το ιστορικό του προγράμματος περιήγησης είναι κενό."</string>
<string name="add_new_bookmark" msgid="8086367791400349049">"Προσθήκη σελιδοδείκτη..."</string>
<string name="add_bookmark_short" msgid="3783984330998103735">"Προσθήκη"</string>
@@ -258,7 +281,8 @@
<string name="download_pending_network" msgid="6548714525679461053">"Αναμονή για σύνδεση δεδομένων…"</string>
<string name="download_running_paused" msgid="6418029352085656495">"Αναμονή για σύνδεση δεδομένων…"</string>
<string name="download_canceled" msgid="6057083743144492515">"Η λήψη ακυρώθηκε."</string>
- <string name="download_not_acceptable" msgid="313769696131563652">"Δεν είναι δυνατή η λήψη. Το περιεχόμενο δεν υποστηρίζεται από αυτό το τηλέφωνο."</string>
+ <!-- no translation found for download_not_acceptable (313769696131563652) -->
+ <skip />
<string name="download_file_error" msgid="1206648050615176113">"Δεν είναι δυνατή η ολοκλήρωση της λήψης. Δεν υπάρχει αρκετός διαθέσιμος χώρος."</string>
<string name="download_length_required" msgid="9038605488460437406">"Δεν είναι δυνατή η λήψη. Δεν είναι δυνατός ο προσδιορισμός του μεγέθους του στοιχείου."</string>
<string name="download_precondition_failed" msgid="8327584102874295580">"Η λήψη διακόπηκε. Δεν είναι δυνατή η συνέχισή της."</string>
@@ -270,14 +294,20 @@
<string name="webstorage_clear_data_summary" msgid="3523128713743907805">"Κατάργηση όλων των βάσεων δεδομένων που σχετίζονται με αυτόν τον ιστότοπο"</string>
<string name="webstorage_clear_data_dialog_title" msgid="345457466368974706">"Εκκαθάριση αποθηκευμένων δεδομένων"</string>
<string name="webstorage_clear_data_dialog_message" msgid="6678281256970470125">"Όλα τα δεδομένα που αποθηκεύτηκαν από αυτόν τον ιστότοπο θα διαγραφούν"</string>
- <string name="webstorage_clear_data_dialog_ok_button" msgid="2516563534211898636">"Εκκαθάριση όλων"</string>
+ <!-- no translation found for webstorage_clear_data_dialog_ok_button (2516563534211898636) -->
+ <skip />
<string name="webstorage_clear_data_dialog_cancel_button" msgid="2028867751958942762">"Άκυρο"</string>
<string name="webstorage_origin_summary_mb_stored" msgid="1985885826292236210">"MB αποθηκευμένα στο τηλέφωνό σας"</string>
- <string name="loading_video" msgid="4887871585216091096">"Φόρτωση βίντεο"</string>
- <string name="geolocation_permissions_prompt_message" msgid="356796102004052471">"Η σελίδα <xliff:g id="WEBSITE_ORIGIN">%s</xliff:g> θέλει να μάθει την τοποθεσία σας"</string>
- <string name="geolocation_permissions_prompt_share" msgid="9084486342048347976">"Κοινή χρήση τοποθεσίας"</string>
- <string name="geolocation_permissions_prompt_dont_share" msgid="6303025160237860300">"Απόρριψη"</string>
- <string name="geolocation_permissions_prompt_remember" msgid="3118526300707348308">"Διατήρηση προτίμησης"</string>
+ <!-- no translation found for loading_video (4887871585216091096) -->
+ <skip />
+ <!-- no translation found for geolocation_permissions_prompt_message (356796102004052471) -->
+ <skip />
+ <!-- no translation found for geolocation_permissions_prompt_share (9084486342048347976) -->
+ <skip />
+ <!-- no translation found for geolocation_permissions_prompt_dont_share (6303025160237860300) -->
+ <skip />
+ <!-- no translation found for geolocation_permissions_prompt_remember (3118526300707348308) -->
+ <skip />
<string name="geolocation_settings_page_title" msgid="1745477985097536528">"Εκκαθάριση πρόσβασης τοποθεσίας"</string>
<string name="geolocation_settings_page_summary_allowed" msgid="9180251524290811398">"Αυτήν τη στιγμή, αυτός ο ιστότοπος έχει πρόσβαση στην τοποθεσία σας"</string>
<string name="geolocation_settings_page_summary_not_allowed" msgid="4589649082203102544">"Δεν είναι δυνατή η πρόσβαση στην τοποθεσία σας από αυτόν τον ιστότοπο"</string>
@@ -285,10 +315,15 @@
<string name="geolocation_settings_page_dialog_message" msgid="7586671987576403993">"Η πρόσβαση στην τοποθεσία για αυτόν τον ιστότοπο θα απαλειφθεί"</string>
<string name="geolocation_settings_page_dialog_ok_button" msgid="4789434178048077287">"Εκκαθάριση πρόσβασης"</string>
<string name="geolocation_settings_page_dialog_cancel_button" msgid="7941036504673409747">"Άκυρο"</string>
- <string name="website_settings_clear_all" msgid="8739804325997655980">"Εκκαθάριση όλων"</string>
- <string name="website_settings_clear_all_dialog_title" msgid="7791826325122461718">"Εκκαθάριση όλων των ρυθμίσεων ιστοτόπου;"</string>
- <string name="website_settings_clear_all_dialog_message" msgid="6150502090601476333">"Θα γίνει διαγραφή όλων των δεδομένων ιστοτόπων και αδειών τοποθεσιών."</string>
- <string name="website_settings_clear_all_dialog_ok_button" msgid="6401582240627669431">"Διαγραφή όλων των δεδομένων"</string>
- <string name="website_settings_clear_all_dialog_cancel_button" msgid="1896757051856611674">"Ακύρωση"</string>
+ <!-- no translation found for website_settings_clear_all (8739804325997655980) -->
+ <skip />
+ <!-- no translation found for website_settings_clear_all_dialog_title (7791826325122461718) -->
+ <skip />
+ <!-- no translation found for website_settings_clear_all_dialog_message (6150502090601476333) -->
+ <skip />
+ <!-- no translation found for website_settings_clear_all_dialog_ok_button (6401582240627669431) -->
+ <skip />
+ <!-- no translation found for website_settings_clear_all_dialog_cancel_button (1896757051856611674) -->
+ <skip />
<string name="zoom_overview_button_text" msgid="4146579940085488881">"Επισκόπηση"</string>
</resources>
diff --git a/res/values-es-rUS/arrays.xml b/res/values-es-rUS/arrays.xml
deleted file mode 100644
index a622228..0000000
--- a/res/values-es-rUS/arrays.xml
+++ /dev/null
@@ -1,32 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2009 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.
--->
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string-array name="webstorage_quota_entries">
- <item msgid="5433313236875537673">"Cuota no permitida"</item>
- <item msgid="7374272188672967690">"5 MB"</item>
- <item msgid="8699352701856136738">"10 MB"</item>
- <item msgid="2018822431469084862">"30 MB"</item>
- <item msgid="5383642976774534074">"100 MB"</item>
- </string-array>
- <string-array name="webstorage_quota_entries_values">
- <item msgid="7620410313725236055">"0"</item>
- <item msgid="4302688814760304206">"5"</item>
- <item msgid="7291990205847586165">"10"</item>
- <item msgid="916913372287112423">"30"</item>
- <item msgid="3437188301324229987">"100"</item>
- </string-array>
-</resources>
diff --git a/res/values-es-rUS/strings.xml b/res/values-es-rUS/strings.xml
index 1b1f6e2..efbbc96 100644
--- a/res/values-es-rUS/strings.xml
+++ b/res/values-es-rUS/strings.xml
@@ -206,8 +206,6 @@
</string-array>
<string name="pref_default_text_encoding_dialogtitle" msgid="5508255018084978547">"Codificación de texto"</string>
<string name="pref_default_text_encoding_default" msgid="5272126711231936722">"Latino-1"</string>
- <string name="browserFrameRedirect" msgid="7049675479777828343">"Redireccionamiento"</string>
- <string name="browserFrame307Post" msgid="1429094844669510768">"Esta página web está siendo redireccionada. ¿Deseas reenviar los datos que ingresaste en tu formulario a la ubicación nueva?"</string>
<string name="browserFrameNetworkErrorLabel" msgid="126892350904924893">"Problema de conectividad de datos"</string>
<string name="browserFrameFileErrorLabel" msgid="8063691502792670367">"Problema con el archivo"</string>
<string name="browserFrameFormResubmitLabel" msgid="2685923472682180360">"Confirmar"</string>
diff --git a/res/values-es/arrays.xml b/res/values-es/arrays.xml
deleted file mode 100644
index 074f300..0000000
--- a/res/values-es/arrays.xml
+++ /dev/null
@@ -1,32 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2009 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.
--->
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string-array name="webstorage_quota_entries">
- <item msgid="5433313236875537673">"Ninguna cuota permitida"</item>
- <item msgid="7374272188672967690">"5 MB"</item>
- <item msgid="8699352701856136738">"10 MB"</item>
- <item msgid="2018822431469084862">"30 MB"</item>
- <item msgid="5383642976774534074">"100 MB"</item>
- </string-array>
- <string-array name="webstorage_quota_entries_values">
- <item msgid="7620410313725236055">"0"</item>
- <item msgid="4302688814760304206">"5"</item>
- <item msgid="7291990205847586165">"10"</item>
- <item msgid="916913372287112423">"30"</item>
- <item msgid="3437188301324229987">"100"</item>
- </string-array>
-</resources>
diff --git a/res/values-es/strings.xml b/res/values-es/strings.xml
index a3cdf33..1cb2fde 100644
--- a/res/values-es/strings.xml
+++ b/res/values-es/strings.xml
@@ -16,8 +16,10 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="application_name" msgid="1935869255545976415">"Navegador"</string>
- <string name="new_tab" msgid="4505722538297295141">"Nueva ventana"</string>
- <string name="active_tabs" msgid="3050623868203544623">"Ventanas"</string>
+ <!-- no translation found for new_tab (4505722538297295141) -->
+ <skip />
+ <!-- no translation found for active_tabs (3050623868203544623) -->
+ <skip />
<string name="tab_bookmarks" msgid="2305793036003473653">"Marcadores"</string>
<string name="tab_most_visited" msgid="1077402532455000703">"Más visitados"</string>
<string name="tab_history" msgid="1979267558744613746">"Historial"</string>
@@ -76,10 +78,12 @@
<string name="remove_bookmark" msgid="8407495852801410891">"Eliminar marcador"</string>
<string name="remove_from_bookmarks" msgid="4374080666576982775">"Eliminar de marcadores"</string>
<string name="remove_history_item" msgid="5021424935726728618">"Elliminar del historial"</string>
- <string name="set_as_homepage" msgid="4752937379414905560">"Establecer como página de inicio"</string>
+ <string name="set_as_homepage" msgid="4752937379414905560">"Establecer como página principal"</string>
<string name="bookmark_saved" msgid="2766434679871317557">"Guardar en marcadores"</string>
- <string name="bookmark_not_saved" msgid="700600955089376724">"No se ha podido guardar el marcador."</string>
- <string name="homepage_set" msgid="8768087280310966395">"Página principal establecida"</string>
+ <!-- no translation found for bookmark_not_saved (700600955089376724) -->
+ <skip />
+ <!-- no translation found for homepage_set (8768087280310966395) -->
+ <skip />
<string name="bookmark_needs_title" msgid="6245900436119218187">"El marcador debe tener un nombre."</string>
<string name="bookmark_needs_url" msgid="7809876865972755158">"El marcador debe tener una ubicación."</string>
<string name="empty_bookmark" msgid="7008697085928540511">"No se puede crear un marcador vacío."</string>
@@ -101,13 +105,14 @@
<string name="tab_picker_view_tab" msgid="2984342364915347656">"Ver"</string>
<string name="tab_picker_new_tab" msgid="3080280018986866528">"Nueva ventana"</string>
<string name="tab_picker_remove_tab" msgid="630087809802479397">"Cerrar"</string>
- <string name="tab_picker_bookmark" msgid="1084409404198995477">"Marcador"</string>
+ <string name="tab_picker_bookmark" msgid="1084409404198995477">"Marcar"</string>
<string name="tab_picker_send_url" msgid="9102803487525950021">"Compartir enlace"</string>
<string name="bookmarks" msgid="1961279134885867815">"Marcadores"</string>
- <string name="shortcut_bookmark" msgid="3974876480401135895">"Marcador"</string>
+ <string name="shortcut_bookmark" msgid="3974876480401135895">"Marcar"</string>
<string name="history" msgid="2451240511251410032">"Historial"</string>
<string name="menu_view_download" msgid="2124570321712995120">"Descargas"</string>
- <string name="copy_page_url" msgid="7635062169011319208">"Copiar URL de página"</string>
+ <!-- no translation found for copy_page_url (7635062169011319208) -->
+ <skip />
<string name="share_page" msgid="593756995297268343">"Compartir página"</string>
<string name="contextmenu_openlink" msgid="7237961252214188935">"Abrir"</string>
<string name="contextmenu_openlink_newwindow" msgid="992765050093960353">"Abrir en ventana nueva"</string>
@@ -122,40 +127,54 @@
<string name="contextmenu_add_contact" msgid="3183511922223645716">"Añadir contacto"</string>
<string name="contextmenu_send_mail" msgid="1014513374828775660">"Enviar mensaje de correo electrónico"</string>
<string name="contextmenu_map" msgid="7471390435434034912">"Mapa"</string>
- <string name="choosertitle_sharevia" msgid="4600490613341909086">"Compartir a través de"</string>
+ <!-- no translation found for choosertitle_sharevia (4600490613341909086) -->
+ <skip />
<string name="clear" msgid="7070043081700011461">"Borrar"</string>
<string name="replace" msgid="4843033491070384047">"Sustituir"</string>
<string name="browser_bookmarks_page_bookmarks_text" msgid="6787605028726162673">"Marcadores"</string>
<string name="menu_preferences" msgid="6709237687234102240">"Ajustes"</string>
<string name="pref_content_title" msgid="722227111894838633">"Configuración de contenido de la página"</string>
<string name="pref_content_load_images" msgid="2125616852957377561">"Cargar imágenes"</string>
- <string name="pref_content_load_images_summary" msgid="5055874125248398584">"Mostrar imágenes en páginas web"</string>
- <string name="pref_content_block_popups" msgid="7808433807197256726">"Bloquear ventanas emergentes"</string>
+ <!-- no translation found for pref_content_load_images_summary (5055874125248398584) -->
+ <skip />
+ <string name="pref_content_block_popups" msgid="7808433807197256726">"Bloquear ventanas emer."</string>
<string name="pref_content_javascript" msgid="4570972030299516843">"Habilitar JavaScript"</string>
<string name="pref_content_open_in_background" msgid="824123779725118663">"Abrir en segundo plano"</string>
- <string name="pref_content_plugins" msgid="7231944644794301582">"Habilitar complementos"</string>
- <string name="pref_content_open_in_background_summary" msgid="1737664075721181678">"Abrir nuevas ventanas detrás de la actual"</string>
- <string name="pref_content_homepage" msgid="6082437160778559806">"Página de inicio"</string>
+ <!-- no translation found for pref_content_plugins (7231944644794301582) -->
+ <skip />
+ <!-- no translation found for pref_content_open_in_background_summary (1737664075721181678) -->
+ <skip />
+ <string name="pref_content_homepage" msgid="6082437160778559806">"Establecer página principal"</string>
<string name="pref_content_autofit" msgid="8260474534053660809">"Ajustar páginas automát."</string>
- <string name="pref_content_autofit_summary" msgid="4587831659894879986">"Configurar las páginas web para ajustarlas a la pantalla"</string>
- <string name="pref_content_landscape_only" msgid="2022546812766219672">"Vista solo horizontal"</string>
- <string name="pref_content_landscape_only_summary" msgid="1008238895535428855">"Mostrar solo las páginas con la orientación de pantalla horizontal"</string>
+ <!-- no translation found for pref_content_autofit_summary (4587831659894879986) -->
+ <skip />
+ <!-- no translation found for pref_content_landscape_only (2022546812766219672) -->
+ <skip />
+ <!-- no translation found for pref_content_landscape_only_summary (1008238895535428855) -->
+ <skip />
<string name="pref_privacy_title" msgid="1052470980370846151">"Configuración de privacidad"</string>
<string name="pref_privacy_clear_cache" msgid="3380316479925886998">"Borrar caché"</string>
<string name="pref_privacy_clear_cache_summary" msgid="2216463577207991454">"Borrar bases de datos y contenido de la memoria caché local"</string>
- <string name="pref_privacy_clear_cache_dlg" msgid="5541011591300753881">"Las bases de datos y el contenido se eliminarán de la memoria caché local."</string>
- <string name="pref_privacy_clear_cookies" msgid="3095583579133780331">"Borrar datos de cookies"</string>
- <string name="pref_privacy_clear_cookies_summary" msgid="6962742063990677520">"Borrar todas las cookies del navegador"</string>
- <string name="pref_privacy_clear_cookies_dlg" msgid="552855688091432682">"Se eliminarán todas las cookies."</string>
+ <!-- no translation found for pref_privacy_clear_cache_dlg (5541011591300753881) -->
+ <skip />
+ <string name="pref_privacy_clear_cookies" msgid="3095583579133780331">"Borrar los datos de cookies"</string>
+ <!-- no translation found for pref_privacy_clear_cookies_summary (6962742063990677520) -->
+ <skip />
+ <!-- no translation found for pref_privacy_clear_cookies_dlg (552855688091432682) -->
+ <skip />
<string name="pref_privacy_clear_history" msgid="8723795508825198477">"Borrar historial"</string>
<string name="pref_privacy_clear_history_summary" msgid="6868501330708940734">"Borrar el historial de exploración del navegador"</string>
- <string name="pref_privacy_clear_history_dlg" msgid="544903007914753853">"Se eliminará el historial de exploración del navegador."</string>
+ <!-- no translation found for pref_privacy_clear_history_dlg (544903007914753853) -->
+ <skip />
<string name="pref_privacy_clear_form_data" msgid="4232668196344383987">"Borrar datos de formulario"</string>
- <string name="pref_privacy_clear_form_data_summary" msgid="1790390894719517167">"Borrar todos los datos de formulario guardados"</string>
- <string name="pref_privacy_clear_form_data_dlg" msgid="4443621086781197928">"Se eliminarán todos los datos de formulario guardados."</string>
+ <string name="pref_privacy_clear_form_data_summary" msgid="1790390894719517167">"Borrar todos los datos guardados del formulario"</string>
+ <!-- no translation found for pref_privacy_clear_form_data_dlg (4443621086781197928) -->
+ <skip />
<string name="pref_privacy_clear_passwords" msgid="4750234112289277480">"Borrar contraseñas"</string>
- <string name="pref_privacy_clear_passwords_summary" msgid="8856782718942903335">"Borrar todas las contraseñas guardadas"</string>
- <string name="pref_privacy_clear_passwords_dlg" msgid="2083869328824248255">"Se eliminarán todas las contraseñas guardadas."</string>
+ <!-- no translation found for pref_privacy_clear_passwords_summary (8856782718942903335) -->
+ <skip />
+ <!-- no translation found for pref_privacy_clear_passwords_dlg (2083869328824248255) -->
+ <skip />
<string name="pref_privacy_enable_geolocation" msgid="1395040170290765686">"Habilitar ubicación"</string>
<string name="pref_privacy_enable_geolocation_summary" msgid="8437020934664306205">"Permitir que los sitios soliciten acceso a tu ubicación"</string>
<string name="pref_privacy_clear_geolocation_access" msgid="6649680770030042980">"Permitir acceso a la ubicación"</string>
@@ -163,7 +182,8 @@
<string name="pref_privacy_clear_geolocation_access_dlg" msgid="7327063124488827244">"Permitir que todos los sitios web accedan a la ubicación"</string>
<string name="pref_security_title" msgid="5763978646932160021">"Configuración de seguridad"</string>
<string name="pref_security_remember_passwords" msgid="6492957683454529549">"Recordar contraseñas"</string>
- <string name="pref_security_remember_passwords_summary" msgid="256388703356349137">"Guardar nombres de usuario y contraseñas de sitios web"</string>
+ <!-- no translation found for pref_security_remember_passwords_summary (256388703356349137) -->
+ <skip />
<string name="pref_security_save_form_data" msgid="1213669802810198893">"Recordar formularios"</string>
<string name="pref_security_save_form_data_summary" msgid="4994074685153708026">"Recordar datos introducidos en formularios"</string>
<string name="pref_security_show_security_warning" msgid="8901135676266754559">"Mostrar advertencias"</string>
@@ -186,14 +206,17 @@
<item msgid="3840999588443167001">"Cerca"</item>
</string-array>
<string name="pref_default_zoom_dialogtitle" msgid="6095974367125109021">"Zoom predeterminado"</string>
- <string name="pref_content_load_page" msgid="2219810141690955452">"Abrir páginas en visión general"</string>
- <string name="pref_content_load_page_summary" msgid="8792093504054149369">"Mostrar información general de las páginas abiertas recientemente"</string>
+ <!-- no translation found for pref_content_load_page (2219810141690955452) -->
+ <skip />
+ <!-- no translation found for pref_content_load_page_summary (8792093504054149369) -->
+ <skip />
<string name="pref_extras_title" msgid="3091250467679722382">"Configuración avanzada"</string>
<string name="pref_extras_website_settings" msgid="67866640052455549">"Configuración del sitio web"</string>
<string name="pref_extras_website_settings_summary" msgid="3917568895776162240">"Ver configuración avanzada de sitios web individuales"</string>
- <string name="pref_extras_reset_default" msgid="8904000515846202110">"Restablecer valores predeterminados"</string>
+ <string name="pref_extras_reset_default" msgid="8904000515846202110">"Restablecer valores pred."</string>
<string name="pref_extras_reset_default_summary" msgid="7984680562706914966">"Borrar todos los datos del navegador y restablecer la configuración predeterminada"</string>
- <string name="pref_extras_reset_default_dlg" msgid="6894807766578874830">"Se eliminarán todos los datos del navegador y se restablecerá la configuración predeterminada."</string>
+ <!-- no translation found for pref_extras_reset_default_dlg (6894807766578874830) -->
+ <skip />
<string name="pref_extras_reset_default_dlg_title" msgid="2250334970728938936">"Restablecer valores predeterminados"</string>
<string name="pref_development_title" msgid="3263854204533056480">"Depurar"</string>
<string name="pref_default_text_encoding" msgid="5742965543955558478">"Codificación de texto"</string>
@@ -206,16 +229,16 @@
</string-array>
<string name="pref_default_text_encoding_dialogtitle" msgid="5508255018084978547">"Codificación de texto"</string>
<string name="pref_default_text_encoding_default" msgid="5272126711231936722">"Latín-1"</string>
- <string name="browserFrameRedirect" msgid="7049675479777828343">"Redireccionamiento"</string>
- <string name="browserFrame307Post" msgid="1429094844669510768">"Esta página web se ha redirigido a otra ubicación. ¿Quieres enviar los datos del formulario cumplimentado a la nueva ubicación?"</string>
<string name="browserFrameNetworkErrorLabel" msgid="126892350904924893">"Problema de conectividad de datos"</string>
<string name="browserFrameFileErrorLabel" msgid="8063691502792670367">"Problema con archivo"</string>
<string name="browserFrameFormResubmitLabel" msgid="2685923472682180360">"OK"</string>
<string name="browserFrameFormResubmitMessage" msgid="2752182215695632138">"La página que intentas ver contiene datos que ya se han enviado (\"POSTDATA\"). Si reenvías los datos, se repetirá cualquier acción realizada por el formulario de la página (como las búsquedas o las compras online)."</string>
<string name="loadSuspendedTitle" msgid="675991625288706944">"Sin conexión de red"</string>
- <string name="loadSuspended" msgid="3133656588880851273">"El navegador no puede cargar esta página porque no hay conexión a Internet."</string>
+ <!-- no translation found for loadSuspended (3133656588880851273) -->
+ <skip />
<string name="clear_history" msgid="5998307092715979619">"Borrar historial"</string>
- <string name="browser_history" msgid="1038987118290272525">"Páginas visitadas recientemente"</string>
+ <!-- no translation found for browser_history (1038987118290272525) -->
+ <skip />
<string name="empty_history" msgid="8738772352308207274">"El historial del navegador está vacío."</string>
<string name="add_new_bookmark" msgid="8086367791400349049">"Añadir marcador…"</string>
<string name="add_bookmark_short" msgid="3783984330998103735">"Añadir"</string>
@@ -229,7 +252,7 @@
<string name="too_many_windows_dialog_title" msgid="5175503564948906442">"Límite de ventanas alcanzado"</string>
<string name="too_many_windows_dialog_message" msgid="1398571800233959583">"No se ha podido abrir una ventana nueva porque ya se ha abierto el número máximo de ventanas admitido."</string>
<string name="too_many_subwindows_dialog_title" msgid="3805453941587725944">"Ventana emergente ya abierta"</string>
- <string name="too_many_subwindows_dialog_message" msgid="5827289829907966657">"No se ha podido abrir una nueva ventana emergente porque no se puede abrir más de una ventana emergente a la vez."</string>
+ <string name="too_many_subwindows_dialog_message" msgid="5827289829907966657">"No se ha podido abrir una nueva ventana emergente, porque no se puede abrir más de una ventana emergente a la vez."</string>
<string name="download_title" msgid="2122874021047565594">"Historial de descargas"</string>
<string name="download_unknown_filename" msgid="4013465542563652175">"<Desconocido>"</string>
<string name="download_menu_open" msgid="4888327480367757513">"Abrir"</string>
@@ -258,9 +281,10 @@
<string name="download_pending_network" msgid="6548714525679461053">"Esperando conexión de datos…"</string>
<string name="download_running_paused" msgid="6418029352085656495">"Esperando conexión de datos…"</string>
<string name="download_canceled" msgid="6057083743144492515">"Descarga cancelada"</string>
- <string name="download_not_acceptable" msgid="313769696131563652">"No se puede realizar la descarga porque el teléfono no admite el contenido que se quiere descargar."</string>
+ <!-- no translation found for download_not_acceptable (313769696131563652) -->
+ <skip />
<string name="download_file_error" msgid="1206648050615176113">"No se puede completar la descarga porque no hay suficiente espacio."</string>
- <string name="download_length_required" msgid="9038605488460437406">"No se puede realizar la descarga porque no es posible determinar el tamaño del elemento."</string>
+ <string name="download_length_required" msgid="9038605488460437406">"No se puede realizar la descarga, porque no es posible determinar el tamaño del elemento."</string>
<string name="download_precondition_failed" msgid="8327584102874295580">"La descarga se ha interrumpido y no se puede reanudar."</string>
<string name="activity_instrumentation_test_runner" msgid="8215091309334005029">"Realizador de pruebas del navegador"</string>
<string name="search_the_web" msgid="6046130189241962337">"Buscar en la Web"</string>
@@ -270,14 +294,20 @@
<string name="webstorage_clear_data_summary" msgid="3523128713743907805">"Eliminar todas las bases de datos asociadas a este sitio web"</string>
<string name="webstorage_clear_data_dialog_title" msgid="345457466368974706">"Borrar datos almacenados"</string>
<string name="webstorage_clear_data_dialog_message" msgid="6678281256970470125">"Todos los datos almacenados por este sitio web se eliminarán."</string>
- <string name="webstorage_clear_data_dialog_ok_button" msgid="2516563534211898636">"Borrar todo"</string>
+ <!-- no translation found for webstorage_clear_data_dialog_ok_button (2516563534211898636) -->
+ <skip />
<string name="webstorage_clear_data_dialog_cancel_button" msgid="2028867751958942762">"Cancelar"</string>
<string name="webstorage_origin_summary_mb_stored" msgid="1985885826292236210">"MB almacenados en tu teléfono"</string>
- <string name="loading_video" msgid="4887871585216091096">"Cargando vídeo"</string>
- <string name="geolocation_permissions_prompt_message" msgid="356796102004052471">"<xliff:g id="WEBSITE_ORIGIN">%s</xliff:g> quiere conocer tu ubicación."</string>
- <string name="geolocation_permissions_prompt_share" msgid="9084486342048347976">"Compartir ubicación"</string>
- <string name="geolocation_permissions_prompt_dont_share" msgid="6303025160237860300">"Rechazar"</string>
- <string name="geolocation_permissions_prompt_remember" msgid="3118526300707348308">"Recordar preferencia"</string>
+ <!-- no translation found for loading_video (4887871585216091096) -->
+ <skip />
+ <!-- no translation found for geolocation_permissions_prompt_message (356796102004052471) -->
+ <skip />
+ <!-- no translation found for geolocation_permissions_prompt_share (9084486342048347976) -->
+ <skip />
+ <!-- no translation found for geolocation_permissions_prompt_dont_share (6303025160237860300) -->
+ <skip />
+ <!-- no translation found for geolocation_permissions_prompt_remember (3118526300707348308) -->
+ <skip />
<string name="geolocation_settings_page_title" msgid="1745477985097536528">"Permitir acceso a la ubicación"</string>
<string name="geolocation_settings_page_summary_allowed" msgid="9180251524290811398">"Este sitio puede acceder actualmente a tu ubicación."</string>
<string name="geolocation_settings_page_summary_not_allowed" msgid="4589649082203102544">"Este sitio no puede acceder actualmente a tu ubicación."</string>
@@ -285,10 +315,15 @@
<string name="geolocation_settings_page_dialog_message" msgid="7586671987576403993">"Se permitirá que este sitio web acceda a tu ubicación."</string>
<string name="geolocation_settings_page_dialog_ok_button" msgid="4789434178048077287">"Permitir acceso"</string>
<string name="geolocation_settings_page_dialog_cancel_button" msgid="7941036504673409747">"Cancelar"</string>
- <string name="website_settings_clear_all" msgid="8739804325997655980">"Borrar todo"</string>
- <string name="website_settings_clear_all_dialog_title" msgid="7791826325122461718">"¿Quieres borrar toda la configuración del sitio web?"</string>
- <string name="website_settings_clear_all_dialog_message" msgid="6150502090601476333">"Se eliminarán todos los permisos de ubicación y los datos del sitio web."</string>
- <string name="website_settings_clear_all_dialog_ok_button" msgid="6401582240627669431">"Eliminar todos los datos"</string>
- <string name="website_settings_clear_all_dialog_cancel_button" msgid="1896757051856611674">"Cancelar"</string>
+ <!-- no translation found for website_settings_clear_all (8739804325997655980) -->
+ <skip />
+ <!-- no translation found for website_settings_clear_all_dialog_title (7791826325122461718) -->
+ <skip />
+ <!-- no translation found for website_settings_clear_all_dialog_message (6150502090601476333) -->
+ <skip />
+ <!-- no translation found for website_settings_clear_all_dialog_ok_button (6401582240627669431) -->
+ <skip />
+ <!-- no translation found for website_settings_clear_all_dialog_cancel_button (1896757051856611674) -->
+ <skip />
<string name="zoom_overview_button_text" msgid="4146579940085488881">"Información general"</string>
</resources>
diff --git a/res/values-fr/arrays.xml b/res/values-fr/arrays.xml
deleted file mode 100644
index f0ea8e8..0000000
--- a/res/values-fr/arrays.xml
+++ /dev/null
@@ -1,32 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2009 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.
--->
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string-array name="webstorage_quota_entries">
- <item msgid="5433313236875537673">"Aucun quota autorisé"</item>
- <item msgid="7374272188672967690">"5 Mo"</item>
- <item msgid="8699352701856136738">"10 Mo"</item>
- <item msgid="2018822431469084862">"30 Mo"</item>
- <item msgid="5383642976774534074">"100 Mo"</item>
- </string-array>
- <string-array name="webstorage_quota_entries_values">
- <item msgid="7620410313725236055">"0"</item>
- <item msgid="4302688814760304206">"5"</item>
- <item msgid="7291990205847586165">"10"</item>
- <item msgid="916913372287112423">"30"</item>
- <item msgid="3437188301324229987">"100"</item>
- </string-array>
-</resources>
diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml
index aad7dc9..03f6012 100644
--- a/res/values-fr/strings.xml
+++ b/res/values-fr/strings.xml
@@ -16,8 +16,10 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="application_name" msgid="1935869255545976415">"Navigateur"</string>
- <string name="new_tab" msgid="4505722538297295141">"Nouvelle fenêtre"</string>
- <string name="active_tabs" msgid="3050623868203544623">"Fenêtres"</string>
+ <!-- no translation found for new_tab (4505722538297295141) -->
+ <skip />
+ <!-- no translation found for active_tabs (3050623868203544623) -->
+ <skip />
<string name="tab_bookmarks" msgid="2305793036003473653">"Favoris"</string>
<string name="tab_most_visited" msgid="1077402532455000703">"Les + visités"</string>
<string name="tab_history" msgid="1979267558744613746">"Historique"</string>
@@ -78,8 +80,10 @@
<string name="remove_history_item" msgid="5021424935726728618">"Supprimer de l\'historique"</string>
<string name="set_as_homepage" msgid="4752937379414905560">"Définir comme page d\'accueil"</string>
<string name="bookmark_saved" msgid="2766434679871317557">"Enregistré dans les favoris"</string>
- <string name="bookmark_not_saved" msgid="700600955089376724">"Impossible d\'enregistrer le favori."</string>
- <string name="homepage_set" msgid="8768087280310966395">"La page d\'accueil a été définie."</string>
+ <!-- no translation found for bookmark_not_saved (700600955089376724) -->
+ <skip />
+ <!-- no translation found for homepage_set (8768087280310966395) -->
+ <skip />
<string name="bookmark_needs_title" msgid="6245900436119218187">"Vous devez attribuer un nom à votre favori."</string>
<string name="bookmark_needs_url" msgid="7809876865972755158">"Le favori doit disposer d\'un emplacement."</string>
<string name="empty_bookmark" msgid="7008697085928540511">"Impossible de créer un favori vide."</string>
@@ -90,7 +94,7 @@
<string name="switch_to_list" msgid="8900531247982121055">"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">"Nouv. fenêtre"</string>
+ <string name="open_in_new_window" msgid="6596775546468054510">"Nouvelle fenêtre"</string>
<string name="new_window" msgid="8117889615360211551">"Nouvelle fenêtre"</string>
<string name="goto_dot" msgid="3895839050522602723">"Recherche"</string>
<string name="find_dot" msgid="6259312434696611957">"Rechercher sur la page"</string>
@@ -107,7 +111,8 @@
<string name="shortcut_bookmark" msgid="3974876480401135895">"Favori"</string>
<string name="history" msgid="2451240511251410032">"Historique"</string>
<string name="menu_view_download" msgid="2124570321712995120">"Téléchargements"</string>
- <string name="copy_page_url" msgid="7635062169011319208">"Copier l\'URL de la page"</string>
+ <!-- no translation found for copy_page_url (7635062169011319208) -->
+ <skip />
<string name="share_page" msgid="593756995297268343">"Partager la page"</string>
<string name="contextmenu_openlink" msgid="7237961252214188935">"Ouvrir"</string>
<string name="contextmenu_openlink_newwindow" msgid="992765050093960353">"Ouvrir une nouvelle fenêtre"</string>
@@ -122,40 +127,54 @@
<string name="contextmenu_add_contact" msgid="3183511922223645716">"Ajouter un contact"</string>
<string name="contextmenu_send_mail" msgid="1014513374828775660">"Envoyer un e-mail"</string>
<string name="contextmenu_map" msgid="7471390435434034912">"Plan"</string>
- <string name="choosertitle_sharevia" msgid="4600490613341909086">"Partager via"</string>
+ <!-- no translation found for choosertitle_sharevia (4600490613341909086) -->
+ <skip />
<string name="clear" msgid="7070043081700011461">"Effacer"</string>
<string name="replace" msgid="4843033491070384047">"Remplacer"</string>
<string name="browser_bookmarks_page_bookmarks_text" msgid="6787605028726162673">"Favoris"</string>
<string name="menu_preferences" msgid="6709237687234102240">"Paramètres"</string>
<string name="pref_content_title" msgid="722227111894838633">"Paramètres du contenu de la page"</string>
<string name="pref_content_load_images" msgid="2125616852957377561">"Charger les images"</string>
- <string name="pref_content_load_images_summary" msgid="5055874125248398584">"Afficher les images des pages Web"</string>
+ <!-- no translation found for pref_content_load_images_summary (5055874125248398584) -->
+ <skip />
<string name="pref_content_block_popups" msgid="7808433807197256726">"Bloquer les pop-up"</string>
<string name="pref_content_javascript" msgid="4570972030299516843">"Activer JavaScript"</string>
<string name="pref_content_open_in_background" msgid="824123779725118663">"Ouvrir en arrière-plan"</string>
- <string name="pref_content_plugins" msgid="7231944644794301582">"Activer les plug-ins"</string>
- <string name="pref_content_open_in_background_summary" msgid="1737664075721181678">"Ouvrir les nouvelles fenêtres derrière la fenêtre actuelle"</string>
- <string name="pref_content_homepage" msgid="6082437160778559806">"Page d\'accueil"</string>
+ <!-- no translation found for pref_content_plugins (7231944644794301582) -->
+ <skip />
+ <!-- no translation found for pref_content_open_in_background_summary (1737664075721181678) -->
+ <skip />
+ <string name="pref_content_homepage" msgid="6082437160778559806">"Configurer la page d\'accueil"</string>
<string name="pref_content_autofit" msgid="8260474534053660809">"Redimensionner"</string>
- <string name="pref_content_autofit_summary" msgid="4587831659894879986">"Configurer les pages Web pour qu\'elles s\'ajustent à l\'écran"</string>
- <string name="pref_content_landscape_only" msgid="2022546812766219672">"Mode Paysage"</string>
- <string name="pref_content_landscape_only_summary" msgid="1008238895535428855">"Tjrs afficher les pages dans le sens de la largeur (orientation paysage)"</string>
+ <!-- no translation found for pref_content_autofit_summary (4587831659894879986) -->
+ <skip />
+ <!-- no translation found for pref_content_landscape_only (2022546812766219672) -->
+ <skip />
+ <!-- no translation found for pref_content_landscape_only_summary (1008238895535428855) -->
+ <skip />
<string name="pref_privacy_title" msgid="1052470980370846151">"Paramètres de confidentialité"</string>
<string name="pref_privacy_clear_cache" msgid="3380316479925886998">"Effacer le cache"</string>
<string name="pref_privacy_clear_cache_summary" msgid="2216463577207991454">"Supprimer les bases de données et le contenu mis localement en cache"</string>
- <string name="pref_privacy_clear_cache_dlg" msgid="5541011591300753881">"Les bases de données et le contenu mis localement en cache vont être supprimés."</string>
+ <!-- no translation found for pref_privacy_clear_cache_dlg (5541011591300753881) -->
+ <skip />
<string name="pref_privacy_clear_cookies" msgid="3095583579133780331">"Effacer tous les cookies"</string>
- <string name="pref_privacy_clear_cookies_summary" msgid="6962742063990677520">"Effacer tous les cookies du navigateur"</string>
- <string name="pref_privacy_clear_cookies_dlg" msgid="552855688091432682">"Tous les cookies vont être supprimés."</string>
+ <!-- no translation found for pref_privacy_clear_cookies_summary (6962742063990677520) -->
+ <skip />
+ <!-- no translation found for pref_privacy_clear_cookies_dlg (552855688091432682) -->
+ <skip />
<string name="pref_privacy_clear_history" msgid="8723795508825198477">"Effacer l\'historique"</string>
<string name="pref_privacy_clear_history_summary" msgid="6868501330708940734">"Effacer l\'historique du navigateur"</string>
- <string name="pref_privacy_clear_history_dlg" msgid="544903007914753853">"L\'historique du navigateur sera supprimé."</string>
+ <!-- no translation found for pref_privacy_clear_history_dlg (544903007914753853) -->
+ <skip />
<string name="pref_privacy_clear_form_data" msgid="4232668196344383987">"Eff. données formulaires"</string>
<string name="pref_privacy_clear_form_data_summary" msgid="1790390894719517167">"Effacer toutes les données de formulaire enregistrées"</string>
- <string name="pref_privacy_clear_form_data_dlg" msgid="4443621086781197928">"Toutes les données de formulaire enregistrées seront supprimées."</string>
- <string name="pref_privacy_clear_passwords" msgid="4750234112289277480">"Eff. les mots de passe"</string>
- <string name="pref_privacy_clear_passwords_summary" msgid="8856782718942903335">"Effacer tous les mots de passe enregistrés"</string>
- <string name="pref_privacy_clear_passwords_dlg" msgid="2083869328824248255">"Tous les mots de passe enregistrés seront effacés."</string>
+ <!-- no translation found for pref_privacy_clear_form_data_dlg (4443621086781197928) -->
+ <skip />
+ <string name="pref_privacy_clear_passwords" msgid="4750234112289277480">"Effacer les mots de passe"</string>
+ <!-- no translation found for pref_privacy_clear_passwords_summary (8856782718942903335) -->
+ <skip />
+ <!-- no translation found for pref_privacy_clear_passwords_dlg (2083869328824248255) -->
+ <skip />
<string name="pref_privacy_enable_geolocation" msgid="1395040170290765686">"Activer la localisation"</string>
<string name="pref_privacy_enable_geolocation_summary" msgid="8437020934664306205">"Autoriser les sites à demander l\'accès à vos données de localisation"</string>
<string name="pref_privacy_clear_geolocation_access" msgid="6649680770030042980">"Supprimer l\'accès aux données de localisation"</string>
@@ -163,8 +182,9 @@
<string name="pref_privacy_clear_geolocation_access_dlg" msgid="7327063124488827244">"Supprimer l\'accès aux données de localisation pour tous les sites Web"</string>
<string name="pref_security_title" msgid="5763978646932160021">"Paramètres de sécurité"</string>
<string name="pref_security_remember_passwords" msgid="6492957683454529549">"Mém. mots de passe"</string>
- <string name="pref_security_remember_passwords_summary" msgid="256388703356349137">"Enregistrer les noms d\'utilisateur et les mots de passe pour les sites Web"</string>
- <string name="pref_security_save_form_data" msgid="1213669802810198893">"Données de formulaires"</string>
+ <!-- no translation found for pref_security_remember_passwords_summary (256388703356349137) -->
+ <skip />
+ <string name="pref_security_save_form_data" msgid="1213669802810198893">"Mém. données formulaire"</string>
<string name="pref_security_save_form_data_summary" msgid="4994074685153708026">"Mémoriser les données saisies dans les formulaires pour les réutiliser"</string>
<string name="pref_security_show_security_warning" msgid="8901135676266754559">"Avertiss. de sécurité"</string>
<string name="pref_security_show_security_warning_summary" msgid="8968906112720511704">"Afficher un avertissement en cas de problème de sécurité d\'un site"</string>
@@ -186,14 +206,17 @@
<item msgid="3840999588443167001">"Proche"</item>
</string-array>
<string name="pref_default_zoom_dialogtitle" msgid="6095974367125109021">"Zoom par défaut"</string>
- <string name="pref_content_load_page" msgid="2219810141690955452">"Vue d\'ensemble des pages"</string>
- <string name="pref_content_load_page_summary" msgid="8792093504054149369">"Afficher une vue d\'ensemble des pages qui viennent d\'être ouvertes"</string>
+ <!-- no translation found for pref_content_load_page (2219810141690955452) -->
+ <skip />
+ <!-- no translation found for pref_content_load_page_summary (8792093504054149369) -->
+ <skip />
<string name="pref_extras_title" msgid="3091250467679722382">"Paramètres avancés"</string>
<string name="pref_extras_website_settings" msgid="67866640052455549">"Paramètres du site Web"</string>
<string name="pref_extras_website_settings_summary" msgid="3917568895776162240">"Afficher les paramètres avancés de sites Web individuels"</string>
- <string name="pref_extras_reset_default" msgid="8904000515846202110">"Rét. valeurs par défaut"</string>
- <string name="pref_extras_reset_default_summary" msgid="7984680562706914966">"Effacer les données du navigateur et rétablir les paramètres par défaut"</string>
- <string name="pref_extras_reset_default_dlg" msgid="6894807766578874830">"Toutes les données du navigateur seront supprimées et les paramètres par défaut rétablis."</string>
+ <string name="pref_extras_reset_default" msgid="8904000515846202110">"Rétablir valeurs par défaut"</string>
+ <string name="pref_extras_reset_default_summary" msgid="7984680562706914966">"Effacer toutes les données du navigateur et rétablir les paramètres par défaut"</string>
+ <!-- no translation found for pref_extras_reset_default_dlg (6894807766578874830) -->
+ <skip />
<string name="pref_extras_reset_default_dlg_title" msgid="2250334970728938936">"Rétablir les valeurs par défaut"</string>
<string name="pref_development_title" msgid="3263854204533056480">"Débogage"</string>
<string name="pref_default_text_encoding" msgid="5742965543955558478">"Codage du texte"</string>
@@ -206,20 +229,20 @@
</string-array>
<string name="pref_default_text_encoding_dialogtitle" msgid="5508255018084978547">"Codage du texte"</string>
<string name="pref_default_text_encoding_default" msgid="5272126711231936722">"Latin-1"</string>
- <string name="browserFrameRedirect" msgid="7049675479777828343">"Rediriger"</string>
- <string name="browserFrame307Post" msgid="1429094844669510768">"Cette page Web est en cours de redirection. Voulez-vous renvoyer les données de formulaire saisies vers le nouvel emplacement ?"</string>
<string name="browserFrameNetworkErrorLabel" msgid="126892350904924893">"Problème de connectivité des données"</string>
<string name="browserFrameFileErrorLabel" msgid="8063691502792670367">"Problème de fichier"</string>
<string name="browserFrameFormResubmitLabel" msgid="2685923472682180360">"Confirmer"</string>
<string name="browserFrameFormResubmitMessage" msgid="2752182215695632138">"La page que vous tentez d\'afficher contient des données qui ont déjà été envoyées (\"POSTDATA\"). Si vous renvoyez les données, toute action effectuée par le formulaire sur la page exécutée (notamment les lancements de recherche ou les achats en ligne) sera répétée."</string>
<string name="loadSuspendedTitle" msgid="675991625288706944">"Aucune connexion réseau"</string>
- <string name="loadSuspended" msgid="3133656588880851273">"Impossible de charger cette page dans le navigateur, car il n\'y a pas de connexion Internet."</string>
+ <!-- no translation found for loadSuspended (3133656588880851273) -->
+ <skip />
<string name="clear_history" msgid="5998307092715979619">"Effacer l\'historique"</string>
- <string name="browser_history" msgid="1038987118290272525">"Pages récemment consultées"</string>
+ <!-- no translation found for browser_history (1038987118290272525) -->
+ <skip />
<string name="empty_history" msgid="8738772352308207274">"L\'historique du navigateur est vide."</string>
<string name="add_new_bookmark" msgid="8086367791400349049">"Ajouter aux favoris..."</string>
<string name="add_bookmark_short" msgid="3783984330998103735">"Ajouter"</string>
- <string name="search_hint" msgid="4647356319916631820">"Rech. ou entrer l\'URL"</string>
+ <string name="search_hint" msgid="4647356319916631820">"Rechercher ou entrer l\'URL"</string>
<string name="search_button_text" msgid="5235226933877634410">"Aller"</string>
<string name="search_settings_description" msgid="1422401062529014107">"Favoris et historique Web"</string>
<string name="attention" msgid="3473639060042811244">"Attention"</string>
@@ -258,7 +281,8 @@
<string name="download_pending_network" msgid="6548714525679461053">"En attente d\'une connexion de données..."</string>
<string name="download_running_paused" msgid="6418029352085656495">"En attente d\'une connexion de données..."</string>
<string name="download_canceled" msgid="6057083743144492515">"Téléchargement annulé"</string>
- <string name="download_not_acceptable" msgid="313769696131563652">"Impossible d\'effectuer le téléchargement. Le contenu n\'est pas pris en charge sur ce téléphone."</string>
+ <!-- no translation found for download_not_acceptable (313769696131563652) -->
+ <skip />
<string name="download_file_error" msgid="1206648050615176113">"Téléchargement interrompu. Espace insuffisant."</string>
<string name="download_length_required" msgid="9038605488460437406">"Téléchargement impossible. La taille de l\'élément n\'a pas pu être déterminée."</string>
<string name="download_precondition_failed" msgid="8327584102874295580">"Téléchargement interrompu. Impossible de reprendre le téléchargement."</string>
@@ -270,25 +294,36 @@
<string name="webstorage_clear_data_summary" msgid="3523128713743907805">"Supprimer toutes les bases de données associées à ce site Web"</string>
<string name="webstorage_clear_data_dialog_title" msgid="345457466368974706">"Effacer les données stockées"</string>
<string name="webstorage_clear_data_dialog_message" msgid="6678281256970470125">"Toutes les données stockées par le site Web vont être supprimées."</string>
- <string name="webstorage_clear_data_dialog_ok_button" msgid="2516563534211898636">"Tout effacer"</string>
+ <!-- no translation found for webstorage_clear_data_dialog_ok_button (2516563534211898636) -->
+ <skip />
<string name="webstorage_clear_data_dialog_cancel_button" msgid="2028867751958942762">"Annuler"</string>
<string name="webstorage_origin_summary_mb_stored" msgid="1985885826292236210">"Mo stockés sur votre téléphone"</string>
- <string name="loading_video" msgid="4887871585216091096">"Chargement de la vidéo"</string>
- <string name="geolocation_permissions_prompt_message" msgid="356796102004052471">"<xliff:g id="WEBSITE_ORIGIN">%s</xliff:g> souhaite connaître votre position géographique."</string>
- <string name="geolocation_permissions_prompt_share" msgid="9084486342048347976">"Partager ma position"</string>
- <string name="geolocation_permissions_prompt_dont_share" msgid="6303025160237860300">"Refuser"</string>
- <string name="geolocation_permissions_prompt_remember" msgid="3118526300707348308">"Mémoriser les préférences"</string>
- <string name="geolocation_settings_page_title" msgid="1745477985097536528">"Accès données localis."</string>
+ <!-- no translation found for loading_video (4887871585216091096) -->
+ <skip />
+ <!-- no translation found for geolocation_permissions_prompt_message (356796102004052471) -->
+ <skip />
+ <!-- no translation found for geolocation_permissions_prompt_share (9084486342048347976) -->
+ <skip />
+ <!-- no translation found for geolocation_permissions_prompt_dont_share (6303025160237860300) -->
+ <skip />
+ <!-- no translation found for geolocation_permissions_prompt_remember (3118526300707348308) -->
+ <skip />
+ <string name="geolocation_settings_page_title" msgid="1745477985097536528">"Supprimer l\'accès aux données de localisation"</string>
<string name="geolocation_settings_page_summary_allowed" msgid="9180251524290811398">"Ce site a actuellement accès à vos données de localisation."</string>
<string name="geolocation_settings_page_summary_not_allowed" msgid="4589649082203102544">"Ce site n\'a actuellement pas accès à vos données de localisation."</string>
<string name="geolocation_settings_page_dialog_title" msgid="1549842043381347668">"Supprimer l\'accès aux données de localisation"</string>
<string name="geolocation_settings_page_dialog_message" msgid="7586671987576403993">"L\'accès de ce site Web aux données de localisation va être supprimé."</string>
<string name="geolocation_settings_page_dialog_ok_button" msgid="4789434178048077287">"Supprimer l\'accès"</string>
<string name="geolocation_settings_page_dialog_cancel_button" msgid="7941036504673409747">"Annuler"</string>
- <string name="website_settings_clear_all" msgid="8739804325997655980">"Tout effacer"</string>
- <string name="website_settings_clear_all_dialog_title" msgid="7791826325122461718">"Effacer tous les paramètres du site Web ?"</string>
- <string name="website_settings_clear_all_dialog_message" msgid="6150502090601476333">"Toutes les données du site Web et les autorisations de localisation seront supprimées."</string>
- <string name="website_settings_clear_all_dialog_ok_button" msgid="6401582240627669431">"Supprimer toutes les données"</string>
- <string name="website_settings_clear_all_dialog_cancel_button" msgid="1896757051856611674">"Annuler"</string>
+ <!-- no translation found for website_settings_clear_all (8739804325997655980) -->
+ <skip />
+ <!-- no translation found for website_settings_clear_all_dialog_title (7791826325122461718) -->
+ <skip />
+ <!-- no translation found for website_settings_clear_all_dialog_message (6150502090601476333) -->
+ <skip />
+ <!-- no translation found for website_settings_clear_all_dialog_ok_button (6401582240627669431) -->
+ <skip />
+ <!-- no translation found for website_settings_clear_all_dialog_cancel_button (1896757051856611674) -->
+ <skip />
<string name="zoom_overview_button_text" msgid="4146579940085488881">"Présentation"</string>
</resources>
diff --git a/res/values-it/arrays.xml b/res/values-it/arrays.xml
deleted file mode 100644
index 5245c81..0000000
--- a/res/values-it/arrays.xml
+++ /dev/null
@@ -1,32 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2009 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.
--->
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string-array name="webstorage_quota_entries">
- <item msgid="5433313236875537673">"Nessuna quota consentita"</item>
- <item msgid="7374272188672967690">"5 MB"</item>
- <item msgid="8699352701856136738">"10 MB"</item>
- <item msgid="2018822431469084862">"30 MB"</item>
- <item msgid="5383642976774534074">"100 MB"</item>
- </string-array>
- <string-array name="webstorage_quota_entries_values">
- <item msgid="7620410313725236055">"0"</item>
- <item msgid="4302688814760304206">"5"</item>
- <item msgid="7291990205847586165">"10"</item>
- <item msgid="916913372287112423">"30"</item>
- <item msgid="3437188301324229987">"100"</item>
- </string-array>
-</resources>
diff --git a/res/values-it/strings.xml b/res/values-it/strings.xml
index 91a53ce..4d1a926 100644
--- a/res/values-it/strings.xml
+++ b/res/values-it/strings.xml
@@ -16,8 +16,10 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="application_name" msgid="1935869255545976415">"Browser"</string>
- <string name="new_tab" msgid="4505722538297295141">"Nuova finestra"</string>
- <string name="active_tabs" msgid="3050623868203544623">"Finestre"</string>
+ <!-- no translation found for new_tab (4505722538297295141) -->
+ <skip />
+ <!-- no translation found for active_tabs (3050623868203544623) -->
+ <skip />
<string name="tab_bookmarks" msgid="2305793036003473653">"Segnalibri"</string>
<string name="tab_most_visited" msgid="1077402532455000703">"I più visitati"</string>
<string name="tab_history" msgid="1979267558744613746">"Cronologia"</string>
@@ -78,8 +80,10 @@
<string name="remove_history_item" msgid="5021424935726728618">"Rimuovi da cronologia"</string>
<string name="set_as_homepage" msgid="4752937379414905560">"Imposta come home page"</string>
<string name="bookmark_saved" msgid="2766434679871317557">"Salvato nei segnalibri."</string>
- <string name="bookmark_not_saved" msgid="700600955089376724">"Impossibile salvare il preferito."</string>
- <string name="homepage_set" msgid="8768087280310966395">"Home page impostata."</string>
+ <!-- no translation found for bookmark_not_saved (700600955089376724) -->
+ <skip />
+ <!-- no translation found for homepage_set (8768087280310966395) -->
+ <skip />
<string name="bookmark_needs_title" msgid="6245900436119218187">"Inserisci un nome per il segnalibro."</string>
<string name="bookmark_needs_url" msgid="7809876865972755158">"Inserisci un URL per il segnalibro."</string>
<string name="empty_bookmark" msgid="7008697085928540511">"Impossibile creare un segnalibro vuoto."</string>
@@ -107,7 +111,8 @@
<string name="shortcut_bookmark" msgid="3974876480401135895">"Segnalibro"</string>
<string name="history" msgid="2451240511251410032">"Cronologia"</string>
<string name="menu_view_download" msgid="2124570321712995120">"Download"</string>
- <string name="copy_page_url" msgid="7635062169011319208">"Copia URL della pagina"</string>
+ <!-- no translation found for copy_page_url (7635062169011319208) -->
+ <skip />
<string name="share_page" msgid="593756995297268343">"Condividi pagina"</string>
<string name="contextmenu_openlink" msgid="7237961252214188935">"Apri"</string>
<string name="contextmenu_openlink_newwindow" msgid="992765050093960353">"Apri in nuova finestra"</string>
@@ -122,48 +127,63 @@
<string name="contextmenu_add_contact" msgid="3183511922223645716">"Aggiungi contatto"</string>
<string name="contextmenu_send_mail" msgid="1014513374828775660">"Invia email"</string>
<string name="contextmenu_map" msgid="7471390435434034912">"Mappa"</string>
- <string name="choosertitle_sharevia" msgid="4600490613341909086">"Condividi tramite"</string>
+ <!-- no translation found for choosertitle_sharevia (4600490613341909086) -->
+ <skip />
<string name="clear" msgid="7070043081700011461">"Cancella"</string>
<string name="replace" msgid="4843033491070384047">"Sostituisci"</string>
<string name="browser_bookmarks_page_bookmarks_text" msgid="6787605028726162673">"Segnalibri"</string>
<string name="menu_preferences" msgid="6709237687234102240">"Impostazioni"</string>
<string name="pref_content_title" msgid="722227111894838633">"Impostazioni contenuti pagina"</string>
<string name="pref_content_load_images" msgid="2125616852957377561">"Carica immagini"</string>
- <string name="pref_content_load_images_summary" msgid="5055874125248398584">"Visualizza immagini in pagine web"</string>
+ <!-- no translation found for pref_content_load_images_summary (5055874125248398584) -->
+ <skip />
<string name="pref_content_block_popups" msgid="7808433807197256726">"Blocca finestre pop-up"</string>
<string name="pref_content_javascript" msgid="4570972030299516843">"Attiva JavaScript"</string>
<string name="pref_content_open_in_background" msgid="824123779725118663">"Apri in secondo piano"</string>
- <string name="pref_content_plugins" msgid="7231944644794301582">"Attiva plug-in"</string>
- <string name="pref_content_open_in_background_summary" msgid="1737664075721181678">"Apri le nuove finestre dietro la finestra corrente"</string>
+ <!-- no translation found for pref_content_plugins (7231944644794301582) -->
+ <skip />
+ <!-- no translation found for pref_content_open_in_background_summary (1737664075721181678) -->
+ <skip />
<string name="pref_content_homepage" msgid="6082437160778559806">"Imposta home page"</string>
<string name="pref_content_autofit" msgid="8260474534053660809">"Adatta autom. pagine"</string>
- <string name="pref_content_autofit_summary" msgid="4587831659894879986">"Adatta le pagine web allo schermo"</string>
- <string name="pref_content_landscape_only" msgid="2022546812766219672">"Visual. solo orizzontale"</string>
- <string name="pref_content_landscape_only_summary" msgid="1008238895535428855">"Visualizza le pagine solo con l\'orientamento dello schermo orizzontale più largo"</string>
+ <!-- no translation found for pref_content_autofit_summary (4587831659894879986) -->
+ <skip />
+ <!-- no translation found for pref_content_landscape_only (2022546812766219672) -->
+ <skip />
+ <!-- no translation found for pref_content_landscape_only_summary (1008238895535428855) -->
+ <skip />
<string name="pref_privacy_title" msgid="1052470980370846151">"Impostazioni privacy"</string>
<string name="pref_privacy_clear_cache" msgid="3380316479925886998">"Cancella cache"</string>
<string name="pref_privacy_clear_cache_summary" msgid="2216463577207991454">"Cancella i contenuti e i database memorizzati localmente nella cache"</string>
- <string name="pref_privacy_clear_cache_dlg" msgid="5541011591300753881">"I contenuti e i database memorizzati localmente nella cache verranno eliminati."</string>
- <string name="pref_privacy_clear_cookies" msgid="3095583579133780331">"Canc. tutti i dati dei cookie"</string>
- <string name="pref_privacy_clear_cookies_summary" msgid="6962742063990677520">"Cancella tutti i cookie del browser"</string>
- <string name="pref_privacy_clear_cookies_dlg" msgid="552855688091432682">"Verranno eliminati tutti i cookie."</string>
+ <!-- no translation found for pref_privacy_clear_cache_dlg (5541011591300753881) -->
+ <skip />
+ <string name="pref_privacy_clear_cookies" msgid="3095583579133780331">"Cancella tutti i dati dei cookie"</string>
+ <!-- no translation found for pref_privacy_clear_cookies_summary (6962742063990677520) -->
+ <skip />
+ <!-- no translation found for pref_privacy_clear_cookies_dlg (552855688091432682) -->
+ <skip />
<string name="pref_privacy_clear_history" msgid="8723795508825198477">"Cancella cronologia"</string>
<string name="pref_privacy_clear_history_summary" msgid="6868501330708940734">"Cancella la cronologia di esplorazione del browser"</string>
- <string name="pref_privacy_clear_history_dlg" msgid="544903007914753853">"La cronologia di navigazione del browser verrà eliminata."</string>
+ <!-- no translation found for pref_privacy_clear_history_dlg (544903007914753853) -->
+ <skip />
<string name="pref_privacy_clear_form_data" msgid="4232668196344383987">"Cancella dati moduli"</string>
<string name="pref_privacy_clear_form_data_summary" msgid="1790390894719517167">"Cancella tutti i dati dei moduli salvati"</string>
- <string name="pref_privacy_clear_form_data_dlg" msgid="4443621086781197928">"Tutti i dati dei moduli salvati verranno eliminati."</string>
+ <!-- no translation found for pref_privacy_clear_form_data_dlg (4443621086781197928) -->
+ <skip />
<string name="pref_privacy_clear_passwords" msgid="4750234112289277480">"Cancella password"</string>
- <string name="pref_privacy_clear_passwords_summary" msgid="8856782718942903335">"Cancella tutte le password salvate"</string>
- <string name="pref_privacy_clear_passwords_dlg" msgid="2083869328824248255">"Tutte le password salvate verranno eliminate."</string>
- <string name="pref_privacy_enable_geolocation" msgid="1395040170290765686">"Attiva posizione"</string>
+ <!-- no translation found for pref_privacy_clear_passwords_summary (8856782718942903335) -->
+ <skip />
+ <!-- no translation found for pref_privacy_clear_passwords_dlg (2083869328824248255) -->
+ <skip />
+ <string name="pref_privacy_enable_geolocation" msgid="1395040170290765686">"Attiva localizzazione"</string>
<string name="pref_privacy_enable_geolocation_summary" msgid="8437020934664306205">"Consenti ai siti di richiedere l\'accesso alla tua posizione"</string>
- <string name="pref_privacy_clear_geolocation_access" msgid="6649680770030042980">"Cancella accesso a posiz."</string>
+ <string name="pref_privacy_clear_geolocation_access" msgid="6649680770030042980">"Cancella accesso a posizione"</string>
<string name="pref_privacy_clear_geolocation_access_summary" msgid="7750143359497314679">"Cancella l\'accesso alla posizione per tutti i siti web"</string>
<string name="pref_privacy_clear_geolocation_access_dlg" msgid="7327063124488827244">"Cancella l\'accesso alla posizione per tutti i siti web"</string>
<string name="pref_security_title" msgid="5763978646932160021">"Impostazioni di protezione"</string>
<string name="pref_security_remember_passwords" msgid="6492957683454529549">"Memorizza le password"</string>
- <string name="pref_security_remember_passwords_summary" msgid="256388703356349137">"Salva nomi utente e password per i siti web"</string>
+ <!-- no translation found for pref_security_remember_passwords_summary (256388703356349137) -->
+ <skip />
<string name="pref_security_save_form_data" msgid="1213669802810198893">"Memorizza dati moduli"</string>
<string name="pref_security_save_form_data_summary" msgid="4994074685153708026">"Memorizza i dati che digito nei moduli per usi futuri"</string>
<string name="pref_security_show_security_warning" msgid="8901135676266754559">"Mostra avvisi protezione"</string>
@@ -186,15 +206,18 @@
<item msgid="3840999588443167001">"Chiudi"</item>
</string-array>
<string name="pref_default_zoom_dialogtitle" msgid="6095974367125109021">"Zoom predefinito"</string>
- <string name="pref_content_load_page" msgid="2219810141690955452">"Apri pag. in panoramica"</string>
- <string name="pref_content_load_page_summary" msgid="8792093504054149369">"Visualizza la panoramica delle pagine appena aperte"</string>
+ <!-- no translation found for pref_content_load_page (2219810141690955452) -->
+ <skip />
+ <!-- no translation found for pref_content_load_page_summary (8792093504054149369) -->
+ <skip />
<string name="pref_extras_title" msgid="3091250467679722382">"Impostazioni avanzate"</string>
<string name="pref_extras_website_settings" msgid="67866640052455549">"Impostazioni siti web"</string>
<string name="pref_extras_website_settings_summary" msgid="3917568895776162240">"Visualizza le impostazioni avanzate dei singoli siti web"</string>
- <string name="pref_extras_reset_default" msgid="8904000515846202110">"Ripristina valori predef."</string>
- <string name="pref_extras_reset_default_summary" msgid="7984680562706914966">"Cancella tutti i dati del browser e ripristina tutte le imp. predef."</string>
- <string name="pref_extras_reset_default_dlg" msgid="6894807766578874830">"Verranno eliminati tutti i dati del browser e verranno ripristinate le impostazioni predefinite."</string>
- <string name="pref_extras_reset_default_dlg_title" msgid="2250334970728938936">"Ripristina valori predef."</string>
+ <string name="pref_extras_reset_default" msgid="8904000515846202110">"Ripristina valori predefiniti"</string>
+ <string name="pref_extras_reset_default_summary" msgid="7984680562706914966">"Cancella tutti i dati del browser e ripristina tutte le impostazioni predefinite"</string>
+ <!-- no translation found for pref_extras_reset_default_dlg (6894807766578874830) -->
+ <skip />
+ <string name="pref_extras_reset_default_dlg_title" msgid="2250334970728938936">"Ripristina valori predefiniti"</string>
<string name="pref_development_title" msgid="3263854204533056480">"Debug"</string>
<string name="pref_default_text_encoding" msgid="5742965543955558478">"Codifica testo"</string>
<string-array name="pref_default_text_encoding_choices">
@@ -206,16 +229,16 @@
</string-array>
<string name="pref_default_text_encoding_dialogtitle" msgid="5508255018084978547">"Codifica testo"</string>
<string name="pref_default_text_encoding_default" msgid="5272126711231936722">"Latin-1"</string>
- <string name="browserFrameRedirect" msgid="7049675479777828343">"Reindirizza"</string>
- <string name="browserFrame307Post" msgid="1429094844669510768">"La pagina web è in fase di reindirizzamento. Inviare di nuovo i dati del modulo alla nuova posizione?"</string>
<string name="browserFrameNetworkErrorLabel" msgid="126892350904924893">"Problema di connettività dati"</string>
<string name="browserFrameFileErrorLabel" msgid="8063691502792670367">"Problemi con il file"</string>
<string name="browserFrameFormResubmitLabel" msgid="2685923472682180360">"Conferma"</string>
<string name="browserFrameFormResubmitMessage" msgid="2752182215695632138">"La pagina che stai tentando di visualizzare contiene dati già inviati (\"POSTDATA\"). Se invii di nuovo i dati, ogni azione effettuata dal modulo nella pagina (come una ricerca o un acquisto online) verrà ripetuta."</string>
<string name="loadSuspendedTitle" msgid="675991625288706944">"Nessuna connessione di rete"</string>
- <string name="loadSuspended" msgid="3133656588880851273">"Il browser non può caricare questa pagina senza una connessione a Internet."</string>
+ <!-- no translation found for loadSuspended (3133656588880851273) -->
+ <skip />
<string name="clear_history" msgid="5998307092715979619">"Cancella cronologia"</string>
- <string name="browser_history" msgid="1038987118290272525">"Pagine visitate di recente"</string>
+ <!-- no translation found for browser_history (1038987118290272525) -->
+ <skip />
<string name="empty_history" msgid="8738772352308207274">"La cronologia del browser è vuota."</string>
<string name="add_new_bookmark" msgid="8086367791400349049">"Aggiungi segnalibro…"</string>
<string name="add_bookmark_short" msgid="3783984330998103735">"Aggiungi"</string>
@@ -258,7 +281,8 @@
<string name="download_pending_network" msgid="6548714525679461053">"In attesa di connessione dati..."</string>
<string name="download_running_paused" msgid="6418029352085656495">"In attesa di connessione dati..."</string>
<string name="download_canceled" msgid="6057083743144492515">"Download annullato."</string>
- <string name="download_not_acceptable" msgid="313769696131563652">"Impossibile effettuare il download. I contenuti non sono supportati da questo telefono."</string>
+ <!-- no translation found for download_not_acceptable (313769696131563652) -->
+ <skip />
<string name="download_file_error" msgid="1206648050615176113">"Impossibile terminare il download. Spazio insufficiente."</string>
<string name="download_length_required" msgid="9038605488460437406">"Impossibile effettuare il download. Impossibile determinare le dimensioni dell\'elemento."</string>
<string name="download_precondition_failed" msgid="8327584102874295580">"Download interrotto. Impossibile ripristinarlo."</string>
@@ -270,25 +294,36 @@
<string name="webstorage_clear_data_summary" msgid="3523128713743907805">"Rimuovi tutti i database associati al sito web"</string>
<string name="webstorage_clear_data_dialog_title" msgid="345457466368974706">"Cancella dati archiviati"</string>
<string name="webstorage_clear_data_dialog_message" msgid="6678281256970470125">"Tutti i dati archiviati da questo sito web verranno eliminati"</string>
- <string name="webstorage_clear_data_dialog_ok_button" msgid="2516563534211898636">"Clear all"</string>
+ <!-- no translation found for webstorage_clear_data_dialog_ok_button (2516563534211898636) -->
+ <skip />
<string name="webstorage_clear_data_dialog_cancel_button" msgid="2028867751958942762">"Annulla"</string>
<string name="webstorage_origin_summary_mb_stored" msgid="1985885826292236210">"MB memorizzati sul telefono"</string>
- <string name="loading_video" msgid="4887871585216091096">"Caricamento video in corso"</string>
- <string name="geolocation_permissions_prompt_message" msgid="356796102004052471">"<xliff:g id="WEBSITE_ORIGIN">%s</xliff:g> vuole conoscere la tua posizione"</string>
- <string name="geolocation_permissions_prompt_share" msgid="9084486342048347976">"Condividi posizione"</string>
- <string name="geolocation_permissions_prompt_dont_share" msgid="6303025160237860300">"Rifiuta"</string>
- <string name="geolocation_permissions_prompt_remember" msgid="3118526300707348308">"Ricorda la preferenza"</string>
- <string name="geolocation_settings_page_title" msgid="1745477985097536528">"Cancella accesso a posiz."</string>
+ <!-- no translation found for loading_video (4887871585216091096) -->
+ <skip />
+ <!-- no translation found for geolocation_permissions_prompt_message (356796102004052471) -->
+ <skip />
+ <!-- no translation found for geolocation_permissions_prompt_share (9084486342048347976) -->
+ <skip />
+ <!-- no translation found for geolocation_permissions_prompt_dont_share (6303025160237860300) -->
+ <skip />
+ <!-- no translation found for geolocation_permissions_prompt_remember (3118526300707348308) -->
+ <skip />
+ <string name="geolocation_settings_page_title" msgid="1745477985097536528">"Cancella accesso a posizione"</string>
<string name="geolocation_settings_page_summary_allowed" msgid="9180251524290811398">"Al momento questo sito può accedere alla tua posizione"</string>
<string name="geolocation_settings_page_summary_not_allowed" msgid="4589649082203102544">"Al momento questo sito non può accedere alla tua posizione"</string>
- <string name="geolocation_settings_page_dialog_title" msgid="1549842043381347668">"Cancella accesso a posiz."</string>
+ <string name="geolocation_settings_page_dialog_title" msgid="1549842043381347668">"Cancella accesso a posizione"</string>
<string name="geolocation_settings_page_dialog_message" msgid="7586671987576403993">"L\'accesso alla posizione per questo sito web verrà cancellato"</string>
<string name="geolocation_settings_page_dialog_ok_button" msgid="4789434178048077287">"Cancella accesso"</string>
<string name="geolocation_settings_page_dialog_cancel_button" msgid="7941036504673409747">"Annulla"</string>
- <string name="website_settings_clear_all" msgid="8739804325997655980">"Cancella tutto"</string>
- <string name="website_settings_clear_all_dialog_title" msgid="7791826325122461718">"Cancellare tutte le impostazioni dei siti web?"</string>
- <string name="website_settings_clear_all_dialog_message" msgid="6150502090601476333">"Tutti i dati dei siti web e le autorizzazioni relative alla posizione verranno eliminati."</string>
- <string name="website_settings_clear_all_dialog_ok_button" msgid="6401582240627669431">"Elimina tutti i dati"</string>
- <string name="website_settings_clear_all_dialog_cancel_button" msgid="1896757051856611674">"Annulla"</string>
+ <!-- no translation found for website_settings_clear_all (8739804325997655980) -->
+ <skip />
+ <!-- no translation found for website_settings_clear_all_dialog_title (7791826325122461718) -->
+ <skip />
+ <!-- no translation found for website_settings_clear_all_dialog_message (6150502090601476333) -->
+ <skip />
+ <!-- no translation found for website_settings_clear_all_dialog_ok_button (6401582240627669431) -->
+ <skip />
+ <!-- no translation found for website_settings_clear_all_dialog_cancel_button (1896757051856611674) -->
+ <skip />
<string name="zoom_overview_button_text" msgid="4146579940085488881">"Panoramica"</string>
</resources>
diff --git a/res/values-ja/arrays.xml b/res/values-ja/arrays.xml
deleted file mode 100644
index c244e64..0000000
--- a/res/values-ja/arrays.xml
+++ /dev/null
@@ -1,32 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2009 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.
--->
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string-array name="webstorage_quota_entries">
- <item msgid="5433313236875537673">"割り当てられません"</item>
- <item msgid="7374272188672967690">"5MB"</item>
- <item msgid="8699352701856136738">"10MB"</item>
- <item msgid="2018822431469084862">"30MB"</item>
- <item msgid="5383642976774534074">"100MB"</item>
- </string-array>
- <string-array name="webstorage_quota_entries_values">
- <item msgid="7620410313725236055">"0"</item>
- <item msgid="4302688814760304206">"5"</item>
- <item msgid="7291990205847586165">"10"</item>
- <item msgid="916913372287112423">"30"</item>
- <item msgid="3437188301324229987">"100"</item>
- </string-array>
-</resources>
diff --git a/res/values-ja/strings.xml b/res/values-ja/strings.xml
index 4cd44af..34c8836 100644
--- a/res/values-ja/strings.xml
+++ b/res/values-ja/strings.xml
@@ -16,8 +16,10 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="application_name" msgid="1935869255545976415">"ブラウザ"</string>
- <string name="new_tab" msgid="4505722538297295141">"新しいウィンドウ"</string>
- <string name="active_tabs" msgid="3050623868203544623">"ウィンドウ"</string>
+ <!-- no translation found for new_tab (4505722538297295141) -->
+ <skip />
+ <!-- no translation found for active_tabs (3050623868203544623) -->
+ <skip />
<string name="tab_bookmarks" msgid="2305793036003473653">"ブックマーク"</string>
<string name="tab_most_visited" msgid="1077402532455000703">"よく使用"</string>
<string name="tab_history" msgid="1979267558744613746">"履歴"</string>
@@ -78,8 +80,10 @@
<string name="remove_history_item" msgid="5021424935726728618">"履歴から消去"</string>
<string name="set_as_homepage" msgid="4752937379414905560">"ホームページとして設定"</string>
<string name="bookmark_saved" msgid="2766434679871317557">"ブックマークを保存しました。"</string>
- <string name="bookmark_not_saved" msgid="700600955089376724">"ブックマークを保存できません。"</string>
- <string name="homepage_set" msgid="8768087280310966395">"ホームページを設定しました。"</string>
+ <!-- no translation found for bookmark_not_saved (700600955089376724) -->
+ <skip />
+ <!-- no translation found for homepage_set (8768087280310966395) -->
+ <skip />
<string name="bookmark_needs_title" msgid="6245900436119218187">"名前を指定してください。"</string>
<string name="bookmark_needs_url" msgid="7809876865972755158">"場所を指定してください。"</string>
<string name="empty_bookmark" msgid="7008697085928540511">"空のブックマークは作成できません。"</string>
@@ -107,7 +111,8 @@
<string name="shortcut_bookmark" msgid="3974876480401135895">"ブックマーク"</string>
<string name="history" msgid="2451240511251410032">"履歴"</string>
<string name="menu_view_download" msgid="2124570321712995120">"ダウンロード履歴"</string>
- <string name="copy_page_url" msgid="7635062169011319208">"ページのURLをコピー"</string>
+ <!-- no translation found for copy_page_url (7635062169011319208) -->
+ <skip />
<string name="share_page" msgid="593756995297268343">"ページを共有"</string>
<string name="contextmenu_openlink" msgid="7237961252214188935">"開く"</string>
<string name="contextmenu_openlink_newwindow" msgid="992765050093960353">"新しいウィンドウで開く"</string>
@@ -122,48 +127,63 @@
<string name="contextmenu_add_contact" msgid="3183511922223645716">"連絡先を追加"</string>
<string name="contextmenu_send_mail" msgid="1014513374828775660">"メールを送信"</string>
<string name="contextmenu_map" msgid="7471390435434034912">"地図"</string>
- <string name="choosertitle_sharevia" msgid="4600490613341909086">"共有ツール"</string>
+ <!-- no translation found for choosertitle_sharevia (4600490613341909086) -->
+ <skip />
<string name="clear" msgid="7070043081700011461">"消去"</string>
<string name="replace" msgid="4843033491070384047">"入れ替え"</string>
<string name="browser_bookmarks_page_bookmarks_text" msgid="6787605028726162673">"ブックマーク"</string>
<string name="menu_preferences" msgid="6709237687234102240">"設定"</string>
<string name="pref_content_title" msgid="722227111894838633">"ページコンテンツ設定"</string>
<string name="pref_content_load_images" msgid="2125616852957377561">"画像の読み込み"</string>
- <string name="pref_content_load_images_summary" msgid="5055874125248398584">"ウェブページに画像を表示する"</string>
+ <!-- no translation found for pref_content_load_images_summary (5055874125248398584) -->
+ <skip />
<string name="pref_content_block_popups" msgid="7808433807197256726">"ポップアップウィンドウをブロック"</string>
<string name="pref_content_javascript" msgid="4570972030299516843">"JavaScriptを有効にする"</string>
<string name="pref_content_open_in_background" msgid="824123779725118663">"バックグラウンドで開く"</string>
- <string name="pref_content_plugins" msgid="7231944644794301582">"プラグインを有効にする"</string>
- <string name="pref_content_open_in_background_summary" msgid="1737664075721181678">"現在のウィンドウの後ろに新しいウィンドウを開く"</string>
+ <!-- no translation found for pref_content_plugins (7231944644794301582) -->
+ <skip />
+ <!-- no translation found for pref_content_open_in_background_summary (1737664075721181678) -->
+ <skip />
<string name="pref_content_homepage" msgid="6082437160778559806">"ホームページ設定"</string>
<string name="pref_content_autofit" msgid="8260474534053660809">"ページの自動調整"</string>
- <string name="pref_content_autofit_summary" msgid="4587831659894879986">"画面に合わせてウェブページをフォーマットする"</string>
- <string name="pref_content_landscape_only" msgid="2022546812766219672">"常に横向きに表示"</string>
- <string name="pref_content_landscape_only_summary" msgid="1008238895535428855">"ページを常に横向きに表示する"</string>
+ <!-- no translation found for pref_content_autofit_summary (4587831659894879986) -->
+ <skip />
+ <!-- no translation found for pref_content_landscape_only (2022546812766219672) -->
+ <skip />
+ <!-- no translation found for pref_content_landscape_only_summary (1008238895535428855) -->
+ <skip />
<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>
- <string name="pref_privacy_clear_cache_dlg" msgid="5541011591300753881">"ローカルにキャッシュしたコンテンツとデータベースを削除します。"</string>
+ <string name="pref_privacy_clear_cache_summary" msgid="2216463577207991454">"ローカルにキャッシュしたコンテンツとデータベースを消去"</string>
+ <!-- no translation found for pref_privacy_clear_cache_dlg (5541011591300753881) -->
+ <skip />
<string name="pref_privacy_clear_cookies" msgid="3095583579133780331">"Cookieをすべて消去"</string>
- <string name="pref_privacy_clear_cookies_summary" msgid="6962742063990677520">"すべてのブラウザCookieを消去する"</string>
- <string name="pref_privacy_clear_cookies_dlg" msgid="552855688091432682">"すべてのCookieを削除します。"</string>
+ <!-- no translation found for pref_privacy_clear_cookies_summary (6962742063990677520) -->
+ <skip />
+ <!-- no translation found for pref_privacy_clear_cookies_dlg (552855688091432682) -->
+ <skip />
<string name="pref_privacy_clear_history" msgid="8723795508825198477">"履歴消去"</string>
- <string name="pref_privacy_clear_history_summary" msgid="6868501330708940734">"ブラウザの閲覧履歴を消去する"</string>
- <string name="pref_privacy_clear_history_dlg" msgid="544903007914753853">"ブラウザの閲覧履歴を削除します。"</string>
+ <string name="pref_privacy_clear_history_summary" msgid="6868501330708940734">"ブラウザの閲覧履歴を消去します"</string>
+ <!-- no translation found for pref_privacy_clear_history_dlg (544903007914753853) -->
+ <skip />
<string name="pref_privacy_clear_form_data" msgid="4232668196344383987">"フォームデータを消去"</string>
- <string name="pref_privacy_clear_form_data_summary" msgid="1790390894719517167">"保存されているフォームデータをすべて消去する"</string>
- <string name="pref_privacy_clear_form_data_dlg" msgid="4443621086781197928">"保存されているすべてのフォームデータが削除されます。"</string>
+ <string name="pref_privacy_clear_form_data_summary" msgid="1790390894719517167">"保存されているフォームデータをすべて消去します"</string>
+ <!-- no translation found for pref_privacy_clear_form_data_dlg (4443621086781197928) -->
+ <skip />
<string name="pref_privacy_clear_passwords" msgid="4750234112289277480">"パスワードを消去"</string>
- <string name="pref_privacy_clear_passwords_summary" msgid="8856782718942903335">"保存されているすべてのパスワードを消去する"</string>
- <string name="pref_privacy_clear_passwords_dlg" msgid="2083869328824248255">"保存されているすべてのパスワードを削除します。"</string>
+ <!-- no translation found for pref_privacy_clear_passwords_summary (8856782718942903335) -->
+ <skip />
+ <!-- no translation found for pref_privacy_clear_passwords_dlg (2083869328824248255) -->
+ <skip />
<string name="pref_privacy_enable_geolocation" msgid="1395040170290765686">"位置情報を有効にする"</string>
<string name="pref_privacy_enable_geolocation_summary" msgid="8437020934664306205">"サイトに現在地情報へのアクセスを許可する"</string>
<string name="pref_privacy_clear_geolocation_access" msgid="6649680770030042980">"位置情報アクセスをクリア"</string>
- <string name="pref_privacy_clear_geolocation_access_summary" msgid="7750143359497314679">"すべてのウェブサイトの位置情報アクセスをクリアする"</string>
+ <string name="pref_privacy_clear_geolocation_access_summary" msgid="7750143359497314679">"すべてのウェブサイトの位置情報アクセスをクリア"</string>
<string name="pref_privacy_clear_geolocation_access_dlg" msgid="7327063124488827244">"すべてのウェブサイトの位置情報アクセスをクリア"</string>
<string name="pref_security_title" msgid="5763978646932160021">"セキュリティ設定"</string>
<string name="pref_security_remember_passwords" msgid="6492957683454529549">"パスワードを保存"</string>
- <string name="pref_security_remember_passwords_summary" msgid="256388703356349137">"ウェブサイトのユーザー名とパスワードを保存する"</string>
+ <!-- no translation found for pref_security_remember_passwords_summary (256388703356349137) -->
+ <skip />
<string name="pref_security_save_form_data" msgid="1213669802810198893">"フォームデータを保存"</string>
<string name="pref_security_save_form_data_summary" msgid="4994074685153708026">"フォームに入力したデータを保存して後で呼び出せるようにする"</string>
<string name="pref_security_show_security_warning" msgid="8901135676266754559">"セキュリティ警告"</string>
@@ -181,19 +201,22 @@
<string name="pref_text_size_dialogtitle" msgid="3625388833512647865">"文字サイズ"</string>
<string name="pref_default_zoom" msgid="8076142259097187395">"デフォルトの倍率"</string>
<string-array name="pref_default_zoom_choices">
- <item msgid="549583171195154919">"低"</item>
- <item msgid="5619034257768161024">"中"</item>
- <item msgid="3840999588443167001">"高"</item>
+ <item msgid="549583171195154919">"低い"</item>
+ <item msgid="5619034257768161024">"中間"</item>
+ <item msgid="3840999588443167001">"高い"</item>
</string-array>
<string name="pref_default_zoom_dialogtitle" msgid="6095974367125109021">"デフォルトの倍率"</string>
- <string name="pref_content_load_page" msgid="2219810141690955452">"ページを全体表示で開く"</string>
- <string name="pref_content_load_page_summary" msgid="8792093504054149369">"新しく開いたページを全体表示する"</string>
+ <!-- no translation found for pref_content_load_page (2219810141690955452) -->
+ <skip />
+ <!-- no translation found for pref_content_load_page_summary (8792093504054149369) -->
+ <skip />
<string name="pref_extras_title" msgid="3091250467679722382">"詳細設定"</string>
<string name="pref_extras_website_settings" msgid="67866640052455549">"ウェブサイト設定"</string>
- <string name="pref_extras_website_settings_summary" msgid="3917568895776162240">"個々のウェブサイトの詳細設定を表示する"</string>
+ <string name="pref_extras_website_settings_summary" msgid="3917568895776162240">"個々のウェブサイトの詳細設定を表示"</string>
<string name="pref_extras_reset_default" msgid="8904000515846202110">"初期設定にリセット"</string>
<string name="pref_extras_reset_default_summary" msgid="7984680562706914966">"ブラウザデータをすべて消去して出荷時の初期設定に戻す"</string>
- <string name="pref_extras_reset_default_dlg" msgid="6894807766578874830">"すべてのブラウザデータを削除して設定をデフォルト値に戻します。"</string>
+ <!-- no translation found for pref_extras_reset_default_dlg (6894807766578874830) -->
+ <skip />
<string name="pref_extras_reset_default_dlg_title" msgid="2250334970728938936">"初期設定にリセット"</string>
<string name="pref_development_title" msgid="3263854204533056480">"デバッグ"</string>
<string name="pref_default_text_encoding" msgid="5742965543955558478">"テキストエンコード"</string>
@@ -206,16 +229,16 @@
</string-array>
<string name="pref_default_text_encoding_dialogtitle" msgid="5508255018084978547">"テキストエンコード"</string>
<string name="pref_default_text_encoding_default" msgid="5272126711231936722">"SHIFT_JIS"</string>
- <string name="browserFrameRedirect" msgid="7049675479777828343">"リダイレクト"</string>
- <string name="browserFrame307Post" msgid="1429094844669510768">"このウェブページはリダイレクトされます。入力したフォームデータをリダイレクト先に送信しますか?"</string>
<string name="browserFrameNetworkErrorLabel" msgid="126892350904924893">"データアクセスエラー"</string>
<string name="browserFrameFileErrorLabel" msgid="8063691502792670367">"ファイルに問題があります"</string>
<string name="browserFrameFormResubmitLabel" msgid="2685923472682180360">"確認"</string>
<string name="browserFrameFormResubmitMessage" msgid="2752182215695632138">"表示しようとしているページには、送信済みのデータ (「POSTDATA」) があります。データを再送すると、以前このページのフォームで実行した操作 (検索やオンライン購入など) が繰り返されます。"</string>
<string name="loadSuspendedTitle" msgid="675991625288706944">"ネットワークに接続していません"</string>
- <string name="loadSuspended" msgid="3133656588880851273">"インターネットに接続されていないためこのページをブラウザに読み込むことができません。"</string>
+ <!-- no translation found for loadSuspended (3133656588880851273) -->
+ <skip />
<string name="clear_history" msgid="5998307092715979619">"履歴消去"</string>
- <string name="browser_history" msgid="1038987118290272525">"最近閲覧したページ"</string>
+ <!-- no translation found for browser_history (1038987118290272525) -->
+ <skip />
<string name="empty_history" msgid="8738772352308207274">"ブラウザ履歴はありません。"</string>
<string name="add_new_bookmark" msgid="8086367791400349049">"現在のページをブックマーク"</string>
<string name="add_bookmark_short" msgid="3783984330998103735">"追加"</string>
@@ -258,7 +281,8 @@
<string name="download_pending_network" msgid="6548714525679461053">"ネットワークに接続しています..."</string>
<string name="download_running_paused" msgid="6418029352085656495">"ネットワークに接続しています..."</string>
<string name="download_canceled" msgid="6057083743144492515">"ダウンロードをキャンセルしました。"</string>
- <string name="download_not_acceptable" msgid="313769696131563652">"ダウンロードできません。この携帯ではこのコンテンツはサポートされていません。"</string>
+ <!-- no translation found for download_not_acceptable (313769696131563652) -->
+ <skip />
<string name="download_file_error" msgid="1206648050615176113">"空き容量が不足しているため、ダウンロードを完了できません。"</string>
<string name="download_length_required" msgid="9038605488460437406">"項目のサイズを特定できないため、ダウンロードできません。"</string>
<string name="download_precondition_failed" msgid="8327584102874295580">"ダウンロードが中断されました。再開できません。"</string>
@@ -270,14 +294,20 @@
<string name="webstorage_clear_data_summary" msgid="3523128713743907805">"このウェブサイトに関連付けたデータベースをすべて削除"</string>
<string name="webstorage_clear_data_dialog_title" msgid="345457466368974706">"保存したデータを消去"</string>
<string name="webstorage_clear_data_dialog_message" msgid="6678281256970470125">"このウェブサイトに保存されたデータをすべて削除します"</string>
- <string name="webstorage_clear_data_dialog_ok_button" msgid="2516563534211898636">"すべて消去"</string>
+ <!-- no translation found for webstorage_clear_data_dialog_ok_button (2516563534211898636) -->
+ <skip />
<string name="webstorage_clear_data_dialog_cancel_button" msgid="2028867751958942762">"キャンセル"</string>
<string name="webstorage_origin_summary_mb_stored" msgid="1985885826292236210">"携帯電話に保存している容量(MB)"</string>
- <string name="loading_video" msgid="4887871585216091096">"動画を読み込み中"</string>
- <string name="geolocation_permissions_prompt_message" msgid="356796102004052471">"<xliff:g id="WEBSITE_ORIGIN">%s</xliff:g>が現在地情報をリクエストしています"</string>
- <string name="geolocation_permissions_prompt_share" msgid="9084486342048347976">"位置情報を共有"</string>
- <string name="geolocation_permissions_prompt_dont_share" msgid="6303025160237860300">"拒否"</string>
- <string name="geolocation_permissions_prompt_remember" msgid="3118526300707348308">"設定を保存"</string>
+ <!-- no translation found for loading_video (4887871585216091096) -->
+ <skip />
+ <!-- no translation found for geolocation_permissions_prompt_message (356796102004052471) -->
+ <skip />
+ <!-- no translation found for geolocation_permissions_prompt_share (9084486342048347976) -->
+ <skip />
+ <!-- no translation found for geolocation_permissions_prompt_dont_share (6303025160237860300) -->
+ <skip />
+ <!-- no translation found for geolocation_permissions_prompt_remember (3118526300707348308) -->
+ <skip />
<string name="geolocation_settings_page_title" msgid="1745477985097536528">"位置情報アクセスをクリア"</string>
<string name="geolocation_settings_page_summary_allowed" msgid="9180251524290811398">"このサイトは現在地情報にアクセスできます"</string>
<string name="geolocation_settings_page_summary_not_allowed" msgid="4589649082203102544">"このサイトは現在地情報にアクセスできません"</string>
@@ -285,10 +315,15 @@
<string name="geolocation_settings_page_dialog_message" msgid="7586671987576403993">"このウェブサイトの位置情報アクセスをクリアします"</string>
<string name="geolocation_settings_page_dialog_ok_button" msgid="4789434178048077287">"アクセスをクリア"</string>
<string name="geolocation_settings_page_dialog_cancel_button" msgid="7941036504673409747">"キャンセル"</string>
- <string name="website_settings_clear_all" msgid="8739804325997655980">"すべて消去"</string>
- <string name="website_settings_clear_all_dialog_title" msgid="7791826325122461718">"すべてのウェブサイト設定を消去しますか?"</string>
- <string name="website_settings_clear_all_dialog_message" msgid="6150502090601476333">"すべてのウェブサイトデータと位置情報の許可が削除されます。"</string>
- <string name="website_settings_clear_all_dialog_ok_button" msgid="6401582240627669431">"すべてのデータを削除"</string>
- <string name="website_settings_clear_all_dialog_cancel_button" msgid="1896757051856611674">"キャンセル"</string>
+ <!-- no translation found for website_settings_clear_all (8739804325997655980) -->
+ <skip />
+ <!-- no translation found for website_settings_clear_all_dialog_title (7791826325122461718) -->
+ <skip />
+ <!-- no translation found for website_settings_clear_all_dialog_message (6150502090601476333) -->
+ <skip />
+ <!-- no translation found for website_settings_clear_all_dialog_ok_button (6401582240627669431) -->
+ <skip />
+ <!-- no translation found for website_settings_clear_all_dialog_cancel_button (1896757051856611674) -->
+ <skip />
<string name="zoom_overview_button_text" msgid="4146579940085488881">"全体表示"</string>
</resources>
diff --git a/res/values-ko/arrays.xml b/res/values-ko/arrays.xml
deleted file mode 100644
index 7d27cd1..0000000
--- a/res/values-ko/arrays.xml
+++ /dev/null
@@ -1,32 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2009 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.
--->
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string-array name="webstorage_quota_entries">
- <item msgid="5433313236875537673">"할당된 저장용량이 없습니다."</item>
- <item msgid="7374272188672967690">"5MB"</item>
- <item msgid="8699352701856136738">"10MB"</item>
- <item msgid="2018822431469084862">"30MB"</item>
- <item msgid="5383642976774534074">"100MB"</item>
- </string-array>
- <string-array name="webstorage_quota_entries_values">
- <item msgid="7620410313725236055">"0"</item>
- <item msgid="4302688814760304206">"5"</item>
- <item msgid="7291990205847586165">"10"</item>
- <item msgid="916913372287112423">"30"</item>
- <item msgid="3437188301324229987">"100"</item>
- </string-array>
-</resources>
diff --git a/res/values-ko/strings.xml b/res/values-ko/strings.xml
index 4682712..2559204 100644
--- a/res/values-ko/strings.xml
+++ b/res/values-ko/strings.xml
@@ -15,11 +15,13 @@
-->
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="application_name" msgid="1935869255545976415">"인터넷"</string>
- <string name="new_tab" msgid="4505722538297295141">"새 창"</string>
- <string name="active_tabs" msgid="3050623868203544623">"창"</string>
+ <string name="application_name" msgid="1935869255545976415">"브라우저"</string>
+ <!-- no translation found for new_tab (4505722538297295141) -->
+ <skip />
+ <!-- no translation found for active_tabs (3050623868203544623) -->
+ <skip />
<string name="tab_bookmarks" msgid="2305793036003473653">"북마크"</string>
- <string name="tab_most_visited" msgid="1077402532455000703">"자주 방문한 페이지"</string>
+ <string name="tab_most_visited" msgid="1077402532455000703">"최다 방문 웹사이트"</string>
<string name="tab_history" msgid="1979267558744613746">"기록"</string>
<string name="added_to_bookmarks" msgid="1020224130695956728">"북마크에 추가되었습니다."</string>
<string name="removed_from_bookmarks" msgid="6063705902028438800">"북마크에서 삭제됨"</string>
@@ -69,7 +71,7 @@
<string name="location" msgid="969988560160364559">"위치"</string>
<string name="name" msgid="5990326151488445481">"이름"</string>
<string name="http" msgid="2163722670597250102">"http://"</string>
- <string name="save_to_bookmarks" msgid="588165100024086565">"북마크에 추가"</string>
+ <string name="save_to_bookmarks" msgid="588165100024086565">"북마크 추가"</string>
<string name="edit_bookmark" msgid="5024089053490231905">"북마크 수정"</string>
<string name="create_shortcut_bookmark" msgid="9202323987633899835">"홈에 바로가기 추가"</string>
<string name="open_bookmark" msgid="8473581305759935790">"열기"</string>
@@ -78,8 +80,10 @@
<string name="remove_history_item" msgid="5021424935726728618">"기록에서 삭제"</string>
<string name="set_as_homepage" msgid="4752937379414905560">"홈페이지로 설정"</string>
<string name="bookmark_saved" msgid="2766434679871317557">"북마크에 저장되었습니다."</string>
- <string name="bookmark_not_saved" msgid="700600955089376724">"북마크를 저장할 수 없습니다."</string>
- <string name="homepage_set" msgid="8768087280310966395">"홈페이지가 설정되었습니다."</string>
+ <!-- no translation found for bookmark_not_saved (700600955089376724) -->
+ <skip />
+ <!-- no translation found for homepage_set (8768087280310966395) -->
+ <skip />
<string name="bookmark_needs_title" msgid="6245900436119218187">"북마크의 이름을 입력해야 합니다."</string>
<string name="bookmark_needs_url" msgid="7809876865972755158">"북마크의 위치를 입력해야 합니다."</string>
<string name="empty_bookmark" msgid="7008697085928540511">"빈 북마크를 만들 수 없습니다."</string>
@@ -107,7 +111,8 @@
<string name="shortcut_bookmark" msgid="3974876480401135895">"북마크"</string>
<string name="history" msgid="2451240511251410032">"기록"</string>
<string name="menu_view_download" msgid="2124570321712995120">"다운로드"</string>
- <string name="copy_page_url" msgid="7635062169011319208">"페이지 URL 복사"</string>
+ <!-- no translation found for copy_page_url (7635062169011319208) -->
+ <skip />
<string name="share_page" msgid="593756995297268343">"페이지 공유"</string>
<string name="contextmenu_openlink" msgid="7237961252214188935">"열기"</string>
<string name="contextmenu_openlink_newwindow" msgid="992765050093960353">"새 창에서 열기"</string>
@@ -122,48 +127,63 @@
<string name="contextmenu_add_contact" msgid="3183511922223645716">"연락처 추가"</string>
<string name="contextmenu_send_mail" msgid="1014513374828775660">"이메일 보내기"</string>
<string name="contextmenu_map" msgid="7471390435434034912">"지도"</string>
- <string name="choosertitle_sharevia" msgid="4600490613341909086">"공유에 사용할 응용프로그램:"</string>
+ <!-- no translation found for choosertitle_sharevia (4600490613341909086) -->
+ <skip />
<string name="clear" msgid="7070043081700011461">"지우기"</string>
<string name="replace" msgid="4843033491070384047">"교체"</string>
<string name="browser_bookmarks_page_bookmarks_text" msgid="6787605028726162673">"북마크"</string>
<string name="menu_preferences" msgid="6709237687234102240">"설정"</string>
<string name="pref_content_title" msgid="722227111894838633">"페이지 콘텐츠 설정"</string>
<string name="pref_content_load_images" msgid="2125616852957377561">"이미지 로드"</string>
- <string name="pref_content_load_images_summary" msgid="5055874125248398584">"웹페이지에 이미지 표시"</string>
+ <!-- no translation found for pref_content_load_images_summary (5055874125248398584) -->
+ <skip />
<string name="pref_content_block_popups" msgid="7808433807197256726">"팝업 창 차단"</string>
<string name="pref_content_javascript" msgid="4570972030299516843">"자바스크립트 사용"</string>
<string name="pref_content_open_in_background" msgid="824123779725118663">"백그라운드에서 열기"</string>
- <string name="pref_content_plugins" msgid="7231944644794301582">"플러그인 사용"</string>
- <string name="pref_content_open_in_background_summary" msgid="1737664075721181678">"현재 창 뒤에 새 창 열기"</string>
+ <!-- no translation found for pref_content_plugins (7231944644794301582) -->
+ <skip />
+ <!-- no translation found for pref_content_open_in_background_summary (1737664075721181678) -->
+ <skip />
<string name="pref_content_homepage" msgid="6082437160778559806">"홈페이지 설정"</string>
<string name="pref_content_autofit" msgid="8260474534053660809">"페이지 자동 맞춤"</string>
- <string name="pref_content_autofit_summary" msgid="4587831659894879986">"화면에 맞게 웹페이지 형식 지정"</string>
- <string name="pref_content_landscape_only" msgid="2022546812766219672">"가로 표시 전용"</string>
- <string name="pref_content_landscape_only_summary" msgid="1008238895535428855">"넓은 가로 방향 화면으로만 페이지 표시"</string>
+ <!-- no translation found for pref_content_autofit_summary (4587831659894879986) -->
+ <skip />
+ <!-- no translation found for pref_content_landscape_only (2022546812766219672) -->
+ <skip />
+ <!-- no translation found for pref_content_landscape_only_summary (1008238895535428855) -->
+ <skip />
<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>
- <string name="pref_privacy_clear_cache_dlg" msgid="5541011591300753881">"로컬로 캐시된 콘텐츠 및 데이터베이스가 삭제됩니다."</string>
+ <!-- no translation found for pref_privacy_clear_cache_dlg (5541011591300753881) -->
+ <skip />
<string name="pref_privacy_clear_cookies" msgid="3095583579133780331">"모든 쿠키 데이터 지우기"</string>
- <string name="pref_privacy_clear_cookies_summary" msgid="6962742063990677520">"모든 브라우저 쿠키 지우기"</string>
- <string name="pref_privacy_clear_cookies_dlg" msgid="552855688091432682">"쿠키가 모두 삭제됩니다."</string>
+ <!-- no translation found for pref_privacy_clear_cookies_summary (6962742063990677520) -->
+ <skip />
+ <!-- no translation found for pref_privacy_clear_cookies_dlg (552855688091432682) -->
+ <skip />
<string name="pref_privacy_clear_history" msgid="8723795508825198477">"기록 지우기"</string>
<string name="pref_privacy_clear_history_summary" msgid="6868501330708940734">"브라우저 탐색 기록 지우기"</string>
- <string name="pref_privacy_clear_history_dlg" msgid="544903007914753853">"브라우저 탐색 기록이 삭제됩니다."</string>
+ <!-- no translation found for pref_privacy_clear_history_dlg (544903007914753853) -->
+ <skip />
<string name="pref_privacy_clear_form_data" msgid="4232668196344383987">"양식 데이터 지우기"</string>
<string name="pref_privacy_clear_form_data_summary" msgid="1790390894719517167">"저장된 양식 데이터 모두 지우기"</string>
- <string name="pref_privacy_clear_form_data_dlg" msgid="4443621086781197928">"저장된 양식 데이터가 모두 삭제됩니다."</string>
- <string name="pref_privacy_clear_passwords" msgid="4750234112289277480">"비밀번호 삭제"</string>
- <string name="pref_privacy_clear_passwords_summary" msgid="8856782718942903335">"저장된 모든 비밀번호 삭제"</string>
- <string name="pref_privacy_clear_passwords_dlg" msgid="2083869328824248255">"저장된 비밀번호가 모두 삭제됩니다."</string>
+ <!-- no translation found for pref_privacy_clear_form_data_dlg (4443621086781197928) -->
+ <skip />
+ <string name="pref_privacy_clear_passwords" msgid="4750234112289277480">"비밀번호 지우기"</string>
+ <!-- no translation found for pref_privacy_clear_passwords_summary (8856782718942903335) -->
+ <skip />
+ <!-- no translation found for pref_privacy_clear_passwords_dlg (2083869328824248255) -->
+ <skip />
<string name="pref_privacy_enable_geolocation" msgid="1395040170290765686">"위치 정보 사용"</string>
<string name="pref_privacy_enable_geolocation_summary" msgid="8437020934664306205">"사이트의 위치 정보 액세스 요청 허용"</string>
<string name="pref_privacy_clear_geolocation_access" msgid="6649680770030042980">"위치 정보 액세스 삭제"</string>
<string name="pref_privacy_clear_geolocation_access_summary" msgid="7750143359497314679">"모든 웹사이트의 위치 정보 액세스 삭제"</string>
<string name="pref_privacy_clear_geolocation_access_dlg" msgid="7327063124488827244">"모든 웹사이트의 위치 정보 액세스 삭제"</string>
<string name="pref_security_title" msgid="5763978646932160021">"보안 설정"</string>
- <string name="pref_security_remember_passwords" msgid="6492957683454529549">"비밀번호 저장"</string>
- <string name="pref_security_remember_passwords_summary" msgid="256388703356349137">"웹사이트에 대해 사용자 이름 및 비밀번호 저장"</string>
+ <string name="pref_security_remember_passwords" msgid="6492957683454529549">"비밀번호 기억"</string>
+ <!-- no translation found for pref_security_remember_passwords_summary (256388703356349137) -->
+ <skip />
<string name="pref_security_save_form_data" msgid="1213669802810198893">"양식 데이터 기억"</string>
<string name="pref_security_save_form_data_summary" msgid="4994074685153708026">"나중에 사용할 수 있도록 양식에 입력한 데이터 기억"</string>
<string name="pref_security_show_security_warning" msgid="8901135676266754559">"보안 경고 표시"</string>
@@ -186,14 +206,17 @@
<item msgid="3840999588443167001">"닫기"</item>
</string-array>
<string name="pref_default_zoom_dialogtitle" msgid="6095974367125109021">"기본 확대/축소"</string>
- <string name="pref_content_load_page" msgid="2219810141690955452">"개요에서 페이지 열기"</string>
- <string name="pref_content_load_page_summary" msgid="8792093504054149369">"새로 연 페이지의 개요 표시"</string>
+ <!-- no translation found for pref_content_load_page (2219810141690955452) -->
+ <skip />
+ <!-- no translation found for pref_content_load_page_summary (8792093504054149369) -->
+ <skip />
<string name="pref_extras_title" msgid="3091250467679722382">"고급 설정"</string>
<string name="pref_extras_website_settings" msgid="67866640052455549">"웹사이트 설정"</string>
<string name="pref_extras_website_settings_summary" msgid="3917568895776162240">"개별 웹사이트의 고급 설정 보기"</string>
<string name="pref_extras_reset_default" msgid="8904000515846202110">"기본값으로 재설정"</string>
<string name="pref_extras_reset_default_summary" msgid="7984680562706914966">"모든 브라우저 데이터를 지우고 모든 설정을 기본값으로 재설정"</string>
- <string name="pref_extras_reset_default_dlg" msgid="6894807766578874830">"모든 브라우저 데이터가 삭제되고 설정이 기본값으로 돌아갑니다."</string>
+ <!-- no translation found for pref_extras_reset_default_dlg (6894807766578874830) -->
+ <skip />
<string name="pref_extras_reset_default_dlg_title" msgid="2250334970728938936">"기본값으로 재설정"</string>
<string name="pref_development_title" msgid="3263854204533056480">"디버그"</string>
<string name="pref_default_text_encoding" msgid="5742965543955558478">"텍스트 인코딩"</string>
@@ -206,16 +229,16 @@
</string-array>
<string name="pref_default_text_encoding_dialogtitle" msgid="5508255018084978547">"텍스트 인코딩"</string>
<string name="pref_default_text_encoding_default" msgid="5272126711231936722">"라틴어-1"</string>
- <string name="browserFrameRedirect" msgid="7049675479777828343">"리디렉션"</string>
- <string name="browserFrame307Post" msgid="1429094844669510768">"웹페이지가 리디렉션됩니다. 입력한 양식 데이터를 새 위치로 다시 보내시겠습니까?"</string>
<string name="browserFrameNetworkErrorLabel" msgid="126892350904924893">"데이터 연결에 문제 발생"</string>
<string name="browserFrameFileErrorLabel" msgid="8063691502792670367">"파일 문제 발생"</string>
<string name="browserFrameFormResubmitLabel" msgid="2685923472682180360">"확인"</string>
<string name="browserFrameFormResubmitMessage" msgid="2752182215695632138">"보려는 페이지에 이미 제출된 데이터(\'POSTDATA\')가 있습니다. 해당 데이터를 다시 보내면 페이지의 양식에서 수행한 작업(예: 검색 또는 온라인 구매)이 반복됩니다."</string>
<string name="loadSuspendedTitle" msgid="675991625288706944">"네트워크 연결 없음"</string>
- <string name="loadSuspended" msgid="3133656588880851273">"인터넷에 연결되어 있지 않기 때문에 브라우저에서 페이지를 로드할 수 없습니다."</string>
+ <!-- no translation found for loadSuspended (3133656588880851273) -->
+ <skip />
<string name="clear_history" msgid="5998307092715979619">"기록 지우기"</string>
- <string name="browser_history" msgid="1038987118290272525">"최근 방문한 페이지"</string>
+ <!-- no translation found for browser_history (1038987118290272525) -->
+ <skip />
<string name="empty_history" msgid="8738772352308207274">"브라우저 기록이 비어 있습니다."</string>
<string name="add_new_bookmark" msgid="8086367791400349049">"북마크에 추가..."</string>
<string name="add_bookmark_short" msgid="3783984330998103735">"추가"</string>
@@ -258,7 +281,8 @@
<string name="download_pending_network" msgid="6548714525679461053">"데이터 연결 대기 중..."</string>
<string name="download_running_paused" msgid="6418029352085656495">"데이터 연결을 기다리는 중..."</string>
<string name="download_canceled" msgid="6057083743144492515">"다운로드가 취소되었습니다."</string>
- <string name="download_not_acceptable" msgid="313769696131563652">"휴대전화에서 지원하지 않는 콘텐츠이므로 다운로드할 수 없습니다."</string>
+ <!-- no translation found for download_not_acceptable (313769696131563652) -->
+ <skip />
<string name="download_file_error" msgid="1206648050615176113">"저장 용량이 부족하여 다운로드를 완료할 수 없습니다."</string>
<string name="download_length_required" msgid="9038605488460437406">"항목의 크기를 확인할 수 없으므로 다운로드할 수 없습니다."</string>
<string name="download_precondition_failed" msgid="8327584102874295580">"다운로드가 중단되었으며 다시 시작할 수 없습니다."</string>
@@ -270,14 +294,20 @@
<string name="webstorage_clear_data_summary" msgid="3523128713743907805">"웹사이트에 연결된 모든 데이터베이스 삭제"</string>
<string name="webstorage_clear_data_dialog_title" msgid="345457466368974706">"저장된 데이터 삭제"</string>
<string name="webstorage_clear_data_dialog_message" msgid="6678281256970470125">"웹사이트에서 저장한 모든 데이터가 삭제됩니다."</string>
- <string name="webstorage_clear_data_dialog_ok_button" msgid="2516563534211898636">"모두 지우기"</string>
+ <!-- no translation found for webstorage_clear_data_dialog_ok_button (2516563534211898636) -->
+ <skip />
<string name="webstorage_clear_data_dialog_cancel_button" msgid="2028867751958942762">"취소"</string>
<string name="webstorage_origin_summary_mb_stored" msgid="1985885826292236210">"휴대전화에 저장된 용량(MB)"</string>
- <string name="loading_video" msgid="4887871585216091096">"동영상 로드 중"</string>
- <string name="geolocation_permissions_prompt_message" msgid="356796102004052471">"<xliff:g id="WEBSITE_ORIGIN">%s</xliff:g>에서 사용자의 위치를 확인하려고 합니다."</string>
- <string name="geolocation_permissions_prompt_share" msgid="9084486342048347976">"위치 공유"</string>
- <string name="geolocation_permissions_prompt_dont_share" msgid="6303025160237860300">"거부"</string>
- <string name="geolocation_permissions_prompt_remember" msgid="3118526300707348308">"환경설정 저장"</string>
+ <!-- no translation found for loading_video (4887871585216091096) -->
+ <skip />
+ <!-- no translation found for geolocation_permissions_prompt_message (356796102004052471) -->
+ <skip />
+ <!-- no translation found for geolocation_permissions_prompt_share (9084486342048347976) -->
+ <skip />
+ <!-- no translation found for geolocation_permissions_prompt_dont_share (6303025160237860300) -->
+ <skip />
+ <!-- no translation found for geolocation_permissions_prompt_remember (3118526300707348308) -->
+ <skip />
<string name="geolocation_settings_page_title" msgid="1745477985097536528">"위치 정보 액세스 삭제"</string>
<string name="geolocation_settings_page_summary_allowed" msgid="9180251524290811398">"사이트에서 사용자의 위치에 현재 액세스할 수 있음"</string>
<string name="geolocation_settings_page_summary_not_allowed" msgid="4589649082203102544">"사이트에서 사용자의 위치에 현재 액세스할 수 없음"</string>
@@ -285,10 +315,15 @@
<string name="geolocation_settings_page_dialog_message" msgid="7586671987576403993">"웹사이트의 위치 정보 액세스가 삭제됩니다."</string>
<string name="geolocation_settings_page_dialog_ok_button" msgid="4789434178048077287">"액세스 삭제"</string>
<string name="geolocation_settings_page_dialog_cancel_button" msgid="7941036504673409747">"취소"</string>
- <string name="website_settings_clear_all" msgid="8739804325997655980">"모두 지우기"</string>
- <string name="website_settings_clear_all_dialog_title" msgid="7791826325122461718">"웹사이트 설정을 모두 지우시겠습니까?"</string>
- <string name="website_settings_clear_all_dialog_message" msgid="6150502090601476333">"모든 웹사이트 데이터와 위치 권한이 삭제됩니다."</string>
- <string name="website_settings_clear_all_dialog_ok_button" msgid="6401582240627669431">"모든 데이터 삭제"</string>
- <string name="website_settings_clear_all_dialog_cancel_button" msgid="1896757051856611674">"취소"</string>
+ <!-- no translation found for website_settings_clear_all (8739804325997655980) -->
+ <skip />
+ <!-- no translation found for website_settings_clear_all_dialog_title (7791826325122461718) -->
+ <skip />
+ <!-- no translation found for website_settings_clear_all_dialog_message (6150502090601476333) -->
+ <skip />
+ <!-- no translation found for website_settings_clear_all_dialog_ok_button (6401582240627669431) -->
+ <skip />
+ <!-- no translation found for website_settings_clear_all_dialog_cancel_button (1896757051856611674) -->
+ <skip />
<string name="zoom_overview_button_text" msgid="4146579940085488881">"전체보기"</string>
</resources>
diff --git a/res/values-nb/arrays.xml b/res/values-nb/arrays.xml
deleted file mode 100644
index cbaf8c2..0000000
--- a/res/values-nb/arrays.xml
+++ /dev/null
@@ -1,32 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2009 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.
--->
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string-array name="webstorage_quota_entries">
- <item msgid="5433313236875537673">"Ingen kvote tillatt"</item>
- <item msgid="7374272188672967690">"5 MB"</item>
- <item msgid="8699352701856136738">"10 MB"</item>
- <item msgid="2018822431469084862">"30 MB"</item>
- <item msgid="5383642976774534074">"100 MB"</item>
- </string-array>
- <string-array name="webstorage_quota_entries_values">
- <item msgid="7620410313725236055">"0"</item>
- <item msgid="4302688814760304206">"5"</item>
- <item msgid="7291990205847586165">"10"</item>
- <item msgid="916913372287112423">"30"</item>
- <item msgid="3437188301324229987">"100"</item>
- </string-array>
-</resources>
diff --git a/res/values-nb/strings.xml b/res/values-nb/strings.xml
index 1b4fcb9..7375d84 100644
--- a/res/values-nb/strings.xml
+++ b/res/values-nb/strings.xml
@@ -16,8 +16,10 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="application_name" msgid="1935869255545976415">"Nettleser"</string>
- <string name="new_tab" msgid="4505722538297295141">"Ny fane"</string>
- <string name="active_tabs" msgid="3050623868203544623">"Vinduer"</string>
+ <!-- no translation found for new_tab (4505722538297295141) -->
+ <skip />
+ <!-- no translation found for active_tabs (3050623868203544623) -->
+ <skip />
<string name="tab_bookmarks" msgid="2305793036003473653">"Bokmerker"</string>
<string name="tab_most_visited" msgid="1077402532455000703">"Mest besøkt"</string>
<string name="tab_history" msgid="1979267558744613746">"Logg"</string>
@@ -78,8 +80,10 @@
<string name="remove_history_item" msgid="5021424935726728618">"Fjern fra loggen"</string>
<string name="set_as_homepage" msgid="4752937379414905560">"Bruk som startside"</string>
<string name="bookmark_saved" msgid="2766434679871317557">"Bokmerke lagret."</string>
- <string name="bookmark_not_saved" msgid="700600955089376724">"Kunne ikke lagre bokmerket."</string>
- <string name="homepage_set" msgid="8768087280310966395">"Startside angitt"</string>
+ <!-- no translation found for bookmark_not_saved (700600955089376724) -->
+ <skip />
+ <!-- no translation found for homepage_set (8768087280310966395) -->
+ <skip />
<string name="bookmark_needs_title" msgid="6245900436119218187">"Bokmerket må ha et navn."</string>
<string name="bookmark_needs_url" msgid="7809876865972755158">"Bokmerket må ha en adresse."</string>
<string name="empty_bookmark" msgid="7008697085928540511">"Kan ikke opprette tomt bokmerke."</string>
@@ -107,7 +111,8 @@
<string name="shortcut_bookmark" msgid="3974876480401135895">"Bokmerk"</string>
<string name="history" msgid="2451240511251410032">"Logg"</string>
<string name="menu_view_download" msgid="2124570321712995120">"Nedlastinger"</string>
- <string name="copy_page_url" msgid="7635062169011319208">"Kopier nettstedsadresse"</string>
+ <!-- no translation found for copy_page_url (7635062169011319208) -->
+ <skip />
<string name="share_page" msgid="593756995297268343">"Del side"</string>
<string name="contextmenu_openlink" msgid="7237961252214188935">"Åpne"</string>
<string name="contextmenu_openlink_newwindow" msgid="992765050093960353">"Åpne i nytt vindu"</string>
@@ -122,40 +127,54 @@
<string name="contextmenu_add_contact" msgid="3183511922223645716">"Legg til kontakt"</string>
<string name="contextmenu_send_mail" msgid="1014513374828775660">"Send e-post"</string>
<string name="contextmenu_map" msgid="7471390435434034912">"Kart"</string>
- <string name="choosertitle_sharevia" msgid="4600490613341909086">"Del via"</string>
+ <!-- no translation found for choosertitle_sharevia (4600490613341909086) -->
+ <skip />
<string name="clear" msgid="7070043081700011461">"Tøm"</string>
<string name="replace" msgid="4843033491070384047">"Erstatt"</string>
<string name="browser_bookmarks_page_bookmarks_text" msgid="6787605028726162673">"Bokmerker"</string>
<string name="menu_preferences" msgid="6709237687234102240">"Innstillinger"</string>
<string name="pref_content_title" msgid="722227111894838633">"Sideinnhold"</string>
<string name="pref_content_load_images" msgid="2125616852957377561">"Last bilder"</string>
- <string name="pref_content_load_images_summary" msgid="5055874125248398584">"Vis bilder på nettsteder"</string>
- <string name="pref_content_block_popups" msgid="7808433807197256726">"Blokker popup-vinduer"</string>
+ <!-- no translation found for pref_content_load_images_summary (5055874125248398584) -->
+ <skip />
+ <string name="pref_content_block_popups" msgid="7808433807197256726">"Blokker forgrunnsvinduer"</string>
<string name="pref_content_javascript" msgid="4570972030299516843">"Aktiver JavaScript"</string>
<string name="pref_content_open_in_background" msgid="824123779725118663">"Åpne i bakgrunnen"</string>
- <string name="pref_content_plugins" msgid="7231944644794301582">"Aktiver utvidelser"</string>
- <string name="pref_content_open_in_background_summary" msgid="1737664075721181678">"Nye vinduer åpnes bak det gjeldende"</string>
+ <!-- no translation found for pref_content_plugins (7231944644794301582) -->
+ <skip />
+ <!-- no translation found for pref_content_open_in_background_summary (1737664075721181678) -->
+ <skip />
<string name="pref_content_homepage" msgid="6082437160778559806">"Angi startside"</string>
<string name="pref_content_autofit" msgid="8260474534053660809">"Tilpass sider automatisk"</string>
- <string name="pref_content_autofit_summary" msgid="4587831659894879986">"Tilpass nettsteder til skjermen"</string>
- <string name="pref_content_landscape_only" msgid="2022546812766219672">"Bare liggende visning"</string>
- <string name="pref_content_landscape_only_summary" msgid="1008238895535428855">"Les alltid sider i bred, liggende skjermretning"</string>
- <string name="pref_privacy_title" msgid="1052470980370846151">"Personvernsinnstillinger"</string>
- <string name="pref_privacy_clear_cache" msgid="3380316479925886998">"Fjern hurtiglager"</string>
+ <!-- no translation found for pref_content_autofit_summary (4587831659894879986) -->
+ <skip />
+ <!-- no translation found for pref_content_landscape_only (2022546812766219672) -->
+ <skip />
+ <!-- no translation found for pref_content_landscape_only_summary (1008238895535428855) -->
+ <skip />
+ <string name="pref_privacy_title" msgid="1052470980370846151">"Personvern"</string>
+ <string name="pref_privacy_clear_cache" msgid="3380316479925886998">"Fjern buffer"</string>
<string name="pref_privacy_clear_cache_summary" msgid="2216463577207991454">"Fjern lokalt bufret innhold og databaser"</string>
- <string name="pref_privacy_clear_cache_dlg" msgid="5541011591300753881">"Lokalt bufret innhold og databaser vil bli fjernet."</string>
- <string name="pref_privacy_clear_cookies" msgid="3095583579133780331">"Fjern alle infokapsler"</string>
- <string name="pref_privacy_clear_cookies_summary" msgid="6962742063990677520">"Fjern alle informasjonskapsler"</string>
- <string name="pref_privacy_clear_cookies_dlg" msgid="552855688091432682">"Alle informasjonskapsler vil bli slettet."</string>
+ <!-- no translation found for pref_privacy_clear_cache_dlg (5541011591300753881) -->
+ <skip />
+ <string name="pref_privacy_clear_cookies" msgid="3095583579133780331">"Fjern alle info.kapsler"</string>
+ <!-- no translation found for pref_privacy_clear_cookies_summary (6962742063990677520) -->
+ <skip />
+ <!-- no translation found for pref_privacy_clear_cookies_dlg (552855688091432682) -->
+ <skip />
<string name="pref_privacy_clear_history" msgid="8723795508825198477">"Slett loggen"</string>
<string name="pref_privacy_clear_history_summary" msgid="6868501330708940734">"Slett navigeringsloggen"</string>
- <string name="pref_privacy_clear_history_dlg" msgid="544903007914753853">"Nettleserens navigeringslogg vil bli slettet."</string>
+ <!-- no translation found for pref_privacy_clear_history_dlg (544903007914753853) -->
+ <skip />
<string name="pref_privacy_clear_form_data" msgid="4232668196344383987">"Fjern skjemadata"</string>
<string name="pref_privacy_clear_form_data_summary" msgid="1790390894719517167">"Slett alle lagrede skjemadata"</string>
- <string name="pref_privacy_clear_form_data_dlg" msgid="4443621086781197928">"Alle lagrede skjemadata vil bli slettet."</string>
+ <!-- no translation found for pref_privacy_clear_form_data_dlg (4443621086781197928) -->
+ <skip />
<string name="pref_privacy_clear_passwords" msgid="4750234112289277480">"Fjern passord"</string>
- <string name="pref_privacy_clear_passwords_summary" msgid="8856782718942903335">"Fjern alle lagrede passord"</string>
- <string name="pref_privacy_clear_passwords_dlg" msgid="2083869328824248255">"Alle lagrede passord vil bli slettet."</string>
+ <!-- no translation found for pref_privacy_clear_passwords_summary (8856782718942903335) -->
+ <skip />
+ <!-- no translation found for pref_privacy_clear_passwords_dlg (2083869328824248255) -->
+ <skip />
<string name="pref_privacy_enable_geolocation" msgid="1395040170290765686">"Aktiver posisjon"</string>
<string name="pref_privacy_enable_geolocation_summary" msgid="8437020934664306205">"La nettsteder be om tilgang til posisjonen din"</string>
<string name="pref_privacy_clear_geolocation_access" msgid="6649680770030042980">"Deaktiver posisjonstilgang"</string>
@@ -163,14 +182,15 @@
<string name="pref_privacy_clear_geolocation_access_dlg" msgid="7327063124488827244">"Deaktiver posisjonstilgang for alle nettsteder"</string>
<string name="pref_security_title" msgid="5763978646932160021">"Sikkerhetsinnstillinger"</string>
<string name="pref_security_remember_passwords" msgid="6492957683454529549">"Husk passord"</string>
- <string name="pref_security_remember_passwords_summary" msgid="256388703356349137">"Lagre brukernavn og passord for nettsteder"</string>
+ <!-- no translation found for pref_security_remember_passwords_summary (256388703356349137) -->
+ <skip />
<string name="pref_security_save_form_data" msgid="1213669802810198893">"Husk skjemadata"</string>
<string name="pref_security_save_form_data_summary" msgid="4994074685153708026">"Husk data skrevet inn i skjemaer til senere"</string>
<string name="pref_security_show_security_warning" msgid="8901135676266754559">"Vis sikkerhetsadvarsler"</string>
<string name="pref_security_show_security_warning_summary" msgid="8968906112720511704">"Vis advarsel hvis det er et problem med sikkerheten på et nettsted"</string>
- <string name="pref_security_accept_cookies" msgid="3201367661925047989">"Godta informasjonskapsler"</string>
+ <string name="pref_security_accept_cookies" msgid="3201367661925047989">"Godta info.kapsler"</string>
<string name="pref_security_accept_cookies_summary" msgid="1465118934875026920">"Tillat nettsteder å lagre og lese informasjonskapsler"</string>
- <string name="pref_text_size" msgid="3827031324346612208">"Skriftstørrelse"</string>
+ <string name="pref_text_size" msgid="3827031324346612208">"Tekststørrelse"</string>
<string-array name="pref_text_size_choices">
<item msgid="4952686548944739548">"Bitteliten"</item>
<item msgid="1950030433642671460">"Liten"</item>
@@ -181,19 +201,22 @@
<string name="pref_text_size_dialogtitle" msgid="3625388833512647865">"Tekststørrelse"</string>
<string name="pref_default_zoom" msgid="8076142259097187395">"Standardzoom"</string>
<string-array name="pref_default_zoom_choices">
- <item msgid="549583171195154919">"Langt unna"</item>
+ <item msgid="549583171195154919">"Avstand"</item>
<item msgid="5619034257768161024">"Normal"</item>
- <item msgid="3840999588443167001">"Nærme"</item>
+ <item msgid="3840999588443167001">"Nær"</item>
</string-array>
<string name="pref_default_zoom_dialogtitle" msgid="6095974367125109021">"Standardzoom"</string>
- <string name="pref_content_load_page" msgid="2219810141690955452">"Når en side lastes inn:"</string>
- <string name="pref_content_load_page_summary" msgid="8792093504054149369">"Vis oversikt over siden"</string>
+ <!-- no translation found for pref_content_load_page (2219810141690955452) -->
+ <skip />
+ <!-- no translation found for pref_content_load_page_summary (8792093504054149369) -->
+ <skip />
<string name="pref_extras_title" msgid="3091250467679722382">"Avanserte innstillinger"</string>
<string name="pref_extras_website_settings" msgid="67866640052455549">"Nettstedsinnstillinger"</string>
<string name="pref_extras_website_settings_summary" msgid="3917568895776162240">"Vis avanserte innstillinger for individuelle nettsteder"</string>
<string name="pref_extras_reset_default" msgid="8904000515846202110">"Tilbakestill til standard"</string>
<string name="pref_extras_reset_default_summary" msgid="7984680562706914966">"Fjern alle data fra nettleseren og tilbakestill alle innstillinger til standard"</string>
- <string name="pref_extras_reset_default_dlg" msgid="6894807766578874830">"Alle data vil bli fjernet og innstillinger vil bli tilbakestilt til standardverdier."</string>
+ <!-- no translation found for pref_extras_reset_default_dlg (6894807766578874830) -->
+ <skip />
<string name="pref_extras_reset_default_dlg_title" msgid="2250334970728938936">"Tilbakestill til standard"</string>
<string name="pref_development_title" msgid="3263854204533056480">"Avlusing"</string>
<string name="pref_default_text_encoding" msgid="5742965543955558478">"Tekstkoding"</string>
@@ -206,16 +229,16 @@
</string-array>
<string name="pref_default_text_encoding_dialogtitle" msgid="5508255018084978547">"Tekstkoding"</string>
<string name="pref_default_text_encoding_default" msgid="5272126711231936722">"Latin-1"</string>
- <string name="browserFrameRedirect" msgid="7049675479777828343">"Videresending"</string>
- <string name="browserFrame307Post" msgid="1429094844669510768">"Dette nettstedet blir viderekoblet. Send skjemadataene på nytt til det nye nettstedet?"</string>
<string name="browserFrameNetworkErrorLabel" msgid="126892350904924893">"Datatilkoblingsproblem"</string>
<string name="browserFrameFileErrorLabel" msgid="8063691502792670367">"Problem med fil"</string>
<string name="browserFrameFormResubmitLabel" msgid="2685923472682180360">"Bekreft"</string>
<string name="browserFrameFormResubmitMessage" msgid="2752182215695632138">"Siden du prøver å se inneholder data som allerede er blitt sendt inn (\"POSTDATA\"). Hvis du sender dataene på nytt, kan handlingene som skjemaet på siden utførte bli gjentatt."</string>
<string name="loadSuspendedTitle" msgid="675991625288706944">"Ingen nettverkstilkobling"</string>
- <string name="loadSuspended" msgid="3133656588880851273">"Nettleseren kan ikke laste denne siden fordi det ikke er noen tilkobling til internett."</string>
+ <!-- no translation found for loadSuspended (3133656588880851273) -->
+ <skip />
<string name="clear_history" msgid="5998307092715979619">"Tøm logg"</string>
- <string name="browser_history" msgid="1038987118290272525">"Nylig besøkte sider"</string>
+ <!-- no translation found for browser_history (1038987118290272525) -->
+ <skip />
<string name="empty_history" msgid="8738772352308207274">"Nettleserloggen er tom."</string>
<string name="add_new_bookmark" msgid="8086367791400349049">"Legg til bokmerke"</string>
<string name="add_bookmark_short" msgid="3783984330998103735">"Legg til"</string>
@@ -258,7 +281,8 @@
<string name="download_pending_network" msgid="6548714525679461053">"Venter på datatilkobling…"</string>
<string name="download_running_paused" msgid="6418029352085656495">"Venter på datatilkobling…"</string>
<string name="download_canceled" msgid="6057083743144492515">"Nedlasting avbrutt."</string>
- <string name="download_not_acceptable" msgid="313769696131563652">"Kan ikke laste ned. Innholdet er ikke støttet av telefonen."</string>
+ <!-- no translation found for download_not_acceptable (313769696131563652) -->
+ <skip />
<string name="download_file_error" msgid="1206648050615176113">"Kan ikke fullføre nedlastingen. Det er ikke nok plass."</string>
<string name="download_length_required" msgid="9038605488460437406">"Kan ikke laste ned. Kan ikke fastsette størrelsen på filen."</string>
<string name="download_precondition_failed" msgid="8327584102874295580">"Nedlasting avbrutt. Den kan ikke gjenopptas."</string>
@@ -270,14 +294,20 @@
<string name="webstorage_clear_data_summary" msgid="3523128713743907805">"Fjern alle databaser tilknyttet dette nettstedet"</string>
<string name="webstorage_clear_data_dialog_title" msgid="345457466368974706">"Fjern lagrede data"</string>
<string name="webstorage_clear_data_dialog_message" msgid="6678281256970470125">"Alle data som er lagret av dette nettstedet, vil bli slettet"</string>
- <string name="webstorage_clear_data_dialog_ok_button" msgid="2516563534211898636">"Fjern alle"</string>
+ <!-- no translation found for webstorage_clear_data_dialog_ok_button (2516563534211898636) -->
+ <skip />
<string name="webstorage_clear_data_dialog_cancel_button" msgid="2028867751958942762">"Avbryt"</string>
<string name="webstorage_origin_summary_mb_stored" msgid="1985885826292236210">"MB lagret på telefonen"</string>
- <string name="loading_video" msgid="4887871585216091096">"Henter video"</string>
- <string name="geolocation_permissions_prompt_message" msgid="356796102004052471">"<xliff:g id="WEBSITE_ORIGIN">%s</xliff:g> vil vite posisjonen din"</string>
- <string name="geolocation_permissions_prompt_share" msgid="9084486342048347976">"Del"</string>
- <string name="geolocation_permissions_prompt_dont_share" msgid="6303025160237860300">"Ikke del"</string>
- <string name="geolocation_permissions_prompt_remember" msgid="3118526300707348308">"Husk"</string>
+ <!-- no translation found for loading_video (4887871585216091096) -->
+ <skip />
+ <!-- no translation found for geolocation_permissions_prompt_message (356796102004052471) -->
+ <skip />
+ <!-- no translation found for geolocation_permissions_prompt_share (9084486342048347976) -->
+ <skip />
+ <!-- no translation found for geolocation_permissions_prompt_dont_share (6303025160237860300) -->
+ <skip />
+ <!-- no translation found for geolocation_permissions_prompt_remember (3118526300707348308) -->
+ <skip />
<string name="geolocation_settings_page_title" msgid="1745477985097536528">"Deaktiver posisjonstilgang"</string>
<string name="geolocation_settings_page_summary_allowed" msgid="9180251524290811398">"Dette nettstedet har for tiden tilgang til posisjonen din"</string>
<string name="geolocation_settings_page_summary_not_allowed" msgid="4589649082203102544">"Dette nettstedet har for tiden ikke tilgang til posisjonen din"</string>
@@ -285,10 +315,15 @@
<string name="geolocation_settings_page_dialog_message" msgid="7586671987576403993">"Posisjonstilgang for dette nettstedet vil bli deaktivert"</string>
<string name="geolocation_settings_page_dialog_ok_button" msgid="4789434178048077287">"Deaktiver tilgang"</string>
<string name="geolocation_settings_page_dialog_cancel_button" msgid="7941036504673409747">"Avbryt"</string>
- <string name="website_settings_clear_all" msgid="8739804325997655980">"Tøm alle"</string>
- <string name="website_settings_clear_all_dialog_title" msgid="7791826325122461718">"Tøm alle nettstedsinnstillinger?"</string>
- <string name="website_settings_clear_all_dialog_message" msgid="6150502090601476333">"Alle data fra nettsteder og plasseringstillatelser vil bli slettet."</string>
- <string name="website_settings_clear_all_dialog_ok_button" msgid="6401582240627669431">"Slett alle data"</string>
- <string name="website_settings_clear_all_dialog_cancel_button" msgid="1896757051856611674">"Avbryt"</string>
+ <!-- no translation found for website_settings_clear_all (8739804325997655980) -->
+ <skip />
+ <!-- no translation found for website_settings_clear_all_dialog_title (7791826325122461718) -->
+ <skip />
+ <!-- no translation found for website_settings_clear_all_dialog_message (6150502090601476333) -->
+ <skip />
+ <!-- no translation found for website_settings_clear_all_dialog_ok_button (6401582240627669431) -->
+ <skip />
+ <!-- no translation found for website_settings_clear_all_dialog_cancel_button (1896757051856611674) -->
+ <skip />
<string name="zoom_overview_button_text" msgid="4146579940085488881">"Oversikt"</string>
</resources>
diff --git a/res/values-nl/arrays.xml b/res/values-nl/arrays.xml
deleted file mode 100644
index 5872a9a..0000000
--- a/res/values-nl/arrays.xml
+++ /dev/null
@@ -1,32 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2009 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.
--->
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string-array name="webstorage_quota_entries">
- <item msgid="5433313236875537673">"Geen maximum toegestaan"</item>
- <item msgid="7374272188672967690">"5 MB"</item>
- <item msgid="8699352701856136738">"10 MB"</item>
- <item msgid="2018822431469084862">"30 MB"</item>
- <item msgid="5383642976774534074">"100 MB"</item>
- </string-array>
- <string-array name="webstorage_quota_entries_values">
- <item msgid="7620410313725236055">"0"</item>
- <item msgid="4302688814760304206">"5"</item>
- <item msgid="7291990205847586165">"10"</item>
- <item msgid="916913372287112423">"30"</item>
- <item msgid="3437188301324229987">"100"</item>
- </string-array>
-</resources>
diff --git a/res/values-nl/strings.xml b/res/values-nl/strings.xml
index 341ebbd..fc2d394 100644
--- a/res/values-nl/strings.xml
+++ b/res/values-nl/strings.xml
@@ -16,8 +16,10 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="application_name" msgid="1935869255545976415">"Browser"</string>
- <string name="new_tab" msgid="4505722538297295141">"Nieuw venster"</string>
- <string name="active_tabs" msgid="3050623868203544623">"Vensters"</string>
+ <!-- no translation found for new_tab (4505722538297295141) -->
+ <skip />
+ <!-- no translation found for active_tabs (3050623868203544623) -->
+ <skip />
<string name="tab_bookmarks" msgid="2305793036003473653">"Bladwijzers"</string>
<string name="tab_most_visited" msgid="1077402532455000703">"Meest bezocht"</string>
<string name="tab_history" msgid="1979267558744613746">"Geschiedenis"</string>
@@ -78,8 +80,10 @@
<string name="remove_history_item" msgid="5021424935726728618">"Uit geschiedenis verwijderen"</string>
<string name="set_as_homepage" msgid="4752937379414905560">"Instellen als startpagina"</string>
<string name="bookmark_saved" msgid="2766434679871317557">"Opgeslagen in bladwijzers."</string>
- <string name="bookmark_not_saved" msgid="700600955089376724">"Kan bladwijzer niet opslaan."</string>
- <string name="homepage_set" msgid="8768087280310966395">"De startpagina is ingesteld."</string>
+ <!-- no translation found for bookmark_not_saved (700600955089376724) -->
+ <skip />
+ <!-- no translation found for homepage_set (8768087280310966395) -->
+ <skip />
<string name="bookmark_needs_title" msgid="6245900436119218187">"Bladwijzer moet een naam hebben."</string>
<string name="bookmark_needs_url" msgid="7809876865972755158">"Bladwijzers moeten een locatie hebben."</string>
<string name="empty_bookmark" msgid="7008697085928540511">"Kan geen lege bladwijzer maken."</string>
@@ -107,7 +111,8 @@
<string name="shortcut_bookmark" msgid="3974876480401135895">"Bladwijzer"</string>
<string name="history" msgid="2451240511251410032">"Geschiedenis"</string>
<string name="menu_view_download" msgid="2124570321712995120">"Downloads"</string>
- <string name="copy_page_url" msgid="7635062169011319208">"Pagina-URL kopiëren"</string>
+ <!-- no translation found for copy_page_url (7635062169011319208) -->
+ <skip />
<string name="share_page" msgid="593756995297268343">"Pagina delen"</string>
<string name="contextmenu_openlink" msgid="7237961252214188935">"Openen"</string>
<string name="contextmenu_openlink_newwindow" msgid="992765050093960353">"Openen in een nieuw venster"</string>
@@ -115,47 +120,61 @@
<string name="contextmenu_savelink" msgid="5508554930832538184">"Link opslaan"</string>
<string name="contextmenu_sharelink" msgid="5392275392280130331">"Link delen"</string>
<string name="contextmenu_copy" msgid="398860586635404030">"Kopiëren"</string>
- <string name="contextmenu_copylink" msgid="5153657160294534270">"Link-URL kopiëren"</string>
+ <string name="contextmenu_copylink" msgid="5153657160294534270">"URL van koppeling kopiëren"</string>
<string name="contextmenu_download_image" msgid="4243829645180686912">"Afbeelding opslaan"</string>
<string name="contextmenu_view_image" msgid="3870625602053600905">"Afbeelding weergeven"</string>
<string name="contextmenu_dial_dot" msgid="5856550683415933806">"Bellen..."</string>
<string name="contextmenu_add_contact" msgid="3183511922223645716">"Contact toevoegen"</string>
<string name="contextmenu_send_mail" msgid="1014513374828775660">"E-mail verzenden"</string>
<string name="contextmenu_map" msgid="7471390435434034912">"Kaart"</string>
- <string name="choosertitle_sharevia" msgid="4600490613341909086">"Delen via"</string>
+ <!-- no translation found for choosertitle_sharevia (4600490613341909086) -->
+ <skip />
<string name="clear" msgid="7070043081700011461">"Wissen"</string>
<string name="replace" msgid="4843033491070384047">"Vervangen"</string>
<string name="browser_bookmarks_page_bookmarks_text" msgid="6787605028726162673">"Bladwijzers"</string>
<string name="menu_preferences" msgid="6709237687234102240">"Instellingen"</string>
<string name="pref_content_title" msgid="722227111894838633">"Instellingen voor pagina-inhoud"</string>
<string name="pref_content_load_images" msgid="2125616852957377561">"Afbeeldingen laden"</string>
- <string name="pref_content_load_images_summary" msgid="5055874125248398584">"Afbeeldingen op webpagina\'s weergeven"</string>
+ <!-- no translation found for pref_content_load_images_summary (5055874125248398584) -->
+ <skip />
<string name="pref_content_block_popups" msgid="7808433807197256726">"Pop-upvensters blokkeren"</string>
<string name="pref_content_javascript" msgid="4570972030299516843">"JavaScript inschakelen"</string>
<string name="pref_content_open_in_background" msgid="824123779725118663">"Openen op de achtergrond"</string>
- <string name="pref_content_plugins" msgid="7231944644794301582">"Invoegtoepassingen inschakelen"</string>
- <string name="pref_content_open_in_background_summary" msgid="1737664075721181678">"Nieuwe vensters openen achter het huidige venster"</string>
+ <!-- no translation found for pref_content_plugins (7231944644794301582) -->
+ <skip />
+ <!-- no translation found for pref_content_open_in_background_summary (1737664075721181678) -->
+ <skip />
<string name="pref_content_homepage" msgid="6082437160778559806">"Startpagina instellen"</string>
<string name="pref_content_autofit" msgid="8260474534053660809">"Pagina\'s automatisch laten passen"</string>
- <string name="pref_content_autofit_summary" msgid="4587831659894879986">"Webpagina\'s zo indelen dat deze op het scherm passen"</string>
- <string name="pref_content_landscape_only" msgid="2022546812766219672">"Alleen liggende weergave"</string>
- <string name="pref_content_landscape_only_summary" msgid="1008238895535428855">"Pagina\'s alleen liggend weergeven"</string>
+ <!-- no translation found for pref_content_autofit_summary (4587831659894879986) -->
+ <skip />
+ <!-- no translation found for pref_content_landscape_only (2022546812766219672) -->
+ <skip />
+ <!-- no translation found for pref_content_landscape_only_summary (1008238895535428855) -->
+ <skip />
<string name="pref_privacy_title" msgid="1052470980370846151">"Privacyinstellingen"</string>
<string name="pref_privacy_clear_cache" msgid="3380316479925886998">"Cache wissen"</string>
<string name="pref_privacy_clear_cache_summary" msgid="2216463577207991454">"Lokaal opgeslagen inhoud en databases wissen"</string>
- <string name="pref_privacy_clear_cache_dlg" msgid="5541011591300753881">"Lokaal opgeslagen inhoud en databases worden gewist."</string>
+ <!-- no translation found for pref_privacy_clear_cache_dlg (5541011591300753881) -->
+ <skip />
<string name="pref_privacy_clear_cookies" msgid="3095583579133780331">"Alle cookiegegevens wissen"</string>
- <string name="pref_privacy_clear_cookies_summary" msgid="6962742063990677520">"Alle browsercookies wissen"</string>
- <string name="pref_privacy_clear_cookies_dlg" msgid="552855688091432682">"Alle cookies worden gewist."</string>
+ <!-- no translation found for pref_privacy_clear_cookies_summary (6962742063990677520) -->
+ <skip />
+ <!-- no translation found for pref_privacy_clear_cookies_dlg (552855688091432682) -->
+ <skip />
<string name="pref_privacy_clear_history" msgid="8723795508825198477">"Geschiedenis wissen"</string>
<string name="pref_privacy_clear_history_summary" msgid="6868501330708940734">"Navigatiegeschiedenis van de browser wissen"</string>
- <string name="pref_privacy_clear_history_dlg" msgid="544903007914753853">"De navigatiegeschiedenis van de browser wordt gewist."</string>
+ <!-- no translation found for pref_privacy_clear_history_dlg (544903007914753853) -->
+ <skip />
<string name="pref_privacy_clear_form_data" msgid="4232668196344383987">"Formuliergegevens wissen"</string>
<string name="pref_privacy_clear_form_data_summary" msgid="1790390894719517167">"Alle opgeslagen formuliergegevens wissen"</string>
- <string name="pref_privacy_clear_form_data_dlg" msgid="4443621086781197928">"Alle opgeslagen formuliergegevens worden gewist."</string>
+ <!-- no translation found for pref_privacy_clear_form_data_dlg (4443621086781197928) -->
+ <skip />
<string name="pref_privacy_clear_passwords" msgid="4750234112289277480">"Wachtwoorden wissen"</string>
- <string name="pref_privacy_clear_passwords_summary" msgid="8856782718942903335">"Alle opgeslagen wachtwoorden wissen"</string>
- <string name="pref_privacy_clear_passwords_dlg" msgid="2083869328824248255">"Alle opgeslagen wachtwoorden worden gewist."</string>
+ <!-- no translation found for pref_privacy_clear_passwords_summary (8856782718942903335) -->
+ <skip />
+ <!-- no translation found for pref_privacy_clear_passwords_dlg (2083869328824248255) -->
+ <skip />
<string name="pref_privacy_enable_geolocation" msgid="1395040170290765686">"Locatie inschakelen"</string>
<string name="pref_privacy_enable_geolocation_summary" msgid="8437020934664306205">"Sites toestaan om toegang te vragen tot uw locatie"</string>
<string name="pref_privacy_clear_geolocation_access" msgid="6649680770030042980">"Locatietoegang ongedaan maken"</string>
@@ -163,7 +182,8 @@
<string name="pref_privacy_clear_geolocation_access_dlg" msgid="7327063124488827244">"Locatietoegang voor alle websites ongedaan maken"</string>
<string name="pref_security_title" msgid="5763978646932160021">"Beveiligingsinstellingen"</string>
<string name="pref_security_remember_passwords" msgid="6492957683454529549">"Wachtwoorden onthouden"</string>
- <string name="pref_security_remember_passwords_summary" msgid="256388703356349137">"Gebruikersnamen en wachtwoorden voor websites opslaan"</string>
+ <!-- no translation found for pref_security_remember_passwords_summary (256388703356349137) -->
+ <skip />
<string name="pref_security_save_form_data" msgid="1213669802810198893">"Gegevens op formulier onthouden"</string>
<string name="pref_security_save_form_data_summary" msgid="4994074685153708026">"Gegevens die ik typ in formulieren, onthouden voor later gebruik"</string>
<string name="pref_security_show_security_warning" msgid="8901135676266754559">"Beveiligingswaarschuwingen weergeven"</string>
@@ -186,14 +206,17 @@
<item msgid="3840999588443167001">"Dichtbij"</item>
</string-array>
<string name="pref_default_zoom_dialogtitle" msgid="6095974367125109021">"Standaardzoom"</string>
- <string name="pref_content_load_page" msgid="2219810141690955452">"Pagina\'s openen in overzicht"</string>
- <string name="pref_content_load_page_summary" msgid="8792093504054149369">"Overzicht weergeven van pas geopende pagina\'s"</string>
+ <!-- no translation found for pref_content_load_page (2219810141690955452) -->
+ <skip />
+ <!-- no translation found for pref_content_load_page_summary (8792093504054149369) -->
+ <skip />
<string name="pref_extras_title" msgid="3091250467679722382">"Geavanceerde instellingen"</string>
<string name="pref_extras_website_settings" msgid="67866640052455549">"Website-instellingen"</string>
<string name="pref_extras_website_settings_summary" msgid="3917568895776162240">"Geavanceerde instellingen weergeven voor afzonderlijke websites"</string>
<string name="pref_extras_reset_default" msgid="8904000515846202110">"Standaardinstellingen herstellen"</string>
<string name="pref_extras_reset_default_summary" msgid="7984680562706914966">"Alle browsergegevens wissen en alle standaardinstellingen herstellen"</string>
- <string name="pref_extras_reset_default_dlg" msgid="6894807766578874830">"Alle browsergegevens worden gewist en de standaardinstellingen worden hersteld."</string>
+ <!-- no translation found for pref_extras_reset_default_dlg (6894807766578874830) -->
+ <skip />
<string name="pref_extras_reset_default_dlg_title" msgid="2250334970728938936">"Standaardinstellingen herstellen"</string>
<string name="pref_development_title" msgid="3263854204533056480">"Foutopsporing"</string>
<string name="pref_default_text_encoding" msgid="5742965543955558478">"Tekstcodering"</string>
@@ -206,16 +229,16 @@
</string-array>
<string name="pref_default_text_encoding_dialogtitle" msgid="5508255018084978547">"Tekstcodering"</string>
<string name="pref_default_text_encoding_default" msgid="5272126711231936722">"Latijns-1"</string>
- <string name="browserFrameRedirect" msgid="7049675479777828343">"Omleiden"</string>
- <string name="browserFrame307Post" msgid="1429094844669510768">"Deze webpagina wordt omgeleid. Wilt u de ingevulde formuliergegevens doorsturen naar de nieuwe locatie?"</string>
<string name="browserFrameNetworkErrorLabel" msgid="126892350904924893">"Probleem met gegevensverbinding"</string>
<string name="browserFrameFileErrorLabel" msgid="8063691502792670367">"Probleem met bestand"</string>
<string name="browserFrameFormResubmitLabel" msgid="2685923472682180360">"Bevestigen"</string>
<string name="browserFrameFormResubmitMessage" msgid="2752182215695632138">"De pagina die u probeert te openen, bevat gegevens die al verzonden zijn (\'POSTDATA\'). Als u de gegevens opnieuw verzendt, wordt elke actie herhaald die het formulier op de pagina heeft uitgevoerd (zoals een zoekopdracht of online aanschaf)."</string>
<string name="loadSuspendedTitle" msgid="675991625288706944">"Geen netwerkverbinding"</string>
- <string name="loadSuspended" msgid="3133656588880851273">"Browser kan pagina niet laden omdat er geen verbinding met internet is."</string>
+ <!-- no translation found for loadSuspended (3133656588880851273) -->
+ <skip />
<string name="clear_history" msgid="5998307092715979619">"Geschiedenis wissen"</string>
- <string name="browser_history" msgid="1038987118290272525">"Onlangs bezochte pagina\'s"</string>
+ <!-- no translation found for browser_history (1038987118290272525) -->
+ <skip />
<string name="empty_history" msgid="8738772352308207274">"Browsergeschiedenis is leeg."</string>
<string name="add_new_bookmark" msgid="8086367791400349049">"Bladwijzer toevoegen…"</string>
<string name="add_bookmark_short" msgid="3783984330998103735">"Toevoegen"</string>
@@ -258,7 +281,8 @@
<string name="download_pending_network" msgid="6548714525679461053">"Wachten op gegevensverbinding..."</string>
<string name="download_running_paused" msgid="6418029352085656495">"Wachten op dataverbinding"</string>
<string name="download_canceled" msgid="6057083743144492515">"Download is geannuleerd."</string>
- <string name="download_not_acceptable" msgid="313769696131563652">"Kan niet downloaden. De telefoon ondersteunt deze inhoud niet."</string>
+ <!-- no translation found for download_not_acceptable (313769696131563652) -->
+ <skip />
<string name="download_file_error" msgid="1206648050615176113">"Kan download niet voltooien. Er is niet genoeg ruimte."</string>
<string name="download_length_required" msgid="9038605488460437406">"Kan niet downloaden. De grootte van het item kan niet worden vastgesteld."</string>
<string name="download_precondition_failed" msgid="8327584102874295580">"Download is onderbroken. Deze kan niet worden voortgezet."</string>
@@ -270,14 +294,20 @@
<string name="webstorage_clear_data_summary" msgid="3523128713743907805">"Alle databases verwijderen die aan deze website zijn gekoppeld"</string>
<string name="webstorage_clear_data_dialog_title" msgid="345457466368974706">"Opgeslagen gegevens wissen"</string>
<string name="webstorage_clear_data_dialog_message" msgid="6678281256970470125">"Alle gegevens die door deze website worden opgeslagen, worden verwijderd"</string>
- <string name="webstorage_clear_data_dialog_ok_button" msgid="2516563534211898636">"Alles wissen"</string>
+ <!-- no translation found for webstorage_clear_data_dialog_ok_button (2516563534211898636) -->
+ <skip />
<string name="webstorage_clear_data_dialog_cancel_button" msgid="2028867751958942762">"Annuleren"</string>
<string name="webstorage_origin_summary_mb_stored" msgid="1985885826292236210">"MB opgeslagen op uw telefoon"</string>
- <string name="loading_video" msgid="4887871585216091096">"Video laden"</string>
- <string name="geolocation_permissions_prompt_message" msgid="356796102004052471">"<xliff:g id="WEBSITE_ORIGIN">%s</xliff:g> wil weten wat uw locatie is"</string>
- <string name="geolocation_permissions_prompt_share" msgid="9084486342048347976">"Locatie delen"</string>
- <string name="geolocation_permissions_prompt_dont_share" msgid="6303025160237860300">"Weigeren"</string>
- <string name="geolocation_permissions_prompt_remember" msgid="3118526300707348308">"Voorkeur onthouden"</string>
+ <!-- no translation found for loading_video (4887871585216091096) -->
+ <skip />
+ <!-- no translation found for geolocation_permissions_prompt_message (356796102004052471) -->
+ <skip />
+ <!-- no translation found for geolocation_permissions_prompt_share (9084486342048347976) -->
+ <skip />
+ <!-- no translation found for geolocation_permissions_prompt_dont_share (6303025160237860300) -->
+ <skip />
+ <!-- no translation found for geolocation_permissions_prompt_remember (3118526300707348308) -->
+ <skip />
<string name="geolocation_settings_page_title" msgid="1745477985097536528">"Locatietoegang ongedaan maken"</string>
<string name="geolocation_settings_page_summary_allowed" msgid="9180251524290811398">"Deze site heeft momenteel toegang tot uw locatie"</string>
<string name="geolocation_settings_page_summary_not_allowed" msgid="4589649082203102544">"Deze site heeft momenteel geen toegang tot uw locatie"</string>
@@ -285,10 +315,15 @@
<string name="geolocation_settings_page_dialog_message" msgid="7586671987576403993">"De locatietoegang voor deze website wordt ongedaan gemaakt"</string>
<string name="geolocation_settings_page_dialog_ok_button" msgid="4789434178048077287">"Toegang ongedaan maken"</string>
<string name="geolocation_settings_page_dialog_cancel_button" msgid="7941036504673409747">"Annuleren"</string>
- <string name="website_settings_clear_all" msgid="8739804325997655980">"Alles wissen"</string>
- <string name="website_settings_clear_all_dialog_title" msgid="7791826325122461718">"Alle instellingen voor de website wissen?"</string>
- <string name="website_settings_clear_all_dialog_message" msgid="6150502090601476333">"Alle websitegegevens en locatiemachtigingen worden gewist."</string>
- <string name="website_settings_clear_all_dialog_ok_button" msgid="6401582240627669431">"Alle gegevens wissen"</string>
- <string name="website_settings_clear_all_dialog_cancel_button" msgid="1896757051856611674">"Annuleren"</string>
+ <!-- no translation found for website_settings_clear_all (8739804325997655980) -->
+ <skip />
+ <!-- no translation found for website_settings_clear_all_dialog_title (7791826325122461718) -->
+ <skip />
+ <!-- no translation found for website_settings_clear_all_dialog_message (6150502090601476333) -->
+ <skip />
+ <!-- no translation found for website_settings_clear_all_dialog_ok_button (6401582240627669431) -->
+ <skip />
+ <!-- no translation found for website_settings_clear_all_dialog_cancel_button (1896757051856611674) -->
+ <skip />
<string name="zoom_overview_button_text" msgid="4146579940085488881">"Overzicht"</string>
</resources>
diff --git a/res/values-pl/arrays.xml b/res/values-pl/arrays.xml
deleted file mode 100644
index 2bf9627..0000000
--- a/res/values-pl/arrays.xml
+++ /dev/null
@@ -1,32 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2009 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.
--->
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string-array name="webstorage_quota_entries">
- <item msgid="5433313236875537673">"Brak dozwolonego przydziału"</item>
- <item msgid="7374272188672967690">"5 MB"</item>
- <item msgid="8699352701856136738">"10 MB"</item>
- <item msgid="2018822431469084862">"30 MB"</item>
- <item msgid="5383642976774534074">"100 MB"</item>
- </string-array>
- <string-array name="webstorage_quota_entries_values">
- <item msgid="7620410313725236055">"0"</item>
- <item msgid="4302688814760304206">"5"</item>
- <item msgid="7291990205847586165">"10"</item>
- <item msgid="916913372287112423">"30"</item>
- <item msgid="3437188301324229987">"100"</item>
- </string-array>
-</resources>
diff --git a/res/values-pl/strings.xml b/res/values-pl/strings.xml
index 8af5b8c..d285446 100644
--- a/res/values-pl/strings.xml
+++ b/res/values-pl/strings.xml
@@ -16,8 +16,10 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="application_name" msgid="1935869255545976415">"Internet"</string>
- <string name="new_tab" msgid="4505722538297295141">"Nowe okno"</string>
- <string name="active_tabs" msgid="3050623868203544623">"Okna"</string>
+ <!-- no translation found for new_tab (4505722538297295141) -->
+ <skip />
+ <!-- no translation found for active_tabs (3050623868203544623) -->
+ <skip />
<string name="tab_bookmarks" msgid="2305793036003473653">"Zakładki"</string>
<string name="tab_most_visited" msgid="1077402532455000703">"Popularne"</string>
<string name="tab_history" msgid="1979267558744613746">"Historia"</string>
@@ -78,8 +80,10 @@
<string name="remove_history_item" msgid="5021424935726728618">"Usuń z historii"</string>
<string name="set_as_homepage" msgid="4752937379414905560">"Ustaw jako stronę główną"</string>
<string name="bookmark_saved" msgid="2766434679871317557">"Zapisano na liście zakładek."</string>
- <string name="bookmark_not_saved" msgid="700600955089376724">"Nie można zapisać zakładki."</string>
- <string name="homepage_set" msgid="8768087280310966395">"Strona główna została ustawiona."</string>
+ <!-- no translation found for bookmark_not_saved (700600955089376724) -->
+ <skip />
+ <!-- no translation found for homepage_set (8768087280310966395) -->
+ <skip />
<string name="bookmark_needs_title" msgid="6245900436119218187">"Zakładka musi mieć nazwę."</string>
<string name="bookmark_needs_url" msgid="7809876865972755158">"Zakładka musi zawierać adres."</string>
<string name="empty_bookmark" msgid="7008697085928540511">"Nie można utworzyć pustej zakładki."</string>
@@ -107,7 +111,8 @@
<string name="shortcut_bookmark" msgid="3974876480401135895">"Utwórz zakładkę"</string>
<string name="history" msgid="2451240511251410032">"Historia"</string>
<string name="menu_view_download" msgid="2124570321712995120">"Pobrane pliki"</string>
- <string name="copy_page_url" msgid="7635062169011319208">"Kopiuj adres URL strony"</string>
+ <!-- no translation found for copy_page_url (7635062169011319208) -->
+ <skip />
<string name="share_page" msgid="593756995297268343">"Udostępnij stronę"</string>
<string name="contextmenu_openlink" msgid="7237961252214188935">"Otwórz"</string>
<string name="contextmenu_openlink_newwindow" msgid="992765050093960353">"Otwórz w nowym oknie"</string>
@@ -122,48 +127,63 @@
<string name="contextmenu_add_contact" msgid="3183511922223645716">"Dodaj kontakt"</string>
<string name="contextmenu_send_mail" msgid="1014513374828775660">"Wyślij e-mail"</string>
<string name="contextmenu_map" msgid="7471390435434034912">"Mapa"</string>
- <string name="choosertitle_sharevia" msgid="4600490613341909086">"Udostępnij za pośrednictwem"</string>
+ <!-- no translation found for choosertitle_sharevia (4600490613341909086) -->
+ <skip />
<string name="clear" msgid="7070043081700011461">"Wyczyść"</string>
<string name="replace" msgid="4843033491070384047">"Zastąp adres"</string>
<string name="browser_bookmarks_page_bookmarks_text" msgid="6787605028726162673">"Zakładki"</string>
<string name="menu_preferences" msgid="6709237687234102240">"Ustawienia"</string>
<string name="pref_content_title" msgid="722227111894838633">"Ustawienia zawartości stron"</string>
<string name="pref_content_load_images" msgid="2125616852957377561">"Wczytuj obrazy"</string>
- <string name="pref_content_load_images_summary" msgid="5055874125248398584">"Wyświetlaj grafiki na stronach internetowych"</string>
+ <!-- no translation found for pref_content_load_images_summary (5055874125248398584) -->
+ <skip />
<string name="pref_content_block_popups" msgid="7808433807197256726">"Blokuj wyskakujące okna"</string>
<string name="pref_content_javascript" msgid="4570972030299516843">"Włącz skrypty JavaScript"</string>
<string name="pref_content_open_in_background" msgid="824123779725118663">"Otwórz w tle"</string>
- <string name="pref_content_plugins" msgid="7231944644794301582">"Włącz wtyczki"</string>
- <string name="pref_content_open_in_background_summary" msgid="1737664075721181678">"Otwieraj nowe okna za bieżącym"</string>
+ <!-- no translation found for pref_content_plugins (7231944644794301582) -->
+ <skip />
+ <!-- no translation found for pref_content_open_in_background_summary (1737664075721181678) -->
+ <skip />
<string name="pref_content_homepage" msgid="6082437160778559806">"Ustaw stronę główną"</string>
<string name="pref_content_autofit" msgid="8260474534053660809">"Autodopasowanie stron"</string>
- <string name="pref_content_autofit_summary" msgid="4587831659894879986">"Formatuj strony internetowe w celu dopasowania do ekranu"</string>
- <string name="pref_content_landscape_only" msgid="2022546812766219672">"Zawsze w orientacji poziomej"</string>
- <string name="pref_content_landscape_only_summary" msgid="1008238895535428855">"Wyświetlaj strony tylko w szerszej, poziomej orientacji ekranu"</string>
+ <!-- no translation found for pref_content_autofit_summary (4587831659894879986) -->
+ <skip />
+ <!-- no translation found for pref_content_landscape_only (2022546812766219672) -->
+ <skip />
+ <!-- no translation found for pref_content_landscape_only_summary (1008238895535428855) -->
+ <skip />
<string name="pref_privacy_title" msgid="1052470980370846151">"Ustawienia prywatności"</string>
<string name="pref_privacy_clear_cache" msgid="3380316479925886998">"Wyczyść pamięć podręczną"</string>
<string name="pref_privacy_clear_cache_summary" msgid="2216463577207991454">"Wyczyść zawartość lokalnej pamięci podręcznej i baz danych"</string>
- <string name="pref_privacy_clear_cache_dlg" msgid="5541011591300753881">"Zawartość lokalnej pamięci podręcznej i baz danych zostanie usunięta."</string>
+ <!-- no translation found for pref_privacy_clear_cache_dlg (5541011591300753881) -->
+ <skip />
<string name="pref_privacy_clear_cookies" msgid="3095583579133780331">"Wyczyść wszystkie pliki cookie"</string>
- <string name="pref_privacy_clear_cookies_summary" msgid="6962742063990677520">"Wyczyść wszystkie pliki cookie przeglądarki"</string>
- <string name="pref_privacy_clear_cookies_dlg" msgid="552855688091432682">"Wszystkie pliki cookie zostaną usunięte."</string>
+ <!-- no translation found for pref_privacy_clear_cookies_summary (6962742063990677520) -->
+ <skip />
+ <!-- no translation found for pref_privacy_clear_cookies_dlg (552855688091432682) -->
+ <skip />
<string name="pref_privacy_clear_history" msgid="8723795508825198477">"Wyczyść historię"</string>
<string name="pref_privacy_clear_history_summary" msgid="6868501330708940734">"Wyczyść historię przeglądania"</string>
- <string name="pref_privacy_clear_history_dlg" msgid="544903007914753853">"Historia nawigacji w przeglądarce zostanie usunięta."</string>
+ <!-- no translation found for pref_privacy_clear_history_dlg (544903007914753853) -->
+ <skip />
<string name="pref_privacy_clear_form_data" msgid="4232668196344383987">"Wyczyść dane formularzy"</string>
<string name="pref_privacy_clear_form_data_summary" msgid="1790390894719517167">"Usuń wszystkie zapisane dane formularzy"</string>
- <string name="pref_privacy_clear_form_data_dlg" msgid="4443621086781197928">"Wszystkie zapisane dane formularzy zostaną usunięte."</string>
+ <!-- no translation found for pref_privacy_clear_form_data_dlg (4443621086781197928) -->
+ <skip />
<string name="pref_privacy_clear_passwords" msgid="4750234112289277480">"Wyczyść hasła"</string>
- <string name="pref_privacy_clear_passwords_summary" msgid="8856782718942903335">"Wyczyść wszystkie zapisane hasła"</string>
- <string name="pref_privacy_clear_passwords_dlg" msgid="2083869328824248255">"Wszystkie zapisane hasła zostaną usunięte."</string>
+ <!-- no translation found for pref_privacy_clear_passwords_summary (8856782718942903335) -->
+ <skip />
+ <!-- no translation found for pref_privacy_clear_passwords_dlg (2083869328824248255) -->
+ <skip />
<string name="pref_privacy_enable_geolocation" msgid="1395040170290765686">"Włącz obsługę lokalizacji"</string>
<string name="pref_privacy_enable_geolocation_summary" msgid="8437020934664306205">"Zezwalaj witrynom na żądanie dostępu do informacji o lokalizacji"</string>
- <string name="pref_privacy_clear_geolocation_access" msgid="6649680770030042980">"Wyczyść dostęp do informacji o lokalizacji"</string>
+ <string name="pref_privacy_clear_geolocation_access" msgid="6649680770030042980">"Udziel dostępu do informacji o lokalizacji"</string>
<string name="pref_privacy_clear_geolocation_access_summary" msgid="7750143359497314679">"Usuń dostęp wszystkich witryn do informacji o lokalizacji"</string>
- <string name="pref_privacy_clear_geolocation_access_dlg" msgid="7327063124488827244">"Wyczyść ustawienia dostępu witryn do informacji o lokalizacji"</string>
+ <string name="pref_privacy_clear_geolocation_access_dlg" msgid="7327063124488827244">"Usuń dostęp wszystkich witryn do informacji o lokalizacji"</string>
<string name="pref_security_title" msgid="5763978646932160021">"Ustawienia zabezpieczeń"</string>
<string name="pref_security_remember_passwords" msgid="6492957683454529549">"Pamiętaj hasła"</string>
- <string name="pref_security_remember_passwords_summary" msgid="256388703356349137">"Zapisz nazwy użytkowników i hasła używane w witrynach"</string>
+ <!-- no translation found for pref_security_remember_passwords_summary (256388703356349137) -->
+ <skip />
<string name="pref_security_save_form_data" msgid="1213669802810198893">"Pamiętaj wpisane dane"</string>
<string name="pref_security_save_form_data_summary" msgid="4994074685153708026">"Zapamiętuj do późniejszego użycia dane, które wpisuję w formularzach"</string>
<string name="pref_security_show_security_warning" msgid="8901135676266754559">"Wyświetlaj ostrzeżenia"</string>
@@ -186,14 +206,17 @@
<item msgid="3840999588443167001">"Duże"</item>
</string-array>
<string name="pref_default_zoom_dialogtitle" msgid="6095974367125109021">"Powiększenie domyślne"</string>
- <string name="pref_content_load_page" msgid="2219810141690955452">"Otwieraj strony w widoku ogólnym"</string>
- <string name="pref_content_load_page_summary" msgid="8792093504054149369">"Pokaż przegląd nowo otwartych stron"</string>
+ <!-- no translation found for pref_content_load_page (2219810141690955452) -->
+ <skip />
+ <!-- no translation found for pref_content_load_page_summary (8792093504054149369) -->
+ <skip />
<string name="pref_extras_title" msgid="3091250467679722382">"Ustawienia zaawansowane"</string>
<string name="pref_extras_website_settings" msgid="67866640052455549">"Ustawienia witryny"</string>
<string name="pref_extras_website_settings_summary" msgid="3917568895776162240">"Wyświetl ustawienia zaawansowane dla poszczególnych witryn"</string>
<string name="pref_extras_reset_default" msgid="8904000515846202110">"Przywróć wartości domyślne"</string>
<string name="pref_extras_reset_default_summary" msgid="7984680562706914966">"Wyczyść wszystkie dane przeglądarki i przywróć wszystkie ustawienia domyślne"</string>
- <string name="pref_extras_reset_default_dlg" msgid="6894807766578874830">"Wszystkie dane przeglądarki zostaną usunięte i zostaną przywrócone wartości domyślne ustawień."</string>
+ <!-- no translation found for pref_extras_reset_default_dlg (6894807766578874830) -->
+ <skip />
<string name="pref_extras_reset_default_dlg_title" msgid="2250334970728938936">"Przywróć wartości domyślne"</string>
<string name="pref_development_title" msgid="3263854204533056480">"Debugowanie"</string>
<string name="pref_default_text_encoding" msgid="5742965543955558478">"Kodowanie tekstu"</string>
@@ -206,16 +229,16 @@
</string-array>
<string name="pref_default_text_encoding_dialogtitle" msgid="5508255018084978547">"Kodowanie tekstu"</string>
<string name="pref_default_text_encoding_default" msgid="5272126711231936722">"Latin-1"</string>
- <string name="browserFrameRedirect" msgid="7049675479777828343">"Przekieruj"</string>
- <string name="browserFrame307Post" msgid="1429094844669510768">"Trwa przekierowywanie tej strony internetowej. Czy ponownie wysłać wpisane dane formularza do nowej lokalizacji?"</string>
<string name="browserFrameNetworkErrorLabel" msgid="126892350904924893">"Problem z łącznością danych"</string>
<string name="browserFrameFileErrorLabel" msgid="8063691502792670367">"Problem z plikiem"</string>
<string name="browserFrameFormResubmitLabel" msgid="2685923472682180360">"Potwierdzenie"</string>
<string name="browserFrameFormResubmitMessage" msgid="2752182215695632138">"Strona, którą próbujesz wyświetlić, zawiera dane, które już przesłano („POSTDATA”). Jeśli wyślesz te dane ponownie, wszelkie operacje wykonane przez formularz na tej stronie (np. wyszukiwanie lub zakup online) zostaną powtórzone."</string>
<string name="loadSuspendedTitle" msgid="675991625288706944">"Brak połączenia z siecią"</string>
- <string name="loadSuspended" msgid="3133656588880851273">"Przeglądarka nie może wczytać tej strony, ponieważ brak połączenia internetowego."</string>
+ <!-- no translation found for loadSuspended (3133656588880851273) -->
+ <skip />
<string name="clear_history" msgid="5998307092715979619">"Wyczyść historię"</string>
- <string name="browser_history" msgid="1038987118290272525">"Ostatnio odwiedzone strony"</string>
+ <!-- no translation found for browser_history (1038987118290272525) -->
+ <skip />
<string name="empty_history" msgid="8738772352308207274">"Historia przeglądarki jest pusta."</string>
<string name="add_new_bookmark" msgid="8086367791400349049">"Dodaj do zakładek..."</string>
<string name="add_bookmark_short" msgid="3783984330998103735">"Dodaj"</string>
@@ -258,7 +281,8 @@
<string name="download_pending_network" msgid="6548714525679461053">"Oczekiwanie na połączenie danych…"</string>
<string name="download_running_paused" msgid="6418029352085656495">"Oczekiwanie na połączenie danych..."</string>
<string name="download_canceled" msgid="6057083743144492515">"Pobieranie anulowane."</string>
- <string name="download_not_acceptable" msgid="313769696131563652">"Pobranie jest niemożliwe. Zawartość nie jest obsługiwana w tym telefonie."</string>
+ <!-- no translation found for download_not_acceptable (313769696131563652) -->
+ <skip />
<string name="download_file_error" msgid="1206648050615176113">"Nie można ukończyć pobierania. Za mało miejsca."</string>
<string name="download_length_required" msgid="9038605488460437406">"Pobieranie niemożliwe. Nie można ustalić rozmiaru elementu."</string>
<string name="download_precondition_failed" msgid="8327584102874295580">"Pobieranie zostało przerwane. Nie można go wznowić."</string>
@@ -270,25 +294,36 @@
<string name="webstorage_clear_data_summary" msgid="3523128713743907805">"Usuń wszystkie bazy danych powiązane z tą witryną"</string>
<string name="webstorage_clear_data_dialog_title" msgid="345457466368974706">"Wyczyść zapisane dane"</string>
<string name="webstorage_clear_data_dialog_message" msgid="6678281256970470125">"Wszystkie dane zapisane przez tę witrynę zostaną usunięte"</string>
- <string name="webstorage_clear_data_dialog_ok_button" msgid="2516563534211898636">"Wyczyść wszystko"</string>
+ <!-- no translation found for webstorage_clear_data_dialog_ok_button (2516563534211898636) -->
+ <skip />
<string name="webstorage_clear_data_dialog_cancel_button" msgid="2028867751958942762">"Anuluj"</string>
<string name="webstorage_origin_summary_mb_stored" msgid="1985885826292236210">"Liczba MB danych zapisanych w telefonie"</string>
- <string name="loading_video" msgid="4887871585216091096">"Wczytywanie filmu wideo"</string>
- <string name="geolocation_permissions_prompt_message" msgid="356796102004052471">"Witryna <xliff:g id="WEBSITE_ORIGIN">%s</xliff:g> chce uzyskać informacje o Twojej lokalizacji"</string>
- <string name="geolocation_permissions_prompt_share" msgid="9084486342048347976">"Udostępnij informacje o lokalizacji"</string>
- <string name="geolocation_permissions_prompt_dont_share" msgid="6303025160237860300">"Odrzuć"</string>
- <string name="geolocation_permissions_prompt_remember" msgid="3118526300707348308">"Zapamiętaj ustawienie"</string>
- <string name="geolocation_settings_page_title" msgid="1745477985097536528">"Wyczyść dostęp do informacji o lokalizacji"</string>
+ <!-- no translation found for loading_video (4887871585216091096) -->
+ <skip />
+ <!-- no translation found for geolocation_permissions_prompt_message (356796102004052471) -->
+ <skip />
+ <!-- no translation found for geolocation_permissions_prompt_share (9084486342048347976) -->
+ <skip />
+ <!-- no translation found for geolocation_permissions_prompt_dont_share (6303025160237860300) -->
+ <skip />
+ <!-- no translation found for geolocation_permissions_prompt_remember (3118526300707348308) -->
+ <skip />
+ <string name="geolocation_settings_page_title" msgid="1745477985097536528">"Udziel dostępu do informacji o lokalizacji"</string>
<string name="geolocation_settings_page_summary_allowed" msgid="9180251524290811398">"Ta witryna ma obecnie dostęp do informacji o Twojej lokalizacji"</string>
<string name="geolocation_settings_page_summary_not_allowed" msgid="4589649082203102544">"Ta witryna nie ma obecnie dostępu do informacji o Twojej lokalizacji"</string>
- <string name="geolocation_settings_page_dialog_title" msgid="1549842043381347668">"Wyczyść dostęp do informacji o lokalizacji"</string>
+ <string name="geolocation_settings_page_dialog_title" msgid="1549842043381347668">"Udziel dostępu do informacji o lokalizacji"</string>
<string name="geolocation_settings_page_dialog_message" msgid="7586671987576403993">"Dostęp tej witryny do informacji o lokalizacji zostanie usunięty"</string>
<string name="geolocation_settings_page_dialog_ok_button" msgid="4789434178048077287">"Usuń dostęp"</string>
<string name="geolocation_settings_page_dialog_cancel_button" msgid="7941036504673409747">"Anuluj"</string>
- <string name="website_settings_clear_all" msgid="8739804325997655980">"Wyczyść wszystko"</string>
- <string name="website_settings_clear_all_dialog_title" msgid="7791826325122461718">"Czy wyczyścić wszystkie ustawienia witryn?"</string>
- <string name="website_settings_clear_all_dialog_message" msgid="6150502090601476333">"Wszystkie dane witryn i uprawnienia do lokalizacji zostaną usunięte."</string>
- <string name="website_settings_clear_all_dialog_ok_button" msgid="6401582240627669431">"Usuń wszystkie dane"</string>
- <string name="website_settings_clear_all_dialog_cancel_button" msgid="1896757051856611674">"Anuluj"</string>
+ <!-- no translation found for website_settings_clear_all (8739804325997655980) -->
+ <skip />
+ <!-- no translation found for website_settings_clear_all_dialog_title (7791826325122461718) -->
+ <skip />
+ <!-- no translation found for website_settings_clear_all_dialog_message (6150502090601476333) -->
+ <skip />
+ <!-- no translation found for website_settings_clear_all_dialog_ok_button (6401582240627669431) -->
+ <skip />
+ <!-- no translation found for website_settings_clear_all_dialog_cancel_button (1896757051856611674) -->
+ <skip />
<string name="zoom_overview_button_text" msgid="4146579940085488881">"Widok ogólny"</string>
</resources>
diff --git a/res/values-pt-rPT/arrays.xml b/res/values-pt-rPT/arrays.xml
deleted file mode 100644
index 7f3d759..0000000
--- a/res/values-pt-rPT/arrays.xml
+++ /dev/null
@@ -1,32 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2009 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.
--->
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string-array name="webstorage_quota_entries">
- <item msgid="5433313236875537673">"Nenhuma quota permitida"</item>
- <item msgid="7374272188672967690">"5 MB"</item>
- <item msgid="8699352701856136738">"10 MB"</item>
- <item msgid="2018822431469084862">"30 MB"</item>
- <item msgid="5383642976774534074">"100 MB"</item>
- </string-array>
- <string-array name="webstorage_quota_entries_values">
- <item msgid="7620410313725236055">"0"</item>
- <item msgid="4302688814760304206">"5"</item>
- <item msgid="7291990205847586165">"10"</item>
- <item msgid="916913372287112423">"30"</item>
- <item msgid="3437188301324229987">"100"</item>
- </string-array>
-</resources>
diff --git a/res/values-pt-rPT/strings.xml b/res/values-pt-rPT/strings.xml
index aa0fcd6..cabc7eb 100644
--- a/res/values-pt-rPT/strings.xml
+++ b/res/values-pt-rPT/strings.xml
@@ -16,8 +16,10 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="application_name" msgid="1935869255545976415">"Browser"</string>
- <string name="new_tab" msgid="4505722538297295141">"Nova janela"</string>
- <string name="active_tabs" msgid="3050623868203544623">"Janelas"</string>
+ <!-- no translation found for new_tab (4505722538297295141) -->
+ <skip />
+ <!-- no translation found for active_tabs (3050623868203544623) -->
+ <skip />
<string name="tab_bookmarks" msgid="2305793036003473653">"Marcadores"</string>
<string name="tab_most_visited" msgid="1077402532455000703">"Os mais visitados"</string>
<string name="tab_history" msgid="1979267558744613746">"Histórico"</string>
@@ -78,8 +80,10 @@
<string name="remove_history_item" msgid="5021424935726728618">"Remover do histórico"</string>
<string name="set_as_homepage" msgid="4752937379414905560">"Definir como página inicial"</string>
<string name="bookmark_saved" msgid="2766434679871317557">"Guardado nos marcadores"</string>
- <string name="bookmark_not_saved" msgid="700600955089376724">"Não foi possível guardar o marcador."</string>
- <string name="homepage_set" msgid="8768087280310966395">"Página inicial definida."</string>
+ <!-- no translation found for bookmark_not_saved (700600955089376724) -->
+ <skip />
+ <!-- no translation found for homepage_set (8768087280310966395) -->
+ <skip />
<string name="bookmark_needs_title" msgid="6245900436119218187">"Os marcadores têm de ter um nome."</string>
<string name="bookmark_needs_url" msgid="7809876865972755158">"O marcador tem de ter uma localização."</string>
<string name="empty_bookmark" msgid="7008697085928540511">"Não é possível criar um marcador vazio."</string>
@@ -107,7 +111,8 @@
<string name="shortcut_bookmark" msgid="3974876480401135895">"Marcador"</string>
<string name="history" msgid="2451240511251410032">"Histórico"</string>
<string name="menu_view_download" msgid="2124570321712995120">"Transferências"</string>
- <string name="copy_page_url" msgid="7635062169011319208">"Copiar URL da página"</string>
+ <!-- no translation found for copy_page_url (7635062169011319208) -->
+ <skip />
<string name="share_page" msgid="593756995297268343">"Partilhar página"</string>
<string name="contextmenu_openlink" msgid="7237961252214188935">"Abrir"</string>
<string name="contextmenu_openlink_newwindow" msgid="992765050093960353">"Abrir numa janela nova"</string>
@@ -122,40 +127,54 @@
<string name="contextmenu_add_contact" msgid="3183511922223645716">"Adicionar contacto"</string>
<string name="contextmenu_send_mail" msgid="1014513374828775660">"Enviar e-mail"</string>
<string name="contextmenu_map" msgid="7471390435434034912">"Mapa"</string>
- <string name="choosertitle_sharevia" msgid="4600490613341909086">"Partilhar através de"</string>
+ <!-- no translation found for choosertitle_sharevia (4600490613341909086) -->
+ <skip />
<string name="clear" msgid="7070043081700011461">"Limpar"</string>
<string name="replace" msgid="4843033491070384047">"Substituir"</string>
<string name="browser_bookmarks_page_bookmarks_text" msgid="6787605028726162673">"Marcadores"</string>
<string name="menu_preferences" msgid="6709237687234102240">"Definições"</string>
<string name="pref_content_title" msgid="722227111894838633">"Definições de conteúdo da página"</string>
<string name="pref_content_load_images" msgid="2125616852957377561">"Carregar imagens"</string>
- <string name="pref_content_load_images_summary" msgid="5055874125248398584">"Apresentar imagens em páginas Web"</string>
+ <!-- no translation found for pref_content_load_images_summary (5055874125248398584) -->
+ <skip />
<string name="pref_content_block_popups" msgid="7808433807197256726">"Bloquear janelas pop-up"</string>
<string name="pref_content_javascript" msgid="4570972030299516843">"Activar JavaScript"</string>
<string name="pref_content_open_in_background" msgid="824123779725118663">"Abrir em segundo plano"</string>
- <string name="pref_content_plugins" msgid="7231944644794301582">"Activar plug-ins"</string>
- <string name="pref_content_open_in_background_summary" msgid="1737664075721181678">"Abrir novas janelas atrás da actual"</string>
+ <!-- no translation found for pref_content_plugins (7231944644794301582) -->
+ <skip />
+ <!-- no translation found for pref_content_open_in_background_summary (1737664075721181678) -->
+ <skip />
<string name="pref_content_homepage" msgid="6082437160778559806">"Definir página inicial"</string>
<string name="pref_content_autofit" msgid="8260474534053660809">"Ajuste auto de páginas"</string>
- <string name="pref_content_autofit_summary" msgid="4587831659894879986">"Formatar páginas Web para se ajustarem ao ecrã"</string>
- <string name="pref_content_landscape_only" msgid="2022546812766219672">"Apresentação apenas na horizontal"</string>
- <string name="pref_content_landscape_only_summary" msgid="1008238895535428855">"Mostrar páginas só na orientação horizontal do ecrã (mais larga)"</string>
+ <!-- no translation found for pref_content_autofit_summary (4587831659894879986) -->
+ <skip />
+ <!-- no translation found for pref_content_landscape_only (2022546812766219672) -->
+ <skip />
+ <!-- no translation found for pref_content_landscape_only_summary (1008238895535428855) -->
+ <skip />
<string name="pref_privacy_title" msgid="1052470980370846151">"Definições de privacidade"</string>
<string name="pref_privacy_clear_cache" msgid="3380316479925886998">"Limpar cache"</string>
<string name="pref_privacy_clear_cache_summary" msgid="2216463577207991454">"Limpar bases de dados e conteúdos colocados em cache localmente"</string>
- <string name="pref_privacy_clear_cache_dlg" msgid="5541011591300753881">"As bases de dados e os conteúdos colocados em cache localmente serão eliminados."</string>
+ <!-- no translation found for pref_privacy_clear_cache_dlg (5541011591300753881) -->
+ <skip />
<string name="pref_privacy_clear_cookies" msgid="3095583579133780331">"Limpar os dados de cookies"</string>
- <string name="pref_privacy_clear_cookies_summary" msgid="6962742063990677520">"Limpar todos os cookies do browser"</string>
- <string name="pref_privacy_clear_cookies_dlg" msgid="552855688091432682">"Todos os cookies serão eliminados."</string>
+ <!-- no translation found for pref_privacy_clear_cookies_summary (6962742063990677520) -->
+ <skip />
+ <!-- no translation found for pref_privacy_clear_cookies_dlg (552855688091432682) -->
+ <skip />
<string name="pref_privacy_clear_history" msgid="8723795508825198477">"Limpar histórico"</string>
<string name="pref_privacy_clear_history_summary" msgid="6868501330708940734">"Limpar o histórico de navegação do browser"</string>
- <string name="pref_privacy_clear_history_dlg" msgid="544903007914753853">"O histórico de navegação do browser será eliminado."</string>
+ <!-- no translation found for pref_privacy_clear_history_dlg (544903007914753853) -->
+ <skip />
<string name="pref_privacy_clear_form_data" msgid="4232668196344383987">"Limpar dados de formulário"</string>
<string name="pref_privacy_clear_form_data_summary" msgid="1790390894719517167">"Limpar todos os dados de formulário guardados"</string>
- <string name="pref_privacy_clear_form_data_dlg" msgid="4443621086781197928">"Todos os dados de formulário guardados serão eliminados."</string>
+ <!-- no translation found for pref_privacy_clear_form_data_dlg (4443621086781197928) -->
+ <skip />
<string name="pref_privacy_clear_passwords" msgid="4750234112289277480">"Limpar palavras-passe"</string>
- <string name="pref_privacy_clear_passwords_summary" msgid="8856782718942903335">"Limpar todas as palavras-passe guardadas"</string>
- <string name="pref_privacy_clear_passwords_dlg" msgid="2083869328824248255">"Todas as palavras-passe guardadas serão eliminadas."</string>
+ <!-- no translation found for pref_privacy_clear_passwords_summary (8856782718942903335) -->
+ <skip />
+ <!-- no translation found for pref_privacy_clear_passwords_dlg (2083869328824248255) -->
+ <skip />
<string name="pref_privacy_enable_geolocation" msgid="1395040170290765686">"Activar localização"</string>
<string name="pref_privacy_enable_geolocation_summary" msgid="8437020934664306205">"Permitir que os sites solicitem acesso à sua localização"</string>
<string name="pref_privacy_clear_geolocation_access" msgid="6649680770030042980">"Limpar acesso à localização"</string>
@@ -163,7 +182,8 @@
<string name="pref_privacy_clear_geolocation_access_dlg" msgid="7327063124488827244">"Limpar o acesso à localização para todos os Web sites"</string>
<string name="pref_security_title" msgid="5763978646932160021">"Definições de segurança"</string>
<string name="pref_security_remember_passwords" msgid="6492957683454529549">"Lembrar palavras-passe"</string>
- <string name="pref_security_remember_passwords_summary" msgid="256388703356349137">"Guardar nomes de utilizador e palavras-passe de Web sites"</string>
+ <!-- no translation found for pref_security_remember_passwords_summary (256388703356349137) -->
+ <skip />
<string name="pref_security_save_form_data" msgid="1213669802810198893">"Lembrar dados formulário"</string>
<string name="pref_security_save_form_data_summary" msgid="4994074685153708026">"Lembrar dados introduzidos em formulários para utilização posterior"</string>
<string name="pref_security_show_security_warning" msgid="8901135676266754559">"Mostrar avisos segurança"</string>
@@ -186,14 +206,17 @@
<item msgid="3840999588443167001">"Fechar"</item>
</string-array>
<string name="pref_default_zoom_dialogtitle" msgid="6095974367125109021">"Zoom predefinido"</string>
- <string name="pref_content_load_page" msgid="2219810141690955452">"Abrir páginas na vista geral"</string>
- <string name="pref_content_load_page_summary" msgid="8792093504054149369">"Mostrar descrição geral de páginas abertas recentemente"</string>
+ <!-- no translation found for pref_content_load_page (2219810141690955452) -->
+ <skip />
+ <!-- no translation found for pref_content_load_page_summary (8792093504054149369) -->
+ <skip />
<string name="pref_extras_title" msgid="3091250467679722382">"Definições avançadas"</string>
<string name="pref_extras_website_settings" msgid="67866640052455549">"Definições de Web site"</string>
<string name="pref_extras_website_settings_summary" msgid="3917568895776162240">"Ver definições avançadas para Web sites individuais"</string>
<string name="pref_extras_reset_default" msgid="8904000515846202110">"Repor as predefinições"</string>
<string name="pref_extras_reset_default_summary" msgid="7984680562706914966">"Limpar todos os dados do browser e repor todas as predefinições"</string>
- <string name="pref_extras_reset_default_dlg" msgid="6894807766578874830">"Todos os dados do browser serão eliminados e as definições assumirão os valores predefinidos."</string>
+ <!-- no translation found for pref_extras_reset_default_dlg (6894807766578874830) -->
+ <skip />
<string name="pref_extras_reset_default_dlg_title" msgid="2250334970728938936">"Repor as predefinições"</string>
<string name="pref_development_title" msgid="3263854204533056480">"Depuração"</string>
<string name="pref_default_text_encoding" msgid="5742965543955558478">"Codificação do texto"</string>
@@ -206,16 +229,16 @@
</string-array>
<string name="pref_default_text_encoding_dialogtitle" msgid="5508255018084978547">"Codificação do texto"</string>
<string name="pref_default_text_encoding_default" msgid="5272126711231936722">"Latim-1"</string>
- <string name="browserFrameRedirect" msgid="7049675479777828343">"Redireccionar"</string>
- <string name="browserFrame307Post" msgid="1429094844669510768">"Esta página Web está a ser redireccionada. Pretende reenviar os dados de formulário introduzidos para a nova localização?"</string>
<string name="browserFrameNetworkErrorLabel" msgid="126892350904924893">"Problema de conectividade de dados"</string>
<string name="browserFrameFileErrorLabel" msgid="8063691502792670367">"Problemas com o ficheiro"</string>
<string name="browserFrameFormResubmitLabel" msgid="2685923472682180360">"Confirmar"</string>
<string name="browserFrameFormResubmitMessage" msgid="2752182215695632138">"A página que está a tentar visualizar contém dados enviados anteriormente (\"REGISTDADOS\"). Se reenviar os dados, qualquer acção já tomada pelo formulário da página (como uma pesquisa ou compra on-line) será repetida."</string>
<string name="loadSuspendedTitle" msgid="675991625288706944">"Sem ligação de rede"</string>
- <string name="loadSuspended" msgid="3133656588880851273">"O browser não consegue carregar esta página porque não existe ligação à Internet."</string>
+ <!-- no translation found for loadSuspended (3133656588880851273) -->
+ <skip />
<string name="clear_history" msgid="5998307092715979619">"Limpar histórico"</string>
- <string name="browser_history" msgid="1038987118290272525">"Páginas visitadas recentemente"</string>
+ <!-- no translation found for browser_history (1038987118290272525) -->
+ <skip />
<string name="empty_history" msgid="8738772352308207274">"O histórico do browser está vazio."</string>
<string name="add_new_bookmark" msgid="8086367791400349049">"Adicionar marcador..."</string>
<string name="add_bookmark_short" msgid="3783984330998103735">"Adicionar"</string>
@@ -258,7 +281,8 @@
<string name="download_pending_network" msgid="6548714525679461053">"A aguardar ligação de dados…"</string>
<string name="download_running_paused" msgid="6418029352085656495">"A aguardar ligação de dados…"</string>
<string name="download_canceled" msgid="6057083743144492515">"Transferência cancelada."</string>
- <string name="download_not_acceptable" msgid="313769696131563652">"Não é possível transferir. O conteúdo não é suportado por este telefone."</string>
+ <!-- no translation found for download_not_acceptable (313769696131563652) -->
+ <skip />
<string name="download_file_error" msgid="1206648050615176113">"Não é possível concluir a transferência. Não existe espaço suficiente."</string>
<string name="download_length_required" msgid="9038605488460437406">"Não é possível transferir porque o tamanho do item é indeterminado."</string>
<string name="download_precondition_failed" msgid="8327584102874295580">"A transferência foi interrompida e não pode ser retomada."</string>
@@ -270,14 +294,20 @@
<string name="webstorage_clear_data_summary" msgid="3523128713743907805">"Remover todas as bases de dados associadas a este Web site"</string>
<string name="webstorage_clear_data_dialog_title" msgid="345457466368974706">"Limpar dados armazenados"</string>
<string name="webstorage_clear_data_dialog_message" msgid="6678281256970470125">"Todos os dados armazenados por este Web site serão limpos"</string>
- <string name="webstorage_clear_data_dialog_ok_button" msgid="2516563534211898636">"Limpar tudo"</string>
+ <!-- no translation found for webstorage_clear_data_dialog_ok_button (2516563534211898636) -->
+ <skip />
<string name="webstorage_clear_data_dialog_cancel_button" msgid="2028867751958942762">"Cancelar"</string>
<string name="webstorage_origin_summary_mb_stored" msgid="1985885826292236210">"MB armazenados no telefone"</string>
- <string name="loading_video" msgid="4887871585216091096">"A carregar vídeo"</string>
- <string name="geolocation_permissions_prompt_message" msgid="356796102004052471">"<xliff:g id="WEBSITE_ORIGIN">%s</xliff:g> pretende conhecer a sua localização"</string>
- <string name="geolocation_permissions_prompt_share" msgid="9084486342048347976">"Partilhar localização"</string>
- <string name="geolocation_permissions_prompt_dont_share" msgid="6303025160237860300">"Recusar"</string>
- <string name="geolocation_permissions_prompt_remember" msgid="3118526300707348308">"Memorizar preferência"</string>
+ <!-- no translation found for loading_video (4887871585216091096) -->
+ <skip />
+ <!-- no translation found for geolocation_permissions_prompt_message (356796102004052471) -->
+ <skip />
+ <!-- no translation found for geolocation_permissions_prompt_share (9084486342048347976) -->
+ <skip />
+ <!-- no translation found for geolocation_permissions_prompt_dont_share (6303025160237860300) -->
+ <skip />
+ <!-- no translation found for geolocation_permissions_prompt_remember (3118526300707348308) -->
+ <skip />
<string name="geolocation_settings_page_title" msgid="1745477985097536528">"Limpar acesso à localização"</string>
<string name="geolocation_settings_page_summary_allowed" msgid="9180251524290811398">"Actualmente este site pode aceder à sua localização"</string>
<string name="geolocation_settings_page_summary_not_allowed" msgid="4589649082203102544">"Actualmente este site não pode aceder à sua localização"</string>
@@ -285,10 +315,15 @@
<string name="geolocation_settings_page_dialog_message" msgid="7586671987576403993">"O acesso à localização para este Web site será limpo"</string>
<string name="geolocation_settings_page_dialog_ok_button" msgid="4789434178048077287">"Limpar acesso"</string>
<string name="geolocation_settings_page_dialog_cancel_button" msgid="7941036504673409747">"Cancelar"</string>
- <string name="website_settings_clear_all" msgid="8739804325997655980">"Limpar tudo"</string>
- <string name="website_settings_clear_all_dialog_title" msgid="7791826325122461718">"Limpar todas as definições do Web site?"</string>
- <string name="website_settings_clear_all_dialog_message" msgid="6150502090601476333">"Todos os dados do Web site e permissões de localização serão eliminados."</string>
- <string name="website_settings_clear_all_dialog_ok_button" msgid="6401582240627669431">"Eliminar todos os dados"</string>
- <string name="website_settings_clear_all_dialog_cancel_button" msgid="1896757051856611674">"Cancelar"</string>
+ <!-- no translation found for website_settings_clear_all (8739804325997655980) -->
+ <skip />
+ <!-- no translation found for website_settings_clear_all_dialog_title (7791826325122461718) -->
+ <skip />
+ <!-- no translation found for website_settings_clear_all_dialog_message (6150502090601476333) -->
+ <skip />
+ <!-- no translation found for website_settings_clear_all_dialog_ok_button (6401582240627669431) -->
+ <skip />
+ <!-- no translation found for website_settings_clear_all_dialog_cancel_button (1896757051856611674) -->
+ <skip />
<string name="zoom_overview_button_text" msgid="4146579940085488881">"Visão geral"</string>
</resources>
diff --git a/res/values-pt/arrays.xml b/res/values-pt/arrays.xml
deleted file mode 100644
index 7f3d759..0000000
--- a/res/values-pt/arrays.xml
+++ /dev/null
@@ -1,32 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2009 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.
--->
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string-array name="webstorage_quota_entries">
- <item msgid="5433313236875537673">"Nenhuma quota permitida"</item>
- <item msgid="7374272188672967690">"5 MB"</item>
- <item msgid="8699352701856136738">"10 MB"</item>
- <item msgid="2018822431469084862">"30 MB"</item>
- <item msgid="5383642976774534074">"100 MB"</item>
- </string-array>
- <string-array name="webstorage_quota_entries_values">
- <item msgid="7620410313725236055">"0"</item>
- <item msgid="4302688814760304206">"5"</item>
- <item msgid="7291990205847586165">"10"</item>
- <item msgid="916913372287112423">"30"</item>
- <item msgid="3437188301324229987">"100"</item>
- </string-array>
-</resources>
diff --git a/res/values-pt/strings.xml b/res/values-pt/strings.xml
index 1b0ca0a..958ee10 100644
--- a/res/values-pt/strings.xml
+++ b/res/values-pt/strings.xml
@@ -16,8 +16,10 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="application_name" msgid="1935869255545976415">"Navegador"</string>
- <string name="new_tab" msgid="4505722538297295141">"Nova janela"</string>
- <string name="active_tabs" msgid="3050623868203544623">"Janelas"</string>
+ <!-- no translation found for new_tab (4505722538297295141) -->
+ <skip />
+ <!-- no translation found for active_tabs (3050623868203544623) -->
+ <skip />
<string name="tab_bookmarks" msgid="2305793036003473653">"Favoritos"</string>
<string name="tab_most_visited" msgid="1077402532455000703">"Mais visitados"</string>
<string name="tab_history" msgid="1979267558744613746">"Histórico"</string>
@@ -63,7 +65,7 @@
<string name="stop" msgid="5687251076030630074">"Parar"</string>
<string name="reload" msgid="8585220783228408062">"Atualizar"</string>
<string name="back" msgid="8414603107175713668">"Voltar"</string>
- <string name="forward" msgid="4288210890526641577">"Avançar"</string>
+ <string name="forward" msgid="4288210890526641577">"Encaminhar"</string>
<string name="save" msgid="5922311934992468496">"OK"</string>
<string name="do_not_save" msgid="6777633870113477714">"Cancelar"</string>
<string name="location" msgid="969988560160364559">"Local"</string>
@@ -78,8 +80,10 @@
<string name="remove_history_item" msgid="5021424935726728618">"Remover do histórico"</string>
<string name="set_as_homepage" msgid="4752937379414905560">"Definir como página inicial"</string>
<string name="bookmark_saved" msgid="2766434679871317557">"Salvo nos favoritos."</string>
- <string name="bookmark_not_saved" msgid="700600955089376724">"Não foi possível salvar o favorito."</string>
- <string name="homepage_set" msgid="8768087280310966395">"Página inicial definida."</string>
+ <!-- no translation found for bookmark_not_saved (700600955089376724) -->
+ <skip />
+ <!-- no translation found for homepage_set (8768087280310966395) -->
+ <skip />
<string name="bookmark_needs_title" msgid="6245900436119218187">"O favorito precisa ter um nome."</string>
<string name="bookmark_needs_url" msgid="7809876865972755158">"O favorito precisa ter um local."</string>
<string name="empty_bookmark" msgid="7008697085928540511">"Não é possível criar um favorito vazio."</string>
@@ -94,7 +98,7 @@
<string name="new_window" msgid="8117889615360211551">"Nova janela"</string>
<string name="goto_dot" msgid="3895839050522602723">"Ir"</string>
<string name="find_dot" msgid="6259312434696611957">"Localizar na página"</string>
- <string name="select_dot" msgid="6299170761900561967">"Selecionar texto"</string>
+ <string name="select_dot" msgid="6299170761900561967">"Selecione o texto"</string>
<string name="view_tabs" msgid="1119097492003550564">"Visão geral da janela"</string>
<string name="view_tabs_condensed" msgid="5803955493821945369">"Janelas"</string>
<string name="tab_picker_title" msgid="864478399057782913">"Janelas atuais"</string>
@@ -107,7 +111,8 @@
<string name="shortcut_bookmark" msgid="3974876480401135895">"Favorito"</string>
<string name="history" msgid="2451240511251410032">"Histórico"</string>
<string name="menu_view_download" msgid="2124570321712995120">"Downloads"</string>
- <string name="copy_page_url" msgid="7635062169011319208">"Copiar URL da página"</string>
+ <!-- no translation found for copy_page_url (7635062169011319208) -->
+ <skip />
<string name="share_page" msgid="593756995297268343">"Compartilhar página"</string>
<string name="contextmenu_openlink" msgid="7237961252214188935">"Abrir"</string>
<string name="contextmenu_openlink_newwindow" msgid="992765050093960353">"Abrir em uma nova janela"</string>
@@ -122,48 +127,63 @@
<string name="contextmenu_add_contact" msgid="3183511922223645716">"Adicionar contato"</string>
<string name="contextmenu_send_mail" msgid="1014513374828775660">"Enviar e-mail"</string>
<string name="contextmenu_map" msgid="7471390435434034912">"Mapa"</string>
- <string name="choosertitle_sharevia" msgid="4600490613341909086">"Compartilhar via"</string>
+ <!-- no translation found for choosertitle_sharevia (4600490613341909086) -->
+ <skip />
<string name="clear" msgid="7070043081700011461">"Limpar"</string>
<string name="replace" msgid="4843033491070384047">"Substituir"</string>
<string name="browser_bookmarks_page_bookmarks_text" msgid="6787605028726162673">"Favoritos"</string>
<string name="menu_preferences" msgid="6709237687234102240">"Configurações"</string>
<string name="pref_content_title" msgid="722227111894838633">"Configurações do conteúdo da página"</string>
<string name="pref_content_load_images" msgid="2125616852957377561">"Carregar imagens"</string>
- <string name="pref_content_load_images_summary" msgid="5055874125248398584">"Exibir imagens nas páginas da web"</string>
+ <!-- no translation found for pref_content_load_images_summary (5055874125248398584) -->
+ <skip />
<string name="pref_content_block_popups" msgid="7808433807197256726">"Bloquear janelas pop-up"</string>
<string name="pref_content_javascript" msgid="4570972030299516843">"Ativar JavaScript"</string>
<string name="pref_content_open_in_background" msgid="824123779725118663">"Abrir em segundo plano"</string>
- <string name="pref_content_plugins" msgid="7231944644794301582">"Ativar plug-ins"</string>
- <string name="pref_content_open_in_background_summary" msgid="1737664075721181678">"Abrir novas janelas atrás da janela atual"</string>
+ <!-- no translation found for pref_content_plugins (7231944644794301582) -->
+ <skip />
+ <!-- no translation found for pref_content_open_in_background_summary (1737664075721181678) -->
+ <skip />
<string name="pref_content_homepage" msgid="6082437160778559806">"Definir a página inicial"</string>
<string name="pref_content_autofit" msgid="8260474534053660809">"Ajustar automaticamente"</string>
- <string name="pref_content_autofit_summary" msgid="4587831659894879986">"Formatar páginas da web para se ajustarem à tela"</string>
- <string name="pref_content_landscape_only" msgid="2022546812766219672">"Apenas modo paisagem"</string>
- <string name="pref_content_landscape_only_summary" msgid="1008238895535428855">"Exibir páginas apenas na orientação mais larga, com a tela no modo paisagem"</string>
+ <!-- no translation found for pref_content_autofit_summary (4587831659894879986) -->
+ <skip />
+ <!-- no translation found for pref_content_landscape_only (2022546812766219672) -->
+ <skip />
+ <!-- no translation found for pref_content_landscape_only_summary (1008238895535428855) -->
+ <skip />
<string name="pref_privacy_title" msgid="1052470980370846151">"Configurações de privacidade"</string>
<string name="pref_privacy_clear_cache" msgid="3380316479925886998">"Limpar cache"</string>
<string name="pref_privacy_clear_cache_summary" msgid="2216463577207991454">"Limpar conteúdo e bancos de dados armazenados localmente em cache"</string>
- <string name="pref_privacy_clear_cache_dlg" msgid="5541011591300753881">"O conteúdo e os bancos de dados armazenados localmente em cache serão excluídos."</string>
+ <!-- no translation found for pref_privacy_clear_cache_dlg (5541011591300753881) -->
+ <skip />
<string name="pref_privacy_clear_cookies" msgid="3095583579133780331">"Limpar dados de cookie"</string>
- <string name="pref_privacy_clear_cookies_summary" msgid="6962742063990677520">"Limpar todos os cookies do navegador"</string>
- <string name="pref_privacy_clear_cookies_dlg" msgid="552855688091432682">"Todos os cookies serão excluídos."</string>
+ <!-- no translation found for pref_privacy_clear_cookies_summary (6962742063990677520) -->
+ <skip />
+ <!-- no translation found for pref_privacy_clear_cookies_dlg (552855688091432682) -->
+ <skip />
<string name="pref_privacy_clear_history" msgid="8723795508825198477">"Limpar histórico"</string>
<string name="pref_privacy_clear_history_summary" msgid="6868501330708940734">"Limpar o histórico de navegação do navegador"</string>
- <string name="pref_privacy_clear_history_dlg" msgid="544903007914753853">"O histórico de navegação do navegador será excluído."</string>
+ <!-- no translation found for pref_privacy_clear_history_dlg (544903007914753853) -->
+ <skip />
<string name="pref_privacy_clear_form_data" msgid="4232668196344383987">"Limpar dados formulário"</string>
<string name="pref_privacy_clear_form_data_summary" msgid="1790390894719517167">"Limpar todos os dados de formulário salvos"</string>
- <string name="pref_privacy_clear_form_data_dlg" msgid="4443621086781197928">"Todos os dados de formulário salvos serão excluídos."</string>
+ <!-- no translation found for pref_privacy_clear_form_data_dlg (4443621086781197928) -->
+ <skip />
<string name="pref_privacy_clear_passwords" msgid="4750234112289277480">"Limpar senhas"</string>
- <string name="pref_privacy_clear_passwords_summary" msgid="8856782718942903335">"Limpar todas as senhas salvas"</string>
- <string name="pref_privacy_clear_passwords_dlg" msgid="2083869328824248255">"Todas as senhas salvas serão excluídas."</string>
+ <!-- no translation found for pref_privacy_clear_passwords_summary (8856782718942903335) -->
+ <skip />
+ <!-- no translation found for pref_privacy_clear_passwords_dlg (2083869328824248255) -->
+ <skip />
<string name="pref_privacy_enable_geolocation" msgid="1395040170290765686">"Ativar localização"</string>
<string name="pref_privacy_enable_geolocation_summary" msgid="8437020934664306205">"Permitir que os sites solicitem acesso à sua localização"</string>
- <string name="pref_privacy_clear_geolocation_access" msgid="6649680770030042980">"Limpar acesso ao local"</string>
+ <string name="pref_privacy_clear_geolocation_access" msgid="6649680770030042980">"Limpar acesso à localização"</string>
<string name="pref_privacy_clear_geolocation_access_summary" msgid="7750143359497314679">"Limpar acesso à localização para todos os sites"</string>
<string name="pref_privacy_clear_geolocation_access_dlg" msgid="7327063124488827244">"Limpar acesso à localização para todos os sites"</string>
<string name="pref_security_title" msgid="5763978646932160021">"Configurações de segurança"</string>
<string name="pref_security_remember_passwords" msgid="6492957683454529549">"Lembrar senhas"</string>
- <string name="pref_security_remember_passwords_summary" msgid="256388703356349137">"Salvar nomes de usuário e senhas para sites"</string>
+ <!-- no translation found for pref_security_remember_passwords_summary (256388703356349137) -->
+ <skip />
<string name="pref_security_save_form_data" msgid="1213669802810198893">"Lembrar dados formulário"</string>
<string name="pref_security_save_form_data_summary" msgid="4994074685153708026">"Lembrar os dados que digitei nos formulários para uso posterior."</string>
<string name="pref_security_show_security_warning" msgid="8901135676266754559">"Avisos de segurança"</string>
@@ -186,14 +206,17 @@
<item msgid="3840999588443167001">"Perto"</item>
</string-array>
<string name="pref_default_zoom_dialogtitle" msgid="6095974367125109021">"Zoom padrão"</string>
- <string name="pref_content_load_page" msgid="2219810141690955452">"Abrir em visão geral"</string>
- <string name="pref_content_load_page_summary" msgid="8792093504054149369">"Exibir visão geral de páginas que acabaram de ser abertas"</string>
+ <!-- no translation found for pref_content_load_page (2219810141690955452) -->
+ <skip />
+ <!-- no translation found for pref_content_load_page_summary (8792093504054149369) -->
+ <skip />
<string name="pref_extras_title" msgid="3091250467679722382">"Configurações avançadas"</string>
<string name="pref_extras_website_settings" msgid="67866640052455549">"Configurações do site"</string>
<string name="pref_extras_website_settings_summary" msgid="3917568895776162240">"Visualizar configurações avançadas para sites individuais"</string>
<string name="pref_extras_reset_default" msgid="8904000515846202110">"Redefinir para o padrão"</string>
<string name="pref_extras_reset_default_summary" msgid="7984680562706914966">"Limpar dados do navegador e redefinir as configurações para o padrão"</string>
- <string name="pref_extras_reset_default_dlg" msgid="6894807766578874830">"Todos os dados do navegador serão excluídos e as configurações voltarão para os valores padrão."</string>
+ <!-- no translation found for pref_extras_reset_default_dlg (6894807766578874830) -->
+ <skip />
<string name="pref_extras_reset_default_dlg_title" msgid="2250334970728938936">"Redefinir para o padrão"</string>
<string name="pref_development_title" msgid="3263854204533056480">"Depurar"</string>
<string name="pref_default_text_encoding" msgid="5742965543955558478">"Codificação de texto"</string>
@@ -206,16 +229,16 @@
</string-array>
<string name="pref_default_text_encoding_dialogtitle" msgid="5508255018084978547">"Codificação de texto"</string>
<string name="pref_default_text_encoding_default" msgid="5272126711231936722">"Latin-1"</string>
- <string name="browserFrameRedirect" msgid="7049675479777828343">"Redirecionar"</string>
- <string name="browserFrame307Post" msgid="1429094844669510768">"Esta página da web está sendo redirecionada. Reenviar os seus dados de formulário digitados para o novo local?"</string>
<string name="browserFrameNetworkErrorLabel" msgid="126892350904924893">"Problema de conectividade de dados"</string>
<string name="browserFrameFileErrorLabel" msgid="8063691502792670367">"Problema com o arquivo"</string>
<string name="browserFrameFormResubmitLabel" msgid="2685923472682180360">"Confirmar"</string>
<string name="browserFrameFormResubmitMessage" msgid="2752182215695632138">"A página que você está tentando visualizar contém dados já enviados (\"POSTDATA\"). Se você reenviar os dados, qualquer ação executada pelo formulário na página (como uma pesquisa ou uma compra on-line) será repetida."</string>
<string name="loadSuspendedTitle" msgid="675991625288706944">"Nenhuma conexão de rede"</string>
- <string name="loadSuspended" msgid="3133656588880851273">"O navegador não pode carregar esta página porque não há conexão com a internet."</string>
+ <!-- no translation found for loadSuspended (3133656588880851273) -->
+ <skip />
<string name="clear_history" msgid="5998307092715979619">"Limpar histórico"</string>
- <string name="browser_history" msgid="1038987118290272525">"Páginas visitadas recentemente"</string>
+ <!-- no translation found for browser_history (1038987118290272525) -->
+ <skip />
<string name="empty_history" msgid="8738772352308207274">"O histórico do navegador está vazio."</string>
<string name="add_new_bookmark" msgid="8086367791400349049">"Adicionar favorito…"</string>
<string name="add_bookmark_short" msgid="3783984330998103735">"Adicionar"</string>
@@ -230,7 +253,7 @@
<string name="too_many_windows_dialog_message" msgid="1398571800233959583">"Não foi possível abrir uma nova janela porque você já abriu o número máximo."</string>
<string name="too_many_subwindows_dialog_title" msgid="3805453941587725944">"Pop-up já aberta"</string>
<string name="too_many_subwindows_dialog_message" msgid="5827289829907966657">"Não foi possível abrir uma nova janela pop-up porque apenas uma pode ser aberta por vez."</string>
- <string name="download_title" msgid="2122874021047565594">"Histórico de downloads"</string>
+ <string name="download_title" msgid="2122874021047565594">"Fazer download do histórico"</string>
<string name="download_unknown_filename" msgid="4013465542563652175">"<Desconhecido>"</string>
<string name="download_menu_open" msgid="4888327480367757513">"Abrir"</string>
<string name="download_menu_clear" msgid="6264454531553418124">"Limpar da lista"</string>
@@ -258,7 +281,8 @@
<string name="download_pending_network" msgid="6548714525679461053">"Aguardando conexão dos dados…"</string>
<string name="download_running_paused" msgid="6418029352085656495">"Aguardando conexão dos dados…"</string>
<string name="download_canceled" msgid="6057083743144492515">"Download cancelado."</string>
- <string name="download_not_acceptable" msgid="313769696131563652">"Não foi possível fazer o download. O conteúdo não é suportado neste telefone."</string>
+ <!-- no translation found for download_not_acceptable (313769696131563652) -->
+ <skip />
<string name="download_file_error" msgid="1206648050615176113">"Não é possível concluir o download. Não há espaço suficiente."</string>
<string name="download_length_required" msgid="9038605488460437406">"Não é possível fazer o download. O tamanho do item não pode ser determinado."</string>
<string name="download_precondition_failed" msgid="8327584102874295580">"Download interrompido. Não é possível retomar."</string>
@@ -270,14 +294,20 @@
<string name="webstorage_clear_data_summary" msgid="3523128713743907805">"Remover todos os bancos de dados associados a esse site"</string>
<string name="webstorage_clear_data_dialog_title" msgid="345457466368974706">"Limpar dados armazenados"</string>
<string name="webstorage_clear_data_dialog_message" msgid="6678281256970470125">"Todos os dados armazenados por este site serão excluídos"</string>
- <string name="webstorage_clear_data_dialog_ok_button" msgid="2516563534211898636">"Limpar tudo"</string>
+ <!-- no translation found for webstorage_clear_data_dialog_ok_button (2516563534211898636) -->
+ <skip />
<string name="webstorage_clear_data_dialog_cancel_button" msgid="2028867751958942762">"Cancelar"</string>
<string name="webstorage_origin_summary_mb_stored" msgid="1985885826292236210">"MB armazenados no seu telefone"</string>
- <string name="loading_video" msgid="4887871585216091096">"Carregando vídeo"</string>
- <string name="geolocation_permissions_prompt_message" msgid="356796102004052471">"<xliff:g id="WEBSITE_ORIGIN">%s</xliff:g> quer saber a sua localização"</string>
- <string name="geolocation_permissions_prompt_share" msgid="9084486342048347976">"Compartilhar local"</string>
- <string name="geolocation_permissions_prompt_dont_share" msgid="6303025160237860300">"Recusar"</string>
- <string name="geolocation_permissions_prompt_remember" msgid="3118526300707348308">"Lembrar preferências"</string>
+ <!-- no translation found for loading_video (4887871585216091096) -->
+ <skip />
+ <!-- no translation found for geolocation_permissions_prompt_message (356796102004052471) -->
+ <skip />
+ <!-- no translation found for geolocation_permissions_prompt_share (9084486342048347976) -->
+ <skip />
+ <!-- no translation found for geolocation_permissions_prompt_dont_share (6303025160237860300) -->
+ <skip />
+ <!-- no translation found for geolocation_permissions_prompt_remember (3118526300707348308) -->
+ <skip />
<string name="geolocation_settings_page_title" msgid="1745477985097536528">"Limpar acesso à localização"</string>
<string name="geolocation_settings_page_summary_allowed" msgid="9180251524290811398">"Este site pode acessar a sua localização no momento"</string>
<string name="geolocation_settings_page_summary_not_allowed" msgid="4589649082203102544">"Este site não pode acessar a sua localização no momento"</string>
@@ -285,10 +315,15 @@
<string name="geolocation_settings_page_dialog_message" msgid="7586671987576403993">"O acesso à localização será limpo para este site"</string>
<string name="geolocation_settings_page_dialog_ok_button" msgid="4789434178048077287">"Limpar acesso"</string>
<string name="geolocation_settings_page_dialog_cancel_button" msgid="7941036504673409747">"Cancelar"</string>
- <string name="website_settings_clear_all" msgid="8739804325997655980">"Limpar tudo"</string>
- <string name="website_settings_clear_all_dialog_title" msgid="7791826325122461718">"Limpar todas as configurações do site?"</string>
- <string name="website_settings_clear_all_dialog_message" msgid="6150502090601476333">"Todos os dados do site e permissões de local serão excluídos."</string>
- <string name="website_settings_clear_all_dialog_ok_button" msgid="6401582240627669431">"Excluir todos os dados"</string>
- <string name="website_settings_clear_all_dialog_cancel_button" msgid="1896757051856611674">"Cancelar"</string>
+ <!-- no translation found for website_settings_clear_all (8739804325997655980) -->
+ <skip />
+ <!-- no translation found for website_settings_clear_all_dialog_title (7791826325122461718) -->
+ <skip />
+ <!-- no translation found for website_settings_clear_all_dialog_message (6150502090601476333) -->
+ <skip />
+ <!-- no translation found for website_settings_clear_all_dialog_ok_button (6401582240627669431) -->
+ <skip />
+ <!-- no translation found for website_settings_clear_all_dialog_cancel_button (1896757051856611674) -->
+ <skip />
<string name="zoom_overview_button_text" msgid="4146579940085488881">"Visão geral"</string>
</resources>
diff --git a/res/values-ru/arrays.xml b/res/values-ru/arrays.xml
deleted file mode 100644
index b3a5146..0000000
--- a/res/values-ru/arrays.xml
+++ /dev/null
@@ -1,32 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2009 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.
--->
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string-array name="webstorage_quota_entries">
- <item msgid="5433313236875537673">"Квота не назначена"</item>
- <item msgid="7374272188672967690">"5 МБ"</item>
- <item msgid="8699352701856136738">"10 МБ"</item>
- <item msgid="2018822431469084862">"30 МБ"</item>
- <item msgid="5383642976774534074">"100 МБ"</item>
- </string-array>
- <string-array name="webstorage_quota_entries_values">
- <item msgid="7620410313725236055">"0"</item>
- <item msgid="4302688814760304206">"5"</item>
- <item msgid="7291990205847586165">"10"</item>
- <item msgid="916913372287112423">"30"</item>
- <item msgid="3437188301324229987">"100"</item>
- </string-array>
-</resources>
diff --git a/res/values-ru/strings.xml b/res/values-ru/strings.xml
index 4af4b4c..4f34126 100644
--- a/res/values-ru/strings.xml
+++ b/res/values-ru/strings.xml
@@ -16,8 +16,10 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="application_name" msgid="1935869255545976415">"Браузер"</string>
- <string name="new_tab" msgid="4505722538297295141">"Новое окно"</string>
- <string name="active_tabs" msgid="3050623868203544623">"Окна"</string>
+ <!-- no translation found for new_tab (4505722538297295141) -->
+ <skip />
+ <!-- no translation found for active_tabs (3050623868203544623) -->
+ <skip />
<string name="tab_bookmarks" msgid="2305793036003473653">"Закладки"</string>
<string name="tab_most_visited" msgid="1077402532455000703">"Часто посещаемые"</string>
<string name="tab_history" msgid="1979267558744613746">"История"</string>
@@ -66,7 +68,7 @@
<string name="forward" msgid="4288210890526641577">"Переслать"</string>
<string name="save" msgid="5922311934992468496">"ОК"</string>
<string name="do_not_save" msgid="6777633870113477714">"Отмена"</string>
- <string name="location" msgid="969988560160364559">"URL-адрес"</string>
+ <string name="location" msgid="969988560160364559">"Место"</string>
<string name="name" msgid="5990326151488445481">"Имя"</string>
<string name="http" msgid="2163722670597250102">"http://"</string>
<string name="save_to_bookmarks" msgid="588165100024086565">"Добавить закладку"</string>
@@ -78,17 +80,19 @@
<string name="remove_history_item" msgid="5021424935726728618">"Удалить из истории"</string>
<string name="set_as_homepage" msgid="4752937379414905560">"Сделать главной страницей"</string>
<string name="bookmark_saved" msgid="2766434679871317557">"Сохранено в закладках."</string>
- <string name="bookmark_not_saved" msgid="700600955089376724">"Не удалось сохранить закладку."</string>
- <string name="homepage_set" msgid="8768087280310966395">"Главная страница установлена."</string>
+ <!-- no translation found for bookmark_not_saved (700600955089376724) -->
+ <skip />
+ <!-- no translation found for homepage_set (8768087280310966395) -->
+ <skip />
<string name="bookmark_needs_title" msgid="6245900436119218187">"Необходимо указать имя закладки."</string>
<string name="bookmark_needs_url" msgid="7809876865972755158">"Необходимо указать место закладки."</string>
<string name="empty_bookmark" msgid="7008697085928540511">"Невозможно создать пустую закладку."</string>
<string name="bookmark_url_not_valid" msgid="6719785633980202419">"URL недействителен."</string>
<string name="delete_bookmark" msgid="2422989994934201992">"Удалить"</string>
<string name="bookmark_page" msgid="6845189305130307274">"Добавить в закладки последнюю просмотренную страницу"</string>
- <string name="switch_to_thumbnails" msgid="5493351529609043151">"Уменьшенные изображения"</string>
+ <string name="switch_to_thumbnails" msgid="5493351529609043151">"Уменьшенное изображение"</string>
<string name="switch_to_list" msgid="8900531247982121055">"В виде списка"</string>
- <string name="current_page" msgid="7510129573681663135">"на "</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>
<string name="new_window" msgid="8117889615360211551">"Новое окно"</string>
@@ -107,7 +111,8 @@
<string name="shortcut_bookmark" msgid="3974876480401135895">"Добавить в закладки"</string>
<string name="history" msgid="2451240511251410032">"История"</string>
<string name="menu_view_download" msgid="2124570321712995120">"Загрузки"</string>
- <string name="copy_page_url" msgid="7635062169011319208">"Копировать URL страницы"</string>
+ <!-- no translation found for copy_page_url (7635062169011319208) -->
+ <skip />
<string name="share_page" msgid="593756995297268343">"Отправить страницу"</string>
<string name="contextmenu_openlink" msgid="7237961252214188935">"Открыть"</string>
<string name="contextmenu_openlink_newwindow" msgid="992765050093960353">"Открыть в новом окне"</string>
@@ -122,40 +127,54 @@
<string name="contextmenu_add_contact" msgid="3183511922223645716">"Добавить контакт"</string>
<string name="contextmenu_send_mail" msgid="1014513374828775660">"Отправить сообщение по электронной почте"</string>
<string name="contextmenu_map" msgid="7471390435434034912">"Карта"</string>
- <string name="choosertitle_sharevia" msgid="4600490613341909086">"Способ отправки"</string>
+ <!-- no translation found for choosertitle_sharevia (4600490613341909086) -->
+ <skip />
<string name="clear" msgid="7070043081700011461">"Очистить"</string>
<string name="replace" msgid="4843033491070384047">"Заменить"</string>
<string name="browser_bookmarks_page_bookmarks_text" msgid="6787605028726162673">"Закладки"</string>
<string name="menu_preferences" msgid="6709237687234102240">"Настройки"</string>
<string name="pref_content_title" msgid="722227111894838633">"Настройки содержания страницы"</string>
<string name="pref_content_load_images" msgid="2125616852957377561">"Загружать картинки"</string>
- <string name="pref_content_load_images_summary" msgid="5055874125248398584">"Показывать картинки на веб-страницах"</string>
+ <!-- no translation found for pref_content_load_images_summary (5055874125248398584) -->
+ <skip />
<string name="pref_content_block_popups" msgid="7808433807197256726">"Блокировать всплывающие окна"</string>
<string name="pref_content_javascript" msgid="4570972030299516843">"Включить JavaScript"</string>
<string name="pref_content_open_in_background" msgid="824123779725118663">"Открывать в фоновом режиме"</string>
- <string name="pref_content_plugins" msgid="7231944644794301582">"Включить плагины"</string>
- <string name="pref_content_open_in_background_summary" msgid="1737664075721181678">"Открывать новые окна позади текущего окна"</string>
+ <!-- no translation found for pref_content_plugins (7231944644794301582) -->
+ <skip />
+ <!-- no translation found for pref_content_open_in_background_summary (1737664075721181678) -->
+ <skip />
<string name="pref_content_homepage" msgid="6082437160778559806">"Выбрать главную страницу"</string>
<string name="pref_content_autofit" msgid="8260474534053660809">"Подгонять страницы"</string>
- <string name="pref_content_autofit_summary" msgid="4587831659894879986">"Подгонять веб-страницы под размер экрана"</string>
- <string name="pref_content_landscape_only" msgid="2022546812766219672">"Только альбомный вид"</string>
- <string name="pref_content_landscape_only_summary" msgid="1008238895535428855">"Показывать страницы только в альбомной ориентации"</string>
+ <!-- no translation found for pref_content_autofit_summary (4587831659894879986) -->
+ <skip />
+ <!-- no translation found for pref_content_landscape_only (2022546812766219672) -->
+ <skip />
+ <!-- no translation found for pref_content_landscape_only_summary (1008238895535428855) -->
+ <skip />
<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>
- <string name="pref_privacy_clear_cache_dlg" msgid="5541011591300753881">"Содержание и базы данных, сохраненные локально, будут удалены."</string>
+ <!-- no translation found for pref_privacy_clear_cache_dlg (5541011591300753881) -->
+ <skip />
<string name="pref_privacy_clear_cookies" msgid="3095583579133780331">"Очистить все данные cookie"</string>
- <string name="pref_privacy_clear_cookies_summary" msgid="6962742063990677520">"Удалить все файлы cookie браузера"</string>
- <string name="pref_privacy_clear_cookies_dlg" msgid="552855688091432682">"Все файлы cookie будут удалены."</string>
+ <!-- no translation found for pref_privacy_clear_cookies_summary (6962742063990677520) -->
+ <skip />
+ <!-- no translation found for pref_privacy_clear_cookies_dlg (552855688091432682) -->
+ <skip />
<string name="pref_privacy_clear_history" msgid="8723795508825198477">"Очистить историю"</string>
<string name="pref_privacy_clear_history_summary" msgid="6868501330708940734">"Очистить историю браузера"</string>
- <string name="pref_privacy_clear_history_dlg" msgid="544903007914753853">"История браузера будет очищена."</string>
+ <!-- no translation found for pref_privacy_clear_history_dlg (544903007914753853) -->
+ <skip />
<string name="pref_privacy_clear_form_data" msgid="4232668196344383987">"Очистить данные формы"</string>
<string name="pref_privacy_clear_form_data_summary" msgid="1790390894719517167">"Очистить все данные сохраненных форм"</string>
- <string name="pref_privacy_clear_form_data_dlg" msgid="4443621086781197928">"Все данные сохраненных форм будут удалены."</string>
+ <!-- no translation found for pref_privacy_clear_form_data_dlg (4443621086781197928) -->
+ <skip />
<string name="pref_privacy_clear_passwords" msgid="4750234112289277480">"Очистить пароли"</string>
- <string name="pref_privacy_clear_passwords_summary" msgid="8856782718942903335">"Удалить все сохраненные пароли"</string>
- <string name="pref_privacy_clear_passwords_dlg" msgid="2083869328824248255">"Все сохраненные пароли будут удалены."</string>
+ <!-- no translation found for pref_privacy_clear_passwords_summary (8856782718942903335) -->
+ <skip />
+ <!-- no translation found for pref_privacy_clear_passwords_dlg (2083869328824248255) -->
+ <skip />
<string name="pref_privacy_enable_geolocation" msgid="1395040170290765686">"Включить местоположение"</string>
<string name="pref_privacy_enable_geolocation_summary" msgid="8437020934664306205">"Разрешить сайтам запрашивать данные доступа к местоположению"</string>
<string name="pref_privacy_clear_geolocation_access" msgid="6649680770030042980">"Удалить данные доступа к местоположению"</string>
@@ -163,7 +182,8 @@
<string name="pref_privacy_clear_geolocation_access_dlg" msgid="7327063124488827244">"Удалить данные доступа к местоположению для всех сайтов"</string>
<string name="pref_security_title" msgid="5763978646932160021">"Настройки безопасности"</string>
<string name="pref_security_remember_passwords" msgid="6492957683454529549">"Сохранять пароли"</string>
- <string name="pref_security_remember_passwords_summary" msgid="256388703356349137">"Сохранять имена пользователей и пароли веб-сайтов"</string>
+ <!-- no translation found for pref_security_remember_passwords_summary (256388703356349137) -->
+ <skip />
<string name="pref_security_save_form_data" msgid="1213669802810198893">"Сохранять данные форм"</string>
<string name="pref_security_save_form_data_summary" msgid="4994074685153708026">"Запоминать введенные данные для дальнейшего использования"</string>
<string name="pref_security_show_security_warning" msgid="8901135676266754559">"Показывать предупреждения безопасности"</string>
@@ -186,14 +206,17 @@
<item msgid="3840999588443167001">"Крупно"</item>
</string-array>
<string name="pref_default_zoom_dialogtitle" msgid="6095974367125109021">"Масштаб по умолчанию"</string>
- <string name="pref_content_load_page" msgid="2219810141690955452">"Открывать страницы в обзоре окон"</string>
- <string name="pref_content_load_page_summary" msgid="8792093504054149369">"Показывать обзор новых открытых страниц"</string>
+ <!-- no translation found for pref_content_load_page (2219810141690955452) -->
+ <skip />
+ <!-- no translation found for pref_content_load_page_summary (8792093504054149369) -->
+ <skip />
<string name="pref_extras_title" msgid="3091250467679722382">"Расширенные настройки"</string>
<string name="pref_extras_website_settings" msgid="67866640052455549">"Настройки веб-сайта"</string>
<string name="pref_extras_website_settings_summary" msgid="3917568895776162240">"Просмотреть дополнительные настройки для отдельных сайтов"</string>
<string name="pref_extras_reset_default" msgid="8904000515846202110">"Восстановить настройки по умолчанию"</string>
- <string name="pref_extras_reset_default_summary" msgid="7984680562706914966">"Очистить все данные браузера и включить настройки по умолчанию"</string>
- <string name="pref_extras_reset_default_dlg" msgid="6894807766578874830">"Все данные браузера будут удалены, настройки по умолчанию будут восстановлены."</string>
+ <string name="pref_extras_reset_default_summary" msgid="7984680562706914966">"Очистить все данные браузера и восстановить все настройки по умолчанию"</string>
+ <!-- no translation found for pref_extras_reset_default_dlg (6894807766578874830) -->
+ <skip />
<string name="pref_extras_reset_default_dlg_title" msgid="2250334970728938936">"Восстановить настройки по умолчанию"</string>
<string name="pref_development_title" msgid="3263854204533056480">"Отладка"</string>
<string name="pref_default_text_encoding" msgid="5742965543955558478">"Кодировка текста"</string>
@@ -206,22 +229,22 @@
</string-array>
<string name="pref_default_text_encoding_dialogtitle" msgid="5508255018084978547">"Кодировка текста"</string>
<string name="pref_default_text_encoding_default" msgid="5272126711231936722">"Latin-1"</string>
- <string name="browserFrameRedirect" msgid="7049675479777828343">"Перенаправление"</string>
- <string name="browserFrame307Post" msgid="1429094844669510768">"Вы перенаправлены с этой страницы. Отправить ваши данные формы в новое место?"</string>
<string name="browserFrameNetworkErrorLabel" msgid="126892350904924893">"Проблема с подключением"</string>
<string name="browserFrameFileErrorLabel" msgid="8063691502792670367">"Проблема с файлом"</string>
<string name="browserFrameFormResubmitLabel" msgid="2685923472682180360">"Подтверждение"</string>
<string name="browserFrameFormResubmitMessage" msgid="2752182215695632138">"Страница, которую вы пытаетесь просмотреть, содержит уже отправленные данные (POSTDATA). Если отправить их еще раз, произойдет повтор всех действий, которые форма выполнила на странице (например поиск или покупка через Интернет)."</string>
<string name="loadSuspendedTitle" msgid="675991625288706944">"Сетевое подключение отсутствует"</string>
- <string name="loadSuspended" msgid="3133656588880851273">"Браузер не может загрузить эту страницу, так как отсутствует подключение к Интернету."</string>
+ <!-- no translation found for loadSuspended (3133656588880851273) -->
+ <skip />
<string name="clear_history" msgid="5998307092715979619">"Очистить историю"</string>
- <string name="browser_history" msgid="1038987118290272525">"Недавно посещенные"</string>
+ <!-- no translation found for browser_history (1038987118290272525) -->
+ <skip />
<string name="empty_history" msgid="8738772352308207274">"История браузера пуста."</string>
<string name="add_new_bookmark" msgid="8086367791400349049">"Добавить закладку…"</string>
<string name="add_bookmark_short" msgid="3783984330998103735">"Добавить"</string>
<string name="search_hint" msgid="4647356319916631820">"Введите условия поиска или URL-адрес"</string>
<string name="search_button_text" msgid="5235226933877634410">"Поиск"</string>
- <string name="search_settings_description" msgid="1422401062529014107">"Закладки и история поиска"</string>
+ <string name="search_settings_description" msgid="1422401062529014107">"Закладки и просмотренные страницы"</string>
<string name="attention" msgid="3473639060042811244">"Внимание"</string>
<string name="popup_window_attempt" msgid="2673111696288657989">"Этот сайт пытается открыть всплывающее окно."</string>
<string name="allow" msgid="1157313689171991335">"Разрешить"</string>
@@ -258,7 +281,8 @@
<string name="download_pending_network" msgid="6548714525679461053">"Ожидание подключения для передачи данных…"</string>
<string name="download_running_paused" msgid="6418029352085656495">"Ожидание подключения для передачи данных…"</string>
<string name="download_canceled" msgid="6057083743144492515">"Загрузка отменена."</string>
- <string name="download_not_acceptable" msgid="313769696131563652">"Загрузка невозможна. Содержание не поддерживается телефоном."</string>
+ <!-- no translation found for download_not_acceptable (313769696131563652) -->
+ <skip />
<string name="download_file_error" msgid="1206648050615176113">"Невозможно завершить загрузку. Недостаточно места."</string>
<string name="download_length_required" msgid="9038605488460437406">"Загрузка невозможна. Размер файла не определен."</string>
<string name="download_precondition_failed" msgid="8327584102874295580">"Загрузка прервана и не может быть возобновлена."</string>
@@ -270,14 +294,20 @@
<string name="webstorage_clear_data_summary" msgid="3523128713743907805">"Удалить все базы данных, связанные с этим сайтом"</string>
<string name="webstorage_clear_data_dialog_title" msgid="345457466368974706">"Удалить сохраненные данные"</string>
<string name="webstorage_clear_data_dialog_message" msgid="6678281256970470125">"Все данные, сохраненные этим веб-сайтом, будут удалены"</string>
- <string name="webstorage_clear_data_dialog_ok_button" msgid="2516563534211898636">"Удалить все"</string>
+ <!-- no translation found for webstorage_clear_data_dialog_ok_button (2516563534211898636) -->
+ <skip />
<string name="webstorage_clear_data_dialog_cancel_button" msgid="2028867751958942762">"Отмена"</string>
<string name="webstorage_origin_summary_mb_stored" msgid="1985885826292236210">"Объем занятой памяти телефона (МБ)"</string>
- <string name="loading_video" msgid="4887871585216091096">"Загрузка видео"</string>
- <string name="geolocation_permissions_prompt_message" msgid="356796102004052471">"<xliff:g id="WEBSITE_ORIGIN">%s</xliff:g> запрашивает данные о вашем местоположении"</string>
- <string name="geolocation_permissions_prompt_share" msgid="9084486342048347976">"Сообщить местоположение"</string>
- <string name="geolocation_permissions_prompt_dont_share" msgid="6303025160237860300">"Отклонить"</string>
- <string name="geolocation_permissions_prompt_remember" msgid="3118526300707348308">"Запомнить настройки"</string>
+ <!-- no translation found for loading_video (4887871585216091096) -->
+ <skip />
+ <!-- no translation found for geolocation_permissions_prompt_message (356796102004052471) -->
+ <skip />
+ <!-- no translation found for geolocation_permissions_prompt_share (9084486342048347976) -->
+ <skip />
+ <!-- no translation found for geolocation_permissions_prompt_dont_share (6303025160237860300) -->
+ <skip />
+ <!-- no translation found for geolocation_permissions_prompt_remember (3118526300707348308) -->
+ <skip />
<string name="geolocation_settings_page_title" msgid="1745477985097536528">"Удалить данные доступа к местоположению"</string>
<string name="geolocation_settings_page_summary_allowed" msgid="9180251524290811398">"Этот сайт сейчас имеет доступ к вашему местоположению"</string>
<string name="geolocation_settings_page_summary_not_allowed" msgid="4589649082203102544">"Этот сайт в настоящее время не имеет доступа к вашему местоположению"</string>
@@ -285,10 +315,15 @@
<string name="geolocation_settings_page_dialog_message" msgid="7586671987576403993">"Данные доступа к местоположению для этого сайта будут удалены"</string>
<string name="geolocation_settings_page_dialog_ok_button" msgid="4789434178048077287">"Удалить данные о доступе"</string>
<string name="geolocation_settings_page_dialog_cancel_button" msgid="7941036504673409747">"Отмена"</string>
- <string name="website_settings_clear_all" msgid="8739804325997655980">"Удалить все"</string>
- <string name="website_settings_clear_all_dialog_title" msgid="7791826325122461718">"Удалить все настройки веб-сайтов?"</string>
- <string name="website_settings_clear_all_dialog_message" msgid="6150502090601476333">"Все данные сайтов и разрешения относительно местоположения будут удалены."</string>
- <string name="website_settings_clear_all_dialog_ok_button" msgid="6401582240627669431">"Удалить все данные"</string>
- <string name="website_settings_clear_all_dialog_cancel_button" msgid="1896757051856611674">"Отмена"</string>
+ <!-- no translation found for website_settings_clear_all (8739804325997655980) -->
+ <skip />
+ <!-- no translation found for website_settings_clear_all_dialog_title (7791826325122461718) -->
+ <skip />
+ <!-- no translation found for website_settings_clear_all_dialog_message (6150502090601476333) -->
+ <skip />
+ <!-- no translation found for website_settings_clear_all_dialog_ok_button (6401582240627669431) -->
+ <skip />
+ <!-- no translation found for website_settings_clear_all_dialog_cancel_button (1896757051856611674) -->
+ <skip />
<string name="zoom_overview_button_text" msgid="4146579940085488881">"Обзор"</string>
</resources>
diff --git a/res/values-sv/arrays.xml b/res/values-sv/arrays.xml
deleted file mode 100644
index 0f5814d..0000000
--- a/res/values-sv/arrays.xml
+++ /dev/null
@@ -1,32 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2009 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.
--->
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string-array name="webstorage_quota_entries">
- <item msgid="5433313236875537673">"Ingen kvot tillåts"</item>
- <item msgid="7374272188672967690">"5 MB"</item>
- <item msgid="8699352701856136738">"10 MB"</item>
- <item msgid="2018822431469084862">"30 MB"</item>
- <item msgid="5383642976774534074">"100 MB"</item>
- </string-array>
- <string-array name="webstorage_quota_entries_values">
- <item msgid="7620410313725236055">"0"</item>
- <item msgid="4302688814760304206">"5"</item>
- <item msgid="7291990205847586165">"10"</item>
- <item msgid="916913372287112423">"30"</item>
- <item msgid="3437188301324229987">"100"</item>
- </string-array>
-</resources>
diff --git a/res/values-sv/strings.xml b/res/values-sv/strings.xml
index f1cb487..c3c60dd 100644
--- a/res/values-sv/strings.xml
+++ b/res/values-sv/strings.xml
@@ -15,9 +15,11 @@
-->
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="application_name" msgid="1935869255545976415">"Webbläs."</string>
- <string name="new_tab" msgid="4505722538297295141">"Nytt fönster"</string>
- <string name="active_tabs" msgid="3050623868203544623">"Fönster"</string>
+ <string name="application_name" msgid="1935869255545976415">"Webbläsare"</string>
+ <!-- no translation found for new_tab (4505722538297295141) -->
+ <skip />
+ <!-- no translation found for active_tabs (3050623868203544623) -->
+ <skip />
<string name="tab_bookmarks" msgid="2305793036003473653">"Bokmärken"</string>
<string name="tab_most_visited" msgid="1077402532455000703">"Mest besökta"</string>
<string name="tab_history" msgid="1979267558744613746">"Historik"</string>
@@ -63,7 +65,7 @@
<string name="stop" msgid="5687251076030630074">"Stoppa"</string>
<string name="reload" msgid="8585220783228408062">"Uppdatera"</string>
<string name="back" msgid="8414603107175713668">"Tillbaka"</string>
- <string name="forward" msgid="4288210890526641577">"Framåt"</string>
+ <string name="forward" msgid="4288210890526641577">"Vidarebefordra"</string>
<string name="save" msgid="5922311934992468496">"OK"</string>
<string name="do_not_save" msgid="6777633870113477714">"Avbryt"</string>
<string name="location" msgid="969988560160364559">"Plats"</string>
@@ -78,8 +80,10 @@
<string name="remove_history_item" msgid="5021424935726728618">"Ta bort från historiken"</string>
<string name="set_as_homepage" msgid="4752937379414905560">"Använd som startsida"</string>
<string name="bookmark_saved" msgid="2766434679871317557">"Bokmärke sparat."</string>
- <string name="bookmark_not_saved" msgid="700600955089376724">"Det gick inte att spara bokmärket."</string>
- <string name="homepage_set" msgid="8768087280310966395">"Startsida har angetts."</string>
+ <!-- no translation found for bookmark_not_saved (700600955089376724) -->
+ <skip />
+ <!-- no translation found for homepage_set (8768087280310966395) -->
+ <skip />
<string name="bookmark_needs_title" msgid="6245900436119218187">"Du måste ange ett namn på bokmärket."</string>
<string name="bookmark_needs_url" msgid="7809876865972755158">"Du måste ange en plats för bokmärket."</string>
<string name="empty_bookmark" msgid="7008697085928540511">"Det går inte att skapa tomma bokmärken."</string>
@@ -107,7 +111,8 @@
<string name="shortcut_bookmark" msgid="3974876480401135895">"Bokmärke"</string>
<string name="history" msgid="2451240511251410032">"Historik"</string>
<string name="menu_view_download" msgid="2124570321712995120">"Hämtningar"</string>
- <string name="copy_page_url" msgid="7635062169011319208">"Kopiera sidans webbadress"</string>
+ <!-- no translation found for copy_page_url (7635062169011319208) -->
+ <skip />
<string name="share_page" msgid="593756995297268343">"Dela sida"</string>
<string name="contextmenu_openlink" msgid="7237961252214188935">"Öppna"</string>
<string name="contextmenu_openlink_newwindow" msgid="992765050093960353">"Öppna i nytt fönster"</string>
@@ -122,40 +127,54 @@
<string name="contextmenu_add_contact" msgid="3183511922223645716">"Lägg till kontakt"</string>
<string name="contextmenu_send_mail" msgid="1014513374828775660">"Skicka e-post"</string>
<string name="contextmenu_map" msgid="7471390435434034912">"Karta"</string>
- <string name="choosertitle_sharevia" msgid="4600490613341909086">"Dela via"</string>
+ <!-- no translation found for choosertitle_sharevia (4600490613341909086) -->
+ <skip />
<string name="clear" msgid="7070043081700011461">"Rensa"</string>
<string name="replace" msgid="4843033491070384047">"Ersätt"</string>
<string name="browser_bookmarks_page_bookmarks_text" msgid="6787605028726162673">"Bokmärken"</string>
<string name="menu_preferences" msgid="6709237687234102240">"Inställningar"</string>
<string name="pref_content_title" msgid="722227111894838633">"Inställningar för sidinnehåll"</string>
<string name="pref_content_load_images" msgid="2125616852957377561">"Överför bilder"</string>
- <string name="pref_content_load_images_summary" msgid="5055874125248398584">"Visa bilder på webbsidor"</string>
+ <!-- no translation found for pref_content_load_images_summary (5055874125248398584) -->
+ <skip />
<string name="pref_content_block_popups" msgid="7808433807197256726">"Blockera popup-fönster"</string>
<string name="pref_content_javascript" msgid="4570972030299516843">"Aktivera JavaScript"</string>
<string name="pref_content_open_in_background" msgid="824123779725118663">"Öppen i bakgrunden"</string>
- <string name="pref_content_plugins" msgid="7231944644794301582">"Aktivera plugin-program"</string>
- <string name="pref_content_open_in_background_summary" msgid="1737664075721181678">"Öppna nya fönster bakom det aktiva"</string>
+ <!-- no translation found for pref_content_plugins (7231944644794301582) -->
+ <skip />
+ <!-- no translation found for pref_content_open_in_background_summary (1737664075721181678) -->
+ <skip />
<string name="pref_content_homepage" msgid="6082437160778559806">"Ange startsida"</string>
<string name="pref_content_autofit" msgid="8260474534053660809">"Autoanpassa sidor"</string>
- <string name="pref_content_autofit_summary" msgid="4587831659894879986">"Anpassa webbsidor efter skärmen"</string>
- <string name="pref_content_landscape_only" msgid="2022546812766219672">"Endast liggande"</string>
- <string name="pref_content_landscape_only_summary" msgid="1008238895535428855">"Visa bara sidor i det bredare, liggande formatet"</string>
+ <!-- no translation found for pref_content_autofit_summary (4587831659894879986) -->
+ <skip />
+ <!-- no translation found for pref_content_landscape_only (2022546812766219672) -->
+ <skip />
+ <!-- no translation found for pref_content_landscape_only_summary (1008238895535428855) -->
+ <skip />
<string name="pref_privacy_title" msgid="1052470980370846151">"Sekretessinställningar"</string>
<string name="pref_privacy_clear_cache" msgid="3380316479925886998">"Rensa cacheminne"</string>
<string name="pref_privacy_clear_cache_summary" msgid="2216463577207991454">"Ta bort innehåll och databaser som cachelagrats lokalt"</string>
- <string name="pref_privacy_clear_cache_dlg" msgid="5541011591300753881">"Innehåll och databaser som cachelagrats lokalt tas bort."</string>
+ <!-- no translation found for pref_privacy_clear_cache_dlg (5541011591300753881) -->
+ <skip />
<string name="pref_privacy_clear_cookies" msgid="3095583579133780331">"Ta bort alla cookie-data"</string>
- <string name="pref_privacy_clear_cookies_summary" msgid="6962742063990677520">"Ta bort alla webbläsarens cookies"</string>
- <string name="pref_privacy_clear_cookies_dlg" msgid="552855688091432682">"Alla cookies tas bort."</string>
+ <!-- no translation found for pref_privacy_clear_cookies_summary (6962742063990677520) -->
+ <skip />
+ <!-- no translation found for pref_privacy_clear_cookies_dlg (552855688091432682) -->
+ <skip />
<string name="pref_privacy_clear_history" msgid="8723795508825198477">"Rensa historik"</string>
<string name="pref_privacy_clear_history_summary" msgid="6868501330708940734">"Rensa webbläsarhistoriken"</string>
- <string name="pref_privacy_clear_history_dlg" msgid="544903007914753853">"Webbläsarhistoriken kommer att tas bort."</string>
+ <!-- no translation found for pref_privacy_clear_history_dlg (544903007914753853) -->
+ <skip />
<string name="pref_privacy_clear_form_data" msgid="4232668196344383987">"Rensa data i formulär"</string>
<string name="pref_privacy_clear_form_data_summary" msgid="1790390894719517167">"Rensa data från alla sparade formulär"</string>
- <string name="pref_privacy_clear_form_data_dlg" msgid="4443621086781197928">"Alla sparade formulärdata kommer att tas bort."</string>
+ <!-- no translation found for pref_privacy_clear_form_data_dlg (4443621086781197928) -->
+ <skip />
<string name="pref_privacy_clear_passwords" msgid="4750234112289277480">"Ta bort lösenord"</string>
- <string name="pref_privacy_clear_passwords_summary" msgid="8856782718942903335">"Ta bort alla sparade lösenord"</string>
- <string name="pref_privacy_clear_passwords_dlg" msgid="2083869328824248255">"Alla sparade lösenord tas bort."</string>
+ <!-- no translation found for pref_privacy_clear_passwords_summary (8856782718942903335) -->
+ <skip />
+ <!-- no translation found for pref_privacy_clear_passwords_dlg (2083869328824248255) -->
+ <skip />
<string name="pref_privacy_enable_geolocation" msgid="1395040170290765686">"Aktivera plats"</string>
<string name="pref_privacy_enable_geolocation_summary" msgid="8437020934664306205">"Tillåt att webbplatser begär åtkomst till din plats"</string>
<string name="pref_privacy_clear_geolocation_access" msgid="6649680770030042980">"Ta bort platsåtkomst"</string>
@@ -163,7 +182,8 @@
<string name="pref_privacy_clear_geolocation_access_dlg" msgid="7327063124488827244">"Ta bort platsåtkomst för alla webbplatser"</string>
<string name="pref_security_title" msgid="5763978646932160021">"Säkerhetsinställningar"</string>
<string name="pref_security_remember_passwords" msgid="6492957683454529549">"Kom ihåg lösenord"</string>
- <string name="pref_security_remember_passwords_summary" msgid="256388703356349137">"Spara användarnamn och lösenord för webbplatser"</string>
+ <!-- no translation found for pref_security_remember_passwords_summary (256388703356349137) -->
+ <skip />
<string name="pref_security_save_form_data" msgid="1213669802810198893">"Spara formulärdata"</string>
<string name="pref_security_save_form_data_summary" msgid="4994074685153708026">"Kom ihåg data som jag anger i formulär för senare bruk"</string>
<string name="pref_security_show_security_warning" msgid="8901135676266754559">"Visa säkerhetsvarningar"</string>
@@ -186,14 +206,17 @@
<item msgid="3840999588443167001">"Nära"</item>
</string-array>
<string name="pref_default_zoom_dialogtitle" msgid="6095974367125109021">"Standardinställning för zoom"</string>
- <string name="pref_content_load_page" msgid="2219810141690955452">"Öppna sidor i översikt"</string>
- <string name="pref_content_load_page_summary" msgid="8792093504054149369">"Visa översikt över nyligen öppnade sidor"</string>
+ <!-- no translation found for pref_content_load_page (2219810141690955452) -->
+ <skip />
+ <!-- no translation found for pref_content_load_page_summary (8792093504054149369) -->
+ <skip />
<string name="pref_extras_title" msgid="3091250467679722382">"Avancerade inställningar"</string>
<string name="pref_extras_website_settings" msgid="67866640052455549">"Webbplatsinställningar"</string>
<string name="pref_extras_website_settings_summary" msgid="3917568895776162240">"Visa avancerade inställningar för enskilda webbplatser"</string>
- <string name="pref_extras_reset_default" msgid="8904000515846202110">"Återställ standardinställningarna"</string>
+ <string name="pref_extras_reset_default" msgid="8904000515846202110">"Återställ standardinställn."</string>
<string name="pref_extras_reset_default_summary" msgid="7984680562706914966">"Ta bort alla data i webbläsaren och återställ standardinställningarna"</string>
- <string name="pref_extras_reset_default_dlg" msgid="6894807766578874830">"Alla data i webbläsaren tas bort och standardinställningarna återställs."</string>
+ <!-- no translation found for pref_extras_reset_default_dlg (6894807766578874830) -->
+ <skip />
<string name="pref_extras_reset_default_dlg_title" msgid="2250334970728938936">"Återställ standardinställn."</string>
<string name="pref_development_title" msgid="3263854204533056480">"Felsökning"</string>
<string name="pref_default_text_encoding" msgid="5742965543955558478">"Textkodning"</string>
@@ -206,16 +229,16 @@
</string-array>
<string name="pref_default_text_encoding_dialogtitle" msgid="5508255018084978547">"Textkodning"</string>
<string name="pref_default_text_encoding_default" msgid="5272126711231936722">"Latin-1"</string>
- <string name="browserFrameRedirect" msgid="7049675479777828343">"Omdirigera"</string>
- <string name="browserFrame307Post" msgid="1429094844669510768">"Den här webbsidan omdirigeras. Vill du skicka uppgifterna i formuläret till den nya platsen?"</string>
<string name="browserFrameNetworkErrorLabel" msgid="126892350904924893">"Problem med dataanslutning"</string>
<string name="browserFrameFileErrorLabel" msgid="8063691502792670367">"Problem med filen"</string>
<string name="browserFrameFormResubmitLabel" msgid="2685923472682180360">"Bekräfta"</string>
<string name="browserFrameFormResubmitMessage" msgid="2752182215695632138">"Sidan du försöker öppna innehåller data som redan har skickats (POSTDATA). Om du skickar uppgifterna igen kommer alla åtgärder i formuläret på sidan (till exempel sökningar eller onlineköp) att utföras en gång till."</string>
<string name="loadSuspendedTitle" msgid="675991625288706944">"Ingen nätverksanslutning"</string>
- <string name="loadSuspended" msgid="3133656588880851273">"Webbläsaren kan inte läsa in sidan eftersom det inte finns någon anslutning till Internet."</string>
+ <!-- no translation found for loadSuspended (3133656588880851273) -->
+ <skip />
<string name="clear_history" msgid="5998307092715979619">"Rensa historik"</string>
- <string name="browser_history" msgid="1038987118290272525">"Senast besökta sidor"</string>
+ <!-- no translation found for browser_history (1038987118290272525) -->
+ <skip />
<string name="empty_history" msgid="8738772352308207274">"Det finns ingen webbläsarhistorik."</string>
<string name="add_new_bookmark" msgid="8086367791400349049">"Lägg till bokmärke…"</string>
<string name="add_bookmark_short" msgid="3783984330998103735">"Lägg till"</string>
@@ -258,7 +281,8 @@
<string name="download_pending_network" msgid="6548714525679461053">"Väntar på dataanslutning…"</string>
<string name="download_running_paused" msgid="6418029352085656495">"Väntar på dataanslutning…"</string>
<string name="download_canceled" msgid="6057083743144492515">"Hämtningen avbröts."</string>
- <string name="download_not_acceptable" msgid="313769696131563652">"Det gick inte att hämta. Innehållet stöds inte på telefonen."</string>
+ <!-- no translation found for download_not_acceptable (313769696131563652) -->
+ <skip />
<string name="download_file_error" msgid="1206648050615176113">"Det går inte att hämta. Det finns inte tillräckligt med utrymme."</string>
<string name="download_length_required" msgid="9038605488460437406">"Det går inte att hämta eftersom objektets storlek inte kan avläsas."</string>
<string name="download_precondition_failed" msgid="8327584102874295580">"Hämtningen avbröts. Den kan inte återupptas."</string>
@@ -270,14 +294,20 @@
<string name="webstorage_clear_data_summary" msgid="3523128713743907805">"Ta bort alla databaser som är kopplade till den här webbplatsen"</string>
<string name="webstorage_clear_data_dialog_title" msgid="345457466368974706">"Ta bort sparade data"</string>
<string name="webstorage_clear_data_dialog_message" msgid="6678281256970470125">"Alla data som sparats på webbplatsen tas bort"</string>
- <string name="webstorage_clear_data_dialog_ok_button" msgid="2516563534211898636">"Ta bort alla"</string>
+ <!-- no translation found for webstorage_clear_data_dialog_ok_button (2516563534211898636) -->
+ <skip />
<string name="webstorage_clear_data_dialog_cancel_button" msgid="2028867751958942762">"Avbryt"</string>
<string name="webstorage_origin_summary_mb_stored" msgid="1985885826292236210">"MB har sparats på telefonen"</string>
- <string name="loading_video" msgid="4887871585216091096">"Läser in videoklipp"</string>
- <string name="geolocation_permissions_prompt_message" msgid="356796102004052471">"<xliff:g id="WEBSITE_ORIGIN">%s</xliff:g> vill känna till din plats"</string>
- <string name="geolocation_permissions_prompt_share" msgid="9084486342048347976">"Dela plats"</string>
- <string name="geolocation_permissions_prompt_dont_share" msgid="6303025160237860300">"Avvisa"</string>
- <string name="geolocation_permissions_prompt_remember" msgid="3118526300707348308">"Kom ihåg mina inställningar"</string>
+ <!-- no translation found for loading_video (4887871585216091096) -->
+ <skip />
+ <!-- no translation found for geolocation_permissions_prompt_message (356796102004052471) -->
+ <skip />
+ <!-- no translation found for geolocation_permissions_prompt_share (9084486342048347976) -->
+ <skip />
+ <!-- no translation found for geolocation_permissions_prompt_dont_share (6303025160237860300) -->
+ <skip />
+ <!-- no translation found for geolocation_permissions_prompt_remember (3118526300707348308) -->
+ <skip />
<string name="geolocation_settings_page_title" msgid="1745477985097536528">"Ta bort platsåtkomst"</string>
<string name="geolocation_settings_page_summary_allowed" msgid="9180251524290811398">"Den här webbplatsen har för närvarande åtkomst till din plats"</string>
<string name="geolocation_settings_page_summary_not_allowed" msgid="4589649082203102544">"Den här webbplatsen har för närvarande inte åtkomst till din plats"</string>
@@ -285,10 +315,15 @@
<string name="geolocation_settings_page_dialog_message" msgid="7586671987576403993">"Platsåtkomst tas bort för den här webbplatsen"</string>
<string name="geolocation_settings_page_dialog_ok_button" msgid="4789434178048077287">"Ta bort åtkomst"</string>
<string name="geolocation_settings_page_dialog_cancel_button" msgid="7941036504673409747">"Avbryt"</string>
- <string name="website_settings_clear_all" msgid="8739804325997655980">"Ta bort alla"</string>
- <string name="website_settings_clear_all_dialog_title" msgid="7791826325122461718">"Vill du ta bort alla webbplatsinställningar?"</string>
- <string name="website_settings_clear_all_dialog_message" msgid="6150502090601476333">"Alla webbplatsdata och alla platsbehörigheter kommer att tas bort."</string>
- <string name="website_settings_clear_all_dialog_ok_button" msgid="6401582240627669431">"Ta bort alla data"</string>
- <string name="website_settings_clear_all_dialog_cancel_button" msgid="1896757051856611674">"Avbryt"</string>
+ <!-- no translation found for website_settings_clear_all (8739804325997655980) -->
+ <skip />
+ <!-- no translation found for website_settings_clear_all_dialog_title (7791826325122461718) -->
+ <skip />
+ <!-- no translation found for website_settings_clear_all_dialog_message (6150502090601476333) -->
+ <skip />
+ <!-- no translation found for website_settings_clear_all_dialog_ok_button (6401582240627669431) -->
+ <skip />
+ <!-- no translation found for website_settings_clear_all_dialog_cancel_button (1896757051856611674) -->
+ <skip />
<string name="zoom_overview_button_text" msgid="4146579940085488881">"Översikt"</string>
</resources>
diff --git a/res/values-tr/arrays.xml b/res/values-tr/arrays.xml
deleted file mode 100644
index bac7d19..0000000
--- a/res/values-tr/arrays.xml
+++ /dev/null
@@ -1,32 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2009 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.
--->
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string-array name="webstorage_quota_entries">
- <item msgid="5433313236875537673">"İzin verilen kota yok"</item>
- <item msgid="7374272188672967690">"5 MB"</item>
- <item msgid="8699352701856136738">"10 MB"</item>
- <item msgid="2018822431469084862">"30 MB"</item>
- <item msgid="5383642976774534074">"100 MB"</item>
- </string-array>
- <string-array name="webstorage_quota_entries_values">
- <item msgid="7620410313725236055">"0"</item>
- <item msgid="4302688814760304206">"5"</item>
- <item msgid="7291990205847586165">"10"</item>
- <item msgid="916913372287112423">"30"</item>
- <item msgid="3437188301324229987">"100"</item>
- </string-array>
-</resources>
diff --git a/res/values-tr/strings.xml b/res/values-tr/strings.xml
index e318a53..a0339af 100644
--- a/res/values-tr/strings.xml
+++ b/res/values-tr/strings.xml
@@ -16,8 +16,10 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="application_name" msgid="1935869255545976415">"Tarayıcı"</string>
- <string name="new_tab" msgid="4505722538297295141">"Yeni pencere"</string>
- <string name="active_tabs" msgid="3050623868203544623">"Pencereler"</string>
+ <!-- no translation found for new_tab (4505722538297295141) -->
+ <skip />
+ <!-- no translation found for active_tabs (3050623868203544623) -->
+ <skip />
<string name="tab_bookmarks" msgid="2305793036003473653">"Favoriler"</string>
<string name="tab_most_visited" msgid="1077402532455000703">"En çok ziyaret edilenler"</string>
<string name="tab_history" msgid="1979267558744613746">"Geçmiş"</string>
@@ -78,8 +80,10 @@
<string name="remove_history_item" msgid="5021424935726728618">"Geçmişten kaldır"</string>
<string name="set_as_homepage" msgid="4752937379414905560">"Ana sayfa olarak ayarla"</string>
<string name="bookmark_saved" msgid="2766434679871317557">"Favorilere kaydedildi."</string>
- <string name="bookmark_not_saved" msgid="700600955089376724">"Yer imi kaydedilemedi."</string>
- <string name="homepage_set" msgid="8768087280310966395">"Ana sayfa ayarlandı."</string>
+ <!-- no translation found for bookmark_not_saved (700600955089376724) -->
+ <skip />
+ <!-- no translation found for homepage_set (8768087280310966395) -->
+ <skip />
<string name="bookmark_needs_title" msgid="6245900436119218187">"Favorinin bir adı olmalıdır."</string>
<string name="bookmark_needs_url" msgid="7809876865972755158">"Favorinin bir konumu olmalıdır."</string>
<string name="empty_bookmark" msgid="7008697085928540511">"Boş favori oluşturulamaz."</string>
@@ -94,7 +98,7 @@
<string name="new_window" msgid="8117889615360211551">"Yeni pencere"</string>
<string name="goto_dot" msgid="3895839050522602723">"Git"</string>
<string name="find_dot" msgid="6259312434696611957">"Sayfada bul"</string>
- <string name="select_dot" msgid="6299170761900561967">"Metin seç"</string>
+ <string name="select_dot" msgid="6299170761900561967">"Metni seç"</string>
<string name="view_tabs" msgid="1119097492003550564">"Pencereye genel bakış"</string>
<string name="view_tabs_condensed" msgid="5803955493821945369">"Pencereler"</string>
<string name="tab_picker_title" msgid="864478399057782913">"Geçerli pencereler"</string>
@@ -107,7 +111,8 @@
<string name="shortcut_bookmark" msgid="3974876480401135895">"Favori"</string>
<string name="history" msgid="2451240511251410032">"Geçmiş"</string>
<string name="menu_view_download" msgid="2124570321712995120">"İndirme işlemleri"</string>
- <string name="copy_page_url" msgid="7635062169011319208">"Sayfa url\'sini kopyala"</string>
+ <!-- no translation found for copy_page_url (7635062169011319208) -->
+ <skip />
<string name="share_page" msgid="593756995297268343">"Sayfayı paylaş"</string>
<string name="contextmenu_openlink" msgid="7237961252214188935">"Aç"</string>
<string name="contextmenu_openlink_newwindow" msgid="992765050093960353">"Yeni pencerede aç"</string>
@@ -122,40 +127,54 @@
<string name="contextmenu_add_contact" msgid="3183511922223645716">"Kişi ekle"</string>
<string name="contextmenu_send_mail" msgid="1014513374828775660">"E-posta gönder"</string>
<string name="contextmenu_map" msgid="7471390435434034912">"Harita"</string>
- <string name="choosertitle_sharevia" msgid="4600490613341909086">"Şunu kullanarak paylaş:"</string>
+ <!-- no translation found for choosertitle_sharevia (4600490613341909086) -->
+ <skip />
<string name="clear" msgid="7070043081700011461">"Temizle"</string>
<string name="replace" msgid="4843033491070384047">"Değiştir"</string>
<string name="browser_bookmarks_page_bookmarks_text" msgid="6787605028726162673">"Favoriler"</string>
<string name="menu_preferences" msgid="6709237687234102240">"Ayarlar"</string>
<string name="pref_content_title" msgid="722227111894838633">"Sayfa içeriği ayarları"</string>
<string name="pref_content_load_images" msgid="2125616852957377561">"Görselleri yükle"</string>
- <string name="pref_content_load_images_summary" msgid="5055874125248398584">"Web sayfalarındaki görselleri görüntüle"</string>
+ <!-- no translation found for pref_content_load_images_summary (5055874125248398584) -->
+ <skip />
<string name="pref_content_block_popups" msgid="7808433807197256726">"Pop-up\'ları engelle"</string>
<string name="pref_content_javascript" msgid="4570972030299516843">"JavaScript\'i etkinleştir"</string>
<string name="pref_content_open_in_background" msgid="824123779725118663">"Arka planda aç"</string>
- <string name="pref_content_plugins" msgid="7231944644794301582">"Eklentileri etkinleştir"</string>
- <string name="pref_content_open_in_background_summary" msgid="1737664075721181678">"Geçerli pencerenin arkasında yeni pencereler aç"</string>
+ <!-- no translation found for pref_content_plugins (7231944644794301582) -->
+ <skip />
+ <!-- no translation found for pref_content_open_in_background_summary (1737664075721181678) -->
+ <skip />
<string name="pref_content_homepage" msgid="6082437160778559806">"Ana sayfayı ayarla"</string>
<string name="pref_content_autofit" msgid="8260474534053660809">"Sayfaları otomatik sığdır"</string>
- <string name="pref_content_autofit_summary" msgid="4587831659894879986">"Web sayfalarını ekrana sığacak şekilde biçimlendir"</string>
- <string name="pref_content_landscape_only" msgid="2022546812766219672">"Yalnızca yatay görüntü"</string>
- <string name="pref_content_landscape_only_summary" msgid="1008238895535428855">"Sayfaları yalnızca daha geniş, yatay ekran yönünde görüntüle"</string>
+ <!-- no translation found for pref_content_autofit_summary (4587831659894879986) -->
+ <skip />
+ <!-- no translation found for pref_content_landscape_only (2022546812766219672) -->
+ <skip />
+ <!-- no translation found for pref_content_landscape_only_summary (1008238895535428855) -->
+ <skip />
<string name="pref_privacy_title" msgid="1052470980370846151">"Gizlilik ayarları"</string>
<string name="pref_privacy_clear_cache" msgid="3380316479925886998">"Önbelleği temizle"</string>
<string name="pref_privacy_clear_cache_summary" msgid="2216463577207991454">"Yerel olarak önbelleğe alınmış içeriği ve veritabanlarını temizle"</string>
- <string name="pref_privacy_clear_cache_dlg" msgid="5541011591300753881">"Yerel olarak önbelleğe alınmış içerik ve veritabanları silinecek."</string>
+ <!-- no translation found for pref_privacy_clear_cache_dlg (5541011591300753881) -->
+ <skip />
<string name="pref_privacy_clear_cookies" msgid="3095583579133780331">"Tüm çerez verilerini temizle"</string>
- <string name="pref_privacy_clear_cookies_summary" msgid="6962742063990677520">"Tüm tarayıcı çerezlerini temizle"</string>
- <string name="pref_privacy_clear_cookies_dlg" msgid="552855688091432682">"Tüm çerezler silinecek."</string>
+ <!-- no translation found for pref_privacy_clear_cookies_summary (6962742063990677520) -->
+ <skip />
+ <!-- no translation found for pref_privacy_clear_cookies_dlg (552855688091432682) -->
+ <skip />
<string name="pref_privacy_clear_history" msgid="8723795508825198477">"Geçmişi temizle"</string>
<string name="pref_privacy_clear_history_summary" msgid="6868501330708940734">"Tarayıcı gezinme geçmişini temizle"</string>
- <string name="pref_privacy_clear_history_dlg" msgid="544903007914753853">"Tarayıcının gezinme geçmişi silinecek."</string>
+ <!-- no translation found for pref_privacy_clear_history_dlg (544903007914753853) -->
+ <skip />
<string name="pref_privacy_clear_form_data" msgid="4232668196344383987">"Form verilerini temizle"</string>
<string name="pref_privacy_clear_form_data_summary" msgid="1790390894719517167">"Tüm kayıtlı form verilerini temizle"</string>
- <string name="pref_privacy_clear_form_data_dlg" msgid="4443621086781197928">"Tüm kayıtlı form verileri silinecek."</string>
+ <!-- no translation found for pref_privacy_clear_form_data_dlg (4443621086781197928) -->
+ <skip />
<string name="pref_privacy_clear_passwords" msgid="4750234112289277480">"Şifreleri temizle"</string>
- <string name="pref_privacy_clear_passwords_summary" msgid="8856782718942903335">"Kayıtlı tüm şifreleri temizle"</string>
- <string name="pref_privacy_clear_passwords_dlg" msgid="2083869328824248255">"Kayıtlı tüm şifreler silinecek."</string>
+ <!-- no translation found for pref_privacy_clear_passwords_summary (8856782718942903335) -->
+ <skip />
+ <!-- no translation found for pref_privacy_clear_passwords_dlg (2083869328824248255) -->
+ <skip />
<string name="pref_privacy_enable_geolocation" msgid="1395040170290765686">"Konumu etkinleştir"</string>
<string name="pref_privacy_enable_geolocation_summary" msgid="8437020934664306205">"Sitelerin konumunuza erişmek istemesine izin verin"</string>
<string name="pref_privacy_clear_geolocation_access" msgid="6649680770030042980">"Konum erişimini temizle"</string>
@@ -163,7 +182,8 @@
<string name="pref_privacy_clear_geolocation_access_dlg" msgid="7327063124488827244">"Tüm web siteleri için konum erişimini temizle"</string>
<string name="pref_security_title" msgid="5763978646932160021">"Güvenlik ayarları"</string>
<string name="pref_security_remember_passwords" msgid="6492957683454529549">"Şifreleri hatırla"</string>
- <string name="pref_security_remember_passwords_summary" msgid="256388703356349137">"Web siteleri için kullanıcı adlarını ve şifreleri kaydet"</string>
+ <!-- no translation found for pref_security_remember_passwords_summary (256388703356349137) -->
+ <skip />
<string name="pref_security_save_form_data" msgid="1213669802810198893">"Form verilerini hatırla"</string>
<string name="pref_security_save_form_data_summary" msgid="4994074685153708026">"Daha sonra kullanmak üzere formlara yazdığım verileri hatırla"</string>
<string name="pref_security_show_security_warning" msgid="8901135676266754559">"Güvenlik uyarıl. göster"</string>
@@ -186,14 +206,17 @@
<item msgid="3840999588443167001">"Kapat"</item>
</string-array>
<string name="pref_default_zoom_dialogtitle" msgid="6095974367125109021">"Varsayılan zum"</string>
- <string name="pref_content_load_page" msgid="2219810141690955452">"Sayfaları genel görünümde aç"</string>
- <string name="pref_content_load_page_summary" msgid="8792093504054149369">"Yeni açılan sayfaların genel görünümünü göster"</string>
+ <!-- no translation found for pref_content_load_page (2219810141690955452) -->
+ <skip />
+ <!-- no translation found for pref_content_load_page_summary (8792093504054149369) -->
+ <skip />
<string name="pref_extras_title" msgid="3091250467679722382">"Gelişmiş ayarlar"</string>
<string name="pref_extras_website_settings" msgid="67866640052455549">"Web sitesi ayarları"</string>
<string name="pref_extras_website_settings_summary" msgid="3917568895776162240">"Her web sitesi için gelişmiş ayarları görüntüle"</string>
<string name="pref_extras_reset_default" msgid="8904000515846202110">"Varsayılana sıfırla"</string>
<string name="pref_extras_reset_default_summary" msgid="7984680562706914966">"Tüm tarayıcı verilerini temizle ve tüm ayarları varsayılana sıfırla"</string>
- <string name="pref_extras_reset_default_dlg" msgid="6894807766578874830">"Tüm tarayıcı verileri silinecek ve ayarlar varsayılan değerlere geri döndürülecek."</string>
+ <!-- no translation found for pref_extras_reset_default_dlg (6894807766578874830) -->
+ <skip />
<string name="pref_extras_reset_default_dlg_title" msgid="2250334970728938936">"Varsayılana sıfırla"</string>
<string name="pref_development_title" msgid="3263854204533056480">"Hata Ayıklama"</string>
<string name="pref_default_text_encoding" msgid="5742965543955558478">"Metin kodlama"</string>
@@ -206,16 +229,16 @@
</string-array>
<string name="pref_default_text_encoding_dialogtitle" msgid="5508255018084978547">"Metin kodlama"</string>
<string name="pref_default_text_encoding_default" msgid="5272126711231936722">"Latin-1"</string>
- <string name="browserFrameRedirect" msgid="7049675479777828343">"Yeniden yönlendir"</string>
- <string name="browserFrame307Post" msgid="1429094844669510768">"Bu web sayfası yeniden yönlendiriliyor. Yazılı form verileriniz yeni konuma tekrar gönderilsin mi?"</string>
<string name="browserFrameNetworkErrorLabel" msgid="126892350904924893">"Veri bağlantısı sorunu"</string>
<string name="browserFrameFileErrorLabel" msgid="8063691502792670367">"Sorunlu dosya"</string>
<string name="browserFrameFormResubmitLabel" msgid="2685923472682180360">"Doğrula"</string>
<string name="browserFrameFormResubmitMessage" msgid="2752182215695632138">"Görüntülemeye çalıştığınız sayfa zaten gönderilmiş veriler (\"POSTDATA\") içeriyor. Verileri tekrar gönderirseniz sayfa üzerinde yapılmış tüm işlemler (arama veya çevrimiçi satın alma gibi) tekrarlanacaktır."</string>
<string name="loadSuspendedTitle" msgid="675991625288706944">"Ağ bağlantısı yok"</string>
- <string name="loadSuspended" msgid="3133656588880851273">"Tarayıcı, internet bağlantısı olmadığı için bu sayfayı yükleyemiyor."</string>
+ <!-- no translation found for loadSuspended (3133656588880851273) -->
+ <skip />
<string name="clear_history" msgid="5998307092715979619">"Geçmişi temizle"</string>
- <string name="browser_history" msgid="1038987118290272525">"Son ziyaret edilen sayfalar"</string>
+ <!-- no translation found for browser_history (1038987118290272525) -->
+ <skip />
<string name="empty_history" msgid="8738772352308207274">"Tarayıcı geçmişi boş."</string>
<string name="add_new_bookmark" msgid="8086367791400349049">"Favori ekle..."</string>
<string name="add_bookmark_short" msgid="3783984330998103735">"Ekle"</string>
@@ -258,7 +281,8 @@
<string name="download_pending_network" msgid="6548714525679461053">"Veri bağlantısı bekleniyor..."</string>
<string name="download_running_paused" msgid="6418029352085656495">"Veri bağlantısı bekleniyor..."</string>
<string name="download_canceled" msgid="6057083743144492515">"İndirme işlemi iptal edildi."</string>
- <string name="download_not_acceptable" msgid="313769696131563652">"İndirilemiyor. Söz konusu içerik bu telefonda desteklenmiyor."</string>
+ <!-- no translation found for download_not_acceptable (313769696131563652) -->
+ <skip />
<string name="download_file_error" msgid="1206648050615176113">"İndirme işlemi tamamlanamıyor. Yeterli alan yok."</string>
<string name="download_length_required" msgid="9038605488460437406">"İndirilemiyor. Öğenin boyutu belirlenemiyor."</string>
<string name="download_precondition_failed" msgid="8327584102874295580">"İndirme işlemi kesintiye uğradı. Sürdürülemez."</string>
@@ -270,14 +294,20 @@
<string name="webstorage_clear_data_summary" msgid="3523128713743907805">"Bu web sitesi ile ilişkilendirilmiş tüm veritabanlarını kaldır"</string>
<string name="webstorage_clear_data_dialog_title" msgid="345457466368974706">"Depolanmış verileri temizle"</string>
<string name="webstorage_clear_data_dialog_message" msgid="6678281256970470125">"Bu web sitesi tarafından depolanmış tüm veriler silinecek"</string>
- <string name="webstorage_clear_data_dialog_ok_button" msgid="2516563534211898636">"Tümünü temizle"</string>
+ <!-- no translation found for webstorage_clear_data_dialog_ok_button (2516563534211898636) -->
+ <skip />
<string name="webstorage_clear_data_dialog_cancel_button" msgid="2028867751958942762">"İptal"</string>
<string name="webstorage_origin_summary_mb_stored" msgid="1985885826292236210">"Telefonunuzda depolanan MB"</string>
- <string name="loading_video" msgid="4887871585216091096">"Video yükleniyor"</string>
- <string name="geolocation_permissions_prompt_message" msgid="356796102004052471">"<xliff:g id="WEBSITE_ORIGIN">%s</xliff:g> konumunuzu bilmek istiyor"</string>
- <string name="geolocation_permissions_prompt_share" msgid="9084486342048347976">"Konumu paylaş"</string>
- <string name="geolocation_permissions_prompt_dont_share" msgid="6303025160237860300">"Reddet"</string>
- <string name="geolocation_permissions_prompt_remember" msgid="3118526300707348308">"Tercihi anımsa"</string>
+ <!-- no translation found for loading_video (4887871585216091096) -->
+ <skip />
+ <!-- no translation found for geolocation_permissions_prompt_message (356796102004052471) -->
+ <skip />
+ <!-- no translation found for geolocation_permissions_prompt_share (9084486342048347976) -->
+ <skip />
+ <!-- no translation found for geolocation_permissions_prompt_dont_share (6303025160237860300) -->
+ <skip />
+ <!-- no translation found for geolocation_permissions_prompt_remember (3118526300707348308) -->
+ <skip />
<string name="geolocation_settings_page_title" msgid="1745477985097536528">"Konum erişimini temizle"</string>
<string name="geolocation_settings_page_summary_allowed" msgid="9180251524290811398">"Bu site şu anda konumunuza erişebilir"</string>
<string name="geolocation_settings_page_summary_not_allowed" msgid="4589649082203102544">"Bu site şu anda konumunuza erişemiyor"</string>
@@ -285,10 +315,15 @@
<string name="geolocation_settings_page_dialog_message" msgid="7586671987576403993">"Bu web sitesi için konum erişimi temizlenecek"</string>
<string name="geolocation_settings_page_dialog_ok_button" msgid="4789434178048077287">"Erişimi temizle"</string>
<string name="geolocation_settings_page_dialog_cancel_button" msgid="7941036504673409747">"İptal"</string>
- <string name="website_settings_clear_all" msgid="8739804325997655980">"Tümünü temizle"</string>
- <string name="website_settings_clear_all_dialog_title" msgid="7791826325122461718">"Tüm web sitesi ayarları temizlensin mi?"</string>
- <string name="website_settings_clear_all_dialog_message" msgid="6150502090601476333">"Web sitesi verilerinin ve konum izinlerinin tümü silinecek."</string>
- <string name="website_settings_clear_all_dialog_ok_button" msgid="6401582240627669431">"Tüm verileri sil"</string>
- <string name="website_settings_clear_all_dialog_cancel_button" msgid="1896757051856611674">"İptal"</string>
+ <!-- no translation found for website_settings_clear_all (8739804325997655980) -->
+ <skip />
+ <!-- no translation found for website_settings_clear_all_dialog_title (7791826325122461718) -->
+ <skip />
+ <!-- no translation found for website_settings_clear_all_dialog_message (6150502090601476333) -->
+ <skip />
+ <!-- no translation found for website_settings_clear_all_dialog_ok_button (6401582240627669431) -->
+ <skip />
+ <!-- no translation found for website_settings_clear_all_dialog_cancel_button (1896757051856611674) -->
+ <skip />
<string name="zoom_overview_button_text" msgid="4146579940085488881">"Genel Bakış"</string>
</resources>
diff --git a/res/values-zh-rCN/arrays.xml b/res/values-zh-rCN/arrays.xml
deleted file mode 100644
index cf00e8f..0000000
--- a/res/values-zh-rCN/arrays.xml
+++ /dev/null
@@ -1,32 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2009 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.
--->
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string-array name="webstorage_quota_entries">
- <item msgid="5433313236875537673">"不允许设置配额"</item>
- <item msgid="7374272188672967690">"5 MB"</item>
- <item msgid="8699352701856136738">"10 MB"</item>
- <item msgid="2018822431469084862">"30 MB"</item>
- <item msgid="5383642976774534074">"100 MB"</item>
- </string-array>
- <string-array name="webstorage_quota_entries_values">
- <item msgid="7620410313725236055">"0"</item>
- <item msgid="4302688814760304206">"5"</item>
- <item msgid="7291990205847586165">"10"</item>
- <item msgid="916913372287112423">"30"</item>
- <item msgid="3437188301324229987">"100"</item>
- </string-array>
-</resources>
diff --git a/res/values-zh-rCN/strings.xml b/res/values-zh-rCN/strings.xml
index fa152b2..dc4d444 100644
--- a/res/values-zh-rCN/strings.xml
+++ b/res/values-zh-rCN/strings.xml
@@ -16,8 +16,10 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="application_name" msgid="1935869255545976415">"浏览器"</string>
- <string name="new_tab" msgid="4505722538297295141">"新窗口"</string>
- <string name="active_tabs" msgid="3050623868203544623">"窗口"</string>
+ <!-- no translation found for new_tab (4505722538297295141) -->
+ <skip />
+ <!-- no translation found for active_tabs (3050623868203544623) -->
+ <skip />
<string name="tab_bookmarks" msgid="2305793036003473653">"书签"</string>
<string name="tab_most_visited" msgid="1077402532455000703">"访问最多"</string>
<string name="tab_history" msgid="1979267558744613746">"历史记录"</string>
@@ -78,8 +80,10 @@
<string name="remove_history_item" msgid="5021424935726728618">"从历史记录中删除"</string>
<string name="set_as_homepage" msgid="4752937379414905560">"设置为主页"</string>
<string name="bookmark_saved" msgid="2766434679871317557">"已保存至书签。"</string>
- <string name="bookmark_not_saved" msgid="700600955089376724">"无法保存书签。"</string>
- <string name="homepage_set" msgid="8768087280310966395">"主页已设置。"</string>
+ <!-- no translation found for bookmark_not_saved (700600955089376724) -->
+ <skip />
+ <!-- no translation found for homepage_set (8768087280310966395) -->
+ <skip />
<string name="bookmark_needs_title" msgid="6245900436119218187">"书签必须具有名称。"</string>
<string name="bookmark_needs_url" msgid="7809876865972755158">"书签必须具有位置。"</string>
<string name="empty_bookmark" msgid="7008697085928540511">"无法创建空书签。"</string>
@@ -92,9 +96,9 @@
<string name="delete_bookmark_warning" msgid="758043186202032205">"将会删除书签“<xliff:g id="BOOKMARK">%s</xliff:g>”。"</string>
<string name="open_in_new_window" msgid="6596775546468054510">"在新窗口中打开"</string>
<string name="new_window" msgid="8117889615360211551">"新窗口"</string>
- <string name="goto_dot" msgid="3895839050522602723">"转至"</string>
+ <string name="goto_dot" msgid="3895839050522602723">"输入网址"</string>
<string name="find_dot" msgid="6259312434696611957">"在网页上查找"</string>
- <string name="select_dot" msgid="6299170761900561967">"选择文本"</string>
+ <string name="select_dot" msgid="6299170761900561967">"选择文字"</string>
<string name="view_tabs" msgid="1119097492003550564">"窗口概述"</string>
<string name="view_tabs_condensed" msgid="5803955493821945369">"窗口"</string>
<string name="tab_picker_title" msgid="864478399057782913">"当前窗口"</string>
@@ -107,11 +111,12 @@
<string name="shortcut_bookmark" msgid="3974876480401135895">"书签"</string>
<string name="history" msgid="2451240511251410032">"历史记录"</string>
<string name="menu_view_download" msgid="2124570321712995120">"下载"</string>
- <string name="copy_page_url" msgid="7635062169011319208">"复制网页网址"</string>
+ <!-- no translation found for copy_page_url (7635062169011319208) -->
+ <skip />
<string name="share_page" msgid="593756995297268343">"分享网页"</string>
<string name="contextmenu_openlink" msgid="7237961252214188935">"打开"</string>
<string name="contextmenu_openlink_newwindow" msgid="992765050093960353">"在新窗口中打开"</string>
- <string name="contextmenu_bookmark_thislink" msgid="8095373680616870021">"将链接加入书签"</string>
+ <string name="contextmenu_bookmark_thislink" msgid="8095373680616870021">"书签链接"</string>
<string name="contextmenu_savelink" msgid="5508554930832538184">"保存链接"</string>
<string name="contextmenu_sharelink" msgid="5392275392280130331">"分享链接"</string>
<string name="contextmenu_copy" msgid="398860586635404030">"复制"</string>
@@ -122,48 +127,63 @@
<string name="contextmenu_add_contact" msgid="3183511922223645716">"添加联系人"</string>
<string name="contextmenu_send_mail" msgid="1014513374828775660">"发送电子邮件"</string>
<string name="contextmenu_map" msgid="7471390435434034912">"地图"</string>
- <string name="choosertitle_sharevia" msgid="4600490613341909086">"分享方式"</string>
+ <!-- no translation found for choosertitle_sharevia (4600490613341909086) -->
+ <skip />
<string name="clear" msgid="7070043081700011461">"清除"</string>
<string name="replace" msgid="4843033491070384047">"替换"</string>
<string name="browser_bookmarks_page_bookmarks_text" msgid="6787605028726162673">"书签"</string>
<string name="menu_preferences" msgid="6709237687234102240">"设置"</string>
<string name="pref_content_title" msgid="722227111894838633">"网页内容设置"</string>
<string name="pref_content_load_images" msgid="2125616852957377561">"载入图片"</string>
- <string name="pref_content_load_images_summary" msgid="5055874125248398584">"显示网页上的图片"</string>
+ <!-- no translation found for pref_content_load_images_summary (5055874125248398584) -->
+ <skip />
<string name="pref_content_block_popups" msgid="7808433807197256726">"阻止弹出式窗口"</string>
<string name="pref_content_javascript" msgid="4570972030299516843">"启用 JavaScript"</string>
<string name="pref_content_open_in_background" msgid="824123779725118663">"在后方打开"</string>
- <string name="pref_content_plugins" msgid="7231944644794301582">"启用插件"</string>
- <string name="pref_content_open_in_background_summary" msgid="1737664075721181678">"在当前窗口后方打开新窗口"</string>
+ <!-- no translation found for pref_content_plugins (7231944644794301582) -->
+ <skip />
+ <!-- no translation found for pref_content_open_in_background_summary (1737664075721181678) -->
+ <skip />
<string name="pref_content_homepage" msgid="6082437160778559806">"设置主页"</string>
<string name="pref_content_autofit" msgid="8260474534053660809">"自动调整页面"</string>
- <string name="pref_content_autofit_summary" msgid="4587831659894879986">"调整网页版面以适合屏幕大小"</string>
- <string name="pref_content_landscape_only" msgid="2022546812766219672">"仅以横向模式显示"</string>
- <string name="pref_content_landscape_only_summary" msgid="1008238895535428855">"仅以横向宽屏模式显示网页"</string>
+ <!-- no translation found for pref_content_autofit_summary (4587831659894879986) -->
+ <skip />
+ <!-- no translation found for pref_content_landscape_only (2022546812766219672) -->
+ <skip />
+ <!-- no translation found for pref_content_landscape_only_summary (1008238895535428855) -->
+ <skip />
<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>
- <string name="pref_privacy_clear_cache_dlg" msgid="5541011591300753881">"此操作将会刪除存储在本地缓存中的内容和数据库。"</string>
+ <!-- no translation found for pref_privacy_clear_cache_dlg (5541011591300753881) -->
+ <skip />
<string name="pref_privacy_clear_cookies" msgid="3095583579133780331">"清除所有 Cookie 数据"</string>
- <string name="pref_privacy_clear_cookies_summary" msgid="6962742063990677520">"清除所有浏览器 Cookie"</string>
- <string name="pref_privacy_clear_cookies_dlg" msgid="552855688091432682">"此操作将会删除所有 Cookie。"</string>
+ <!-- no translation found for pref_privacy_clear_cookies_summary (6962742063990677520) -->
+ <skip />
+ <!-- no translation found for pref_privacy_clear_cookies_dlg (552855688091432682) -->
+ <skip />
<string name="pref_privacy_clear_history" msgid="8723795508825198477">"清除历史记录"</string>
<string name="pref_privacy_clear_history_summary" msgid="6868501330708940734">"清除浏览器导航历史记录"</string>
- <string name="pref_privacy_clear_history_dlg" msgid="544903007914753853">"此操作将会删除浏览器导航历史记录。"</string>
+ <!-- no translation found for pref_privacy_clear_history_dlg (544903007914753853) -->
+ <skip />
<string name="pref_privacy_clear_form_data" msgid="4232668196344383987">"清除表单数据"</string>
<string name="pref_privacy_clear_form_data_summary" msgid="1790390894719517167">"清除所有已保存的表单数据"</string>
- <string name="pref_privacy_clear_form_data_dlg" msgid="4443621086781197928">"此操作将会删除所有已保存的表单数据。"</string>
+ <!-- no translation found for pref_privacy_clear_form_data_dlg (4443621086781197928) -->
+ <skip />
<string name="pref_privacy_clear_passwords" msgid="4750234112289277480">"清除密码"</string>
- <string name="pref_privacy_clear_passwords_summary" msgid="8856782718942903335">"清除所有保存的密码"</string>
- <string name="pref_privacy_clear_passwords_dlg" msgid="2083869328824248255">"此操作将会刪除所有已保存的密码。"</string>
+ <!-- no translation found for pref_privacy_clear_passwords_summary (8856782718942903335) -->
+ <skip />
+ <!-- no translation found for pref_privacy_clear_passwords_dlg (2083869328824248255) -->
+ <skip />
<string name="pref_privacy_enable_geolocation" msgid="1395040170290765686">"启用位置信息功能"</string>
<string name="pref_privacy_enable_geolocation_summary" msgid="8437020934664306205">"允许网站访问您的位置信息"</string>
<string name="pref_privacy_clear_geolocation_access" msgid="6649680770030042980">"取消位置信息访问权限"</string>
- <string name="pref_privacy_clear_geolocation_access_summary" msgid="7750143359497314679">"取消所有网站访问位置信息的权限"</string>
- <string name="pref_privacy_clear_geolocation_access_dlg" msgid="7327063124488827244">"取消所有网站访问位置信息的权限"</string>
+ <string name="pref_privacy_clear_geolocation_access_summary" msgid="7750143359497314679">"取消所有网站的位置信息访问权限"</string>
+ <string name="pref_privacy_clear_geolocation_access_dlg" msgid="7327063124488827244">"取消所有网站的位置信息访问权限"</string>
<string name="pref_security_title" msgid="5763978646932160021">"安全设置"</string>
<string name="pref_security_remember_passwords" msgid="6492957683454529549">"记住密码"</string>
- <string name="pref_security_remember_passwords_summary" msgid="256388703356349137">"保存网站的用户名和密码"</string>
+ <!-- no translation found for pref_security_remember_passwords_summary (256388703356349137) -->
+ <skip />
<string name="pref_security_save_form_data" msgid="1213669802810198893">"记住表单数据"</string>
<string name="pref_security_save_form_data_summary" msgid="4994074685153708026">"记住我在表单中输入的数据以便于以后使用"</string>
<string name="pref_security_show_security_warning" msgid="8901135676266754559">"显示安全警告"</string>
@@ -186,14 +206,17 @@
<item msgid="3840999588443167001">"近"</item>
</string-array>
<string name="pref_default_zoom_dialogtitle" msgid="6095974367125109021">"默认缩放设置"</string>
- <string name="pref_content_load_page" msgid="2219810141690955452">"以概览模式打开网页"</string>
- <string name="pref_content_load_page_summary" msgid="8792093504054149369">"显示新打开网页的概览"</string>
+ <!-- no translation found for pref_content_load_page (2219810141690955452) -->
+ <skip />
+ <!-- no translation found for pref_content_load_page_summary (8792093504054149369) -->
+ <skip />
<string name="pref_extras_title" msgid="3091250467679722382">"高级设置"</string>
<string name="pref_extras_website_settings" msgid="67866640052455549">"网站设置"</string>
<string name="pref_extras_website_settings_summary" msgid="3917568895776162240">"查看各网站的高级设置"</string>
<string name="pref_extras_reset_default" msgid="8904000515846202110">"重置为默认设置"</string>
<string name="pref_extras_reset_default_summary" msgid="7984680562706914966">"清除所有浏览器数据并恢复所有默认设置"</string>
- <string name="pref_extras_reset_default_dlg" msgid="6894807766578874830">"此操作将会刪除所有浏览器数据并将设置恢复为默认值。"</string>
+ <!-- no translation found for pref_extras_reset_default_dlg (6894807766578874830) -->
+ <skip />
<string name="pref_extras_reset_default_dlg_title" msgid="2250334970728938936">"重置为默认设置"</string>
<string name="pref_development_title" msgid="3263854204533056480">"调试"</string>
<string name="pref_default_text_encoding" msgid="5742965543955558478">"文字编码"</string>
@@ -206,16 +229,16 @@
</string-array>
<string name="pref_default_text_encoding_dialogtitle" msgid="5508255018084978547">"文字编码"</string>
<string name="pref_default_text_encoding_default" msgid="5272126711231936722">"Latin-1"</string>
- <string name="browserFrameRedirect" msgid="7049675479777828343">"重定向"</string>
- <string name="browserFrame307Post" msgid="1429094844669510768">"该网页正在进行重定向。是否要将您键入的表单数据重新发送到新位置?"</string>
<string name="browserFrameNetworkErrorLabel" msgid="126892350904924893">"数据连接性问题"</string>
<string name="browserFrameFileErrorLabel" msgid="8063691502792670367">"文件有问题"</string>
<string name="browserFrameFormResubmitLabel" msgid="2685923472682180360">"确认"</string>
<string name="browserFrameFormResubmitMessage" msgid="2752182215695632138">"您尝试查看的网页中包含已经提交的数据(“POSTDATA”)。如果您重新发送这些数据,系统会重复该网页上的表单所执行过的一切操作(如搜索或在线购买)。"</string>
<string name="loadSuspendedTitle" msgid="675991625288706944">"没有网络连接"</string>
- <string name="loadSuspended" msgid="3133656588880851273">"未连接到互联网,因此浏览器无法载入该网页。"</string>
+ <!-- no translation found for loadSuspended (3133656588880851273) -->
+ <skip />
<string name="clear_history" msgid="5998307092715979619">"清除历史记录"</string>
- <string name="browser_history" msgid="1038987118290272525">"最近访问过的网页"</string>
+ <!-- no translation found for browser_history (1038987118290272525) -->
+ <skip />
<string name="empty_history" msgid="8738772352308207274">"浏览器历史记录为空。"</string>
<string name="add_new_bookmark" msgid="8086367791400349049">"添加书签..."</string>
<string name="add_bookmark_short" msgid="3783984330998103735">"添加"</string>
@@ -238,7 +261,7 @@
<string name="download_menu_cancel_all" msgid="2136550823151999166">"取消所有下载"</string>
<string name="download_menu_clear_all" msgid="7423737413377703862">"清除列表"</string>
<string name="download_clear_dlg_title" msgid="7961996329529777390">"清除"</string>
- <string name="download_clear_dlg_msg" msgid="8056013815679757669">"所有下载项都会从列表中清除并从浏览器缓存中删除。"</string>
+ <string name="download_clear_dlg_msg" msgid="8056013815679757669">"所有项都会从列表中清除并会从浏览器缓存中删除。"</string>
<string name="download_cancel_dlg_title" msgid="8909108500262799748">"取消下载"</string>
<string name="download_cancel_dlg_msg" msgid="6285389170052357797">"所有 <xliff:g id="DOWNLOAD_COUNT">%d</xliff:g> 项下载都会取消并从下载历史记录中清除。"</string>
<string name="download_file_error_dlg_title" msgid="2693630283595384874">"空间不足"</string>
@@ -258,7 +281,8 @@
<string name="download_pending_network" msgid="6548714525679461053">"正在等待数据连接..."</string>
<string name="download_running_paused" msgid="6418029352085656495">"正在等待数据连接..."</string>
<string name="download_canceled" msgid="6057083743144492515">"下载已取消。"</string>
- <string name="download_not_acceptable" msgid="313769696131563652">"无法下载,此手机不支持此内容。"</string>
+ <!-- no translation found for download_not_acceptable (313769696131563652) -->
+ <skip />
<string name="download_file_error" msgid="1206648050615176113">"无法完成下载,存储空间不足。"</string>
<string name="download_length_required" msgid="9038605488460437406">"无法下载,因为无法确定该下载项的大小。"</string>
<string name="download_precondition_failed" msgid="8327584102874295580">"下载中断,无法重新开始。"</string>
@@ -270,14 +294,20 @@
<string name="webstorage_clear_data_summary" msgid="3523128713743907805">"删除所有与此网站相关联的数据库"</string>
<string name="webstorage_clear_data_dialog_title" msgid="345457466368974706">"清除存储的数据"</string>
<string name="webstorage_clear_data_dialog_message" msgid="6678281256970470125">"此时将删除由此网站存储的所有数据"</string>
- <string name="webstorage_clear_data_dialog_ok_button" msgid="2516563534211898636">"全部清除"</string>
+ <!-- no translation found for webstorage_clear_data_dialog_ok_button (2516563534211898636) -->
+ <skip />
<string name="webstorage_clear_data_dialog_cancel_button" msgid="2028867751958942762">"取消"</string>
<string name="webstorage_origin_summary_mb_stored" msgid="1985885826292236210">"您手机的存储空间 (MB)"</string>
- <string name="loading_video" msgid="4887871585216091096">"正在载入视频"</string>
- <string name="geolocation_permissions_prompt_message" msgid="356796102004052471">"<xliff:g id="WEBSITE_ORIGIN">%s</xliff:g>需要了解您的位置信息"</string>
- <string name="geolocation_permissions_prompt_share" msgid="9084486342048347976">"共享位置信息"</string>
- <string name="geolocation_permissions_prompt_dont_share" msgid="6303025160237860300">"拒绝"</string>
- <string name="geolocation_permissions_prompt_remember" msgid="3118526300707348308">"记住偏好设置"</string>
+ <!-- no translation found for loading_video (4887871585216091096) -->
+ <skip />
+ <!-- no translation found for geolocation_permissions_prompt_message (356796102004052471) -->
+ <skip />
+ <!-- no translation found for geolocation_permissions_prompt_share (9084486342048347976) -->
+ <skip />
+ <!-- no translation found for geolocation_permissions_prompt_dont_share (6303025160237860300) -->
+ <skip />
+ <!-- no translation found for geolocation_permissions_prompt_remember (3118526300707348308) -->
+ <skip />
<string name="geolocation_settings_page_title" msgid="1745477985097536528">"取消位置信息访问权限"</string>
<string name="geolocation_settings_page_summary_allowed" msgid="9180251524290811398">"此网站目前可访问您的位置信息"</string>
<string name="geolocation_settings_page_summary_not_allowed" msgid="4589649082203102544">"此网站目前不能访问您的位置信息"</string>
@@ -285,10 +315,15 @@
<string name="geolocation_settings_page_dialog_message" msgid="7586671987576403993">"此时将取消此网站的位置信息访问权限"</string>
<string name="geolocation_settings_page_dialog_ok_button" msgid="4789434178048077287">"取消访问权限"</string>
<string name="geolocation_settings_page_dialog_cancel_button" msgid="7941036504673409747">"取消"</string>
- <string name="website_settings_clear_all" msgid="8739804325997655980">"全部清除"</string>
- <string name="website_settings_clear_all_dialog_title" msgid="7791826325122461718">"是否清除所有网站设置?"</string>
- <string name="website_settings_clear_all_dialog_message" msgid="6150502090601476333">"此操作将会删除所有网站数据和位置权限。"</string>
- <string name="website_settings_clear_all_dialog_ok_button" msgid="6401582240627669431">"删除所有数据"</string>
- <string name="website_settings_clear_all_dialog_cancel_button" msgid="1896757051856611674">"取消"</string>
+ <!-- no translation found for website_settings_clear_all (8739804325997655980) -->
+ <skip />
+ <!-- no translation found for website_settings_clear_all_dialog_title (7791826325122461718) -->
+ <skip />
+ <!-- no translation found for website_settings_clear_all_dialog_message (6150502090601476333) -->
+ <skip />
+ <!-- no translation found for website_settings_clear_all_dialog_ok_button (6401582240627669431) -->
+ <skip />
+ <!-- no translation found for website_settings_clear_all_dialog_cancel_button (1896757051856611674) -->
+ <skip />
<string name="zoom_overview_button_text" msgid="4146579940085488881">"概览"</string>
</resources>
diff --git a/res/values-zh-rTW/arrays.xml b/res/values-zh-rTW/arrays.xml
deleted file mode 100644
index 60e6ec9..0000000
--- a/res/values-zh-rTW/arrays.xml
+++ /dev/null
@@ -1,32 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2009 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.
--->
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string-array name="webstorage_quota_entries">
- <item msgid="5433313236875537673">"未獲得任何配額"</item>
- <item msgid="7374272188672967690">"5 MB"</item>
- <item msgid="8699352701856136738">"10 MB"</item>
- <item msgid="2018822431469084862">"30 MB"</item>
- <item msgid="5383642976774534074">"100 MB"</item>
- </string-array>
- <string-array name="webstorage_quota_entries_values">
- <item msgid="7620410313725236055">"0"</item>
- <item msgid="4302688814760304206">"5"</item>
- <item msgid="7291990205847586165">"10"</item>
- <item msgid="916913372287112423">"30"</item>
- <item msgid="3437188301324229987">"100"</item>
- </string-array>
-</resources>
diff --git a/res/values-zh-rTW/strings.xml b/res/values-zh-rTW/strings.xml
index d1e230a..e03abd7 100644
--- a/res/values-zh-rTW/strings.xml
+++ b/res/values-zh-rTW/strings.xml
@@ -16,8 +16,10 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="application_name" msgid="1935869255545976415">"瀏覽器"</string>
- <string name="new_tab" msgid="4505722538297295141">"新視窗"</string>
- <string name="active_tabs" msgid="3050623868203544623">"視窗"</string>
+ <!-- no translation found for new_tab (4505722538297295141) -->
+ <skip />
+ <!-- no translation found for active_tabs (3050623868203544623) -->
+ <skip />
<string name="tab_bookmarks" msgid="2305793036003473653">"書籤"</string>
<string name="tab_most_visited" msgid="1077402532455000703">"常用網頁"</string>
<string name="tab_history" msgid="1979267558744613746">"記錄"</string>
@@ -33,8 +35,8 @@
<plurals name="matches_found">
<item quantity="zero" msgid="6242659159545399963">"沒有相配項"</item>
<item quantity="one" msgid="4352019729062956802">"1 個相配項"</item>
- <item quantity="few" msgid="5544267486978946555">"<xliff:g id="NUMBER">%d</xliff:g> 個相符項目"</item>
- <item quantity="other" msgid="6616125067364315405">"<xliff:g id="NUMBER">%d</xliff:g> 個相符項目"</item>
+ <item quantity="few" msgid="5544267486978946555">"<xliff:g id="NUMBER">%d</xliff:g> 個相配項"</item>
+ <item quantity="other" msgid="6616125067364315405">"<xliff:g id="NUMBER">%d</xliff:g> 個相配項"</item>
</plurals>
<string name="title_bar_loading" msgid="7438217780834640678">"載入中..."</string>
<string name="page_info" msgid="4048529256302257195">"頁面資訊"</string>
@@ -58,7 +60,7 @@
<string name="validity_period" msgid="57988851973181309">"合法性:"</string>
<string name="issued_on" msgid="2082890654801808368">"發給:"</string>
<string name="expires_on" msgid="8061200430557020704">"有效日期:"</string>
- <string name="retrieving_creds_dlg_msg" msgid="9207671133094039879">"擷取登入資訊…"</string>
+ <string name="retrieving_creds_dlg_msg" msgid="9207671133094039879">"取回登入資訊…"</string>
<string name="stopping" msgid="4839698519340302982">"停止中…"</string>
<string name="stop" msgid="5687251076030630074">"停止"</string>
<string name="reload" msgid="8585220783228408062">"重新整理"</string>
@@ -67,7 +69,7 @@
<string name="save" msgid="5922311934992468496">"確定"</string>
<string name="do_not_save" msgid="6777633870113477714">"取消"</string>
<string name="location" msgid="969988560160364559">"位置"</string>
- <string name="name" msgid="5990326151488445481">"名稱"</string>
+ <string name="name" msgid="5990326151488445481">"名字"</string>
<string name="http" msgid="2163722670597250102">"http://"</string>
<string name="save_to_bookmarks" msgid="588165100024086565">"新增書籤"</string>
<string name="edit_bookmark" msgid="5024089053490231905">"編輯書籤"</string>
@@ -78,8 +80,10 @@
<string name="remove_history_item" msgid="5021424935726728618">"從記錄中移除"</string>
<string name="set_as_homepage" msgid="4752937379414905560">"設為首頁"</string>
<string name="bookmark_saved" msgid="2766434679871317557">"已儲存至書籤。"</string>
- <string name="bookmark_not_saved" msgid="700600955089376724">"無法儲存書籤。"</string>
- <string name="homepage_set" msgid="8768087280310966395">"已設定為首頁。"</string>
+ <!-- no translation found for bookmark_not_saved (700600955089376724) -->
+ <skip />
+ <!-- no translation found for homepage_set (8768087280310966395) -->
+ <skip />
<string name="bookmark_needs_title" msgid="6245900436119218187">"請輸入書籤名稱。"</string>
<string name="bookmark_needs_url" msgid="7809876865972755158">"請選取書籤位置。"</string>
<string name="empty_bookmark" msgid="7008697085928540511">"無法建立空白書籤。"</string>
@@ -107,7 +111,8 @@
<string name="shortcut_bookmark" msgid="3974876480401135895">"書籤"</string>
<string name="history" msgid="2451240511251410032">"記錄"</string>
<string name="menu_view_download" msgid="2124570321712995120">"下載"</string>
- <string name="copy_page_url" msgid="7635062169011319208">"複製網頁網址"</string>
+ <!-- no translation found for copy_page_url (7635062169011319208) -->
+ <skip />
<string name="share_page" msgid="593756995297268343">"分享網頁"</string>
<string name="contextmenu_openlink" msgid="7237961252214188935">"開啟"</string>
<string name="contextmenu_openlink_newwindow" msgid="992765050093960353">"在新視窗開啟"</string>
@@ -122,40 +127,54 @@
<string name="contextmenu_add_contact" msgid="3183511922223645716">"新增聯絡人"</string>
<string name="contextmenu_send_mail" msgid="1014513374828775660">"傳送電子郵件"</string>
<string name="contextmenu_map" msgid="7471390435434034912">"地圖"</string>
- <string name="choosertitle_sharevia" msgid="4600490613341909086">"透過下列應用程式分享:"</string>
+ <!-- no translation found for choosertitle_sharevia (4600490613341909086) -->
+ <skip />
<string name="clear" msgid="7070043081700011461">"清除"</string>
<string name="replace" msgid="4843033491070384047">"取代"</string>
<string name="browser_bookmarks_page_bookmarks_text" msgid="6787605028726162673">"書籤"</string>
<string name="menu_preferences" msgid="6709237687234102240">"設定"</string>
<string name="pref_content_title" msgid="722227111894838633">"頁面內容設定"</string>
<string name="pref_content_load_images" msgid="2125616852957377561">"載入圖片"</string>
- <string name="pref_content_load_images_summary" msgid="5055874125248398584">"顯示網頁上的圖片"</string>
+ <!-- no translation found for pref_content_load_images_summary (5055874125248398584) -->
+ <skip />
<string name="pref_content_block_popups" msgid="7808433807197256726">"封鎖快顯視窗"</string>
<string name="pref_content_javascript" msgid="4570972030299516843">"啟用 JavaScript"</string>
<string name="pref_content_open_in_background" msgid="824123779725118663">"在背景中開啟"</string>
- <string name="pref_content_plugins" msgid="7231944644794301582">"啟用外掛程式"</string>
- <string name="pref_content_open_in_background_summary" msgid="1737664075721181678">"在目前視窗的後面開啟新視窗"</string>
+ <!-- no translation found for pref_content_plugins (7231944644794301582) -->
+ <skip />
+ <!-- no translation found for pref_content_open_in_background_summary (1737664075721181678) -->
+ <skip />
<string name="pref_content_homepage" msgid="6082437160778559806">"設定首頁"</string>
<string name="pref_content_autofit" msgid="8260474534053660809">"自動調整頁面"</string>
- <string name="pref_content_autofit_summary" msgid="4587831659894879986">"配合螢幕大小調整網頁版面"</string>
- <string name="pref_content_landscape_only" msgid="2022546812766219672">"僅以水平模式顯示"</string>
- <string name="pref_content_landscape_only_summary" msgid="1008238895535428855">"僅以橫向寬螢幕瀏覽模式顯示網頁"</string>
+ <!-- no translation found for pref_content_autofit_summary (4587831659894879986) -->
+ <skip />
+ <!-- no translation found for pref_content_landscape_only (2022546812766219672) -->
+ <skip />
+ <!-- no translation found for pref_content_landscape_only_summary (1008238895535428855) -->
+ <skip />
<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>
- <string name="pref_privacy_clear_cache_dlg" msgid="5541011591300753881">"即將刪除本機快取內容與資料庫。"</string>
- <string name="pref_privacy_clear_cookies" msgid="3095583579133780331">"清除所有 Cookie"</string>
- <string name="pref_privacy_clear_cookies_summary" msgid="6962742063990677520">"清除瀏覽器中所有 Cookie"</string>
- <string name="pref_privacy_clear_cookies_dlg" msgid="552855688091432682">"即將刪除所有 Cookie。"</string>
+ <!-- no translation found for pref_privacy_clear_cache_dlg (5541011591300753881) -->
+ <skip />
+ <string name="pref_privacy_clear_cookies" msgid="3095583579133780331">"清除所有 cookie"</string>
+ <!-- no translation found for pref_privacy_clear_cookies_summary (6962742063990677520) -->
+ <skip />
+ <!-- no translation found for pref_privacy_clear_cookies_dlg (552855688091432682) -->
+ <skip />
<string name="pref_privacy_clear_history" msgid="8723795508825198477">"清除記錄"</string>
<string name="pref_privacy_clear_history_summary" msgid="6868501330708940734">"清除瀏覽記錄"</string>
- <string name="pref_privacy_clear_history_dlg" msgid="544903007914753853">"即將刪除瀏覽器的瀏覽記錄。"</string>
+ <!-- no translation found for pref_privacy_clear_history_dlg (544903007914753853) -->
+ <skip />
<string name="pref_privacy_clear_form_data" msgid="4232668196344383987">"清除表單資料"</string>
- <string name="pref_privacy_clear_form_data_summary" msgid="1790390894719517167">"清除所有表單資料"</string>
- <string name="pref_privacy_clear_form_data_dlg" msgid="4443621086781197928">"即將刪除所有已儲存的表單資料。"</string>
+ <string name="pref_privacy_clear_form_data_summary" msgid="1790390894719517167">"清除所有表單"</string>
+ <!-- no translation found for pref_privacy_clear_form_data_dlg (4443621086781197928) -->
+ <skip />
<string name="pref_privacy_clear_passwords" msgid="4750234112289277480">"清除密碼"</string>
- <string name="pref_privacy_clear_passwords_summary" msgid="8856782718942903335">"清除所有已儲存密碼"</string>
- <string name="pref_privacy_clear_passwords_dlg" msgid="2083869328824248255">"即將刪除所有儲存的密碼"</string>
+ <!-- no translation found for pref_privacy_clear_passwords_summary (8856782718942903335) -->
+ <skip />
+ <!-- no translation found for pref_privacy_clear_passwords_dlg (2083869328824248255) -->
+ <skip />
<string name="pref_privacy_enable_geolocation" msgid="1395040170290765686">"啟用定位功能"</string>
<string name="pref_privacy_enable_geolocation_summary" msgid="8437020934664306205">"允許網站向您要求位置資訊存取權"</string>
<string name="pref_privacy_clear_geolocation_access" msgid="6649680770030042980">"清除位置資訊存取權"</string>
@@ -163,13 +182,14 @@
<string name="pref_privacy_clear_geolocation_access_dlg" msgid="7327063124488827244">"清除所有網站的位置資訊存取權"</string>
<string name="pref_security_title" msgid="5763978646932160021">"安全性設定"</string>
<string name="pref_security_remember_passwords" msgid="6492957683454529549">"記住密碼"</string>
- <string name="pref_security_remember_passwords_summary" msgid="256388703356349137">"儲存您的使用者名稱和密碼"</string>
+ <!-- no translation found for pref_security_remember_passwords_summary (256388703356349137) -->
+ <skip />
<string name="pref_security_save_form_data" msgid="1213669802810198893">"儲存表單資料"</string>
<string name="pref_security_save_form_data_summary" msgid="4994074685153708026">"儲存輸入的表單資料"</string>
<string name="pref_security_show_security_warning" msgid="8901135676266754559">"顯示安全性警告"</string>
<string name="pref_security_show_security_warning_summary" msgid="8968906112720511704">"當網站安全性有問題時,顯示警告訊息"</string>
- <string name="pref_security_accept_cookies" msgid="3201367661925047989">"接受 Cookie"</string>
- <string name="pref_security_accept_cookies_summary" msgid="1465118934875026920">"允許網站存取 Cookie"</string>
+ <string name="pref_security_accept_cookies" msgid="3201367661925047989">"接受 cookie"</string>
+ <string name="pref_security_accept_cookies_summary" msgid="1465118934875026920">"允許網站存取 cookie"</string>
<string name="pref_text_size" msgid="3827031324346612208">"文字大小"</string>
<string-array name="pref_text_size_choices">
<item msgid="4952686548944739548">"最小"</item>
@@ -186,14 +206,17 @@
<item msgid="3840999588443167001">"近"</item>
</string-array>
<string name="pref_default_zoom_dialogtitle" msgid="6095974367125109021">"預設縮放"</string>
- <string name="pref_content_load_page" msgid="2219810141690955452">"以總覽模式開啟網頁"</string>
- <string name="pref_content_load_page_summary" msgid="8792093504054149369">"顯示新開啟網頁的總覽畫面"</string>
+ <!-- no translation found for pref_content_load_page (2219810141690955452) -->
+ <skip />
+ <!-- no translation found for pref_content_load_page_summary (8792093504054149369) -->
+ <skip />
<string name="pref_extras_title" msgid="3091250467679722382">"進階設定"</string>
<string name="pref_extras_website_settings" msgid="67866640052455549">"網站設定"</string>
<string name="pref_extras_website_settings_summary" msgid="3917568895776162240">"查看個別網站的進階設定"</string>
<string name="pref_extras_reset_default" msgid="8904000515846202110">"還原至初始設定"</string>
<string name="pref_extras_reset_default_summary" msgid="7984680562706914966">"清除瀏覽器所有資料,並還原至初始設定"</string>
- <string name="pref_extras_reset_default_dlg" msgid="6894807766578874830">"即將刪除所有瀏覽器資料,並將設定還原為預設值。"</string>
+ <!-- no translation found for pref_extras_reset_default_dlg (6894807766578874830) -->
+ <skip />
<string name="pref_extras_reset_default_dlg_title" msgid="2250334970728938936">"還原至初始設定"</string>
<string name="pref_development_title" msgid="3263854204533056480">"偵錯"</string>
<string name="pref_default_text_encoding" msgid="5742965543955558478">"文字編碼"</string>
@@ -206,16 +229,16 @@
</string-array>
<string name="pref_default_text_encoding_dialogtitle" msgid="5508255018084978547">"文字編碼"</string>
<string name="pref_default_text_encoding_default" msgid="5272126711231936722">"Latin-1"</string>
- <string name="browserFrameRedirect" msgid="7049675479777828343">"轉址"</string>
- <string name="browserFrame307Post" msgid="1429094844669510768">"系統正將您重新導向至新的網頁,要將已輸入的表單資料重新傳送至新的網頁嗎?"</string>
<string name="browserFrameNetworkErrorLabel" msgid="126892350904924893">"資料連線問題"</string>
<string name="browserFrameFileErrorLabel" msgid="8063691502792670367">"檔案有問題"</string>
<string name="browserFrameFormResubmitLabel" msgid="2685923472682180360">"確認"</string>
<string name="browserFrameFormResubmitMessage" msgid="2752182215695632138">"您想瀏覽的頁面包含已傳送的 (「POSTDATA」),如重新送出資料,此頁表單上執行的操作將會重複 (包括搜尋或線上購物等)。"</string>
<string name="loadSuspendedTitle" msgid="675991625288706944">"沒有網路連線"</string>
- <string name="loadSuspended" msgid="3133656588880851273">"沒有連上網際網路,瀏覽器無法載入網頁。"</string>
+ <!-- no translation found for loadSuspended (3133656588880851273) -->
+ <skip />
<string name="clear_history" msgid="5998307092715979619">"清除記錄"</string>
- <string name="browser_history" msgid="1038987118290272525">"最近瀏覽的網頁"</string>
+ <!-- no translation found for browser_history (1038987118290272525) -->
+ <skip />
<string name="empty_history" msgid="8738772352308207274">"瀏覽記錄是空的。"</string>
<string name="add_new_bookmark" msgid="8086367791400349049">"加入書籤…"</string>
<string name="add_bookmark_short" msgid="3783984330998103735">"新增"</string>
@@ -258,26 +281,33 @@
<string name="download_pending_network" msgid="6548714525679461053">"等待資料連線中…"</string>
<string name="download_running_paused" msgid="6418029352085656495">"等待資料連線中…"</string>
<string name="download_canceled" msgid="6057083743144492515">"下載已取消。"</string>
- <string name="download_not_acceptable" msgid="313769696131563652">"無法下載,您的手機不支援這種內容。"</string>
+ <!-- no translation found for download_not_acceptable (313769696131563652) -->
+ <skip />
<string name="download_file_error" msgid="1206648050615176113">"無法完成下載。儲存空間不足。"</string>
<string name="download_length_required" msgid="9038605488460437406">"無法下載。物件大小無法估計。"</string>
<string name="download_precondition_failed" msgid="8327584102874295580">"下載中斷。無法續傳。"</string>
<string name="activity_instrumentation_test_runner" msgid="8215091309334005029">"Browser Test Runner"</string>
<string name="search_the_web" msgid="6046130189241962337">"搜尋網頁"</string>
<string name="webstorage_outofspace_notification_title" msgid="1160474608059771788">"瀏覽器儲存空間已滿"</string>
- <string name="webstorage_outofspace_notification_text" msgid="7341075135051829692">"按一下可釋出儲存空間。"</string>
+ <string name="webstorage_outofspace_notification_text" msgid="7341075135051829692">"按一下可釋出空間。"</string>
<string name="webstorage_clear_data_title" msgid="689484577124333977">"清除儲存的資料"</string>
<string name="webstorage_clear_data_summary" msgid="3523128713743907805">"移除所有與此網站關聯的資料庫"</string>
<string name="webstorage_clear_data_dialog_title" msgid="345457466368974706">"清除儲存的資料"</string>
<string name="webstorage_clear_data_dialog_message" msgid="6678281256970470125">"即將刪除此網站儲存的所有資料"</string>
- <string name="webstorage_clear_data_dialog_ok_button" msgid="2516563534211898636">"全部清除"</string>
+ <!-- no translation found for webstorage_clear_data_dialog_ok_button (2516563534211898636) -->
+ <skip />
<string name="webstorage_clear_data_dialog_cancel_button" msgid="2028867751958942762">"取消"</string>
<string name="webstorage_origin_summary_mb_stored" msgid="1985885826292236210">"您手機的儲存空間使用量 (MB)"</string>
- <string name="loading_video" msgid="4887871585216091096">"正在載入影片"</string>
- <string name="geolocation_permissions_prompt_message" msgid="356796102004052471">"<xliff:g id="WEBSITE_ORIGIN">%s</xliff:g> 想取得您的位置資訊"</string>
- <string name="geolocation_permissions_prompt_share" msgid="9084486342048347976">"分享位置資訊"</string>
- <string name="geolocation_permissions_prompt_dont_share" msgid="6303025160237860300">"拒絕"</string>
- <string name="geolocation_permissions_prompt_remember" msgid="3118526300707348308">"記住偏好設定"</string>
+ <!-- no translation found for loading_video (4887871585216091096) -->
+ <skip />
+ <!-- no translation found for geolocation_permissions_prompt_message (356796102004052471) -->
+ <skip />
+ <!-- no translation found for geolocation_permissions_prompt_share (9084486342048347976) -->
+ <skip />
+ <!-- no translation found for geolocation_permissions_prompt_dont_share (6303025160237860300) -->
+ <skip />
+ <!-- no translation found for geolocation_permissions_prompt_remember (3118526300707348308) -->
+ <skip />
<string name="geolocation_settings_page_title" msgid="1745477985097536528">"清除位置資訊存取權"</string>
<string name="geolocation_settings_page_summary_allowed" msgid="9180251524290811398">"此網站目前可以存取您的位置資訊"</string>
<string name="geolocation_settings_page_summary_not_allowed" msgid="4589649082203102544">"此網站目前無法存取您的位置資訊"</string>
@@ -285,10 +315,15 @@
<string name="geolocation_settings_page_dialog_message" msgid="7586671987576403993">"即將清除此網站的位置資訊存取權"</string>
<string name="geolocation_settings_page_dialog_ok_button" msgid="4789434178048077287">"清除存取權"</string>
<string name="geolocation_settings_page_dialog_cancel_button" msgid="7941036504673409747">"取消"</string>
- <string name="website_settings_clear_all" msgid="8739804325997655980">"全部清除"</string>
- <string name="website_settings_clear_all_dialog_title" msgid="7791826325122461718">"要清除所有網站設定嗎?"</string>
- <string name="website_settings_clear_all_dialog_message" msgid="6150502090601476333">"即將刪除所有網站資料和位置存取權限。"</string>
- <string name="website_settings_clear_all_dialog_ok_button" msgid="6401582240627669431">"刪除所有資料"</string>
- <string name="website_settings_clear_all_dialog_cancel_button" msgid="1896757051856611674">"取消"</string>
+ <!-- no translation found for website_settings_clear_all (8739804325997655980) -->
+ <skip />
+ <!-- no translation found for website_settings_clear_all_dialog_title (7791826325122461718) -->
+ <skip />
+ <!-- no translation found for website_settings_clear_all_dialog_message (6150502090601476333) -->
+ <skip />
+ <!-- no translation found for website_settings_clear_all_dialog_ok_button (6401582240627669431) -->
+ <skip />
+ <!-- no translation found for website_settings_clear_all_dialog_cancel_button (1896757051856611674) -->
+ <skip />
<string name="zoom_overview_button_text" msgid="4146579940085488881">"總覽"</string>
</resources>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 3bb6ffd..1999f54 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -17,7 +17,8 @@
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<!-- The name of the application. -->
<string name="application_name">Browser</string>
-
+ <!-- Displayed with a file picker to choose a file to upload -->
+ <string name="choose_upload">Choose file for upload</string>
<!-- Name of menu item of a new tab. Also used in the title bar when displaying a new tab -->
<string name="new_tab">New window</string>
<!-- Name of menu item which brings up a list of the currently active tabs -->
@@ -170,6 +171,8 @@
<string name="empty_bookmark">"Cannot create empty bookmark."</string>
<!-- Error that appears in the title of Bookmark dialog when user selects OK with invalid URL -->
<string name="bookmark_url_not_valid">URL is not valid.</string>
+ <!-- Error that appears in the Bookmark dialog when user selects OK with a URL of a type we cannot bookmark -->
+ <string name="bookmark_cannot_save_url">This URL cannot be bookmarked.</string>
<!-- Title of a confirmation dialog when the user deletes a bookmark-->
<string name="delete_bookmark">Delete</string>
<!-- Menu item in the page that displays all bookmarks. It brings up a
@@ -263,6 +266,9 @@
<string name="contextmenu_download_image">Save image</string>
<!-- Context Menu item to view the image by itself in the browser -->
<string name="contextmenu_view_image">View image</string>
+ <!-- Context Menu item to set the image as the home screen wallpaper -->
+ <string name="contextmenu_set_wallpaper">Set as wallpaper</string>
+
<!-- Context Menu item to open the dialer app with the selected phone number
-->
<string name="contextmenu_dial_dot">Dial\u2026</string>
@@ -313,6 +319,8 @@
<string name="pref_content_open_in_background_summary">Open new windows behind the current one</string>
<!-- Settings label -->
<string name="pref_content_homepage">Set home page</string>
+ <!-- Settings button label -->
+ <string name="pref_use_current">Use current page</string>
<!-- Settings label -->
<string name="pref_content_autofit">Auto-fit pages</string>
<!-- Settings summary -->
@@ -426,7 +434,7 @@
<!-- Settings label -->
<string name="pref_extras_website_settings">Website settings</string>
<!-- Settings summary -->
- <string name="pref_extras_website_settings_summary">View advanced settings for individual websites</string>
+ <string name="pref_extras_website_settings_summary">Advanced settings for individual websites</string>
<!-- Settings label -->
<string name="pref_extras_reset_default">Reset to default</string>
<!-- Settings summary -->
@@ -486,10 +494,6 @@
<item>EUC-JP</item>
</string-array>
<string name="pref_default_text_encoding_default">Latin-1</string>
- <!-- Dialog box title -->
- <string name="browserFrameRedirect">Redirect</string>
- <!-- Dialog box message -->
- <string name="browserFrame307Post">This web page is being redirected. Resend your typed form data to the new location?</string>
<!-- Title for a dialog displayed when the browser has a data connectivity
problem -->
<string name="browserFrameNetworkErrorLabel">Data connectivity problem</string>
@@ -565,6 +569,8 @@
<!-- Context menu item on Download history screen -->
<string name="download_menu_clear">Clear from list</string>
<!-- Context menu item in Download history screen -->
+ <string name="download_menu_delete">Delete</string>
+ <!-- Context menu item in Download history screen -->
<string name="download_menu_cancel">Cancel download</string>
<!-- Menu item -->
<string name="download_menu_cancel_all">Cancel all downloads</string>
@@ -578,6 +584,8 @@
<string name="download_cancel_dlg_title">Cancel downloads</string>
<!-- Confirmation dialog message -->
<string name="download_cancel_dlg_msg">All <xliff:g id="download_count">%d</xliff:g> downloads will be canceled and cleared from the download history.</string>
+ <!-- Confirmation dialog title -->
+ <string name="download_delete_file">File will be deleted</string>
<!-- Dialog title -->
<string name="download_file_error_dlg_title">Out of space</string>
<!-- Dialog message -->
@@ -595,7 +603,10 @@
external storage is busy so they cannot download anything. Informs
the user how to enable SD card storage -->
<string name="download_sdcard_busy_dlg_msg">The SD card is busy. To allow downloads, select \"Turn off USB storage\" in the notification.</string>
-
+
+ <!-- Title for a dialog informing the user that there is no application on
+ the phone that can open the file that was downloaded -->
+ <string name="download_no_application_title">Cannot open file</string>
<!-- Message for a dialog informing the user that there is no application on
the phone that can open the file that was downloaded -->
<string name="download_no_application">No application can be found to open this file.</string>
@@ -673,7 +684,7 @@
<item>eBay</item>
<item>http://www.ebay.com/</item>
<item>CNN</item>
- <item>http://www.cnn.com/index.html</item>
+ <item>http://www.cnn.com/</item>
<item>NY Times</item>
<item>http://www.nytimes.com/</item>
<item>ESPN</item>
@@ -740,6 +751,9 @@
<string name="geolocation_permissions_prompt_share">Share location</string>
<string name="geolocation_permissions_prompt_dont_share">Decline</string>
<string name="geolocation_permissions_prompt_remember">Remember preference</string>
+ <!-- Permissions prompt toast -->
+ <string name="geolocation_permissions_prompt_toast_allowed">This site can access your location. Change this in Settings -> Website settings</string>
+ <string name="geolocation_permissions_prompt_toast_disallowed">This site cannot access your location. Change this in Settings -> Website settings</string>
<!-- Settings page, Advanced Settings -> Website settings -> <origin> -->
<string name="geolocation_settings_page_title">Clear location access</string>
<string name="geolocation_settings_page_summary_allowed">This site can currently access your location</string>
@@ -761,6 +775,9 @@
<!-- Caption for a button that is shown when the zoom widget is showing. The button's action will switch to the zoom overview mode. -->
<string name="zoom_overview_button_text">Overview</string>
+ <!-- Text in the progress dialog when we are setting an image as the home screen wallpaper. -->
+ <string name="progress_dialog_setting_wallpaper">Setting wallpaper...</string>
+
<string name="error_console_header_text_minimized" translatable="false">Show JavaScript console</string>
<string name="error_console_header_text_maximized" translatable="false">JavaScript console</string>
<string name="error_console_eval_text_hint" translatable="false">Evaluate JavaScript</string>
diff --git a/res/xml/browser_preferences.xml b/res/xml/browser_preferences.xml
index 1845e20..04c0ebe 100644
--- a/res/xml/browser_preferences.xml
+++ b/res/xml/browser_preferences.xml
@@ -93,8 +93,7 @@
android:key="homepage"
android:title="@string/pref_content_homepage"
android:hint="@string/http"
- android:inputType="textUri"
- android:singleLine="true" />
+ android:inputType="textUri|textMultiLine" />
</PreferenceCategory>
diff --git a/src/com/android/browser/ActiveTabsPage.java b/src/com/android/browser/ActiveTabsPage.java
index 90c417a..2de7787 100644
--- a/src/com/android/browser/ActiveTabsPage.java
+++ b/src/com/android/browser/ActiveTabsPage.java
@@ -18,6 +18,7 @@
import android.content.Context;
import android.graphics.Bitmap;
+import android.os.Handler;
import android.util.AttributeSet;
import android.view.KeyEvent;
import android.view.LayoutInflater;
@@ -49,7 +50,7 @@
mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
- if (mControl.getTabCount() < TabControl.MAX_TABS) {
+ if (mControl.canCreateNewTab()) {
position--;
}
boolean needToAttach = false;
@@ -90,11 +91,30 @@
}
private class TabsListAdapter extends BaseAdapter {
+ private boolean mNotified = true;
+ private int mReturnedCount;
+ private Handler mHandler = new Handler();
+
public int getCount() {
int count = mControl.getTabCount();
- if (count < TabControl.MAX_TABS) {
+ if (mControl.canCreateNewTab()) {
count++;
}
+ // XXX: This is a workaround to be more like a real adapter. Most
+ // adapters call notifyDataSetChanged() whenever the internal data
+ // has changed. Since TabControl is our internal data, we don't
+ // know when that changes.
+ //
+ // Keep track of the last count we returned and whether we called
+ // notifyDataSetChanged(). If we did not initiate a data set
+ // change, and the count is different, send the notify and return
+ // the old count.
+ if (!mNotified && count != mReturnedCount) {
+ notifyChange();
+ return mReturnedCount;
+ }
+ mReturnedCount = count;
+ mNotified = false;
return count;
}
public Object getItem(int position) {
@@ -107,7 +127,7 @@
return 2;
}
public int getItemViewType(int position) {
- if (mControl.getTabCount() < TabControl.MAX_TABS) {
+ if (mControl.canCreateNewTab()) {
position--;
}
// Do not recycle the "add new tab" item.
@@ -115,7 +135,7 @@
}
public View getView(int position, View convertView, ViewGroup parent) {
final int tabCount = mControl.getTabCount();
- if (tabCount < TabControl.MAX_TABS) {
+ if (mControl.canCreateNewTab()) {
position--;
}
@@ -131,8 +151,8 @@
ImageView favicon =
(ImageView) convertView.findViewById(R.id.favicon);
View close = convertView.findViewById(R.id.close);
- TabControl.Tab tab = mControl.getTab(position);
- mControl.populatePickerData(tab);
+ Tab tab = mControl.getTab(position);
+ tab.populatePickerData();
title.setText(tab.getTitle());
url.setText(tab.getUrl());
Bitmap icon = tab.getFavicon();
@@ -150,12 +170,22 @@
mBrowserActivity.openTabToHomePage();
mBrowserActivity.removeActiveTabPage(false);
} else {
- mListView.setAdapter(mAdapter);
+ mNotified = true;
+ notifyDataSetChanged();
}
}
});
}
return convertView;
}
+
+ void notifyChange() {
+ mHandler.post(new Runnable() {
+ public void run() {
+ mNotified = true;
+ notifyDataSetChanged();
+ }
+ });
+ }
}
}
diff --git a/src/com/android/browser/AddBookmarkPage.java b/src/com/android/browser/AddBookmarkPage.java
index 81123ba..f5b1ff9 100644
--- a/src/com/android/browser/AddBookmarkPage.java
+++ b/src/com/android/browser/AddBookmarkPage.java
@@ -111,6 +111,43 @@
}
}
+ /**
+ * Runnable to save a bookmark, so it can be performed in its own thread.
+ */
+ private class SaveBookmarkRunnable implements Runnable {
+ private Message mMessage;
+ public SaveBookmarkRunnable(Message msg) {
+ mMessage = msg;
+ }
+ public void run() {
+ // Unbundle bookmark data.
+ Bundle bundle = mMessage.getData();
+ String title = bundle.getString("title");
+ String url = bundle.getString("url");
+ boolean invalidateThumbnail = bundle.getBoolean(
+ "invalidateThumbnail");
+ Bitmap thumbnail = invalidateThumbnail ? null
+ : (Bitmap) bundle.getParcelable("thumbnail");
+ String touchIconUrl = bundle.getString("touchIconUrl");
+
+ // Save to the bookmarks DB.
+ try {
+ final ContentResolver cr = getContentResolver();
+ Bookmarks.addBookmark(null, cr, url, title, thumbnail, true);
+ if (touchIconUrl != null) {
+ final Cursor c
+ = BrowserBookmarksAdapter.queryBookmarksForUrl(cr,
+ null, url, true);
+ new DownloadTouchIcon(cr, c, url).execute(mTouchIconUrl);
+ }
+ mMessage.arg1 = 1;
+ } catch (IllegalStateException e) {
+ mMessage.arg1 = 0;
+ }
+ mMessage.sendToTarget();
+ }
+ }
+
private void createHandler() {
if (mHandler == null) {
mHandler = new Handler() {
@@ -118,17 +155,7 @@
public void handleMessage(Message msg) {
switch (msg.what) {
case SAVE_BOOKMARK:
- // Unbundle bookmark data.
- Bundle bundle = msg.getData();
- String title = bundle.getString("title");
- String url = bundle.getString("url");
- boolean invalidateThumbnail = bundle.getBoolean("invalidateThumbnail");
- Bitmap thumbnail = invalidateThumbnail
- ? null : (Bitmap) bundle.getParcelable("thumbnail");
- String touchIconUrl = bundle.getString("touchIconUrl");
-
- // Save to the bookmarks DB.
- if (updateBookmarksDB(title, url, thumbnail, touchIconUrl)) {
+ if (1 == msg.arg1) {
Toast.makeText(AddBookmarkPage.this, R.string.bookmark_saved,
Toast.LENGTH_LONG).show();
} else {
@@ -142,21 +169,6 @@
}
}
- private boolean updateBookmarksDB(String title, String url, Bitmap thumbnail, String touchIconUrl) {
- try {
- final ContentResolver cr = getContentResolver();
- Bookmarks.addBookmark(null, cr, url, title, thumbnail, true);
- if (touchIconUrl != null) {
- final Cursor c =
- BrowserBookmarksAdapter.queryBookmarksForUrl(cr, null, url, true);
- new DownloadTouchIcon(cr, c, url).execute(mTouchIconUrl);
- }
- } catch (IllegalStateException e) {
- return false;
- }
- return true;
- }
-
/**
* Parse the data entered in the dialog and post a message to update the bookmarks database.
*/
@@ -178,23 +190,33 @@
}
return false;
}
- String url = unfilteredUrl;
+ String url = unfilteredUrl.trim();
try {
- URI uriObj = new URI(url);
- String scheme = uriObj.getScheme();
- if (!("about".equals(scheme) || "data".equals(scheme)
- || "javascript".equals(scheme)
- || "file".equals(scheme) || "content".equals(scheme))) {
- WebAddress address;
- try {
- address = new WebAddress(unfilteredUrl);
- } catch (ParseException e) {
- throw new URISyntaxException("", "");
+ // We allow bookmarks with a javascript: scheme, but these will in most cases
+ // fail URI parsing, so don't try it if that's the kind of bookmark we have.
+
+ if (!url.toLowerCase().startsWith("javascript:")) {
+ URI uriObj = new URI(url);
+ String scheme = uriObj.getScheme();
+ if (!Bookmarks.urlHasAcceptableScheme(url)) {
+ // If the scheme was non-null, let the user know that we
+ // can't save their bookmark. If it was null, we'll assume
+ // they meant http when we parse it in the WebAddress class.
+ if (scheme != null) {
+ mAddress.setError(r.getText(R.string.bookmark_cannot_save_url));
+ return false;
+ }
+ WebAddress address;
+ try {
+ address = new WebAddress(unfilteredUrl);
+ } catch (ParseException e) {
+ throw new URISyntaxException("", "");
+ }
+ if (address.mHost.length() == 0) {
+ throw new URISyntaxException("", "");
+ }
+ url = address.toString();
}
- if (address.mHost.length() == 0) {
- throw new URISyntaxException("", "");
- }
- url = address.toString();
}
} catch (URISyntaxException e) {
mAddress.setError(r.getText(R.string.bookmark_url_not_valid));
@@ -217,7 +239,9 @@
bundle.putString("touchIconUrl", mTouchIconUrl);
Message msg = Message.obtain(mHandler, SAVE_BOOKMARK);
msg.setData(bundle);
- mHandler.sendMessage(msg);
+ // Start a new thread so as to not slow down the UI
+ Thread t = new Thread(new SaveBookmarkRunnable(msg));
+ t.start();
setResult(RESULT_OK);
}
return true;
diff --git a/src/com/android/browser/BookmarkItem.java b/src/com/android/browser/BookmarkItem.java
index a70dd4f..fbb362e 100644
--- a/src/com/android/browser/BookmarkItem.java
+++ b/src/com/android/browser/BookmarkItem.java
@@ -33,6 +33,7 @@
protected TextView mUrlText;
protected ImageView mImageView;
protected String mUrl;
+ protected String mTitle;
/**
* Instantiate a bookmark item, including a default favicon.
@@ -65,7 +66,7 @@
* Return the name assigned to this bookmark item.
*/
/* package */ String getName() {
- return mTextView.getText().toString();
+ return mTitle;
}
/**
@@ -99,6 +100,16 @@
* @param name The new name for the bookmark item.
*/
/* package */ void setName(String name) {
+ if (name == null) {
+ return;
+ }
+
+ mTitle = name;
+
+ if (name.length() > BrowserSettings.MAX_TEXTVIEW_LEN) {
+ name = name.substring(0, BrowserSettings.MAX_TEXTVIEW_LEN);
+ }
+
mTextView.setText(name);
}
@@ -107,7 +118,16 @@
* @param url The new url for the bookmark item.
*/
/* package */ void setUrl(String url) {
- mUrlText.setText(url);
+ if (url == null) {
+ return;
+ }
+
mUrl = url;
+
+ if (url.length() > BrowserSettings.MAX_TEXTVIEW_LEN) {
+ url = url.substring(0, BrowserSettings.MAX_TEXTVIEW_LEN);
+ }
+
+ mUrlText.setText(url);
}
}
diff --git a/src/com/android/browser/Bookmarks.java b/src/com/android/browser/Bookmarks.java
index c8aaee7..8d98f89 100644
--- a/src/com/android/browser/Bookmarks.java
+++ b/src/com/android/browser/Bookmarks.java
@@ -41,6 +41,18 @@
private static String[] SELECTION_ARGS;
+ // We only want the user to be able to bookmark content that
+ // the browser can handle directly.
+ private static final String acceptableBookmarkSchemes[] = {
+ "http:",
+ "https:",
+ "about:",
+ "data:",
+ "javascript:",
+ "file:",
+ "content:"
+ };
+
/**
* Add a bookmark to the database.
* @param context Context of the calling Activity. This is used to make
@@ -214,4 +226,17 @@
bm.compress(Bitmap.CompressFormat.PNG, 100, os);
return os.toByteArray();
}
+
+ /* package */ static boolean urlHasAcceptableScheme(String url) {
+ if (url == null) {
+ return false;
+ }
+
+ for (int i = 0; i < acceptableBookmarkSchemes.length; i++) {
+ if (url.startsWith(acceptableBookmarkSchemes[i])) {
+ return true;
+ }
+ }
+ return false;
+ }
}
diff --git a/src/com/android/browser/BrowserActivity.java b/src/com/android/browser/BrowserActivity.java
index 9030cf7..ab21a84 100644
--- a/src/com/android/browser/BrowserActivity.java
+++ b/src/com/android/browser/BrowserActivity.java
@@ -16,9 +16,6 @@
package com.android.browser;
-import com.google.android.googleapps.IGoogleLoginService;
-import com.google.android.googlelogin.GoogleLoginServiceConstants;
-
import android.app.Activity;
import android.app.AlertDialog;
import android.app.ProgressDialog;
@@ -33,34 +30,24 @@
import android.content.DialogInterface;
import android.content.Intent;
import android.content.IntentFilter;
-import android.content.ServiceConnection;
-import android.content.DialogInterface.OnCancelListener;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
-import android.content.res.AssetManager;
import android.content.res.Configuration;
import android.content.res.Resources;
import android.database.Cursor;
-import android.database.sqlite.SQLiteDatabase;
-import android.database.sqlite.SQLiteException;
+import android.database.DatabaseUtils;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
-import android.graphics.DrawFilter;
-import android.graphics.Paint;
-import android.graphics.PaintFlagsDrawFilter;
import android.graphics.Picture;
import android.graphics.PixelFormat;
import android.graphics.Rect;
import android.graphics.drawable.Drawable;
-import android.hardware.SensorListener;
-import android.hardware.SensorManager;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.net.Uri;
import android.net.WebAddress;
-import android.net.http.EventHandler;
import android.net.http.SslCertificate;
import android.net.http.SslError;
import android.os.AsyncTask;
@@ -68,11 +55,9 @@
import android.os.Debug;
import android.os.Environment;
import android.os.Handler;
-import android.os.IBinder;
import android.os.Message;
import android.os.PowerManager;
import android.os.Process;
-import android.os.RemoteException;
import android.os.ServiceManager;
import android.os.SystemClock;
import android.provider.Browser;
@@ -83,7 +68,6 @@
import android.text.IClipboard;
import android.text.TextUtils;
import android.text.format.DateFormat;
-import android.text.util.Regex;
import android.util.AttributeSet;
import android.util.Log;
import android.view.ContextMenu;
@@ -99,39 +83,36 @@
import android.view.WindowManager;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.MenuItem.OnMenuItemClickListener;
-import android.view.animation.AlphaAnimation;
-import android.view.animation.Animation;
-import android.view.animation.AnimationSet;
-import android.view.animation.DecelerateInterpolator;
-import android.view.animation.ScaleAnimation;
-import android.view.animation.TranslateAnimation;
import android.webkit.CookieManager;
import android.webkit.CookieSyncManager;
import android.webkit.DownloadListener;
-import android.webkit.GeolocationPermissions;
import android.webkit.HttpAuthHandler;
import android.webkit.PluginManager;
import android.webkit.SslErrorHandler;
import android.webkit.URLUtil;
import android.webkit.ValueCallback;
import android.webkit.WebChromeClient;
-import android.webkit.WebChromeClient.CustomViewCallback;
import android.webkit.WebHistoryItem;
import android.webkit.WebIconDatabase;
-import android.webkit.WebStorage;
import android.webkit.WebView;
-import android.webkit.WebViewClient;
import android.widget.EditText;
import android.widget.FrameLayout;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;
+import android.accounts.Account;
+import android.accounts.AccountManager;
+import android.accounts.AccountManagerFuture;
+import android.accounts.AuthenticatorException;
+import android.accounts.OperationCanceledException;
+import android.accounts.AccountManagerCallback;
-import java.io.BufferedOutputStream;
+import com.android.common.Patterns;
+
+import com.google.android.gsf.GoogleLoginServiceConstants;
+
import java.io.ByteArrayOutputStream;
import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.MalformedURLException;
@@ -141,18 +122,13 @@
import java.net.URLEncoder;
import java.text.ParseException;
import java.util.Date;
-import java.util.Enumeration;
import java.util.HashMap;
-import java.util.LinkedList;
-import java.util.Vector;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
-import java.util.zip.ZipEntry;
-import java.util.zip.ZipFile;
public class BrowserActivity extends Activity
- implements View.OnCreateContextMenuListener,
- DownloadListener {
+ implements View.OnCreateContextMenuListener, DownloadListener,
+ AccountManagerCallback<Account[]> {
/* Define some aliases to make these debugging flags easier to refer to.
* This file imports android.provider.Browser, so we can't just refer to "Browser.DEBUG".
@@ -161,11 +137,6 @@
private final static boolean LOGV_ENABLED = com.android.browser.Browser.LOGV_ENABLED;
private final static boolean LOGD_ENABLED = com.android.browser.Browser.LOGD_ENABLED;
- private IGoogleLoginService mGls = null;
- private ServiceConnection mGlsConnection = null;
-
- private SensorManager mSensorManager = null;
-
// These are single-character shortcuts for searching popular sources.
private static final int SHORTCUT_INVALID = 0;
private static final int SHORTCUT_GOOGLE_SEARCH = 1;
@@ -173,106 +144,73 @@
private static final int SHORTCUT_DICTIONARY_SEARCH = 3;
private static final int SHORTCUT_GOOGLE_MOBILE_LOCAL_SEARCH = 4;
- /* Whitelisted webpages
- private static HashSet<String> sWhiteList;
+ private Account[] mAccountsGoogle;
+ private Account[] mAccountsPreferHosted;
- static {
- sWhiteList = new HashSet<String>();
- sWhiteList.add("cnn.com/");
- sWhiteList.add("espn.go.com/");
- sWhiteList.add("nytimes.com/");
- sWhiteList.add("engadget.com/");
- sWhiteList.add("yahoo.com/");
- sWhiteList.add("msn.com/");
- sWhiteList.add("amazon.com/");
- sWhiteList.add("consumerist.com/");
- sWhiteList.add("google.com/m/news");
+ private void startReadOfGoogleAccounts() {
+ mAccountsGoogle = null;
+ mAccountsPreferHosted = null;
+
+ AccountManager.get(this).getAccountsByTypeAndFeatures(
+ GoogleLoginServiceConstants.ACCOUNT_TYPE,
+ new String[]{GoogleLoginServiceConstants.FEATURE_LEGACY_HOSTED_OR_GOOGLE},
+ this, null);
}
- */
+
+ /** This implements AccountManagerCallback<Account[]> */
+ public void run(AccountManagerFuture<Account[]> accountManagerFuture) {
+ try {
+ if (mAccountsGoogle == null) {
+ mAccountsGoogle = accountManagerFuture.getResult();
+
+ AccountManager.get(this).getAccountsByTypeAndFeatures(
+ GoogleLoginServiceConstants.ACCOUNT_TYPE,
+ new String[]{GoogleLoginServiceConstants.FEATURE_LEGACY_GOOGLE},
+ this, null);
+ } else {
+ mAccountsPreferHosted = accountManagerFuture.getResult();
+ setupHomePage();
+ }
+ } catch (OperationCanceledException e) {
+ setupHomePage();
+ } catch (IOException e) {
+ setupHomePage();
+ } catch (AuthenticatorException e) {
+ setupHomePage();
+ }
+ }
private void setupHomePage() {
- final Runnable getAccount = new Runnable() {
- public void run() {
- // Lower priority
- Process.setThreadPriority(Process.THREAD_PRIORITY_BACKGROUND);
- // get the default home page
- String homepage = mSettings.getHomePage();
+ // get the default home page
+ String homepage = mSettings.getHomePage();
- try {
- if (mGls == null) return;
+ if (mAccountsPreferHosted != null && mAccountsGoogle != null) {
+ // three cases:
+ //
+ // hostedUser == googleUser
+ // The device has only a google account
+ //
+ // hostedUser != googleUser
+ // The device has a hosted account and a google account
+ //
+ // hostedUser != null, googleUser == null
+ // The device has only a hosted account (so far)
+ String hostedUser = mAccountsPreferHosted.length == 0
+ ? null
+ : mAccountsPreferHosted[0].name;
+ String googleUser = mAccountsGoogle.length == 0 ? null : mAccountsGoogle[0].name;
- if (!homepage.startsWith("http://www.google.")) return;
- if (homepage.indexOf('?') == -1) return;
+ // developers might have no accounts at all
+ if (hostedUser == null) return;
- String hostedUser = mGls.getAccount(GoogleLoginServiceConstants.PREFER_HOSTED);
- String googleUser = mGls.getAccount(GoogleLoginServiceConstants.REQUIRE_GOOGLE);
-
- // three cases:
- //
- // hostedUser == googleUser
- // The device has only a google account
- //
- // hostedUser != googleUser
- // The device has a hosted account and a google account
- //
- // hostedUser != null, googleUser == null
- // The device has only a hosted account (so far)
-
- // developers might have no accounts at all
- if (hostedUser == null) return;
-
- if (googleUser == null || !hostedUser.equals(googleUser)) {
- String domain = hostedUser.substring(hostedUser.lastIndexOf('@')+1);
- homepage = homepage.replace("?", "/a/" + domain + "?");
- }
- } catch (RemoteException ignore) {
- // Login service died; carry on
- } catch (RuntimeException ignore) {
- // Login service died; carry on
- } finally {
- finish(homepage);
- }
+ if (googleUser == null || !hostedUser.equals(googleUser)) {
+ String domain = hostedUser.substring(hostedUser.lastIndexOf('@')+1);
+ homepage = homepage.replace("?", "/a/" + domain + "?");
}
+ }
- private void finish(final String homepage) {
- mHandler.post(new Runnable() {
- public void run() {
- mSettings.setHomePage(BrowserActivity.this, homepage);
- resumeAfterCredentials();
-
- // as this is running in a separate thread,
- // BrowserActivity's onDestroy() may have been called,
- // which also calls unbindService().
- if (mGlsConnection != null) {
- // we no longer need to keep GLS open
- unbindService(mGlsConnection);
- mGlsConnection = null;
- }
- } });
- } };
-
- final boolean[] done = { false };
-
- // Open a connection to the Google Login Service. The first
- // time the connection is established, set up the homepage depending on
- // the account in a background thread.
- mGlsConnection = new ServiceConnection() {
- public void onServiceConnected(ComponentName className, IBinder service) {
- mGls = IGoogleLoginService.Stub.asInterface(service);
- if (done[0] == false) {
- done[0] = true;
- Thread account = new Thread(getAccount);
- account.setName("GLSAccount");
- account.start();
- }
- }
- public void onServiceDisconnected(ComponentName className) {
- mGls = null;
- }
- };
-
- bindService(GoogleLoginServiceConstants.SERVICE_INTENT,
- mGlsConnection, Context.BIND_AUTO_CREATE);
+ mSettings.setHomePage(BrowserActivity.this, homepage);
+ resumeAfterCredentials();
}
private static class ClearThumbnails extends AsyncTask<File, Void, Void> {
@@ -295,7 +233,8 @@
*/
private FrameLayout mBrowserFrameLayout;
- @Override public void onCreate(Bundle icicle) {
+ @Override
+ public void onCreate(Bundle icicle) {
if (LOGV_ENABLED) {
Log.v(LOGTAG, this + " onStart");
}
@@ -314,16 +253,6 @@
return;
}
- //
- // start MASF proxy service
- //
- //Intent proxyServiceIntent = new Intent();
- //proxyServiceIntent.setComponent
- // (new ComponentName(
- // "com.android.masfproxyservice",
- // "com.android.masfproxyservice.MasfProxyService"));
- //startService(proxyServiceIntent, null);
-
mSecLockIcon = Resources.getSystem().getDrawable(
android.R.drawable.ic_secure);
mMixLockIcon = Resources.getSystem().getDrawable(
@@ -341,6 +270,7 @@
.findViewById(R.id.fullscreen_custom_content);
frameLayout.addView(mBrowserFrameLayout, COVER_SCREEN_PARAMS);
mTitleBar = new TitleBar(this);
+ mFakeTitleBar = new TitleBar(this);
// Create the tab control and our initial tab
mTabControl = new TabControl(this);
@@ -368,6 +298,14 @@
ConnectivityManager.CONNECTIVITY_ACTION)) {
boolean noConnectivity = intent.getBooleanExtra(
ConnectivityManager.EXTRA_NO_CONNECTIVITY, false);
+ if (!noConnectivity) {
+ NetworkInfo info = intent.getParcelableExtra(
+ ConnectivityManager.EXTRA_NETWORK_INFO);
+ String typeName = info.getTypeName();
+ String subtypeName = info.getSubtypeName();
+ sendNetworkType(typeName.toLowerCase(),
+ (subtypeName != null ? subtypeName.toLowerCase() : ""));
+ }
onNetworkToggle(!noConnectivity);
}
}
@@ -435,7 +373,7 @@
// the tab will be close when exit.
UrlData urlData = getUrlDataFromIntent(intent);
- final TabControl.Tab t = mTabControl.createNewTab(
+ final Tab t = mTabControl.createNewTab(
Intent.ACTION_VIEW.equals(intent.getAction()) &&
intent.getData() != null,
intent.getStringExtra(Browser.EXTRA_APPLICATION_ID), urlData.mUrl);
@@ -454,7 +392,7 @@
// asset directory to the data partition.
if ((extra == null || !extra.getBoolean("testing"))
&& !mSettings.isLoginInitialized()) {
- setupHomePage();
+ startReadOfGoogleAccounts();
}
if (urlData.isEmpty()) {
@@ -485,7 +423,7 @@
@Override
protected void onNewIntent(Intent intent) {
- TabControl.Tab current = mTabControl.getCurrentTab();
+ Tab current = mTabControl.getCurrentTab();
// When a tab is closed on exit, the current tab index is set to -1.
// Reset before proceed as Browser requires the current tab to be set.
if (current == null) {
@@ -528,7 +466,7 @@
if (Intent.ACTION_VIEW.equals(action)
&& !getPackageName().equals(appId)
&& (flags & Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT) != 0) {
- TabControl.Tab appTab = mTabControl.getTabFromId(appId);
+ Tab appTab = mTabControl.getTabFromId(appId);
if (appTab != null) {
Log.i(LOGTAG, "Reusing tab for " + appId);
// Dismiss the subwindow if applicable.
@@ -575,8 +513,28 @@
}
}
} else {
- if ("about:debug".equals(urlData.mUrl)) {
- mSettings.toggleDebugSettings();
+ if (!urlData.isEmpty()
+ && urlData.mUrl.startsWith("about:debug")) {
+ if ("about:debug.dom".equals(urlData.mUrl)) {
+ current.getWebView().dumpDomTree(false);
+ } else if ("about:debug.dom.file".equals(urlData.mUrl)) {
+ current.getWebView().dumpDomTree(true);
+ } else if ("about:debug.render".equals(urlData.mUrl)) {
+ current.getWebView().dumpRenderTree(false);
+ } else if ("about:debug.render.file".equals(urlData.mUrl)) {
+ current.getWebView().dumpRenderTree(true);
+ } else if ("about:debug.display".equals(urlData.mUrl)) {
+ current.getWebView().dumpDisplayTree();
+ } else if (urlData.mUrl.startsWith("about:debug.drag")) {
+ int index = urlData.mUrl.codePointAt(16) - '0';
+ if (index <= 0 || index > 9) {
+ current.getWebView().setDragTracker(null);
+ } else {
+ current.getWebView().setDragTracker(new MeshTracker(index));
+ }
+ } else {
+ mSettings.toggleDebugSettings();
+ }
return;
}
// Get rid of the subwindow if it exists
@@ -637,7 +595,7 @@
// URLs and site specific search shortcuts are handled by the regular flow of control, so
// return early.
- if (Regex.WEB_URL_PATTERN.matcher(url).matches()
+ if (Patterns.WEB_URL.matcher(url).matches()
|| ACCEPTED_URI_SCHEMA.matcher(url).matches()
|| parseUrlShortcut(url) != SHORTCUT_INVALID) {
return false;
@@ -687,11 +645,7 @@
url = intent.getStringExtra(SearchManager.QUERY);
if (url != null) {
mLastEnteredUrl = url;
- // Don't add Urls, just search terms.
- // Urls will get added when the page is loaded.
- if (!Regex.WEB_URL_PATTERN.matcher(url).matches()) {
- Browser.updateVisitedHistory(mResolver, url, false);
- }
+ Browser.updateVisitedHistory(mResolver, url, false);
// In general, we shouldn't modify URL from Intent.
// But currently, we get the user-typed URL from search box as well.
url = fixUrl(url);
@@ -744,100 +698,8 @@
return inUrl;
}
- /**
- * Looking for the pattern like this
- *
- * *
- * * *
- * *** * *******
- * * *
- * * *
- * *
- */
- private final SensorListener mSensorListener = new SensorListener() {
- private long mLastGestureTime;
- private float[] mPrev = new float[3];
- private float[] mPrevDiff = new float[3];
- private float[] mDiff = new float[3];
- private float[] mRevertDiff = new float[3];
-
- public void onSensorChanged(int sensor, float[] values) {
- boolean show = false;
- float[] diff = new float[3];
-
- for (int i = 0; i < 3; i++) {
- diff[i] = values[i] - mPrev[i];
- if (Math.abs(diff[i]) > 1) {
- show = true;
- }
- if ((diff[i] > 1.0 && mDiff[i] < 0.2)
- || (diff[i] < -1.0 && mDiff[i] > -0.2)) {
- // start track when there is a big move, or revert
- mRevertDiff[i] = mDiff[i];
- mDiff[i] = 0;
- } else if (diff[i] > -0.2 && diff[i] < 0.2) {
- // reset when it is flat
- mDiff[i] = mRevertDiff[i] = 0;
- }
- mDiff[i] += diff[i];
- mPrevDiff[i] = diff[i];
- mPrev[i] = values[i];
- }
-
- if (false) {
- // only shows if we think the delta is big enough, in an attempt
- // to detect "serious" moves left/right or up/down
- Log.d("BrowserSensorHack", "sensorChanged " + sensor + " ("
- + values[0] + ", " + values[1] + ", " + values[2] + ")"
- + " diff(" + diff[0] + " " + diff[1] + " " + diff[2]
- + ")");
- Log.d("BrowserSensorHack", " mDiff(" + mDiff[0] + " "
- + mDiff[1] + " " + mDiff[2] + ")" + " mRevertDiff("
- + mRevertDiff[0] + " " + mRevertDiff[1] + " "
- + mRevertDiff[2] + ")");
- }
-
- long now = android.os.SystemClock.uptimeMillis();
- if (now - mLastGestureTime > 1000) {
- mLastGestureTime = 0;
-
- float y = mDiff[1];
- float z = mDiff[2];
- float ay = Math.abs(y);
- float az = Math.abs(z);
- float ry = mRevertDiff[1];
- float rz = mRevertDiff[2];
- float ary = Math.abs(ry);
- float arz = Math.abs(rz);
- boolean gestY = ay > 2.5f && ary > 1.0f && ay > ary;
- boolean gestZ = az > 3.5f && arz > 1.0f && az > arz;
-
- if ((gestY || gestZ) && !(gestY && gestZ)) {
- WebView view = mTabControl.getCurrentWebView();
-
- if (view != null) {
- if (gestZ) {
- if (z < 0) {
- view.zoomOut();
- } else {
- view.zoomIn();
- }
- } else {
- view.flingScroll(0, Math.round(y * 100));
- }
- }
- mLastGestureTime = now;
- }
- }
- }
-
- public void onAccuracyChanged(int sensor, int accuracy) {
- // TODO Auto-generated method stub
-
- }
- };
-
- @Override protected void onResume() {
+ @Override
+ protected void onResume() {
super.onResume();
if (LOGV_ENABLED) {
Log.v(LOGTAG, "BrowserActivity.onResume: this=" + this);
@@ -867,24 +729,12 @@
registerReceiver(mNetworkStateIntentReceiver,
mNetworkStateChangedFilter);
WebView.enablePlatformNotifications();
-
- if (mSettings.doFlick()) {
- if (mSensorManager == null) {
- mSensorManager = (SensorManager) getSystemService(
- Context.SENSOR_SERVICE);
- }
- mSensorManager.registerListener(mSensorListener,
- SensorManager.SENSOR_ACCELEROMETER,
- SensorManager.SENSOR_DELAY_FASTEST);
- } else {
- mSensorManager = null;
- }
}
/**
* Since the actual title bar is embedded in the WebView, and removing it
- * would change its appearance, create a temporary title bar to go at
- * the top of the screen while the menu is open.
+ * would change its appearance, use a different TitleBar to show overlayed
+ * at the top of the screen, when the menu is open or the page is loading.
*/
private TitleBar mFakeTitleBar;
@@ -899,7 +749,7 @@
*/
private FrameLayout.LayoutParams mFakeTitleBarParams
= new FrameLayout.LayoutParams(
- ViewGroup.LayoutParams.FILL_PARENT,
+ ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.WRAP_CONTENT);
/**
* Keeps track of whether the options menu is open. This is important in
@@ -987,7 +837,7 @@
private void showFakeTitleBar() {
final View decor = getWindow().peekDecorView();
- if (mFakeTitleBar == null && mActiveTabsPage == null
+ if (mFakeTitleBar.getParent() == null && mActiveTabsPage == null
&& !mActivityInPause && decor != null
&& decor.getWindowToken() != null) {
Rect visRect = new Rect();
@@ -997,12 +847,6 @@
}
return;
}
- final WebView webView = getTopWindow();
- mFakeTitleBar = new TitleBar(this);
- mFakeTitleBar.setTitleAndUrl(null, webView.getUrl());
- mFakeTitleBar.setProgress(webView.getProgress());
- mFakeTitleBar.setFavicon(webView.getFavicon());
- updateLockIconToLatest();
WindowManager manager
= (WindowManager) getSystemService(Context.WINDOW_SERVICE);
@@ -1011,7 +855,7 @@
// while the menu is up
WindowManager.LayoutParams params
= new WindowManager.LayoutParams(
- ViewGroup.LayoutParams.FILL_PARENT,
+ ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.TYPE_APPLICATION_SUB_PANEL,
WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,
@@ -1050,8 +894,9 @@
showFakeTitleBar();
}
}
+
private void hideFakeTitleBar() {
- if (mFakeTitleBar == null) return;
+ if (mFakeTitleBar.getParent() == null) return;
WindowManager.LayoutParams params = (WindowManager.LayoutParams)
mFakeTitleBarHolder.getLayoutParams();
WebView mainView = mTabControl.getCurrentWebView();
@@ -1066,7 +911,6 @@
manager.updateViewLayout(mFakeTitleBarHolder, params);
mFakeTitleBarHolder.removeView(mFakeTitleBar);
manager.removeView(mFakeTitleBarHolder);
- mFakeTitleBar = null;
}
/**
@@ -1081,12 +925,21 @@
openContextMenu(mTitleBar);
}
+ @Override
+ public void onContextMenuClosed(Menu menu) {
+ super.onContextMenuClosed(menu);
+ if (mInLoad) {
+ showFakeTitleBar();
+ }
+ }
+
/**
* onSaveInstanceState(Bundle map)
* onSaveInstanceState is called right before onStop(). The map contains
* the saved state.
*/
- @Override protected void onSaveInstanceState(Bundle outState) {
+ @Override
+ protected void onSaveInstanceState(Bundle outState) {
if (LOGV_ENABLED) {
Log.v(LOGTAG, "BrowserActivity.onSaveInstanceState: this=" + this);
}
@@ -1100,7 +953,8 @@
mTabControl.saveState(outState);
}
- @Override protected void onPause() {
+ @Override
+ protected void onPause() {
super.onPause();
if (mActivityInPause) {
@@ -1135,22 +989,27 @@
// unregister network state listener
unregisterReceiver(mNetworkStateIntentReceiver);
WebView.disablePlatformNotifications();
-
- if (mSensorManager != null) {
- mSensorManager.unregisterListener(mSensorListener);
- }
}
- @Override protected void onDestroy() {
+ @Override
+ protected void onDestroy() {
if (LOGV_ENABLED) {
Log.v(LOGTAG, "BrowserActivity.onDestroy: this=" + this);
}
super.onDestroy();
+ if (mUploadMessage != null) {
+ mUploadMessage.onReceiveValue(null);
+ mUploadMessage = null;
+ }
+
if (mTabControl == null) return;
+ // Remove the fake title bar if it is there
+ hideFakeTitleBar();
+
// Remove the current tab and sub window
- TabControl.Tab t = mTabControl.getCurrentTab();
+ Tab t = mTabControl.getCurrentTab();
if (t != null) {
dismissSubWindow(t);
removeTabFromContentView(t);
@@ -1158,20 +1017,6 @@
// Destroy all the tabs
mTabControl.destroy();
WebIconDatabase.getInstance().close();
- if (mGlsConnection != null) {
- unbindService(mGlsConnection);
- mGlsConnection = null;
- }
-
- //
- // stop MASF proxy service
- //
- //Intent proxyServiceIntent = new Intent();
- //proxyServiceIntent.setComponent
- // (new ComponentName(
- // "com.android.masfproxyservice",
- // "com.android.masfproxyservice.MasfProxyService"));
- //stopService(proxyServiceIntent);
unregisterReceiver(mPackageInstallationReceiver);
}
@@ -1185,7 +1030,7 @@
mPageInfoDialog.dismiss();
showPageInfo(
mPageInfoView,
- mPageInfoFromShowSSLCertificateOnError.booleanValue());
+ mPageInfoFromShowSSLCertificateOnError);
}
if (mSSLCertificateDialog != null) {
mSSLCertificateDialog.dismiss();
@@ -1213,21 +1058,20 @@
showHttpAuthentication(mHttpAuthHandler, null, null, title,
name, password, focusId);
}
- if (mFindDialog != null && mFindDialog.isShowing()) {
- mFindDialog.onConfigurationChanged(newConfig);
- }
}
- @Override public void onLowMemory() {
+ @Override
+ public void onLowMemory() {
super.onLowMemory();
mTabControl.freeMemory();
}
private boolean resumeWebViewTimers() {
- if ((!mActivityInPause && !mPageStarted) ||
- (mActivityInPause && mPageStarted)) {
+ Tab tab = mTabControl.getCurrentTab();
+ boolean inLoad = tab.inLoad();
+ if ((!mActivityInPause && !inLoad) || (mActivityInPause && inLoad)) {
CookieSyncManager.getInstance().startSync();
- WebView w = mTabControl.getCurrentWebView();
+ WebView w = tab.getWebView();
if (w != null) {
w.resumeTimers();
}
@@ -1238,7 +1082,9 @@
}
private boolean pauseWebViewTimers() {
- if (mActivityInPause && !mPageStarted) {
+ Tab tab = mTabControl.getCurrentTab();
+ boolean inLoad = tab.inLoad();
+ if (mActivityInPause && !inLoad) {
CookieSyncManager.getInstance().stopSync();
WebView w = mTabControl.getCurrentWebView();
if (w != null) {
@@ -1327,6 +1173,10 @@
return mTabControl.getCurrentTopWebView();
}
+ TabControl getTabControl() {
+ return mTabControl;
+ }
+
@Override
public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
@@ -1361,19 +1211,21 @@
// options selector, so set mCanChord to true so we can access them.
mCanChord = true;
int id = item.getItemId();
+ boolean result = true;
switch (id) {
// For the context menu from the title bar
- case R.id.title_bar_share_page_url:
case R.id.title_bar_copy_page_url:
- WebView mainView = mTabControl.getCurrentWebView();
+ Tab currentTab = mTabControl.getCurrentTab();
+ if (null == currentTab) {
+ result = false;
+ break;
+ }
+ WebView mainView = currentTab.getWebView();
if (null == mainView) {
- return false;
+ result = false;
+ break;
}
- if (id == R.id.title_bar_share_page_url) {
- Browser.sendString(this, mainView.getUrl());
- } else {
- copy(mainView.getUrl());
- }
+ copy(mainView.getUrl());
break;
// -- Browser context menu
case R.id.open_context_menu_id:
@@ -1384,7 +1236,8 @@
case R.id.copy_link_context_menu_id:
final WebView webView = getTopWindow();
if (null == webView) {
- return false;
+ result = false;
+ break;
}
final HashMap hrefMap = new HashMap();
hrefMap.put("webview", webView);
@@ -1395,10 +1248,10 @@
default:
// For other context menus
- return onOptionsItemSelected(item);
+ result = onOptionsItemSelected(item);
}
mCanChord = false;
- return true;
+ return result;
}
private Bundle createGoogleSearchSourceBundle(String source) {
@@ -1438,8 +1291,8 @@
* the current one, return false.
*/
/* package */ boolean switchToTab(int index) {
- TabControl.Tab tab = mTabControl.getTab(index);
- TabControl.Tab currentTab = mTabControl.getCurrentTab();
+ Tab tab = mTabControl.getTab(index);
+ Tab currentTab = mTabControl.getCurrentTab();
if (tab == null || tab == currentTab) {
return false;
}
@@ -1455,20 +1308,20 @@
return true;
}
- /* package */ TabControl.Tab openTabToHomePage() {
+ /* package */ Tab openTabToHomePage() {
return openTabAndShow(mSettings.getHomePage(), false, null);
}
/* package */ void closeCurrentWindow() {
- final TabControl.Tab current = mTabControl.getCurrentTab();
+ final Tab current = mTabControl.getCurrentTab();
if (mTabControl.getTabCount() == 1) {
// This is the last tab. Open a new one, with the home
// page and close the current one.
- TabControl.Tab newTab = openTabToHomePage();
+ openTabToHomePage();
closeTab(current);
return;
}
- final TabControl.Tab parent = current.getParentTab();
+ final Tab parent = current.getParentTab();
int indexToShow = -1;
if (parent != null) {
indexToShow = mTabControl.getTabIndex(parent);
@@ -1581,7 +1434,7 @@
break;
case R.id.homepage_menu_id:
- TabControl.Tab current = mTabControl.getCurrentTab();
+ Tab current = mTabControl.getCurrentTab();
if (current != null) {
dismissSubWindow(current);
current.getWebView().loadUrl(mSettings.getHomePage());
@@ -1591,6 +1444,8 @@
case R.id.preferences_menu_id:
Intent intent = new Intent(this,
BrowserPreferencesPage.class);
+ intent.putExtra(BrowserPreferencesPage.CURRENT_PAGE,
+ getTopWindow().getUrl());
startActivityForResult(intent, PREFERENCES_PAGE);
break;
@@ -1614,9 +1469,17 @@
bookmarksOrHistoryPicker(true);
break;
+ case R.id.title_bar_share_page_url:
case R.id.share_page_menu_id:
- Browser.sendString(this, getTopWindow().getUrl(),
- getText(R.string.choosertitle_sharevia).toString());
+ Tab currentTab = mTabControl.getCurrentTab();
+ if (null == currentTab) {
+ mCanChord = false;
+ return false;
+ }
+ currentTab.populatePickerData();
+ sharePage(this, currentTab.getTitle(),
+ currentTab.getUrl(), currentTab.getFavicon(),
+ createScreenshot(currentTab.getWebView()));
break;
case R.id.dump_nav_menu_id:
@@ -1647,7 +1510,7 @@
int menuid = item.getItemId();
for (int id = 0; id < WINDOW_SHORTCUT_ID_ARRAY.length; id++) {
if (WINDOW_SHORTCUT_ID_ARRAY[id] == menuid) {
- TabControl.Tab desiredTab = mTabControl.getTab(id);
+ Tab desiredTab = mTabControl.getTab(id);
if (desiredTab != null &&
desiredTab != mTabControl.getCurrentTab()) {
switchToTab(id);
@@ -1672,8 +1535,8 @@
mMenuState = R.id.MAIN_MENU;
}
- @Override public boolean onPrepareOptionsMenu(Menu menu)
- {
+ @Override
+ public boolean onPrepareOptionsMenu(Menu menu) {
// This happens when the user begins to hold down the menu key, so
// allow them to chord to get a shortcut.
mCanChord = true;
@@ -1714,7 +1577,7 @@
.setEnabled(canGoForward);
menu.findItem(R.id.new_tab_menu_id).setEnabled(
- mTabControl.getTabCount() < TabControl.MAX_TABS);
+ mTabControl.canCreateNewTab());
// decide whether to show the share link option
PackageManager pm = getPackageManager();
@@ -1818,7 +1681,9 @@
menu.setHeaderView(titleView);
// decide whether to show the open link in new tab option
menu.findItem(R.id.open_newtab_context_menu_id).setVisible(
- mTabControl.getTabCount() < TabControl.MAX_TABS);
+ mTabControl.canCreateNewTab());
+ menu.findItem(R.id.bookmark_context_menu_id).setVisible(
+ Bookmarks.urlHasAcceptableScheme(extra));
PackageManager pm = getPackageManager();
Intent send = new Intent(Intent.ACTION_SEND);
send.setType("text/plain");
@@ -1836,23 +1701,26 @@
new Intent(Intent.ACTION_VIEW, Uri.parse(extra)));
menu.findItem(R.id.download_context_menu_id).
setOnMenuItemClickListener(new Download(extra));
+ menu.findItem(R.id.set_wallpaper_context_menu_id).
+ setOnMenuItemClickListener(new SetAsWallpaper(extra));
break;
default:
Log.w(LOGTAG, "We should not get here.");
break;
}
+ hideFakeTitleBar();
}
// Attach the given tab to the content view.
// this should only be called for the current tab.
- private void attachTabToContentView(TabControl.Tab t) {
+ private void attachTabToContentView(Tab t) {
// Attach the container that contains the main WebView and any other UI
// associated with the tab.
t.attachTabToContentView(mContentView);
if (mShouldShowErrorConsole) {
- ErrorConsoleView errorConsole = mTabControl.getCurrentErrorConsole(true);
+ ErrorConsoleView errorConsole = t.getErrorConsole(true);
if (errorConsole.numberOfErrors() == 0) {
errorConsole.showConsole(ErrorConsoleView.SHOW_NONE);
} else {
@@ -1860,18 +1728,10 @@
}
mErrorConsoleContainer.addView(errorConsole,
- new LinearLayout.LayoutParams(ViewGroup.LayoutParams.FILL_PARENT,
+ new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.WRAP_CONTENT));
}
- setLockIconType(t.getLockIconType());
- setPrevLockType(t.getPrevLockIconType());
-
- // this is to match the code in removeTabFromContentView()
- if (!mPageStarted && t.getTopWindow().getProgress() < 100) {
- mPageStarted = true;
- }
-
WebView view = t.getWebView();
view.setEmbeddedTitleBar(mTitleBar);
// Request focus on the top window.
@@ -1879,70 +1739,51 @@
}
// Attach a sub window to the main WebView of the given tab.
- private void attachSubWindow(TabControl.Tab t) {
+ void attachSubWindow(Tab t) {
t.attachSubWindow(mContentView);
getTopWindow().requestFocus();
}
// Remove the given tab from the content view.
- private void removeTabFromContentView(TabControl.Tab t) {
+ private void removeTabFromContentView(Tab t) {
// Remove the container that contains the main WebView.
t.removeTabFromContentView(mContentView);
- if (mTabControl.getCurrentErrorConsole(false) != null) {
- mErrorConsoleContainer.removeView(mTabControl.getCurrentErrorConsole(false));
+ ErrorConsoleView errorConsole = t.getErrorConsole(false);
+ if (errorConsole != null) {
+ mErrorConsoleContainer.removeView(errorConsole);
}
WebView view = t.getWebView();
if (view != null) {
view.setEmbeddedTitleBar(null);
}
-
- // unlike attachTabToContentView(), removeTabFromContentView() can be
- // called for the non-current tab. Need to add the check.
- if (t == mTabControl.getCurrentTab()) {
- t.setLockIconType(getLockIconType());
- t.setPrevLockIconType(getPrevLockType());
-
- // this is not a perfect solution. But currently there is one
- // WebViewClient for all the WebView. if user switches from an
- // in-load window to an already loaded window, mPageStarted will not
- // be set to false. If user leaves the Browser, pauseWebViewTimers()
- // won't do anything and leaves the timer running even Browser is in
- // the background.
- if (mPageStarted) {
- mPageStarted = false;
- }
- }
}
// Remove the sub window if it exists. Also called by TabControl when the
// user clicks the 'X' to dismiss a sub window.
- /* package */ void dismissSubWindow(TabControl.Tab t) {
+ /* package */ void dismissSubWindow(Tab t) {
t.removeSubWindow(mContentView);
- // Tell the TabControl to dismiss the subwindow. This will destroy
- // the WebView.
- mTabControl.dismissSubWindow(t);
+ // dismiss the subwindow. This will destroy the WebView.
+ t.dismissSubWindow();
getTopWindow().requestFocus();
}
// A wrapper function of {@link #openTabAndShow(UrlData, boolean, String)}
// that accepts url as string.
- private TabControl.Tab openTabAndShow(String url, boolean closeOnExit,
- String appId) {
+ private Tab openTabAndShow(String url, boolean closeOnExit, String appId) {
return openTabAndShow(new UrlData(url), closeOnExit, appId);
}
// This method does a ton of stuff. It will attempt to create a new tab
// if we haven't reached MAX_TABS. Otherwise it uses the current tab. If
// url isn't null, it will load the given url.
- /* package */ TabControl.Tab openTabAndShow(UrlData urlData,
- boolean closeOnExit, String appId) {
- final boolean newTab = mTabControl.getTabCount() != TabControl.MAX_TABS;
- final TabControl.Tab currentTab = mTabControl.getCurrentTab();
- if (newTab) {
- final TabControl.Tab tab = mTabControl.createNewTab(
- closeOnExit, appId, urlData.mUrl);
+ /* package */Tab openTabAndShow(UrlData urlData, boolean closeOnExit,
+ String appId) {
+ final Tab currentTab = mTabControl.getCurrentTab();
+ if (mTabControl.canCreateNewTab()) {
+ final Tab tab = mTabControl.createNewTab(closeOnExit, appId,
+ urlData.mUrl);
WebView webview = tab.getWebView();
// If the last tab was removed from the active tabs page, currentTab
// will be null.
@@ -1968,9 +1809,9 @@
return currentTab;
}
- private TabControl.Tab openTab(String url) {
+ private Tab openTab(String url) {
if (mSettings.openInBackground()) {
- TabControl.Tab t = mTabControl.createNewTab();
+ Tab t = mTabControl.createNewTab();
if (t != null) {
WebView view = t.getWebView();
view.loadUrl(url);
@@ -2007,6 +1848,82 @@
}
}
+ private class SetAsWallpaper extends Thread implements
+ OnMenuItemClickListener, DialogInterface.OnCancelListener {
+ private URL mUrl;
+ private ProgressDialog mWallpaperProgress;
+ private boolean mCanceled = false;
+
+ public SetAsWallpaper(String url) {
+ try {
+ mUrl = new URL(url);
+ } catch (MalformedURLException e) {
+ mUrl = null;
+ }
+ }
+
+ public void onCancel(DialogInterface dialog) {
+ mCanceled = true;
+ }
+
+ public boolean onMenuItemClick(MenuItem item) {
+ if (mUrl != null) {
+ // The user may have tried to set a image with a large file size as their
+ // background so it may take a few moments to perform the operation. Display
+ // a progress spinner while it is working.
+ mWallpaperProgress = new ProgressDialog(BrowserActivity.this);
+ mWallpaperProgress.setIndeterminate(true);
+ mWallpaperProgress.setMessage(getText(R.string.progress_dialog_setting_wallpaper));
+ mWallpaperProgress.setCancelable(true);
+ mWallpaperProgress.setOnCancelListener(this);
+ mWallpaperProgress.show();
+ start();
+ }
+ return true;
+ }
+
+ public void run() {
+ Drawable oldWallpaper = BrowserActivity.this.getWallpaper();
+ try {
+ // TODO: This will cause the resource to be downloaded again, when we
+ // should in most cases be able to grab it from the cache. To fix this
+ // we should query WebCore to see if we can access a cached version and
+ // instead open an input stream on that. This pattern could also be used
+ // in the download manager where the same problem exists.
+ InputStream inputstream = mUrl.openStream();
+ if (inputstream != null) {
+ setWallpaper(inputstream);
+ }
+ } catch (IOException e) {
+ Log.e(LOGTAG, "Unable to set new wallpaper");
+ // Act as though the user canceled the operation so we try to
+ // restore the old wallpaper.
+ mCanceled = true;
+ }
+
+ if (mCanceled) {
+ // Restore the old wallpaper if the user cancelled whilst we were setting
+ // the new wallpaper.
+ int width = oldWallpaper.getIntrinsicWidth();
+ int height = oldWallpaper.getIntrinsicHeight();
+ Bitmap bm = Bitmap.createBitmap(width, height, Bitmap.Config.RGB_565);
+ Canvas canvas = new Canvas(bm);
+ oldWallpaper.setBounds(0, 0, width, height);
+ oldWallpaper.draw(canvas);
+ try {
+ setWallpaper(bm);
+ } catch (IOException e) {
+ Log.e(LOGTAG, "Unable to restore old wallpaper.");
+ }
+ mCanceled = false;
+ }
+
+ if (mWallpaperProgress.isShowing()) {
+ mWallpaperProgress.dismiss();
+ }
+ }
+ }
+
private void copy(CharSequence text) {
try {
IClipboard clip = IClipboard.Stub.asInterface(ServiceManager.getService("clipboard"));
@@ -2027,7 +1944,8 @@
* call resetTitleAndRevertLockIcon.
*/
/* package */ void resetTitleAndRevertLockIcon() {
- revertLockIcon();
+ mTabControl.getCurrentTab().revertLockIcon();
+ updateLockIconToLatest();
resetTitleIconAndProgress();
}
@@ -2041,7 +1959,7 @@
}
resetTitleAndIcon(current);
int progress = current.getProgress();
- mWebChromeClient.onProgressChanged(current, progress);
+ current.getWebChromeClient().onProgressChanged(current, progress);
}
// Reset the title and the icon based on the given item.
@@ -2061,14 +1979,12 @@
* @param url The URL of the site being loaded.
* @param title The title of the site being loaded.
*/
- private void setUrlTitle(String url, String title) {
+ void setUrlTitle(String url, String title) {
mUrl = url;
mTitle = title;
mTitleBar.setTitleAndUrl(title, url);
- if (mFakeTitleBar != null) {
- mFakeTitleBar.setTitleAndUrl(title, url);
- }
+ mFakeTitleBar.setTitleAndUrl(title, url);
}
/**
@@ -2109,43 +2025,16 @@
}
// Set the favicon in the title bar.
- private void setFavicon(Bitmap icon) {
+ void setFavicon(Bitmap icon) {
mTitleBar.setFavicon(icon);
- if (mFakeTitleBar != null) {
- mFakeTitleBar.setFavicon(icon);
- }
- }
-
- /**
- * Saves the current lock-icon state before resetting
- * the lock icon. If we have an error, we may need to
- * roll back to the previous state.
- */
- private void saveLockIcon() {
- mPrevLockType = mLockIconType;
- }
-
- /**
- * Reverts the lock-icon state to the last saved state,
- * for example, if we had an error, and need to cancel
- * the load.
- */
- private void revertLockIcon() {
- mLockIconType = mPrevLockType;
-
- if (LOGV_ENABLED) {
- Log.v(LOGTAG, "BrowserActivity.revertLockIcon:" +
- " revert lock icon to " + mLockIconType);
- }
-
- updateLockIconToLatest();
+ mFakeTitleBar.setFavicon(icon);
}
/**
* Close the tab, remove its associated title bar, and adjust mTabControl's
* current tab to a valid value.
*/
- /* package */ void closeTab(TabControl.Tab t) {
+ /* package */ void closeTab(Tab t) {
int currentIndex = mTabControl.getCurrentIndex();
int removeIndex = mTabControl.getTabIndex(t);
mTabControl.removeTab(t);
@@ -2157,7 +2046,7 @@
}
private void goBackOnePageOrQuit() {
- TabControl.Tab current = mTabControl.getCurrentTab();
+ Tab current = mTabControl.getCurrentTab();
if (current == null) {
/*
* Instead of finishing the activity, simply push this to the back
@@ -2175,17 +2064,17 @@
} else {
// Check to see if we are closing a window that was created by
// another window. If so, we switch back to that window.
- TabControl.Tab parent = current.getParentTab();
+ Tab parent = current.getParentTab();
if (parent != null) {
switchToTab(mTabControl.getTabIndex(parent));
// Now we close the other tab
closeTab(current);
} else {
if (current.closeOnExit()) {
- // force mPageStarted to be false as we are going to either
- // finish the activity or remove the tab. This will ensure
- // pauseWebView() taking action.
- mPageStarted = false;
+ // force the tab's inLoad() to be false as we are going to
+ // either finish the activity or remove the tab. This will
+ // ensure pauseWebViewTimers() taking action.
+ mTabControl.getCurrentTab().clearInLoad();
if (mTabControl.getTabCount() == 1) {
finish();
return;
@@ -2218,17 +2107,24 @@
}
}
+ boolean isMenuDown() {
+ return mMenuIsDown;
+ }
+
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
+ // Even if MENU is already held down, we need to call to super to open
+ // the IME on long press.
+ if (KeyEvent.KEYCODE_MENU == keyCode) {
+ mMenuIsDown = true;
+ return super.onKeyDown(keyCode, event);
+ }
// The default key mode is DEFAULT_KEYS_SEARCH_LOCAL. As the MENU is
// still down, we don't want to trigger the search. Pretend to consume
// the key and do nothing.
if (mMenuIsDown) return true;
switch(keyCode) {
- case KeyEvent.KEYCODE_MENU:
- mMenuIsDown = true;
- break;
case KeyEvent.KEYCODE_SPACE:
// WebView/WebTextView handle the keys in the KeyDown. As
// the Activity's shortcut keys are only handled when WebView
@@ -2263,7 +2159,8 @@
if (event.isTracking() && !event.isCanceled()) {
if (mCustomView != null) {
// if a custom view is showing, hide it
- mWebChromeClient.onHideCustomView();
+ mTabControl.getCurrentWebView().getWebChromeClient()
+ .onHideCustomView();
} else if (mActiveTabsPage != null) {
// if tab page is showing, hide it
removeActiveTabPage(true);
@@ -2291,7 +2188,12 @@
resetTitleAndRevertLockIcon();
WebView w = getTopWindow();
w.stopLoading();
- mWebViewClient.onPageFinished(w, w.getUrl());
+ // FIXME: before refactor, it is using mWebViewClient. So I keep the
+ // same logic here. But for subwindow case, should we call into the main
+ // WebView's onPageFinished as we never call its onPageStarted and if
+ // the page finishes itself, we don't call onPageFinished.
+ mTabControl.getCurrentWebView().getWebViewClient().onPageFinished(w,
+ w.getUrl());
cancelStopToast();
mStopToast = Toast
@@ -2299,6 +2201,10 @@
mStopToast.show();
}
+ boolean didUserStopLoading() {
+ return mDidStopLoad;
+ }
+
private void cancelStopToast() {
if (mStopToast != null) {
mStopToast.cancel();
@@ -2306,9 +2212,16 @@
}
}
- // called by a non-UI thread to post the message
- public void postMessage(int what, int arg1, int arg2, Object obj) {
- mHandler.sendMessage(mHandler.obtainMessage(what, arg1, arg2, obj));
+ // called by a UI or non-UI thread to post the message
+ public void postMessage(int what, int arg1, int arg2, Object obj,
+ long delayMillis) {
+ mHandler.sendMessageDelayed(mHandler.obtainMessage(what, arg1, arg2,
+ obj), delayMillis);
+ }
+
+ // called by a UI or non-UI thread to remove the message
+ void removeMessages(int what, Object object) {
+ mHandler.removeMessages(what, object);
}
// public message ids
@@ -2320,7 +2233,7 @@
private static final int CANCEL_CREDS_REQUEST = 103;
private static final int RELEASE_WAKELOCK = 107;
- private static final int UPDATE_BOOKMARK_THUMBNAIL = 108;
+ static final int UPDATE_BOOKMARK_THUMBNAIL = 108;
// Private handler for handling javascript and saving passwords
private Handler mHandler = new Handler() {
@@ -2330,6 +2243,7 @@
case FOCUS_NODE_HREF:
{
String url = (String) msg.getData().get("url");
+ String title = (String) msg.getData().get("title");
if (url == null || url.length() == 0) {
break;
}
@@ -2345,9 +2259,8 @@
loadURL(getTopWindow(), url);
break;
case R.id.open_newtab_context_menu_id:
- final TabControl.Tab parent = mTabControl
- .getCurrentTab();
- final TabControl.Tab newTab = openTab(url);
+ final Tab parent = mTabControl.getCurrentTab();
+ final Tab newTab = openTab(url);
if (newTab != parent) {
parent.addChildTab(newTab);
}
@@ -2356,11 +2269,45 @@
Intent intent = new Intent(BrowserActivity.this,
AddBookmarkPage.class);
intent.putExtra("url", url);
+ intent.putExtra("title", title);
startActivity(intent);
break;
case R.id.share_link_context_menu_id:
- Browser.sendString(BrowserActivity.this, url,
- getText(R.string.choosertitle_sharevia).toString());
+ // See if this site has been visited before
+ StringBuilder sb = new StringBuilder(
+ Browser.BookmarkColumns.URL + " = ");
+ DatabaseUtils.appendEscapedSQLString(sb, url);
+ Cursor c = mResolver.query(Browser.BOOKMARKS_URI,
+ Browser.HISTORY_PROJECTION,
+ sb.toString(),
+ null,
+ null);
+ if (c.moveToFirst()) {
+ // The site has been visited before, so grab the
+ // info from the database.
+ Bitmap favicon = null;
+ Bitmap thumbnail = null;
+ String linkTitle = c.getString(Browser.
+ HISTORY_PROJECTION_TITLE_INDEX);
+ byte[] data = c.getBlob(Browser.
+ HISTORY_PROJECTION_FAVICON_INDEX);
+ if (data != null) {
+ favicon = BitmapFactory.decodeByteArray(
+ data, 0, data.length);
+ }
+ data = c.getBlob(Browser.
+ HISTORY_PROJECTION_THUMBNAIL_INDEX);
+ if (data != null) {
+ thumbnail = BitmapFactory.decodeByteArray(
+ data, 0, data.length);
+ }
+ sharePage(BrowserActivity.this,
+ linkTitle, url, favicon, thumbnail);
+ } else {
+ Browser.sendString(BrowserActivity.this, url,
+ getString(
+ R.string.choosertitle_sharevia));
+ }
break;
case R.id.copy_link_context_menu_id:
copy(url);
@@ -2388,6 +2335,10 @@
case RELEASE_WAKELOCK:
if (mWakeLock.isHeld()) {
mWakeLock.release();
+ // if we reach here, Browser should be still in the
+ // background loading after WAKELOCK_TIMEOUT (5-min).
+ // To avoid burning the battery, stop loading.
+ mTabControl.stopAllLoading();
}
break;
@@ -2401,6 +2352,35 @@
}
};
+ /**
+ * Share a page, providing the title, url, favicon, and a screenshot. Uses
+ * an {@link Intent} to launch the Activity chooser.
+ * @param c Context used to launch a new Activity.
+ * @param title Title of the page. Stored in the Intent with
+ * {@link Browser#EXTRA_SHARE_TITLE}
+ * @param url URL of the page. Stored in the Intent with
+ * {@link Intent#EXTRA_TEXT}
+ * @param favicon Bitmap of the favicon for the page. Stored in the Intent
+ * with {@link Browser#EXTRA_SHARE_FAVICON}
+ * @param screenshot Bitmap of a screenshot of the page. Stored in the
+ * Intent with {@link Browser#EXTRA_SHARE_SCREENSHOT}
+ */
+ public static final void sharePage(Context c, String title, String url,
+ Bitmap favicon, Bitmap screenshot) {
+ Intent send = new Intent(Intent.ACTION_SEND);
+ send.setType("text/plain");
+ send.putExtra(Intent.EXTRA_TEXT, url);
+ send.putExtra(Browser.EXTRA_SHARE_TITLE, title);
+ send.putExtra(Browser.EXTRA_SHARE_FAVICON, favicon);
+ send.putExtra(Browser.EXTRA_SHARE_SCREENSHOT, screenshot);
+ try {
+ c.startActivity(Intent.createChooser(send, c.getString(
+ R.string.choosertitle_sharevia)));
+ } catch(android.content.ActivityNotFoundException ex) {
+ // if no app handles it, do nothing
+ }
+ }
+
private void updateScreenshot(WebView view) {
// If this is a bookmarked site, add a screenshot to the database.
// FIXME: When should we update? Every time?
@@ -2482,17 +2462,36 @@
// May need to tweak these values to determine what is the
// best scale factor
int thumbnailWidth = thumbnail.getWidth();
+ int thumbnailHeight = thumbnail.getHeight();
+ float scaleFactorX = 1.0f;
+ float scaleFactorY = 1.0f;
if (thumbnailWidth > 0) {
- float scaleFactor = (float) getDesiredThumbnailWidth(this) /
+ scaleFactorX = (float) getDesiredThumbnailWidth(this) /
(float)thumbnailWidth;
- canvas.scale(scaleFactor, scaleFactor);
+ } else {
+ return null;
}
+
+ if (view.getWidth() > view.getHeight() &&
+ thumbnailHeight < view.getHeight() && thumbnailHeight > 0) {
+ // If the device is in landscape and the page is shorter
+ // than the height of the view, stretch the thumbnail to fill the
+ // space.
+ scaleFactorY = (float) getDesiredThumbnailHeight(this) /
+ (float)thumbnailHeight;
+ } else {
+ // In the portrait case, this looks nice.
+ scaleFactorY = scaleFactorX;
+ }
+
+ canvas.scale(scaleFactorX, scaleFactorY);
+
thumbnail.draw(canvas);
return bm;
}
// -------------------------------------------------------------------------
- // WebViewClient implementation.
+ // Helper function for WebViewClient.
//-------------------------------------------------------------------------
// Use in overrideUrlLoading
@@ -2501,1022 +2500,312 @@
/* package */ final static String SCHEME_WTAI_SD = "wtai://wp/sd;";
/* package */ final static String SCHEME_WTAI_AP = "wtai://wp/ap;";
- /* package */ WebViewClient getWebViewClient() {
- return mWebViewClient;
- }
+ void onPageStarted(WebView view, String url, Bitmap favicon) {
+ // when BrowserActivity just starts, onPageStarted may be called before
+ // onResume as it is triggered from onCreate. Call resumeWebViewTimers
+ // to start the timer. As we won't switch tabs while an activity is in
+ // pause state, we can ensure calling resume and pause in pair.
+ if (mActivityInPause) resumeWebViewTimers();
- private void updateIcon(WebView view, Bitmap icon) {
- if (icon != null) {
- BrowserBookmarksAdapter.updateBookmarkFavicon(mResolver,
- view.getOriginalUrl(), view.getUrl(), icon);
- }
- setFavicon(icon);
- }
+ resetLockIcon(url);
+ setUrlTitle(url, null);
+ setFavicon(favicon);
+ // Keep this initial progress in sync with initialProgressValue (* 100)
+ // in ProgressTracker.cpp
+ // Show some progress so that the user knows the page is beginning to
+ // load
+ onProgressChanged(view, 10);
+ mDidStopLoad = false;
+ if (!mIsNetworkUp) createAndShowNetworkDialog();
- private void updateIcon(String url, Bitmap icon) {
- if (icon != null) {
- BrowserBookmarksAdapter.updateBookmarkFavicon(mResolver,
- null, url, icon);
- }
- setFavicon(icon);
- }
-
- private final WebViewClient mWebViewClient = new WebViewClient() {
- @Override
- public void onPageStarted(WebView view, String url, Bitmap favicon) {
- resetLockIcon(url);
- setUrlTitle(url, null);
-
- // We've started to load a new page. If there was a pending message
- // to save a screenshot then we will now take the new page and
- // save an incorrect screenshot. Therefore, remove any pending
- // thumbnail messages from the queue.
- mHandler.removeMessages(UPDATE_BOOKMARK_THUMBNAIL);
-
- // If we start a touch icon load and then load a new page, we don't
- // want to cancel the current touch icon loader. But, we do want to
- // create a new one when the touch icon url is known.
- if (mTouchIconLoader != null) {
- mTouchIconLoader.mActivity = null;
- mTouchIconLoader = null;
- }
-
- ErrorConsoleView errorConsole = mTabControl.getCurrentErrorConsole(false);
- if (errorConsole != null) {
- errorConsole.clearErrorMessages();
- if (mShouldShowErrorConsole) {
- errorConsole.showConsole(ErrorConsoleView.SHOW_NONE);
- }
- }
-
- // Call updateIcon instead of setFavicon so the bookmark
- // database can be updated.
- updateIcon(url, favicon);
-
- if (mSettings.isTracing()) {
- String host;
- try {
- WebAddress uri = new WebAddress(url);
- host = uri.mHost;
- } catch (android.net.ParseException ex) {
- host = "browser";
- }
- host = host.replace('.', '_');
- host += ".trace";
- mInTrace = true;
- Debug.startMethodTracing(host, 20 * 1024 * 1024);
- }
-
- // Performance probe
- if (false) {
- mStart = SystemClock.uptimeMillis();
- mProcessStart = Process.getElapsedCpuTime();
- long[] sysCpu = new long[7];
- if (Process.readProcFile("/proc/stat", SYSTEM_CPU_FORMAT, null,
- sysCpu, null)) {
- mUserStart = sysCpu[0] + sysCpu[1];
- mSystemStart = sysCpu[2];
- mIdleStart = sysCpu[3];
- mIrqStart = sysCpu[4] + sysCpu[5] + sysCpu[6];
- }
- mUiStart = SystemClock.currentThreadTimeMillis();
- }
-
- if (!mPageStarted) {
- mPageStarted = true;
- // if onResume() has been called, resumeWebViewTimers() does
- // nothing.
- resumeWebViewTimers();
- }
-
- // reset sync timer to avoid sync starts during loading a page
- CookieSyncManager.getInstance().resetSync();
-
- mInLoad = true;
- mDidStopLoad = false;
- showFakeTitleBar();
- updateInLoadMenuItems();
- if (!mIsNetworkUp) {
- createAndShowNetworkDialog();
- if (view != null) {
- view.setNetworkAvailable(false);
- }
- }
- }
-
- @Override
- public void onPageFinished(WebView view, String url) {
- // Reset the title and icon in case we stopped a provisional
- // load.
- resetTitleAndIcon(view);
-
- if (!mDidStopLoad) {
- // Only update the bookmark screenshot if the user did not
- // cancel the load early.
- Message updateScreenshot = Message.obtain(mHandler, UPDATE_BOOKMARK_THUMBNAIL, view);
- mHandler.sendMessageDelayed(updateScreenshot, 500);
- }
-
- // Update the lock icon image only once we are done loading
- updateLockIconToLatest();
-
- // Performance probe
- if (false) {
- long[] sysCpu = new long[7];
- if (Process.readProcFile("/proc/stat", SYSTEM_CPU_FORMAT, null,
- sysCpu, null)) {
- String uiInfo = "UI thread used "
- + (SystemClock.currentThreadTimeMillis() - mUiStart)
- + " ms";
- if (LOGD_ENABLED) {
- Log.d(LOGTAG, uiInfo);
- }
- //The string that gets written to the log
- String performanceString = "It took total "
- + (SystemClock.uptimeMillis() - mStart)
- + " ms clock time to load the page."
- + "\nbrowser process used "
- + (Process.getElapsedCpuTime() - mProcessStart)
- + " ms, user processes used "
- + (sysCpu[0] + sysCpu[1] - mUserStart) * 10
- + " ms, kernel used "
- + (sysCpu[2] - mSystemStart) * 10
- + " ms, idle took " + (sysCpu[3] - mIdleStart) * 10
- + " ms and irq took "
- + (sysCpu[4] + sysCpu[5] + sysCpu[6] - mIrqStart)
- * 10 + " ms, " + uiInfo;
- if (LOGD_ENABLED) {
- Log.d(LOGTAG, performanceString + "\nWebpage: " + url);
- }
- if (url != null) {
- // strip the url to maintain consistency
- String newUrl = new String(url);
- if (newUrl.startsWith("http://www.")) {
- newUrl = newUrl.substring(11);
- } else if (newUrl.startsWith("http://")) {
- newUrl = newUrl.substring(7);
- } else if (newUrl.startsWith("https://www.")) {
- newUrl = newUrl.substring(12);
- } else if (newUrl.startsWith("https://")) {
- newUrl = newUrl.substring(8);
- }
- if (LOGD_ENABLED) {
- Log.d(LOGTAG, newUrl + " loaded");
- }
- /*
- if (sWhiteList.contains(newUrl)) {
- // The string that gets pushed to the statistcs
- // service
- performanceString = performanceString
- + "\nWebpage: "
- + newUrl
- + "\nCarrier: "
- + android.os.SystemProperties
- .get("gsm.sim.operator.alpha");
- if (mWebView != null
- && mWebView.getContext() != null
- && mWebView.getContext().getSystemService(
- Context.CONNECTIVITY_SERVICE) != null) {
- ConnectivityManager cManager =
- (ConnectivityManager) mWebView
- .getContext().getSystemService(
- Context.CONNECTIVITY_SERVICE);
- NetworkInfo nInfo = cManager
- .getActiveNetworkInfo();
- if (nInfo != null) {
- performanceString = performanceString
- + "\nNetwork Type: "
- + nInfo.getType().toString();
- }
- }
- Checkin.logEvent(mResolver,
- Checkin.Events.Tag.WEBPAGE_LOAD,
- performanceString);
- Log.w(LOGTAG, "pushed to the statistics service");
- }
- */
- }
- }
- }
-
- if (mInTrace) {
- mInTrace = false;
- Debug.stopMethodTracing();
- }
-
- if (mPageStarted) {
- mPageStarted = false;
- // pauseWebViewTimers() will do nothing and return false if
- // onPause() is not called yet.
- if (pauseWebViewTimers()) {
- if (mWakeLock.isHeld()) {
- mHandler.removeMessages(RELEASE_WAKELOCK);
- mWakeLock.release();
- }
- }
- }
- }
-
- // return true if want to hijack the url to let another app to handle it
- @Override
- public boolean shouldOverrideUrlLoading(WebView view, String url) {
- if (url.startsWith(SCHEME_WTAI)) {
- // wtai://wp/mc;number
- // number=string(phone-number)
- if (url.startsWith(SCHEME_WTAI_MC)) {
- Intent intent = new Intent(Intent.ACTION_VIEW,
- Uri.parse(WebView.SCHEME_TEL +
- url.substring(SCHEME_WTAI_MC.length())));
- startActivity(intent);
- return true;
- }
- // wtai://wp/sd;dtmf
- // dtmf=string(dialstring)
- if (url.startsWith(SCHEME_WTAI_SD)) {
- // TODO
- // only send when there is active voice connection
- return false;
- }
- // wtai://wp/ap;number;name
- // number=string(phone-number)
- // name=string
- if (url.startsWith(SCHEME_WTAI_AP)) {
- // TODO
- return false;
- }
- }
-
- // The "about:" schemes are internal to the browser; don't
- // want these to be dispatched to other apps.
- if (url.startsWith("about:")) {
- return false;
- }
-
- Intent intent;
-
- // perform generic parsing of the URI to turn it into an Intent.
+ if (mSettings.isTracing()) {
+ String host;
try {
- intent = Intent.parseUri(url, Intent.URI_INTENT_SCHEME);
- } catch (URISyntaxException ex) {
- Log.w("Browser", "Bad URI " + url + ": " + ex.getMessage());
- return false;
+ WebAddress uri = new WebAddress(url);
+ host = uri.mHost;
+ } catch (android.net.ParseException ex) {
+ host = "browser";
}
+ host = host.replace('.', '_');
+ host += ".trace";
+ mInTrace = true;
+ Debug.startMethodTracing(host, 20 * 1024 * 1024);
+ }
- // check whether the intent can be resolved. If not, we will see
- // whether we can download it from the Market.
- if (getPackageManager().resolveActivity(intent, 0) == null) {
- String packagename = intent.getPackage();
- if (packagename != null) {
- intent = new Intent(Intent.ACTION_VIEW, Uri
- .parse("market://search?q=pname:" + packagename));
- intent.addCategory(Intent.CATEGORY_BROWSABLE);
- startActivity(intent);
- return true;
- } else {
- return false;
+ // Performance probe
+ if (false) {
+ mStart = SystemClock.uptimeMillis();
+ mProcessStart = Process.getElapsedCpuTime();
+ long[] sysCpu = new long[7];
+ if (Process.readProcFile("/proc/stat", SYSTEM_CPU_FORMAT, null,
+ sysCpu, null)) {
+ mUserStart = sysCpu[0] + sysCpu[1];
+ mSystemStart = sysCpu[2];
+ mIdleStart = sysCpu[3];
+ mIrqStart = sysCpu[4] + sysCpu[5] + sysCpu[6];
+ }
+ mUiStart = SystemClock.currentThreadTimeMillis();
+ }
+ }
+
+ void onPageFinished(WebView view, String url) {
+ // Reset the title and icon in case we stopped a provisional load.
+ resetTitleAndIcon(view);
+ // Update the lock icon image only once we are done loading
+ updateLockIconToLatest();
+ // pause the WebView timer and release the wake lock if it is finished
+ // while BrowserActivity is in pause state.
+ if (mActivityInPause && pauseWebViewTimers()) {
+ if (mWakeLock.isHeld()) {
+ mHandler.removeMessages(RELEASE_WAKELOCK);
+ mWakeLock.release();
+ }
+ }
+
+ // Performance probe
+ if (false) {
+ long[] sysCpu = new long[7];
+ if (Process.readProcFile("/proc/stat", SYSTEM_CPU_FORMAT, null,
+ sysCpu, null)) {
+ String uiInfo = "UI thread used "
+ + (SystemClock.currentThreadTimeMillis() - mUiStart)
+ + " ms";
+ if (LOGD_ENABLED) {
+ Log.d(LOGTAG, uiInfo);
+ }
+ //The string that gets written to the log
+ String performanceString = "It took total "
+ + (SystemClock.uptimeMillis() - mStart)
+ + " ms clock time to load the page."
+ + "\nbrowser process used "
+ + (Process.getElapsedCpuTime() - mProcessStart)
+ + " ms, user processes used "
+ + (sysCpu[0] + sysCpu[1] - mUserStart) * 10
+ + " ms, kernel used "
+ + (sysCpu[2] - mSystemStart) * 10
+ + " ms, idle took " + (sysCpu[3] - mIdleStart) * 10
+ + " ms and irq took "
+ + (sysCpu[4] + sysCpu[5] + sysCpu[6] - mIrqStart)
+ * 10 + " ms, " + uiInfo;
+ if (LOGD_ENABLED) {
+ Log.d(LOGTAG, performanceString + "\nWebpage: " + url);
+ }
+ if (url != null) {
+ // strip the url to maintain consistency
+ String newUrl = new String(url);
+ if (newUrl.startsWith("http://www.")) {
+ newUrl = newUrl.substring(11);
+ } else if (newUrl.startsWith("http://")) {
+ newUrl = newUrl.substring(7);
+ } else if (newUrl.startsWith("https://www.")) {
+ newUrl = newUrl.substring(12);
+ } else if (newUrl.startsWith("https://")) {
+ newUrl = newUrl.substring(8);
+ }
+ if (LOGD_ENABLED) {
+ Log.d(LOGTAG, newUrl + " loaded");
+ }
}
}
+ }
- // sanitize the Intent, ensuring web pages can not bypass browser
- // security (only access to BROWSABLE activities).
- intent.addCategory(Intent.CATEGORY_BROWSABLE);
- intent.setComponent(null);
- try {
- if (startActivityIfNeeded(intent, -1)) {
- return true;
- }
- } catch (ActivityNotFoundException ex) {
- // ignore the error. If no application can handle the URL,
- // eg about:blank, assume the browser can handle it.
- }
+ if (mInTrace) {
+ mInTrace = false;
+ Debug.stopMethodTracing();
+ }
+ }
- if (mMenuIsDown) {
- openTab(url);
- closeOptionsMenu();
+ boolean shouldOverrideUrlLoading(WebView view, String url) {
+ if (url.startsWith(SCHEME_WTAI)) {
+ // wtai://wp/mc;number
+ // number=string(phone-number)
+ if (url.startsWith(SCHEME_WTAI_MC)) {
+ Intent intent = new Intent(Intent.ACTION_VIEW,
+ Uri.parse(WebView.SCHEME_TEL +
+ url.substring(SCHEME_WTAI_MC.length())));
+ startActivity(intent);
return true;
}
+ // wtai://wp/sd;dtmf
+ // dtmf=string(dialstring)
+ if (url.startsWith(SCHEME_WTAI_SD)) {
+ // TODO: only send when there is active voice connection
+ return false;
+ }
+ // wtai://wp/ap;number;name
+ // number=string(phone-number)
+ // name=string
+ if (url.startsWith(SCHEME_WTAI_AP)) {
+ // TODO
+ return false;
+ }
+ }
+ // The "about:" schemes are internal to the browser; don't want these to
+ // be dispatched to other apps.
+ if (url.startsWith("about:")) {
return false;
}
- /**
- * Updates the lock icon. This method is called when we discover another
- * resource to be loaded for this page (for example, javascript). While
- * we update the icon type, we do not update the lock icon itself until
- * we are done loading, it is slightly more secure this way.
- */
- @Override
- public void onLoadResource(WebView view, String url) {
- if (url != null && url.length() > 0) {
- // It is only if the page claims to be secure
- // that we may have to update the lock:
- if (mLockIconType == LOCK_ICON_SECURE) {
- // If NOT a 'safe' url, change the lock to mixed content!
- if (!(URLUtil.isHttpsUrl(url) || URLUtil.isDataUrl(url) || URLUtil.isAboutUrl(url))) {
- mLockIconType = LOCK_ICON_MIXED;
- if (LOGV_ENABLED) {
- Log.v(LOGTAG, "BrowserActivity.updateLockIcon:" +
- " updated lock icon to " + mLockIconType + " due to " + url);
- }
- }
- }
- }
+ Intent intent;
+ // perform generic parsing of the URI to turn it into an Intent.
+ try {
+ intent = Intent.parseUri(url, Intent.URI_INTENT_SCHEME);
+ } catch (URISyntaxException ex) {
+ Log.w("Browser", "Bad URI " + url + ": " + ex.getMessage());
+ return false;
}
- /**
- * Show the dialog, asking the user if they would like to continue after
- * an excessive number of HTTP redirects.
- */
- @Override
- public void onTooManyRedirects(WebView view, final Message cancelMsg,
- final Message continueMsg) {
- new AlertDialog.Builder(BrowserActivity.this)
- .setTitle(R.string.browserFrameRedirect)
- .setMessage(R.string.browserFrame307Post)
- .setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() {
- public void onClick(DialogInterface dialog, int which) {
- continueMsg.sendToTarget();
- }})
- .setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() {
- public void onClick(DialogInterface dialog, int which) {
- cancelMsg.sendToTarget();
- }})
- .setOnCancelListener(new OnCancelListener() {
- public void onCancel(DialogInterface dialog) {
- cancelMsg.sendToTarget();
- }})
- .show();
- }
-
- // Container class for the next error dialog that needs to be
- // displayed.
- class ErrorDialog {
- public final int mTitle;
- public final String mDescription;
- public final int mError;
- ErrorDialog(int title, String desc, int error) {
- mTitle = title;
- mDescription = desc;
- mError = error;
- }
- };
-
- private void processNextError() {
- if (mQueuedErrors == null) {
- return;
- }
- // The first one is currently displayed so just remove it.
- mQueuedErrors.removeFirst();
- if (mQueuedErrors.size() == 0) {
- mQueuedErrors = null;
- return;
- }
- showError(mQueuedErrors.getFirst());
- }
-
- private DialogInterface.OnDismissListener mDialogListener =
- new DialogInterface.OnDismissListener() {
- public void onDismiss(DialogInterface d) {
- processNextError();
- }
- };
- private LinkedList<ErrorDialog> mQueuedErrors;
-
- private void queueError(int err, String desc) {
- if (mQueuedErrors == null) {
- mQueuedErrors = new LinkedList<ErrorDialog>();
- }
- for (ErrorDialog d : mQueuedErrors) {
- if (d.mError == err) {
- // Already saw a similar error, ignore the new one.
- return;
- }
- }
- ErrorDialog errDialog = new ErrorDialog(
- err == WebViewClient.ERROR_FILE_NOT_FOUND ?
- R.string.browserFrameFileErrorLabel :
- R.string.browserFrameNetworkErrorLabel,
- desc, err);
- mQueuedErrors.addLast(errDialog);
-
- // Show the dialog now if the queue was empty.
- if (mQueuedErrors.size() == 1) {
- showError(errDialog);
- }
- }
-
- private void showError(ErrorDialog errDialog) {
- AlertDialog d = new AlertDialog.Builder(BrowserActivity.this)
- .setTitle(errDialog.mTitle)
- .setMessage(errDialog.mDescription)
- .setPositiveButton(R.string.ok, null)
- .create();
- d.setOnDismissListener(mDialogListener);
- d.show();
- }
-
- /**
- * Show a dialog informing the user of the network error reported by
- * WebCore.
- */
- @Override
- public void onReceivedError(WebView view, int errorCode,
- String description, String failingUrl) {
- if (errorCode != WebViewClient.ERROR_HOST_LOOKUP &&
- errorCode != WebViewClient.ERROR_CONNECT &&
- errorCode != WebViewClient.ERROR_BAD_URL &&
- errorCode != WebViewClient.ERROR_UNSUPPORTED_SCHEME &&
- errorCode != WebViewClient.ERROR_FILE) {
- queueError(errorCode, description);
- }
- Log.e(LOGTAG, "onReceivedError " + errorCode + " " + failingUrl
- + " " + description);
-
- // We need to reset the title after an error.
- resetTitleAndRevertLockIcon();
- }
-
- /**
- * Check with the user if it is ok to resend POST data as the page they
- * are trying to navigate to is the result of a POST.
- */
- @Override
- public void onFormResubmission(WebView view, final Message dontResend,
- final Message resend) {
- new AlertDialog.Builder(BrowserActivity.this)
- .setTitle(R.string.browserFrameFormResubmitLabel)
- .setMessage(R.string.browserFrameFormResubmitMessage)
- .setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() {
- public void onClick(DialogInterface dialog, int which) {
- resend.sendToTarget();
- }})
- .setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() {
- public void onClick(DialogInterface dialog, int which) {
- dontResend.sendToTarget();
- }})
- .setOnCancelListener(new OnCancelListener() {
- public void onCancel(DialogInterface dialog) {
- dontResend.sendToTarget();
- }})
- .show();
- }
-
- /**
- * Insert the url into the visited history database.
- * @param url The url to be inserted.
- * @param isReload True if this url is being reloaded.
- * FIXME: Not sure what to do when reloading the page.
- */
- @Override
- public void doUpdateVisitedHistory(WebView view, String url,
- boolean isReload) {
- if (url.regionMatches(true, 0, "about:", 0, 6)) {
- return;
- }
- // remove "client" before updating it to the history so that it wont
- // show up in the auto-complete list.
- int index = url.indexOf("client=ms-");
- if (index > 0 && url.contains(".google.")) {
- int end = url.indexOf('&', index);
- if (end > 0) {
- url = url.substring(0, index)
- .concat(url.substring(end + 1));
- } else {
- // the url.charAt(index-1) should be either '?' or '&'
- url = url.substring(0, index-1);
- }
- }
- Browser.updateVisitedHistory(mResolver, url, true);
- WebIconDatabase.getInstance().retainIconForPageUrl(url);
- }
-
- /**
- * Displays SSL error(s) dialog to the user.
- */
- @Override
- public void onReceivedSslError(
- final WebView view, final SslErrorHandler handler, final SslError error) {
-
- if (mSettings.showSecurityWarnings()) {
- final LayoutInflater factory =
- LayoutInflater.from(BrowserActivity.this);
- final View warningsView =
- factory.inflate(R.layout.ssl_warnings, null);
- final LinearLayout placeholder =
- (LinearLayout)warningsView.findViewById(R.id.placeholder);
-
- if (error.hasError(SslError.SSL_UNTRUSTED)) {
- LinearLayout ll = (LinearLayout)factory
- .inflate(R.layout.ssl_warning, null);
- ((TextView)ll.findViewById(R.id.warning))
- .setText(R.string.ssl_untrusted);
- placeholder.addView(ll);
- }
-
- if (error.hasError(SslError.SSL_IDMISMATCH)) {
- LinearLayout ll = (LinearLayout)factory
- .inflate(R.layout.ssl_warning, null);
- ((TextView)ll.findViewById(R.id.warning))
- .setText(R.string.ssl_mismatch);
- placeholder.addView(ll);
- }
-
- if (error.hasError(SslError.SSL_EXPIRED)) {
- LinearLayout ll = (LinearLayout)factory
- .inflate(R.layout.ssl_warning, null);
- ((TextView)ll.findViewById(R.id.warning))
- .setText(R.string.ssl_expired);
- placeholder.addView(ll);
- }
-
- if (error.hasError(SslError.SSL_NOTYETVALID)) {
- LinearLayout ll = (LinearLayout)factory
- .inflate(R.layout.ssl_warning, null);
- ((TextView)ll.findViewById(R.id.warning))
- .setText(R.string.ssl_not_yet_valid);
- placeholder.addView(ll);
- }
-
- new AlertDialog.Builder(BrowserActivity.this)
- .setTitle(R.string.security_warning)
- .setIcon(android.R.drawable.ic_dialog_alert)
- .setView(warningsView)
- .setPositiveButton(R.string.ssl_continue,
- new DialogInterface.OnClickListener() {
- public void onClick(DialogInterface dialog, int whichButton) {
- handler.proceed();
- }
- })
- .setNeutralButton(R.string.view_certificate,
- new DialogInterface.OnClickListener() {
- public void onClick(DialogInterface dialog, int whichButton) {
- showSSLCertificateOnError(view, handler, error);
- }
- })
- .setNegativeButton(R.string.cancel,
- new DialogInterface.OnClickListener() {
- public void onClick(DialogInterface dialog, int whichButton) {
- handler.cancel();
- BrowserActivity.this.resetTitleAndRevertLockIcon();
- }
- })
- .setOnCancelListener(
- new DialogInterface.OnCancelListener() {
- public void onCancel(DialogInterface dialog) {
- handler.cancel();
- BrowserActivity.this.resetTitleAndRevertLockIcon();
- }
- })
- .show();
- } else {
- handler.proceed();
- }
- }
-
- /**
- * Handles an HTTP authentication request.
- *
- * @param handler The authentication handler
- * @param host The host
- * @param realm The realm
- */
- @Override
- public void onReceivedHttpAuthRequest(WebView view,
- final HttpAuthHandler handler, final String host, final String realm) {
- String username = null;
- String password = null;
-
- boolean reuseHttpAuthUsernamePassword =
- handler.useHttpAuthUsernamePassword();
-
- if (reuseHttpAuthUsernamePassword &&
- (mTabControl.getCurrentWebView() != null)) {
- String[] credentials =
- mTabControl.getCurrentWebView()
- .getHttpAuthUsernamePassword(host, realm);
- if (credentials != null && credentials.length == 2) {
- username = credentials[0];
- password = credentials[1];
- }
- }
-
- if (username != null && password != null) {
- handler.proceed(username, password);
- } else {
- showHttpAuthentication(handler, host, realm, null, null, null, 0);
- }
- }
-
- @Override
- public boolean shouldOverrideKeyEvent(WebView view, KeyEvent event) {
- if (mMenuIsDown) {
- // only check shortcut key when MENU is held
- return getWindow().isShortcutKey(event.getKeyCode(), event);
+ // check whether the intent can be resolved. If not, we will see
+ // whether we can download it from the Market.
+ if (getPackageManager().resolveActivity(intent, 0) == null) {
+ String packagename = intent.getPackage();
+ if (packagename != null) {
+ intent = new Intent(Intent.ACTION_VIEW, Uri
+ .parse("market://search?q=pname:" + packagename));
+ intent.addCategory(Intent.CATEGORY_BROWSABLE);
+ startActivity(intent);
+ return true;
} else {
return false;
}
}
- @Override
- public void onUnhandledKeyEvent(WebView view, KeyEvent event) {
- if (view != mTabControl.getCurrentTopWebView()) {
- return;
- }
- if (event.isDown()) {
- BrowserActivity.this.onKeyDown(event.getKeyCode(), event);
- } else {
- BrowserActivity.this.onKeyUp(event.getKeyCode(), event);
- }
- }
- };
-
- //--------------------------------------------------------------------------
- // WebChromeClient implementation
- //--------------------------------------------------------------------------
-
- /* package */ WebChromeClient getWebChromeClient() {
- return mWebChromeClient;
- }
-
- private final WebChromeClient mWebChromeClient = new WebChromeClient() {
- // Helper method to create a new tab or sub window.
- private void createWindow(final boolean dialog, final Message msg) {
- if (dialog) {
- mTabControl.createSubWindow();
- final TabControl.Tab t = mTabControl.getCurrentTab();
- attachSubWindow(t);
- WebView.WebViewTransport transport =
- (WebView.WebViewTransport) msg.obj;
- transport.setWebView(t.getSubWebView());
- msg.sendToTarget();
- } else {
- final TabControl.Tab parent = mTabControl.getCurrentTab();
- final TabControl.Tab newTab
- = openTabAndShow(EMPTY_URL_DATA, false, null);
- if (newTab != parent) {
- parent.addChildTab(newTab);
- }
- WebView.WebViewTransport transport =
- (WebView.WebViewTransport) msg.obj;
- transport.setWebView(mTabControl.getCurrentWebView());
- msg.sendToTarget();
- }
- }
-
- @Override
- public boolean onCreateWindow(WebView view, final boolean dialog,
- final boolean userGesture, final Message resultMsg) {
- // Short-circuit if we can't create any more tabs or sub windows.
- if (dialog && mTabControl.getCurrentSubWindow() != null) {
- new AlertDialog.Builder(BrowserActivity.this)
- .setTitle(R.string.too_many_subwindows_dialog_title)
- .setIcon(android.R.drawable.ic_dialog_alert)
- .setMessage(R.string.too_many_subwindows_dialog_message)
- .setPositiveButton(R.string.ok, null)
- .show();
- return false;
- } else if (mTabControl.getTabCount() >= TabControl.MAX_TABS) {
- new AlertDialog.Builder(BrowserActivity.this)
- .setTitle(R.string.too_many_windows_dialog_title)
- .setIcon(android.R.drawable.ic_dialog_alert)
- .setMessage(R.string.too_many_windows_dialog_message)
- .setPositiveButton(R.string.ok, null)
- .show();
- return false;
- }
-
- // Short-circuit if this was a user gesture.
- if (userGesture) {
- createWindow(dialog, resultMsg);
+ // sanitize the Intent, ensuring web pages can not bypass browser
+ // security (only access to BROWSABLE activities).
+ intent.addCategory(Intent.CATEGORY_BROWSABLE);
+ intent.setComponent(null);
+ try {
+ if (startActivityIfNeeded(intent, -1)) {
return true;
}
+ } catch (ActivityNotFoundException ex) {
+ // ignore the error. If no application can handle the URL,
+ // eg about:blank, assume the browser can handle it.
+ }
- // Allow the popup and create the appropriate window.
- final AlertDialog.OnClickListener allowListener =
- new AlertDialog.OnClickListener() {
- public void onClick(DialogInterface d,
- int which) {
- createWindow(dialog, resultMsg);
- }
- };
-
- // Block the popup by returning a null WebView.
- final AlertDialog.OnClickListener blockListener =
- new AlertDialog.OnClickListener() {
- public void onClick(DialogInterface d, int which) {
- resultMsg.sendToTarget();
- }
- };
-
- // Build a confirmation dialog to display to the user.
- final AlertDialog d =
- new AlertDialog.Builder(BrowserActivity.this)
- .setTitle(R.string.attention)
- .setIcon(android.R.drawable.ic_dialog_alert)
- .setMessage(R.string.popup_window_attempt)
- .setPositiveButton(R.string.allow, allowListener)
- .setNegativeButton(R.string.block, blockListener)
- .setCancelable(false)
- .create();
-
- // Show the confirmation dialog.
- d.show();
+ if (mMenuIsDown) {
+ openTab(url);
+ closeOptionsMenu();
return true;
}
+ return false;
+ }
- @Override
- public void onCloseWindow(WebView window) {
- final TabControl.Tab current = mTabControl.getCurrentTab();
- final TabControl.Tab parent = current.getParentTab();
- if (parent != null) {
- // JavaScript can only close popup window.
- switchToTab(mTabControl.getTabIndex(parent));
- // Now we need to close the window
- closeTab(current);
- }
- }
+ // -------------------------------------------------------------------------
+ // Helper function for WebChromeClient
+ // -------------------------------------------------------------------------
- @Override
- public void onProgressChanged(WebView view, int newProgress) {
- mTitleBar.setProgress(newProgress);
- if (mFakeTitleBar != null) {
- mFakeTitleBar.setProgress(newProgress);
- }
+ void onProgressChanged(WebView view, int newProgress) {
+ mTitleBar.setProgress(newProgress);
+ mFakeTitleBar.setProgress(newProgress);
- if (newProgress == 100) {
- // onProgressChanged() may continue to be called after the main
- // frame has finished loading, as any remaining sub frames
- // continue to load. We'll only get called once though with
- // newProgress as 100 when everything is loaded.
- // (onPageFinished is called once when the main frame completes
- // loading regardless of the state of any sub frames so calls
- // to onProgressChanges may continue after onPageFinished has
- // executed)
-
- // sync cookies and cache promptly here.
- CookieSyncManager.getInstance().sync();
- if (mInLoad) {
- mInLoad = false;
- updateInLoadMenuItems();
- // If the options menu is open, leave the title bar
- if (!mOptionsMenuOpen || !mIconView) {
- hideFakeTitleBar();
- }
- }
- } else if (!mInLoad) {
- // onPageFinished may have already been called but a subframe
- // is still loading and updating the progress. Reset mInLoad
- // and update the menu items.
- mInLoad = true;
+ if (newProgress == 100) {
+ // onProgressChanged() may continue to be called after the main
+ // frame has finished loading, as any remaining sub frames continue
+ // to load. We'll only get called once though with newProgress as
+ // 100 when everything is loaded. (onPageFinished is called once
+ // when the main frame completes loading regardless of the state of
+ // any sub frames so calls to onProgressChanges may continue after
+ // onPageFinished has executed)
+ if (mInLoad) {
+ mInLoad = false;
updateInLoadMenuItems();
- if (!mOptionsMenuOpen || mIconView) {
- // This page has begun to load, so show the title bar
- showFakeTitleBar();
+ // If the options menu is open, leave the title bar
+ if (!mOptionsMenuOpen || !mIconView) {
+ hideFakeTitleBar();
}
}
- }
-
- @Override
- public void onReceivedTitle(WebView view, String title) {
- String url = view.getUrl();
-
- // here, if url is null, we want to reset the title
- setUrlTitle(url, title);
-
- if (url == null ||
- url.length() >= SQLiteDatabase.SQLITE_MAX_LIKE_PATTERN_LENGTH) {
- return;
- }
- // See if we can find the current url in our history database and
- // add the new title to it.
- if (url.startsWith("http://www.")) {
- url = url.substring(11);
- } else if (url.startsWith("http://")) {
- url = url.substring(4);
- }
- try {
- url = "%" + url;
- String [] selArgs = new String[] { url };
-
- String where = Browser.BookmarkColumns.URL + " LIKE ? AND "
- + Browser.BookmarkColumns.BOOKMARK + " = 0";
- Cursor c = mResolver.query(Browser.BOOKMARKS_URI,
- Browser.HISTORY_PROJECTION, where, selArgs, null);
- if (c.moveToFirst()) {
- // Current implementation of database only has one entry per
- // url.
- ContentValues map = new ContentValues();
- map.put(Browser.BookmarkColumns.TITLE, title);
- mResolver.update(Browser.BOOKMARKS_URI, map,
- "_id = " + c.getInt(0), null);
- }
- c.close();
- } catch (IllegalStateException e) {
- Log.e(LOGTAG, "BrowserActivity onReceived title", e);
- } catch (SQLiteException ex) {
- Log.e(LOGTAG, "onReceivedTitle() caught SQLiteException: ", ex);
+ } else if (!mInLoad) {
+ // onPageFinished may have already been called but a subframe is
+ // still loading and updating the progress. Reset mInLoad and update
+ // the menu items.
+ mInLoad = true;
+ updateInLoadMenuItems();
+ if (!mOptionsMenuOpen || mIconView) {
+ // This page has begun to load, so show the title bar
+ showFakeTitleBar();
}
}
+ }
- @Override
- public void onReceivedIcon(WebView view, Bitmap icon) {
- updateIcon(view, icon);
+ void onShowCustomView(View view, WebChromeClient.CustomViewCallback callback) {
+ // if a view already exists then immediately terminate the new one
+ if (mCustomView != null) {
+ callback.onCustomViewHidden();
+ return;
}
- @Override
- public void onReceivedTouchIconUrl(WebView view, String url,
- boolean precomposed) {
- final ContentResolver cr = getContentResolver();
- final Cursor c =
- BrowserBookmarksAdapter.queryBookmarksForUrl(cr,
- view.getOriginalUrl(), view.getUrl(), true);
- if (c != null) {
- if (c.getCount() > 0) {
- // Let precomposed icons take precedence over non-composed
- // icons.
- if (precomposed && mTouchIconLoader != null) {
- mTouchIconLoader.cancel(false);
- mTouchIconLoader = null;
- }
- // Have only one async task at a time.
- if (mTouchIconLoader == null) {
- mTouchIconLoader = new DownloadTouchIcon(
- BrowserActivity.this, cr, c, view);
- mTouchIconLoader.execute(url);
- }
- } else {
- c.close();
- }
- }
+ // Add the custom view to its container.
+ mCustomViewContainer.addView(view, COVER_SCREEN_GRAVITY_CENTER);
+ mCustomView = view;
+ mCustomViewCallback = callback;
+ // Save the menu state and set it to empty while the custom
+ // view is showing.
+ mOldMenuState = mMenuState;
+ mMenuState = EMPTY_MENU;
+ // Hide the content view.
+ mContentView.setVisibility(View.GONE);
+ // Finally show the custom view container.
+ setStatusBarVisibility(false);
+ mCustomViewContainer.setVisibility(View.VISIBLE);
+ mCustomViewContainer.bringToFront();
+ }
+
+ void onHideCustomView() {
+ if (mCustomView == null)
+ return;
+
+ // Hide the custom view.
+ mCustomView.setVisibility(View.GONE);
+ // Remove the custom view from its container.
+ mCustomViewContainer.removeView(mCustomView);
+ mCustomView = null;
+ // Reset the old menu state.
+ mMenuState = mOldMenuState;
+ mOldMenuState = EMPTY_MENU;
+ mCustomViewContainer.setVisibility(View.GONE);
+ mCustomViewCallback.onCustomViewHidden();
+ // Show the content view.
+ setStatusBarVisibility(true);
+ mContentView.setVisibility(View.VISIBLE);
+ }
+
+ Bitmap getDefaultVideoPoster() {
+ if (mDefaultVideoPoster == null) {
+ mDefaultVideoPoster = BitmapFactory.decodeResource(
+ getResources(), R.drawable.default_video_poster);
}
+ return mDefaultVideoPoster;
+ }
- @Override
- public void onShowCustomView(View view, WebChromeClient.CustomViewCallback callback) {
- if (mCustomView != null)
- return;
-
- // Add the custom view to its container.
- mCustomViewContainer.addView(view, COVER_SCREEN_GRAVITY_CENTER);
- mCustomView = view;
- mCustomViewCallback = callback;
- // Save the menu state and set it to empty while the custom
- // view is showing.
- mOldMenuState = mMenuState;
- mMenuState = EMPTY_MENU;
- // Hide the content view.
- mContentView.setVisibility(View.GONE);
- // Finally show the custom view container.
- mCustomViewContainer.setVisibility(View.VISIBLE);
- mCustomViewContainer.bringToFront();
+ View getVideoLoadingProgressView() {
+ if (mVideoProgressView == null) {
+ LayoutInflater inflater = LayoutInflater.from(BrowserActivity.this);
+ mVideoProgressView = inflater.inflate(
+ R.layout.video_loading_progress, null);
}
+ return mVideoProgressView;
+ }
- @Override
- public void onHideCustomView() {
- if (mCustomView == null)
- return;
+ /*
+ * The Object used to inform the WebView of the file to upload.
+ */
+ private ValueCallback<Uri> mUploadMessage;
- // Hide the custom view.
- mCustomView.setVisibility(View.GONE);
- // Remove the custom view from its container.
- mCustomViewContainer.removeView(mCustomView);
- mCustomView = null;
- // Reset the old menu state.
- mMenuState = mOldMenuState;
- mOldMenuState = EMPTY_MENU;
- mCustomViewContainer.setVisibility(View.GONE);
- mCustomViewCallback.onCustomViewHidden();
- // Show the content view.
- mContentView.setVisibility(View.VISIBLE);
- }
+ void openFileChooser(ValueCallback<Uri> uploadMsg) {
+ if (mUploadMessage != null) return;
+ mUploadMessage = uploadMsg;
+ Intent i = new Intent(Intent.ACTION_GET_CONTENT);
+ i.addCategory(Intent.CATEGORY_OPENABLE);
+ i.setType("*/*");
+ BrowserActivity.this.startActivityForResult(Intent.createChooser(i,
+ getString(R.string.choose_upload)), FILE_SELECTED);
+ }
- /**
- * The origin has exceeded its database quota.
- * @param url the URL that exceeded the quota
- * @param databaseIdentifier the identifier of the database on
- * which the transaction that caused the quota overflow was run
- * @param currentQuota the current quota for the origin.
- * @param estimatedSize the estimated size of the database.
- * @param totalUsedQuota is the sum of all origins' quota.
- * @param quotaUpdater The callback to run when a decision to allow or
- * deny quota has been made. Don't forget to call this!
- */
- @Override
- public void onExceededDatabaseQuota(String url,
- String databaseIdentifier, long currentQuota, long estimatedSize,
- long totalUsedQuota, WebStorage.QuotaUpdater quotaUpdater) {
- mSettings.getWebStorageSizeManager().onExceededDatabaseQuota(
- url, databaseIdentifier, currentQuota, estimatedSize,
- totalUsedQuota, quotaUpdater);
- }
-
- /**
- * The Application Cache has exceeded its max size.
- * @param spaceNeeded is the amount of disk space that would be needed
- * in order for the last appcache operation to succeed.
- * @param totalUsedQuota is the sum of all origins' quota.
- * @param quotaUpdater A callback to inform the WebCore thread that a new
- * app cache size is available. This callback must always be executed at
- * some point to ensure that the sleeping WebCore thread is woken up.
- */
- @Override
- public void onReachedMaxAppCacheSize(long spaceNeeded,
- long totalUsedQuota, WebStorage.QuotaUpdater quotaUpdater) {
- mSettings.getWebStorageSizeManager().onReachedMaxAppCacheSize(
- spaceNeeded, totalUsedQuota, quotaUpdater);
- }
-
- /**
- * Instructs the browser to show a prompt to ask the user to set the
- * Geolocation permission state for the specified origin.
- * @param origin The origin for which Geolocation permissions are
- * requested.
- * @param callback The callback to call once the user has set the
- * Geolocation permission state.
- */
- @Override
- public void onGeolocationPermissionsShowPrompt(String origin,
- GeolocationPermissions.Callback callback) {
- mTabControl.getCurrentTab().getGeolocationPermissionsPrompt().show(
- origin, callback);
- }
-
- /**
- * Instructs the browser to hide the Geolocation permissions prompt.
- */
- @Override
- public void onGeolocationPermissionsHidePrompt() {
- mTabControl.getCurrentTab().getGeolocationPermissionsPrompt().hide();
- }
-
- /* Adds a JavaScript error message to the system log and if the JS
- * console is enabled in the about:debug options, to that console
- * also.
- * @param message The error message to report.
- * @param lineNumber The line number of the error.
- * @param sourceID The name of the source file that caused the error.
- */
- @Override
- public void onConsoleMessage(String message, int lineNumber, String sourceID) {
- ErrorConsoleView errorConsole = mTabControl.getCurrentErrorConsole(true);
- errorConsole.addErrorMessage(message, sourceID, lineNumber);
- if (mShouldShowErrorConsole &&
- errorConsole.getShowState() != ErrorConsoleView.SHOW_MAXIMIZED) {
- errorConsole.showConsole(ErrorConsoleView.SHOW_MINIMIZED);
- }
- Log.w(LOGTAG, "Console: " + message + " " + sourceID + ":" + lineNumber);
- }
-
- /**
- * Ask the browser for an icon to represent a <video> element.
- * This icon will be used if the Web page did not specify a poster attribute.
- *
- * @return Bitmap The icon or null if no such icon is available.
- * @hide pending API Council approval
- */
- @Override
- public Bitmap getDefaultVideoPoster() {
- if (mDefaultVideoPoster == null) {
- mDefaultVideoPoster = BitmapFactory.decodeResource(
- getResources(), R.drawable.default_video_poster);
- }
- return mDefaultVideoPoster;
- }
-
- /**
- * Ask the host application for a custom progress view to show while
- * a <video> is loading.
- *
- * @return View The progress view.
- * @hide pending API Council approval
- */
- @Override
- public View getVideoLoadingProgressView() {
- if (mVideoProgressView == null) {
- LayoutInflater inflater = LayoutInflater.from(BrowserActivity.this);
- mVideoProgressView = inflater.inflate(R.layout.video_loading_progress, null);
- }
- return mVideoProgressView;
- }
-
- /**
- * Deliver a list of already-visited URLs
- * @hide pending API Council approval
- */
- @Override
- public void getVisitedHistory(final ValueCallback<String[]> callback) {
- AsyncTask<Void, Void, String[]> task = new AsyncTask<Void, Void, String[]>() {
- public String[] doInBackground(Void... unused) {
- return Browser.getVisitedHistory(getContentResolver());
- }
-
- public void onPostExecute(String[] result) {
- callback.onReceiveValue(result);
-
- };
- };
- task.execute();
- };
- };
+ // -------------------------------------------------------------------------
+ // Implement functions for DownloadListener
+ // -------------------------------------------------------------------------
/**
* Notify the host application a download should be done, or that
@@ -3644,19 +2933,20 @@
String cookies = CookieManager.getInstance().getCookie(url);
ContentValues values = new ContentValues();
- values.put(Downloads.COLUMN_URI, uri.toString());
- values.put(Downloads.COLUMN_COOKIE_DATA, cookies);
- values.put(Downloads.COLUMN_USER_AGENT, userAgent);
- values.put(Downloads.COLUMN_NOTIFICATION_PACKAGE,
+ values.put(Downloads.Impl.COLUMN_URI, uri.toString());
+ values.put(Downloads.Impl.COLUMN_COOKIE_DATA, cookies);
+ values.put(Downloads.Impl.COLUMN_USER_AGENT, userAgent);
+ values.put(Downloads.Impl.COLUMN_NOTIFICATION_PACKAGE,
getPackageName());
- values.put(Downloads.COLUMN_NOTIFICATION_CLASS,
+ values.put(Downloads.Impl.COLUMN_NOTIFICATION_CLASS,
BrowserDownloadPage.class.getCanonicalName());
- values.put(Downloads.COLUMN_VISIBILITY, Downloads.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);
- values.put(Downloads.COLUMN_MIME_TYPE, mimetype);
- values.put(Downloads.COLUMN_FILE_NAME_HINT, filename);
- values.put(Downloads.COLUMN_DESCRIPTION, uri.getHost());
+ values.put(Downloads.Impl.COLUMN_VISIBILITY,
+ Downloads.Impl.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);
+ values.put(Downloads.Impl.COLUMN_MIME_TYPE, mimetype);
+ values.put(Downloads.Impl.COLUMN_FILE_NAME_HINT, filename);
+ values.put(Downloads.Impl.COLUMN_DESCRIPTION, uri.getHost());
if (contentLength > 0) {
- values.put(Downloads.COLUMN_TOTAL_BYTES, contentLength);
+ values.put(Downloads.Impl.COLUMN_TOTAL_BYTES, contentLength);
}
if (mimetype == null) {
// We must have long pressed on a link or image to download it. We
@@ -3664,53 +2954,28 @@
new FetchUrlMimeType(this).execute(values);
} else {
final Uri contentUri =
- getContentResolver().insert(Downloads.CONTENT_URI, values);
- viewDownloads(contentUri);
+ getContentResolver().insert(Downloads.Impl.CONTENT_URI, values);
}
}
+ // -------------------------------------------------------------------------
+
/**
* Resets the lock icon. This method is called when we start a new load and
* know the url to be loaded.
*/
private void resetLockIcon(String url) {
// Save the lock-icon state (we revert to it if the load gets cancelled)
- saveLockIcon();
-
- mLockIconType = LOCK_ICON_UNSECURE;
- if (URLUtil.isHttpsUrl(url)) {
- mLockIconType = LOCK_ICON_SECURE;
- if (LOGV_ENABLED) {
- Log.v(LOGTAG, "BrowserActivity.resetLockIcon:" +
- " reset lock icon to " + mLockIconType);
- }
- }
-
+ mTabControl.getCurrentTab().resetLockIcon(url);
updateLockIconImage(LOCK_ICON_UNSECURE);
}
- /* package */ void setLockIconType(int type) {
- mLockIconType = type;
- }
-
- /* package */ int getLockIconType() {
- return mLockIconType;
- }
-
- /* package */ void setPrevLockType(int type) {
- mPrevLockType = type;
- }
-
- /* package */ int getPrevLockType() {
- return mPrevLockType;
- }
-
/**
* Update the lock icon to correspond to our latest state.
*/
- /* package */ void updateLockIconToLatest() {
- updateLockIconImage(mLockIconType);
+ private void updateLockIconToLatest() {
+ updateLockIconImage(mTabControl.getCurrentTab().getLockIconType());
}
/**
@@ -3724,9 +2989,7 @@
d = mMixLockIcon;
}
mTitleBar.setLock(d);
- if (mFakeTitleBar != null) {
- mFakeTitleBar.setLock(d);
- }
+ mFakeTitleBar.setLock(d);
}
/**
@@ -3737,7 +3000,7 @@
* not. This is important, since we need to know whether to return to
* the parent dialog or simply dismiss.
*/
- private void showPageInfo(final TabControl.Tab tab,
+ private void showPageInfo(final Tab tab,
final boolean fromShowSSLCertificateOnError) {
final LayoutInflater factory = LayoutInflater
.from(this);
@@ -3772,7 +3035,7 @@
((TextView) pageInfoView.findViewById(R.id.title)).setText(title);
mPageInfoView = tab;
- mPageInfoFromShowSSLCertificateOnError = new Boolean(fromShowSSLCertificateOnError);
+ mPageInfoFromShowSSLCertificateOnError = fromShowSSLCertificateOnError;
AlertDialog.Builder alertDialogBuilder =
new AlertDialog.Builder(this)
@@ -3785,7 +3048,6 @@
int whichButton) {
mPageInfoDialog = null;
mPageInfoView = null;
- mPageInfoFromShowSSLCertificateOnError = null;
// if we came here from the SSL error dialog
if (fromShowSSLCertificateOnError) {
@@ -3802,7 +3064,6 @@
public void onCancel(DialogInterface dialog) {
mPageInfoDialog = null;
mPageInfoView = null;
- mPageInfoFromShowSSLCertificateOnError = null;
// if we came here from the SSL error dialog
if (fromShowSSLCertificateOnError) {
@@ -3827,7 +3088,6 @@
int whichButton) {
mPageInfoDialog = null;
mPageInfoView = null;
- mPageInfoFromShowSSLCertificateOnError = null;
// if we came here from the SSL error dialog
if (fromShowSSLCertificateOnError) {
@@ -3855,7 +3115,7 @@
* (accessible from the Page-Info dialog).
* @param tab The tab to show certificate for.
*/
- private void showSSLCertificate(final TabControl.Tab tab) {
+ private void showSSLCertificate(final Tab tab) {
final View certificateView =
inflateCertificateView(tab.getWebView().getCertificate());
if (certificateView == null) {
@@ -3907,7 +3167,7 @@
* connection that resulted in an SSL error or proceeding per user request.
* @param error The SSL error object.
*/
- private void showSSLCertificateOnError(
+ void showSSLCertificateOnError(
final WebView view, final SslErrorHandler handler, final SslError error) {
final View certificateView =
@@ -3966,8 +3226,8 @@
mSSLCertificateOnErrorHandler = null;
mSSLCertificateOnErrorError = null;
- mWebViewClient.onReceivedSslError(
- view, handler, error);
+ view.getWebViewClient().onReceivedSslError(
+ view, handler, error);
}
})
.setNeutralButton(R.string.page_info_view,
@@ -3992,8 +3252,8 @@
mSSLCertificateOnErrorHandler = null;
mSSLCertificateOnErrorError = null;
- mWebViewClient.onReceivedSslError(
- view, handler, error);
+ view.getWebViewClient().onReceivedSslError(
+ view, handler, error);
}
})
.show();
@@ -4084,7 +3344,7 @@
/**
* Displays an http-authentication dialog.
*/
- private void showHttpAuthentication(final HttpAuthHandler handler,
+ void showHttpAuthentication(final HttpAuthHandler handler,
final String host, final String realm, final String title,
final String name, final String password, int focusId) {
LayoutInflater factory = LayoutInflater.from(this);
@@ -4205,6 +3465,10 @@
}
}
+ boolean isNetworkUp() {
+ return mIsNetworkUp;
+ }
+
// This method shows the network dialog alerting the user that the net is
// down. It will only show the dialog if mAlertDialog is null.
private void createAndShowNetworkDialog() {
@@ -4220,6 +3484,8 @@
@Override
protected void onActivityResult(int requestCode, int resultCode,
Intent intent) {
+ if (getTopWindow() == null) return;
+
switch (requestCode) {
case COMBO_PAGE:
if (resultCode == RESULT_OK && intent != null) {
@@ -4228,7 +3494,7 @@
if (extras != null && extras.getBoolean("new_window", false)) {
openTab(data);
} else {
- final TabControl.Tab currentTab =
+ final Tab currentTab =
mTabControl.getCurrentTab();
dismissSubWindow(currentTab);
if (data != null && data.length() != 0) {
@@ -4236,6 +3502,23 @@
}
}
}
+ // Deliberately fall through to PREFERENCES_PAGE, since the
+ // same extra may be attached to the COMBO_PAGE
+ case PREFERENCES_PAGE:
+ if (resultCode == RESULT_OK && intent != null) {
+ String action = intent.getStringExtra(Intent.EXTRA_TEXT);
+ if (BrowserSettings.PREF_CLEAR_HISTORY.equals(action)) {
+ mTabControl.removeParentChildRelationShips();
+ }
+ }
+ break;
+ // Choose a file from the file picker.
+ case FILE_SELECTED:
+ if (null == mUploadMessage) break;
+ Uri result = intent == null || resultCode != RESULT_OK ? null
+ : intent.getData();
+ mUploadMessage.onReceiveValue(result);
+ mUploadMessage = null;
break;
default:
break;
@@ -4245,14 +3528,14 @@
/*
* This method is called as a result of the user selecting the options
- * menu to see the download window, or when a download changes state. It
- * shows the download window ontop of the current window.
+ * menu to see the download window. It shows the download window on top of
+ * the current window.
*/
- /* package */ void viewDownloads(Uri downloadRecord) {
+ private void viewDownloads(Uri downloadRecord) {
Intent intent = new Intent(this,
BrowserDownloadPage.class);
intent.setData(downloadRecord);
- startActivityForResult(intent, this.DOWNLOAD_PAGE);
+ startActivityForResult(intent, BrowserActivity.DOWNLOAD_PAGE);
}
@@ -4289,8 +3572,7 @@
intent.putExtra("url", url);
intent.putExtra("thumbnail", thumbnail);
// Disable opening in a new window if we have maxed out the windows
- intent.putExtra("disable_new_window", mTabControl.getTabCount()
- >= TabControl.MAX_TABS);
+ intent.putExtra("disable_new_window", !mTabControl.canCreateNewTab());
intent.putExtra("touch_icon_url", current.getTouchIconUrl());
if (startWithHistory) {
intent.putExtra(CombinedBookmarkHistoryActivity.STARTING_TAB,
@@ -4304,7 +3586,7 @@
// In case the user enters nothing.
if (url != null && url.length() != 0 && view != null) {
url = smartUrlFilter(url);
- if (!mWebViewClient.shouldOverrideUrlLoading(view, url)) {
+ if (!view.getWebViewClient().shouldOverrideUrlLoading(view, url)) {
view.loadUrl(url);
}
}
@@ -4317,16 +3599,6 @@
return null;
}
-
- // get window count
-
- int getWindowCount(){
- if(mTabControl != null){
- return mTabControl.getTabCount();
- }
- return 0;
- }
-
protected static final Pattern ACCEPTED_URI_SCHEMA = Pattern.compile(
"(?i)" + // switch on case insensitive matching
"(" + // begin group for schema
@@ -4383,7 +3655,7 @@
}
}
} else {
- if (Regex.WEB_URL_PATTERN.matcher(inUrl).matches()) {
+ if (Patterns.WEB_URL.matcher(inUrl).matches()) {
return URLUtil.guessUrl(inUrl);
}
}
@@ -4400,7 +3672,8 @@
mShouldShowErrorConsole = flag;
- ErrorConsoleView errorConsole = mTabControl.getCurrentErrorConsole(true);
+ ErrorConsoleView errorConsole = mTabControl.getCurrentTab()
+ .getErrorConsole(true);
if (flag) {
// Setting the show state of the console will cause it's the layout to be inflated.
@@ -4412,7 +3685,7 @@
// Now we can add it to the main view.
mErrorConsoleContainer.addView(errorConsole,
- new LinearLayout.LayoutParams(ViewGroup.LayoutParams.FILL_PARENT,
+ new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.WRAP_CONTENT));
} else {
mErrorConsoleContainer.removeView(errorConsole);
@@ -4420,13 +3693,27 @@
}
+ boolean shouldShowErrorConsole() {
+ return mShouldShowErrorConsole;
+ }
+
+ private void setStatusBarVisibility(boolean visible) {
+ int flag = visible ? 0 : WindowManager.LayoutParams.FLAG_FULLSCREEN;
+ getWindow().setFlags(flag, WindowManager.LayoutParams.FLAG_FULLSCREEN);
+ }
+
+
+ private void sendNetworkType(String type, String subtype) {
+ WebView w = mTabControl.getCurrentWebView();
+ if (w != null) {
+ w.setNetworkType(type, subtype);
+ }
+ }
+
final static int LOCK_ICON_UNSECURE = 0;
final static int LOCK_ICON_SECURE = 1;
final static int LOCK_ICON_MIXED = 2;
- private int mLockIconType = LOCK_ICON_UNSECURE;
- private int mPrevLockType = LOCK_ICON_UNSECURE;
-
private BrowserSettings mSettings;
private TabControl mTabControl;
private ContentResolver mResolver;
@@ -4452,7 +3739,6 @@
private boolean mIsNetworkUp;
private boolean mDidStopLoad;
- private boolean mPageStarted;
private boolean mActivityInPause = true;
private boolean mMenuIsDown;
@@ -4498,11 +3784,11 @@
// As PageInfo has different style for landscape / portrait, we have
// to re-open it when configuration changed
private AlertDialog mPageInfoDialog;
- private TabControl.Tab mPageInfoView;
+ private Tab mPageInfoView;
// If the Page-Info dialog is launched from the SSL-certificate-on-error
// dialog, we should not just dismiss it, but should get back to the
// SSL-certificate-on-error dialog. This flag is used to store this state
- private Boolean mPageInfoFromShowSSLCertificateOnError;
+ private boolean mPageInfoFromShowSSLCertificateOnError;
// as SSLCertificateOnError has different style for landscape / portrait,
// we have to re-open it when configuration changed
@@ -4514,7 +3800,7 @@
// as SSLCertificate has different style for landscape / portrait, we
// have to re-open it when configuration changed
private AlertDialog mSSLCertificateDialog;
- private TabControl.Tab mSSLCertificateView;
+ private Tab mSSLCertificateView;
// as HttpAuthentication has different style for landscape / portrait, we
// have to re-open it when configuration changed
@@ -4523,12 +3809,12 @@
/*package*/ static final FrameLayout.LayoutParams COVER_SCREEN_PARAMS =
new FrameLayout.LayoutParams(
- ViewGroup.LayoutParams.FILL_PARENT,
- ViewGroup.LayoutParams.FILL_PARENT);
+ ViewGroup.LayoutParams.MATCH_PARENT,
+ ViewGroup.LayoutParams.MATCH_PARENT);
/*package*/ static final FrameLayout.LayoutParams COVER_SCREEN_GRAVITY_CENTER =
new FrameLayout.LayoutParams(
- ViewGroup.LayoutParams.FILL_PARENT,
- ViewGroup.LayoutParams.FILL_PARENT,
+ ViewGroup.LayoutParams.MATCH_PARENT,
+ ViewGroup.LayoutParams.MATCH_PARENT,
Gravity.CENTER);
// Google search
final static String QuickSearch_G = "http://www.google.com/m?q=%s";
@@ -4579,13 +3865,11 @@
private BroadcastReceiver mPackageInstallationReceiver;
- // AsyncTask for downloading touch icons
- /* package */ DownloadTouchIcon mTouchIconLoader;
-
// activity requestCode
final static int COMBO_PAGE = 1;
final static int DOWNLOAD_PAGE = 2;
final static int PREFERENCES_PAGE = 3;
+ final static int FILE_SELECTED = 4;
// the default <video> poster
private Bitmap mDefaultVideoPoster;
diff --git a/src/com/android/browser/BrowserBookmarksAdapter.java b/src/com/android/browser/BrowserBookmarksAdapter.java
index dd56d2f..7b93fa1 100644
--- a/src/com/android/browser/BrowserBookmarksAdapter.java
+++ b/src/com/android/browser/BrowserBookmarksAdapter.java
@@ -316,8 +316,8 @@
originalUrlNoQuery, urlNoQuery, originalUrl, url };
String where = BookmarkColumns.URL + " == ? OR "
+ BookmarkColumns.URL + " == ? OR "
- + BookmarkColumns.URL + " GLOB ? || '*' OR "
- + BookmarkColumns.URL + " GLOB ? || '*'";
+ + BookmarkColumns.URL + " LIKE ? || '%' OR "
+ + BookmarkColumns.URL + " LIKE ? || '%'";
if (onlyBookmarks) {
where = "(" + where + ") AND " + BookmarkColumns.BOOKMARK + " == 1";
}
@@ -441,7 +441,7 @@
mCursor.moveToPosition(position - mExtraOffset);
tv.setText(mCursor.getString(
Browser.HISTORY_PROJECTION_TITLE_INDEX));
- Bitmap thumbnail = getBitmap(Browser.HISTORY_PROJECTION_THUMBNAIL_INDEX, position);
+ Bitmap thumbnail = getScreenshot(position);
if (thumbnail == null) {
thumb.setImageResource(R.drawable.browser_thumbnail);
} else {
@@ -493,6 +493,13 @@
}
/**
+ * Return the screenshot for this item in the list.
+ */
+ public Bitmap getScreenshot(int position) {
+ return getBitmap(Browser.HISTORY_PROJECTION_THUMBNAIL_INDEX, position);
+ }
+
+ /**
* Return the favicon for this item in the list.
*/
public Bitmap getFavicon(int position) {
@@ -540,15 +547,8 @@
private void bind(BookmarkItem b, int position) {
mCursor.moveToPosition(position- mExtraOffset);
- String title = mCursor.getString(Browser.HISTORY_PROJECTION_TITLE_INDEX);
- if (title.length() > BrowserSettings.MAX_TEXTVIEW_LEN) {
- title = title.substring(0, BrowserSettings.MAX_TEXTVIEW_LEN);
- }
- b.setName(title);
+ b.setName(mCursor.getString(Browser.HISTORY_PROJECTION_TITLE_INDEX));
String url = mCursor.getString(Browser.HISTORY_PROJECTION_URL_INDEX);
- if (url.length() > BrowserSettings.MAX_TEXTVIEW_LEN) {
- url = url.substring(0, BrowserSettings.MAX_TEXTVIEW_LEN);
- }
b.setUrl(url);
byte[] data = mCursor.getBlob(Browser.HISTORY_PROJECTION_FAVICON_INDEX);
if (data != null) {
diff --git a/src/com/android/browser/BrowserBookmarksPage.java b/src/com/android/browser/BrowserBookmarksPage.java
index 6ab011b..d835f84 100644
--- a/src/com/android/browser/BrowserBookmarksPage.java
+++ b/src/com/android/browser/BrowserBookmarksPage.java
@@ -40,15 +40,11 @@
import android.text.IClipboard;
import android.util.Log;
import android.view.ContextMenu;
-import android.view.KeyEvent;
-import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
-import android.view.ViewGroup.LayoutParams;
-import android.view.ViewStub;
import android.view.ContextMenu.ContextMenuInfo;
import android.widget.AdapterView;
import android.widget.GridView;
@@ -64,7 +60,7 @@
private BookmarkViewMode mViewMode = BookmarkViewMode.NONE;
private GridView mGridPage;
- private View mVerticalList;
+ private ListView mVerticalList;
private BrowserBookmarksAdapter mBookmarksAdapter;
private static final int BOOKMARKS_SAVE = 1;
private boolean mDisableNewWindow;
@@ -125,8 +121,10 @@
openInNewWindow(i.position);
break;
case R.id.share_link_context_menu_id:
- Browser.sendString(BrowserBookmarksPage.this, getUrl(i.position),
- getText(R.string.choosertitle_sharevia).toString());
+ BrowserActivity.sharePage(BrowserBookmarksPage.this,
+ mBookmarksAdapter.getTitle(i.position), getUrl(i.position),
+ getFavicon(i.position),
+ mBookmarksAdapter.getScreenshot(i.position));
break;
case R.id.copy_url_context_menu_id:
copy(getUrl(i.position));
@@ -240,12 +238,7 @@
if (mCreateShortcut) {
setTitle(R.string.browser_bookmarks_page_bookmarks_text);
}
- mBookmarksAdapter = new BrowserBookmarksAdapter(this,
- getIntent().getStringExtra("url"),
- getIntent().getStringExtra("title"),
- (Bitmap) getIntent().getParcelableExtra("thumbnail"),
- mCreateShortcut,
- mMostVisited);
+ mHandler.obtainMessage(CREATE_ADAPTER).sendToTarget();
setContentView(R.layout.empty_history);
mEmptyView = findViewById(R.id.empty_view);
@@ -270,12 +263,12 @@
* Set the ContentView to be either the grid of thumbnails or the vertical
* list.
*/
- private void switchViewMode(BookmarkViewMode gridMode) {
- if (mViewMode == gridMode) {
+ private void switchViewMode(BookmarkViewMode viewMode) {
+ if (mViewMode == viewMode) {
return;
}
- mViewMode = gridMode;
+ mViewMode = viewMode;
// Update the preferences to make the new view mode sticky.
Editor ed = getPreferences(MODE_PRIVATE).edit();
@@ -286,11 +279,15 @@
}
ed.commit();
- mBookmarksAdapter.switchViewMode(gridMode);
+ if (mBookmarksAdapter != null) {
+ mBookmarksAdapter.switchViewMode(viewMode);
+ }
if (mViewMode == BookmarkViewMode.GRID) {
if (mGridPage == null) {
mGridPage = new GridView(this);
- mGridPage.setAdapter(mBookmarksAdapter);
+ if (mBookmarksAdapter != null) {
+ mGridPage.setAdapter(mBookmarksAdapter);
+ }
mGridPage.setOnItemClickListener(mListener);
mGridPage.setNumColumns(GridView.AUTO_FIT);
mGridPage.setColumnWidth(
@@ -321,7 +318,9 @@
} else {
if (null == mVerticalList) {
ListView listView = new ListView(this);
- listView.setAdapter(mBookmarksAdapter);
+ if (mBookmarksAdapter != null) {
+ listView.setAdapter(mBookmarksAdapter);
+ }
listView.setDrawSelectorOnTop(false);
listView.setVerticalScrollBarEnabled(true);
listView.setOnItemClickListener(mListener);
@@ -345,15 +344,35 @@
private static final ViewGroup.LayoutParams FULL_SCREEN_PARAMS
= new ViewGroup.LayoutParams(
- ViewGroup.LayoutParams.FILL_PARENT,
- ViewGroup.LayoutParams.FILL_PARENT);
+ ViewGroup.LayoutParams.MATCH_PARENT,
+ ViewGroup.LayoutParams.MATCH_PARENT);
private static final int SAVE_CURRENT_PAGE = 1000;
+ private static final int CREATE_ADAPTER = 1001;
private final Handler mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
- if (msg.what == SAVE_CURRENT_PAGE) {
- saveCurrentPage();
+ switch (msg.what) {
+ case SAVE_CURRENT_PAGE:
+ saveCurrentPage();
+ break;
+ case CREATE_ADAPTER:
+ Intent intent = getIntent();
+ mBookmarksAdapter = new BrowserBookmarksAdapter(
+ BrowserBookmarksPage.this,
+ intent.getStringExtra("url"),
+ intent.getStringExtra("title"),
+ (Bitmap) intent.getParcelableExtra("thumbnail"),
+ mCreateShortcut,
+ mMostVisited);
+ mBookmarksAdapter.switchViewMode(mViewMode);
+ if (mGridPage != null) {
+ mGridPage.setAdapter(mBookmarksAdapter);
+ }
+ if (mVerticalList != null) {
+ mVerticalList.setAdapter(mBookmarksAdapter);
+ }
+ break;
}
}
};
@@ -439,9 +458,10 @@
p.setStyle(Paint.Style.FILL_AND_STROKE);
p.setColor(Color.WHITE);
+ float density = getResources().getDisplayMetrics().density;
// Create a rectangle that is slightly wider than the favicon
- final float iconSize = 16; // 16x16 favicon
- final float padding = 2; // white padding around icon
+ final float iconSize = 16 * density; // 16x16 favicon
+ final float padding = 2; // white padding around icon
final float rectSize = iconSize + 2 * padding;
final float y = icon.getHeight() - rectSize;
RectF r = new RectF(0, y, rectSize, y + rectSize);
@@ -489,7 +509,7 @@
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
boolean result = super.onPrepareOptionsMenu(menu);
- if (mCreateShortcut || mMostVisited
+ if (mCreateShortcut || mMostVisited || mBookmarksAdapter == null
|| mBookmarksAdapter.getCount() == 0) {
// No need to show the menu if there are no items.
return result;
@@ -604,25 +624,29 @@
* Return a hashmap representing the currently highlighted row.
*/
public Bundle getRow(int position) {
- return mBookmarksAdapter.getRow(position);
+ return mBookmarksAdapter == null ? null
+ : mBookmarksAdapter.getRow(position);
}
/**
* Return the url of the currently highlighted row.
*/
public String getUrl(int position) {
- return mBookmarksAdapter.getUrl(position);
+ return mBookmarksAdapter == null ? null
+ : mBookmarksAdapter.getUrl(position);
}
/**
* Return the favicon of the currently highlighted row.
*/
public Bitmap getFavicon(int position) {
- return mBookmarksAdapter.getFavicon(position);
+ return mBookmarksAdapter == null ? null
+ : mBookmarksAdapter.getFavicon(position);
}
private Bitmap getTouchIcon(int position) {
- return mBookmarksAdapter.getTouchIcon(position);
+ return mBookmarksAdapter == null ? null
+ : mBookmarksAdapter.getTouchIcon(position);
}
private void copy(CharSequence text) {
@@ -637,13 +661,15 @@
}
public String getBookmarkTitle(int position) {
- return mBookmarksAdapter.getTitle(position);
+ return mBookmarksAdapter == null ? null
+ : mBookmarksAdapter.getTitle(position);
}
/**
* Delete the currently highlighted row.
*/
public void deleteBookmark(int position) {
+ if (mBookmarksAdapter == null) return;
mBookmarksAdapter.deleteRow(position);
}
@@ -654,12 +680,17 @@
super.onBackPressed();
}
- // This Activity is generally a sub-Activity of CombinedHistoryActivity. In
- // that situation, we need to pass our result code up to our parent.
- // However, if someone calls this Activity directly, then this has no
- // parent, and it needs to set it on itself.
+ // This Activity is generally a sub-Activity of
+ // CombinedBookmarkHistoryActivity. In that situation, we need to pass our
+ // result code up to our parent. However, if someone calls this Activity
+ // directly, then this has no parent, and it needs to set it on itself.
private void setResultToParent(int resultCode, Intent data) {
- Activity a = getParent() == null ? this : getParent();
- a.setResult(resultCode, data);
+ Activity parent = getParent();
+ if (parent == null) {
+ setResult(resultCode, data);
+ } else {
+ ((CombinedBookmarkHistoryActivity) parent).setResultFromChild(
+ resultCode, data);
+ }
}
}
diff --git a/src/com/android/browser/BrowserDownloadAdapter.java b/src/com/android/browser/BrowserDownloadAdapter.java
index 16cb982..2a3b69c 100644
--- a/src/com/android/browser/BrowserDownloadAdapter.java
+++ b/src/com/android/browser/BrowserDownloadAdapter.java
@@ -17,8 +17,6 @@
package com.android.browser;
-import android.content.ContentUris;
-import android.content.ContentValues;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
@@ -30,13 +28,14 @@
import android.net.Uri;
import android.provider.Downloads;
import android.text.format.Formatter;
+import android.view.LayoutInflater;
import android.view.View;
+import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.ProgressBar;
-import android.widget.ResourceCursorAdapter;
+import android.widget.RelativeLayout;
import android.widget.TextView;
-import java.io.File;
import java.text.DateFormat;
import java.util.Date;
import java.util.List;
@@ -46,7 +45,7 @@
* real work done by this class is to construct a custom view for the line
* items.
*/
-public class BrowserDownloadAdapter extends ResourceCursorAdapter {
+public class BrowserDownloadAdapter extends DateSortedExpandableListAdapter {
private int mFilenameColumnId;
private int mTitleColumnId;
@@ -57,26 +56,40 @@
private int mMimetypeColumnId;
private int mDateColumnId;
- public BrowserDownloadAdapter(Context context, int layout, Cursor c) {
- super(context, layout, c);
- mFilenameColumnId = c.getColumnIndexOrThrow(Downloads._DATA);
- mTitleColumnId = c.getColumnIndexOrThrow(Downloads.COLUMN_TITLE);
- mDescColumnId = c.getColumnIndexOrThrow(Downloads.COLUMN_DESCRIPTION);
- mStatusColumnId = c.getColumnIndexOrThrow(Downloads.COLUMN_STATUS);
- mTotalBytesColumnId = c.getColumnIndexOrThrow(Downloads.COLUMN_TOTAL_BYTES);
+ public BrowserDownloadAdapter(Context context, Cursor c, int index) {
+ super(context, c, index);
+ mFilenameColumnId = c.getColumnIndexOrThrow(Downloads.Impl._DATA);
+ mTitleColumnId = c.getColumnIndexOrThrow(Downloads.Impl.COLUMN_TITLE);
+ mDescColumnId = c.getColumnIndexOrThrow(Downloads.Impl.COLUMN_DESCRIPTION);
+ mStatusColumnId = c.getColumnIndexOrThrow(Downloads.Impl.COLUMN_STATUS);
+ mTotalBytesColumnId = c.getColumnIndexOrThrow(Downloads.Impl.COLUMN_TOTAL_BYTES);
mCurrentBytesColumnId =
- c.getColumnIndexOrThrow(Downloads.COLUMN_CURRENT_BYTES);
- mMimetypeColumnId = c.getColumnIndexOrThrow(Downloads.COLUMN_MIME_TYPE);
- mDateColumnId = c.getColumnIndexOrThrow(Downloads.COLUMN_LAST_MODIFICATION);
+ c.getColumnIndexOrThrow(Downloads.Impl.COLUMN_CURRENT_BYTES);
+ mMimetypeColumnId = c.getColumnIndexOrThrow(Downloads.Impl.COLUMN_MIME_TYPE);
+ mDateColumnId = c.getColumnIndexOrThrow(Downloads.Impl.COLUMN_LAST_MODIFICATION);
}
@Override
- public void bindView(View view, Context context, Cursor cursor) {
+ public View getChildView(int groupPosition, int childPosition,
+ boolean isLastChild, View convertView, ViewGroup parent) {
+ Context context = getContext();
+ // The layout file uses a RelativeLayout, whereas the GroupViews use
+ // TextView.
+ if (null == convertView || !(convertView instanceof RelativeLayout)) {
+ convertView = LayoutInflater.from(context).inflate(
+ R.layout.browser_download_item, null);
+ }
+
+ // Bail early if the Cursor is closed.
+ if (!moveCursorToChildPosition(groupPosition, childPosition)) {
+ return convertView;
+ }
+
Resources r = context.getResources();
// Retrieve the icon for this download
- String mimeType = cursor.getString(mMimetypeColumnId);
- ImageView iv = (ImageView) view.findViewById(R.id.download_icon);
+ String mimeType = getString(mMimetypeColumnId);
+ ImageView iv = (ImageView) convertView.findViewById(R.id.download_icon);
if (DrmRawContent.DRM_MIMETYPE_MESSAGE_STRING.equalsIgnoreCase(mimeType)) {
iv.setImageResource(R.drawable.ic_launcher_drm_file);
} else if (mimeType == null) {
@@ -96,89 +109,84 @@
}
}
- TextView tv = (TextView) view.findViewById(R.id.download_title);
- String title = cursor.getString(mTitleColumnId);
+ TextView tv = (TextView) convertView.findViewById(R.id.download_title);
+ String title = getString(mTitleColumnId);
if (title == null) {
- String fullFilename = cursor.getString(mFilenameColumnId);
+ String fullFilename = getString(mFilenameColumnId);
if (fullFilename == null) {
title = r.getString(R.string.download_unknown_filename);
} else {
// We have a filename, so we can build a title from that
- title = new File(fullFilename).getName();
- ContentValues values = new ContentValues();
- values.put(Downloads.COLUMN_TITLE, title);
- // assume "_id" is the first column for the cursor
- context.getContentResolver().update(
- ContentUris.withAppendedId(Downloads.CONTENT_URI,
- cursor.getLong(0)), values, null, null);
+ title = Downloads.Impl.createTitleFromFilename(context, fullFilename,
+ getLong(0));
}
}
tv.setText(title);
- tv = (TextView) view.findViewById(R.id.domain);
- tv.setText(cursor.getString(mDescColumnId));
+ tv = (TextView) convertView.findViewById(R.id.domain);
+ tv.setText(getString(mDescColumnId));
- long totalBytes = cursor.getLong(mTotalBytesColumnId);
+ long totalBytes = getLong(mTotalBytesColumnId);
- int status = cursor.getInt(mStatusColumnId);
- if (Downloads.isStatusCompleted(status)) { // Download stopped
- View v = view.findViewById(R.id.progress_text);
+ int status = getInt(mStatusColumnId);
+ if (Downloads.Impl.isStatusCompleted(status)) { // Download stopped
+ View v = convertView.findViewById(R.id.progress_text);
v.setVisibility(View.GONE);
- v = view.findViewById(R.id.download_progress);
+ v = convertView.findViewById(R.id.download_progress);
v.setVisibility(View.GONE);
- tv = (TextView) view.findViewById(R.id.complete_text);
+ tv = (TextView) convertView.findViewById(R.id.complete_text);
tv.setVisibility(View.VISIBLE);
- if (Downloads.isStatusError(status)) {
+ if (Downloads.Impl.isStatusError(status)) {
tv.setText(getErrorText(status));
} else {
tv.setText(r.getString(R.string.download_success,
- Formatter.formatFileSize(mContext, totalBytes)));
+ Formatter.formatFileSize(context, totalBytes)));
}
- long time = cursor.getLong(mDateColumnId);
+ long time = getLong(mDateColumnId);
Date d = new Date(time);
DateFormat df = DateFormat.getDateInstance(DateFormat.SHORT);
- tv = (TextView) view.findViewById(R.id.complete_date);
+ tv = (TextView) convertView.findViewById(R.id.complete_date);
tv.setVisibility(View.VISIBLE);
tv.setText(df.format(d));
} else { // Download is still running
- tv = (TextView) view.findViewById(R.id.progress_text);
+ tv = (TextView) convertView.findViewById(R.id.progress_text);
tv.setVisibility(View.VISIBLE);
- View progress = view.findViewById(R.id.download_progress);
+ View progress = convertView.findViewById(R.id.download_progress);
progress.setVisibility(View.VISIBLE);
- View v = view.findViewById(R.id.complete_date);
+ View v = convertView.findViewById(R.id.complete_date);
v.setVisibility(View.GONE);
- v = view.findViewById(R.id.complete_text);
+ v = convertView.findViewById(R.id.complete_text);
v.setVisibility(View.GONE);
- if (status == Downloads.STATUS_PENDING) {
+ if (status == Downloads.Impl.STATUS_PENDING) {
tv.setText(r.getText(R.string.download_pending));
- } else if (status == Downloads.STATUS_PENDING_PAUSED) {
+ } else if (status == Downloads.Impl.STATUS_PENDING_PAUSED) {
tv.setText(r.getText(R.string.download_pending_network));
} else {
ProgressBar pb = (ProgressBar) progress;
StringBuilder sb = new StringBuilder();
- if (status == Downloads.STATUS_RUNNING) {
+ if (status == Downloads.Impl.STATUS_RUNNING) {
sb.append(r.getText(R.string.download_running));
} else {
sb.append(r.getText(R.string.download_running_paused));
}
if (totalBytes > 0) {
- long currentBytes = cursor.getLong(mCurrentBytesColumnId);
+ long currentBytes = getLong(mCurrentBytesColumnId);
int progressAmount = (int)(currentBytes * 100 / totalBytes);
sb.append(' ');
sb.append(progressAmount);
sb.append("% (");
- sb.append(Formatter.formatFileSize(mContext, currentBytes));
+ sb.append(Formatter.formatFileSize(context, currentBytes));
sb.append("/");
- sb.append(Formatter.formatFileSize(mContext, totalBytes));
+ sb.append(Formatter.formatFileSize(context, totalBytes));
sb.append(")");
pb.setIndeterminate(false);
pb.setProgress(progressAmount);
@@ -188,7 +196,7 @@
tv.setText(sb.toString());
}
}
-
+ return convertView;
}
/**
@@ -198,23 +206,23 @@
*/
public static int getErrorText(int status) {
switch (status) {
- case Downloads.STATUS_NOT_ACCEPTABLE:
+ case Downloads.Impl.STATUS_NOT_ACCEPTABLE:
return R.string.download_not_acceptable;
- case Downloads.STATUS_LENGTH_REQUIRED:
+ case Downloads.Impl.STATUS_LENGTH_REQUIRED:
return R.string.download_length_required;
- case Downloads.STATUS_PRECONDITION_FAILED:
+ case Downloads.Impl.STATUS_PRECONDITION_FAILED:
return R.string.download_precondition_failed;
- case Downloads.STATUS_CANCELED:
+ case Downloads.Impl.STATUS_CANCELED:
return R.string.download_canceled;
- case Downloads.STATUS_FILE_ERROR:
+ case Downloads.Impl.STATUS_FILE_ERROR:
return R.string.download_file_error;
- case Downloads.STATUS_BAD_REQUEST:
- case Downloads.STATUS_UNKNOWN_ERROR:
+ case Downloads.Impl.STATUS_BAD_REQUEST:
+ case Downloads.Impl.STATUS_UNKNOWN_ERROR:
default:
return R.string.download_error;
}
diff --git a/src/com/android/browser/BrowserDownloadPage.java b/src/com/android/browser/BrowserDownloadPage.java
index 22e0e65..9c15c17 100644
--- a/src/com/android/browser/BrowserDownloadPage.java
+++ b/src/com/android/browser/BrowserDownloadPage.java
@@ -16,8 +16,8 @@
package com.android.browser;
-import android.app.Activity;
import android.app.AlertDialog;
+import android.app.ExpandableListActivity;
import android.content.ActivityNotFoundException;
import android.content.ContentValues;
import android.content.DialogInterface;
@@ -26,9 +26,11 @@
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import android.database.Cursor;
+import android.database.DatabaseUtils;
import android.net.Uri;
import android.os.Bundle;
import android.provider.Downloads;
+import android.provider.MediaStore;
import android.view.ContextMenu;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.LayoutInflater;
@@ -38,8 +40,7 @@
import android.view.View;
import android.view.ViewGroup.LayoutParams;
import android.widget.AdapterView;
-import android.widget.ListView;
-import android.widget.AdapterView.OnItemClickListener;
+import android.widget.ExpandableListView;
import java.io.File;
import java.util.List;
@@ -47,16 +48,15 @@
/**
* View showing the user's current browser downloads
*/
-public class BrowserDownloadPage extends Activity
- implements View.OnCreateContextMenuListener, OnItemClickListener {
+public class BrowserDownloadPage extends ExpandableListActivity {
- private ListView mListView;
+ private ExpandableListView mListView;
private Cursor mDownloadCursor;
private BrowserDownloadAdapter mDownloadAdapter;
private int mStatusColumnId;
private int mIdColumnId;
private int mTitleColumnId;
- private int mContextMenuPosition;
+ private long mContextMenuPosition;
@Override
public void onCreate(Bundle icicle) {
@@ -65,43 +65,46 @@
setTitle(getText(R.string.download_title));
- mListView = (ListView) findViewById(R.id.list);
+ mListView = (ExpandableListView) findViewById(android.R.id.list);
mListView.setEmptyView(findViewById(R.id.empty));
-
- mDownloadCursor = managedQuery(Downloads.CONTENT_URI,
- new String [] {"_id", Downloads.COLUMN_TITLE, Downloads.COLUMN_STATUS,
- Downloads.COLUMN_TOTAL_BYTES, Downloads.COLUMN_CURRENT_BYTES,
- Downloads._DATA, Downloads.COLUMN_DESCRIPTION,
- Downloads.COLUMN_MIME_TYPE, Downloads.COLUMN_LAST_MODIFICATION,
- Downloads.COLUMN_VISIBILITY},
- null, null);
+ mDownloadCursor = managedQuery(Downloads.Impl.CONTENT_URI,
+ new String [] {"_id", Downloads.Impl.COLUMN_TITLE, Downloads.Impl.COLUMN_STATUS,
+ Downloads.Impl.COLUMN_TOTAL_BYTES, Downloads.Impl.COLUMN_CURRENT_BYTES,
+ Downloads.Impl._DATA, Downloads.Impl.COLUMN_DESCRIPTION,
+ Downloads.Impl.COLUMN_MIME_TYPE, Downloads.Impl.COLUMN_LAST_MODIFICATION,
+ Downloads.Impl.COLUMN_VISIBILITY},
+ null, Downloads.Impl.COLUMN_LAST_MODIFICATION + " DESC");
// only attach everything to the listbox if we can access
// the download database. Otherwise, just show it empty
if (mDownloadCursor != null) {
mStatusColumnId =
- mDownloadCursor.getColumnIndexOrThrow(Downloads.COLUMN_STATUS);
+ mDownloadCursor.getColumnIndexOrThrow(Downloads.Impl.COLUMN_STATUS);
mIdColumnId =
- mDownloadCursor.getColumnIndexOrThrow(Downloads._ID);
+ mDownloadCursor.getColumnIndexOrThrow(Downloads.Impl._ID);
mTitleColumnId =
- mDownloadCursor.getColumnIndexOrThrow(Downloads.COLUMN_TITLE);
+ mDownloadCursor.getColumnIndexOrThrow(Downloads.Impl.COLUMN_TITLE);
// Create a list "controller" for the data
mDownloadAdapter = new BrowserDownloadAdapter(this,
- R.layout.browser_download_item, mDownloadCursor);
+ mDownloadCursor, mDownloadCursor.getColumnIndexOrThrow(
+ Downloads.Impl.COLUMN_LAST_MODIFICATION));
- mListView.setAdapter(mDownloadAdapter);
+ setListAdapter(mDownloadAdapter);
mListView.setScrollBarStyle(View.SCROLLBARS_INSIDE_INSET);
mListView.setOnCreateContextMenuListener(this);
- mListView.setOnItemClickListener(this);
-
+
Intent intent = getIntent();
- if (intent != null && intent.getData() != null) {
- int position = checkStatus(
- ContentUris.parseId(intent.getData()));
- if (position >= 0) {
- mListView.setSelection(position);
- }
+ final int groupToShow = intent == null || intent.getData() == null
+ ? 0 : checkStatus(ContentUris.parseId(intent.getData()));
+ if (mDownloadAdapter.getGroupCount() > groupToShow) {
+ mListView.post(new Runnable() {
+ public void run() {
+ if (mDownloadAdapter.getGroupCount() > groupToShow) {
+ mListView.expandGroup(groupToShow);
+ }
+ }
+ });
}
}
}
@@ -119,9 +122,6 @@
public boolean onPrepareOptionsMenu(Menu menu) {
boolean showCancel = getCancelableCount() > 0;
menu.findItem(R.id.download_menu_cancel_all).setEnabled(showCancel);
-
- boolean showClear = getClearableCount() > 0;
- menu.findItem(R.id.download_menu_clear_all).setEnabled(showClear);
return super.onPrepareOptionsMenu(menu);
}
@@ -131,28 +131,83 @@
case R.id.download_menu_cancel_all:
promptCancelAll();
return true;
-
- case R.id.download_menu_clear_all:
- promptClearList();
- return true;
}
return false;
}
+ /**
+ * Remove the file from the list of downloads.
+ * @param id Unique ID of the download to remove.
+ */
+ private void clearFromDownloads(long id) {
+ getContentResolver().delete(ContentUris.withAppendedId(
+ Downloads.Impl.CONTENT_URI, id), null, null);
+ }
+
+ /**
+ * Remove the file from the SD card
+ * @param filename Name of the file to delete.
+ * @param mimetype Mimetype of the file to delete.
+ * @return boolean True on success, false on failure.
+ */
+ private boolean deleteFile(String filename, String mimetype) {
+ Uri uri;
+ if (mimetype.startsWith("image")) {
+ uri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
+ } else if (mimetype.startsWith("audio")) {
+ uri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
+ } else if (mimetype.startsWith("video")) {
+ uri = MediaStore.Video.Media.EXTERNAL_CONTENT_URI;
+ } else {
+ File file = new File(filename);
+ return file.delete();
+ }
+ return getContentResolver().delete(uri, MediaStore.MediaColumns.DATA
+ + " = " + DatabaseUtils.sqlEscapeString(filename), null) > 0;
+ }
+
@Override
public boolean onContextItemSelected(MenuItem item) {
- mDownloadCursor.moveToPosition(mContextMenuPosition);
+ if (!mDownloadAdapter.moveCursorToPackedChildPosition(
+ mContextMenuPosition)) {
+ return false;
+ }
switch (item.getItemId()) {
case R.id.download_menu_open:
hideCompletedDownload();
openCurrentDownload();
return true;
-
+
+ case R.id.download_menu_delete:
+ int filenameColumnId =
+ mDownloadCursor.getColumnIndexOrThrow(Downloads._DATA);
+ final String filename = mDownloadCursor.getString(
+ filenameColumnId);
+ int mimetypeColumnId = mDownloadCursor.getColumnIndexOrThrow(
+ Downloads.Impl.COLUMN_MIME_TYPE);
+ final String mimetype = mDownloadCursor.getString(
+ mimetypeColumnId);
+ final long id = mDownloadCursor.getLong(mIdColumnId);
+ new AlertDialog.Builder(this)
+ .setTitle(R.string.download_delete_file)
+ .setIcon(android.R.drawable.ic_dialog_alert)
+ .setMessage(filename)
+ .setNegativeButton(R.string.cancel, null)
+ .setPositiveButton(R.string.ok,
+ new DialogInterface.OnClickListener() {
+ public void onClick(DialogInterface dialog,
+ int whichButton) {
+ if (deleteFile(filename, mimetype)) {
+ clearFromDownloads(id);
+ }
+ }
+ })
+ .show();
+ break;
+
case R.id.download_menu_clear:
case R.id.download_menu_cancel:
- getContentResolver().delete(
- ContentUris.withAppendedId(Downloads.CONTENT_URI,
- mDownloadCursor.getLong(mIdColumnId)), null, null);
+ clearFromDownloads(mDownloadCursor.getLong(mIdColumnId));
return true;
}
return false;
@@ -162,76 +217,71 @@
public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenuInfo menuInfo) {
if (mDownloadCursor != null) {
- AdapterView.AdapterContextMenuInfo info =
- (AdapterView.AdapterContextMenuInfo) menuInfo;
- mDownloadCursor.moveToPosition(info.position);
- mContextMenuPosition = info.position;
+ ExpandableListView.ExpandableListContextMenuInfo info
+ = (ExpandableListView.ExpandableListContextMenuInfo) menuInfo;
+ long packedPosition = info.packedPosition;
+ // Only show a context menu for the child views
+ if (!mDownloadAdapter.moveCursorToPackedChildPosition(
+ packedPosition)) {
+ return;
+ }
+ mContextMenuPosition = packedPosition;
menu.setHeaderTitle(mDownloadCursor.getString(mTitleColumnId));
MenuInflater inflater = getMenuInflater();
int status = mDownloadCursor.getInt(mStatusColumnId);
- if (Downloads.isStatusSuccess(status)) {
+ if (Downloads.Impl.isStatusSuccess(status)) {
inflater.inflate(R.menu.downloadhistorycontextfinished, menu);
- } else if (Downloads.isStatusError(status)) {
+ } else if (Downloads.Impl.isStatusError(status)) {
inflater.inflate(R.menu.downloadhistorycontextfailed, menu);
} else {
inflater.inflate(R.menu.downloadhistorycontextrunning, menu);
}
}
+ super.onCreateContextMenu(menu, v, menuInfo);
}
/**
* This function is called to check the status of the download and if it
* has an error show an error dialog.
* @param id Row id of the download to check
- * @return position of item
+ * @return Group which contains the download
*/
- int checkStatus(final long id) {
- int position = -1;
- for (mDownloadCursor.moveToFirst(); !mDownloadCursor.isAfterLast();
- mDownloadCursor.moveToNext()) {
- if (id == mDownloadCursor.getLong(mIdColumnId)) {
- position = mDownloadCursor.getPosition();
- break;
- }
-
+ private int checkStatus(final long id) {
+ int groupToShow = mDownloadAdapter.groupFromChildId(id);
+ if (-1 == groupToShow) return 0;
+ int status = mDownloadCursor.getInt(mStatusColumnId);
+ if (!Downloads.Impl.isStatusError(status)) {
+ return groupToShow;
}
- if (!mDownloadCursor.isAfterLast()) {
- int status = mDownloadCursor.getInt(mStatusColumnId);
- if (!Downloads.isStatusError(status)) {
- return position;
+ if (status == Downloads.Impl.STATUS_FILE_ERROR) {
+ String title = mDownloadCursor.getString(mTitleColumnId);
+ if (title == null || title.length() == 0) {
+ title = getString(R.string.download_unknown_filename);
}
-
- if (status == Downloads.STATUS_FILE_ERROR) {
- String title = mDownloadCursor.getString(mTitleColumnId);
- if (title == null || title.length() == 0) {
- title = getString(R.string.download_unknown_filename);
- }
- String msg = getString(R.string.download_file_error_dlg_msg,
- title);
- new AlertDialog.Builder(this)
- .setTitle(R.string.download_file_error_dlg_title)
- .setIcon(android.R.drawable.ic_popup_disk_full)
- .setMessage(msg)
- .setPositiveButton(R.string.ok, null)
- .setNegativeButton(R.string.retry,
- new DialogInterface.OnClickListener() {
- public void onClick(DialogInterface dialog,
- int whichButton) {
- resumeDownload(id);
- }
- })
- .show();
- } else {
- new AlertDialog.Builder(this)
- .setTitle(R.string.download_failed_generic_dlg_title)
- .setIcon(R.drawable.ssl_icon)
- .setMessage(BrowserDownloadAdapter.getErrorText(status))
- .setPositiveButton(R.string.ok, null)
- .show();
- }
+ String msg = getString(R.string.download_file_error_dlg_msg, title);
+ new AlertDialog.Builder(this)
+ .setTitle(R.string.download_file_error_dlg_title)
+ .setIcon(android.R.drawable.ic_popup_disk_full)
+ .setMessage(msg)
+ .setPositiveButton(R.string.ok, null)
+ .setNegativeButton(R.string.retry,
+ new DialogInterface.OnClickListener() {
+ public void onClick(DialogInterface dialog,
+ int whichButton) {
+ resumeDownload(id);
+ }
+ })
+ .show();
+ } else {
+ new AlertDialog.Builder(this)
+ .setTitle(R.string.download_failed_generic_dlg_title)
+ .setIcon(R.drawable.ssl_icon)
+ .setMessage(BrowserDownloadAdapter.getErrorText(status))
+ .setPositiveButton(R.string.ok, null)
+ .show();
}
- return position;
+ return groupToShow;
}
/**
@@ -243,25 +293,6 @@
}
/**
- * Prompt the user if they would like to clear the download history
- */
- private void promptClearList() {
- new AlertDialog.Builder(this)
- .setTitle(R.string.download_clear_dlg_title)
- .setIcon(R.drawable.ssl_icon)
- .setMessage(R.string.download_clear_dlg_msg)
- .setPositiveButton(R.string.ok,
- new DialogInterface.OnClickListener() {
- public void onClick(DialogInterface dialog,
- int whichButton) {
- clearAllDownloads();
- }
- })
- .setNegativeButton(R.string.cancel, null)
- .show();
- }
-
- /**
* Return the number of items in the list that can be canceled.
* @return count
*/
@@ -272,7 +303,7 @@
for (mDownloadCursor.moveToFirst(); !mDownloadCursor.isAfterLast();
mDownloadCursor.moveToNext()) {
int status = mDownloadCursor.getInt(mStatusColumnId);
- if (!Downloads.isStatusCompleted(status)) {
+ if (!Downloads.Impl.isStatusCompleted(status)) {
count++;
}
}
@@ -325,14 +356,14 @@
boolean firstTime = true;
while (!mDownloadCursor.isAfterLast()) {
int status = mDownloadCursor.getInt(mStatusColumnId);
- if (!Downloads.isStatusCompleted(status)) {
+ if (!Downloads.Impl.isStatusCompleted(status)) {
if (firstTime) {
firstTime = false;
} else {
where.append(" OR ");
}
where.append("( ");
- where.append(Downloads._ID);
+ where.append(Downloads.Impl._ID);
where.append(" = '");
where.append(mDownloadCursor.getLong(mIdColumnId));
where.append("' )");
@@ -340,7 +371,7 @@
mDownloadCursor.moveToNext();
}
if (!firstTime) {
- getContentResolver().delete(Downloads.CONTENT_URI,
+ getContentResolver().delete(Downloads.Impl.CONTENT_URI,
where.toString(), null);
}
}
@@ -351,7 +382,7 @@
if (mDownloadCursor.moveToFirst()) {
while (!mDownloadCursor.isAfterLast()) {
int status = mDownloadCursor.getInt(mStatusColumnId);
- if (Downloads.isStatusCompleted(status)) {
+ if (Downloads.Impl.isStatusCompleted(status)) {
count++;
}
mDownloadCursor.moveToNext();
@@ -359,47 +390,16 @@
}
return count;
}
-
- /**
- * Clear all stopped downloads, ie canceled (though should not be
- * there), error and success download items.
- */
- private void clearAllDownloads() {
- if (mDownloadCursor.moveToFirst()) {
- StringBuilder where = new StringBuilder();
- boolean firstTime = true;
- while (!mDownloadCursor.isAfterLast()) {
- int status = mDownloadCursor.getInt(mStatusColumnId);
- if (Downloads.isStatusCompleted(status)) {
- if (firstTime) {
- firstTime = false;
- } else {
- where.append(" OR ");
- }
- where.append("( ");
- where.append(Downloads._ID);
- where.append(" = '");
- where.append(mDownloadCursor.getLong(mIdColumnId));
- where.append("' )");
- }
- mDownloadCursor.moveToNext();
- }
- if (!firstTime) {
- getContentResolver().delete(Downloads.CONTENT_URI,
- where.toString(), null);
- }
- }
- }
-
+
/**
* Open the content where the download db cursor currently is
*/
private void openCurrentDownload() {
int filenameColumnId =
- mDownloadCursor.getColumnIndexOrThrow(Downloads._DATA);
+ mDownloadCursor.getColumnIndexOrThrow(Downloads.Impl._DATA);
String filename = mDownloadCursor.getString(filenameColumnId);
int mimetypeColumnId =
- mDownloadCursor.getColumnIndexOrThrow(Downloads.COLUMN_MIME_TYPE);
+ mDownloadCursor.getColumnIndexOrThrow(Downloads.Impl.COLUMN_MIME_TYPE);
String mimetype = mDownloadCursor.getString(mimetypeColumnId);
Uri path = Uri.parse(filename);
// If there is no scheme, then it must be a file
@@ -413,7 +413,7 @@
startActivity(intent);
} catch (ActivityNotFoundException ex) {
new AlertDialog.Builder(this)
- .setTitle(R.string.download_failed_generic_dlg_title)
+ .setTitle(R.string.download_no_application_title)
.setIcon(R.drawable.ssl_icon)
.setMessage(R.string.download_no_application)
.setPositiveButton(R.string.ok, null)
@@ -421,25 +421,24 @@
}
}
- /*
- * (non-Javadoc)
- * @see android.widget.AdapterView.OnItemClickListener#onItemClick(android.widget.AdapterView, android.view.View, int, long)
- */
- public void onItemClick(AdapterView parent, View view, int position,
- long id) {
+ @Override
+ public boolean onChildClick(ExpandableListView parent, View v,
+ int groupPosition, int childPosition, long id) {
// Open the selected item
- mDownloadCursor.moveToPosition(position);
+ mDownloadAdapter.moveCursorToChildPosition(groupPosition,
+ childPosition);
hideCompletedDownload();
int status = mDownloadCursor.getInt(mStatusColumnId);
- if (Downloads.isStatusSuccess(status)) {
+ if (Downloads.Impl.isStatusSuccess(status)) {
// Open it if it downloaded successfully
openCurrentDownload();
} else {
// Check to see if there is an error.
checkStatus(id);
}
+ return true;
}
/**
@@ -449,15 +448,16 @@
private void hideCompletedDownload() {
int status = mDownloadCursor.getInt(mStatusColumnId);
- int visibilityColumn = mDownloadCursor.getColumnIndexOrThrow(Downloads.COLUMN_VISIBILITY);
+ int visibilityColumn = mDownloadCursor.getColumnIndexOrThrow(
+ Downloads.Impl.COLUMN_VISIBILITY);
int visibility = mDownloadCursor.getInt(visibilityColumn);
- if (Downloads.isStatusCompleted(status) &&
- visibility == Downloads.VISIBILITY_VISIBLE_NOTIFY_COMPLETED) {
+ if (Downloads.Impl.isStatusCompleted(status) &&
+ visibility == Downloads.Impl.VISIBILITY_VISIBLE_NOTIFY_COMPLETED) {
ContentValues values = new ContentValues();
- values.put(Downloads.COLUMN_VISIBILITY, Downloads.VISIBILITY_VISIBLE);
+ values.put(Downloads.Impl.COLUMN_VISIBILITY, Downloads.Impl.VISIBILITY_VISIBLE);
getContentResolver().update(
- ContentUris.withAppendedId(Downloads.CONTENT_URI,
+ ContentUris.withAppendedId(Downloads.Impl.CONTENT_URI,
mDownloadCursor.getLong(mIdColumnId)), values, null, null);
}
}
diff --git a/src/com/android/browser/BrowserHistoryPage.java b/src/com/android/browser/BrowserHistoryPage.java
index bdd109b..7c47460 100644
--- a/src/com/android/browser/BrowserHistoryPage.java
+++ b/src/com/android/browser/BrowserHistoryPage.java
@@ -18,23 +18,19 @@
import android.app.Activity;
import android.app.ExpandableListActivity;
+import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
-import android.database.ContentObserver;
import android.database.Cursor;
-import android.database.DataSetObserver;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
-import android.os.Handler;
import android.os.ServiceManager;
import android.provider.Browser;
import android.text.IClipboard;
import android.util.Log;
import android.view.ContextMenu;
-import android.view.KeyEvent;
-import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
@@ -43,25 +39,18 @@
import android.view.ViewGroup.LayoutParams;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.ViewStub;
-import android.webkit.DateSorter;
import android.webkit.WebIconDatabase.IconListener;
-import android.widget.AdapterView;
import android.widget.ExpandableListAdapter;
import android.widget.ExpandableListView;
import android.widget.ExpandableListView.ExpandableListContextMenuInfo;
-import android.widget.TextView;
import android.widget.Toast;
-import java.util.List;
-import java.util.Vector;
-
/**
* Activity for displaying the browser's history, divided into
* days of viewing.
*/
public class BrowserHistoryPage extends ExpandableListActivity {
private HistoryAdapter mAdapter;
- private DateSorter mDateSorter;
private boolean mDisableNewWindow;
private HistoryItem mContextHeader;
@@ -107,16 +96,30 @@
protected void onCreate(Bundle icicle) {
super.onCreate(icicle);
setTitle(R.string.browser_history);
-
- mDateSorter = new DateSorter(this);
- mAdapter = new HistoryAdapter();
+ final String whereClause = Browser.BookmarkColumns.VISITS + " > 0"
+ // In AddBookmarkPage, where we save new bookmarks, we add
+ // three visits to newly created bookmarks, so that
+ // bookmarks that have not been visited will show up in the
+ // most visited, and higher in the goto search box.
+ // However, this puts the site in the history, unless we
+ // ignore sites with a DATE of 0, which the next line does.
+ + " AND " + Browser.BookmarkColumns.DATE + " > 0";
+ final String orderBy = Browser.BookmarkColumns.DATE + " DESC";
+
+ Cursor cursor = managedQuery(
+ Browser.BOOKMARKS_URI,
+ Browser.HISTORY_PROJECTION,
+ whereClause, null, orderBy);
+
+ mAdapter = new HistoryAdapter(this, cursor,
+ Browser.HISTORY_PROJECTION_DATE_INDEX);
setListAdapter(mAdapter);
final ExpandableListView list = getExpandableListView();
list.setOnCreateContextMenuListener(this);
View v = new ViewStub(this, R.layout.empty_history);
- addContentView(v, new LayoutParams(LayoutParams.FILL_PARENT,
- LayoutParams.FILL_PARENT));
+ addContentView(v, new LayoutParams(LayoutParams.MATCH_PARENT,
+ LayoutParams.MATCH_PARENT));
list.setEmptyView(v);
// Do not post the runnable if there is nothing in the list.
if (list.getExpandableListAdapter().getGroupCount() > 0) {
@@ -134,7 +137,12 @@
false);
CombinedBookmarkHistoryActivity.getIconListenerSet()
.addListener(mIconReceiver);
-
+ Activity parent = getParent();
+ if (null == parent
+ || !(parent instanceof CombinedBookmarkHistoryActivity)) {
+ throw new AssertionError("history page can only be viewed as a tab"
+ + "in CombinedBookmarkHistoryActivity");
+ }
// initialize the result to canceled, so that if the user just presses
// back then it will have the correct result
setResultToParent(RESULT_CANCELED, null);
@@ -165,9 +173,11 @@
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.clear_history_menu_id:
- // FIXME: Need to clear the tab control in browserActivity
- // as well
Browser.clearHistory(getContentResolver());
+ // BrowserHistoryPage is always a child of
+ // CombinedBookmarkHistoryActivity
+ ((CombinedBookmarkHistoryActivity) getParent())
+ .removeParentChildRelationShips();
mAdapter.refreshData();
return true;
@@ -275,137 +285,22 @@
return false;
}
- // This Activity is generally a sub-Activity of CombinedHistoryActivity. In
- // that situation, we need to pass our result code up to our parent.
- // However, if someone calls this Activity directly, then this has no
- // parent, and it needs to set it on itself.
+ // This Activity is always a sub-Activity of
+ // CombinedBookmarkHistoryActivity. Therefore, we need to pass our
+ // result code up to our parent.
private void setResultToParent(int resultCode, Intent data) {
- Activity a = getParent() == null ? this : getParent();
- a.setResult(resultCode, data);
+ ((CombinedBookmarkHistoryActivity) getParent()).setResultFromChild(
+ resultCode, data);
}
- private class ChangeObserver extends ContentObserver {
- public ChangeObserver() {
- super(new Handler());
- }
-
- @Override
- public boolean deliverSelfNotifications() {
- return true;
- }
-
- @Override
- public void onChange(boolean selfChange) {
- mAdapter.refreshData();
- }
- }
-
- private class HistoryAdapter implements ExpandableListAdapter {
-
- // Array for each of our bins. Each entry represents how many items are
- // in that bin.
- private int mItemMap[];
- // This is our GroupCount. We will have at most DateSorter.DAY_COUNT
- // bins, less if the user has no items in one or more bins.
- private int mNumberOfBins;
- private Vector<DataSetObserver> mObservers;
- private Cursor mCursor;
-
- HistoryAdapter() {
- mObservers = new Vector<DataSetObserver>();
+ private class HistoryAdapter extends DateSortedExpandableListAdapter {
+ HistoryAdapter(Context context, Cursor cursor, int index) {
+ super(context, cursor, index);
- final String whereClause = Browser.BookmarkColumns.VISITS + " > 0"
- // In AddBookmarkPage, where we save new bookmarks, we add
- // three visits to newly created bookmarks, so that
- // bookmarks that have not been visited will show up in the
- // most visited, and higher in the goto search box.
- // However, this puts the site in the history, unless we
- // ignore sites with a DATE of 0, which the next line does.
- + " AND " + Browser.BookmarkColumns.DATE + " > 0";
- final String orderBy = Browser.BookmarkColumns.DATE + " DESC";
-
- mCursor = managedQuery(
- Browser.BOOKMARKS_URI,
- Browser.HISTORY_PROJECTION,
- whereClause, null, orderBy);
-
- buildMap();
- mCursor.registerContentObserver(new ChangeObserver());
- }
-
- void refreshData() {
- if (mCursor.isClosed()) {
- return;
- }
- mCursor.requery();
- buildMap();
- for (DataSetObserver o : mObservers) {
- o.onChanged();
- }
- }
-
- private void buildMap() {
- // The cursor is sorted by date
- // The ItemMap will store the number of items in each bin.
- int array[] = new int[DateSorter.DAY_COUNT];
- // Zero out the array.
- for (int j = 0; j < DateSorter.DAY_COUNT; j++) {
- array[j] = 0;
- }
- mNumberOfBins = 0;
- int dateIndex = -1;
- if (mCursor.moveToFirst() && mCursor.getCount() > 0) {
- while (!mCursor.isAfterLast()) {
- long date = mCursor.getLong(Browser.HISTORY_PROJECTION_DATE_INDEX);
- int index = mDateSorter.getIndex(date);
- if (index > dateIndex) {
- mNumberOfBins++;
- if (index == DateSorter.DAY_COUNT - 1) {
- // We are already in the last bin, so it will
- // include all the remaining items
- array[index] = mCursor.getCount()
- - mCursor.getPosition();
- break;
- }
- dateIndex = index;
- }
- array[dateIndex]++;
- mCursor.moveToNext();
- }
- }
- mItemMap = array;
- }
-
- // This translates from a group position in the Adapter to a position in
- // our array. This is necessary because some positions in the array
- // have no history items, so we simply do not present those positions
- // to the Adapter.
- private int groupPositionToArrayPosition(int groupPosition) {
- if (groupPosition < 0 || groupPosition >= DateSorter.DAY_COUNT) {
- throw new AssertionError("group position out of range");
- }
- if (DateSorter.DAY_COUNT == mNumberOfBins || 0 == mNumberOfBins) {
- // In the first case, we have exactly the same number of bins
- // as our maximum possible, so there is no need to do a
- // conversion
- // The second statement is in case this method gets called when
- // the array is empty, in which case the provided groupPosition
- // will do fine.
- return groupPosition;
- }
- int arrayPosition = -1;
- while (groupPosition > -1) {
- arrayPosition++;
- if (mItemMap[arrayPosition] != 0) {
- groupPosition--;
- }
- }
- return arrayPosition;
}
public View getChildView(int groupPosition, int childPosition, boolean isLastChild,
View convertView, ViewGroup parent) {
- groupPosition = groupPositionToArrayPosition(groupPosition);
HistoryItem item;
if (null == convertView || !(convertView instanceof HistoryItem)) {
item = new HistoryItem(BrowserHistoryPage.this);
@@ -418,15 +313,14 @@
} else {
item = (HistoryItem) convertView;
}
- int index = childPosition;
- for (int i = 0; i < groupPosition; i++) {
- index += mItemMap[i];
+ // Bail early if the Cursor is closed.
+ if (!moveCursorToChildPosition(groupPosition, childPosition)) {
+ return item;
}
- mCursor.moveToPosition(index);
- item.setName(mCursor.getString(Browser.HISTORY_PROJECTION_TITLE_INDEX));
- String url = mCursor.getString(Browser.HISTORY_PROJECTION_URL_INDEX);
+ item.setName(getString(Browser.HISTORY_PROJECTION_TITLE_INDEX));
+ String url = getString(Browser.HISTORY_PROJECTION_URL_INDEX);
item.setUrl(url);
- byte[] data = mCursor.getBlob(Browser.HISTORY_PROJECTION_FAVICON_INDEX);
+ byte[] data = getBlob(Browser.HISTORY_PROJECTION_FAVICON_INDEX);
if (data != null) {
item.setFavicon(BitmapFactory.decodeByteArray(data, 0,
data.length));
@@ -435,87 +329,8 @@
.getIconListenerSet().getFavicon(url));
}
item.setIsBookmark(1 ==
- mCursor.getInt(Browser.HISTORY_PROJECTION_BOOKMARK_INDEX));
+ getInt(Browser.HISTORY_PROJECTION_BOOKMARK_INDEX));
return item;
}
-
- public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {
- groupPosition = groupPositionToArrayPosition(groupPosition);
- TextView item;
- if (null == convertView || !(convertView instanceof TextView)) {
- LayoutInflater factory =
- LayoutInflater.from(BrowserHistoryPage.this);
- item = (TextView)
- factory.inflate(R.layout.history_header, null);
- } else {
- item = (TextView) convertView;
- }
- item.setText(mDateSorter.getLabel(groupPosition));
- return item;
- }
-
- public boolean areAllItemsEnabled() {
- return true;
- }
-
- public boolean isChildSelectable(int groupPosition, int childPosition) {
- return true;
- }
-
- public int getGroupCount() {
- return mNumberOfBins;
- }
-
- public int getChildrenCount(int groupPosition) {
- return mItemMap[groupPositionToArrayPosition(groupPosition)];
- }
-
- public Object getGroup(int groupPosition) {
- return null;
- }
-
- public Object getChild(int groupPosition, int childPosition) {
- return null;
- }
-
- public long getGroupId(int groupPosition) {
- return groupPosition;
- }
-
- public long getChildId(int groupPosition, int childPosition) {
- return (childPosition << 3) + groupPosition;
- }
-
- public boolean hasStableIds() {
- return true;
- }
-
- public void registerDataSetObserver(DataSetObserver observer) {
- mObservers.add(observer);
- }
-
- public void unregisterDataSetObserver(DataSetObserver observer) {
- mObservers.remove(observer);
- }
-
- public void onGroupExpanded(int groupPosition) {
-
- }
-
- public void onGroupCollapsed(int groupPosition) {
-
- }
-
- public long getCombinedChildId(long groupId, long childId) {
- return childId;
- }
-
- public long getCombinedGroupId(long groupId) {
- return groupId;
- }
-
- public boolean isEmpty() {
- return mCursor.getCount() == 0;
- }
}
}
diff --git a/src/com/android/browser/BrowserHomepagePreference.java b/src/com/android/browser/BrowserHomepagePreference.java
index be96db3..4f18bd5 100644
--- a/src/com/android/browser/BrowserHomepagePreference.java
+++ b/src/com/android/browser/BrowserHomepagePreference.java
@@ -18,10 +18,20 @@
import android.app.AlertDialog;
import android.content.Context;
+import android.os.Bundle;
import android.preference.EditTextPreference;
+import android.widget.Button;
+import android.widget.EditText;
+import android.widget.LinearLayout;
+import android.view.Gravity;
+import android.view.View;
+import android.view.ViewGroup;
+import android.view.Window;
+import android.view.WindowManager;
import android.util.AttributeSet;
public class BrowserHomepagePreference extends EditTextPreference {
+ private String mCurrentPage;
public BrowserHomepagePreference(Context context, AttributeSet attrs,
int defStyle) {
@@ -37,6 +47,27 @@
}
@Override
+ protected void onAddEditTextToDialogView(View dialogView,
+ EditText editText) {
+ super.onAddEditTextToDialogView(dialogView, editText);
+ // Now the EditText has a parent. Add a button to set to the current
+ // page.
+ ViewGroup parent = (ViewGroup) editText.getParent();
+ Button button = new Button(getContext());
+ button.setText(R.string.pref_use_current);
+ button.setOnClickListener(new View.OnClickListener() {
+ public void onClick(View v) {
+ getEditText().setText(mCurrentPage);
+ }
+ });
+ if (parent instanceof LinearLayout) {
+ ((LinearLayout) parent).setGravity(Gravity.CENTER_HORIZONTAL);
+ }
+ parent.addView(button, ViewGroup.LayoutParams.WRAP_CONTENT,
+ ViewGroup.LayoutParams.WRAP_CONTENT);
+ }
+
+ @Override
protected void onDialogClosed(boolean positiveResult) {
if (positiveResult) {
String url = getEditText().getText().toString();
@@ -60,4 +91,26 @@
}
super.onDialogClosed(positiveResult);
}
+
+ /**
+ * Set the current page of the browser.
+ * @param currentPage This String will replace the text in the EditText
+ * when the user clicks the "Use current page" button.
+ */
+ /* package */ void setCurrentPage(String currentPage) {
+ mCurrentPage = currentPage;
+ }
+
+ @Override
+ protected void showDialog(Bundle state) {
+ super.showDialog(state);
+ // The dialog has its width set to wrap_content. Change it to
+ // match_parent so there is more room to type in a url.
+ Window window = getDialog().getWindow();
+ View decorView = window.getDecorView();
+ WindowManager.LayoutParams params
+ = (WindowManager.LayoutParams) decorView.getLayoutParams();
+ params.width = ViewGroup.LayoutParams.MATCH_PARENT;
+ window.getWindowManager().updateViewLayout(decorView, params);
+ }
}
diff --git a/src/com/android/browser/BrowserPreferencesPage.java b/src/com/android/browser/BrowserPreferencesPage.java
index 1370722..6426b99 100644
--- a/src/com/android/browser/BrowserPreferencesPage.java
+++ b/src/com/android/browser/BrowserPreferencesPage.java
@@ -39,6 +39,7 @@
implements Preference.OnPreferenceChangeListener {
private String LOGTAG = "BrowserPreferencesPage";
+ /* package */ static final String CURRENT_PAGE = "currentPage";
@Override
protected void onCreate(Bundle savedInstanceState) {
@@ -51,6 +52,8 @@
e.setOnPreferenceChangeListener(this);
e.setSummary(getPreferenceScreen().getSharedPreferences()
.getString(BrowserSettings.PREF_HOMEPAGE, null));
+ ((BrowserHomepagePreference) e).setCurrentPage(
+ getIntent().getStringExtra(CURRENT_PAGE));
e = findPreference(BrowserSettings.PREF_EXTRAS_RESET_DEFAULTS);
e.setOnPreferenceChangeListener(this);
@@ -70,6 +73,9 @@
e = findPreference(BrowserSettings.PREF_DEFAULT_TEXT_ENCODING);
e.setOnPreferenceChangeListener(this);
+ e = findPreference(BrowserSettings.PREF_CLEAR_HISTORY);
+ e.setOnPreferenceChangeListener(this);
+
if (BrowserSettings.getInstance().showDebugSettings()) {
addPreferencesFromResource(R.xml.debug_preferences);
}
@@ -156,6 +162,13 @@
BrowserSettings.PREF_DEFAULT_TEXT_ENCODING)) {
pref.setSummary((String) objValue);
return true;
+ } else if (pref.getKey().equals(BrowserSettings.PREF_CLEAR_HISTORY)
+ && ((Boolean) objValue).booleanValue() == true) {
+ // Need to tell the browser to remove the parent/child relationship
+ // between tabs
+ setResult(RESULT_OK, (new Intent()).putExtra(Intent.EXTRA_TEXT,
+ pref.getKey()));
+ return true;
}
return false;
diff --git a/src/com/android/browser/BrowserProvider.java b/src/com/android/browser/BrowserProvider.java
index 8e0929b..6755268 100644
--- a/src/com/android/browser/BrowserProvider.java
+++ b/src/com/android/browser/BrowserProvider.java
@@ -16,9 +16,8 @@
package com.android.browser;
-import com.google.android.providers.GoogleSettings.Partner;
-
import android.app.SearchManager;
+import android.app.SearchableInfo;
import android.backup.BackupManager;
import android.content.ComponentName;
import android.content.ContentProvider;
@@ -44,12 +43,14 @@
import android.provider.Browser;
import android.provider.Settings;
import android.provider.Browser.BookmarkColumns;
-import android.server.search.SearchableInfo;
import android.text.TextUtils;
-import android.text.util.Regex;
import android.util.Log;
import android.util.TypedValue;
+import com.android.common.Patterns;
+
+import com.google.android.providers.GoogleSettings.Partner;
+
import java.io.File;
import java.io.FilenameFilter;
import java.util.Date;
@@ -72,11 +73,11 @@
"bookmarks", "searches"
};
private static final String[] SUGGEST_PROJECTION = new String[] {
- "_id", "url", "title", "bookmark"
+ "_id", "url", "title", "bookmark", "user_entered"
};
private static final String SUGGEST_SELECTION =
- "url LIKE ? OR url LIKE ? OR url LIKE ? OR url LIKE ?"
- + " OR title LIKE ?";
+ "(url LIKE ? OR url LIKE ? OR url LIKE ? OR url LIKE ?"
+ + " OR title LIKE ?) AND (bookmark = 1 OR user_entered = 1)";
private String[] SUGGEST_ARGS = new String[5];
// shared suggestion array index, make sure to match COLUMNS
@@ -157,7 +158,8 @@
// 19 -> 20 Added thumbnail
// 20 -> 21 Added touch_icon
// 21 -> 22 Remove "clientid"
- private static final int DATABASE_VERSION = 22;
+ // 22 -> 23 Added user_entered
+ private static final int DATABASE_VERSION = 23;
// Regular expression which matches http://, followed by some stuff, followed by
// optionally a trailing slash, all matched as separate groups.
@@ -231,7 +233,8 @@
"bookmark INTEGER," +
"favicon BLOB DEFAULT NULL," +
"thumbnail BLOB DEFAULT NULL," +
- "touch_icon BLOB DEFAULT NULL" +
+ "touch_icon BLOB DEFAULT NULL," +
+ "user_entered INTEGER" +
");");
final CharSequence[] bookmarks = mContext.getResources()
@@ -271,6 +274,9 @@
if (oldVersion < 22) {
db.execSQL("DELETE FROM bookmarks WHERE (bookmark = 0 AND url LIKE \"%.google.%client=ms-%\")");
removeGears();
+ }
+ if (oldVersion < 23) {
+ db.execSQL("ALTER TABLE bookmarks ADD COLUMN user_entered INTEGER;");
} else {
db.execSQL("DROP TABLE IF EXISTS bookmarks");
db.execSQL("DROP TABLE IF EXISTS searches");
@@ -749,7 +755,7 @@
ORDER_BY, MAX_SUGGESTION_LONG_ENTRIES_STRING);
if (match == URI_MATCH_BOOKMARKS_SUGGEST
- || Regex.WEB_URL_PATTERN.matcher(selectionArgs[0]).matches()) {
+ || Patterns.WEB_URL.matcher(selectionArgs[0]).matches()) {
return new MySuggestionCursor(c, null, "");
} else {
// get Google suggest if there is still space in the list
diff --git a/src/com/android/browser/BrowserSettings.java b/src/com/android/browser/BrowserSettings.java
index 9c5af34..941b28b 100644
--- a/src/com/android/browser/BrowserSettings.java
+++ b/src/com/android/browser/BrowserSettings.java
@@ -19,6 +19,7 @@
import com.google.android.providers.GoogleSettings.Partner;
+import android.app.ActivityManager;
import android.content.ContentResolver;
import android.content.Context;
import android.content.pm.ActivityInfo;
@@ -106,9 +107,6 @@
// The setting can be then toggled from the settings menu.
private boolean showConsole = true;
- // Browser only settings
- private boolean doFlick = false;
-
// Private preconfigured values
private static int minimumFontSize = 8;
private static int minimumLogicalFontSize = 8;
@@ -118,6 +116,7 @@
WebSettings.TextSize.NORMAL;
private static WebSettings.ZoomDensity zoomDensity =
WebSettings.ZoomDensity.MEDIUM;
+ private static int pageCacheCapacity;
// Preference keys that are used outside this class
public final static String PREF_CLEAR_CACHE = "privacy_clear_cache";
@@ -204,6 +203,7 @@
s.setSaveFormData(b.saveFormData);
s.setSavePassword(b.rememberPasswords);
s.setLoadWithOverviewMode(b.loadsPageInOverviewMode);
+ s.setPageCacheCapacity(pageCacheCapacity);
// WebView inside Browser doesn't want initial focus to be set.
s.setNeedInitialFocus(false);
@@ -256,6 +256,17 @@
homeUrl = getFactoryResetHomeUrl(ctx);
+ // the cost of one cached page is ~3M (measured using nytimes.com). For
+ // low end devices, we only cache one page. For high end devices, we try
+ // to cache more pages, currently choose 5.
+ ActivityManager am = (ActivityManager) ctx
+ .getSystemService(Context.ACTIVITY_SERVICE);
+ if (am.getMemoryClass() > 16) {
+ pageCacheCapacity = 5;
+ } else {
+ pageCacheCapacity = 1;
+ }
+
// Load the defaults from the xml
// This call is TOO SLOW, need to manually keep the defaults
// in sync
@@ -336,7 +347,6 @@
tracing = p.getBoolean("enable_tracing", tracing);
lightTouch = p.getBoolean("enable_light_touch", lightTouch);
navDump = p.getBoolean("enable_nav_dump", navDump);
- doFlick = p.getBoolean("enable_flick", doFlick);
userAgent = Integer.parseInt(p.getString("user_agent", "0"));
}
// JS flags is loaded from DB even if showDebugSettings is false,
@@ -422,10 +432,6 @@
return navDump;
}
- public boolean doFlick() {
- return doFlick;
- }
-
public boolean showDebugSettings() {
return showDebugSettings;
}
diff --git a/src/com/android/browser/CombinedBookmarkHistoryActivity.java b/src/com/android/browser/CombinedBookmarkHistoryActivity.java
index a611d79..af968ab 100644
--- a/src/com/android/browser/CombinedBookmarkHistoryActivity.java
+++ b/src/com/android/browser/CombinedBookmarkHistoryActivity.java
@@ -34,6 +34,21 @@
public class CombinedBookmarkHistoryActivity extends TabActivity
implements TabHost.OnTabChangeListener {
+ /**
+ * Used to inform BrowserActivity to remove the parent/child relationships
+ * from all the tabs.
+ */
+ private String mExtraData;
+ /**
+ * Intent to be passed to calling Activity when finished. Keep a pointer to
+ * it locally so mExtraData can be added.
+ */
+ private Intent mResultData;
+ /**
+ * Result code to pass back to calling Activity when finished.
+ */
+ private int mResultCode;
+
/* package */ static String BOOKMARKS_TAB = "bookmark";
/* package */ static String VISITED_TAB = "visited";
/* package */ static String HISTORY_TAB = "history";
@@ -132,5 +147,33 @@
}
}
-
+ /**
+ * Store extra data in the Intent to return to the calling Activity to tell
+ * it to clear the parent/child relationships from all tabs.
+ */
+ /* package */ void removeParentChildRelationShips() {
+ mExtraData = BrowserSettings.PREF_CLEAR_HISTORY;
+ }
+
+ /**
+ * Custom setResult() method so that the Intent can have extra data attached
+ * if necessary.
+ * @param resultCode Uses same codes as Activity.setResult
+ * @param data Intent returned to onActivityResult.
+ */
+ /* package */ void setResultFromChild(int resultCode, Intent data) {
+ mResultCode = resultCode;
+ mResultData = data;
+ }
+
+ @Override
+ public void finish() {
+ if (mExtraData != null) {
+ mResultCode = RESULT_OK;
+ if (mResultData == null) mResultData = new Intent();
+ mResultData.putExtra(Intent.EXTRA_TEXT, mExtraData);
+ }
+ setResult(mResultCode, mResultData);
+ super.finish();
+ }
}
diff --git a/src/com/android/browser/DateSortedExpandableListAdapter.java b/src/com/android/browser/DateSortedExpandableListAdapter.java
new file mode 100644
index 0000000..1d04493
--- /dev/null
+++ b/src/com/android/browser/DateSortedExpandableListAdapter.java
@@ -0,0 +1,347 @@
+/*
+ * 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.content.Context;
+import android.database.ContentObserver;
+import android.database.Cursor;
+import android.database.DataSetObserver;
+import android.os.Handler;
+import android.provider.BaseColumns;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.webkit.DateSorter;
+import android.widget.ExpandableListAdapter;
+import android.widget.ExpandableListView;
+import android.widget.TextView;
+
+import java.util.Vector;
+
+/**
+ * ExpandableListAdapter which separates data into categories based on date.
+ * Used for History and Downloads.
+ */
+public class DateSortedExpandableListAdapter implements ExpandableListAdapter {
+ // Array for each of our bins. Each entry represents how many items are
+ // in that bin.
+ private int mItemMap[];
+ // This is our GroupCount. We will have at most DateSorter.DAY_COUNT
+ // bins, less if the user has no items in one or more bins.
+ private int mNumberOfBins;
+ private Vector<DataSetObserver> mObservers;
+ private Cursor mCursor;
+ private DateSorter mDateSorter;
+ private int mDateIndex;
+ private int mIdIndex;
+ private Context mContext;
+
+ private class ChangeObserver extends ContentObserver {
+ public ChangeObserver() {
+ super(new Handler());
+ }
+
+ @Override
+ public boolean deliverSelfNotifications() {
+ return true;
+ }
+
+ @Override
+ public void onChange(boolean selfChange) {
+ refreshData();
+ }
+ }
+
+ public DateSortedExpandableListAdapter(Context context, Cursor cursor,
+ int dateIndex) {
+ mContext = context;
+ mDateSorter = new DateSorter(context);
+ mObservers = new Vector<DataSetObserver>();
+ mCursor = cursor;
+ mIdIndex = cursor.getColumnIndexOrThrow(BaseColumns._ID);
+ cursor.registerContentObserver(new ChangeObserver());
+ mDateIndex = dateIndex;
+ buildMap();
+ }
+
+ /**
+ * Set up the bins for determining which items belong to which groups.
+ */
+ private void buildMap() {
+ // The cursor is sorted by date
+ // The ItemMap will store the number of items in each bin.
+ int array[] = new int[DateSorter.DAY_COUNT];
+ // Zero out the array.
+ for (int j = 0; j < DateSorter.DAY_COUNT; j++) {
+ array[j] = 0;
+ }
+ mNumberOfBins = 0;
+ int dateIndex = -1;
+ if (mCursor.moveToFirst() && mCursor.getCount() > 0) {
+ while (!mCursor.isAfterLast()) {
+ long date = getLong(mDateIndex);
+ int index = mDateSorter.getIndex(date);
+ if (index > dateIndex) {
+ mNumberOfBins++;
+ if (index == DateSorter.DAY_COUNT - 1) {
+ // We are already in the last bin, so it will
+ // include all the remaining items
+ array[index] = mCursor.getCount()
+ - mCursor.getPosition();
+ break;
+ }
+ dateIndex = index;
+ }
+ array[dateIndex]++;
+ mCursor.moveToNext();
+ }
+ }
+ mItemMap = array;
+ }
+
+ /**
+ * Get the byte array at cursorIndex from the Cursor. Assumes the Cursor
+ * has already been moved to the correct position. Along with
+ * {@link #getInt} and {@link #getString}, these are provided so the client
+ * does not need to access the Cursor directly
+ * @param cursorIndex Index to query the Cursor.
+ * @return corresponding byte array from the Cursor.
+ */
+ /* package */ byte[] getBlob(int cursorIndex) {
+ return mCursor.getBlob(cursorIndex);
+ }
+
+ /* package */ Context getContext() {
+ return mContext;
+ }
+
+ /**
+ * Get the integer at cursorIndex from the Cursor. Assumes the Cursor has
+ * already been moved to the correct position. Along with
+ * {@link #getBlob} and {@link #getString}, these are provided so the client
+ * does not need to access the Cursor directly
+ * @param cursorIndex Index to query the Cursor.
+ * @return corresponding integer from the Cursor.
+ */
+ /* package */ int getInt(int cursorIndex) {
+ return mCursor.getInt(cursorIndex);
+ }
+
+ /**
+ * Get the long at cursorIndex from the Cursor. Assumes the Cursor has
+ * already been moved to the correct position.
+ */
+ /* package */ long getLong(int cursorIndex) {
+ return mCursor.getLong(cursorIndex);
+ }
+
+ /**
+ * Get the String at cursorIndex from the Cursor. Assumes the Cursor has
+ * already been moved to the correct position. Along with
+ * {@link #getInt} and {@link #getInt}, these are provided so the client
+ * does not need to access the Cursor directly
+ * @param cursorIndex Index to query the Cursor.
+ * @return corresponding String from the Cursor.
+ */
+ /* package */ String getString(int cursorIndex) {
+ return mCursor.getString(cursorIndex);
+ }
+
+ /**
+ * Determine which group an item belongs to.
+ * @param childId ID of the child view in question.
+ * @return int Group position of the containing group.
+ /* package */ int groupFromChildId(long childId) {
+ int group = -1;
+ for (mCursor.moveToFirst(); !mCursor.isAfterLast();
+ mCursor.moveToNext()) {
+ if (getLong(mIdIndex) == childId) {
+ int bin = mDateSorter.getIndex(getLong(mDateIndex));
+ // bin is the same as the group if the number of bins is the
+ // same as DateSorter
+ if (mDateSorter.DAY_COUNT == mNumberOfBins) return bin;
+ // There are some empty bins. Find the corresponding group.
+ group = 0;
+ for (int i = 0; i < bin; i++) {
+ if (mItemMap[i] != 0) group++;
+ }
+ break;
+ }
+ }
+ return group;
+ }
+
+ /**
+ * Translates from a group position in the ExpandableList to a bin. This is
+ * necessary because some groups have no history items, so we do not include
+ * those in the ExpandableList.
+ * @param groupPosition Position in the ExpandableList's set of groups
+ * @return The corresponding bin that holds that group.
+ */
+ private int groupPositionToBin(int groupPosition) {
+ if (groupPosition < 0 || groupPosition >= DateSorter.DAY_COUNT) {
+ throw new AssertionError("group position out of range");
+ }
+ if (DateSorter.DAY_COUNT == mNumberOfBins || 0 == mNumberOfBins) {
+ // In the first case, we have exactly the same number of bins
+ // as our maximum possible, so there is no need to do a
+ // conversion
+ // The second statement is in case this method gets called when
+ // the array is empty, in which case the provided groupPosition
+ // will do fine.
+ return groupPosition;
+ }
+ int arrayPosition = -1;
+ while (groupPosition > -1) {
+ arrayPosition++;
+ if (mItemMap[arrayPosition] != 0) {
+ groupPosition--;
+ }
+ }
+ return arrayPosition;
+ }
+
+ /**
+ * Move the cursor to the position indicated.
+ * @param packedPosition Position in packed position representation.
+ * @return True on success, false otherwise.
+ */
+ boolean moveCursorToPackedChildPosition(long packedPosition) {
+ if (ExpandableListView.getPackedPositionType(packedPosition) !=
+ ExpandableListView.PACKED_POSITION_TYPE_CHILD) {
+ return false;
+ }
+ int groupPosition = ExpandableListView.getPackedPositionGroup(
+ packedPosition);
+ int childPosition = ExpandableListView.getPackedPositionChild(
+ packedPosition);
+ return moveCursorToChildPosition(groupPosition, childPosition);
+ }
+
+ /**
+ * Move the cursor the the position indicated.
+ * @param groupPosition Index of the group containing the desired item.
+ * @param childPosition Index of the item within the specified group.
+ * @return boolean False if the cursor is closed, so the Cursor was not
+ * moved. True on success.
+ */
+ /* package */ boolean moveCursorToChildPosition(int groupPosition,
+ int childPosition) {
+ if (mCursor.isClosed()) return false;
+ groupPosition = groupPositionToBin(groupPosition);
+ int index = childPosition;
+ for (int i = 0; i < groupPosition; i++) {
+ index += mItemMap[i];
+ }
+ return mCursor.moveToPosition(index);
+ }
+
+ /* package */ void refreshData() {
+ if (mCursor.isClosed()) {
+ return;
+ }
+ mCursor.requery();
+ buildMap();
+ for (DataSetObserver o : mObservers) {
+ o.onChanged();
+ }
+ }
+
+ public View getGroupView(int groupPosition, boolean isExpanded,
+ View convertView, ViewGroup parent) {
+ TextView item;
+ if (null == convertView || !(convertView instanceof TextView)) {
+ LayoutInflater factory = LayoutInflater.from(mContext);
+ item = (TextView) factory.inflate(R.layout.history_header, null);
+ } else {
+ item = (TextView) convertView;
+ }
+ String label = mDateSorter.getLabel(groupPositionToBin(groupPosition));
+ item.setText(label);
+ return item;
+ }
+
+ public View getChildView(int groupPosition, int childPosition,
+ boolean isLastChild, View convertView, ViewGroup parent) {
+ return null;
+ }
+
+ public boolean areAllItemsEnabled() {
+ return true;
+ }
+
+ public boolean isChildSelectable(int groupPosition, int childPosition) {
+ return true;
+ }
+
+ public int getGroupCount() {
+ return mNumberOfBins;
+ }
+
+ public int getChildrenCount(int groupPosition) {
+ return mItemMap[groupPositionToBin(groupPosition)];
+ }
+
+ public Object getGroup(int groupPosition) {
+ return null;
+ }
+
+ public Object getChild(int groupPosition, int childPosition) {
+ return null;
+ }
+
+ public long getGroupId(int groupPosition) {
+ return groupPosition;
+ }
+
+ public long getChildId(int groupPosition, int childPosition) {
+ if (moveCursorToChildPosition(groupPosition, childPosition)) {
+ return getLong(mIdIndex);
+ }
+ return 0;
+ }
+
+ public boolean hasStableIds() {
+ return true;
+ }
+
+ public void registerDataSetObserver(DataSetObserver observer) {
+ mObservers.add(observer);
+ }
+
+ public void unregisterDataSetObserver(DataSetObserver observer) {
+ mObservers.remove(observer);
+ }
+
+ public void onGroupExpanded(int groupPosition) {
+ }
+
+ public void onGroupCollapsed(int groupPosition) {
+ }
+
+ public long getCombinedChildId(long groupId, long childId) {
+ return childId;
+ }
+
+ public long getCombinedGroupId(long groupId) {
+ return groupId;
+ }
+
+ public boolean isEmpty() {
+ return mCursor.isClosed() || mCursor.getCount() == 0;
+ }
+}
diff --git a/src/com/android/browser/DownloadTouchIcon.java b/src/com/android/browser/DownloadTouchIcon.java
index 07d2d3a..22ed73c 100644
--- a/src/com/android/browser/DownloadTouchIcon.java
+++ b/src/com/android/browser/DownloadTouchIcon.java
@@ -22,11 +22,12 @@
import android.database.Cursor;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
-import android.net.http.AndroidHttpClient;
import android.os.AsyncTask;
import android.provider.Browser;
import android.webkit.WebView;
+import com.android.common.AndroidHttpClient;
+
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpGet;
@@ -36,17 +37,16 @@
import java.io.IOException;
import java.io.InputStream;
-class DownloadTouchIcon extends AsyncTask<String, Void, Bitmap> {
+class DownloadTouchIcon extends AsyncTask<String, Void, Void> {
private final ContentResolver mContentResolver;
private final Cursor mCursor;
private final String mOriginalUrl;
private final String mUrl;
private final String mUserAgent;
- /* package */ BrowserActivity mActivity;
+ /* package */ Tab mTab;
- public DownloadTouchIcon(BrowserActivity activity, ContentResolver cr,
- Cursor c, WebView view) {
- mActivity = activity;
+ public DownloadTouchIcon(Tab tab, ContentResolver cr, Cursor c, WebView view) {
+ mTab = tab;
mContentResolver = cr;
mCursor = c;
// Store these in case they change.
@@ -56,7 +56,7 @@
}
public DownloadTouchIcon(ContentResolver cr, Cursor c, String url) {
- mActivity = null;
+ mTab = null;
mContentResolver = cr;
mCursor = c;
mOriginalUrl = null;
@@ -65,7 +65,7 @@
}
@Override
- public Bitmap doInBackground(String... values) {
+ public Void doInBackground(String... values) {
String url = values[0];
AndroidHttpClient client = AndroidHttpClient.newInstance(
@@ -85,7 +85,7 @@
if (content != null) {
Bitmap icon = BitmapFactory.decodeStream(
content, null, null);
- return icon;
+ storeIcon(icon);
}
}
}
@@ -106,12 +106,11 @@
}
}
- @Override
- public void onPostExecute(Bitmap icon) {
+ private void storeIcon(Bitmap icon) {
// Do this first in case the download failed.
- if (mActivity != null) {
+ if (mTab != null) {
// Remove the touch icon loader from the BrowserActivity.
- mActivity.mTouchIconLoader = null;
+ mTab.mTouchIconLoader = null;
}
if (icon == null || mCursor == null || isCancelled()) {
diff --git a/src/com/android/browser/EventLogTags.logtags b/src/com/android/browser/EventLogTags.logtags
new file mode 100644
index 0000000..c9bb5b0
--- /dev/null
+++ b/src/com/android/browser/EventLogTags.logtags
@@ -0,0 +1,14 @@
+# See system/core/logcat/event.logtags for a description of the format of this file.
+
+option java_package com.android.browser
+
+# This event is logged when a user adds a new bookmark. This could just be a boolean,
+# but if lots of users add the same bookmark it could be a default bookmark on the browser
+70103 browser_bookmark_added (url|3)
+
+# This event is logged after a page has finished loading. It is sending back the page url,
+# and how long it took to load the page. Could maybe also tell the kind of connection (2g, 3g, WiFi)?
+70104 browser_page_loaded (url|3), (time|2|3)
+
+# This event is logged when the user navigates to a new page, sending the time spent on the current page
+70105 browser_timeonpage (url|3), (time|2|3)
diff --git a/src/com/android/browser/FetchUrlMimeType.java b/src/com/android/browser/FetchUrlMimeType.java
index 0081d32..9e34736 100644
--- a/src/com/android/browser/FetchUrlMimeType.java
+++ b/src/com/android/browser/FetchUrlMimeType.java
@@ -18,7 +18,7 @@
import android.content.ContentValues;
import android.net.Uri;
-import android.net.http.AndroidHttpClient;
+import com.android.common.AndroidHttpClient;
import org.apache.http.HttpResponse;
import org.apache.http.Header;
@@ -58,7 +58,7 @@
mValues = values[0];
// Check to make sure we have a URI to download
- String uri = mValues.getAsString(Downloads.COLUMN_URI);
+ String uri = mValues.getAsString(Downloads.Impl.COLUMN_URI);
if (uri == null || uri.length() == 0) {
return null;
}
@@ -66,15 +66,15 @@
// User agent is likely to be null, though the AndroidHttpClient
// seems ok with that.
AndroidHttpClient client = AndroidHttpClient.newInstance(
- mValues.getAsString(Downloads.COLUMN_USER_AGENT));
+ mValues.getAsString(Downloads.Impl.COLUMN_USER_AGENT));
HttpHead request = new HttpHead(uri);
- String cookie = mValues.getAsString(Downloads.COLUMN_COOKIE_DATA);
+ String cookie = mValues.getAsString(Downloads.Impl.COLUMN_COOKIE_DATA);
if (cookie != null && cookie.length() > 0) {
request.addHeader("Cookie", cookie);
}
- String referer = mValues.getAsString(Downloads.COLUMN_REFERER);
+ String referer = mValues.getAsString(Downloads.Impl.COLUMN_REFERER);
if (referer != null && referer.length() > 0) {
request.addHeader("Referer", referer);
}
@@ -110,25 +110,24 @@
@Override
public void onPostExecute(String mimeType) {
if (mimeType != null) {
- String url = mValues.getAsString(Downloads.COLUMN_URI);
+ String url = mValues.getAsString(Downloads.Impl.COLUMN_URI);
if (mimeType.equalsIgnoreCase("text/plain") ||
mimeType.equalsIgnoreCase("application/octet-stream")) {
String newMimeType =
MimeTypeMap.getSingleton().getMimeTypeFromExtension(
MimeTypeMap.getFileExtensionFromUrl(url));
if (newMimeType != null) {
- mValues.put(Downloads.COLUMN_MIME_TYPE, newMimeType);
+ mValues.put(Downloads.Impl.COLUMN_MIME_TYPE, newMimeType);
}
}
String filename = URLUtil.guessFileName(url,
null, mimeType);
- mValues.put(Downloads.COLUMN_FILE_NAME_HINT, filename);
+ mValues.put(Downloads.Impl.COLUMN_FILE_NAME_HINT, filename);
}
// Start the download
final Uri contentUri =
- mActivity.getContentResolver().insert(Downloads.CONTENT_URI, mValues);
- mActivity.viewDownloads(contentUri);
+ mActivity.getContentResolver().insert(Downloads.Impl.CONTENT_URI, mValues);
}
}
diff --git a/src/com/android/browser/FindDialog.java b/src/com/android/browser/FindDialog.java
index df212d0..e8d2417 100644
--- a/src/com/android/browser/FindDialog.java
+++ b/src/com/android/browser/FindDialog.java
@@ -18,10 +18,7 @@
import android.app.Dialog;
import android.content.Context;
-import android.content.res.Configuration;
import android.os.Bundle;
-import android.os.Handler;
-import android.os.Message;
import android.text.Editable;
import android.text.Spannable;
import android.text.TextWatcher;
@@ -97,13 +94,6 @@
setCanceledOnTouchOutside(true);
}
- /* package */ void onConfigurationChanged(Configuration newConfig) {
- // FIXME: Would like to call mWebView.findAll again, so that the
- // matches would refresh, but the new picture has not yet been
- // created, so it is too soon.
- mEditText.getText().clear();
- }
-
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
@@ -113,7 +103,7 @@
setContentView(R.layout.browser_find);
- theWindow.setLayout(ViewGroup.LayoutParams.FILL_PARENT,
+ theWindow.setLayout(ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.WRAP_CONTENT);
mEditText = (EditText) findViewById(R.id.edit);
diff --git a/src/com/android/browser/GeolocationPermissionsPrompt.java b/src/com/android/browser/GeolocationPermissionsPrompt.java
index a21bc3e..982aa89 100755
--- a/src/com/android/browser/GeolocationPermissionsPrompt.java
+++ b/src/com/android/browser/GeolocationPermissionsPrompt.java
@@ -20,6 +20,7 @@
import android.graphics.drawable.Drawable;
import android.net.Uri;
import android.util.AttributeSet;
+import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.webkit.WebView;
@@ -28,6 +29,7 @@
import android.widget.CheckBox;
import android.widget.LinearLayout;
import android.widget.TextView;
+import android.widget.Toast;
public class GeolocationPermissionsPrompt extends LinearLayout {
private LinearLayout mInner;
@@ -97,8 +99,19 @@
* Handles a click on one the buttons by invoking the callback.
*/
private void handleButtonClick(boolean allow) {
- boolean remember = mRemember.isChecked();
showDialog(false);
+
+ boolean remember = mRemember.isChecked();
+ if (remember) {
+ Toast toast = Toast.makeText(
+ getContext(),
+ allow ? R.string.geolocation_permissions_prompt_toast_allowed :
+ R.string.geolocation_permissions_prompt_toast_disallowed,
+ Toast.LENGTH_LONG);
+ toast.setGravity(Gravity.BOTTOM, 0, 0);
+ toast.show();
+ }
+
mCallback.invoke(mOrigin, allow, remember);
}
diff --git a/src/com/android/browser/LogTag.java b/src/com/android/browser/LogTag.java
new file mode 100644
index 0000000..9658c6c
--- /dev/null
+++ b/src/com/android/browser/LogTag.java
@@ -0,0 +1,53 @@
+/*
+ * 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.util.Log;
+import android.util.EventLog;
+
+public class LogTag {
+
+ /**
+ * Log when the user is adding a new bookmark.
+ *
+ * @param url the url of the new bookmark.
+ */
+ public static void logBookmarkAdded(String url) {
+ EventLog.writeEvent(EventLogTags.BROWSER_BOOKMARK_ADDED, url);
+ }
+
+ /**
+ * Log when a page has finished loading with how much
+ * time the browser used to load the page.
+ *
+ * @param url the heartbeat interval used.
+ * @param duration the time the browser spent loading the page.
+ */
+ public static void logPageFinishedLoading(String url, long duration) {
+ EventLog.writeEvent(EventLogTags.BROWSER_BOOKMARK_ADDED, url);
+ }
+
+ /**
+ * log the time the user has spent on a webpage
+ *
+ * @param url the url of the page that is being logged (old page).
+ * @param duration the time spent on the webpage.
+ */
+ public static void logTimeOnPage(String url, long duration) {
+ EventLog.writeEvent(EventLogTags.BROWSER_BOOKMARK_ADDED, url);
+ }
+}
diff --git a/src/com/android/browser/MeshTracker.java b/src/com/android/browser/MeshTracker.java
index aa7099f..ec730e3 100644
--- a/src/com/android/browser/MeshTracker.java
+++ b/src/com/android/browser/MeshTracker.java
@@ -1,18 +1,4 @@
-/*
- * Copyright (C) 2009 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;
@@ -38,7 +24,7 @@
mRows = rows;
mCols = cols;
}
-
+
private void rebuildPatch() {
mPatch.setCubicBoundary(mCubics, 0, mRows, mCols);
}
@@ -78,11 +64,8 @@
// first experimental behavior
private void doit1(float dx, float dy) {
- final float scale = 0.75f; // temper how far we actually move
- dx *= scale;
- dy *= scale;
-
int index;
+
if (dx < 0) {
index = 10;
} else {
@@ -101,12 +84,8 @@
}
private void doit2(float dx, float dy) {
- final float scale = 0.35f; // temper how far we actually move
- dx *= scale;
- dy *= scale;
- final float cornerScale = 0.25f;
-
int index;
+
if (dx < 0) {
index = 4;
} else {
@@ -114,11 +93,6 @@
}
mCubics[index*2 + 0] = mOrig[index*2 + 0] + dx;
mCubics[index*2 + 2] = mOrig[index*2 + 2] + dx;
- // corners
- index -= 1;
- mCubics[index*2 + 0] = mOrig[index*2 + 0] + dx * cornerScale;
- index = (index + 3) % 12; // next corner
- mCubics[index*2 + 0] = mOrig[index*2 + 0] + dx * cornerScale;
if (dy < 0) {
index = 7;
@@ -127,11 +101,6 @@
}
mCubics[index*2 + 1] = mOrig[index*2 + 1] + dy;
mCubics[index*2 + 3] = mOrig[index*2 + 3] + dy;
- // corners
- index -= 1;
- mCubics[index*2 + 1] = mOrig[index*2 + 1] + dy * cornerScale;
- index = (index + 3) % 12; // next corner
- mCubics[index*2 + 1] = mOrig[index*2 + 1] + dy * cornerScale;
}
public void setStretch(float dx, float dy) {
@@ -156,16 +125,11 @@
private Mesh mMesh;
private Bitmap mBitmap;
private int mWhich;
- private Paint mBGPaint;
public MeshTracker(int which) {
mWhich = which;
}
- public void setBGPaint(Paint paint) {
- mBGPaint = paint;
- }
-
@Override public void onStartDrag(float x, float y) {
mMesh = new Mesh(mWhich, 16, 16);
}
@@ -185,13 +149,10 @@
}
@Override public void onDraw(Canvas canvas) {
- if (mWhich == 2) {
- if (mBGPaint != null) {
- canvas.drawPaint(mBGPaint);
- } else {
- canvas.drawColor(0xFF000000);
- }
- }
+ canvas.drawColor(0xFF000000);
+ Paint paint = new Paint();
+ paint.setAlpha(0x80);
+ canvas.drawBitmap(mBitmap, 0, 0, paint);
mMesh.draw(canvas);
}
}
diff --git a/src/com/android/browser/MostVisitedActivity.java b/src/com/android/browser/MostVisitedActivity.java
index d03c7a3..416ae8f 100644
--- a/src/com/android/browser/MostVisitedActivity.java
+++ b/src/com/android/browser/MostVisitedActivity.java
@@ -30,9 +30,7 @@
import android.webkit.WebIconDatabase.IconListener;
import android.widget.ListAdapter;
import android.widget.ListView;
-import android.widget.SimpleCursorAdapter;
import android.widget.TextView;
-import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewGroup.LayoutParams;
@@ -56,8 +54,8 @@
setListAdapter(mAdapter);
ListView list = getListView();
View v = new ViewStub(this, R.layout.empty_history);
- addContentView(v, new LayoutParams(LayoutParams.FILL_PARENT,
- LayoutParams.FILL_PARENT));
+ addContentView(v, new LayoutParams(LayoutParams.MATCH_PARENT,
+ LayoutParams.MATCH_PARENT));
list.setEmptyView(v);
}
diff --git a/src/com/android/browser/Tab.java b/src/com/android/browser/Tab.java
new file mode 100644
index 0000000..22c8286
--- /dev/null
+++ b/src/com/android/browser/Tab.java
@@ -0,0 +1,1539 @@
+/*
+ * Copyright (C) 2009 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 java.io.File;
+import java.util.LinkedList;
+import java.util.Vector;
+
+import android.app.AlertDialog;
+import android.content.ContentResolver;
+import android.content.ContentValues;
+import android.content.DialogInterface;
+import android.content.DialogInterface.OnCancelListener;
+import android.database.Cursor;
+import android.database.sqlite.SQLiteDatabase;
+import android.database.sqlite.SQLiteException;
+import android.graphics.Bitmap;
+import android.net.Uri;
+import android.net.http.SslError;
+import android.os.AsyncTask;
+import android.os.Bundle;
+import android.os.Message;
+import android.provider.Browser;
+import android.util.Log;
+import android.view.KeyEvent;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.view.View.OnClickListener;
+import android.webkit.CookieSyncManager;
+import android.webkit.GeolocationPermissions;
+import android.webkit.HttpAuthHandler;
+import android.webkit.SslErrorHandler;
+import android.webkit.URLUtil;
+import android.webkit.ValueCallback;
+import android.webkit.WebBackForwardList;
+import android.webkit.WebChromeClient;
+import android.webkit.WebHistoryItem;
+import android.webkit.WebIconDatabase;
+import android.webkit.WebStorage;
+import android.webkit.WebView;
+import android.webkit.WebViewClient;
+import android.widget.FrameLayout;
+import android.widget.ImageButton;
+import android.widget.LinearLayout;
+import android.widget.TextView;
+
+/**
+ * Class for maintaining Tabs with a main WebView and a subwindow.
+ */
+class Tab {
+ // Log Tag
+ private static final String LOGTAG = "Tab";
+ // The Geolocation permissions prompt
+ private GeolocationPermissionsPrompt mGeolocationPermissionsPrompt;
+ // Main WebView wrapper
+ private View mContainer;
+ // Main WebView
+ private WebView mMainView;
+ // Subwindow container
+ private View mSubViewContainer;
+ // Subwindow WebView
+ private WebView mSubView;
+ // Saved bundle for when we are running low on memory. It contains the
+ // information needed to restore the WebView if the user goes back to the
+ // tab.
+ private Bundle mSavedState;
+ // Data used when displaying the tab in the picker.
+ private PickerData mPickerData;
+ // Parent Tab. This is the Tab that created this Tab, or null if the Tab was
+ // created by the UI
+ private Tab mParentTab;
+ // Tab that constructed by this Tab. This is used when this Tab is
+ // destroyed, it clears all mParentTab values in the children.
+ private Vector<Tab> mChildTabs;
+ // If true, the tab will be removed when back out of the first page.
+ private boolean mCloseOnExit;
+ // If true, the tab is in the foreground of the current activity.
+ private boolean mInForeground;
+ // If true, the tab is in loading state.
+ private boolean mInLoad;
+ // Application identifier used to find tabs that another application wants
+ // to reuse.
+ private String mAppId;
+ // Keep the original url around to avoid killing the old WebView if the url
+ // has not changed.
+ private String mOriginalUrl;
+ // Error console for the tab
+ private ErrorConsoleView mErrorConsole;
+ // the lock icon type and previous lock icon type for the tab
+ private int mLockIconType;
+ private int mPrevLockIconType;
+ // Inflation service for making subwindows.
+ private final LayoutInflater mInflateService;
+ // The BrowserActivity which owners the Tab
+ private final BrowserActivity mActivity;
+
+ // AsyncTask for downloading touch icons
+ DownloadTouchIcon mTouchIconLoader;
+
+ // Extra saved information for displaying the tab in the picker.
+ private static class PickerData {
+ String mUrl;
+ String mTitle;
+ Bitmap mFavicon;
+ }
+
+ // Used for saving and restoring each Tab
+ static final String WEBVIEW = "webview";
+ static final String NUMTABS = "numTabs";
+ static final String CURRTAB = "currentTab";
+ static final String CURRURL = "currentUrl";
+ static final String CURRTITLE = "currentTitle";
+ static final String CURRPICTURE = "currentPicture";
+ static final String CLOSEONEXIT = "closeonexit";
+ static final String PARENTTAB = "parentTab";
+ static final String APPID = "appid";
+ static final String ORIGINALURL = "originalUrl";
+
+ // -------------------------------------------------------------------------
+
+ // Container class for the next error dialog that needs to be displayed
+ private class ErrorDialog {
+ public final int mTitle;
+ public final String mDescription;
+ public final int mError;
+ ErrorDialog(int title, String desc, int error) {
+ mTitle = title;
+ mDescription = desc;
+ mError = error;
+ }
+ };
+
+ private void processNextError() {
+ if (mQueuedErrors == null) {
+ return;
+ }
+ // The first one is currently displayed so just remove it.
+ mQueuedErrors.removeFirst();
+ if (mQueuedErrors.size() == 0) {
+ mQueuedErrors = null;
+ return;
+ }
+ showError(mQueuedErrors.getFirst());
+ }
+
+ private DialogInterface.OnDismissListener mDialogListener =
+ new DialogInterface.OnDismissListener() {
+ public void onDismiss(DialogInterface d) {
+ processNextError();
+ }
+ };
+ private LinkedList<ErrorDialog> mQueuedErrors;
+
+ private void queueError(int err, String desc) {
+ if (mQueuedErrors == null) {
+ mQueuedErrors = new LinkedList<ErrorDialog>();
+ }
+ for (ErrorDialog d : mQueuedErrors) {
+ if (d.mError == err) {
+ // Already saw a similar error, ignore the new one.
+ return;
+ }
+ }
+ ErrorDialog errDialog = new ErrorDialog(
+ err == WebViewClient.ERROR_FILE_NOT_FOUND ?
+ R.string.browserFrameFileErrorLabel :
+ R.string.browserFrameNetworkErrorLabel,
+ desc, err);
+ mQueuedErrors.addLast(errDialog);
+
+ // Show the dialog now if the queue was empty and it is in foreground
+ if (mQueuedErrors.size() == 1 && mInForeground) {
+ showError(errDialog);
+ }
+ }
+
+ private void showError(ErrorDialog errDialog) {
+ if (mInForeground) {
+ AlertDialog d = new AlertDialog.Builder(mActivity)
+ .setTitle(errDialog.mTitle)
+ .setMessage(errDialog.mDescription)
+ .setPositiveButton(R.string.ok, null)
+ .create();
+ d.setOnDismissListener(mDialogListener);
+ d.show();
+ }
+ }
+
+ // -------------------------------------------------------------------------
+ // WebViewClient implementation for the main WebView
+ // -------------------------------------------------------------------------
+
+ private final WebViewClient mWebViewClient = new WebViewClient() {
+ @Override
+ public void onPageStarted(WebView view, String url, Bitmap favicon) {
+ mInLoad = true;
+
+ // We've started to load a new page. If there was a pending message
+ // to save a screenshot then we will now take the new page and save
+ // an incorrect screenshot. Therefore, remove any pending thumbnail
+ // messages from the queue.
+ mActivity.removeMessages(BrowserActivity.UPDATE_BOOKMARK_THUMBNAIL,
+ view);
+
+ // If we start a touch icon load and then load a new page, we don't
+ // want to cancel the current touch icon loader. But, we do want to
+ // create a new one when the touch icon url is known.
+ if (mTouchIconLoader != null) {
+ mTouchIconLoader.mTab = null;
+ mTouchIconLoader = null;
+ }
+
+ // reset the error console
+ if (mErrorConsole != null) {
+ mErrorConsole.clearErrorMessages();
+ if (mActivity.shouldShowErrorConsole()) {
+ mErrorConsole.showConsole(ErrorConsoleView.SHOW_NONE);
+ }
+ }
+
+ // update the bookmark database for favicon
+ if (favicon != null) {
+ BrowserBookmarksAdapter.updateBookmarkFavicon(mActivity
+ .getContentResolver(), view.getOriginalUrl(), view
+ .getUrl(), favicon);
+ }
+
+ // reset sync timer to avoid sync starts during loading a page
+ CookieSyncManager.getInstance().resetSync();
+
+ if (!mActivity.isNetworkUp()) {
+ view.setNetworkAvailable(false);
+ }
+
+ // finally update the UI in the activity if it is in the foreground
+ if (mInForeground) {
+ mActivity.onPageStarted(view, url, favicon);
+ }
+ }
+
+ @Override
+ public void onPageFinished(WebView view, String url) {
+ mInLoad = false;
+
+ if (mInForeground && !mActivity.didUserStopLoading()
+ || !mInForeground) {
+ // Only update the bookmark screenshot if the user did not
+ // cancel the load early.
+ mActivity.postMessage(
+ BrowserActivity.UPDATE_BOOKMARK_THUMBNAIL, 0, 0, view,
+ 500);
+ }
+
+ // finally update the UI in the activity if it is in the foreground
+ if (mInForeground) {
+ mActivity.onPageFinished(view, url);
+ }
+ }
+
+ // return true if want to hijack the url to let another app to handle it
+ @Override
+ public boolean shouldOverrideUrlLoading(WebView view, String url) {
+ if (mInForeground) {
+ return mActivity.shouldOverrideUrlLoading(view, url);
+ } else {
+ return false;
+ }
+ }
+
+ /**
+ * Updates the lock icon. This method is called when we discover another
+ * resource to be loaded for this page (for example, javascript). While
+ * we update the icon type, we do not update the lock icon itself until
+ * we are done loading, it is slightly more secure this way.
+ */
+ @Override
+ public void onLoadResource(WebView view, String url) {
+ if (url != null && url.length() > 0) {
+ // It is only if the page claims to be secure that we may have
+ // to update the lock:
+ if (mLockIconType == BrowserActivity.LOCK_ICON_SECURE) {
+ // If NOT a 'safe' url, change the lock to mixed content!
+ if (!(URLUtil.isHttpsUrl(url) || URLUtil.isDataUrl(url)
+ || URLUtil.isAboutUrl(url))) {
+ mLockIconType = BrowserActivity.LOCK_ICON_MIXED;
+ }
+ }
+ }
+ }
+
+ /**
+ * Show a dialog informing the user of the network error reported by
+ * WebCore if it is in the foreground.
+ */
+ @Override
+ public void onReceivedError(WebView view, int errorCode,
+ String description, String failingUrl) {
+ if (errorCode != WebViewClient.ERROR_HOST_LOOKUP &&
+ errorCode != WebViewClient.ERROR_CONNECT &&
+ errorCode != WebViewClient.ERROR_BAD_URL &&
+ errorCode != WebViewClient.ERROR_UNSUPPORTED_SCHEME &&
+ errorCode != WebViewClient.ERROR_FILE) {
+ queueError(errorCode, description);
+ }
+ Log.e(LOGTAG, "onReceivedError " + errorCode + " " + failingUrl
+ + " " + description);
+
+ // We need to reset the title after an error if it is in foreground.
+ if (mInForeground) {
+ mActivity.resetTitleAndRevertLockIcon();
+ }
+ }
+
+ /**
+ * Check with the user if it is ok to resend POST data as the page they
+ * are trying to navigate to is the result of a POST.
+ */
+ @Override
+ public void onFormResubmission(WebView view, final Message dontResend,
+ final Message resend) {
+ if (!mInForeground) {
+ dontResend.sendToTarget();
+ return;
+ }
+ new AlertDialog.Builder(mActivity).setTitle(
+ R.string.browserFrameFormResubmitLabel).setMessage(
+ R.string.browserFrameFormResubmitMessage)
+ .setPositiveButton(R.string.ok,
+ new DialogInterface.OnClickListener() {
+ public void onClick(DialogInterface dialog,
+ int which) {
+ resend.sendToTarget();
+ }
+ }).setNegativeButton(R.string.cancel,
+ new DialogInterface.OnClickListener() {
+ public void onClick(DialogInterface dialog,
+ int which) {
+ dontResend.sendToTarget();
+ }
+ }).setOnCancelListener(new OnCancelListener() {
+ public void onCancel(DialogInterface dialog) {
+ dontResend.sendToTarget();
+ }
+ }).show();
+ }
+
+ /**
+ * Insert the url into the visited history database.
+ * @param url The url to be inserted.
+ * @param isReload True if this url is being reloaded.
+ * FIXME: Not sure what to do when reloading the page.
+ */
+ @Override
+ public void doUpdateVisitedHistory(WebView view, String url,
+ boolean isReload) {
+ if (url.regionMatches(true, 0, "about:", 0, 6)) {
+ return;
+ }
+ // remove "client" before updating it to the history so that it wont
+ // show up in the auto-complete list.
+ int index = url.indexOf("client=ms-");
+ if (index > 0 && url.contains(".google.")) {
+ int end = url.indexOf('&', index);
+ if (end > 0) {
+ url = url.substring(0, index)
+ .concat(url.substring(end + 1));
+ } else {
+ // the url.charAt(index-1) should be either '?' or '&'
+ url = url.substring(0, index-1);
+ }
+ }
+ Browser.updateVisitedHistory(mActivity.getContentResolver(), url,
+ true);
+ WebIconDatabase.getInstance().retainIconForPageUrl(url);
+ }
+
+ /**
+ * Displays SSL error(s) dialog to the user.
+ */
+ @Override
+ public void onReceivedSslError(final WebView view,
+ final SslErrorHandler handler, final SslError error) {
+ if (!mInForeground) {
+ handler.cancel();
+ return;
+ }
+ if (BrowserSettings.getInstance().showSecurityWarnings()) {
+ final LayoutInflater factory =
+ LayoutInflater.from(mActivity);
+ final View warningsView =
+ factory.inflate(R.layout.ssl_warnings, null);
+ final LinearLayout placeholder =
+ (LinearLayout)warningsView.findViewById(R.id.placeholder);
+
+ if (error.hasError(SslError.SSL_UNTRUSTED)) {
+ LinearLayout ll = (LinearLayout)factory
+ .inflate(R.layout.ssl_warning, null);
+ ((TextView)ll.findViewById(R.id.warning))
+ .setText(R.string.ssl_untrusted);
+ placeholder.addView(ll);
+ }
+
+ if (error.hasError(SslError.SSL_IDMISMATCH)) {
+ LinearLayout ll = (LinearLayout)factory
+ .inflate(R.layout.ssl_warning, null);
+ ((TextView)ll.findViewById(R.id.warning))
+ .setText(R.string.ssl_mismatch);
+ placeholder.addView(ll);
+ }
+
+ if (error.hasError(SslError.SSL_EXPIRED)) {
+ LinearLayout ll = (LinearLayout)factory
+ .inflate(R.layout.ssl_warning, null);
+ ((TextView)ll.findViewById(R.id.warning))
+ .setText(R.string.ssl_expired);
+ placeholder.addView(ll);
+ }
+
+ if (error.hasError(SslError.SSL_NOTYETVALID)) {
+ LinearLayout ll = (LinearLayout)factory
+ .inflate(R.layout.ssl_warning, null);
+ ((TextView)ll.findViewById(R.id.warning))
+ .setText(R.string.ssl_not_yet_valid);
+ placeholder.addView(ll);
+ }
+
+ new AlertDialog.Builder(mActivity).setTitle(
+ R.string.security_warning).setIcon(
+ android.R.drawable.ic_dialog_alert).setView(
+ warningsView).setPositiveButton(R.string.ssl_continue,
+ new DialogInterface.OnClickListener() {
+ public void onClick(DialogInterface dialog,
+ int whichButton) {
+ handler.proceed();
+ }
+ }).setNeutralButton(R.string.view_certificate,
+ new DialogInterface.OnClickListener() {
+ public void onClick(DialogInterface dialog,
+ int whichButton) {
+ mActivity.showSSLCertificateOnError(view,
+ handler, error);
+ }
+ }).setNegativeButton(R.string.cancel,
+ new DialogInterface.OnClickListener() {
+ public void onClick(DialogInterface dialog,
+ int whichButton) {
+ handler.cancel();
+ mActivity.resetTitleAndRevertLockIcon();
+ }
+ }).setOnCancelListener(
+ new DialogInterface.OnCancelListener() {
+ public void onCancel(DialogInterface dialog) {
+ handler.cancel();
+ mActivity.resetTitleAndRevertLockIcon();
+ }
+ }).show();
+ } else {
+ handler.proceed();
+ }
+ }
+
+ /**
+ * Handles an HTTP authentication request.
+ *
+ * @param handler The authentication handler
+ * @param host The host
+ * @param realm The realm
+ */
+ @Override
+ public void onReceivedHttpAuthRequest(WebView view,
+ final HttpAuthHandler handler, final String host,
+ final String realm) {
+ String username = null;
+ String password = null;
+
+ boolean reuseHttpAuthUsernamePassword = handler
+ .useHttpAuthUsernamePassword();
+
+ if (reuseHttpAuthUsernamePassword && mMainView != null) {
+ String[] credentials = mMainView.getHttpAuthUsernamePassword(
+ host, realm);
+ if (credentials != null && credentials.length == 2) {
+ username = credentials[0];
+ password = credentials[1];
+ }
+ }
+
+ if (username != null && password != null) {
+ handler.proceed(username, password);
+ } else {
+ if (mInForeground) {
+ mActivity.showHttpAuthentication(handler, host, realm,
+ null, null, null, 0);
+ } else {
+ handler.cancel();
+ }
+ }
+ }
+
+ @Override
+ public boolean shouldOverrideKeyEvent(WebView view, KeyEvent event) {
+ if (!mInForeground) {
+ return false;
+ }
+ if (mActivity.isMenuDown()) {
+ // only check shortcut key when MENU is held
+ return mActivity.getWindow().isShortcutKey(event.getKeyCode(),
+ event);
+ } else {
+ return false;
+ }
+ }
+
+ @Override
+ public void onUnhandledKeyEvent(WebView view, KeyEvent event) {
+ if (!mInForeground) {
+ return;
+ }
+ if (event.isDown()) {
+ mActivity.onKeyDown(event.getKeyCode(), event);
+ } else {
+ mActivity.onKeyUp(event.getKeyCode(), event);
+ }
+ }
+ };
+
+ // -------------------------------------------------------------------------
+ // WebChromeClient implementation for the main WebView
+ // -------------------------------------------------------------------------
+
+ private final WebChromeClient mWebChromeClient = new WebChromeClient() {
+ // Helper method to create a new tab or sub window.
+ private void createWindow(final boolean dialog, final Message msg) {
+ WebView.WebViewTransport transport =
+ (WebView.WebViewTransport) msg.obj;
+ if (dialog) {
+ createSubWindow();
+ mActivity.attachSubWindow(Tab.this);
+ transport.setWebView(mSubView);
+ } else {
+ final Tab newTab = mActivity.openTabAndShow(
+ BrowserActivity.EMPTY_URL_DATA, false, null);
+ if (newTab != Tab.this) {
+ Tab.this.addChildTab(newTab);
+ }
+ transport.setWebView(newTab.getWebView());
+ }
+ msg.sendToTarget();
+ }
+
+ @Override
+ public boolean onCreateWindow(WebView view, final boolean dialog,
+ final boolean userGesture, final Message resultMsg) {
+ // only allow new window or sub window for the foreground case
+ if (!mInForeground) {
+ return false;
+ }
+ // Short-circuit if we can't create any more tabs or sub windows.
+ if (dialog && mSubView != null) {
+ new AlertDialog.Builder(mActivity)
+ .setTitle(R.string.too_many_subwindows_dialog_title)
+ .setIcon(android.R.drawable.ic_dialog_alert)
+ .setMessage(R.string.too_many_subwindows_dialog_message)
+ .setPositiveButton(R.string.ok, null)
+ .show();
+ return false;
+ } else if (!mActivity.getTabControl().canCreateNewTab()) {
+ new AlertDialog.Builder(mActivity)
+ .setTitle(R.string.too_many_windows_dialog_title)
+ .setIcon(android.R.drawable.ic_dialog_alert)
+ .setMessage(R.string.too_many_windows_dialog_message)
+ .setPositiveButton(R.string.ok, null)
+ .show();
+ return false;
+ }
+
+ // Short-circuit if this was a user gesture.
+ if (userGesture) {
+ createWindow(dialog, resultMsg);
+ return true;
+ }
+
+ // Allow the popup and create the appropriate window.
+ final AlertDialog.OnClickListener allowListener =
+ new AlertDialog.OnClickListener() {
+ public void onClick(DialogInterface d,
+ int which) {
+ createWindow(dialog, resultMsg);
+ }
+ };
+
+ // Block the popup by returning a null WebView.
+ final AlertDialog.OnClickListener blockListener =
+ new AlertDialog.OnClickListener() {
+ public void onClick(DialogInterface d, int which) {
+ resultMsg.sendToTarget();
+ }
+ };
+
+ // Build a confirmation dialog to display to the user.
+ final AlertDialog d =
+ new AlertDialog.Builder(mActivity)
+ .setTitle(R.string.attention)
+ .setIcon(android.R.drawable.ic_dialog_alert)
+ .setMessage(R.string.popup_window_attempt)
+ .setPositiveButton(R.string.allow, allowListener)
+ .setNegativeButton(R.string.block, blockListener)
+ .setCancelable(false)
+ .create();
+
+ // Show the confirmation dialog.
+ d.show();
+ return true;
+ }
+
+ @Override
+ public void onRequestFocus(WebView view) {
+ if (!mInForeground) {
+ mActivity.switchToTab(mActivity.getTabControl().getTabIndex(
+ Tab.this));
+ }
+ }
+
+ @Override
+ public void onCloseWindow(WebView window) {
+ if (mParentTab != null) {
+ // JavaScript can only close popup window.
+ if (mInForeground) {
+ mActivity.switchToTab(mActivity.getTabControl()
+ .getTabIndex(mParentTab));
+ }
+ mActivity.closeTab(Tab.this);
+ }
+ }
+
+ @Override
+ public void onProgressChanged(WebView view, int newProgress) {
+ if (newProgress == 100) {
+ // sync cookies and cache promptly here.
+ CookieSyncManager.getInstance().sync();
+ }
+ if (mInForeground) {
+ mActivity.onProgressChanged(view, newProgress);
+ }
+ }
+
+ @Override
+ public void onReceivedTitle(WebView view, String title) {
+ String url = view.getUrl();
+ if (mInForeground) {
+ // here, if url is null, we want to reset the title
+ mActivity.setUrlTitle(url, title);
+ }
+ if (url == null ||
+ url.length() >= SQLiteDatabase.SQLITE_MAX_LIKE_PATTERN_LENGTH) {
+ return;
+ }
+ // See if we can find the current url in our history database and
+ // add the new title to it.
+ if (url.startsWith("http://www.")) {
+ url = url.substring(11);
+ } else if (url.startsWith("http://")) {
+ url = url.substring(4);
+ }
+ try {
+ final ContentResolver cr = mActivity.getContentResolver();
+ url = "%" + url;
+ String [] selArgs = new String[] { url };
+ String where = Browser.BookmarkColumns.URL + " LIKE ? AND "
+ + Browser.BookmarkColumns.BOOKMARK + " = 0";
+ Cursor c = cr.query(Browser.BOOKMARKS_URI,
+ Browser.HISTORY_PROJECTION, where, selArgs, null);
+ if (c.moveToFirst()) {
+ // Current implementation of database only has one entry per
+ // url.
+ ContentValues map = new ContentValues();
+ map.put(Browser.BookmarkColumns.TITLE, title);
+ cr.update(Browser.BOOKMARKS_URI, map, "_id = "
+ + c.getInt(0), null);
+ }
+ c.close();
+ } catch (IllegalStateException e) {
+ Log.e(LOGTAG, "Tab onReceived title", e);
+ } catch (SQLiteException ex) {
+ Log.e(LOGTAG, "onReceivedTitle() caught SQLiteException: ", ex);
+ }
+ }
+
+ @Override
+ public void onReceivedIcon(WebView view, Bitmap icon) {
+ if (icon != null) {
+ BrowserBookmarksAdapter.updateBookmarkFavicon(mActivity
+ .getContentResolver(), view.getOriginalUrl(), view
+ .getUrl(), icon);
+ }
+ if (mInForeground) {
+ mActivity.setFavicon(icon);
+ }
+ }
+
+ @Override
+ public void onReceivedTouchIconUrl(WebView view, String url,
+ boolean precomposed) {
+ final ContentResolver cr = mActivity.getContentResolver();
+ final Cursor c = BrowserBookmarksAdapter.queryBookmarksForUrl(cr,
+ view.getOriginalUrl(), view.getUrl(), true);
+ if (c != null) {
+ if (c.getCount() > 0) {
+ // Let precomposed icons take precedence over non-composed
+ // icons.
+ if (precomposed && mTouchIconLoader != null) {
+ mTouchIconLoader.cancel(false);
+ mTouchIconLoader = null;
+ }
+ // Have only one async task at a time.
+ if (mTouchIconLoader == null) {
+ mTouchIconLoader = new DownloadTouchIcon(Tab.this, cr,
+ c, view);
+ mTouchIconLoader.execute(url);
+ }
+ } else {
+ c.close();
+ }
+ }
+ }
+
+ @Override
+ public void onShowCustomView(View view,
+ WebChromeClient.CustomViewCallback callback) {
+ if (mInForeground) mActivity.onShowCustomView(view, callback);
+ }
+
+ @Override
+ public void onHideCustomView() {
+ if (mInForeground) mActivity.onHideCustomView();
+ }
+
+ /**
+ * The origin has exceeded its database quota.
+ * @param url the URL that exceeded the quota
+ * @param databaseIdentifier the identifier of the database on which the
+ * transaction that caused the quota overflow was run
+ * @param currentQuota the current quota for the origin.
+ * @param estimatedSize the estimated size of the database.
+ * @param totalUsedQuota is the sum of all origins' quota.
+ * @param quotaUpdater The callback to run when a decision to allow or
+ * deny quota has been made. Don't forget to call this!
+ */
+ @Override
+ public void onExceededDatabaseQuota(String url,
+ String databaseIdentifier, long currentQuota, long estimatedSize,
+ long totalUsedQuota, WebStorage.QuotaUpdater quotaUpdater) {
+ BrowserSettings.getInstance().getWebStorageSizeManager()
+ .onExceededDatabaseQuota(url, databaseIdentifier,
+ currentQuota, estimatedSize, totalUsedQuota,
+ quotaUpdater);
+ }
+
+ /**
+ * The Application Cache has exceeded its max size.
+ * @param spaceNeeded is the amount of disk space that would be needed
+ * in order for the last appcache operation to succeed.
+ * @param totalUsedQuota is the sum of all origins' quota.
+ * @param quotaUpdater A callback to inform the WebCore thread that a
+ * new app cache size is available. This callback must always
+ * be executed at some point to ensure that the sleeping
+ * WebCore thread is woken up.
+ */
+ @Override
+ public void onReachedMaxAppCacheSize(long spaceNeeded,
+ long totalUsedQuota, WebStorage.QuotaUpdater quotaUpdater) {
+ BrowserSettings.getInstance().getWebStorageSizeManager()
+ .onReachedMaxAppCacheSize(spaceNeeded, totalUsedQuota,
+ quotaUpdater);
+ }
+
+ /**
+ * Instructs the browser to show a prompt to ask the user to set the
+ * Geolocation permission state for the specified origin.
+ * @param origin The origin for which Geolocation permissions are
+ * requested.
+ * @param callback The callback to call once the user has set the
+ * Geolocation permission state.
+ */
+ @Override
+ public void onGeolocationPermissionsShowPrompt(String origin,
+ GeolocationPermissions.Callback callback) {
+ if (mInForeground) {
+ mGeolocationPermissionsPrompt.show(origin, callback);
+ }
+ }
+
+ /**
+ * Instructs the browser to hide the Geolocation permissions prompt.
+ */
+ @Override
+ public void onGeolocationPermissionsHidePrompt() {
+ if (mInForeground) {
+ mGeolocationPermissionsPrompt.hide();
+ }
+ }
+
+ /* Adds a JavaScript error message to the system log and if the JS
+ * console is enabled in the about:debug options, to that console
+ * also.
+ * @param message The error message to report.
+ * @param lineNumber The line number of the error.
+ * @param sourceID The name of the source file that caused the error.
+ */
+ @Override
+ public void onConsoleMessage(String message, int lineNumber,
+ String sourceID) {
+ if (mInForeground) {
+ // call getErrorConsole(true) so it will create one if needed
+ ErrorConsoleView errorConsole = getErrorConsole(true);
+ errorConsole.addErrorMessage(message, sourceID, lineNumber);
+ if (mActivity.shouldShowErrorConsole()
+ && errorConsole.getShowState() != ErrorConsoleView.SHOW_MAXIMIZED) {
+ errorConsole.showConsole(ErrorConsoleView.SHOW_MINIMIZED);
+ }
+ }
+ Log.w(LOGTAG, "Console: " + message + " " + sourceID + ":"
+ + lineNumber);
+ }
+
+ /**
+ * Ask the browser for an icon to represent a <video> element.
+ * This icon will be used if the Web page did not specify a poster attribute.
+ * @return Bitmap The icon or null if no such icon is available.
+ */
+ @Override
+ public Bitmap getDefaultVideoPoster() {
+ if (mInForeground) {
+ return mActivity.getDefaultVideoPoster();
+ }
+ return null;
+ }
+
+ /**
+ * Ask the host application for a custom progress view to show while
+ * a <video> is loading.
+ * @return View The progress view.
+ */
+ @Override
+ public View getVideoLoadingProgressView() {
+ if (mInForeground) {
+ return mActivity.getVideoLoadingProgressView();
+ }
+ return null;
+ }
+
+ @Override
+ public void openFileChooser(ValueCallback<Uri> uploadMsg) {
+ if (mInForeground) {
+ mActivity.openFileChooser(uploadMsg);
+ } else {
+ uploadMsg.onReceiveValue(null);
+ }
+ }
+
+ /**
+ * Deliver a list of already-visited URLs
+ */
+ @Override
+ public void getVisitedHistory(final ValueCallback<String[]> callback) {
+ AsyncTask<Void, Void, String[]> task = new AsyncTask<Void, Void, String[]>() {
+ public String[] doInBackground(Void... unused) {
+ return Browser.getVisitedHistory(mActivity
+ .getContentResolver());
+ }
+ public void onPostExecute(String[] result) {
+ callback.onReceiveValue(result);
+ };
+ };
+ task.execute();
+ };
+ };
+
+ // -------------------------------------------------------------------------
+ // WebViewClient implementation for the sub window
+ // -------------------------------------------------------------------------
+
+ // Subclass of WebViewClient used in subwindows to notify the main
+ // WebViewClient of certain WebView activities.
+ private static class SubWindowClient extends WebViewClient {
+ // The main WebViewClient.
+ private final WebViewClient mClient;
+
+ SubWindowClient(WebViewClient client) {
+ mClient = client;
+ }
+ @Override
+ public void doUpdateVisitedHistory(WebView view, String url,
+ boolean isReload) {
+ mClient.doUpdateVisitedHistory(view, url, isReload);
+ }
+ @Override
+ public boolean shouldOverrideUrlLoading(WebView view, String url) {
+ return mClient.shouldOverrideUrlLoading(view, url);
+ }
+ @Override
+ public void onReceivedSslError(WebView view, SslErrorHandler handler,
+ SslError error) {
+ mClient.onReceivedSslError(view, handler, error);
+ }
+ @Override
+ public void onReceivedHttpAuthRequest(WebView view,
+ HttpAuthHandler handler, String host, String realm) {
+ mClient.onReceivedHttpAuthRequest(view, handler, host, realm);
+ }
+ @Override
+ public void onFormResubmission(WebView view, Message dontResend,
+ Message resend) {
+ mClient.onFormResubmission(view, dontResend, resend);
+ }
+ @Override
+ public void onReceivedError(WebView view, int errorCode,
+ String description, String failingUrl) {
+ mClient.onReceivedError(view, errorCode, description, failingUrl);
+ }
+ @Override
+ public boolean shouldOverrideKeyEvent(WebView view,
+ android.view.KeyEvent event) {
+ return mClient.shouldOverrideKeyEvent(view, event);
+ }
+ @Override
+ public void onUnhandledKeyEvent(WebView view,
+ android.view.KeyEvent event) {
+ mClient.onUnhandledKeyEvent(view, event);
+ }
+ }
+
+ // -------------------------------------------------------------------------
+ // WebChromeClient implementation for the sub window
+ // -------------------------------------------------------------------------
+
+ private class SubWindowChromeClient extends WebChromeClient {
+ // The main WebChromeClient.
+ private final WebChromeClient mClient;
+
+ SubWindowChromeClient(WebChromeClient client) {
+ mClient = client;
+ }
+ @Override
+ public void onProgressChanged(WebView view, int newProgress) {
+ mClient.onProgressChanged(view, newProgress);
+ }
+ @Override
+ public boolean onCreateWindow(WebView view, boolean dialog,
+ boolean userGesture, android.os.Message resultMsg) {
+ return mClient.onCreateWindow(view, dialog, userGesture, resultMsg);
+ }
+ @Override
+ public void onCloseWindow(WebView window) {
+ if (window != mSubView) {
+ Log.e(LOGTAG, "Can't close the window");
+ }
+ mActivity.dismissSubWindow(Tab.this);
+ }
+ }
+
+ // -------------------------------------------------------------------------
+
+ // Construct a new tab
+ Tab(BrowserActivity activity, WebView w, boolean closeOnExit, String appId,
+ String url) {
+ mActivity = activity;
+ mCloseOnExit = closeOnExit;
+ mAppId = appId;
+ mOriginalUrl = url;
+ mLockIconType = BrowserActivity.LOCK_ICON_UNSECURE;
+ mPrevLockIconType = BrowserActivity.LOCK_ICON_UNSECURE;
+ mInLoad = false;
+ mInForeground = false;
+
+ mInflateService = LayoutInflater.from(activity);
+
+ // The tab consists of a container view, which contains the main
+ // WebView, as well as any other UI elements associated with the tab.
+ mContainer = mInflateService.inflate(R.layout.tab, null);
+
+ mGeolocationPermissionsPrompt =
+ (GeolocationPermissionsPrompt) mContainer.findViewById(
+ R.id.geolocation_permissions_prompt);
+
+ setWebView(w);
+ }
+
+ /**
+ * Sets the WebView for this tab, correctly removing the old WebView from
+ * the container view.
+ */
+ void setWebView(WebView w) {
+ if (mMainView == w) {
+ return;
+ }
+ // If the WebView is changing, the page will be reloaded, so any ongoing
+ // Geolocation permission requests are void.
+ mGeolocationPermissionsPrompt.hide();
+
+ // Just remove the old one.
+ FrameLayout wrapper =
+ (FrameLayout) mContainer.findViewById(R.id.webview_wrapper);
+ wrapper.removeView(mMainView);
+
+ // set the new one
+ mMainView = w;
+ // attached the WebViewClient and WebChromeClient
+ if (mMainView != null) {
+ mMainView.setWebViewClient(mWebViewClient);
+ mMainView.setWebChromeClient(mWebChromeClient);
+ }
+ }
+
+ /**
+ * Destroy the tab's main WebView and subWindow if any
+ */
+ void destroy() {
+ if (mMainView != null) {
+ dismissSubWindow();
+ BrowserSettings.getInstance().deleteObserver(mMainView.getSettings());
+ // save the WebView to call destroy() after detach it from the tab
+ WebView webView = mMainView;
+ setWebView(null);
+ webView.destroy();
+ }
+ }
+
+ /**
+ * Remove the tab from the parent
+ */
+ void removeFromTree() {
+ // detach the children
+ if (mChildTabs != null) {
+ for(Tab t : mChildTabs) {
+ t.setParentTab(null);
+ }
+ }
+ // remove itself from the parent list
+ if (mParentTab != null) {
+ mParentTab.mChildTabs.remove(this);
+ }
+ }
+
+ /**
+ * Create a new subwindow unless a subwindow already exists.
+ * @return True if a new subwindow was created. False if one already exists.
+ */
+ boolean createSubWindow() {
+ if (mSubView == null) {
+ mSubViewContainer = mInflateService.inflate(
+ R.layout.browser_subwindow, null);
+ mSubView = (WebView) mSubViewContainer.findViewById(R.id.webview);
+ // use trackball directly
+ mSubView.setMapTrackballToArrowKeys(false);
+ mSubView.setWebViewClient(new SubWindowClient(mWebViewClient));
+ mSubView.setWebChromeClient(new SubWindowChromeClient(
+ mWebChromeClient));
+ mSubView.setDownloadListener(mActivity);
+ mSubView.setOnCreateContextMenuListener(mActivity);
+ final BrowserSettings s = BrowserSettings.getInstance();
+ s.addObserver(mSubView.getSettings()).update(s, null);
+ final ImageButton cancel = (ImageButton) mSubViewContainer
+ .findViewById(R.id.subwindow_close);
+ cancel.setOnClickListener(new OnClickListener() {
+ public void onClick(View v) {
+ mSubView.getWebChromeClient().onCloseWindow(mSubView);
+ }
+ });
+ return true;
+ }
+ return false;
+ }
+
+ /**
+ * Dismiss the subWindow for the tab.
+ */
+ void dismissSubWindow() {
+ if (mSubView != null) {
+ BrowserSettings.getInstance().deleteObserver(
+ mSubView.getSettings());
+ mSubView.destroy();
+ mSubView = null;
+ mSubViewContainer = null;
+ }
+ }
+
+ /**
+ * Attach the sub window to the content view.
+ */
+ void attachSubWindow(ViewGroup content) {
+ if (mSubView != null) {
+ content.addView(mSubViewContainer,
+ BrowserActivity.COVER_SCREEN_PARAMS);
+ }
+ }
+
+ /**
+ * Remove the sub window from the content view.
+ */
+ void removeSubWindow(ViewGroup content) {
+ if (mSubView != null) {
+ content.removeView(mSubViewContainer);
+ }
+ }
+
+ /**
+ * This method attaches both the WebView and any sub window to the
+ * given content view.
+ */
+ void attachTabToContentView(ViewGroup content) {
+ if (mMainView == null) {
+ return;
+ }
+
+ // Attach the WebView to the container and then attach the
+ // container to the content view.
+ FrameLayout wrapper =
+ (FrameLayout) mContainer.findViewById(R.id.webview_wrapper);
+ wrapper.addView(mMainView);
+ content.addView(mContainer, BrowserActivity.COVER_SCREEN_PARAMS);
+ attachSubWindow(content);
+ }
+
+ /**
+ * Remove the WebView and any sub window from the given content view.
+ */
+ void removeTabFromContentView(ViewGroup content) {
+ if (mMainView == null) {
+ return;
+ }
+
+ // Remove the container from the content and then remove the
+ // WebView from the container. This will trigger a focus change
+ // needed by WebView.
+ FrameLayout wrapper =
+ (FrameLayout) mContainer.findViewById(R.id.webview_wrapper);
+ wrapper.removeView(mMainView);
+ content.removeView(mContainer);
+ removeSubWindow(content);
+ }
+
+ /**
+ * Set the parent tab of this tab.
+ */
+ void setParentTab(Tab parent) {
+ mParentTab = parent;
+ // This tab may have been freed due to low memory. If that is the case,
+ // the parent tab index is already saved. If we are changing that index
+ // (most likely due to removing the parent tab) we must update the
+ // parent tab index in the saved Bundle.
+ if (mSavedState != null) {
+ if (parent == null) {
+ mSavedState.remove(PARENTTAB);
+ } else {
+ mSavedState.putInt(PARENTTAB, mActivity.getTabControl()
+ .getTabIndex(parent));
+ }
+ }
+ }
+
+ /**
+ * When a Tab is created through the content of another Tab, then we
+ * associate the Tabs.
+ * @param child the Tab that was created from this Tab
+ */
+ void addChildTab(Tab child) {
+ if (mChildTabs == null) {
+ mChildTabs = new Vector<Tab>();
+ }
+ mChildTabs.add(child);
+ child.setParentTab(this);
+ }
+
+ Vector<Tab> getChildTabs() {
+ return mChildTabs;
+ }
+
+ void resume() {
+ if (mMainView != null) {
+ mMainView.onResume();
+ if (mSubView != null) {
+ mSubView.onResume();
+ }
+ }
+ }
+
+ void pause() {
+ if (mMainView != null) {
+ mMainView.onPause();
+ if (mSubView != null) {
+ mSubView.onPause();
+ }
+ }
+ }
+
+ void putInForeground() {
+ mInForeground = true;
+ resume();
+ mMainView.setOnCreateContextMenuListener(mActivity);
+ if (mSubView != null) {
+ mSubView.setOnCreateContextMenuListener(mActivity);
+ }
+ // Show the pending error dialog if the queue is not empty
+ if (mQueuedErrors != null && mQueuedErrors.size() > 0) {
+ showError(mQueuedErrors.getFirst());
+ }
+ }
+
+ void putInBackground() {
+ mInForeground = false;
+ pause();
+ mMainView.setOnCreateContextMenuListener(null);
+ if (mSubView != null) {
+ mSubView.setOnCreateContextMenuListener(null);
+ }
+ }
+
+ /**
+ * Return the top window of this tab; either the subwindow if it is not
+ * null or the main window.
+ * @return The top window of this tab.
+ */
+ WebView getTopWindow() {
+ if (mSubView != null) {
+ return mSubView;
+ }
+ return mMainView;
+ }
+
+ /**
+ * Return the main window of this tab. Note: if a tab is freed in the
+ * background, this can return null. It is only guaranteed to be
+ * non-null for the current tab.
+ * @return The main WebView of this tab.
+ */
+ WebView getWebView() {
+ return mMainView;
+ }
+
+ /**
+ * Return the subwindow of this tab or null if there is no subwindow.
+ * @return The subwindow of this tab or null.
+ */
+ WebView getSubWebView() {
+ return mSubView;
+ }
+
+ /**
+ * @return The geolocation permissions prompt for this tab.
+ */
+ GeolocationPermissionsPrompt getGeolocationPermissionsPrompt() {
+ return mGeolocationPermissionsPrompt;
+ }
+
+ /**
+ * @return The application id string
+ */
+ String getAppId() {
+ return mAppId;
+ }
+
+ /**
+ * Set the application id string
+ * @param id
+ */
+ void setAppId(String id) {
+ mAppId = id;
+ }
+
+ /**
+ * @return The original url associated with this Tab
+ */
+ String getOriginalUrl() {
+ return mOriginalUrl;
+ }
+
+ /**
+ * Set the original url associated with this tab
+ */
+ void setOriginalUrl(String url) {
+ mOriginalUrl = url;
+ }
+
+ /**
+ * Get the url of this tab. Valid after calling populatePickerData, but
+ * before calling wipePickerData, or if the webview has been destroyed.
+ * @return The WebView's url or null.
+ */
+ String getUrl() {
+ if (mPickerData != null) {
+ return mPickerData.mUrl;
+ }
+ return null;
+ }
+
+ /**
+ * Get the title of this tab. Valid after calling populatePickerData, but
+ * before calling wipePickerData, or if the webview has been destroyed. If
+ * the url has no title, use the url instead.
+ * @return The WebView's title (or url) or null.
+ */
+ String getTitle() {
+ if (mPickerData != null) {
+ return mPickerData.mTitle;
+ }
+ return null;
+ }
+
+ /**
+ * Get the favicon of this tab. Valid after calling populatePickerData, but
+ * before calling wipePickerData, or if the webview has been destroyed.
+ * @return The WebView's favicon or null.
+ */
+ Bitmap getFavicon() {
+ if (mPickerData != null) {
+ return mPickerData.mFavicon;
+ }
+ return null;
+ }
+
+ /**
+ * Return the tab's error console. Creates the console if createIfNEcessary
+ * is true and we haven't already created the console.
+ * @param createIfNecessary Flag to indicate if the console should be
+ * created if it has not been already.
+ * @return The tab's error console, or null if one has not been created and
+ * createIfNecessary is false.
+ */
+ ErrorConsoleView getErrorConsole(boolean createIfNecessary) {
+ if (createIfNecessary && mErrorConsole == null) {
+ mErrorConsole = new ErrorConsoleView(mActivity);
+ mErrorConsole.setWebView(mMainView);
+ }
+ return mErrorConsole;
+ }
+
+ /**
+ * If this Tab was created through another Tab, then this method returns
+ * that Tab.
+ * @return the Tab parent or null
+ */
+ public Tab getParentTab() {
+ return mParentTab;
+ }
+
+ /**
+ * Return whether this tab should be closed when it is backing out of the
+ * first page.
+ * @return TRUE if this tab should be closed when exit.
+ */
+ boolean closeOnExit() {
+ return mCloseOnExit;
+ }
+
+ /**
+ * Saves the current lock-icon state before resetting the lock icon. If we
+ * have an error, we may need to roll back to the previous state.
+ */
+ void resetLockIcon(String url) {
+ mPrevLockIconType = mLockIconType;
+ mLockIconType = BrowserActivity.LOCK_ICON_UNSECURE;
+ if (URLUtil.isHttpsUrl(url)) {
+ mLockIconType = BrowserActivity.LOCK_ICON_SECURE;
+ }
+ }
+
+ /**
+ * Reverts the lock-icon state to the last saved state, for example, if we
+ * had an error, and need to cancel the load.
+ */
+ void revertLockIcon() {
+ mLockIconType = mPrevLockIconType;
+ }
+
+ /**
+ * @return The tab's lock icon type.
+ */
+ int getLockIconType() {
+ return mLockIconType;
+ }
+
+ /**
+ * @return TRUE if onPageStarted is called while onPageFinished is not
+ * called yet.
+ */
+ boolean inLoad() {
+ return mInLoad;
+ }
+
+ // force mInLoad to be false. This should only be called before closing the
+ // tab to ensure BrowserActivity's pauseWebViewTimers() is called correctly.
+ void clearInLoad() {
+ mInLoad = false;
+ }
+
+ void populatePickerData() {
+ if (mMainView == null) {
+ populatePickerDataFromSavedState();
+ return;
+ }
+
+ // FIXME: The only place we cared about subwindow was for
+ // bookmarking (i.e. not when saving state). Was this deliberate?
+ final WebBackForwardList list = mMainView.copyBackForwardList();
+ final WebHistoryItem item = list != null ? list.getCurrentItem() : null;
+ populatePickerData(item);
+ }
+
+ // Populate the picker data using the given history item and the current top
+ // WebView.
+ private void populatePickerData(WebHistoryItem item) {
+ mPickerData = new PickerData();
+ if (item != null) {
+ mPickerData.mUrl = item.getUrl();
+ mPickerData.mTitle = item.getTitle();
+ mPickerData.mFavicon = item.getFavicon();
+ if (mPickerData.mTitle == null) {
+ mPickerData.mTitle = mPickerData.mUrl;
+ }
+ }
+ }
+
+ // Create the PickerData and populate it using the saved state of the tab.
+ void populatePickerDataFromSavedState() {
+ if (mSavedState == null) {
+ return;
+ }
+ mPickerData = new PickerData();
+ mPickerData.mUrl = mSavedState.getString(CURRURL);
+ mPickerData.mTitle = mSavedState.getString(CURRTITLE);
+ }
+
+ void clearPickerData() {
+ mPickerData = null;
+ }
+
+ /**
+ * Get the saved state bundle.
+ * @return
+ */
+ Bundle getSavedState() {
+ return mSavedState;
+ }
+
+ /**
+ * Set the saved state.
+ */
+ void setSavedState(Bundle state) {
+ mSavedState = state;
+ }
+
+ /**
+ * @return TRUE if succeed in saving the state.
+ */
+ boolean saveState() {
+ // If the WebView is null it means we ran low on memory and we already
+ // stored the saved state in mSavedState.
+ if (mMainView == null) {
+ return mSavedState != null;
+ }
+
+ mSavedState = new Bundle();
+ final WebBackForwardList list = mMainView.saveState(mSavedState);
+ if (list != null) {
+ final File f = new File(mActivity.getTabControl().getThumbnailDir(),
+ mMainView.hashCode() + "_pic.save");
+ if (mMainView.savePicture(mSavedState, f)) {
+ mSavedState.putString(CURRPICTURE, f.getPath());
+ }
+ }
+
+ // Store some extra info for displaying the tab in the picker.
+ final WebHistoryItem item = list != null ? list.getCurrentItem() : null;
+ populatePickerData(item);
+
+ if (mPickerData.mUrl != null) {
+ mSavedState.putString(CURRURL, mPickerData.mUrl);
+ }
+ if (mPickerData.mTitle != null) {
+ mSavedState.putString(CURRTITLE, mPickerData.mTitle);
+ }
+ mSavedState.putBoolean(CLOSEONEXIT, mCloseOnExit);
+ if (mAppId != null) {
+ mSavedState.putString(APPID, mAppId);
+ }
+ if (mOriginalUrl != null) {
+ mSavedState.putString(ORIGINALURL, mOriginalUrl);
+ }
+ // Remember the parent tab so the relationship can be restored.
+ if (mParentTab != null) {
+ mSavedState.putInt(PARENTTAB, mActivity.getTabControl().getTabIndex(
+ mParentTab));
+ }
+ return true;
+ }
+
+ /*
+ * Restore the state of the tab.
+ */
+ boolean restoreState(Bundle b) {
+ if (b == null) {
+ return false;
+ }
+ // Restore the internal state even if the WebView fails to restore.
+ // This will maintain the app id, original url and close-on-exit values.
+ mSavedState = null;
+ mPickerData = null;
+ mCloseOnExit = b.getBoolean(CLOSEONEXIT);
+ mAppId = b.getString(APPID);
+ mOriginalUrl = b.getString(ORIGINALURL);
+
+ final WebBackForwardList list = mMainView.restoreState(b);
+ if (list == null) {
+ return false;
+ }
+ if (b.containsKey(CURRPICTURE)) {
+ final File f = new File(b.getString(CURRPICTURE));
+ mMainView.restorePicture(b, f);
+ f.delete();
+ }
+ return true;
+ }
+}
diff --git a/src/com/android/browser/TabControl.java b/src/com/android/browser/TabControl.java
index 777485c..5b5493f 100644
--- a/src/com/android/browser/TabControl.java
+++ b/src/com/android/browser/TabControl.java
@@ -16,37 +16,13 @@
package com.android.browser;
-import android.content.Context;
-import android.graphics.Bitmap;
-import android.graphics.BitmapFactory;
-import android.graphics.BitmapShader;
-import android.graphics.Paint;
-import android.graphics.Picture;
-import android.graphics.Shader;
-import android.net.http.SslError;
import android.os.Bundle;
-import android.os.Message;
import android.util.Log;
-import android.view.Gravity;
-import android.view.LayoutInflater;
import android.view.View;
-import android.view.ViewGroup;
-import android.view.View.OnClickListener;
-import android.webkit.HttpAuthHandler;
-import android.webkit.JsPromptResult;
-import android.webkit.JsResult;
-import android.webkit.SslErrorHandler;
import android.webkit.WebBackForwardList;
-import android.webkit.WebChromeClient;
-import android.webkit.WebHistoryItem;
import android.webkit.WebView;
-import android.webkit.WebViewClient;
-import android.widget.FrameLayout;
-import android.widget.ImageButton;
-import android.widget.LinearLayout;
import java.io.File;
-import java.io.FileInputStream;
import java.util.ArrayList;
import java.util.Vector;
@@ -54,13 +30,7 @@
// Log Tag
private static final String LOGTAG = "TabControl";
// Maximum number of tabs.
- static final int MAX_TABS = 8;
- // Static instance of an empty callback.
- private static final WebViewClient mEmptyClient =
- new WebViewClient();
- // Instance of BackgroundChromeClient for background tabs.
- private final BackgroundChromeClient mBackgroundChromeClient =
- new BackgroundChromeClient();
+ private static final int MAX_TABS = 8;
// Private array of WebViews that are used as tabs.
private ArrayList<Tab> mTabs = new ArrayList<Tab>(MAX_TABS);
// Queue of most recently viewed tabs.
@@ -70,393 +40,6 @@
// A private instance of BrowserActivity to interface with when adding and
// switching between tabs.
private final BrowserActivity mActivity;
- // Inflation service for making subwindows.
- private final LayoutInflater mInflateService;
- // Subclass of WebViewClient used in subwindows to notify the main
- // WebViewClient of certain WebView activities.
- private static class SubWindowClient extends WebViewClient {
- // The main WebViewClient.
- private final WebViewClient mClient;
-
- SubWindowClient(WebViewClient client) {
- mClient = client;
- }
- @Override
- public void doUpdateVisitedHistory(WebView view, String url,
- boolean isReload) {
- mClient.doUpdateVisitedHistory(view, url, isReload);
- }
- @Override
- public boolean shouldOverrideUrlLoading(WebView view, String url) {
- return mClient.shouldOverrideUrlLoading(view, url);
- }
- @Override
- public void onReceivedSslError(WebView view, SslErrorHandler handler,
- SslError error) {
- mClient.onReceivedSslError(view, handler, error);
- }
- @Override
- public void onReceivedHttpAuthRequest(WebView view,
- HttpAuthHandler handler, String host, String realm) {
- mClient.onReceivedHttpAuthRequest(view, handler, host, realm);
- }
- @Override
- public void onFormResubmission(WebView view, Message dontResend,
- Message resend) {
- mClient.onFormResubmission(view, dontResend, resend);
- }
- @Override
- public void onReceivedError(WebView view, int errorCode,
- String description, String failingUrl) {
- mClient.onReceivedError(view, errorCode, description, failingUrl);
- }
- @Override
- public boolean shouldOverrideKeyEvent(WebView view,
- android.view.KeyEvent event) {
- return mClient.shouldOverrideKeyEvent(view, event);
- }
- @Override
- public void onUnhandledKeyEvent(WebView view,
- android.view.KeyEvent event) {
- mClient.onUnhandledKeyEvent(view, event);
- }
- }
- // Subclass of WebChromeClient to display javascript dialogs.
- private class SubWindowChromeClient extends WebChromeClient {
- // This subwindow's tab.
- private final Tab mTab;
- // The main WebChromeClient.
- private final WebChromeClient mClient;
-
- SubWindowChromeClient(Tab t, WebChromeClient client) {
- mTab = t;
- mClient = client;
- }
- @Override
- public void onProgressChanged(WebView view, int newProgress) {
- mClient.onProgressChanged(view, newProgress);
- }
- @Override
- public boolean onCreateWindow(WebView view, boolean dialog,
- boolean userGesture, android.os.Message resultMsg) {
- return mClient.onCreateWindow(view, dialog, userGesture, resultMsg);
- }
- @Override
- public void onCloseWindow(WebView window) {
- if (Browser.DEBUG && window != mTab.mSubView) {
- throw new AssertionError("Can't close the window");
- }
- mActivity.dismissSubWindow(mTab);
- }
- }
- // Background WebChromeClient for focusing tabs
- private class BackgroundChromeClient extends WebChromeClient {
- @Override
- public void onRequestFocus(WebView view) {
- Tab t = getTabFromView(view);
- if (t != getCurrentTab()) {
- mActivity.switchToTab(getTabIndex(t));
- }
- }
- }
-
- // Extra saved information for displaying the tab in the picker.
- public static class PickerData {
- String mUrl;
- String mTitle;
- Bitmap mFavicon;
- float mScale;
- int mScrollX;
- int mScrollY;
- }
-
- /**
- * Private class for maintaining Tabs with a main WebView and a subwindow.
- */
- public class Tab {
- // The Geolocation permissions prompt
- private GeolocationPermissionsPrompt mGeolocationPermissionsPrompt;
- private View mContainer;
- // Main WebView
- private WebView mMainView;
- // Subwindow WebView
- private WebView mSubView;
- // Subwindow container
- private View mSubViewContainer;
- // Subwindow callback
- private SubWindowClient mSubViewClient;
- // Subwindow chrome callback
- private SubWindowChromeClient mSubViewChromeClient;
- // Saved bundle for when we are running low on memory. It contains the
- // information needed to restore the WebView if the user goes back to
- // the tab.
- private Bundle mSavedState;
- // Data used when displaying the tab in the picker.
- private PickerData mPickerData;
-
- // Parent Tab. This is the Tab that created this Tab, or null
- // if the Tab was created by the UI
- private Tab mParentTab;
- // Tab that constructed by this Tab. This is used when this
- // Tab is destroyed, it clears all mParentTab values in the
- // children.
- private Vector<Tab> mChildTabs;
-
- private Boolean mCloseOnExit;
- // Application identifier used to find tabs that another application
- // wants to reuse.
- private String mAppId;
- // Keep the original url around to avoid killing the old WebView if the
- // url has not changed.
- private String mOriginalUrl;
-
- private ErrorConsoleView mErrorConsole;
- // the lock icon type and previous lock icon type for the tab
- private int mSavedLockIconType;
- private int mSavedPrevLockIconType;
-
- // Construct a new tab
- private Tab(WebView w, boolean closeOnExit, String appId, String url, Context context) {
- mCloseOnExit = closeOnExit;
- mAppId = appId;
- mOriginalUrl = url;
- mSavedLockIconType = BrowserActivity.LOCK_ICON_UNSECURE;
- mSavedPrevLockIconType = BrowserActivity.LOCK_ICON_UNSECURE;
-
- // The tab consists of a container view, which contains the main
- // WebView, as well as any other UI elements associated with the tab.
- LayoutInflater factory = LayoutInflater.from(context);
- mContainer = factory.inflate(R.layout.tab, null);
-
- mGeolocationPermissionsPrompt =
- (GeolocationPermissionsPrompt) mContainer.findViewById(
- R.id.geolocation_permissions_prompt);
-
- setWebView(w);
- }
-
- /**
- * Sets the WebView for this tab, correctly removing the old WebView
- * from the container view.
- */
- public void setWebView(WebView w) {
- if (mMainView == w) {
- return;
- }
- // If the WebView is changing, the page will be reloaded, so any ongoing Geolocation
- // permission requests are void.
- mGeolocationPermissionsPrompt.hide();
-
- // Just remove the old one.
- FrameLayout wrapper =
- (FrameLayout) mContainer.findViewById(R.id.webview_wrapper);
- wrapper.removeView(mMainView);
- mMainView = w;
- }
-
- /**
- * This method attaches both the WebView and any sub window to the
- * given content view.
- */
- public void attachTabToContentView(ViewGroup content) {
- if (mMainView == null) {
- return;
- }
-
- // Attach the WebView to the container and then attach the
- // container to the content view.
- FrameLayout wrapper =
- (FrameLayout) mContainer.findViewById(R.id.webview_wrapper);
- wrapper.addView(mMainView);
- content.addView(mContainer, BrowserActivity.COVER_SCREEN_PARAMS);
- attachSubWindow(content);
- }
-
- /**
- * Remove the WebView and any sub window from the given content view.
- */
- public void removeTabFromContentView(ViewGroup content) {
- if (mMainView == null) {
- return;
- }
-
- // Remove the container from the content and then remove the
- // WebView from the container. This will trigger a focus change
- // needed by WebView.
- FrameLayout wrapper =
- (FrameLayout) mContainer.findViewById(R.id.webview_wrapper);
- wrapper.removeView(mMainView);
- content.removeView(mContainer);
- removeSubWindow(content);
- }
-
- /**
- * Attach the sub window to the content view.
- */
- public void attachSubWindow(ViewGroup content) {
- if (mSubView != null) {
- content.addView(mSubViewContainer,
- BrowserActivity.COVER_SCREEN_PARAMS);
- }
- }
-
- /**
- * Remove the sub window from the content view.
- */
- public void removeSubWindow(ViewGroup content) {
- if (mSubView != null) {
- content.removeView(mSubViewContainer);
- }
- }
-
- /**
- * Return the top window of this tab; either the subwindow if it is not
- * null or the main window.
- * @return The top window of this tab.
- */
- public WebView getTopWindow() {
- if (mSubView != null) {
- return mSubView;
- }
- return mMainView;
- }
-
- /**
- * Return the main window of this tab. Note: if a tab is freed in the
- * background, this can return null. It is only guaranteed to be
- * non-null for the current tab.
- * @return The main WebView of this tab.
- */
- public WebView getWebView() {
- return mMainView;
- }
-
- /**
- * @return The geolocation permissions prompt for this tab.
- */
- public GeolocationPermissionsPrompt getGeolocationPermissionsPrompt() {
- return mGeolocationPermissionsPrompt;
- }
-
- /**
- * Return the subwindow of this tab or null if there is no subwindow.
- * @return The subwindow of this tab or null.
- */
- public WebView getSubWebView() {
- return mSubView;
- }
-
- /**
- * Get the url of this tab. Valid after calling populatePickerData, but
- * before calling wipePickerData, or if the webview has been destroyed.
- *
- * @return The WebView's url or null.
- */
- public String getUrl() {
- if (mPickerData != null) {
- return mPickerData.mUrl;
- }
- return null;
- }
-
- /**
- * Get the title of this tab. Valid after calling populatePickerData,
- * but before calling wipePickerData, or if the webview has been
- * destroyed. If the url has no title, use the url instead.
- *
- * @return The WebView's title (or url) or null.
- */
- public String getTitle() {
- if (mPickerData != null) {
- return mPickerData.mTitle;
- }
- return null;
- }
-
- public Bitmap getFavicon() {
- if (mPickerData != null) {
- return mPickerData.mFavicon;
- }
- return null;
- }
-
- private void setParentTab(Tab parent) {
- mParentTab = parent;
- // This tab may have been freed due to low memory. If that is the
- // case, the parent tab index is already saved. If we are changing
- // that index (most likely due to removing the parent tab) we must
- // update the parent tab index in the saved Bundle.
- if (mSavedState != null) {
- if (parent == null) {
- mSavedState.remove(PARENTTAB);
- } else {
- mSavedState.putInt(PARENTTAB, getTabIndex(parent));
- }
- }
- }
-
- /**
- * When a Tab is created through the content of another Tab, then
- * we associate the Tabs.
- * @param child the Tab that was created from this Tab
- */
- public void addChildTab(Tab child) {
- if (mChildTabs == null) {
- mChildTabs = new Vector<Tab>();
- }
- mChildTabs.add(child);
- child.setParentTab(this);
- }
-
- private void removeFromTree() {
- // detach the children
- if (mChildTabs != null) {
- for(Tab t : mChildTabs) {
- t.setParentTab(null);
- }
- }
-
- // Find myself in my parent list
- if (mParentTab != null) {
- mParentTab.mChildTabs.remove(this);
- }
- }
-
- /**
- * If this Tab was created through another Tab, then this method
- * returns that Tab.
- * @return the Tab parent or null
- */
- public Tab getParentTab() {
- return mParentTab;
- }
-
- /**
- * Return whether this tab should be closed when it is backing out of
- * the first page.
- * @return TRUE if this tab should be closed when exit.
- */
- public boolean closeOnExit() {
- return mCloseOnExit;
- }
-
- void setLockIconType(int type) {
- mSavedLockIconType = type;
- }
-
- int getLockIconType() {
- return mSavedLockIconType;
- }
-
- void setPrevLockIconType(int type) {
- mSavedPrevLockIconType = type;
- }
-
- int getPrevLockIconType() {
- return mSavedPrevLockIconType;
- }
- };
-
// Directory to store thumbnails for each WebView.
private final File mThumbnailDir;
@@ -468,9 +51,6 @@
*/
TabControl(BrowserActivity activity) {
mActivity = activity;
- mInflateService =
- ((LayoutInflater) activity.getSystemService(
- Context.LAYOUT_INFLATER_SERVICE));
mThumbnailDir = activity.getDir("thumbnails", 0);
}
@@ -492,29 +72,7 @@
if (t == null) {
return null;
}
- return t.mMainView;
- }
-
- /**
- * Return the current tab's error console. Creates the console if createIfNEcessary
- * is true and we haven't already created the console.
- * @param createIfNecessary Flag to indicate if the console should be created if it has
- * not been already.
- * @return The current tab's error console, or null if one has not been created and
- * createIfNecessary is false.
- */
- ErrorConsoleView getCurrentErrorConsole(boolean createIfNecessary) {
- Tab t = getTab(mCurrentTab);
- if (t == null) {
- return null;
- }
-
- if (createIfNecessary && t.mErrorConsole == null) {
- t.mErrorConsole = new ErrorConsoleView(mActivity);
- t.mErrorConsole.setWebView(t.mMainView);
- }
-
- return t.mErrorConsole;
+ return t.getWebView();
}
/**
@@ -527,7 +85,7 @@
if (t == null) {
return null;
}
- return t.mSubView != null ? t.mSubView : t.mMainView;
+ return t.getTopWindow();
}
/**
@@ -539,7 +97,7 @@
if (t == null) {
return null;
}
- return t.mSubView;
+ return t.getSubWebView();
}
/**
@@ -582,6 +140,10 @@
return mTabs.indexOf(tab);
}
+ boolean canCreateNewTab() {
+ return MAX_TABS != mTabs.size();
+ }
+
/**
* Create a new tab.
* @return The newly createTab or null if we have reached the maximum
@@ -596,10 +158,10 @@
final WebView w = createNewWebView();
// Create a new tab and add it to the tab list
- Tab t = new Tab(w, closeOnExit, appId, url, mActivity);
+ Tab t = new Tab(mActivity, w, closeOnExit, appId, url);
mTabs.add(t);
// Initially put the tab in the background.
- putTabInBackground(t);
+ t.putInBackground();
return t;
}
@@ -612,6 +174,15 @@
}
/**
+ * Remove the parent child relationships from all tabs.
+ */
+ void removeParentChildRelationShips() {
+ for (Tab tab : mTabs) {
+ tab.removeFromTree();
+ }
+ }
+
+ /**
* Remove the tab from the list. If the tab is the current tab shown, the
* last created tab will be shown.
* @param t The tab to be removed.
@@ -620,86 +191,51 @@
if (t == null) {
return false;
}
+
// Only remove the tab if it is the current one.
if (getCurrentTab() == t) {
- putTabInBackground(t);
+ t.putInBackground();
+ mCurrentTab = -1;
}
- // Only destroy the WebView if it still exists.
- if (t.mMainView != null) {
- // Take down the sub window.
- dismissSubWindow(t);
- // Remove the WebView's settings from the BrowserSettings list of
- // observers.
- BrowserSettings.getInstance().deleteObserver(
- t.mMainView.getSettings());
- WebView w = t.mMainView;
- t.setWebView(null);
- // Destroy the main view
- w.destroy();
- }
+ // destroy the tab
+ t.destroy();
// clear it's references to parent and children
t.removeFromTree();
-
// Remove it from our list of tabs.
mTabs.remove(t);
// The tab indices have shifted, update all the saved state so we point
// to the correct index.
for (Tab tab : mTabs) {
- if (tab.mChildTabs != null) {
- for (Tab child : tab.mChildTabs) {
+ Vector<Tab> children = tab.getChildTabs();
+ if (children != null) {
+ for (Tab child : children) {
child.setParentTab(tab);
}
}
}
-
// This tab may have been pushed in to the background and then closed.
// If the saved state contains a picture file, delete the file.
- if (t.mSavedState != null) {
- if (t.mSavedState.containsKey(CURRPICTURE)) {
- new File(t.mSavedState.getString(CURRPICTURE)).delete();
+ Bundle savedState = t.getSavedState();
+ if (savedState != null) {
+ if (savedState.containsKey(Tab.CURRPICTURE)) {
+ new File(savedState.getString(Tab.CURRPICTURE)).delete();
}
}
// Remove it from the queue of viewed tabs.
mTabQueue.remove(t);
- mCurrentTab = -1;
return true;
}
/**
- * Clear the back/forward list for all the current tabs.
- */
- void clearHistory() {
- int size = getTabCount();
- for (int i = 0; i < size; i++) {
- Tab t = mTabs.get(i);
- // TODO: if a tab is freed due to low memory, its history is not
- // cleared here.
- if (t.mMainView != null) {
- t.mMainView.clearHistory();
- }
- if (t.mSubView != null) {
- t.mSubView.clearHistory();
- }
- }
- }
-
- /**
* Destroy all the tabs and subwindows
*/
void destroy() {
- BrowserSettings s = BrowserSettings.getInstance();
for (Tab t : mTabs) {
- if (t.mMainView != null) {
- dismissSubWindow(t);
- s.deleteObserver(t.mMainView.getSettings());
- WebView w = t.mMainView;
- t.setWebView(null);
- w.destroy();
- }
+ t.destroy();
}
mTabs.clear();
mTabQueue.clear();
@@ -713,17 +249,6 @@
return mTabs.size();
}
- // Used for saving and restoring each Tab
- private static final String WEBVIEW = "webview";
- private static final String NUMTABS = "numTabs";
- private static final String CURRTAB = "currentTab";
- private static final String CURRURL = "currentUrl";
- private static final String CURRTITLE = "currentTitle";
- private static final String CURRPICTURE = "currentPicture";
- private static final String CLOSEONEXIT = "closeonexit";
- private static final String PARENTTAB = "parentTab";
- private static final String APPID = "appid";
- private static final String ORIGINALURL = "originalUrl";
/**
* Save the state of all the Tabs.
@@ -731,13 +256,13 @@
*/
void saveState(Bundle outState) {
final int numTabs = getTabCount();
- outState.putInt(NUMTABS, numTabs);
+ outState.putInt(Tab.NUMTABS, numTabs);
final int index = getCurrentIndex();
- outState.putInt(CURRTAB, (index >= 0 && index < numTabs) ? index : 0);
+ outState.putInt(Tab.CURRTAB, (index >= 0 && index < numTabs) ? index : 0);
for (int i = 0; i < numTabs; i++) {
final Tab t = getTab(i);
- if (saveState(t)) {
- outState.putBundle(WEBVIEW + i, t.mSavedState);
+ if (t.saveState()) {
+ outState.putBundle(Tab.WEBVIEW + i, t.getSavedState());
}
}
}
@@ -750,33 +275,34 @@
*/
boolean restoreState(Bundle inState) {
final int numTabs = (inState == null)
- ? -1 : inState.getInt(NUMTABS, -1);
+ ? -1 : inState.getInt(Tab.NUMTABS, -1);
if (numTabs == -1) {
return false;
} else {
- final int currentTab = inState.getInt(CURRTAB, -1);
+ final int currentTab = inState.getInt(Tab.CURRTAB, -1);
for (int i = 0; i < numTabs; i++) {
if (i == currentTab) {
Tab t = createNewTab();
// Me must set the current tab before restoring the state
// so that all the client classes are set.
setCurrentTab(t);
- if (!restoreState(inState.getBundle(WEBVIEW + i), t)) {
+ if (!t.restoreState(inState.getBundle(Tab.WEBVIEW + i))) {
Log.w(LOGTAG, "Fail in restoreState, load home page.");
- t.mMainView.loadUrl(BrowserSettings.getInstance()
+ t.getWebView().loadUrl(BrowserSettings.getInstance()
.getHomePage());
}
} else {
// Create a new tab and don't restore the state yet, add it
// to the tab list
- Tab t = new Tab(null, false, null, null, mActivity);
- t.mSavedState = inState.getBundle(WEBVIEW + i);
- if (t.mSavedState != null) {
- populatePickerDataFromSavedState(t);
+ Tab t = new Tab(mActivity, null, false, null, null);
+ Bundle state = inState.getBundle(Tab.WEBVIEW + i);
+ if (state != null) {
+ t.setSavedState(state);
+ t.populatePickerDataFromSavedState();
// Need to maintain the app id and original url so we
// can possibly reuse this tab.
- t.mAppId = t.mSavedState.getString(APPID);
- t.mOriginalUrl = t.mSavedState.getString(ORIGINALURL);
+ t.setAppId(state.getString(Tab.APPID));
+ t.setOriginalUrl(state.getString(Tab.ORIGINALURL));
}
mTabs.add(t);
mTabQueue.add(t);
@@ -785,10 +311,10 @@
// Rebuild the tree of tabs. Do this after all tabs have been
// created/restored so that the parent tab exists.
for (int i = 0; i < numTabs; i++) {
- final Bundle b = inState.getBundle(WEBVIEW + i);
+ final Bundle b = inState.getBundle(Tab.WEBVIEW + i);
final Tab t = getTab(i);
if (b != null && t != null) {
- final int parentIndex = b.getInt(PARENTTAB, -1);
+ final int parentIndex = b.getInt(Tab.PARENTTAB, -1);
if (parentIndex != -1) {
final Tab parent = getTab(parentIndex);
if (parent != null) {
@@ -812,9 +338,10 @@
Tab t = getLeastUsedTab(getCurrentTab());
if (t != null) {
Log.w(LOGTAG, "Free a tab in the browser");
- freeTab(t);
- // force a gc
- System.gc();
+ // store the WebView's state.
+ t.saveState();
+ // destroy the tab
+ t.destroy();
return;
}
@@ -824,8 +351,6 @@
if (view != null) {
view.freeMemory();
}
- // force a gc
- System.gc();
}
private Tab getLeastUsedTab(Tab current) {
@@ -835,7 +360,7 @@
return null;
}
- // Rip through the queue starting at the beginning and teardown the
+ // Rip through the queue starting at the beginning and tear down the
// next available tab.
Tab t = null;
int i = 0;
@@ -846,69 +371,18 @@
do {
t = mTabQueue.get(i++);
} while (i < queueSize
- && ((t != null && t.mMainView == null)
- || t == current.mParentTab));
+ && ((t != null && t.getWebView() == null)
+ || t == current.getParentTab()));
// Don't do anything if the last remaining tab is the current one or if
// the last tab has been freed already.
- if (t == current || t.mMainView == null) {
+ if (t == current || t.getWebView() == null) {
return null;
}
return t;
}
- private void freeTab(Tab t) {
- // Store the WebView's state.
- saveState(t);
-
- // Tear down the tab.
- dismissSubWindow(t);
- // Remove the WebView's settings from the BrowserSettings list of
- // observers.
- BrowserSettings.getInstance().deleteObserver(t.mMainView.getSettings());
- WebView w = t.mMainView;
- t.setWebView(null);
- w.destroy();
- }
-
- /**
- * Create a new subwindow unless a subwindow already exists.
- * @return True if a new subwindow was created. False if one already exists.
- */
- void createSubWindow() {
- Tab t = getTab(mCurrentTab);
- if (t != null && t.mSubView == null) {
- final View v = mInflateService.inflate(R.layout.browser_subwindow, null);
- final WebView w = (WebView) v.findViewById(R.id.webview);
- w.setMapTrackballToArrowKeys(false); // use trackball directly
- final SubWindowClient subClient =
- new SubWindowClient(mActivity.getWebViewClient());
- final SubWindowChromeClient subChromeClient =
- new SubWindowChromeClient(t,
- mActivity.getWebChromeClient());
- w.setWebViewClient(subClient);
- w.setWebChromeClient(subChromeClient);
- w.setDownloadListener(mActivity);
- w.setOnCreateContextMenuListener(mActivity);
- final BrowserSettings s = BrowserSettings.getInstance();
- s.addObserver(w.getSettings()).update(s, null);
- t.mSubView = w;
- t.mSubViewClient = subClient;
- t.mSubViewChromeClient = subChromeClient;
- // FIXME: I really hate having to know the name of the view
- // containing the webview.
- t.mSubViewContainer = v.findViewById(R.id.subwindow_container);
- final ImageButton cancel =
- (ImageButton) v.findViewById(R.id.subwindow_close);
- cancel.setOnClickListener(new OnClickListener() {
- public void onClick(View v) {
- subChromeClient.onCloseWindow(w);
- }
- });
- }
- }
-
/**
* Show the tab that contains the given WebView.
* @param view The WebView used to find the tab.
@@ -917,7 +391,7 @@
final int size = getTabCount();
for (int i = 0; i < size; i++) {
final Tab t = getTab(i);
- if (t.mSubView == view || t.mMainView == view) {
+ if (t.getSubWebView() == view || t.getWebView() == view) {
return t;
}
}
@@ -935,22 +409,42 @@
final int size = getTabCount();
for (int i = 0; i < size; i++) {
final Tab t = getTab(i);
- if (id.equals(t.mAppId)) {
+ if (id.equals(t.getAppId())) {
return t;
}
}
return null;
}
+ /**
+ * Stop loading in all opened WebView including subWindows.
+ */
+ void stopAllLoading() {
+ final int size = getTabCount();
+ for (int i = 0; i < size; i++) {
+ final Tab t = getTab(i);
+ final WebView webview = t.getWebView();
+ if (webview != null) {
+ webview.stopLoading();
+ }
+ final WebView subview = t.getSubWebView();
+ if (subview != null) {
+ webview.stopLoading();
+ }
+ }
+ }
+
// This method checks if a non-app tab (one created within the browser)
// matches the given url.
private boolean tabMatchesUrl(Tab t, String url) {
- if (t.mAppId != null) {
+ if (t.getAppId() != null) {
return false;
- } else if (t.mMainView == null) {
+ }
+ WebView webview = t.getWebView();
+ if (webview == null) {
return false;
- } else if (url.equals(t.mMainView.getUrl()) ||
- url.equals(t.mMainView.getOriginalUrl())) {
+ } else if (url.equals(webview.getUrl())
+ || url.equals(webview.getOriginalUrl())) {
return true;
}
return false;
@@ -986,9 +480,9 @@
* was deleted.
*/
boolean recreateWebView(Tab t, String url) {
- final WebView w = t.mMainView;
+ final WebView w = t.getWebView();
if (w != null) {
- if (url != null && url.equals(t.mOriginalUrl)) {
+ if (url != null && url.equals(t.getOriginalUrl())) {
// The original url matches the current url. Just go back to the
// first history item so we can load it faster than if we
// rebuilt the WebView.
@@ -999,11 +493,7 @@
return false;
}
}
- // Remove the settings object from the global settings and destroy
- // the WebView.
- BrowserSettings.getInstance().deleteObserver(
- t.mMainView.getSettings());
- t.mMainView.destroy();
+ t.destroy();
}
// Create a new WebView. If this tab is the current tab, we need to put
// back all the clients so force it to be the current tab.
@@ -1011,12 +501,11 @@
if (getCurrentTab() == t) {
setCurrentTab(t, true);
}
- // Clear the saved state except for the app id and close-on-exit
- // values.
- t.mSavedState = null;
- t.mPickerData = null;
+ // Clear the saved state and picker data
+ t.setSavedState(null);
+ t.clearPickerData();
// Save the new url in order to avoid deleting the WebView.
- t.mOriginalUrl = url;
+ t.setOriginalUrl(url);
return true;
}
@@ -1031,22 +520,18 @@
w.setMapTrackballToArrowKeys(false); // use trackball directly
// Enable the built-in zoom
w.getSettings().setBuiltInZoomControls(true);
+ // Attach DownloadManager so that downloads can start in an active or
+ // a non-active window. This can happen when going to a site that does
+ // a redirect after a period of time. The user could have switched to
+ // another tab while waiting for the download to start.
+ w.setDownloadListener(mActivity);
// Add this WebView to the settings observer list and update the
// settings
final BrowserSettings s = BrowserSettings.getInstance();
s.addObserver(w.getSettings()).update(s, null);
// pick a default
- {
- MeshTracker mt = new MeshTracker(2);
- Paint paint = new Paint();
- Bitmap bm = BitmapFactory.decodeResource(mActivity.getResources(),
- R.drawable.pattern_carbon_fiber_dark);
- paint.setShader(new BitmapShader(bm, Shader.TileMode.REPEAT,
- Shader.TileMode.REPEAT));
- mt.setBGPaint(paint);
- w.setDragTracker(mt);
- }
+ w.setDragTracker(new MeshTracker(1));
return w;
}
@@ -1059,48 +544,20 @@
return setCurrentTab(newTab, false);
}
- /*package*/ void pauseCurrentTab() {
+ void pauseCurrentTab() {
Tab t = getCurrentTab();
if (t != null) {
- t.mMainView.onPause();
- if (t.mSubView != null) {
- t.mSubView.onPause();
- }
+ t.pause();
}
}
- /*package*/ void resumeCurrentTab() {
+ void resumeCurrentTab() {
Tab t = getCurrentTab();
if (t != null) {
- t.mMainView.onResume();
- if (t.mSubView != null) {
- t.mSubView.onResume();
- }
+ t.resume();
}
}
- private void putViewInForeground(WebView v, WebViewClient vc,
- WebChromeClient cc) {
- v.setWebViewClient(vc);
- v.setWebChromeClient(cc);
- v.setOnCreateContextMenuListener(mActivity);
- v.setDownloadListener(mActivity);
- v.onResume();
- }
-
- private void putViewInBackground(WebView v) {
- // Set an empty callback so that default actions are not triggered.
- v.setWebViewClient(mEmptyClient);
- v.setWebChromeClient(mBackgroundChromeClient);
- v.setOnCreateContextMenuListener(null);
- // Leave the DownloadManager attached so that downloads can start in
- // a non-active window. This can happen when going to a site that does
- // a redirect after a period of time. The user could have switched to
- // another tab while waiting for the download to start.
- v.setDownloadListener(mActivity);
- v.onPause();
- }
-
/**
* If force is true, this method skips the check for newTab == current.
*/
@@ -1110,10 +567,9 @@
return true;
}
if (current != null) {
- // Remove the current WebView and the container of the subwindow
- putTabInBackground(current);
+ current.putInBackground();
+ mCurrentTab = -1;
}
-
if (newTab == null) {
return false;
}
@@ -1125,214 +581,22 @@
}
mTabQueue.add(newTab);
- WebView mainView;
-
// Display the new current tab
mCurrentTab = mTabs.indexOf(newTab);
- mainView = newTab.mMainView;
+ WebView mainView = newTab.getWebView();
boolean needRestore = (mainView == null);
if (needRestore) {
// Same work as in createNewTab() except don't do new Tab()
mainView = createNewWebView();
newTab.setWebView(mainView);
}
- putViewInForeground(mainView, mActivity.getWebViewClient(),
- mActivity.getWebChromeClient());
- // Add the subwindow if it exists
- if (newTab.mSubViewContainer != null) {
- putViewInForeground(newTab.mSubView, newTab.mSubViewClient,
- newTab.mSubViewChromeClient);
- }
+ newTab.putInForeground();
if (needRestore) {
// Have to finish setCurrentTab work before calling restoreState
- if (!restoreState(newTab.mSavedState, newTab)) {
+ if (!newTab.restoreState(newTab.getSavedState())) {
mainView.loadUrl(BrowserSettings.getInstance().getHomePage());
}
}
return true;
}
-
- /*
- * Put the tab in the background using all the empty/background clients.
- */
- private void putTabInBackground(Tab t) {
- putViewInBackground(t.mMainView);
- if (t.mSubView != null) {
- putViewInBackground(t.mSubView);
- }
- }
-
- /*
- * Dismiss the subwindow for the given tab.
- */
- void dismissSubWindow(Tab t) {
- if (t != null && t.mSubView != null) {
- BrowserSettings.getInstance().deleteObserver(
- t.mSubView.getSettings());
- t.mSubView.destroy();
- t.mSubView = null;
- t.mSubViewContainer = null;
- }
- }
-
- /**
- * Ensure that Tab t has data to display in the tab picker.
- * @param t Tab to populate.
- */
- /* package */ void populatePickerData(Tab t) {
- if (t == null) {
- return;
- }
-
- // mMainView == null indicates that the tab has been freed.
- if (t.mMainView == null) {
- populatePickerDataFromSavedState(t);
- return;
- }
-
- // FIXME: The only place we cared about subwindow was for
- // bookmarking (i.e. not when saving state). Was this deliberate?
- final WebBackForwardList list = t.mMainView.copyBackForwardList();
- final WebHistoryItem item =
- list != null ? list.getCurrentItem() : null;
- populatePickerData(t, item);
- }
-
- // Create the PickerData and populate it using the saved state of the tab.
- private void populatePickerDataFromSavedState(Tab t) {
- if (t.mSavedState == null) {
- return;
- }
-
- final PickerData data = new PickerData();
- final Bundle state = t.mSavedState;
- data.mUrl = state.getString(CURRURL);
- data.mTitle = state.getString(CURRTITLE);
- // XXX: These keys are from WebView.savePicture so if they change, this
- // will break.
- data.mScale = state.getFloat("scale", 1.0f);
- data.mScrollX = state.getInt("scrollX", 0);
- data.mScrollY = state.getInt("scrollY", 0);
-
- // Set the tab's picker data.
- t.mPickerData = data;
- }
-
- // Populate the picker data using the given history item and the current
- // top WebView.
- private void populatePickerData(Tab t, WebHistoryItem item) {
- final PickerData data = new PickerData();
- if (item != null) {
- data.mUrl = item.getUrl();
- data.mTitle = item.getTitle();
- data.mFavicon = item.getFavicon();
- if (data.mTitle == null) {
- data.mTitle = data.mUrl;
- }
- }
- // We want to display the top window in the tab picker but use the url
- // and title of the main window.
- final WebView w = t.getTopWindow();
- data.mScale = w.getScale();
- data.mScrollX = w.getScrollX();
- data.mScrollY = w.getScrollY();
-
- t.mPickerData = data;
- }
-
- /**
- * Clean up the data for all tabs.
- */
- /* package */ void wipeAllPickerData() {
- int size = getTabCount();
- for (int i = 0; i < size; i++) {
- final Tab t = getTab(i);
- if (t != null && t.mSavedState == null) {
- t.mPickerData = null;
- }
- }
- }
-
- /*
- * Save the state for an individual tab.
- */
- private boolean saveState(Tab t) {
- if (t != null) {
- final WebView w = t.mMainView;
- // If the WebView is null it means we ran low on memory and we
- // already stored the saved state in mSavedState.
- if (w == null) {
- return true;
- }
- final Bundle b = new Bundle();
- final WebBackForwardList list = w.saveState(b);
- if (list != null) {
- final File f = new File(mThumbnailDir, w.hashCode()
- + "_pic.save");
- if (w.savePicture(b, f)) {
- b.putString(CURRPICTURE, f.getPath());
- }
- }
-
- // Store some extra info for displaying the tab in the picker.
- final WebHistoryItem item =
- list != null ? list.getCurrentItem() : null;
- populatePickerData(t, item);
-
- // XXX: WebView.savePicture stores the scale and scroll positions
- // in the bundle so we don't have to do it here.
- final PickerData data = t.mPickerData;
- if (data.mUrl != null) {
- b.putString(CURRURL, data.mUrl);
- }
- if (data.mTitle != null) {
- b.putString(CURRTITLE, data.mTitle);
- }
- b.putBoolean(CLOSEONEXIT, t.mCloseOnExit);
- if (t.mAppId != null) {
- b.putString(APPID, t.mAppId);
- }
- if (t.mOriginalUrl != null) {
- b.putString(ORIGINALURL, t.mOriginalUrl);
- }
-
- // Remember the parent tab so the relationship can be restored.
- if (t.mParentTab != null) {
- b.putInt(PARENTTAB, getTabIndex(t.mParentTab));
- }
-
- // Remember the saved state.
- t.mSavedState = b;
- return true;
- }
- return false;
- }
-
- /*
- * Restore the state of the tab.
- */
- private boolean restoreState(Bundle b, Tab t) {
- if (b == null) {
- return false;
- }
- // Restore the internal state even if the WebView fails to restore.
- // This will maintain the app id, original url and close-on-exit values.
- t.mSavedState = null;
- t.mPickerData = null;
- t.mCloseOnExit = b.getBoolean(CLOSEONEXIT);
- t.mAppId = b.getString(APPID);
- t.mOriginalUrl = b.getString(ORIGINALURL);
-
- final WebView w = t.mMainView;
- final WebBackForwardList list = w.restoreState(b);
- if (list == null) {
- return false;
- }
- if (b.containsKey(CURRPICTURE)) {
- final File f = new File(b.getString(CURRPICTURE));
- w.restorePicture(b, f);
- f.delete();
- }
- return true;
- }
}
diff --git a/src/com/android/browser/TitleBar.java b/src/com/android/browser/TitleBar.java
index 23b1ed5..a9da7c0 100644
--- a/src/com/android/browser/TitleBar.java
+++ b/src/com/android/browser/TitleBar.java
@@ -17,6 +17,9 @@
package com.android.browser;
import android.content.Context;
+import android.content.Intent;
+import android.content.pm.PackageManager;
+import android.content.pm.ResolveInfo;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.Color;
@@ -28,6 +31,7 @@
import android.graphics.drawable.PaintDrawable;
import android.os.Handler;
import android.os.Message;
+import android.speech.RecognizerIntent;
import android.util.TypedValue;
import android.view.ContextMenu;
import android.view.LayoutInflater;
@@ -54,12 +58,15 @@
private ImageView mLockIcon;
private Drawable mStopDrawable;
private Drawable mBookmarkDrawable;
+ private Drawable mVoiceDrawable;
private boolean mInLoad;
private BrowserActivity mBrowserActivity;
private Drawable mGenericFavicon;
private int mIconDimension;
private View mTitleBg;
private MyHandler mHandler;
+ private Intent mVoiceSearchIntent;
+ private boolean mInVoiceMode;
private static int LONG_PRESS = 1;
@@ -89,6 +96,20 @@
R.id.progress_horizontal);
mGenericFavicon = context.getResources().getDrawable(
R.drawable.app_web_browser_sm);
+ mVoiceSearchIntent = new Intent(RecognizerIntent.ACTION_WEB_SEARCH);
+ mVoiceSearchIntent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL,
+ RecognizerIntent.LANGUAGE_MODEL_WEB_SEARCH);
+ PackageManager pm = context.getPackageManager();
+ ResolveInfo ri = pm.resolveActivity(mVoiceSearchIntent,
+ PackageManager.MATCH_DEFAULT_ONLY);
+ if (ri == null) {
+ mVoiceSearchIntent = null;
+ } else {
+ mVoiceDrawable = resources.getDrawable(
+ android.R.drawable.ic_btn_speak_now);
+ }
+ mStopDrawable = resources.getDrawable(R.drawable.ic_btn_stop_v2);
+ mBookmarkDrawable = mRtButton.getDrawable();
}
private class MyHandler extends Handler {
@@ -155,7 +176,9 @@
break;
case MotionEvent.ACTION_UP:
if (mRtButton.isPressed()) {
- if (mInLoad) {
+ if (mInVoiceMode) {
+ mBrowserActivity.startActivity(mVoiceSearchIntent);
+ } else if (mInLoad) {
mBrowserActivity.stopLoading();
} else {
mBrowserActivity.bookmarksOrHistoryPicker(false);
@@ -174,14 +197,6 @@
}
/**
- * Return whether the associated WebView is currently loading. Needed to
- * determine whether a click should stop the load or close the tab.
- */
- /* package */ boolean isInLoad() {
- return mInLoad;
- }
-
- /**
* Set a new Bitmap for the Favicon.
*/
/* package */ void setFavicon(Bitmap icon) {
@@ -201,6 +216,22 @@
}
/**
+ * Change the TitleBar to or from voice mode. If there is no package to
+ * handle voice search, the TitleBar cannot be set to voice mode.
+ */
+ /* package */ void setInVoiceMode(boolean inVoiceMode) {
+ if (mInVoiceMode == inVoiceMode) return;
+ mInVoiceMode = inVoiceMode && mVoiceSearchIntent != null;
+ if (mInVoiceMode) {
+ mRtButton.setImageDrawable(mVoiceDrawable);
+ } else if (mInLoad) {
+ mRtButton.setImageDrawable(mStopDrawable);
+ } else {
+ mRtButton.setImageDrawable(mBookmarkDrawable);
+ }
+ }
+
+ /**
* Set the Drawable for the lock icon, or null to hide it.
*/
/* package */ void setLock(Drawable d) {
@@ -220,7 +251,7 @@
mTitle.setCompoundDrawables(null, null, null, null);
((Animatable) mCircularProgress).stop();
mHorizontalProgress.setVisibility(View.INVISIBLE);
- if (mBookmarkDrawable != null) {
+ if (!mInVoiceMode) {
mRtButton.setImageDrawable(mBookmarkDrawable);
}
mInLoad = false;
@@ -235,13 +266,7 @@
null);
((Animatable) mCircularProgress).start();
mHorizontalProgress.setVisibility(View.VISIBLE);
- if (mBookmarkDrawable == null) {
- mBookmarkDrawable = mRtButton.getDrawable();
- }
- if (mStopDrawable == null) {
- mRtButton.setImageResource(R.drawable.ic_btn_stop_v2);
- mStopDrawable = mRtButton.getDrawable();
- } else {
+ if (!mInVoiceMode) {
mRtButton.setImageDrawable(mStopDrawable);
}
mInLoad = true;
diff --git a/src/com/android/browser/WebsiteSettingsActivity.java b/src/com/android/browser/WebsiteSettingsActivity.java
index 047867a..430286f 100644
--- a/src/com/android/browser/WebsiteSettingsActivity.java
+++ b/src/com/android/browser/WebsiteSettingsActivity.java
@@ -88,6 +88,10 @@
mFeatures |= (1 << feature);
}
+ public void removeFeature(int feature) {
+ mFeatures &= ~(1 << feature);
+ }
+
public boolean hasFeature(int feature) {
return (mFeatures & (1 << feature)) != 0;
}
@@ -168,7 +172,7 @@
mResource = rsc;
mInflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
mDefaultIcon = BitmapFactory.decodeResource(getResources(),
- R.drawable.ic_launcher_shortcut_browser_bookmark);
+ R.drawable.app_web_browser_sm);
mUsageEmptyIcon = BitmapFactory.decodeResource(getResources(),
R.drawable.ic_list_data_off);
mUsageLowIcon = BitmapFactory.decodeResource(getResources(),
@@ -280,7 +284,16 @@
Iterator<Site> sitesIter = matchingSites.iterator();
while (sitesIter.hasNext()) {
Site site = sitesIter.next();
- site.setTitle(title);
+ // We should only set the title if the bookmark is for the root
+ // (i.e. www.google.com), as website settings act on the origin
+ // as a whole rather than a single page under that origin. If the
+ // user has bookmarked a page under the root but *not* the root,
+ // then we risk displaying the title of that page which may or
+ // may not have any relevance to the origin.
+ if (url.equals(site.getOrigin()) ||
+ (new String(site.getOrigin()+"/")).equals(url)) {
+ site.setTitle(title);
+ }
if (bmp != null) {
site.setIcon(bmp);
}
@@ -323,7 +336,7 @@
// We display the size in MB, to 1dp, rounding up to the next 0.1MB.
// bytes should always be greater than zero.
if (bytes <= 0) {
- Log.e(LOGTAG, "sizeValueToString called with non-positive value");
+ Log.e(LOGTAG, "sizeValueToString called with non-positive value: " + bytes);
return "0";
}
float megabytes = (float) bytes / (1024.0F * 1024.0F);
@@ -354,8 +367,6 @@
*/
public void setIconForUsage(ImageView usageIcon, long usageInBytes) {
float usageInMegabytes = (float) usageInBytes / (1024.0F * 1024.0F);
- usageIcon.setVisibility(View.VISIBLE);
-
// We set the correct icon:
// 0 < empty < 0.1MB
// 0.1MB < low < 5MB
@@ -373,9 +384,10 @@
View view;
final TextView title;
final TextView subtitle;
- ImageView icon;
+ final ImageView icon;
final ImageView usageIcon;
final ImageView locationIcon;
+ final ImageView featureIcon;
if (convertView == null) {
view = mInflater.inflate(mResource, parent, false);
@@ -386,6 +398,7 @@
title = (TextView) view.findViewById(R.id.title);
subtitle = (TextView) view.findViewById(R.id.subtitle);
icon = (ImageView) view.findViewById(R.id.icon);
+ featureIcon = (ImageView) view.findViewById(R.id.feature_icon);
usageIcon = (ImageView) view.findViewById(R.id.usage_icon);
locationIcon = (ImageView) view.findViewById(R.id.location_icon);
usageIcon.setVisibility(View.GONE);
@@ -396,10 +409,22 @@
Site site = getItem(position);
title.setText(site.getPrettyTitle());
- subtitle.setText(site.getPrettyOrigin());
+ String subtitleText = site.getPrettyOrigin();
+ if (subtitleText != null) {
+ title.setMaxLines(1);
+ title.setSingleLine(true);
+ subtitle.setVisibility(View.VISIBLE);
+ subtitle.setText(subtitleText);
+ } else {
+ subtitle.setVisibility(View.GONE);
+ title.setMaxLines(2);
+ title.setSingleLine(false);
+ }
+
icon.setVisibility(View.VISIBLE);
usageIcon.setVisibility(View.INVISIBLE);
locationIcon.setVisibility(View.INVISIBLE);
+ featureIcon.setVisibility(View.GONE);
Bitmap bmp = site.getIcon();
if (bmp == null) {
bmp = mDefaultIcon;
@@ -415,6 +440,7 @@
public void onReceiveValue(Long value) {
if (value != null) {
setIconForUsage(usageIcon, value.longValue());
+ usageIcon.setVisibility(View.VISIBLE);
}
}
});
@@ -435,8 +461,11 @@
});
}
} else {
- setTitle(mCurrentSite.getPrettyTitle());
icon.setVisibility(View.GONE);
+ locationIcon.setVisibility(View.GONE);
+ usageIcon.setVisibility(View.GONE);
+ featureIcon.setVisibility(View.VISIBLE);
+ setTitle(mCurrentSite.getPrettyTitle());
String origin = mCurrentSite.getOrigin();
switch (mCurrentSite.getFeatureByIndex(position)) {
case Site.FEATURE_WEB_STORAGE:
@@ -446,6 +475,8 @@
String usage = sizeValueToString(value.longValue()) + " " + sMBStored;
title.setText(R.string.webstorage_clear_data_title);
subtitle.setText(usage);
+ subtitle.setVisibility(View.VISIBLE);
+ setIconForUsage(featureIcon, value.longValue());
}
}
});
@@ -457,9 +488,12 @@
if (allowed != null) {
if (allowed.booleanValue()) {
subtitle.setText(R.string.geolocation_settings_page_summary_allowed);
+ featureIcon.setImageBitmap(mLocationAllowedIcon);
} else {
subtitle.setText(R.string.geolocation_settings_page_summary_not_allowed);
+ featureIcon.setImageBitmap(mLocationDisallowedIcon);
}
+ subtitle.setVisibility(View.VISIBLE);
}
}
});
@@ -484,8 +518,14 @@
new AlertDialog.OnClickListener() {
public void onClick(DialogInterface dlg, int which) {
WebStorage.getInstance().deleteOrigin(mCurrentSite.getOrigin());
- mCurrentSite = null;
+ // If this site has no more features, then go back to the
+ // origins list.
+ mCurrentSite.removeFeature(Site.FEATURE_WEB_STORAGE);
+ if (mCurrentSite.getFeatureCount() == 0) {
+ mCurrentSite = null;
+ }
askForOrigins();
+ notifyDataSetChanged();
}})
.setNegativeButton(R.string.webstorage_clear_data_dialog_cancel_button, null)
.setIcon(android.R.drawable.ic_dialog_alert)
@@ -499,8 +539,12 @@
new AlertDialog.OnClickListener() {
public void onClick(DialogInterface dlg, int which) {
GeolocationPermissions.getInstance().clear(mCurrentSite.getOrigin());
- mCurrentSite = null;
+ mCurrentSite.removeFeature(Site.FEATURE_GEOLOCATION);
+ if (mCurrentSite.getFeatureCount() == 0) {
+ mCurrentSite = null;
+ }
askForOrigins();
+ notifyDataSetChanged();
}})
.setNegativeButton(R.string.geolocation_settings_page_dialog_cancel_button, null)
.setIcon(android.R.drawable.ic_dialog_alert)
@@ -512,6 +556,10 @@
notifyDataSetChanged();
}
}
+
+ public Site currentSite() {
+ return mCurrentSite;
+ }
}
/**
@@ -548,8 +596,9 @@
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
- // If we aren't listing any sites hide the clear all button (and hence the menu).
- return mAdapter.getCount() > 0;
+ // If we are not on the sites list (rather on the page for a specific site) or
+ // we aren't listing any sites hide the clear all button (and hence the menu).
+ return mAdapter.currentSite() == null && mAdapter.getCount() > 0;
}
@Override