diff options
72 files changed, 427 insertions, 1305 deletions
diff --git a/AndroidManifest.xml b/AndroidManifest.xml index 3a281c9..3fafc18 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -41,6 +41,8 @@ <uses-permission android:name="android.permission.READ_SYNC_SETTINGS" /> <uses-permission android:name="android.permission.WRITE_SYNC_SETTINGS" /> <uses-permission android:name="android.permission.MANAGE_ACCOUNTS" /> + <uses-permission android:name="android.permission.READ_PROFILE" /> + <uses-permission android:name="android.permission.READ_CONTACTS" /> <uses-permission android:name="com.android.browser.permission.READ_HISTORY_BOOKMARKS"/> <uses-permission android:name="com.android.browser.permission.WRITE_HISTORY_BOOKMARKS"/> <uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT"/> diff --git a/res/layout-port/autofill_settings_fragment.xml b/res/layout-port/autofill_settings_fragment.xml index 097074b..9f26fd9 100644 --- a/res/layout-port/autofill_settings_fragment.xml +++ b/res/layout-port/autofill_settings_fragment.xml @@ -43,37 +43,19 @@ android:layout_width="match_parent" /> <TextView - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:gravity="center_vertical" - android:layout_margin="2dip" - android:textAppearance="?android:attr/textAppearanceMedium" + style="@style/AutofillProfileTextView" android:text="@string/autofill_profile_editor_name" /> <EditText android:id="@+id/autofill_profile_editor_name_edit" - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:gravity="center_vertical" - android:layout_margin="2dip" - android:textAppearance="?android:attr/textAppearanceMedium" - android:inputType="textPersonName|textCapWords" - android:singleLine="true" - android:imeOptions="actionNext" /> + style="@style/AutofillProfileEditText" + android:inputType="textPersonName|textCapWords" /> + <TextView - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:gravity="center_vertical" - android:layout_margin="2dip" - android:textAppearance="?android:attr/textAppearanceMedium" + style="@style/AutofillProfileTextView" android:text="@string/autofill_profile_editor_company_name" /> <EditText android:id="@+id/autofill_profile_editor_company_name_edit" - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:gravity="center_vertical" - android:layout_margin="2dip" - android:textAppearance="?android:attr/textAppearanceMedium" - android:inputType="textCapWords" - android:singleLine="true" - android:imeOptions="actionNext" /> + style="@style/AutofillProfileEditText" + android:inputType="textCapWords" /> + <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_height="wrap_content" @@ -93,14 +75,9 @@ android:text="@string/autofill_profile_editor_address_line_1_hint" /> </LinearLayout> <EditText android:id="@+id/autofill_profile_editor_address_line_1_edit" - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:gravity="center_vertical" - android:layout_margin="2dip" - android:textAppearance="?android:attr/textAppearanceMedium" - android:inputType="textCapWords" - android:singleLine="true" - android:imeOptions="actionNext" /> + style="@style/AutofillProfileEditText" + android:inputType="textCapWords" /> + <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_height="wrap_content" @@ -120,122 +97,51 @@ android:text="@string/autofill_profile_editor_address_line_2_hint" /> </LinearLayout> <EditText android:id="@+id/autofill_profile_editor_address_line_2_edit" - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:gravity="bottom" - android:layout_margin="2dip" - android:textAppearance="?android:attr/textAppearanceMedium" - android:inputType="textCapWords" - android:singleLine="true" - android:imeOptions="actionNext" /> + style="@style/AutofillProfileEditText" + android:inputType="textCapWords" /> + <TextView - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:gravity="center_vertical" - android:layout_margin="2dip" - android:textAppearance="?android:attr/textAppearanceMedium" + style="@style/AutofillProfileTextView" android:text="@string/autofill_profile_editor_city" /> <EditText android:id="@+id/autofill_profile_editor_city_edit" - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:gravity="center_vertical" - android:layout_margin="2dip" - android:inputType="textCapWords" - android:textAppearance="?android:attr/textAppearanceMedium" - android:singleLine="true" - android:imeOptions="actionNext" /> + style="@style/AutofillProfileEditText" + android:inputType="textCapWords" /> + <TextView - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:gravity="center_vertical" - android:layout_margin="2dip" - android:textAppearance="?android:attr/textAppearanceMedium" + style="@style/AutofillProfileTextView" android:text="@string/autofill_profile_editor_state" /> <EditText android:id="@+id/autofill_profile_editor_state_edit" - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:gravity="center_vertical" - android:layout_margin="2dip" - android:inputType="textCapWords" - android:textAppearance="?android:attr/textAppearanceMedium" - android:singleLine="true" - android:imeOptions="actionNext" /> + style="@style/AutofillProfileEditText" + android:inputType="textCapWords" /> + <TextView - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:gravity="center_vertical" - android:layout_margin="2dip" - android:textAppearance="?android:attr/textAppearanceMedium" + style="@style/AutofillProfileTextView" android:text="@string/autofill_profile_editor_zip_code" /> <EditText android:id="@+id/autofill_profile_editor_zip_code_edit" - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:gravity="center_vertical" - android:layout_margin="2dip" - android:inputType="textCapCharacters" - android:textAppearance="?android:attr/textAppearanceMedium" - android:singleLine="true" - android:imeOptions="actionNext" /> + style="@style/AutofillProfileEditText" + android:inputType="textCapCharacters" /> + <TextView - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:gravity="center_vertical" - android:layout_margin="2dip" - android:textAppearance="?android:attr/textAppearanceMedium" + style="@style/AutofillProfileTextView" android:text="@string/autofill_profile_editor_country" /> <EditText android:id="@+id/autofill_profile_editor_country_edit" - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:gravity="center_vertical" - android:layout_margin="2dip" - android:inputType="textCapWords" - android:textAppearance="?android:attr/textAppearanceMedium" - android:singleLine="true" - android:imeOptions="actionNext" /> + style="@style/AutofillProfileEditText" + android:inputType="textCapWords" /> + <TextView - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:gravity="center_vertical" - android:layout_margin="2dip" - android:textAppearance="?android:attr/textAppearanceMedium" + style="@style/AutofillProfileTextView" android:text="@string/autofill_profile_editor_phone_number" /> <EditText android:id="@+id/autofill_profile_editor_phone_number_edit" - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:gravity="center_vertical" - android:layout_margin="2dip" - android:textAppearance="?android:attr/textAppearanceMedium" - android:singleLine="true" - android:phoneNumber="true" - android:imeOptions="actionNext" /> + style="@style/AutofillProfileEditText" + android:phoneNumber="true" /> + <TextView - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:gravity="center_vertical" - android:layout_margin="2dip" - android:textAppearance="?android:attr/textAppearanceMedium" + style="@style/AutofillProfileTextView" android:text="@string/autofill_profile_editor_email_address" /> <EditText android:id="@+id/autofill_profile_editor_email_address_edit" - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:gravity="center_vertical" - android:layout_margin="2dip" - android:textAppearance="?android:attr/textAppearanceMedium" + style="@style/AutofillProfileEditText" android:inputType="textEmailAddress" - android:singleLine="true" - android:imeOptions="actionDone" /> + android:imeOptions="actionDone|flagNoExtractUi" /> </LinearLayout> </ScrollView> - - <View - android:layout_height="12dip" - android:layout_width="match_parent" /> - - <Button - android:id="@+id/autofill_profile_editor_save_button" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:text="@string/autofill_profile_editor_save_profile" - android:textAppearance="?android:attr/textAppearanceMedium" /> - </LinearLayout> diff --git a/res/layout/autofill_settings_fragment.xml b/res/layout/autofill_settings_fragment.xml index 44bf8f0..e667b86 100644 --- a/res/layout/autofill_settings_fragment.xml +++ b/res/layout/autofill_settings_fragment.xml @@ -49,39 +49,19 @@ android:stretchColumns="1"> <TableRow> <TextView - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:gravity="center_vertical" - android:layout_margin="2dip" - android:textAppearance="?android:attr/textAppearanceMedium" + style="@style/AutofillProfileTextView" android:text="@string/autofill_profile_editor_name" /> <EditText android:id="@+id/autofill_profile_editor_name_edit" - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:gravity="center_vertical" - android:layout_margin="2dip" - android:textAppearance="?android:attr/textAppearanceMedium" - android:inputType="textPersonName|textCapWords" - android:singleLine="true" - android:imeOptions="actionNext" /> + style="@style/AutofillProfileEditText" + android:inputType="textPersonName|textCapWords" /> </TableRow> <TableRow> <TextView - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:gravity="center_vertical" - android:layout_margin="2dip" - android:textAppearance="?android:attr/textAppearanceMedium" + style="@style/AutofillProfileTextView" android:text="@string/autofill_profile_editor_company_name" /> <EditText android:id="@+id/autofill_profile_editor_company_name_edit" - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:gravity="center_vertical" - android:layout_margin="2dip" - android:textAppearance="?android:attr/textAppearanceMedium" - android:inputType="textCapWords" - android:singleLine="true" - android:imeOptions="actionNext" /> + style="@style/AutofillProfileEditText" + android:inputType="textCapWords" /> </TableRow> <TableRow> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" @@ -103,14 +83,8 @@ android:text="@string/autofill_profile_editor_address_line_1_hint" /> </LinearLayout> <EditText android:id="@+id/autofill_profile_editor_address_line_1_edit" - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:gravity="center_vertical" - android:layout_margin="2dip" - android:textAppearance="?android:attr/textAppearanceMedium" - android:inputType="textCapWords" - android:singleLine="true" - android:imeOptions="actionNext" /> + style="@style/AutofillProfileEditText" + android:inputType="textCapWords" /> </TableRow> <TableRow> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" @@ -132,137 +106,60 @@ android:text="@string/autofill_profile_editor_address_line_2_hint" /> </LinearLayout> <EditText android:id="@+id/autofill_profile_editor_address_line_2_edit" - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:gravity="bottom" - android:layout_margin="2dip" - android:textAppearance="?android:attr/textAppearanceMedium" - android:inputType="textCapWords" - android:singleLine="true" - android:imeOptions="actionNext" /> + style="@style/AutofillProfileEditText" + android:inputType="textCapWords" /> </TableRow> <TableRow> <TextView - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:gravity="center_vertical" - android:layout_margin="2dip" - android:textAppearance="?android:attr/textAppearanceMedium" + style="@style/AutofillProfileTextView" android:text="@string/autofill_profile_editor_city" /> <EditText android:id="@+id/autofill_profile_editor_city_edit" - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:gravity="center_vertical" - android:layout_margin="2dip" - android:inputType="textCapWords" - android:textAppearance="?android:attr/textAppearanceMedium" - android:singleLine="true" - android:imeOptions="actionNext" /> + style="@style/AutofillProfileEditText" + android:inputType="textCapWords" /> </TableRow> <TableRow> <TextView - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:gravity="center_vertical" - android:layout_margin="2dip" - android:textAppearance="?android:attr/textAppearanceMedium" + style="@style/AutofillProfileTextView" android:text="@string/autofill_profile_editor_state" /> <EditText android:id="@+id/autofill_profile_editor_state_edit" - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:gravity="center_vertical" - android:layout_margin="2dip" - android:inputType="textCapWords" - android:textAppearance="?android:attr/textAppearanceMedium" - android:singleLine="true" - android:imeOptions="actionNext" /> + style="@style/AutofillProfileEditText" + android:inputType="textCapWords" /> </TableRow> <TableRow> <TextView - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:gravity="center_vertical" - android:layout_margin="2dip" - android:textAppearance="?android:attr/textAppearanceMedium" + style="@style/AutofillProfileTextView" android:text="@string/autofill_profile_editor_zip_code" /> <EditText android:id="@+id/autofill_profile_editor_zip_code_edit" - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:gravity="center_vertical" - android:layout_margin="2dip" - android:inputType="textCapCharacters" - android:textAppearance="?android:attr/textAppearanceMedium" - android:singleLine="true" - android:imeOptions="actionNext" /> + style="@style/AutofillProfileEditText" + android:inputType="textCapCharacters" /> </TableRow> <TableRow> <TextView - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:gravity="center_vertical" - android:layout_margin="2dip" - android:textAppearance="?android:attr/textAppearanceMedium" + style="@style/AutofillProfileTextView" android:text="@string/autofill_profile_editor_country" /> <EditText android:id="@+id/autofill_profile_editor_country_edit" - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:gravity="center_vertical" - android:layout_margin="2dip" - android:inputType="textCapWords" - android:textAppearance="?android:attr/textAppearanceMedium" - android:singleLine="true" - android:imeOptions="actionNext" /> + style="@style/AutofillProfileEditText" + android:inputType="textCapWords" /> </TableRow> <TableRow> <TextView - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:gravity="center_vertical" - android:layout_margin="2dip" - android:textAppearance="?android:attr/textAppearanceMedium" + style="@style/AutofillProfileTextView" android:text="@string/autofill_profile_editor_phone_number" /> <EditText android:id="@+id/autofill_profile_editor_phone_number_edit" - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:gravity="center_vertical" - android:layout_margin="2dip" - android:textAppearance="?android:attr/textAppearanceMedium" - android:singleLine="true" - android:phoneNumber="true" - android:imeOptions="actionNext" /> + style="@style/AutofillProfileEditText" + android:phoneNumber="true" /> </TableRow> <TableRow> <TextView - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:gravity="center_vertical" - android:layout_margin="2dip" - android:textAppearance="?android:attr/textAppearanceMedium" + style="@style/AutofillProfileTextView" android:text="@string/autofill_profile_editor_email_address" /> <EditText android:id="@+id/autofill_profile_editor_email_address_edit" - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:gravity="center_vertical" - android:layout_margin="2dip" - android:textAppearance="?android:attr/textAppearanceMedium" + style="@style/AutofillProfileEditText" android:inputType="textEmailAddress" - android:singleLine="true" - android:imeOptions="actionDone" /> + android:imeOptions="actionDone|flagNoExtractUi" /> </TableRow> </TableLayout> </LinearLayout> </ScrollView> - - <View - android:layout_height="12dip" - android:layout_width="match_parent" /> - - <Button - android:id="@+id/autofill_profile_editor_save_button" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:text="@string/autofill_profile_editor_save_profile" - android:textAppearance="?android:attr/textAppearanceMedium" /> - </LinearLayout> diff --git a/res/menu/autofill_profile_editor.xml b/res/menu/autofill_profile_editor.xml index 4e746e5..9dab635 100644 --- a/res/menu/autofill_profile_editor.xml +++ b/res/menu/autofill_profile_editor.xml @@ -15,6 +15,11 @@ --> <menu xmlns:android="http://schemas.android.com/apk/res/android"> + <item android:id="@+id/autofill_profile_editor_save_profile_menu_id" + android:title="@string/autofill_profile_editor_save_profile" + android:icon="@android:drawable/ic_menu_save" + android:showAsAction="ifRoom|withText" /> + <item android:id="@+id/autofill_profile_editor_delete_profile_menu_id" android:title="@string/autofill_profile_editor_delete_profile" android:icon="@android:drawable/ic_menu_delete" diff --git a/res/menu/browser.xml b/res/menu/browser.xml index bd40c51..b0c25ea 100644 --- a/res/menu/browser.xml +++ b/res/menu/browser.xml @@ -96,10 +96,6 @@ android:id="@+id/dump_nav_menu_id" android:title="@string/dump_nav" android:visible="false" /> - <item - android:id="@+id/dump_counters_menu_id" - android:title="@string/dump_counters" - android:visible="false" /> </group> <group android:id="@+id/MAIN_SHORTCUT_MENU" android:visible="false"> <item android:id="@+id/view_downloads_menu_id" diff --git a/res/values-af/strings.xml b/res/values-af/strings.xml index 9896b3b..2c966a6 100644 --- a/res/values-af/strings.xml +++ b/res/values-af/strings.xml @@ -181,7 +181,7 @@ <string name="autofill_profile_successful_save" msgid="5691459703493331983">"Outo-invul-teks gestoor."</string> <string name="autofill_profile_successful_delete" msgid="1790262652460723127">"Outo-invul-teks uitgevee."</string> <string name="autofill_profile_editor_delete_profile" msgid="3098369314558164153">"Vee uit"</string> - <string name="autofill_setup_dialog_message" msgid="1096164985825394616">"Die blaaier kan outomaties webvorms soos hierdie een voltooi. Wil jy jou outo-invul-teks opstel?"</string> + <!-- outdated translation 1096164985825394616 --> <string name="autofill_setup_dialog_message" msgid="7123905786076456503">"Die blaaier kan outomaties webvorms soos hierdie een voltooi. Wil jy jou outo-invul-teks opstel?"</string> <string name="autofill_setup_dialog_negative_toast" msgid="3288881675232206984">"Jy kan altyd jou outo-invul-teks opstel in Blaaier > Instellings > Algemeen."</string> <string name="disable_autofill" msgid="8305901059849400354">"Deaktiveer outo-invul"</string> <string name="pref_privacy_security_title" msgid="3480313968942160914">"Privaatheid en sekuriteit"</string> diff --git a/res/values-am/strings.xml b/res/values-am/strings.xml index fa00ae7..323d0f3 100644 --- a/res/values-am/strings.xml +++ b/res/values-am/strings.xml @@ -181,7 +181,7 @@ <string name="autofill_profile_successful_save" msgid="5691459703493331983">"ራስ ሰር-ሙላ ጽሑፍ ተቀምጧል::"</string> <string name="autofill_profile_successful_delete" msgid="1790262652460723127">"ራስ ሰር-ሙላ ጽሑፍ ተሰርዟል::"</string> <string name="autofill_profile_editor_delete_profile" msgid="3098369314558164153">"ሰርዝ"</string> - <string name="autofill_setup_dialog_message" msgid="1096164985825394616">"አሳሹ እንደዚህ ዓይነቶቹን የድር ቅርጾች በራስ ሰር ያሟላል፡፡ የራስህን ራስ-ሙላ ጽሑፍ ማዘጋጀት ትፈልጋለህ?"</string> + <!-- outdated translation 1096164985825394616 --> <string name="autofill_setup_dialog_message" msgid="7123905786076456503">"አሳሹ እንደዚህ ዓይነቶቹን የድር ቅርጾች በራስ ሰር ያሟላል፡፡ የራስህን ራስ-ሙላ ጽሑፍ ማዘጋጀት ትፈልጋለህ?"</string> <string name="autofill_setup_dialog_negative_toast" msgid="3288881675232206984">"የራስህን ራስ ሰር ሙላ ጽሑፍ ከአሳሽ ላይ> ቅንጅቶች> አጠቃላይ ማያ ላይ ሁልጊዜ ማዘጋጀት ትችላለህ፡፡"</string> <string name="disable_autofill" msgid="8305901059849400354">"ራስ-ሙላ አቦዝን"</string> <string name="pref_privacy_security_title" msgid="3480313968942160914">"ግላዊነት& ደህንነት"</string> diff --git a/res/values-ar/strings.xml b/res/values-ar/strings.xml index bad1e41..36d2170 100644 --- a/res/values-ar/strings.xml +++ b/res/values-ar/strings.xml @@ -181,7 +181,7 @@ <string name="autofill_profile_successful_save" msgid="5691459703493331983">"تم حفظ نص الملء التلقائي."</string> <string name="autofill_profile_successful_delete" msgid="1790262652460723127">"تم حذف نص الملء التلقائي."</string> <string name="autofill_profile_editor_delete_profile" msgid="3098369314558164153">"حذف"</string> - <string name="autofill_setup_dialog_message" msgid="1096164985825394616">"يمكن للمتصفح إكمال نماذج الويب مثل هذه تلقائيًا. هل تريد إعداد نص الملء التلقائي؟"</string> + <!-- outdated translation 1096164985825394616 --> <string name="autofill_setup_dialog_message" msgid="7123905786076456503">"يمكن للمتصفح إكمال نماذج الويب مثل هذه تلقائيًا. هل تريد إعداد نص الملء التلقائي؟"</string> <string name="autofill_setup_dialog_negative_toast" msgid="3288881675232206984">"يمكنك دائمًا إعداد نص الملء التلقائي من المتصفح > الإعدادات > الشاشة العامة."</string> <string name="disable_autofill" msgid="8305901059849400354">"تعطيل الملء التلقائي"</string> <string name="pref_privacy_security_title" msgid="3480313968942160914">"الخصوصية والأمان"</string> diff --git a/res/values-bg/strings.xml b/res/values-bg/strings.xml index fa35317..51f8dad 100644 --- a/res/values-bg/strings.xml +++ b/res/values-bg/strings.xml @@ -181,7 +181,7 @@ <string name="autofill_profile_successful_save" msgid="5691459703493331983">"Текстът за автоматично попълване е запазен."</string> <string name="autofill_profile_successful_delete" msgid="1790262652460723127">"Текстът за автоматично попълване е изтрит."</string> <string name="autofill_profile_editor_delete_profile" msgid="3098369314558164153">"Изтриване"</string> - <string name="autofill_setup_dialog_message" msgid="1096164985825394616">"Браузърът може автоматично да попълва уеб формуляри като този. Искате ли да зададете текст за автоматично попълване?"</string> + <!-- outdated translation 1096164985825394616 --> <string name="autofill_setup_dialog_message" msgid="7123905786076456503">"Браузърът може автоматично да попълва уеб формуляри като този. Искате ли да зададете текст за автоматично попълване?"</string> <string name="autofill_setup_dialog_negative_toast" msgid="3288881675232206984">"Винаги можете да зададете текст за автоматично попълване от екрана „Браузър“ > „Настройки“ > „Общи“."</string> <string name="disable_autofill" msgid="8305901059849400354">"Деактивиране на автоматичното попълване"</string> <string name="pref_privacy_security_title" msgid="3480313968942160914">"Поверителност и сигурност"</string> diff --git a/res/values-ca/strings.xml b/res/values-ca/strings.xml index f72a50e..f921a75 100644 --- a/res/values-ca/strings.xml +++ b/res/values-ca/strings.xml @@ -181,7 +181,7 @@ <string name="autofill_profile_successful_save" msgid="5691459703493331983">"S\'ha desat el text d\'emplenament automàtic."</string> <string name="autofill_profile_successful_delete" msgid="1790262652460723127">"S\'ha suprimit el text d\'emplenament automàtic."</string> <string name="autofill_profile_editor_delete_profile" msgid="3098369314558164153">"Suprimeix"</string> - <string name="autofill_setup_dialog_message" msgid="1096164985825394616">"El navegador pot emplenar automàticament formularis web com aquest. Vols configurar el text d\'emplenament automàtic?"</string> + <!-- outdated translation 1096164985825394616 --> <string name="autofill_setup_dialog_message" msgid="7123905786076456503">"El navegador pot emplenar automàticament formularis web com aquest. Vols configurar el text d\'emplenament automàtic?"</string> <string name="autofill_setup_dialog_negative_toast" msgid="3288881675232206984">"Pots configurar el text d\'emplenament automàtic sempre que vulguis des de la pantalla Navegador > Configuració > General."</string> <string name="disable_autofill" msgid="8305901059849400354">"Desactiva l\'emplenament automàtic"</string> <string name="pref_privacy_security_title" msgid="3480313968942160914">"Privadesa i seguretat"</string> diff --git a/res/values-cs/strings.xml b/res/values-cs/strings.xml index 5057707..c1e0378 100644 --- a/res/values-cs/strings.xml +++ b/res/values-cs/strings.xml @@ -181,7 +181,7 @@ <string name="autofill_profile_successful_save" msgid="5691459703493331983">"Text pro automatické vyplňování byl uložen."</string> <string name="autofill_profile_successful_delete" msgid="1790262652460723127">"Text automatického vyplňování byl smazán."</string> <string name="autofill_profile_editor_delete_profile" msgid="3098369314558164153">"Smazat"</string> - <string name="autofill_setup_dialog_message" msgid="1096164985825394616">"Podobné webové formuláře může prohlížeč vyplňovat automaticky. Chcete nastavit automatické vyplňování textu?"</string> + <!-- outdated translation 1096164985825394616 --> <string name="autofill_setup_dialog_message" msgid="7123905786076456503">"Podobné webové formuláře může prohlížeč vyplňovat automaticky. Chcete nastavit automatické vyplňování textu?"</string> <string name="autofill_setup_dialog_negative_toast" msgid="3288881675232206984">"Automatické vyplňování můžete kdykoliv nastavit na obrazovce Prohlížeč > Nastavení > Obecné."</string> <string name="disable_autofill" msgid="8305901059849400354">"Vypnout automatické vyplňování"</string> <string name="pref_privacy_security_title" msgid="3480313968942160914">"Ochrana osobních údajů a zabezpečení"</string> diff --git a/res/values-da/strings.xml b/res/values-da/strings.xml index 71f40a8..0a84101 100644 --- a/res/values-da/strings.xml +++ b/res/values-da/strings.xml @@ -181,7 +181,7 @@ <string name="autofill_profile_successful_save" msgid="5691459703493331983">"AutoFyld-tekst er gemt."</string> <string name="autofill_profile_successful_delete" msgid="1790262652460723127">"AutoFyld-teksten er slettet."</string> <string name="autofill_profile_editor_delete_profile" msgid="3098369314558164153">"Slet"</string> - <string name="autofill_setup_dialog_message" msgid="1096164985825394616">"Browseren kan automatisk udfylde webformularer som denne. Vil du oprette din AutoFyld-tekst?"</string> + <!-- outdated translation 1096164985825394616 --> <string name="autofill_setup_dialog_message" msgid="7123905786076456503">"Browseren kan automatisk udfylde webformularer som denne. Vil du oprette din AutoFyld-tekst?"</string> <string name="autofill_setup_dialog_negative_toast" msgid="3288881675232206984">"Du kan altid oprette din AutoFyld-tekst fra skærmen Browser > Indstillinger > Generelt."</string> <string name="disable_autofill" msgid="8305901059849400354">"Deaktiver AutoFyld"</string> <string name="pref_privacy_security_title" msgid="3480313968942160914">"Sikkerhed og personlige oplysninger"</string> diff --git a/res/values-de/strings.xml b/res/values-de/strings.xml index 2d6f48f..61db540 100644 --- a/res/values-de/strings.xml +++ b/res/values-de/strings.xml @@ -181,7 +181,7 @@ <string name="autofill_profile_successful_save" msgid="5691459703493331983">"AutoFill-Text gespeichert"</string> <string name="autofill_profile_successful_delete" msgid="1790262652460723127">"AutoFill-Text gelöscht"</string> <string name="autofill_profile_editor_delete_profile" msgid="3098369314558164153">"Löschen"</string> - <string name="autofill_setup_dialog_message" msgid="1096164985825394616">"Webformulare dieser Art können vom Browser automatisch ausgefüllt werden. Möchten Sie Formulare automatisch ausfüllen?"</string> + <!-- outdated translation 1096164985825394616 --> <string name="autofill_setup_dialog_message" msgid="7123905786076456503">"Webformulare dieser Art können vom Browser automatisch ausgefüllt werden. Möchten Sie Formulare automatisch ausfüllen?"</string> <string name="autofill_setup_dialog_negative_toast" msgid="3288881675232206984">"Den AutoFill-Text können Sie jederzeit im Browser unter > \"Einstellungen\" > \"Allgemein\" einrichten."</string> <string name="disable_autofill" msgid="8305901059849400354">"AutoFill deaktivieren"</string> <string name="pref_privacy_security_title" msgid="3480313968942160914">"Datenschutz & Sicherheit"</string> diff --git a/res/values-el/strings.xml b/res/values-el/strings.xml index beabfd2..cb6a127 100644 --- a/res/values-el/strings.xml +++ b/res/values-el/strings.xml @@ -181,7 +181,7 @@ <string name="autofill_profile_successful_save" msgid="5691459703493331983">"Το κείμενο αυτόματης συμπλήρωσης αποθηκεύτηκε."</string> <string name="autofill_profile_successful_delete" msgid="1790262652460723127">"Το κείμενο αυτόματης συμπλήρωσης διαγράφηκε."</string> <string name="autofill_profile_editor_delete_profile" msgid="3098369314558164153">"Διαγραφή"</string> - <string name="autofill_setup_dialog_message" msgid="1096164985825394616">"Το πρόγραμμα περιήγησης μπορεί να συμπληρώσει αυτόματα φόρμες ιστού όπως αυτή. Θέλετε να ρυθμίσετε το κείμενο αυτόματης συμπλήρωσης;"</string> + <!-- outdated translation 1096164985825394616 --> <string name="autofill_setup_dialog_message" msgid="7123905786076456503">"Το πρόγραμμα περιήγησης μπορεί να συμπληρώσει αυτόματα φόρμες ιστού όπως αυτή. Θέλετε να ρυθμίσετε το κείμενο αυτόματης συμπλήρωσης;"</string> <string name="autofill_setup_dialog_negative_toast" msgid="3288881675232206984">"Μπορείτε πάντα να ρυθμίσετε το κείμενο αυτόματης συμπλήρωσης από το στοιχείο Πρόγραμμα περιήγησης > Ρυθμίσεις > Γενική οθόνη."</string> <string name="disable_autofill" msgid="8305901059849400354">"Απενεργοποιήστε τη λειτουργία αυτόματης συμπλήρωσης"</string> <string name="pref_privacy_security_title" msgid="3480313968942160914">"Απόρρητο και ασφάλεια"</string> diff --git a/res/values-en-rGB/strings.xml b/res/values-en-rGB/strings.xml index af16d4b..9a251c1 100644 --- a/res/values-en-rGB/strings.xml +++ b/res/values-en-rGB/strings.xml @@ -181,7 +181,7 @@ <string name="autofill_profile_successful_save" msgid="5691459703493331983">"Auto-fill text saved."</string> <string name="autofill_profile_successful_delete" msgid="1790262652460723127">"Auto-fill text deleted."</string> <string name="autofill_profile_editor_delete_profile" msgid="3098369314558164153">"Delete"</string> - <string name="autofill_setup_dialog_message" msgid="1096164985825394616">"The browser can automatically complete web forms like this one. Would you like to set up your auto-fill text?"</string> + <!-- outdated translation 1096164985825394616 --> <string name="autofill_setup_dialog_message" msgid="7123905786076456503">"The browser can automatically complete web forms like this one. Would you like to set up your auto-fill text?"</string> <string name="autofill_setup_dialog_negative_toast" msgid="3288881675232206984">"You can always set up your auto-fill text from the Browser > Settings > General screen."</string> <string name="disable_autofill" msgid="8305901059849400354">"Disable auto-fill"</string> <string name="pref_privacy_security_title" msgid="3480313968942160914">"Privacy & security"</string> diff --git a/res/values-es-rUS/strings.xml b/res/values-es-rUS/strings.xml index 7db85bb..1ef240b 100644 --- a/res/values-es-rUS/strings.xml +++ b/res/values-es-rUS/strings.xml @@ -181,7 +181,7 @@ <string name="autofill_profile_successful_save" msgid="5691459703493331983">"Texto de autocompletado guardado"</string> <string name="autofill_profile_successful_delete" msgid="1790262652460723127">"Texto autocompletado eliminado"</string> <string name="autofill_profile_editor_delete_profile" msgid="3098369314558164153">"Borrar"</string> - <string name="autofill_setup_dialog_message" msgid="1096164985825394616">"El navegador puede completar formularios web como este de forma automática. ¿Te gustaría configurar el completado automático de texto?"</string> + <!-- outdated translation 1096164985825394616 --> <string name="autofill_setup_dialog_message" msgid="7123905786076456503">"El navegador puede completar formularios web como este de forma automática. ¿Te gustaría configurar el completado automático de texto?"</string> <string name="autofill_setup_dialog_negative_toast" msgid="3288881675232206984">"Siempre puedes configurar el autocompletado de texto desde la pantalla Navegador > Configuración > General."</string> <string name="disable_autofill" msgid="8305901059849400354">"Inhabilitar Autocompletar"</string> <string name="pref_privacy_security_title" msgid="3480313968942160914">"Privacidad & seguridad"</string> diff --git a/res/values-es/strings.xml b/res/values-es/strings.xml index 76f6a9c..0914f1c 100644 --- a/res/values-es/strings.xml +++ b/res/values-es/strings.xml @@ -181,7 +181,7 @@ <string name="autofill_profile_successful_save" msgid="5691459703493331983">"Se ha guardado el texto de la función Autocompletar."</string> <string name="autofill_profile_successful_delete" msgid="1790262652460723127">"Se ha eliminado el texto de la función Autocompletar."</string> <string name="autofill_profile_editor_delete_profile" msgid="3098369314558164153">"Eliminar"</string> - <string name="autofill_setup_dialog_message" msgid="1096164985825394616">"El navegador puede completar automáticamente formularios web como el que aparece a continuación. ¿Quieres configurar la función Autocompletar?"</string> + <!-- outdated translation 1096164985825394616 --> <string name="autofill_setup_dialog_message" msgid="7123905786076456503">"El navegador puede completar automáticamente formularios web como el que aparece a continuación. ¿Quieres configurar la función Autocompletar?"</string> <string name="autofill_setup_dialog_negative_toast" msgid="3288881675232206984">"Siempre puedes configurar la opción Autocompletar desde la pantalla Navegador > Ajustes > Generales."</string> <string name="disable_autofill" msgid="8305901059849400354">"Inhabilitar autocompletar"</string> <string name="pref_privacy_security_title" msgid="3480313968942160914">"Seguridad y privacidad"</string> diff --git a/res/values-fa/strings.xml b/res/values-fa/strings.xml index 992de1f..4c669e7 100644 --- a/res/values-fa/strings.xml +++ b/res/values-fa/strings.xml @@ -181,7 +181,7 @@ <string name="autofill_profile_successful_save" msgid="5691459703493331983">"نوشتاری که بطور خودکار تکمیل شده ذخیره شد."</string> <string name="autofill_profile_successful_delete" msgid="1790262652460723127">"تکمیل خودکار نوشتار حذف شد."</string> <string name="autofill_profile_editor_delete_profile" msgid="3098369314558164153">"حذف"</string> - <string name="autofill_setup_dialog_message" msgid="1096164985825394616">"مرورگر میتواند به طور خودکار فرمهای وب مثل این را کامل کند. آیا میخواهید تکمیل خودکار نوشتار را تنظیم کنید؟"</string> + <!-- outdated translation 1096164985825394616 --> <string name="autofill_setup_dialog_message" msgid="7123905786076456503">"مرورگر میتواند به طور خودکار فرمهای وب مثل این را کامل کند. آیا میخواهید تکمیل خودکار نوشتار را تنظیم کنید؟"</string> <string name="autofill_setup_dialog_negative_toast" msgid="3288881675232206984">"شما همیشه میتوانید تکمیل خودکار نوشتار خود را از مرورگر &gt؛ تنظیمات &gt؛ صفحه عمومی تنظیم کنید."</string> <string name="disable_autofill" msgid="8305901059849400354">"غیرفعال کردن تکمیل خودکار"</string> <string name="pref_privacy_security_title" msgid="3480313968942160914">"حریم خصوصی و امنیت"</string> diff --git a/res/values-fi/strings.xml b/res/values-fi/strings.xml index 5e8f60a..a509705 100644 --- a/res/values-fi/strings.xml +++ b/res/values-fi/strings.xml @@ -181,7 +181,7 @@ <string name="autofill_profile_successful_save" msgid="5691459703493331983">"Automaattisen täytön teksti tallennettu."</string> <string name="autofill_profile_successful_delete" msgid="1790262652460723127">"Automaattisen täytön teksti poistettu."</string> <string name="autofill_profile_editor_delete_profile" msgid="3098369314558164153">"Poista"</string> - <string name="autofill_setup_dialog_message" msgid="1096164985825394616">"Selain voi täyttää automaattisesti tällaiset verkkolomakkeet. Haluatko määrittää automaattisen täytön tekstin?"</string> + <!-- outdated translation 1096164985825394616 --> <string name="autofill_setup_dialog_message" msgid="7123905786076456503">"Selain voi täyttää automaattisesti tällaiset verkkolomakkeet. Haluatko määrittää automaattisen täytön tekstin?"</string> <string name="autofill_setup_dialog_negative_toast" msgid="3288881675232206984">"Voit määrittää automaattisen täytön tekstin kohdassa Selain > Asetukset > Yleisasetukset."</string> <string name="disable_autofill" msgid="8305901059849400354">"Poista automaattinen täyttö käytöstä"</string> <string name="pref_privacy_security_title" msgid="3480313968942160914">"Tietosuoja ja turvallisuus"</string> diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml index 1a08f4d..3a4e999 100644 --- a/res/values-fr/strings.xml +++ b/res/values-fr/strings.xml @@ -181,7 +181,7 @@ <string name="autofill_profile_successful_save" msgid="5691459703493331983">"Texte de saisie automatique enregistré."</string> <string name="autofill_profile_successful_delete" msgid="1790262652460723127">"Texte de saisie automatique supprimé."</string> <string name="autofill_profile_editor_delete_profile" msgid="3098369314558164153">"Supprimer"</string> - <string name="autofill_setup_dialog_message" msgid="1096164985825394616">"Le navigateur peut remplir automatiquement les formulaires Web similaires à celui-ci. Voulez-vous créer un texte de saisie automatique ?"</string> + <!-- outdated translation 1096164985825394616 --> <string name="autofill_setup_dialog_message" msgid="7123905786076456503">"Le navigateur peut remplir automatiquement les formulaires Web similaires à celui-ci. Voulez-vous créer un texte de saisie automatique ?"</string> <string name="autofill_setup_dialog_negative_toast" msgid="3288881675232206984">"Vous pourrez définir un texte de saisie automatique en accédant à Navigateur > Paramètres > Général."</string> <string name="disable_autofill" msgid="8305901059849400354">"Désactiver la saisie automatique"</string> <string name="pref_privacy_security_title" msgid="3480313968942160914">"Confidentialité et sécurité"</string> diff --git a/res/values-hi/strings.xml b/res/values-hi/strings.xml index 4dc836b..2966f92 100644 --- a/res/values-hi/strings.xml +++ b/res/values-hi/strings.xml @@ -181,7 +181,7 @@ <string name="autofill_profile_successful_save" msgid="5691459703493331983">"स्वत: भरण पाठ सहेजा गया."</string> <string name="autofill_profile_successful_delete" msgid="1790262652460723127">"स्वत: भरण पाठ हटाया गया."</string> <string name="autofill_profile_editor_delete_profile" msgid="3098369314558164153">"हटाएं"</string> - <string name="autofill_setup_dialog_message" msgid="1096164985825394616">"इसी की तरह ब्राउज़र स्वचालित रूप से वेब फ़ॉर्म पूर्ण कर सकता है. क्या आप अपना स्वत: भरण पाठ सेट करना चाहते हैं?"</string> + <!-- outdated translation 1096164985825394616 --> <string name="autofill_setup_dialog_message" msgid="7123905786076456503">"इसी की तरह ब्राउज़र स्वचालित रूप से वेब फ़ॉर्म पूर्ण कर सकता है. क्या आप अपना स्वत: भरण पाठ सेट करना चाहते हैं?"</string> <string name="autofill_setup_dialog_negative_toast" msgid="3288881675232206984">"आप कभी भी ब्राउज़र > सेटिंग > सामान्य स्क्रीन से अपना स्वत: भरण पाठ सेट कर सकते हैं."</string> <string name="disable_autofill" msgid="8305901059849400354">"स्वत: भरण अक्षम करें"</string> <string name="pref_privacy_security_title" msgid="3480313968942160914">"गोपनीयता और सुरक्षा"</string> diff --git a/res/values-hr/strings.xml b/res/values-hr/strings.xml index 008c05d..809249f 100644 --- a/res/values-hr/strings.xml +++ b/res/values-hr/strings.xml @@ -181,7 +181,7 @@ <string name="autofill_profile_successful_save" msgid="5691459703493331983">"Tekst automatskog ispunjavanja spremljen."</string> <string name="autofill_profile_successful_delete" msgid="1790262652460723127">"Tekst automatskog ispunjavanja izbrisan."</string> <string name="autofill_profile_editor_delete_profile" msgid="3098369314558164153">"Izbriši"</string> - <string name="autofill_setup_dialog_message" msgid="1096164985825394616">"Preglednik može automatski ispuniti web-obrasce kao što je ovaj. Želite li postaviti svoj tekst za automatsko ispunjavanje?"</string> + <!-- outdated translation 1096164985825394616 --> <string name="autofill_setup_dialog_message" msgid="7123905786076456503">"Preglednik može automatski ispuniti web-obrasce kao što je ovaj. Želite li postaviti svoj tekst za automatsko ispunjavanje?"</string> <string name="autofill_setup_dialog_negative_toast" msgid="3288881675232206984">"Uvijek možete postaviti tekst za automatsko ispunjavanje sa zaslona Preglednik > Postavke > Općenito."</string> <string name="disable_autofill" msgid="8305901059849400354">"Onemogući automatsko popunjavanje"</string> <string name="pref_privacy_security_title" msgid="3480313968942160914">"Privatnost i sigurnost"</string> diff --git a/res/values-hu/strings.xml b/res/values-hu/strings.xml index 604e7c5..d6d0f53 100644 --- a/res/values-hu/strings.xml +++ b/res/values-hu/strings.xml @@ -181,7 +181,7 @@ <string name="autofill_profile_successful_save" msgid="5691459703493331983">"Automatikus kitöltés szövege elmentve."</string> <string name="autofill_profile_successful_delete" msgid="1790262652460723127">"Automatikus kitöltés szövege törölve."</string> <string name="autofill_profile_editor_delete_profile" msgid="3098369314558164153">"Törlés"</string> - <string name="autofill_setup_dialog_message" msgid="1096164985825394616">"A böngésző automatikusan kitölti az ehhez hasonló webes űrlapokat. Szeretné létrehozni az automatikus kitöltés szövegét?"</string> + <!-- outdated translation 1096164985825394616 --> <string name="autofill_setup_dialog_message" msgid="7123905786076456503">"A böngésző automatikusan kitölti az ehhez hasonló webes űrlapokat. Szeretné létrehozni az automatikus kitöltés szövegét?"</string> <string name="autofill_setup_dialog_negative_toast" msgid="3288881675232206984">"Bármikor beállíthatja az automatikus kitöltése szövegét a Böngésző > Beállítások > Általános képernyőn."</string> <string name="disable_autofill" msgid="8305901059849400354">"Automatikus kitöltés letiltása"</string> <string name="pref_privacy_security_title" msgid="3480313968942160914">"Adatvédelem és biztonság"</string> diff --git a/res/values-in/strings.xml b/res/values-in/strings.xml index 7a2210c..0f6b62a 100644 --- a/res/values-in/strings.xml +++ b/res/values-in/strings.xml @@ -181,7 +181,7 @@ <string name="autofill_profile_successful_save" msgid="5691459703493331983">"Teks isi-otomatis disimpan."</string> <string name="autofill_profile_successful_delete" msgid="1790262652460723127">"Teks isi-otomatis dihapus."</string> <string name="autofill_profile_editor_delete_profile" msgid="3098369314558164153">"Hapus"</string> - <string name="autofill_setup_dialog_message" msgid="1096164985825394616">"Peramban dapat melengkapi formulir web seperti ini secara otomatis. Apakah Anda ingin menyiapkan teks isi-otomatis?"</string> + <!-- outdated translation 1096164985825394616 --> <string name="autofill_setup_dialog_message" msgid="7123905786076456503">"Peramban dapat melengkapi formulir web seperti ini secara otomatis. Apakah Anda ingin menyiapkan teks isi-otomatis?"</string> <string name="autofill_setup_dialog_negative_toast" msgid="3288881675232206984">"Anda selalu dapat menyiapkan teks isi-otomatis dari layar Peramban > Setelan > Umum."</string> <string name="disable_autofill" msgid="8305901059849400354">"Nonaktifkan isi-otomatis"</string> <string name="pref_privacy_security_title" msgid="3480313968942160914">"Privasi & keamanan"</string> diff --git a/res/values-it/strings.xml b/res/values-it/strings.xml index 925c684..0e8fccb 100644 --- a/res/values-it/strings.xml +++ b/res/values-it/strings.xml @@ -181,7 +181,7 @@ <string name="autofill_profile_successful_save" msgid="5691459703493331983">"Testo per compilazione automatica salvato."</string> <string name="autofill_profile_successful_delete" msgid="1790262652460723127">"Testo per compilazione automatica eliminato."</string> <string name="autofill_profile_editor_delete_profile" msgid="3098369314558164153">"Elimina"</string> - <string name="autofill_setup_dialog_message" msgid="1096164985825394616">"Il browser può completare automaticamente i moduli web come questo. Vuoi impostare il testo per la compilazione automatica?"</string> + <!-- outdated translation 1096164985825394616 --> <string name="autofill_setup_dialog_message" msgid="7123905786076456503">"Il browser può completare automaticamente i moduli web come questo. Vuoi impostare il testo per la compilazione automatica?"</string> <string name="autofill_setup_dialog_negative_toast" msgid="3288881675232206984">"Puoi sempre impostare il testo per la compilazione automatica dalla schermata Browser > Impostazioni > Generali."</string> <string name="disable_autofill" msgid="8305901059849400354">"Disattiva compilazione automatica"</string> <string name="pref_privacy_security_title" msgid="3480313968942160914">"Privacy e sicurezza"</string> diff --git a/res/values-iw/strings.xml b/res/values-iw/strings.xml index 8b52381..8915719 100644 --- a/res/values-iw/strings.xml +++ b/res/values-iw/strings.xml @@ -181,7 +181,7 @@ <string name="autofill_profile_successful_save" msgid="5691459703493331983">"מילוי אוטומטי של טקסט נשמר."</string> <string name="autofill_profile_successful_delete" msgid="1790262652460723127">"מילוי אוטומטי של טקסט נמחק."</string> <string name="autofill_profile_editor_delete_profile" msgid="3098369314558164153">"מחק"</string> - <string name="autofill_setup_dialog_message" msgid="1096164985825394616">"הדפדפן יכול למלא באופן אוטומטי טופסי אינטרנט כמו זה. האם תרצה להגדיר מילוי אוטומטי של טקסט?"</string> + <!-- outdated translation 1096164985825394616 --> <string name="autofill_setup_dialog_message" msgid="7123905786076456503">"הדפדפן יכול למלא באופן אוטומטי טופסי אינטרנט כמו זה. האם תרצה להגדיר מילוי אוטומטי של טקסט?"</string> <string name="autofill_setup_dialog_negative_toast" msgid="3288881675232206984">"תוכל תמיד להגדיר את המילוי האוטומטי של הטקסט דרך המסך \'דפדפן\' > \'הגדרות\' > \'כללי\'."</string> <string name="disable_autofill" msgid="8305901059849400354">"השבת את \'מילוי אוטומטי\'"</string> <string name="pref_privacy_security_title" msgid="3480313968942160914">"פרטיות ואבטחה"</string> diff --git a/res/values-ja/strings.xml b/res/values-ja/strings.xml index e597b5f..5eaab66 100644 --- a/res/values-ja/strings.xml +++ b/res/values-ja/strings.xml @@ -181,7 +181,7 @@ <string name="autofill_profile_successful_save" msgid="5691459703493331983">"自動入力テキストを保存しました。"</string> <string name="autofill_profile_successful_delete" msgid="1790262652460723127">"自動入力テキストを削除しました。"</string> <string name="autofill_profile_editor_delete_profile" msgid="3098369314558164153">"削除"</string> - <string name="autofill_setup_dialog_message" msgid="1096164985825394616">"このようにウェブフォームのデータを自動的に入力できます。自動入力テキストを設定しますか?"</string> + <!-- outdated translation 1096164985825394616 --> <string name="autofill_setup_dialog_message" msgid="7123905786076456503">"このようにウェブフォームのデータを自動的に入力できます。自動入力テキストを設定しますか?"</string> <string name="autofill_setup_dialog_negative_toast" msgid="3288881675232206984">"自動入力テキストは[ブラウザ] > [設定] > [全般]でいつでも設定できます。"</string> <string name="disable_autofill" msgid="8305901059849400354">"自動入力を無効にする"</string> <string name="pref_privacy_security_title" msgid="3480313968942160914">"プライバシーとセキュリティ"</string> diff --git a/res/values-ko/strings.xml b/res/values-ko/strings.xml index 3619ffa..62d34c9 100644 --- a/res/values-ko/strings.xml +++ b/res/values-ko/strings.xml @@ -181,7 +181,7 @@ <string name="autofill_profile_successful_save" msgid="5691459703493331983">"자동 입력 텍스트를 저장했습니다."</string> <string name="autofill_profile_successful_delete" msgid="1790262652460723127">"자동 입력 텍스트가 삭제되었습니다."</string> <string name="autofill_profile_editor_delete_profile" msgid="3098369314558164153">"삭제"</string> - <string name="autofill_setup_dialog_message" msgid="1096164985825394616">"브라우저에서 이 양식과 같은 웹 양식을 자동으로 완성할 수 있습니다. 자동 입력 텍스트를 설정하시겠습니까?"</string> + <!-- outdated translation 1096164985825394616 --> <string name="autofill_setup_dialog_message" msgid="7123905786076456503">"브라우저에서 이 양식과 같은 웹 양식을 자동으로 완성할 수 있습니다. 자동 입력 텍스트를 설정하시겠습니까?"</string> <string name="autofill_setup_dialog_negative_toast" msgid="3288881675232206984">"브라우저 > 설정 > 일반 화면에서 언제든지 자동 입력 텍스트를 설정할 수 있습니다."</string> <string name="disable_autofill" msgid="8305901059849400354">"자동 입력 사용중지"</string> <string name="pref_privacy_security_title" msgid="3480313968942160914">"개인정보 보호 및 보안"</string> diff --git a/res/values-lt/strings.xml b/res/values-lt/strings.xml index 6836328..3692dfc 100644 --- a/res/values-lt/strings.xml +++ b/res/values-lt/strings.xml @@ -181,7 +181,7 @@ <string name="autofill_profile_successful_save" msgid="5691459703493331983">"Automatinio pildymo tekstas išsaugotas."</string> <string name="autofill_profile_successful_delete" msgid="1790262652460723127">"Automatinis teksto pildymas ištrintas."</string> <string name="autofill_profile_editor_delete_profile" msgid="3098369314558164153">"Ištrinti"</string> - <string name="autofill_setup_dialog_message" msgid="1096164985825394616">"Naršyklė gali automatiškai užpildyti tokias žiniatinklio formas kaip ši. Ar norėtumėte nustatyti automatinį teksto pildymą?"</string> + <!-- outdated translation 1096164985825394616 --> <string name="autofill_setup_dialog_message" msgid="7123905786076456503">"Naršyklė gali automatiškai užpildyti tokias žiniatinklio formas kaip ši. Ar norėtumėte nustatyti automatinį teksto pildymą?"</string> <string name="autofill_setup_dialog_negative_toast" msgid="3288881675232206984">"Automatinį teksto pildymą galite bet kada nustatyti ekrane „Naršyklė“ > „Nustatymai“ > „Bendra“."</string> <string name="disable_autofill" msgid="8305901059849400354">"Neleisti automatinio pildymo"</string> <string name="pref_privacy_security_title" msgid="3480313968942160914">"Privatumas ir sauga"</string> diff --git a/res/values-lv/strings.xml b/res/values-lv/strings.xml index 2e31833..3f9623b 100644 --- a/res/values-lv/strings.xml +++ b/res/values-lv/strings.xml @@ -181,7 +181,7 @@ <string name="autofill_profile_successful_save" msgid="5691459703493331983">"Automātiskās aizpildes teksts saglabāts."</string> <string name="autofill_profile_successful_delete" msgid="1790262652460723127">"Automātiskās aizpildes teksts ir izdzēsts."</string> <string name="autofill_profile_editor_delete_profile" msgid="3098369314558164153">"Dzēst"</string> - <string name="autofill_setup_dialog_message" msgid="1096164985825394616">"Pārlūkprogramma var automātiski aizpildīt šādas tīmekļa veidlapas. Vai vēlaties iestatīt automātiskās aizpildes tekstu?"</string> + <!-- outdated translation 1096164985825394616 --> <string name="autofill_setup_dialog_message" msgid="7123905786076456503">"Pārlūkprogramma var automātiski aizpildīt šādas tīmekļa veidlapas. Vai vēlaties iestatīt automātiskās aizpildes tekstu?"</string> <string name="autofill_setup_dialog_negative_toast" msgid="3288881675232206984">"Jebkurā laikā varat iestatīt automātiskās aizpildes tekstu, atverot šādus ekrānus: Pārlūkprogramma > Iestatījumi > Vispārīgi."</string> <string name="disable_autofill" msgid="8305901059849400354">"Atspējot automātisko aizpildi"</string> <string name="pref_privacy_security_title" msgid="3480313968942160914">"Konfidencialitāte un drošība"</string> diff --git a/res/values-ms/strings.xml b/res/values-ms/strings.xml index 46649a7..85c4c9b 100644 --- a/res/values-ms/strings.xml +++ b/res/values-ms/strings.xml @@ -181,7 +181,7 @@ <string name="autofill_profile_successful_save" msgid="5691459703493331983">"Teks auto isi disimpan."</string> <string name="autofill_profile_successful_delete" msgid="1790262652460723127">"Teks auto-isi dipadamkan."</string> <string name="autofill_profile_editor_delete_profile" msgid="3098369314558164153">"Padam"</string> - <string name="autofill_setup_dialog_message" msgid="1096164985825394616">"Penyemak imbas boleh melengkapkan borang web seperti ini secara automatik. Adakah anda ingin menyediakan teks auto-isi anda?"</string> + <!-- outdated translation 1096164985825394616 --> <string name="autofill_setup_dialog_message" msgid="7123905786076456503">"Penyemak imbas boleh melengkapkan borang web seperti ini secara automatik. Adakah anda ingin menyediakan teks auto-isi anda?"</string> <string name="autofill_setup_dialog_negative_toast" msgid="3288881675232206984">"Anda boleh menyediakan teks auto-isi anda daripada skrin Penyemak Imbas > Tetapan > Umum."</string> <string name="disable_autofill" msgid="8305901059849400354">"Lumpuhkan auto isi"</string> <string name="pref_privacy_security_title" msgid="3480313968942160914">"Privasi & keselamatan"</string> diff --git a/res/values-nb/strings.xml b/res/values-nb/strings.xml index 91a2f86..8a0bcd3 100644 --- a/res/values-nb/strings.xml +++ b/res/values-nb/strings.xml @@ -181,7 +181,7 @@ <string name="autofill_profile_successful_save" msgid="5691459703493331983">"Tekst for automatisk utfylling lagret."</string> <string name="autofill_profile_successful_delete" msgid="1790262652460723127">"Tekst for automatisk utfylling er slettet."</string> <string name="autofill_profile_editor_delete_profile" msgid="3098369314558164153">"Slett"</string> - <string name="autofill_setup_dialog_message" msgid="1096164985825394616">"Nettleseren kan automatisk fullføre nettskjemaer som dette. Vil du konfigurere tekst for automatisk utfylling?"</string> + <!-- outdated translation 1096164985825394616 --> <string name="autofill_setup_dialog_message" msgid="7123905786076456503">"Nettleseren kan automatisk fullføre nettskjemaer som dette. Vil du konfigurere tekst for automatisk utfylling?"</string> <string name="autofill_setup_dialog_negative_toast" msgid="3288881675232206984">"Du kan konfigurere tekst for automatisk utfylling senere, fra skjermen Nettleser > Innstillinger > Generelt."</string> <string name="disable_autofill" msgid="8305901059849400354">"Deaktiver automatisk utfylling"</string> <string name="pref_privacy_security_title" msgid="3480313968942160914">"Personvern og sikkerhet"</string> diff --git a/res/values-nl/strings.xml b/res/values-nl/strings.xml index 3ec3af6..a6ec060 100644 --- a/res/values-nl/strings.xml +++ b/res/values-nl/strings.xml @@ -181,7 +181,7 @@ <string name="autofill_profile_successful_save" msgid="5691459703493331983">"Tekst voor automatisch aanvullen opgeslagen."</string> <string name="autofill_profile_successful_delete" msgid="1790262652460723127">"Tekst voor automatisch aanvullen verwijderd."</string> <string name="autofill_profile_editor_delete_profile" msgid="3098369314558164153">"Verwijderen"</string> - <string name="autofill_setup_dialog_message" msgid="1096164985825394616">"De browser kan webformulieren zoals deze automatisch invullen. Wilt u uw instellingen voor het automatisch aanvullen van tekst opgeven?"</string> + <!-- outdated translation 1096164985825394616 --> <string name="autofill_setup_dialog_message" msgid="7123905786076456503">"De browser kan webformulieren zoals deze automatisch invullen. Wilt u uw instellingen voor het automatisch aanvullen van tekst opgeven?"</string> <string name="autofill_setup_dialog_negative_toast" msgid="3288881675232206984">"U kunt de tekst voor automatisch aanvullen altijd instellen via \'Browser\' > \'Instellingen\' > \'Algemeen\'."</string> <string name="disable_autofill" msgid="8305901059849400354">"Automatisch aanvullen uitschakelen"</string> <string name="pref_privacy_security_title" msgid="3480313968942160914">"Privacy en beveiliging"</string> diff --git a/res/values-pl/strings.xml b/res/values-pl/strings.xml index e4873c6..a552265 100644 --- a/res/values-pl/strings.xml +++ b/res/values-pl/strings.xml @@ -181,7 +181,7 @@ <string name="autofill_profile_successful_save" msgid="5691459703493331983">"Autouzupełniany tekst został zapisany."</string> <string name="autofill_profile_successful_delete" msgid="1790262652460723127">"Autouzupełniany tekst został usunięty."</string> <string name="autofill_profile_editor_delete_profile" msgid="3098369314558164153">"Usuń"</string> - <string name="autofill_setup_dialog_message" msgid="1096164985825394616">"Przeglądarka może automatycznie wypełniać takie formularze internetowe. Chcesz skonfigurować autouzupełniany tekst?"</string> + <!-- outdated translation 1096164985825394616 --> <string name="autofill_setup_dialog_message" msgid="7123905786076456503">"Przeglądarka może automatycznie wypełniać takie formularze internetowe. Chcesz skonfigurować autouzupełniany tekst?"</string> <string name="autofill_setup_dialog_negative_toast" msgid="3288881675232206984">"Zawsze możesz skonfigurować autouzupełniany tekst na ekranie Przeglądarka > Ustawienia > Ogólne."</string> <string name="disable_autofill" msgid="8305901059849400354">"Wyłącz autouzupełnianie"</string> <string name="pref_privacy_security_title" msgid="3480313968942160914">"Prywatność i bezpieczeństwo"</string> diff --git a/res/values-pt-rPT/strings.xml b/res/values-pt-rPT/strings.xml index 80d0650..f8c1514 100644 --- a/res/values-pt-rPT/strings.xml +++ b/res/values-pt-rPT/strings.xml @@ -181,7 +181,7 @@ <string name="autofill_profile_successful_save" msgid="5691459703493331983">"Texto de preenchimento automático guardado."</string> <string name="autofill_profile_successful_delete" msgid="1790262652460723127">"Texto de preenchimento automático eliminado."</string> <string name="autofill_profile_editor_delete_profile" msgid="3098369314558164153">"Eliminar"</string> - <string name="autofill_setup_dialog_message" msgid="1096164985825394616">"O navegador pode preencher automaticamente formulários Web como este. Pretende configurar o texto de preenchimento automático?"</string> + <!-- outdated translation 1096164985825394616 --> <string name="autofill_setup_dialog_message" msgid="7123905786076456503">"O navegador pode preencher automaticamente formulários Web como este. Pretende configurar o texto de preenchimento automático?"</string> <string name="autofill_setup_dialog_negative_toast" msgid="3288881675232206984">"Pode sempre configurar o texto de preenchimento automático no ecrã Navegador > Definições > Geral."</string> <string name="disable_autofill" msgid="8305901059849400354">"Desativar preenchimento automático"</string> <string name="pref_privacy_security_title" msgid="3480313968942160914">"Privacidade e segurança"</string> diff --git a/res/values-pt/strings.xml b/res/values-pt/strings.xml index 1093de7..fee32be 100644 --- a/res/values-pt/strings.xml +++ b/res/values-pt/strings.xml @@ -181,7 +181,7 @@ <string name="autofill_profile_successful_save" msgid="5691459703493331983">"Texto de preenchimento automático salvo."</string> <string name="autofill_profile_successful_delete" msgid="1790262652460723127">"Texto de preenchimento automático excluído."</string> <string name="autofill_profile_editor_delete_profile" msgid="3098369314558164153">"Excluir"</string> - <string name="autofill_setup_dialog_message" msgid="1096164985825394616">"O navegador pode preencher automaticamente formulários da web como este. Deseja configurar o preenchimento automático de texto?"</string> + <!-- outdated translation 1096164985825394616 --> <string name="autofill_setup_dialog_message" msgid="7123905786076456503">"O navegador pode preencher automaticamente formulários da web como este. Deseja configurar o preenchimento automático de texto?"</string> <string name="autofill_setup_dialog_negative_toast" msgid="3288881675232206984">"É possível configurar o preenchimento automático de texto na tela Navegador > Configurações > Geral."</string> <string name="disable_autofill" msgid="8305901059849400354">"Desativar o preenchimento automático"</string> <string name="pref_privacy_security_title" msgid="3480313968942160914">"Privacidade e segurança"</string> diff --git a/res/values-rm/strings.xml b/res/values-rm/strings.xml index 290b4ec..7af5b33 100644 --- a/res/values-rm/strings.xml +++ b/res/values-rm/strings.xml @@ -239,7 +239,7 @@ <skip /> <!-- no translation found for autofill_profile_editor_delete_profile (3098369314558164153) --> <skip /> - <!-- no translation found for autofill_setup_dialog_message (1096164985825394616) --> + <!-- no translation found for autofill_setup_dialog_message (7123905786076456503) --> <skip /> <!-- no translation found for autofill_setup_dialog_negative_toast (3288881675232206984) --> <skip /> diff --git a/res/values-ro/strings.xml b/res/values-ro/strings.xml index f5f44f2..91d561f 100644 --- a/res/values-ro/strings.xml +++ b/res/values-ro/strings.xml @@ -181,7 +181,7 @@ <string name="autofill_profile_successful_save" msgid="5691459703493331983">"Textul pentru completare automată a fost salvat."</string> <string name="autofill_profile_successful_delete" msgid="1790262652460723127">"Textul pentru completarea automată a fost şters."</string> <string name="autofill_profile_editor_delete_profile" msgid="3098369314558164153">"Ştergeţi"</string> - <string name="autofill_setup_dialog_message" msgid="1096164985825394616">"Browserul poate completa automat formulare web ca acesta. Doriţi să configuraţi textul pentru completarea automată?"</string> + <!-- outdated translation 1096164985825394616 --> <string name="autofill_setup_dialog_message" msgid="7123905786076456503">"Browserul poate completa automat formulare web ca acesta. Doriţi să configuraţi textul pentru completarea automată?"</string> <string name="autofill_setup_dialog_negative_toast" msgid="3288881675232206984">"Puteţi configura oricând textul dvs. pentru completarea automată din ecranul Browser > Setări > General."</string> <string name="disable_autofill" msgid="8305901059849400354">"Dezactivaţi completarea automată"</string> <string name="pref_privacy_security_title" msgid="3480313968942160914">"Confidenţialitate şi securitate"</string> diff --git a/res/values-ru/strings.xml b/res/values-ru/strings.xml index 25e2f87..591fbd4 100644 --- a/res/values-ru/strings.xml +++ b/res/values-ru/strings.xml @@ -181,7 +181,7 @@ <string name="autofill_profile_successful_save" msgid="5691459703493331983">"Текст автозаполнения сохранен."</string> <string name="autofill_profile_successful_delete" msgid="1790262652460723127">"Текст автозаполнения удален."</string> <string name="autofill_profile_editor_delete_profile" msgid="3098369314558164153">"Удалить"</string> - <string name="autofill_setup_dialog_message" msgid="1096164985825394616">"Браузер может автоматически заполнять такие веб-формы. Включить автозаполнение?"</string> + <!-- outdated translation 1096164985825394616 --> <string name="autofill_setup_dialog_message" msgid="7123905786076456503">"Браузер может автоматически заполнять такие веб-формы. Включить автозаполнение?"</string> <string name="autofill_setup_dialog_negative_toast" msgid="3288881675232206984">"Автозаполнение можно настроить в общих настройках браузера."</string> <string name="disable_autofill" msgid="8305901059849400354">"Отключить автозаполнение"</string> <string name="pref_privacy_security_title" msgid="3480313968942160914">"Личные данные"</string> diff --git a/res/values-sk/strings.xml b/res/values-sk/strings.xml index 1a5155d..92c7597 100644 --- a/res/values-sk/strings.xml +++ b/res/values-sk/strings.xml @@ -181,7 +181,7 @@ <string name="autofill_profile_successful_save" msgid="5691459703493331983">"Automaticky dopĺňaný text bol uložený."</string> <string name="autofill_profile_successful_delete" msgid="1790262652460723127">"Automaticky dopĺňaný text bol odstránený."</string> <string name="autofill_profile_editor_delete_profile" msgid="3098369314558164153">"Odstrániť"</string> - <string name="autofill_setup_dialog_message" msgid="1096164985825394616">"Podobné webové formuláre môže prehliadač vypĺňať automaticky. Chcete nastaviť automatické dopĺňanie textu?"</string> + <!-- outdated translation 1096164985825394616 --> <string name="autofill_setup_dialog_message" msgid="7123905786076456503">"Podobné webové formuláre môže prehliadač vypĺňať automaticky. Chcete nastaviť automatické dopĺňanie textu?"</string> <string name="autofill_setup_dialog_negative_toast" msgid="3288881675232206984">"Automatické dopĺňanie textu môžete v prehliadači kedykoľvek nastaviť v časti Nastavenia > Hlavná obrazovka."</string> <string name="disable_autofill" msgid="8305901059849400354">"Zakázať automatické dopĺňanie"</string> <string name="pref_privacy_security_title" msgid="3480313968942160914">"Ochrana osobných údajov a zabezpečenie"</string> diff --git a/res/values-sl/strings.xml b/res/values-sl/strings.xml index 730daa9..be70e67 100644 --- a/res/values-sl/strings.xml +++ b/res/values-sl/strings.xml @@ -181,7 +181,7 @@ <string name="autofill_profile_successful_save" msgid="5691459703493331983">"Besedilo za samodejno izpolnjevanje je bilo shranjeno."</string> <string name="autofill_profile_successful_delete" msgid="1790262652460723127">"Besedilo za samodejno izpolnjevanje je bilo izbrisano."</string> <string name="autofill_profile_editor_delete_profile" msgid="3098369314558164153">"Izbriši"</string> - <string name="autofill_setup_dialog_message" msgid="1096164985825394616">"Brskalnik lahko samodejno izpolni spletne obrazce, kot je ta. Ali želite nastaviti besedilo za samodejno izpolnjevanje?"</string> + <!-- outdated translation 1096164985825394616 --> <string name="autofill_setup_dialog_message" msgid="7123905786076456503">"Brskalnik lahko samodejno izpolni spletne obrazce, kot je ta. Ali želite nastaviti besedilo za samodejno izpolnjevanje?"</string> <string name="autofill_setup_dialog_negative_toast" msgid="3288881675232206984">"Besedilo za samodejno izpolnjevanje lahko vedno nastavite na zaslonu Brskalnik > Nastavitve > Splošno."</string> <string name="disable_autofill" msgid="8305901059849400354">"Onemogoči samodejno izpolnjevanje"</string> <string name="pref_privacy_security_title" msgid="3480313968942160914">"Zasebnost in varnost"</string> diff --git a/res/values-sr/strings.xml b/res/values-sr/strings.xml index 463ef30..a947f5e 100644 --- a/res/values-sr/strings.xml +++ b/res/values-sr/strings.xml @@ -181,7 +181,7 @@ <string name="autofill_profile_successful_save" msgid="5691459703493331983">"Текст за аутоматско попуњавање је сачуван."</string> <string name="autofill_profile_successful_delete" msgid="1790262652460723127">"Текст за аутоматско попуњавање је избрисан."</string> <string name="autofill_profile_editor_delete_profile" msgid="3098369314558164153">"Избриши"</string> - <string name="autofill_setup_dialog_message" msgid="1096164985825394616">"Прегледач може аутоматски да попуњава веб обрасце попут овог. Желите ли да подесите текст за аутоматско попуњавање?"</string> + <!-- outdated translation 1096164985825394616 --> <string name="autofill_setup_dialog_message" msgid="7123905786076456503">"Прегледач може аутоматски да попуњава веб обрасце попут овог. Желите ли да подесите текст за аутоматско попуњавање?"</string> <string name="autofill_setup_dialog_negative_toast" msgid="3288881675232206984">"Увек можете да подесите текст за аутоматско попуњавање на екрану Прегледач > Подешавања > Опште."</string> <string name="disable_autofill" msgid="8305901059849400354">"Онемогући аутоматско попуњавање"</string> <string name="pref_privacy_security_title" msgid="3480313968942160914">"Приватност и безбедност"</string> diff --git a/res/values-sv/strings.xml b/res/values-sv/strings.xml index b4b2c2c..8aad8a9 100644 --- a/res/values-sv/strings.xml +++ b/res/values-sv/strings.xml @@ -181,7 +181,7 @@ <string name="autofill_profile_successful_save" msgid="5691459703493331983">"Text för autofyll har sparats."</string> <string name="autofill_profile_successful_delete" msgid="1790262652460723127">"Text för autofyll har tagits bort."</string> <string name="autofill_profile_editor_delete_profile" msgid="3098369314558164153">"Ta bort"</string> - <string name="autofill_setup_dialog_message" msgid="1096164985825394616">"Den här typen av webbformulär kan fyllas i automatiskt. Vill du ange en text för autofyll?"</string> + <!-- outdated translation 1096164985825394616 --> <string name="autofill_setup_dialog_message" msgid="7123905786076456503">"Den här typen av webbformulär kan fyllas i automatiskt. Vill du ange en text för autofyll?"</string> <string name="autofill_setup_dialog_negative_toast" msgid="3288881675232206984">"Du kan alltid ange texten för autofyll på skärmen Webbläsare > Inställningar > Allmänt."</string> <string name="disable_autofill" msgid="8305901059849400354">"Inaktivera Autofyll"</string> <string name="pref_privacy_security_title" msgid="3480313968942160914">"Sekretess och säkerhet"</string> diff --git a/res/values-sw/strings.xml b/res/values-sw/strings.xml index 2226e6e..950914a 100644 --- a/res/values-sw/strings.xml +++ b/res/values-sw/strings.xml @@ -181,7 +181,7 @@ <string name="autofill_profile_successful_save" msgid="5691459703493331983">"Maandishi kujaza-oto yamehifadhiwa."</string> <string name="autofill_profile_successful_delete" msgid="1790262652460723127">"Maandishi ya oto-kujaza imefutwa."</string> <string name="autofill_profile_editor_delete_profile" msgid="3098369314558164153">"Futa"</string> - <string name="autofill_setup_dialog_message" msgid="1096164985825394616">"Kivinjari inaweza kukamilisha kiotomatiki fomu za wavuti kama hii. Je ungependa kusanidi maandishi ya kujaza-oto?"</string> + <!-- outdated translation 1096164985825394616 --> <string name="autofill_setup_dialog_message" msgid="7123905786076456503">"Kivinjari inaweza kukamilisha kiotomatiki fomu za wavuti kama hii. Je ungependa kusanidi maandishi ya kujaza-oto?"</string> <string name="autofill_setup_dialog_negative_toast" msgid="3288881675232206984">"Wakati wowote unaweza kusanidi oto-kujaza maandishi kutoka kwa Broswer > Settings > Skrini ya kawaida."</string> <string name="disable_autofill" msgid="8305901059849400354">"Zima uwezo wa kujaza kiotomatiki"</string> <string name="pref_privacy_security_title" msgid="3480313968942160914">"Faragha na Usalama"</string> diff --git a/res/values-th/strings.xml b/res/values-th/strings.xml index a15fd2b..aa13679 100644 --- a/res/values-th/strings.xml +++ b/res/values-th/strings.xml @@ -181,7 +181,7 @@ <string name="autofill_profile_successful_save" msgid="5691459703493331983">"บันทึกการป้อนข้อความอัตโนมัติแล้ว"</string> <string name="autofill_profile_successful_delete" msgid="1790262652460723127">"ลบการป้อนข้อความอัตโนมัติแล้ว"</string> <string name="autofill_profile_editor_delete_profile" msgid="3098369314558164153">"ลบ"</string> - <string name="autofill_setup_dialog_message" msgid="1096164985825394616">"เบราว์เซอร์สามารถกรอกเว็บฟอร์มโดยอัตโนมัติได้เหมือนกับฟอร์มนี้ คุณต้องการตั้งค่าการป้อนข้อความอัตโนมัติหรือไม่"</string> + <!-- outdated translation 1096164985825394616 --> <string name="autofill_setup_dialog_message" msgid="7123905786076456503">"เบราว์เซอร์สามารถกรอกเว็บฟอร์มโดยอัตโนมัติได้เหมือนกับฟอร์มนี้ คุณต้องการตั้งค่าการป้อนข้อความอัตโนมัติหรือไม่"</string> <string name="autofill_setup_dialog_negative_toast" msgid="3288881675232206984">"คุณสามารถตั้งค่าการป้อนข้อความอัตโนมัติจากหน้าจอเบราว์เซอร์ > การตั้งค่า > ทั่วไป ได้เสมอ"</string> <string name="disable_autofill" msgid="8305901059849400354">"ปิดใช้งานการป้อนอัตโนมัติ"</string> <string name="pref_privacy_security_title" msgid="3480313968942160914">"ข้อมูลส่วนบุคคลและความปลอดภัย"</string> diff --git a/res/values-tl/strings.xml b/res/values-tl/strings.xml index e7f01ce..fc5201c 100644 --- a/res/values-tl/strings.xml +++ b/res/values-tl/strings.xml @@ -181,7 +181,7 @@ <string name="autofill_profile_successful_save" msgid="5691459703493331983">"Na-save ang auto-fill text."</string> <string name="autofill_profile_successful_delete" msgid="1790262652460723127">"Tinanggal ang auto-fill text."</string> <string name="autofill_profile_editor_delete_profile" msgid="3098369314558164153">"Tanggalin"</string> - <string name="autofill_setup_dialog_message" msgid="1096164985825394616">"Maaaring awtomatikong kumpletuhin ng browser ang mga web form tulad nito. Gusto mo bang i-set up ang iyong auto-fill text?"</string> + <!-- outdated translation 1096164985825394616 --> <string name="autofill_setup_dialog_message" msgid="7123905786076456503">"Maaaring awtomatikong kumpletuhin ng browser ang mga web form tulad nito. Gusto mo bang i-set up ang iyong auto-fill text?"</string> <string name="autofill_setup_dialog_negative_toast" msgid="3288881675232206984">"Maaari mong i-set up ang iyong auto-fill text anumang oras mula sa Browser > Mga Setting > Pangkalahatang screen."</string> <string name="disable_autofill" msgid="8305901059849400354">"Huwag paganahin ang auto-fill"</string> <string name="pref_privacy_security_title" msgid="3480313968942160914">"Privacy at seguridad"</string> diff --git a/res/values-tr/strings.xml b/res/values-tr/strings.xml index 7ed35f3..419932b 100644 --- a/res/values-tr/strings.xml +++ b/res/values-tr/strings.xml @@ -181,7 +181,7 @@ <string name="autofill_profile_successful_save" msgid="5691459703493331983">"Otomatik doldurma metni kaydedildi."</string> <string name="autofill_profile_successful_delete" msgid="1790262652460723127">"Otomatik doldurma metni silindi."</string> <string name="autofill_profile_editor_delete_profile" msgid="3098369314558164153">"Sil"</string> - <string name="autofill_setup_dialog_message" msgid="1096164985825394616">"Tarayıcı, bunun gibi web formlarını otomatik olarak doldurabilir. Otomatik doldurma metninizi ayarlamak ister misiniz?"</string> + <!-- outdated translation 1096164985825394616 --> <string name="autofill_setup_dialog_message" msgid="7123905786076456503">"Tarayıcı, bunun gibi web formlarını otomatik olarak doldurabilir. Otomatik doldurma metninizi ayarlamak ister misiniz?"</string> <string name="autofill_setup_dialog_negative_toast" msgid="3288881675232206984">"Otomatik doldurma metninizi istediğiniz zaman Tarayıcı > Ayarlar > Genel ekranından ayarlayabilirsiniz."</string> <string name="disable_autofill" msgid="8305901059849400354">"Otomatik doldurmayı devre dışı bırak"</string> <string name="pref_privacy_security_title" msgid="3480313968942160914">"Gizlilik ve güvenlik"</string> @@ -379,7 +379,7 @@ <string name="accessibility_button_newtab" msgid="4116986240706315748">"Yeni sekme aç"</string> <string name="accessibility_button_newincognitotab" msgid="5254901889040012964">"Yeni gizli sekme aç"</string> <string name="accessibility_button_clear" msgid="6943152307986161598">"Girdiyi temizle"</string> - <string name="accessibility_button_uaswitch" msgid="6286804719724282339">"User agent\'ı değiştir"</string> + <string name="accessibility_button_uaswitch" msgid="6286804719724282339">"Kullanıcı aracısını değiştir"</string> <string name="accessibility_button_go" msgid="1182818872083055958">"Git"</string> <string name="accessibility_button_navscreen" msgid="9142904748728713075">"Sayfa yöneticisi"</string> <string name="accessibility_button_more" msgid="3054251446394224216">"Diğer seçenekler"</string> diff --git a/res/values-uk/strings.xml b/res/values-uk/strings.xml index ecba5a0..b2d5fcf 100644 --- a/res/values-uk/strings.xml +++ b/res/values-uk/strings.xml @@ -181,7 +181,7 @@ <string name="autofill_profile_successful_save" msgid="5691459703493331983">"Текст автозаповнення збережено."</string> <string name="autofill_profile_successful_delete" msgid="1790262652460723127">"Текст автозаповнення видалено."</string> <string name="autofill_profile_editor_delete_profile" msgid="3098369314558164153">"Видалити"</string> - <string name="autofill_setup_dialog_message" msgid="1096164985825394616">"Веб-переглядач може автоматично заповнювати подібні веб-форми. Налаштувати текст автозаповнення?"</string> + <!-- outdated translation 1096164985825394616 --> <string name="autofill_setup_dialog_message" msgid="7123905786076456503">"Веб-переглядач може автоматично заповнювати подібні веб-форми. Налаштувати текст автозаповнення?"</string> <string name="autofill_setup_dialog_negative_toast" msgid="3288881675232206984">"Ви завжди можете налаштувати текст автозаповнення на екрані Веб-переглядач > Налаштування > Загальні."</string> <string name="disable_autofill" msgid="8305901059849400354">"Вимкнути автозаповнення"</string> <string name="pref_privacy_security_title" msgid="3480313968942160914">"Конфіденційність і безпека"</string> diff --git a/res/values-vi/strings.xml b/res/values-vi/strings.xml index 4841c2d..1a7b1b5 100644 --- a/res/values-vi/strings.xml +++ b/res/values-vi/strings.xml @@ -181,7 +181,7 @@ <string name="autofill_profile_successful_save" msgid="5691459703493331983">"Đã lưu văn bản tự động điền."</string> <string name="autofill_profile_successful_delete" msgid="1790262652460723127">"Đã xóa văn bản tự động điền."</string> <string name="autofill_profile_editor_delete_profile" msgid="3098369314558164153">"Xóa"</string> - <string name="autofill_setup_dialog_message" msgid="1096164985825394616">"Trình duyệt có thể tự động hoàn tất các biểu mẫu web giống như biểu mẫu này. Bạn có muốn thiết lập văn bản tự động điền của mình không?"</string> + <!-- outdated translation 1096164985825394616 --> <string name="autofill_setup_dialog_message" msgid="7123905786076456503">"Trình duyệt có thể tự động hoàn tất các biểu mẫu web giống như biểu mẫu này. Bạn có muốn thiết lập văn bản tự động điền của mình không?"</string> <string name="autofill_setup_dialog_negative_toast" msgid="3288881675232206984">"Bạn luôn có thể thiết lập văn bản tự động điền của mình từ màn hình Trình duyệt > Cài đặt > Chung."</string> <string name="disable_autofill" msgid="8305901059849400354">"Tắt tính năng tự động điền"</string> <string name="pref_privacy_security_title" msgid="3480313968942160914">"Riêng tư & bảo mật"</string> diff --git a/res/values-zh-rCN/strings.xml b/res/values-zh-rCN/strings.xml index 3e2c628..21535cd 100644 --- a/res/values-zh-rCN/strings.xml +++ b/res/values-zh-rCN/strings.xml @@ -181,7 +181,7 @@ <string name="autofill_profile_successful_save" msgid="5691459703493331983">"自动填充文本已保存。"</string> <string name="autofill_profile_successful_delete" msgid="1790262652460723127">"自动填充文本已删除。"</string> <string name="autofill_profile_editor_delete_profile" msgid="3098369314558164153">"删除"</string> - <string name="autofill_setup_dialog_message" msgid="1096164985825394616">"浏览器可以自动填写与此类似的网络表单。您要设置自动填充文本吗?"</string> + <!-- outdated translation 1096164985825394616 --> <string name="autofill_setup_dialog_message" msgid="7123905786076456503">"浏览器可以自动填写与此类似的网络表单。您要设置自动填充文本吗?"</string> <string name="autofill_setup_dialog_negative_toast" msgid="3288881675232206984">"您可以随时通过“浏览器”>“设置”>“常规”屏幕设置自动填充文本。"</string> <string name="disable_autofill" msgid="8305901059849400354">"停用自动填充"</string> <string name="pref_privacy_security_title" msgid="3480313968942160914">"隐私和安全"</string> diff --git a/res/values-zh-rTW/strings.xml b/res/values-zh-rTW/strings.xml index 126c165..e54afb1 100644 --- a/res/values-zh-rTW/strings.xml +++ b/res/values-zh-rTW/strings.xml @@ -181,7 +181,7 @@ <string name="autofill_profile_successful_save" msgid="5691459703493331983">"已儲存自動填入文字。"</string> <string name="autofill_profile_successful_delete" msgid="1790262652460723127">"已刪除自動填入文字。"</string> <string name="autofill_profile_editor_delete_profile" msgid="3098369314558164153">"刪除"</string> - <string name="autofill_setup_dialog_message" msgid="1096164985825394616">"瀏覽器可以自動完成這類網路表單,您要設定自動填入文字嗎?"</string> + <!-- outdated translation 1096164985825394616 --> <string name="autofill_setup_dialog_message" msgid="7123905786076456503">"瀏覽器可以自動完成這類網路表單,您要設定自動填入文字嗎?"</string> <string name="autofill_setup_dialog_negative_toast" msgid="3288881675232206984">"您隨時可以前往 [瀏覽器] > [設定] > [一般] 畫面設定自動填入文字。"</string> <string name="disable_autofill" msgid="8305901059849400354">"停用自動填入功能"</string> <string name="pref_privacy_security_title" msgid="3480313968942160914">"隱私權與安全性"</string> diff --git a/res/values-zu/strings.xml b/res/values-zu/strings.xml index 1541eee..9fa3b7f 100644 --- a/res/values-zu/strings.xml +++ b/res/values-zu/strings.xml @@ -181,7 +181,7 @@ <string name="autofill_profile_successful_save" msgid="5691459703493331983">"Ukuzifakekela kombhalo kulondoloziwe."</string> <string name="autofill_profile_successful_delete" msgid="1790262652460723127">"Ukuzifakekela kwamagama kususiwe."</string> <string name="autofill_profile_editor_delete_profile" msgid="3098369314558164153">"Susa"</string> - <string name="autofill_setup_dialog_message" msgid="1096164985825394616">"Isiphequluli singazigcwalisela amafomu ewebhu afana nalawa. Ungathanda ukulungisa uhlelo lokuzigcwalisela umbhalo?"</string> + <!-- outdated translation 1096164985825394616 --> <string name="autofill_setup_dialog_message" msgid="7123905786076456503">"Isiphequluli singazigcwalisela amafomu ewebhu afana nalawa. Ungathanda ukulungisa uhlelo lokuzigcwalisela umbhalo?"</string> <string name="autofill_setup_dialog_negative_toast" msgid="3288881675232206984">"Ungakwazi njalo ukuthi usethe ukuzifakekela kombhalo usuka Esipheqululini; Izilungiselelosetho; Iskrini esijwayelekile."</string> <string name="disable_autofill" msgid="8305901059849400354">"Khubaza ukufaka-okuzenzakalelayo"</string> <string name="pref_privacy_security_title" msgid="3480313968942160914">"Ubumfihlo nokuvikela"</string> diff --git a/res/values/strings.xml b/res/values/strings.xml index 6a1a6f1..2de5e58 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -408,7 +408,7 @@ <string name="autofill_profile_editor_delete_profile">Delete</string> <!-- Text on a dialog shown to the user when they are prompted to set up the autofill feature [CHAR-LIMIT=NONE] --> - <string name="autofill_setup_dialog_message">The browser can automatically complete web forms like this one. Would you like to set up your auto-fill text?</string> + <string name="autofill_setup_dialog_message">The browser can automatically complete web forms like this one. Do you want to set up your auto-fill text?</string> <!-- Toast message displayed when the user decides to not set up autofill at this time. We want to remind them that they can configure it through the Browser Settings menu. [CHAR-LIMIT=NONE] --> <string name="autofill_setup_dialog_negative_toast">You can always set up your auto-fill text from the Browser > Settings > General screen.</string> @@ -762,8 +762,6 @@ <!-- Do not translate. Testing only --> <string name="dump_nav" translatable="false">Dump navigation cache</string> - <!-- Do not translate. Testing only --> - <string name="dump_counters" translatable="false">Dump V8 counters</string> <!-- The default homepage. If it starts with "http://www.google" and the user signs up the device with a Google sites account, the site's diff --git a/res/values/styles.xml b/res/values/styles.xml index 361702e..17c5eb2 100644 --- a/res/values/styles.xml +++ b/res/values/styles.xml @@ -80,4 +80,17 @@ <item name="android:textColor">?android:attr/textColorSecondary</item> <item name="android:textStyle">normal</item> </style> + + <style name="AutofillProfileTextView"> + <item name="android:layout_width">wrap_content</item> + <item name="android:layout_height">wrap_content</item> + <item name="android:gravity">center_vertical</item> + <item name="android:layout_margin">2dip</item> + <item name="android:textAppearance">?android:attr/textAppearanceMedium</item> + </style> + <style name="AutofillProfileEditText" parent="@style/AutofillProfileTextView"> + <item name="android:layout_width">match_parent</item> + <item name="android:imeOptions">flagNoExtractUi|actionNext</item> + <item name="android:singleLine">true</item> + </style> </resources> diff --git a/src/com/android/browser/AutoFillSettingsFragment.java b/src/com/android/browser/AutoFillSettingsFragment.java index 04f45b5..7be657d 100644 --- a/src/com/android/browser/AutoFillSettingsFragment.java +++ b/src/com/android/browser/AutoFillSettingsFragment.java @@ -52,7 +52,9 @@ public class AutoFillSettingsFragment extends Fragment { private EditText mCountryEdit; private EditText mPhoneEdit; - private Button mSaveButton; + private MenuItem mSaveMenuItem; + + private boolean mInitialised; // Used to display toast after DB interactions complete. private Handler mHandler; @@ -87,7 +89,7 @@ public class AutoFillSettingsFragment extends Fragment { mPhoneEdit.setError(null); } - updateButtonState(); + updateSaveMenuItemState(); } public void beforeTextChanged(CharSequence s, int start, int count, int after) { @@ -99,7 +101,7 @@ public class AutoFillSettingsFragment extends Fragment { private class FieldChangedListener implements TextWatcher { public void afterTextChanged(Editable s) { - updateButtonState(); + updateSaveMenuItemState(); } public void beforeTextChanged(CharSequence s, int start, int count, int after) { @@ -147,11 +149,14 @@ public class AutoFillSettingsFragment extends Fragment { @Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { inflater.inflate(R.menu.autofill_profile_editor, menu); + mSaveMenuItem = menu.findItem(R.id.autofill_profile_editor_save_profile_menu_id); + updateSaveMenuItemState(); } @Override public boolean onOptionsItemSelected(MenuItem item) { - if (item.getItemId() == R.id.autofill_profile_editor_delete_profile_menu_id) { + switch (item.getItemId()) { + case R.id.autofill_profile_editor_delete_profile_menu_id: // Clear the UI. mFullNameEdit.setText(""); mEmailEdit.setText(""); @@ -168,10 +173,30 @@ public class AutoFillSettingsFragment extends Fragment { // trigger the current profile to get deleted from the DB. mSettings.setAutoFillProfile(null, mHandler.obtainMessage(PROFILE_DELETED_MSG)); - updateButtonState(); + updateSaveMenuItemState(); + return true; + + case R.id.autofill_profile_editor_save_profile_menu_id: + AutoFillProfile newProfile = new AutoFillProfile( + mUniqueId, + mFullNameEdit.getText().toString(), + mEmailEdit.getText().toString(), + mCompanyEdit.getText().toString(), + mAddressLine1Edit.getText().toString(), + mAddressLine2Edit.getText().toString(), + mCityEdit.getText().toString(), + mStateEdit.getText().toString(), + mZipEdit.getText().toString(), + mCountryEdit.getText().toString(), + mPhoneEdit.getText().toString()); + + mSettings.setAutoFillProfile(newProfile, + mHandler.obtainMessage(PROFILE_SAVED_MSG)); return true; + + default: + return false; } - return false; } @Override @@ -203,27 +228,6 @@ public class AutoFillSettingsFragment extends Fragment { mCountryEdit.addTextChangedListener(mFieldChangedListener); mPhoneEdit.addTextChangedListener(new PhoneNumberValidator()); - mSaveButton = (Button)v.findViewById(R.id.autofill_profile_editor_save_button); - mSaveButton.setOnClickListener(new OnClickListener() { - public void onClick(View button) { - AutoFillProfile newProfile = new AutoFillProfile( - mUniqueId, - mFullNameEdit.getText().toString(), - mEmailEdit.getText().toString(), - mCompanyEdit.getText().toString(), - mAddressLine1Edit.getText().toString(), - mAddressLine2Edit.getText().toString(), - mCityEdit.getText().toString(), - mStateEdit.getText().toString(), - mZipEdit.getText().toString(), - mCountryEdit.getText().toString(), - mPhoneEdit.getText().toString()); - - mSettings.setAutoFillProfile(newProfile, - mHandler.obtainMessage(PROFILE_SAVED_MSG)); - } - }); - // Populate the text boxes with any pre existing AutoFill data. AutoFillProfile activeProfile = mSettings.getAutoFillProfile(); if (activeProfile != null) { @@ -239,14 +243,25 @@ public class AutoFillSettingsFragment extends Fragment { mPhoneEdit.setText(activeProfile.getPhoneNumber()); } - updateButtonState(); + mInitialised = true; + + updateSaveMenuItemState(); return v; } - public void updateButtonState() { + private void updateSaveMenuItemState() { + if (mSaveMenuItem == null) { + return; + } - boolean valid = (mFullNameEdit.getText().toString().length() > 0 || + if (!mInitialised) { + mSaveMenuItem.setEnabled(false); + return; + } + + boolean currentState = mSaveMenuItem.isEnabled(); + boolean newState = (mFullNameEdit.getText().toString().length() > 0 || mEmailEdit.getText().toString().length() > 0 || mCompanyEdit.getText().toString().length() > 0 || mAddressLine1Edit.getText().toString().length() > 0 || @@ -257,9 +272,9 @@ public class AutoFillSettingsFragment extends Fragment { mCountryEdit.getText().toString().length() > 0) && mPhoneEdit.getError() == null; - // Only enable the save buttons if we have at least one field completed - // and the phone number (if present is valid). - mSaveButton.setEnabled(valid); + if (currentState != newState) { + mSaveMenuItem.setEnabled(newState); + } } private void closeEditor() { diff --git a/src/com/android/browser/AutofillHandler.java b/src/com/android/browser/AutofillHandler.java index c4b14d7..dc23d00 100644 --- a/src/com/android/browser/AutofillHandler.java +++ b/src/com/android/browser/AutofillHandler.java @@ -21,9 +21,11 @@ import android.content.Context; import android.content.SharedPreferences; import android.content.SharedPreferences.Editor; import android.database.Cursor; +import android.net.Uri; import android.os.AsyncTask; import android.os.Message; import android.preference.PreferenceManager; +import android.provider.ContactsContract; import android.webkit.WebSettings.AutoFillProfile; import java.util.concurrent.CountDownLatch; @@ -114,8 +116,58 @@ public class AutofillHandler { c.close(); autoFillDb.close(); + if (mAutoFillProfile == null) { + // We did not load a profile from disk. Try to populate one with the user's + // "me" contact. + final Uri profileUri = Uri.withAppendedPath(ContactsContract.Profile.CONTENT_URI, + ContactsContract.Contacts.Data.CONTENT_DIRECTORY); + + String name = getContactField(profileUri, + ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME, + ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE); + // Only attempt to read other data and set a profile if we could successfully + // get a name. + if (name != null) { + String email = getContactField(profileUri, + ContactsContract.CommonDataKinds.Email.ADDRESS, + ContactsContract.CommonDataKinds.Email.CONTENT_ITEM_TYPE); + String phone = getContactField(profileUri, + ContactsContract.CommonDataKinds.Phone.NUMBER, + ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE); + String company = getContactField(profileUri, + ContactsContract.CommonDataKinds.Organization.COMPANY, + ContactsContract.CommonDataKinds.Organization.CONTENT_ITEM_TYPE); + + // Can't easily get structured postal address information (even using + // CommonDataKinds.StructuredPostal) so omit prepopulating that for now. + // When querying structured postal data, it often all comes back as a string + // inside the "street" field. + + mAutoFillProfile = new AutoFillProfile( + 1, name, email, company, null, null, null, null, + null, null, phone); + } + } + mLoaded.countDown(); } + + private String getContactField(Uri uri, String field, String itemType) { + String result = null; + + Cursor c = mContext.getContentResolver().query(uri, new String[] { field }, + ContactsContract.Data.MIMETYPE + "=?", new String[] { itemType }, null); + + try { + // Just use the first returned value if we get more than one. + if (c.moveToFirst()) { + result = c.getString(0); + } + } finally { + c.close(); + } + return result; + } } public void setAutoFillProfile(AutoFillProfile profile, Message msg) { diff --git a/src/com/android/browser/BaseUi.java b/src/com/android/browser/BaseUi.java index 69063eb..e1d7047 100644 --- a/src/com/android/browser/BaseUi.java +++ b/src/com/android/browser/BaseUi.java @@ -236,6 +236,7 @@ public abstract class BaseUi implements UI { @Override public void setActiveTab(final Tab tab) { + if (tab == null) return; mHandler.removeMessages(MSG_HIDE_TITLEBAR); if ((tab != mActiveTab) && (mActiveTab != null)) { removeTabFromContentView(mActiveTab); diff --git a/src/com/android/browser/BrowserActivity.java b/src/com/android/browser/BrowserActivity.java index 23aeed5..77fac4f 100644 --- a/src/com/android/browser/BrowserActivity.java +++ b/src/com/android/browser/BrowserActivity.java @@ -62,7 +62,7 @@ public class BrowserActivity extends Activity { finish(); return; } - mController = new Controller(this, icicle == null); + mController = new Controller(this); boolean xlarge = isTablet(this); if (xlarge) { mUi = new XLargeUi(this, mController); @@ -71,12 +71,8 @@ public class BrowserActivity extends Activity { } mController.setUi(mUi); - Bundle state = getIntent().getBundleExtra(EXTRA_STATE); - if (state != null && icicle == null) { - icicle = state; - } - - mController.start(icicle, getIntent()); + Intent intent = (icicle == null) ? getIntent() : null; + mController.start(intent); } public static boolean isTablet(Context context) { diff --git a/src/com/android/browser/BrowserSettings.java b/src/com/android/browser/BrowserSettings.java index 2369554..dd7bb56 100644 --- a/src/com/android/browser/BrowserSettings.java +++ b/src/com/android/browser/BrowserSettings.java @@ -174,8 +174,6 @@ public class BrowserSettings implements OnSharedPreferenceChangeListener, mWebStorageSizeManager = new WebStorageSizeManager(mContext, new WebStorageSizeManager.StatFsDiskInfo(getAppCachePath()), new WebStorageSizeManager.WebKitAppCacheInfo(getAppCachePath())); - // Workaround b/5253777 - CookieManager.getInstance().acceptCookie(); // Workaround b/5254577 mPrefs.registerOnSharedPreferenceChangeListener(BrowserSettings.this); if (Build.VERSION.CODENAME.equals("REL")) { @@ -847,4 +845,47 @@ public class BrowserSettings implements OnSharedPreferenceChangeListener, return mPrefs.getString(PREF_DATA_PRELOAD, getDefaultPreloadSetting()); } + // ----------------------------- + // getter/setters for browser recovery + // ----------------------------- + /** + * The last time browser was started. + * @return The last browser start time as System.currentTimeMillis. This + * can be 0 if this is the first time or the last tab was closed. + */ + public long getLastRecovered() { + return mPrefs.getLong(KEY_LAST_RECOVERED, 0); + } + + /** + * Sets the last browser start time. + * @param time The last time as System.currentTimeMillis that the browser + * was started. This should be set to 0 if the last tab is closed. + */ + public void setLastRecovered(long time) { + mPrefs.edit() + .putLong(KEY_LAST_RECOVERED, time) + .apply(); + } + + /** + * Used to determine whether or not the previous browser run crashed. Once + * the previous state has been determined, the value will be set to false + * until a pause is received. + * @return true if the last browser run was paused or false if it crashed. + */ + public boolean wasLastRunPaused() { + return mPrefs.getBoolean(KEY_LAST_RUN_PAUSED, false); + } + + /** + * Sets whether or not the last run was a pause or crash. + * @param isPaused Set to true When a pause is received or false after + * resuming. + */ + public void setLastRunPaused(boolean isPaused) { + mPrefs.edit() + .putBoolean(KEY_LAST_RUN_PAUSED, isPaused) + .apply(); + } } diff --git a/src/com/android/browser/Controller.java b/src/com/android/browser/Controller.java index 8238d77..67be22e 100644 --- a/src/com/android/browser/Controller.java +++ b/src/com/android/browser/Controller.java @@ -218,15 +218,13 @@ public class Controller private boolean mBlockEvents; - public Controller(Activity browser, boolean preloadCrashState) { + public Controller(Activity browser) { mActivity = browser; mSettings = BrowserSettings.getInstance(); mTabControl = new TabControl(this); mSettings.setController(this); mCrashRecoveryHandler = CrashRecoveryHandler.initialize(this); - if (preloadCrashState) { - mCrashRecoveryHandler.preloadCrashState(); - } + mCrashRecoveryHandler.preloadCrashState(); mFactory = new BrowserWebViewFactory(browser); mUrlHandler = new UrlHandler(this); @@ -256,16 +254,12 @@ public class Controller openIconDatabase(); } - void start(final Bundle icicle, final Intent intent) { - boolean noCrashRecovery = intent.getBooleanExtra(NO_CRASH_RECOVERY, false); - if (icicle != null || noCrashRecovery) { - doStart(icicle, intent, false); - } else { - mCrashRecoveryHandler.startRecovery(intent); - } + void start(final Intent intent) { + // mCrashRecoverHandler has any previously saved state. + mCrashRecoveryHandler.startRecovery(intent); } - void doStart(final Bundle icicle, final Intent intent, final boolean fromCrash) { + void doStart(final Bundle icicle, final Intent intent) { // Unless the last browser usage was within 24 hours, destroy any // remaining incognito tabs. @@ -293,36 +287,42 @@ public class Controller GoogleAccountLogin.startLoginIfNeeded(mActivity, new Runnable() { @Override public void run() { - onPreloginFinished(icicle, intent, currentTabId, restoreIncognitoTabs, - fromCrash); + onPreloginFinished(icicle, intent, currentTabId, + restoreIncognitoTabs); } }); } private void onPreloginFinished(Bundle icicle, Intent intent, long currentTabId, - boolean restoreIncognitoTabs, boolean fromCrash) { + boolean restoreIncognitoTabs) { if (currentTabId == -1) { BackgroundHandler.execute(new PruneThumbnails(mActivity, null)); - final Bundle extra = intent.getExtras(); - // Create an initial tab. - // If the intent is ACTION_VIEW and data is not null, the Browser is - // invoked to view the content by another application. In this case, - // the tab will be close when exit. - UrlData urlData = IntentHandler.getUrlDataFromIntent(intent); - Tab t = null; - if (urlData.isEmpty()) { - t = openTabToHomePage(); + if (intent == null) { + // This won't happen under common scenarios. The icicle is + // not null, but there aren't any tabs to restore. + openTabToHomePage(); } else { - t = openTab(urlData); - } - if (t != null) { - t.setAppId(intent.getStringExtra(Browser.EXTRA_APPLICATION_ID)); - } - WebView webView = t.getWebView(); - if (extra != null) { - int scale = extra.getInt(Browser.INITIAL_ZOOM_LEVEL, 0); - if (scale > 0 && scale <= 1000) { - webView.setInitialScale(scale); + final Bundle extra = intent.getExtras(); + // Create an initial tab. + // If the intent is ACTION_VIEW and data is not null, the Browser is + // invoked to view the content by another application. In this case, + // the tab will be close when exit. + UrlData urlData = IntentHandler.getUrlDataFromIntent(intent); + Tab t = null; + if (urlData.isEmpty()) { + t = openTabToHomePage(); + } else { + t = openTab(urlData); + } + if (t != null) { + t.setAppId(intent.getStringExtra(Browser.EXTRA_APPLICATION_ID)); + } + WebView webView = t.getWebView(); + if (extra != null) { + int scale = extra.getInt(Browser.INITIAL_ZOOM_LEVEL, 0); + if (scale > 0 && scale <= 1000) { + webView.setInitialScale(scale); + } } } mUi.updateTabs(mTabControl.getTabs()); @@ -342,9 +342,9 @@ public class Controller // TabControl.restoreState() will create a new tab even if // restoring the state fails. setActiveTab(mTabControl.getCurrentTab()); - // Handle the intent if needed. If icicle != null, we are restoring - // and the intent will be stale - ignore it. - if (icicle == null || fromCrash) { + // Intent is non-null when framework thinks the browser should be + // launching with a new intent (icicle is null). + if (intent != null) { mIntentHandler.onNewIntent(intent); } } @@ -353,7 +353,8 @@ public class Controller if (jsFlags.trim().length() != 0) { getCurrentWebView().setJsFlags(jsFlags); } - if (BrowserActivity.ACTION_SHOW_BOOKMARKS.equals(intent.getAction())) { + if (intent != null + && BrowserActivity.ACTION_SHOW_BOOKMARKS.equals(intent.getAction())) { bookmarksOrHistoryPicker(ComboViews.Bookmarks); } } @@ -651,18 +652,27 @@ public class Controller } void onSaveInstanceState(Bundle outState) { - // the default implementation requires each view to have an id. As the - // browser handles the state itself and it doesn't use id for the views, - // don't call the default implementation. Otherwise it will trigger the - // warning like this, "couldn't save which view has focus because the - // focused view XXX has no id". - // Save all the tabs - mTabControl.saveState(outState); - if (!outState.isEmpty()) { + Bundle saveState = createSaveState(); + + // crash recovery manages all save & restore state + mCrashRecoveryHandler.writeState(saveState); + mSettings.setLastRunPaused(true); + } + + /** + * Save the current state to outState. Does not write the state to + * disk. + * @return Bundle containing the current state of all tabs. + */ + /* package */ Bundle createSaveState() { + Bundle saveState = new Bundle(); + mTabControl.saveState(saveState); + if (!saveState.isEmpty()) { // Save time so that we know how old incognito tabs (if any) are. - outState.putSerializable("lastActiveDate", Calendar.getInstance()); + saveState.putSerializable("lastActiveDate", Calendar.getInstance()); } + return saveState; } void onResume() { @@ -670,6 +680,7 @@ public class Controller Log.e(LOGTAG, "BrowserActivity is already resumed."); return; } + mSettings.setLastRunPaused(false); mActivityPaused = false; Tab current = mTabControl.getCurrentTab(); if (current != null) { @@ -831,7 +842,8 @@ public class Controller mUi.onTabDataChanged(tab); if (!tab.isPrivateBrowsingEnabled() && !TextUtils.isEmpty(tab.getUrl()) - && !tab.isSnapshot()) { + && !tab.isSnapshot() + && !tab.inPageLoad()) { // Only update the bookmark screenshot if the user did not // cancel the load early and there is not already // a pending update for the tab. @@ -1282,6 +1294,7 @@ public class Controller // Show the correct menu group final String extra = result.getExtra(); + if (extra == null) return; menu.setGroupVisible(R.id.PHONE_MENU, type == WebView.HitTestResult.PHONE_TYPE); menu.setGroupVisible(R.id.EMAIL_MENU, @@ -1509,9 +1522,6 @@ public class Controller nav.setEnabled(isNavDump); boolean showDebugSettings = mSettings.isDebugEnabled(); - final MenuItem counter = menu.findItem(R.id.dump_counters_menu_id); - counter.setVisible(showDebugSettings); - counter.setEnabled(showDebugSettings); final MenuItem uaSwitcher = menu.findItem(R.id.ua_desktop_menu_id); uaSwitcher.setChecked(isDesktopUa); menu.setGroupVisible(R.id.LIVE_MENU, isLive); @@ -1666,10 +1676,6 @@ public class Controller getCurrentTopWebView().debugDump(); break; - case R.id.dump_counters_menu_id: - getCurrentTopWebView().dumpV8Counters(); - break; - case R.id.zoom_in_menu_id: getCurrentTopWebView().zoomIn(); break; @@ -2006,7 +2012,6 @@ public class Controller } final String url = tab.getUrl(); final String originalUrl = view.getOriginalUrl(); - if (TextUtils.isEmpty(url)) { return; } @@ -2107,7 +2112,7 @@ public class Controller manager.addCompletedDownload(target.getName(), mActivity.getTitle().toString(), false, uri.getMimeType(), target.getAbsolutePath(), - (long)uri.getData().length, false); + (long)uri.getData().length, true); } catch (IOException e) { Log.e(LOGTAG, "Could not save data URL"); } finally { @@ -2565,8 +2570,11 @@ public class Controller * returns the current tab if it can't advance */ private Tab getNextTab() { - return mTabControl.getTab(Math.min(mTabControl.getTabCount() - 1, - mTabControl.getCurrentPosition() + 1)); + int pos = mTabControl.getCurrentPosition() + 1; + if (pos >= mTabControl.getTabCount()) { + pos = 0; + } + return mTabControl.getTab(pos); } /** @@ -2574,8 +2582,11 @@ public class Controller * returns the current tab if it can't advance */ private Tab getPrevTab() { - return mTabControl.getTab(Math.max(0, - mTabControl.getCurrentPosition() - 1)); + int pos = mTabControl.getCurrentPosition() - 1; + if ( pos < 0) { + pos = mTabControl.getTabCount() - 1; + } + return mTabControl.getTab(pos); } /** diff --git a/src/com/android/browser/CrashRecoveryHandler.java b/src/com/android/browser/CrashRecoveryHandler.java index 3202016..822e82a 100644 --- a/src/com/android/browser/CrashRecoveryHandler.java +++ b/src/com/android/browser/CrashRecoveryHandler.java @@ -37,8 +37,6 @@ public class CrashRecoveryHandler { private static final boolean LOGV_ENABLED = Browser.LOGV_ENABLED; private static final String LOGTAG = "BrowserCrashRecovery"; private static final String STATE_FILE = "browser_state.parcel"; - private static final String RECOVERY_PREFERENCES = "browser_recovery_prefs"; - private static final String KEY_LAST_RECOVERED = "last_recovered"; private static final int BUFFER_SIZE = 4096; private static final long BACKUP_DELAY = 500; // 500ms between writes /* This is the duration for which we will prompt to restore @@ -85,31 +83,8 @@ public class CrashRecoveryHandler { public void handleMessage(Message msg) { switch (msg.what) { case MSG_WRITE_STATE: - if (LOGV_ENABLED) { - Log.v(LOGTAG, "Saving crash recovery state"); - } - Parcel p = Parcel.obtain(); - try { - Bundle state = (Bundle) msg.obj; - state.writeToParcel(p, 0); - File stateJournal = new File(mContext.getCacheDir(), - STATE_FILE + ".journal"); - FileOutputStream fout = new FileOutputStream(stateJournal); - fout.write(p.marshall()); - fout.close(); - File stateFile = new File(mContext.getCacheDir(), - STATE_FILE); - if (!stateJournal.renameTo(stateFile)) { - // Failed to rename, try deleting the existing - // file and try again - stateFile.delete(); - stateJournal.renameTo(stateFile); - } - } catch (Throwable e) { - Log.i(LOGTAG, "Failed to save persistent state", e); - } finally { - p.recycle(); - } + Bundle saveState = (Bundle) msg.obj; + writeState(saveState); break; case MSG_CLEAR_STATE: if (LOGV_ENABLED) { @@ -142,8 +117,7 @@ public class CrashRecoveryHandler { @Override public void run() { try { - final Bundle state = new Bundle(); - mController.onSaveInstanceState(state); + final Bundle state = mController.createSaveState(); Message.obtain(mBackgroundHandler, MSG_WRITE_STATE, state) .sendToTarget(); // Remove any queued up saves @@ -162,28 +136,24 @@ public class CrashRecoveryHandler { } private boolean shouldRestore() { - SharedPreferences prefs = mContext.getSharedPreferences( - RECOVERY_PREFERENCES, Context.MODE_PRIVATE); - long lastRecovered = prefs.getLong(KEY_LAST_RECOVERED, 0); + BrowserSettings browserSettings = BrowserSettings.getInstance(); + long lastRecovered = browserSettings.getLastRecovered(); long timeSinceLastRecover = System.currentTimeMillis() - lastRecovered; - if (timeSinceLastRecover > PROMPT_INTERVAL) { - return true; - } - return false; + return (timeSinceLastRecover > PROMPT_INTERVAL) + || browserSettings.wasLastRunPaused(); } private void updateLastRecovered(long time) { - SharedPreferences prefs = mContext.getSharedPreferences( - RECOVERY_PREFERENCES, Context.MODE_PRIVATE); - prefs.edit() - .putLong(KEY_LAST_RECOVERED, time) - .apply(); + BrowserSettings browserSettings = BrowserSettings.getInstance(); + browserSettings.setLastRecovered(time); } - private Bundle loadCrashState() { + synchronized private Bundle loadCrashState() { if (!shouldRestore()) { return null; } + BrowserSettings browserSettings = BrowserSettings.getInstance(); + browserSettings.setLastRunPaused(false); Bundle state = null; Parcel parcel = Parcel.obtain(); FileInputStream fin = null; @@ -231,7 +201,7 @@ public class CrashRecoveryHandler { } updateLastRecovered(mRecoveryState != null ? System.currentTimeMillis() : 0); - mController.doStart(mRecoveryState, intent, true); + mController.doStart(mRecoveryState, intent); mRecoveryState = null; } @@ -245,4 +215,35 @@ public class CrashRecoveryHandler { mBackgroundHandler.sendEmptyMessage(MSG_PRELOAD_STATE); } -} + /** + * Writes the crash recovery state to a file synchronously. + * Errors are swallowed, but logged. + * @param state The state to write out + */ + synchronized void writeState(Bundle state) { + if (LOGV_ENABLED) { + Log.v(LOGTAG, "Saving crash recovery state"); + } + Parcel p = Parcel.obtain(); + try { + state.writeToParcel(p, 0); + File stateJournal = new File(mContext.getCacheDir(), + STATE_FILE + ".journal"); + FileOutputStream fout = new FileOutputStream(stateJournal); + fout.write(p.marshall()); + fout.close(); + File stateFile = new File(mContext.getCacheDir(), + STATE_FILE); + if (!stateJournal.renameTo(stateFile)) { + // Failed to rename, try deleting the existing + // file and try again + stateFile.delete(); + stateJournal.renameTo(stateFile); + } + } catch (Throwable e) { + Log.i(LOGTAG, "Failed to save persistent state", e); + } finally { + p.recycle(); + } + } +}
\ No newline at end of file diff --git a/src/com/android/browser/NavigationBarTablet.java b/src/com/android/browser/NavigationBarTablet.java index 04f372a..026e903 100644 --- a/src/com/android/browser/NavigationBarTablet.java +++ b/src/com/android/browser/NavigationBarTablet.java @@ -261,7 +261,9 @@ public class NavigationBarTablet extends NavigationBarBase { if (mTitleBar.isInLoad()) { mUiController.stopLoading(); } else { - mUiController.getCurrentTopWebView().reload(); + if (mUiController.getCurrentTopWebView() != null) { + mUiController.getCurrentTopWebView().reload(); + } } } diff --git a/src/com/android/browser/PhoneUi.java b/src/com/android/browser/PhoneUi.java index 4da0668..1bc0f77 100644 --- a/src/com/android/browser/PhoneUi.java +++ b/src/com/android/browser/PhoneUi.java @@ -434,7 +434,7 @@ public class PhoneUi extends BaseUi { mNavScreen.mScroller.finishScroller(); ImageView target = tabview.mImage; int toLeft = 0; - int toTop = getTitleBar().getHeight(); + int toTop = (tab.getWebView() != null) ? tab.getWebView().getVisibleTitleHeight() : 0; int toRight = mContentView.getWidth(); int width = target.getDrawable().getIntrinsicWidth(); int height = target.getDrawable().getIntrinsicHeight(); diff --git a/src/com/android/browser/PreferenceKeys.java b/src/com/android/browser/PreferenceKeys.java index ecab008..1a20495 100644 --- a/src/com/android/browser/PreferenceKeys.java +++ b/src/com/android/browser/PreferenceKeys.java @@ -104,4 +104,17 @@ public interface PreferenceKeys { static final String PREF_DATA_PRELOAD = "preload_when"; static final String PREF_LOAD_IMAGES = "load_images"; + // ---------------------- + // Keys for browser recovery + // ---------------------- + /** + * The last time recovery was started as System.currentTimeMillis. + * 0 if not set. + */ + static final String KEY_LAST_RECOVERED = "last_recovered"; + + /** + * Key for whether or not the last run was paused. + */ + static final String KEY_LAST_RUN_PAUSED = "last_paused"; } diff --git a/src/com/android/browser/Tab.java b/src/com/android/browser/Tab.java index 0abc86b..a7598c2 100644 --- a/src/com/android/browser/Tab.java +++ b/src/com/android/browser/Tab.java @@ -610,11 +610,6 @@ class Tab implements PictureListener { @Override public void onPageFinished(WebView view, String url) { - if (!mInPageLoad) { - // In page navigation links (www.something.com#footer) will - // trigger an onPageFinished which we don't care about. - return; - } if (!isPrivateBrowsingEnabled()) { LogTag.logPageFinishedLoading( url, SystemClock.uptimeMillis() - mLoadStartTime); diff --git a/src/com/android/browser/TabBar.java b/src/com/android/browser/TabBar.java index d549ac3..bd17c74 100644 --- a/src/com/android/browser/TabBar.java +++ b/src/com/android/browser/TabBar.java @@ -31,10 +31,7 @@ import android.graphics.Matrix; import android.graphics.Paint; import android.graphics.Path; import android.graphics.Shader; -import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.Drawable; -import android.graphics.drawable.LayerDrawable; -import android.graphics.drawable.PaintDrawable; import android.view.Gravity; import android.view.LayoutInflater; import android.view.View; @@ -253,7 +250,6 @@ public class TabBar extends LinearLayout implements OnClickListener { ImageView mLock; ImageView mClose; boolean mSelected; - boolean mInLoad; Path mPath; Path mFocusPath; int[] mWindowPos; @@ -281,7 +277,6 @@ public class TabBar extends LinearLayout implements OnClickListener { mIncognito = mTabContent.findViewById(R.id.incognito); mSnapshot = mTabContent.findViewById(R.id.snapshot); mSelected = false; - mInLoad = false; // update the status updateFromTab(); } @@ -299,7 +294,6 @@ public class TabBar extends LinearLayout implements OnClickListener { displayTitle = mTab.getUrl(); } setDisplayTitle(displayTitle); - setProgress(mTab.getLoadProgress()); if (mTab.getFavicon() != null) { setFavicon(mUi.getFaviconDrawable(mTab.getFavicon())); } @@ -352,16 +346,6 @@ public class TabBar extends LinearLayout implements OnClickListener { } } - void setProgress(int newProgress) { - if (newProgress >= PROGRESS_MAX) { - mInLoad = false; - } else { - if (!mInLoad && getWindowToken() != null) { - mInLoad = true; - } - } - } - private void closeTab() { if (mTab == mTabControl.getCurrentTab()) { mUiController.closeCurrentTab(); @@ -503,10 +487,6 @@ public class TabBar extends LinearLayout implements OnClickListener { public void onSetActiveTab(Tab tab) { mTabs.setSelectedTab(mTabControl.getTabPosition(tab)); - TabView tv = mTabMap.get(tab); - if (tv != null) { - tv.setProgress(tv.mTab.getLoadProgress()); - } } public void onFavicon(Tab tab, Bitmap favicon) { @@ -521,13 +501,6 @@ public class TabBar extends LinearLayout implements OnClickListener { animateTabIn(tab, tv); } - public void onProgress(Tab tab, int progress) { - TabView tv = mTabMap.get(tab); - if (tv != null) { - tv.setProgress(progress); - } - } - public void onRemoveTab(Tab tab) { TabView tv = mTabMap.get(tab); if (tv != null) { @@ -550,9 +523,9 @@ public class TabBar extends LinearLayout implements OnClickListener { } private boolean isLoading() { - TabView tv = mTabMap.get(mTabControl.getCurrentTab()); - if (tv != null) { - return tv.mInLoad; + Tab tab = mTabControl.getCurrentTab(); + if (tab != null) { + return tab.inPageLoad(); } else { return false; } diff --git a/src/com/android/browser/UrlHandler.java b/src/com/android/browser/UrlHandler.java index 73b265d..a4df999 100644 --- a/src/com/android/browser/UrlHandler.java +++ b/src/com/android/browser/UrlHandler.java @@ -209,7 +209,7 @@ public class UrlHandler { // Error on the side of staying in the browser, ignore continue; } - if (filter.countDataAuthorities() == 0 || filter.countDataPaths() == 0) { + if (filter.countDataAuthorities() == 0 && filter.countDataPaths() == 0) { // Generic handler, skip continue; } diff --git a/src/com/android/browser/XLargeUi.java b/src/com/android/browser/XLargeUi.java index c828df4..17153b6 100644 --- a/src/com/android/browser/XLargeUi.java +++ b/src/com/android/browser/XLargeUi.java @@ -162,9 +162,15 @@ public class XLargeUi extends BaseUi { @Override public void onProgressChanged(Tab tab) { int progress = tab.getLoadProgress(); - mTabBar.onProgress(tab, progress); if (tab.inForeground()) { mTitleBar.setProgress(progress); + if (mUseQuickControls) { + if (progress == 100) { + mTitleBar.setShowProgressOnly(false); + } else if (!mTitleBar.isEditingUrl()) { + mTitleBar.setShowProgressOnly(true); + } + } } } diff --git a/src/com/android/browser/view/PieStackView.java b/src/com/android/browser/view/PieStackView.java index ca641f9..7e1922d 100644 --- a/src/com/android/browser/view/PieStackView.java +++ b/src/com/android/browser/view/PieStackView.java @@ -84,7 +84,7 @@ public class PieStackView extends BasePieView { @Override public void draw(Canvas canvas) { - if (mViews != null) { + if ((mViews != null) && (mCurrent > -1)) { final int n = mViews.size(); for (int i = 0; i < mCurrent; i++) { drawView(mViews.get(i), canvas); diff --git a/tests/assets/bindings_test.html b/tests/assets/bindings_test.html deleted file mode 100755 index 7218f58..0000000 --- a/tests/assets/bindings_test.html +++ /dev/null @@ -1,239 +0,0 @@ -<html> -<head> -<script type="text/javascript"> - -function testPrimitiveTypes() { - return JNIBindingsTest.testPrimitiveTypes(100, 'c', 123.34567890, 456.789, 1234567, 1234567890, 6000, true); -} - -function testObjectTypes() { - return JNIBindingsTest.testObjectTypes("Foo", "", null, {"foo":"bar"}, {}); -} - -function testArray() { - return JNIBindingsTest.testArray([1,2,3], ['d', 'o', 'g'], [1.2, 2.3, 3.4], [4.5,5.6,6.7], [1,2,3], [4,5,6], [7,8,9], [true, false]); -} - -function testObjectArray() { - return JNIBindingsTest.testObjectArray(['Hello', 'World', '!'], [], [{"foo":"bar"}]); -} - -function testObjectMembers() { - var foo = {"bool":true, - "byte":101, - "char":'d', - "double":123.456, - "float":456.789, - "int":102, - "long":103, - "short":104, - "string":"Hello World", - "array": [1,2,3], - "objArray":["foo", "bar", "baz"], - "object": {"foo":1} - }; - return JNIBindingsTest.testObjectMembers(foo.bool, foo.byte, foo.char, foo.double, foo.float, foo.int, foo.long, foo.short, foo.string, foo.array, foo.objArray, foo.object); -} - -function testJSPrimitivesToStringsInJava() { - return JNIBindingsTest.testJSPrimitivesToStringsInJava(123, null, 456.789, true, 'd', undefined); -} - -function testJavaReturnTypes() { - var expectedBoolReturn = true; - var expectedByteReturn = 1; - var expectedCharReturn = 98; // 'b'; Currently bindings in JSC and V8 return chars as their ASCII equivalent. - var expectedDoubleReturn = 123.456; - var expectedFloatReturn = 456.789; - var expectedIntReturn = 123; - var expectedLongReturn = 1234; - var expectedShortReturn = 12345; - var expectedStringReturn = "Hello World!"; - - var returned = JNIBindingsTest.returnBool(); - if (returned != expectedBoolReturn) { - appendLog("returnBool() failed: expected "+ expectedBoolReturn +", got " + returned); - return false; - } - - returned = JNIBindingsTest.returnByte(); - if (returned != expectedByteReturn) { - appendLog("returnByte() failed: expected "+ expectedByteReturn +", got " + returned); - return false; - } - - returned = JNIBindingsTest.returnChar(); - if (returned != expectedCharReturn) { - appendLog("returnChar() failed: expected "+ expectedCharReturn +", got " + returned); - return false; - } - - returned = JNIBindingsTest.returnDouble(); - if (returned != expectedDoubleReturn) { - appendLog("returnDouble() failed: expected "+ expectedDoubleReturn +", got " + returned); - return false; - } - - returned = JNIBindingsTest.returnFloat(); - if (Math.abs(returned - expectedFloatReturn) > 0.001) { - appendLog("returnFloat() failed: expected "+ expectedFloatReturn +", got " + returned); - return false; - } - - returned = JNIBindingsTest.returnInt(); - if (returned != expectedIntReturn) { - appendLog("returnInt() failed: expected "+ expectedIntReturn +", got " + returned); - return false; - } - - returned = JNIBindingsTest.returnLong(); - if (returned != expectedLongReturn) { - appendLog("returnLong() failed: expected "+ expectedLongReturn +", got " + returned); - return false; - } - - returned = JNIBindingsTest.returnShort(); - if (returned != expectedShortReturn) { - appendLog("returnShort() failed: expected "+ expectedShortReturn +", got " + returned); - return false; - } - - returned = JNIBindingsTest.returnString(); - if (returned != expectedStringReturn) { - appendLog("returnString() failed: expected "+ expectedStringReturn +", got " + returned); - return false; - } - - returned = JNIBindingsTest.returnNullString(); - if (returned !== undefined) { - appendLog("returnNullString() failed: expected undefined, got " + returned); - return false; - } - - returned = JNIBindingsTest.returnObject(); - if (returned == null) { - appendLog("returnObject() failed: expected non-null, got " + returned); - return false; - } else if (returned.x != undefined) { - // We do not support getting object properties. - appendLog("returnObject() failed: expected 'x' property undefined, got " + returned.x) - return false; - } else if (returned.s != undefined) { - // We do not support getting object properties. - appendLog("returnObject() failed: expected 's' property undefined, got " + returned.s); - return false; - } else if (!returned.aMethod()) { - appendLog("returnObject() failed: expected 'aMethod' method to return true, got " + returned.aMethod()); - return false; - } else if (returned.anotherMethod() != "Hello World") { - appendLog("returnObject() failed: expected 'anotherMethod' to return 'Hello World' got "+ returned.anotherMethod()); - return false; - } - - returned = JNIBindingsTest.returnArray(); - if (returned != null) { - appendLog("returnArray() failed: expected null, got " + returned); - return false; - } - - returned = JNIBindingsTest.returnVoid(); - if (returned != null) { - appendLog("returnVoid() failed: expected null, got " + returned); - return false; - } - - return true; -} - -function getIfaceProperties() { - if (JNIBindingsTest.mInt != undefined) { - // We do not support getting object properties. - appendLog("getIfaceProperties() failed: expected mInt = undefined, got " + JNIBindingsTest.mInt); - return false; - } - - if (JNIBindingsTest.mString != undefined) { - // We do not support getting object properties. - appendLog("getIfaceProperties() failed: expected mString = undefined, got " + JNIBindingsTest.mString); - return false; - } - - return true; -} - -function testParameterTypeMismatch() { - return JNIBindingsTest.testParameterTypeMismatch("dog"); -} - -function appendLog(msg) { - var log = document.getElementById("status"); - log.innerHTML += "<br/>" + msg; -} - -function runTests() { - - // Assume that if the test isn't done after 10s that we failed. - window.setTimeout(function() { JNIBindingsTest.notifyComplete(); }, 10000); - - if (testPrimitiveTypes()) { - appendLog("testPrimitiveTypes passed!"); - } else { - appendLog("testPrimtiveTypes failed!"); - } - - if (testObjectTypes()) { - appendLog("testObjectTypes passed!"); - } else { - appendLog("testObjectTypes failed!"); - } - - if (testArray()) { - appendLog("testArray passed!"); - } else { - appendLog("testArray failed!"); - } - - if (testObjectArray()) { - appendLog("testObjectArray passed!"); - } else { - appendLog("testObjectArray failed!"); - } - - if (testObjectMembers()) { - appendLog("testObjectMembers passed!"); - } else { - appendLog("<br/>testObjectMembers failed!"); - } - - if (testJSPrimitivesToStringsInJava()) { - appendLog("testJSPrimitivesToStringsInJava passed!"); - } else { - appendLog("testJSPrimitivesToStringsInJava failed!"); - } - - if (testJavaReturnTypes()) { - appendLog("testJavaReturnTypes passed!"); - } else { - appendLog("testJavaReturnTypes failed!"); - } - - if (getIfaceProperties()) { - appendLog("getIfaceProperties passed!"); - } else { - appendLog("getIfaceProperties failed!"); - } - - if (testParameterTypeMismatch()) { - appendLog("testParameterTypeMismatch passed!"); - } else { - appendLog("testParameterTypeMismatch failed!"); - } - - JNIBindingsTest.notifyComplete(); -} -</script> - -<body onload="runTests();"> -<p id="status">Running JNI Bindings test...</p> -</body> -</html> diff --git a/tests/src/com/android/browser/JNIBindingsTest.java b/tests/src/com/android/browser/JNIBindingsTest.java deleted file mode 100644 index ae694c9..0000000 --- a/tests/src/com/android/browser/JNIBindingsTest.java +++ /dev/null @@ -1,288 +0,0 @@ -/* - * 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.test.AndroidTestCase; -import android.util.Log; - -import java.util.Arrays; - -import junit.framework.AssertionFailedError; - -public class JNIBindingsTest extends AndroidTestCase { - - private final static String LOGTAG = "JNIBindingsTest"; - private JNIBindingsTestApp mTestApp; - - public int mInt = 123; - public String mString = "Hello World"; - - public JNIBindingsTest(JNIBindingsTestApp testApp) { - mTestApp = testApp; - } - - public void notifyComplete() { - Log.v(LOGTAG, "Completing the test."); - mTestApp.notifyComplete(); - } - - public void printAssertionFailed(AssertionFailedError e) { - Log.e(LOGTAG, ""); - Log.e(LOGTAG, "*** ASSERTION FAILED: " + e.getMessage()); - Log.e(LOGTAG, "*** Stack trace:"); - StackTraceElement[] trace = e.getStackTrace(); - for(StackTraceElement elem : trace) { - Log.e(LOGTAG, "***\t" + elem.toString()); - } - Log.e(LOGTAG, ""); - } - - public boolean testPrimitiveTypes(byte byteParam, char charParam, double doubleParam, - float floatParam, int intParam, long longParam, short shortParam, - boolean booleanParam) { - byte expectedByteParam = 100; - char expectedCharParam = 'c'; - double expectedDoubleParam = 123.34567890; - float expectedFloatParam = 456.789f; - int expectedIntParam = 1234567; - long expectedLongParam = 1234567890L; - short expectedShortParam = 6000; - boolean expectedBooleanParam = true; - - try { - assertEquals(expectedByteParam, byteParam); - - // EMULATE_JSC_BINDINGS: JSC does not pass chars correctly - // assertEquals(expectedCharParam, charParam); - - assertEquals(expectedDoubleParam, doubleParam); - assertEquals(expectedFloatParam, floatParam); - assertEquals(expectedIntParam, intParam); - assertEquals(expectedLongParam, longParam); - assertEquals(expectedShortParam, shortParam); - assertEquals(expectedBooleanParam, booleanParam); - } catch (AssertionFailedError e) { - printAssertionFailed(e); - return false; - } - return true; - } - - public boolean testObjectTypes(String stringParam, String emptyString, String nullString, - Object objectParam, Object emptyObject) { - String expectedString = "Foo"; - String expectedEmptyString = ""; - - try { - assertNotNull(stringParam); - assertNotNull(emptyString); - assertEquals(expectedString, stringParam); - assertEquals(expectedEmptyString, emptyString); - assertNull(nullString); - assertNull(objectParam); - assertNull(emptyObject); - } catch (AssertionFailedError e) { - printAssertionFailed(e); - return false; - } - return true; - } - - public boolean testArray(byte[] byteArray, char[] charArray, double[] doubleArray, - float[] floatArray, int[] intArray, long[] longArray, short[] shortArray, - boolean[] booleanArray) { - byte[] expectedByteArray = { 1,2,3}; - char[] expectedCharArray = {'d', 'o', 'g'}; - double[] expectedDoubleArray = {1.2,2.3,3.4}; - float[] expectedFloatArray = {4.5F,5.6F,6.7F}; - int[] expectedIntArray = {1,2,3}; - long[] expectedLongArray = {4L,5L,6L}; - short[] expectedShortArray = {7,8,9}; - boolean[] expectedBooleanArray = {true, false}; - - try { - assertNotNull(byteArray); - assertNotNull(charArray); - assertNotNull(doubleArray); - assertNotNull(floatArray); - assertNotNull(intArray); - assertNotNull(longArray); - assertNotNull(shortArray); - assertNotNull(booleanArray); - assertEquals(Arrays.toString(expectedByteArray), Arrays.toString(byteArray)); - assertEquals(Arrays.toString(expectedCharArray), Arrays.toString(charArray)); - assertEquals(Arrays.toString(expectedDoubleArray), Arrays.toString(doubleArray)); - assertEquals(Arrays.toString(expectedFloatArray), Arrays.toString(floatArray)); - assertEquals(Arrays.toString(expectedIntArray), Arrays.toString(intArray)); - assertEquals(Arrays.toString(expectedLongArray), Arrays.toString(longArray)); - assertEquals(Arrays.toString(expectedShortArray), Arrays.toString(shortArray)); - assertEquals(Arrays.toString(expectedBooleanArray), Arrays.toString(booleanArray)); - } catch (AssertionFailedError e) { - printAssertionFailed(e); - return false; - } - return true; - } - - public boolean testObjectArray(String[] stringArray, Object[] emptyArray, - Object[] objectArray) { - String[] expectedStringArray = {"Hello", "World", "!"}; - String expectedStringArrayClassName = "[Ljava.lang.String;"; - Object[] expectedObjectArray = {}; - - try { - assertNotNull(stringArray); - - // EMULATE_JSC_BINDINGS JSC pass null for object arrays that are not strings. - // Should be an empty array? - assertNull(emptyArray); - assertNull(objectArray); - - assertEquals(Arrays.toString(expectedStringArray), Arrays.toString(stringArray)); - assertEquals(expectedStringArrayClassName, stringArray.getClass().getName()); - - // EMULATE_JSC_BINDINGS - // assertEquals(Arrays.toString(expectedObjectArray), Arrays.toString(emptyArray)); - // assertEquals(expectedObjectArrayClassName, emptyArray.getClass().getName()); - // assertEquals(Arrays.toString(expectedObjectArray), Arrays.toString(objectArray)); - // assertEquals(expectedStringObjectClassName, objectArray.getClass().getName()); - - } catch (AssertionFailedError e) { - printAssertionFailed(e); - return false; - } - return true; - } - - public boolean testObjectMembers(boolean boolParam, byte byteParam, char charParam, - double doubleParam, float floatParam, int intParam, long longParam, short shortParam, - String stringParam, int[] intArrayParam, String[] stringArrayParam, - Object objectParam) { - boolean expectedBoolParam = true; - byte expectedByteParam = 101; - char expectedCharParam = 'd'; - double expectedDoubleParam = 123.456; - float expectedFloatParam = 456.789F; - int expectedIntParam = 102; - long expectedLongParam = 103L; - short expectedShortParam = 104; - String expectedStringParam = "Hello World"; - int[] expectedIntArray = {1,2,3}; - String[] expectedStringArrayParam = {"foo", "bar", "baz"}; - String expectedStringArrayClassName = "[Ljava.lang.String;"; - - try { - assertEquals(expectedBoolParam, boolParam); - assertEquals(expectedByteParam, byteParam); - - // EMULATE_JSC_BINDINGS: JSC does not pass chars correctly. (chars are strings in JS) - // assertEquals(expectedCharParam, charParam); - - assertEquals(expectedDoubleParam, doubleParam); - assertEquals(expectedFloatParam, floatParam); - assertEquals(expectedIntParam, intParam); - assertEquals(expectedLongParam, longParam); - assertEquals(expectedShortParam, shortParam); - assertEquals(expectedStringParam, stringParam); - assertEquals(Arrays.toString(expectedIntArray), Arrays.toString(intArrayParam)); - assertEquals(Arrays.toString(expectedStringArrayParam), - Arrays.toString(stringArrayParam)); - assertEquals(expectedStringArrayClassName, stringArrayParam.getClass().getName()); - assertNull(objectParam); - } catch (AssertionFailedError e) { - printAssertionFailed(e); - return false; - } - return true; - } - - public boolean testJSPrimitivesToStringsInJava(String intParam, String nullParam, - String doubleParam, String booleanParam, String charParam, - String undefinedParam) { - String expectedIntParam = "123"; - String expectedDoubleParam = "456.789"; - String expectedBooleanParam = "true"; - String expectedCharParam = "d"; - - // EMULATE_JSC_BINDINGS JSC passes "undefined" for undefined types. Should be null? - String expectedUndefinedParam = "undefined"; - - try { - assertNotNull(intParam); - assertNull(nullParam); - assertNotNull(doubleParam); - assertNotNull(booleanParam); - assertNotNull(charParam); - - // EMULATE_JSC_BINDINGS JSC passes "undefined" for undefined types. - assertNotNull(undefinedParam); - - assertEquals(expectedIntParam, intParam); - assertEquals(expectedDoubleParam, doubleParam); - assertEquals(expectedBooleanParam, booleanParam); - assertEquals(expectedCharParam, charParam); - - // EMULATE_JSC_BINDINGS JSC passes "undefined" for undefined types. - assertEquals(expectedUndefinedParam, undefinedParam); - - } catch (AssertionFailedError e) { - printAssertionFailed(e); - return false; - } - return true; - } - - public boolean testParameterTypeMismatch(String[] stringArrayParam) { - // The JS test will pass a string, not an array to this test. - try { - assertNull(stringArrayParam); - } catch (AssertionFailedError e) { - printAssertionFailed(e); - return false; - } - - return true; - } - - public boolean returnBool() { return true; } - public byte returnByte() { return 1; } - public char returnChar() { return 'b'; } - public double returnDouble() { return 123.456; } - public float returnFloat() { return 456.789F; } - public int returnInt() { return 123; } - public long returnLong() { return 1234L; } - public short returnShort() { return 12345; } - public String returnString() { return "Hello World!"; } - public String returnNullString() { return null; } - - public class TestObject { - public int x = 123; - public String s = "Hello World!"; - - public boolean aMethod() { return true; } - public String anotherMethod() { return "Hello World"; } - } - - public TestObject returnObject() { return new TestObject(); } - - public int[] returnArray() { - int[] array = {1,2,3,4,5}; - return array; - } - - public void returnVoid() { } -} diff --git a/tests/src/com/android/browser/JNIBindingsTestApp.java b/tests/src/com/android/browser/JNIBindingsTestApp.java deleted file mode 100644 index 5d1fd0d..0000000 --- a/tests/src/com/android/browser/JNIBindingsTestApp.java +++ /dev/null @@ -1,274 +0,0 @@ -/* - * Copyright (C) 2010 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.android.browser; - -import android.app.Instrumentation; -import android.net.http.SslError; -import android.os.Handler; -import android.os.Looper; -import android.os.Message; -import android.test.ActivityInstrumentationTestCase2; -import android.util.Log; -import android.webkit.ClientCertRequestHandler; -import android.webkit.JsPromptResult; -import android.webkit.JsResult; -import android.webkit.SslErrorHandler; -import android.webkit.WebView; - -import java.io.File; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; - -/** - * Adds a JavaScript interface to the webview and calls functions on it to verify variables - * are passed from JS to Java correctly. - * To run this test, execute: - * adb shell am instrument -w -e class com.android.browser.JNIBindingsTestApp#testJNIBindings \ - * com.android.browser.tests/android.test.InstrumentationTestRunner - */ -public class JNIBindingsTestApp extends ActivityInstrumentationTestCase2<BrowserActivity> { - - private final static String TAG = "JNIBindingsTest"; - - private static final String SDCARD_BINDINGS_TEST_HTML = "/sdcard/bindings_test.html"; - - private static final int MSG_WEBKIT_DATA_READY = 101; - - private BrowserActivity mActivity = null; - private Controller mController = null; - private Instrumentation mInst = null; - - private boolean mTestDone = false; - private String mWebKitResult; - - private String mExpectedWebKitResult = "Running JNI Bindings test...\n" + - "testPrimitiveTypes passed!\n" + - "testObjectTypes passed!\n" + - "testArray passed!\n" + - "testObjectArray passed!\n" + - "testObjectMembers passed!\n" + - "testJSPrimitivesToStringsInJava passed!\n" + - "testJavaReturnTypes passed!\n" + - "getIfaceProperties passed!\n" + - "testParameterTypeMismatch passed!\n"; - - - private class GetWebKitDataThread extends Thread { - private JNIBindingsTestApp mTestApp; - private WebView mWebView; - private Handler mHandler; - - GetWebKitDataThread(JNIBindingsTestApp testApp, WebView webView) { - mTestApp = testApp; - mWebView = webView; - } - - @Override - public void run() { - Looper.prepare(); - mHandler = new Handler() { - @Override - public void handleMessage(Message msg) { - switch (msg.what) { - case MSG_WEBKIT_DATA_READY: { - mTestApp.setWebKitResult((String)msg.obj); - Looper.myLooper().quit(); - } - default: super.handleMessage(msg); break; - } - } - }; - mWebView.documentAsText(mHandler.obtainMessage(MSG_WEBKIT_DATA_READY, 1, 0)); - Looper.loop(); - } - } - - public synchronized void setWebKitResult(String result) { - mWebKitResult = result; - notify(); - } - - public JNIBindingsTestApp() { - super(BrowserActivity.class); - } - - @Override - protected void setUp() throws Exception { - super.setUp(); - - mActivity = getActivity(); - mController = mActivity.getController(); - mInst = getInstrumentation(); - mInst.waitForIdleSync(); - - extractAsset(); - } - - @Override - protected void tearDown() throws Exception { - removeAsset(); - super.tearDown(); - } - - protected void extractAsset() throws IOException { - InputStream in = getInstrumentation().getContext().getAssets().open("bindings_test.html"); - OutputStream out = new FileOutputStream(SDCARD_BINDINGS_TEST_HTML); - - byte[] buf = new byte[2048]; - int len; - - while ((len = in.read(buf)) >= 0 ) { - out.write(buf, 0, len); - } - out.close(); - in.close(); - } - - protected void removeAsset(){ - File fileToDelete = new File(SDCARD_BINDINGS_TEST_HTML); - fileToDelete.delete(); - } - - /** - * Gets the browser ready for testing by starting the application - * and wrapping the WebView's helper clients. - */ - void setUpBrowser() { - Tab tab = mController.getTabControl().getCurrentTab(); - WebView webView = tab.getWebView(); - webView.addJavascriptInterface(new JNIBindingsTest(this), "JNIBindingsTest"); - - webView.setWebChromeClient(new TestWebChromeClient(webView.getWebChromeClient()) { - - /** - * Dismisses and logs Javascript alerts. - */ - @Override - public boolean onJsAlert(WebView view, String url, String message, - JsResult result) { - String logMsg = String.format("JS Alert '%s' received from %s", message, url); - Log.w(TAG, logMsg); - result.confirm(); - - return true; - } - - /** - * Confirms and logs Javascript alerts. - */ - @Override - public boolean onJsConfirm(WebView view, String url, String message, - JsResult result) { - String logMsg = String.format("JS Confirmation '%s' received from %s", - message, url); - Log.w(TAG, logMsg); - result.confirm(); - - return true; - } - - /** - * Confirms and logs Javascript alerts, providing the default value. - */ - @Override - public boolean onJsPrompt(WebView view, String url, String message, - String defaultValue, JsPromptResult result) { - String logMsg = String.format("JS Prompt '%s' received from %s; " + - "Giving default value '%s'", message, url, defaultValue); - Log.w(TAG, logMsg); - result.confirm(defaultValue); - - return true; - } - }); - - webView.setWebViewClient(new TestWebViewClient(webView.getWebViewClient()) { - - /** - * Bypasses and logs errors. - */ - @Override - public void onReceivedError(WebView view, int errorCode, - String description, String failingUrl) { - String message = String.format("Error '%s' (%d) loading url: %s", - description, errorCode, failingUrl); - Log.w(TAG, message); - } - - /** - * Ignores and logs SSL errors. - */ - @Override - public void onReceivedSslError(WebView view, SslErrorHandler handler, - SslError error) { - Log.w(TAG, "SSL error: " + error); - handler.proceed(); - } - - /** - * Ignores and logs SSL client certificate requests. - */ - @Override - public void onReceivedClientCertRequest(WebView view, ClientCertRequestHandler handler, - String host_and_port) { - Log.w(TAG, "SSL client certificate request: " + host_and_port); - handler.cancel(); - } - - }); - } - - public synchronized void notifyComplete() { - mTestDone = true; - notify(); - } - - public void testJNIBindings() { - setUpBrowser(); - - Tab tab = mController.getTabControl().getCurrentTab(); - WebView webView = tab.getWebView(); - webView.loadUrl("file://" + SDCARD_BINDINGS_TEST_HTML); - synchronized(this) { - while(!mTestDone) { - try { - wait(); - } catch (InterruptedException e) {} - } - } - - // Now the tests are complete grab the DOM content and compare to the reference. - GetWebKitDataThread getWKData = new GetWebKitDataThread(this, webView); - mWebKitResult = null; - getWKData.start(); - - synchronized(this) { - while(mWebKitResult == null) { - try { - wait(); - } catch (InterruptedException e) {} - } - } - - Log.v(TAG, "WebKit result:"); - Log.v(TAG, mWebKitResult); - assertEquals("Bindings test failed! See logcat for more details!", mExpectedWebKitResult, - mWebKitResult); - } -} |