diff --git a/Android.mk b/Android.mk
deleted file mode 100644
index fcafa5a..0000000
--- a/Android.mk
+++ /dev/null
@@ -1,27 +0,0 @@
-#
-# Copyright (C) 2009 The Android Open Source Project
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#      http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-
-LOCAL_PATH := $(call my-dir)
-include $(CLEAR_VARS)
-
-LOCAL_MODULE_TAGS := user # should be optional, but launcher crashes without this
-
-LOCAL_SRC_FILES := $(call all-subdir-java-files)
-
-LOCAL_PACKAGE_NAME := WebSearchProvider
-LOCAL_CERTIFICATE := shared
-
-include $(BUILD_PACKAGE)
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
deleted file mode 100644
index 386a3d2..0000000
--- a/AndroidManifest.xml
+++ /dev/null
@@ -1,193 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
-** Copyright 2009, The Android Open Source Project
-**
-** Licensed under the Apache License, Version 2.0 (the "License");
-** you may not use this file except in compliance with the License.
-** You may obtain a copy of the License at
-**
-**     http://www.apache.org/licenses/LICENSE-2.0
-**
-** Unless required by applicable law or agreed to in writing, software
-** distributed under the License is distributed on an "AS IS" BASIS,
-** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-** See the License for the specific language governing permissions and
-** limitations under the License.
-*/
--->
-
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.android.websearch"
-    android:sharedUserId="android.uid.shared">
-
-    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
-    <uses-permission android:name="android.permission.INTERNET" />
-
-    <application android:label="@string/app_label"
-            android:icon="@drawable/searchengine"
-            android:process="android.process.acore">
-
-        <activity android:name=".WebSearch"
-                android:theme="@android:style/Theme.NoDisplay"
-                android:excludeFromRecents="true">
-        </activity>
-
-        <!-- This is launched by .WebSearch in response to the
-             android.search.action.WEB_SEARCH_SETTINGS intent. -->
-        <activity android:name=".Settings"
-                android:excludeFromRecents="true">
-        </activity>
-
-        <!--
-        /*
-         * The following activity aliases act as the various built-in web search and suggest
-         * providers exported from this package. The provider names and enabled flag values come
-         * from strings.xml for the current locale. This allows us to define a static list of
-         * providers for each locale and let the runtime take care of selecting the appropriate
-         * ones.
-         */
-        -->
-        <activity-alias android:name=".Search.1"
-                android:label="@string/engine_1_label"
-                android:enabled="@bool/engine_1_enabled"
-                android:targetActivity=".WebSearch">
-            <intent-filter>
-                <action android:name="android.intent.action.SEARCH" />
-                <category android:name="android.intent.category.DEFAULT" />
-            </intent-filter>
-            <intent-filter>
-                <action android:name="android.intent.action.WEB_SEARCH" />
-                <category android:name="android.intent.category.DEFAULT" />
-            </intent-filter>
-            <intent-filter>
-                <action android:name="android.search.action.WEB_SEARCH_SETTINGS" />
-            </intent-filter>
-            <meta-data android:name="android.app.searchable"
-                android:resource="@xml/searchable_1" />
-        </activity-alias>
-
-        <activity-alias android:name=".Search.2"
-                android:label="@string/engine_2_label"
-                android:enabled="@bool/engine_2_enabled"
-                android:targetActivity=".WebSearch">
-            <intent-filter>
-                <action android:name="android.intent.action.SEARCH" />
-                <category android:name="android.intent.category.DEFAULT" />
-            </intent-filter>
-            <intent-filter>
-                <action android:name="android.intent.action.WEB_SEARCH" />
-                <category android:name="android.intent.category.DEFAULT" />
-            </intent-filter>
-            <intent-filter>
-                <action android:name="android.search.action.WEB_SEARCH_SETTINGS" />
-            </intent-filter>
-            <meta-data android:name="android.app.searchable"
-                android:resource="@xml/searchable_2" />
-        </activity-alias>
-
-        <activity-alias android:name=".Search.3"
-                android:label="@string/engine_3_label"
-                android:enabled="@bool/engine_3_enabled"
-                android:targetActivity=".WebSearch">
-            <intent-filter>
-                <action android:name="android.intent.action.SEARCH" />
-                <category android:name="android.intent.category.DEFAULT" />
-            </intent-filter>
-            <intent-filter>
-                <action android:name="android.intent.action.WEB_SEARCH" />
-                <category android:name="android.intent.category.DEFAULT" />
-            </intent-filter>
-            <intent-filter>
-                <action android:name="android.search.action.WEB_SEARCH_SETTINGS" />
-            </intent-filter>
-            <meta-data android:name="android.app.searchable"
-                android:resource="@xml/searchable_3" />
-        </activity-alias>
-
-        <activity-alias android:name=".Search.4"
-                android:label="@string/engine_4_label"
-                android:enabled="@bool/engine_4_enabled"
-                android:targetActivity=".WebSearch">
-            <intent-filter>
-                <action android:name="android.intent.action.SEARCH" />
-                <category android:name="android.intent.category.DEFAULT" />
-            </intent-filter>
-            <intent-filter>
-                <action android:name="android.intent.action.WEB_SEARCH" />
-                <category android:name="android.intent.category.DEFAULT" />
-            </intent-filter>
-            <intent-filter>
-                <action android:name="android.search.action.WEB_SEARCH_SETTINGS" />
-            </intent-filter>
-            <meta-data android:name="android.app.searchable"
-                android:resource="@xml/searchable_4" />
-        </activity-alias>
-
-        <activity-alias android:name=".Search.5"
-                android:label="@string/engine_5_label"
-                android:enabled="@bool/engine_5_enabled"
-                android:targetActivity=".WebSearch">
-            <intent-filter>
-                <action android:name="android.intent.action.SEARCH" />
-                <category android:name="android.intent.category.DEFAULT" />
-            </intent-filter>
-            <intent-filter>
-                <action android:name="android.intent.action.WEB_SEARCH" />
-                <category android:name="android.intent.category.DEFAULT" />
-            </intent-filter>
-            <intent-filter>
-                <action android:name="android.search.action.WEB_SEARCH_SETTINGS" />
-            </intent-filter>
-            <meta-data android:name="android.app.searchable"
-                android:resource="@xml/searchable_5" />
-        </activity-alias>
-
-        <activity-alias android:name=".Search.6"
-                android:label="@string/engine_6_label"
-                android:enabled="@bool/engine_6_enabled"
-                android:targetActivity=".WebSearch">
-            <intent-filter>
-                <action android:name="android.intent.action.SEARCH" />
-                <category android:name="android.intent.category.DEFAULT" />
-            </intent-filter>
-            <intent-filter>
-                <action android:name="android.intent.action.WEB_SEARCH" />
-                <category android:name="android.intent.category.DEFAULT" />
-            </intent-filter>
-            <intent-filter>
-                <action android:name="android.search.action.WEB_SEARCH_SETTINGS" />
-            </intent-filter>
-            <meta-data android:name="android.app.searchable"
-                android:resource="@xml/searchable_6" />
-        </activity-alias>
-
-        <activity-alias android:name=".Search.7"
-                android:label="@string/engine_7_label"
-                android:enabled="@bool/engine_7_enabled"
-                android:targetActivity=".WebSearch">
-            <intent-filter>
-                <action android:name="android.intent.action.SEARCH" />
-                <category android:name="android.intent.category.DEFAULT" />
-            </intent-filter>
-            <intent-filter>
-                <action android:name="android.intent.action.WEB_SEARCH" />
-                <category android:name="android.intent.category.DEFAULT" />
-            </intent-filter>
-            <intent-filter>
-                <action android:name="android.search.action.WEB_SEARCH_SETTINGS" />
-            </intent-filter>
-            <meta-data android:name="android.app.searchable"
-                android:resource="@xml/searchable_7" />
-        </activity-alias>
-
-        <!--
-        /*
-         * The number of suggest authorities defined below is exactly the same as the number of
-         * activity-alias elements defined above.
-         */
-        -->
-        <provider android:name=".SuggestionProvider"
-            android:authorities="com.android.websearch.Suggest" />
-    </application>
-</manifest>
diff --git a/MODULE_LICENSE_APACHE2 b/MODULE_LICENSE_APACHE2
deleted file mode 100644
index e69de29..0000000
--- a/MODULE_LICENSE_APACHE2
+++ /dev/null
diff --git a/NOTICE b/NOTICE
deleted file mode 100644
index 9df2554..0000000
--- a/NOTICE
+++ /dev/null
@@ -1,190 +0,0 @@
-
-   Copyright (c) 2005-2009, The Android Open Source Project
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-
-   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.
-
-
-                                 Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
-
diff --git a/res/drawable/magnifying_glass.png b/res/drawable/magnifying_glass.png
deleted file mode 100755
index 20e1fbc..0000000
--- a/res/drawable/magnifying_glass.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable/searchengine.png b/res/drawable/searchengine.png
deleted file mode 100755
index 2293d46..0000000
--- a/res/drawable/searchengine.png
+++ /dev/null
Binary files differ
diff --git a/res/values-cs-rCZ/search_engines.xml b/res/values-cs-rCZ/search_engines.xml
deleted file mode 100644
index ba6a9c2..0000000
--- a/res/values-cs-rCZ/search_engines.xml
+++ /dev/null
@@ -1,48 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2009 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-<!--
-****
-**** THIS IS AN AUTOGENERATED FILE.
-**** PLEASE DO NOT EDIT IT MANUALLY WITHOUT REMOVING THIS NOTICE.
-****
-**** To regenerate this file, use:
-****       $ tools/get_search_engines.py $locale
-**** e.g.  $ tools/get_search_engines.py es-MX
-****
--->
-<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-  <bool   name="engine_1_enabled">true</bool>
-  <string name="engine_1_name">seznam</string>
-  <string name="engine_1_label">Seznam</string>
-  <bool   name="engine_2_enabled">true</bool>
-  <string name="engine_2_name">centrum_cz</string>
-  <string name="engine_2_label">Centrum.cz</string>
-  <bool   name="engine_3_enabled">true</bool>
-  <string name="engine_3_name">atlas_cz</string>
-  <string name="engine_3_label">Atlas</string>
-  <bool   name="engine_4_enabled">true</bool>
-  <string name="engine_4_name">live_cs_CZ</string>
-  <string name="engine_4_label">Live Search</string>
-  <bool   name="engine_5_enabled">false</bool>
-  <string name="engine_5_name"></string>
-  <string name="engine_5_label"></string>
-  <bool   name="engine_6_enabled">false</bool>
-  <string name="engine_6_name"></string>
-  <string name="engine_6_label"></string>
-  <bool   name="engine_7_enabled">false</bool>
-  <string name="engine_7_name"></string>
-  <string name="engine_7_label"></string>
-</resources>
diff --git a/res/values-cs/strings.xml b/res/values-cs/strings.xml
deleted file mode 100644
index bbe3fb7..0000000
--- a/res/values-cs/strings.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2009 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="app_label">"Poskytovatel vyhledávání"</string>
-</resources>
diff --git a/res/values-da-rDK/search_engines.xml b/res/values-da-rDK/search_engines.xml
deleted file mode 100644
index 1edf8a9..0000000
--- a/res/values-da-rDK/search_engines.xml
+++ /dev/null
@@ -1,48 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2009 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-<!--
-****
-**** THIS IS AN AUTOGENERATED FILE.
-**** PLEASE DO NOT EDIT IT MANUALLY WITHOUT REMOVING THIS NOTICE.
-****
-**** To regenerate this file, use:
-****       $ tools/get_search_engines.py $locale
-**** e.g.  $ tools/get_search_engines.py es-MX
-****
--->
-<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-  <bool   name="engine_1_enabled">true</bool>
-  <string name="engine_1_name">jubii</string>
-  <string name="engine_1_label">Jubii</string>
-  <bool   name="engine_2_enabled">true</bool>
-  <string name="engine_2_name">msn_da_DK</string>
-  <string name="engine_2_label">MSN Danmark</string>
-  <bool   name="engine_3_enabled">true</bool>
-  <string name="engine_3_name">yahoo_dk</string>
-  <string name="engine_3_label">Yahoo! Danmark</string>
-  <bool   name="engine_4_enabled">true</bool>
-  <string name="engine_4_name">eniro_dk</string>
-  <string name="engine_4_label">Eniro</string>
-  <bool   name="engine_5_enabled">false</bool>
-  <string name="engine_5_name"></string>
-  <string name="engine_5_label"></string>
-  <bool   name="engine_6_enabled">false</bool>
-  <string name="engine_6_name"></string>
-  <string name="engine_6_label"></string>
-  <bool   name="engine_7_enabled">false</bool>
-  <string name="engine_7_name"></string>
-  <string name="engine_7_label"></string>
-</resources>
diff --git a/res/values-de-rAT/search_engines.xml b/res/values-de-rAT/search_engines.xml
deleted file mode 100644
index b32ea2b..0000000
--- a/res/values-de-rAT/search_engines.xml
+++ /dev/null
@@ -1,48 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2009 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-<!--
-****
-**** THIS IS AN AUTOGENERATED FILE.
-**** PLEASE DO NOT EDIT IT MANUALLY WITHOUT REMOVING THIS NOTICE.
-****
-**** To regenerate this file, use:
-****       $ tools/get_search_engines.py $locale
-**** e.g.  $ tools/get_search_engines.py es-MX
-****
--->
-<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-  <bool   name="engine_1_enabled">true</bool>
-  <string name="engine_1_name">yahoo_at</string>
-  <string name="engine_1_label">Yahoo! Suche</string>
-  <bool   name="engine_2_enabled">true</bool>
-  <string name="engine_2_name">msn_de_AT</string>
-  <string name="engine_2_label">MSN &amp;#x00d6sterreich</string>
-  <bool   name="engine_3_enabled">false</bool>
-  <string name="engine_3_name"></string>
-  <string name="engine_3_label"></string>
-  <bool   name="engine_4_enabled">false</bool>
-  <string name="engine_4_name"></string>
-  <string name="engine_4_label"></string>
-  <bool   name="engine_5_enabled">false</bool>
-  <string name="engine_5_name"></string>
-  <string name="engine_5_label"></string>
-  <bool   name="engine_6_enabled">false</bool>
-  <string name="engine_6_name"></string>
-  <string name="engine_6_label"></string>
-  <bool   name="engine_7_enabled">false</bool>
-  <string name="engine_7_name"></string>
-  <string name="engine_7_label"></string>
-</resources>
diff --git a/res/values-de-rCH/search_engines.xml b/res/values-de-rCH/search_engines.xml
deleted file mode 100644
index 1d556d0..0000000
--- a/res/values-de-rCH/search_engines.xml
+++ /dev/null
@@ -1,48 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2009 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-<!--
-****
-**** THIS IS AN AUTOGENERATED FILE.
-**** PLEASE DO NOT EDIT IT MANUALLY WITHOUT REMOVING THIS NOTICE.
-****
-**** To regenerate this file, use:
-****       $ tools/get_search_engines.py $locale
-**** e.g.  $ tools/get_search_engines.py es-MX
-****
--->
-<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-  <bool   name="engine_1_enabled">true</bool>
-  <string name="engine_1_name">search_ch</string>
-  <string name="engine_1_label">search.ch</string>
-  <bool   name="engine_2_enabled">true</bool>
-  <string name="engine_2_name">yahoo_ch</string>
-  <string name="engine_2_label">Yahoo! Suche</string>
-  <bool   name="engine_3_enabled">true</bool>
-  <string name="engine_3_name">msn_de_CH</string>
-  <string name="engine_3_label">MSN Schweiz (Deutsch)</string>
-  <bool   name="engine_4_enabled">true</bool>
-  <string name="engine_4_name">msn_fr_CH</string>
-  <string name="engine_4_label">MSN Suisse (Fran&amp;#x00e7ais)</string>
-  <bool   name="engine_5_enabled">true</bool>
-  <string name="engine_5_name">bluewin</string>
-  <string name="engine_5_label">Bluewin</string>
-  <bool   name="engine_6_enabled">false</bool>
-  <string name="engine_6_name"></string>
-  <string name="engine_6_label"></string>
-  <bool   name="engine_7_enabled">false</bool>
-  <string name="engine_7_name"></string>
-  <string name="engine_7_label"></string>
-</resources>
diff --git a/res/values-de-rDE/search_engines.xml b/res/values-de-rDE/search_engines.xml
deleted file mode 100644
index a864f60..0000000
--- a/res/values-de-rDE/search_engines.xml
+++ /dev/null
@@ -1,48 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2009 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-<!--
-****
-**** THIS IS AN AUTOGENERATED FILE.
-**** PLEASE DO NOT EDIT IT MANUALLY WITHOUT REMOVING THIS NOTICE.
-****
-**** To regenerate this file, use:
-****       $ tools/get_search_engines.py $locale
-**** e.g.  $ tools/get_search_engines.py es-MX
-****
--->
-<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-  <bool   name="engine_1_enabled">true</bool>
-  <string name="engine_1_name">msn_de_DE</string>
-  <string name="engine_1_label">MSN</string>
-  <bool   name="engine_2_enabled">true</bool>
-  <string name="engine_2_name">yahoo_de</string>
-  <string name="engine_2_label">Yahoo! Deutschland</string>
-  <bool   name="engine_3_enabled">true</bool>
-  <string name="engine_3_name">t_online</string>
-  <string name="engine_3_label">T-Online</string>
-  <bool   name="engine_4_enabled">true</bool>
-  <string name="engine_4_name">ask_de</string>
-  <string name="engine_4_label">Ask.com Deutschland</string>
-  <bool   name="engine_5_enabled">true</bool>
-  <string name="engine_5_name">web_de</string>
-  <string name="engine_5_label">WEB.DE</string>
-  <bool   name="engine_6_enabled">false</bool>
-  <string name="engine_6_name"></string>
-  <string name="engine_6_label"></string>
-  <bool   name="engine_7_enabled">false</bool>
-  <string name="engine_7_name"></string>
-  <string name="engine_7_label"></string>
-</resources>
diff --git a/res/values-de/strings.xml b/res/values-de/strings.xml
deleted file mode 100644
index faaa39a..0000000
--- a/res/values-de/strings.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2009 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="app_label">"Anbieter für Websuche"</string>
-</resources>
diff --git a/res/values-en-rAU/search_engines.xml b/res/values-en-rAU/search_engines.xml
deleted file mode 100644
index aff4e1e..0000000
--- a/res/values-en-rAU/search_engines.xml
+++ /dev/null
@@ -1,48 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2009 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-<!--
-****
-**** THIS IS AN AUTOGENERATED FILE.
-**** PLEASE DO NOT EDIT IT MANUALLY WITHOUT REMOVING THIS NOTICE.
-****
-**** To regenerate this file, use:
-****       $ tools/get_search_engines.py $locale
-**** e.g.  $ tools/get_search_engines.py es-MX
-****
--->
-<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-  <bool   name="engine_1_enabled">true</bool>
-  <string name="engine_1_name">yahoo_au</string>
-  <string name="engine_1_label">Yahoo!7</string>
-  <bool   name="engine_2_enabled">true</bool>
-  <string name="engine_2_name">msn_en_AU</string>
-  <string name="engine_2_label">ninemsn.com.au</string>
-  <bool   name="engine_3_enabled">true</bool>
-  <string name="engine_3_name">sensis</string>
-  <string name="engine_3_label">sensis.com.au</string>
-  <bool   name="engine_4_enabled">false</bool>
-  <string name="engine_4_name"></string>
-  <string name="engine_4_label"></string>
-  <bool   name="engine_5_enabled">false</bool>
-  <string name="engine_5_name"></string>
-  <string name="engine_5_label"></string>
-  <bool   name="engine_6_enabled">false</bool>
-  <string name="engine_6_name"></string>
-  <string name="engine_6_label"></string>
-  <bool   name="engine_7_enabled">false</bool>
-  <string name="engine_7_name"></string>
-  <string name="engine_7_label"></string>
-</resources>
diff --git a/res/values-en-rGB/search_engines.xml b/res/values-en-rGB/search_engines.xml
deleted file mode 100644
index 10e550e..0000000
--- a/res/values-en-rGB/search_engines.xml
+++ /dev/null
@@ -1,48 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2009 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-<!--
-****
-**** THIS IS AN AUTOGENERATED FILE.
-**** PLEASE DO NOT EDIT IT MANUALLY WITHOUT REMOVING THIS NOTICE.
-****
-**** To regenerate this file, use:
-****       $ tools/get_search_engines.py $locale
-**** e.g.  $ tools/get_search_engines.py es-MX
-****
--->
-<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-  <bool   name="engine_1_enabled">true</bool>
-  <string name="engine_1_name">yahoo_uk</string>
-  <string name="engine_1_label">Yahoo! UK &amp; Ireland</string>
-  <bool   name="engine_2_enabled">true</bool>
-  <string name="engine_2_name">msn_en_GB</string>
-  <string name="engine_2_label">MSN UK</string>
-  <bool   name="engine_3_enabled">true</bool>
-  <string name="engine_3_name">ask_uk</string>
-  <string name="engine_3_label">Ask.com UK</string>
-  <bool   name="engine_4_enabled">false</bool>
-  <string name="engine_4_name"></string>
-  <string name="engine_4_label"></string>
-  <bool   name="engine_5_enabled">false</bool>
-  <string name="engine_5_name"></string>
-  <string name="engine_5_label"></string>
-  <bool   name="engine_6_enabled">false</bool>
-  <string name="engine_6_name"></string>
-  <string name="engine_6_label"></string>
-  <bool   name="engine_7_enabled">false</bool>
-  <string name="engine_7_name"></string>
-  <string name="engine_7_label"></string>
-</resources>
diff --git a/res/values-en-rIE/search_engines.xml b/res/values-en-rIE/search_engines.xml
deleted file mode 100644
index 4e21116..0000000
--- a/res/values-en-rIE/search_engines.xml
+++ /dev/null
@@ -1,48 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2009 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-<!--
-****
-**** THIS IS AN AUTOGENERATED FILE.
-**** PLEASE DO NOT EDIT IT MANUALLY WITHOUT REMOVING THIS NOTICE.
-****
-**** To regenerate this file, use:
-****       $ tools/get_search_engines.py $locale
-**** e.g.  $ tools/get_search_engines.py es-MX
-****
--->
-<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-  <bool   name="engine_1_enabled">true</bool>
-  <string name="engine_1_name">yahoo_uk</string>
-  <string name="engine_1_label">Yahoo! UK &amp; Ireland</string>
-  <bool   name="engine_2_enabled">true</bool>
-  <string name="engine_2_name">msn_en_IE</string>
-  <string name="engine_2_label">MSN IE</string>
-  <bool   name="engine_3_enabled">false</bool>
-  <string name="engine_3_name"></string>
-  <string name="engine_3_label"></string>
-  <bool   name="engine_4_enabled">false</bool>
-  <string name="engine_4_name"></string>
-  <string name="engine_4_label"></string>
-  <bool   name="engine_5_enabled">false</bool>
-  <string name="engine_5_name"></string>
-  <string name="engine_5_label"></string>
-  <bool   name="engine_6_enabled">false</bool>
-  <string name="engine_6_name"></string>
-  <string name="engine_6_label"></string>
-  <bool   name="engine_7_enabled">false</bool>
-  <string name="engine_7_name"></string>
-  <string name="engine_7_label"></string>
-</resources>
diff --git a/res/values-en-rNZ/search_engines.xml b/res/values-en-rNZ/search_engines.xml
deleted file mode 100644
index cfef54c..0000000
--- a/res/values-en-rNZ/search_engines.xml
+++ /dev/null
@@ -1,48 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2009 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-<!--
-****
-**** THIS IS AN AUTOGENERATED FILE.
-**** PLEASE DO NOT EDIT IT MANUALLY WITHOUT REMOVING THIS NOTICE.
-****
-**** To regenerate this file, use:
-****       $ tools/get_search_engines.py $locale
-**** e.g.  $ tools/get_search_engines.py es-MX
-****
--->
-<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-  <bool   name="engine_1_enabled">true</bool>
-  <string name="engine_1_name">yahoo_nz</string>
-  <string name="engine_1_label">Yahoo!Xtra</string>
-  <bool   name="engine_2_enabled">true</bool>
-  <string name="engine_2_name">live_en_NZ</string>
-  <string name="engine_2_label">Live Search</string>
-  <bool   name="engine_3_enabled">false</bool>
-  <string name="engine_3_name"></string>
-  <string name="engine_3_label"></string>
-  <bool   name="engine_4_enabled">false</bool>
-  <string name="engine_4_name"></string>
-  <string name="engine_4_label"></string>
-  <bool   name="engine_5_enabled">false</bool>
-  <string name="engine_5_name"></string>
-  <string name="engine_5_label"></string>
-  <bool   name="engine_6_enabled">false</bool>
-  <string name="engine_6_name"></string>
-  <string name="engine_6_label"></string>
-  <bool   name="engine_7_enabled">false</bool>
-  <string name="engine_7_name"></string>
-  <string name="engine_7_label"></string>
-</resources>
diff --git a/res/values-en-rSG/search_engines.xml b/res/values-en-rSG/search_engines.xml
deleted file mode 100644
index 8c4e28e..0000000
--- a/res/values-en-rSG/search_engines.xml
+++ /dev/null
@@ -1,48 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2009 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-<!--
-****
-**** THIS IS AN AUTOGENERATED FILE.
-**** PLEASE DO NOT EDIT IT MANUALLY WITHOUT REMOVING THIS NOTICE.
-****
-**** To regenerate this file, use:
-****       $ tools/get_search_engines.py $locale
-**** e.g.  $ tools/get_search_engines.py es-MX
-****
--->
-<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-  <bool   name="engine_1_enabled">true</bool>
-  <string name="engine_1_name">yahoo_sg</string>
-  <string name="engine_1_label">Yahoo! Singapore</string>
-  <bool   name="engine_2_enabled">true</bool>
-  <string name="engine_2_name">msn_en_SG</string>
-  <string name="engine_2_label">MSN Singapore</string>
-  <bool   name="engine_3_enabled">true</bool>
-  <string name="engine_3_name">rednano</string>
-  <string name="engine_3_label">Rednano</string>
-  <bool   name="engine_4_enabled">false</bool>
-  <string name="engine_4_name"></string>
-  <string name="engine_4_label"></string>
-  <bool   name="engine_5_enabled">false</bool>
-  <string name="engine_5_name"></string>
-  <string name="engine_5_label"></string>
-  <bool   name="engine_6_enabled">false</bool>
-  <string name="engine_6_name"></string>
-  <string name="engine_6_label"></string>
-  <bool   name="engine_7_enabled">false</bool>
-  <string name="engine_7_name"></string>
-  <string name="engine_7_label"></string>
-</resources>
diff --git a/res/values-en-rZA/search_engines.xml b/res/values-en-rZA/search_engines.xml
deleted file mode 100644
index 37a0a46..0000000
--- a/res/values-en-rZA/search_engines.xml
+++ /dev/null
@@ -1,48 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2009 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-<!--
-****
-**** THIS IS AN AUTOGENERATED FILE.
-**** PLEASE DO NOT EDIT IT MANUALLY WITHOUT REMOVING THIS NOTICE.
-****
-**** To regenerate this file, use:
-****       $ tools/get_search_engines.py $locale
-**** e.g.  $ tools/get_search_engines.py es-MX
-****
--->
-<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-  <bool   name="engine_1_enabled">true</bool>
-  <string name="engine_1_name">yahoo</string>
-  <string name="engine_1_label">Yahoo!</string>
-  <bool   name="engine_2_enabled">true</bool>
-  <string name="engine_2_name">msn_en_ZA</string>
-  <string name="engine_2_label">MSN ZA</string>
-  <bool   name="engine_3_enabled">true</bool>
-  <string name="engine_3_name">mweb</string>
-  <string name="engine_3_label">MWEB</string>
-  <bool   name="engine_4_enabled">true</bool>
-  <string name="engine_4_name">iafrica</string>
-  <string name="engine_4_label">iafrica.com</string>
-  <bool   name="engine_5_enabled">false</bool>
-  <string name="engine_5_name"></string>
-  <string name="engine_5_label"></string>
-  <bool   name="engine_6_enabled">false</bool>
-  <string name="engine_6_name"></string>
-  <string name="engine_6_label"></string>
-  <bool   name="engine_7_enabled">false</bool>
-  <string name="engine_7_name"></string>
-  <string name="engine_7_label"></string>
-</resources>
diff --git a/res/values-es-rES/search_engines.xml b/res/values-es-rES/search_engines.xml
deleted file mode 100644
index 9993fab..0000000
--- a/res/values-es-rES/search_engines.xml
+++ /dev/null
@@ -1,48 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2009 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-<!--
-****
-**** THIS IS AN AUTOGENERATED FILE.
-**** PLEASE DO NOT EDIT IT MANUALLY WITHOUT REMOVING THIS NOTICE.
-****
-**** To regenerate this file, use:
-****       $ tools/get_search_engines.py $locale
-**** e.g.  $ tools/get_search_engines.py es-MX
-****
--->
-<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-  <bool   name="engine_1_enabled">true</bool>
-  <string name="engine_1_name">msn_es_ES</string>
-  <string name="engine_1_label">MSN Espa&amp;#x00f1a</string>
-  <bool   name="engine_2_enabled">true</bool>
-  <string name="engine_2_name">yahoo_es</string>
-  <string name="engine_2_label">Yahoo! Espa&amp;#x00f1a</string>
-  <bool   name="engine_3_enabled">true</bool>
-  <string name="engine_3_name">terra_es</string>
-  <string name="engine_3_label">Terra</string>
-  <bool   name="engine_4_enabled">true</bool>
-  <string name="engine_4_name">ozu</string>
-  <string name="engine_4_label">OZ&amp;#x00da</string>
-  <bool   name="engine_5_enabled">true</bool>
-  <string name="engine_5_name">altavista_es</string>
-  <string name="engine_5_label">AltaVista</string>
-  <bool   name="engine_6_enabled">false</bool>
-  <string name="engine_6_name"></string>
-  <string name="engine_6_label"></string>
-  <bool   name="engine_7_enabled">false</bool>
-  <string name="engine_7_name"></string>
-  <string name="engine_7_label"></string>
-</resources>
diff --git a/res/values-es/strings.xml b/res/values-es/strings.xml
deleted file mode 100644
index b725f5a..0000000
--- a/res/values-es/strings.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2009 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="app_label">"Proveedor de búsquedas web"</string>
-</resources>
diff --git a/res/values-fr-rBE/search_engines.xml b/res/values-fr-rBE/search_engines.xml
deleted file mode 100644
index 0ebef34..0000000
--- a/res/values-fr-rBE/search_engines.xml
+++ /dev/null
@@ -1,48 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2009 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-<!--
-****
-**** THIS IS AN AUTOGENERATED FILE.
-**** PLEASE DO NOT EDIT IT MANUALLY WITHOUT REMOVING THIS NOTICE.
-****
-**** To regenerate this file, use:
-****       $ tools/get_search_engines.py $locale
-**** e.g.  $ tools/get_search_engines.py es-MX
-****
--->
-<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-  <bool   name="engine_1_enabled">true</bool>
-  <string name="engine_1_name">yahoo</string>
-  <string name="engine_1_label">Yahoo!</string>
-  <bool   name="engine_2_enabled">true</bool>
-  <string name="engine_2_name">msn_nl_BE</string>
-  <string name="engine_2_label">MSN (Nederlandstalige)</string>
-  <bool   name="engine_3_enabled">true</bool>
-  <string name="engine_3_name">msn_fr_BE</string>
-  <string name="engine_3_label">MSN Belgique (Fran&amp;#x00e7ais)</string>
-  <bool   name="engine_4_enabled">false</bool>
-  <string name="engine_4_name"></string>
-  <string name="engine_4_label"></string>
-  <bool   name="engine_5_enabled">false</bool>
-  <string name="engine_5_name"></string>
-  <string name="engine_5_label"></string>
-  <bool   name="engine_6_enabled">false</bool>
-  <string name="engine_6_name"></string>
-  <string name="engine_6_label"></string>
-  <bool   name="engine_7_enabled">false</bool>
-  <string name="engine_7_name"></string>
-  <string name="engine_7_label"></string>
-</resources>
diff --git a/res/values-fr-rFR/search_engines.xml b/res/values-fr-rFR/search_engines.xml
deleted file mode 100644
index 495f077..0000000
--- a/res/values-fr-rFR/search_engines.xml
+++ /dev/null
@@ -1,48 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2009 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-<!--
-****
-**** THIS IS AN AUTOGENERATED FILE.
-**** PLEASE DO NOT EDIT IT MANUALLY WITHOUT REMOVING THIS NOTICE.
-****
-**** To regenerate this file, use:
-****       $ tools/get_search_engines.py $locale
-**** e.g.  $ tools/get_search_engines.py es-MX
-****
--->
-<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-  <bool   name="engine_1_enabled">true</bool>
-  <string name="engine_1_name">voila</string>
-  <string name="engine_1_label">Voila</string>
-  <bool   name="engine_2_enabled">true</bool>
-  <string name="engine_2_name">yahoo_fr</string>
-  <string name="engine_2_label">Yahoo! France</string>
-  <bool   name="engine_3_enabled">true</bool>
-  <string name="engine_3_name">msn_fr_FR</string>
-  <string name="engine_3_label">MSN France</string>
-  <bool   name="engine_4_enabled">true</bool>
-  <string name="engine_4_name">orange</string>
-  <string name="engine_4_label">Orange</string>
-  <bool   name="engine_5_enabled">true</bool>
-  <string name="engine_5_name">aol_fr</string>
-  <string name="engine_5_label">AOL</string>
-  <bool   name="engine_6_enabled">false</bool>
-  <string name="engine_6_name"></string>
-  <string name="engine_6_label"></string>
-  <bool   name="engine_7_enabled">false</bool>
-  <string name="engine_7_name"></string>
-  <string name="engine_7_label"></string>
-</resources>
diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml
deleted file mode 100644
index 18014ab..0000000
--- a/res/values-fr/strings.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2009 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="app_label">"Fournisseur de recherche sur le Web"</string>
-</resources>
diff --git a/res/values-it-rIT/search_engines.xml b/res/values-it-rIT/search_engines.xml
deleted file mode 100644
index e618d88..0000000
--- a/res/values-it-rIT/search_engines.xml
+++ /dev/null
@@ -1,48 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2009 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-<!--
-****
-**** THIS IS AN AUTOGENERATED FILE.
-**** PLEASE DO NOT EDIT IT MANUALLY WITHOUT REMOVING THIS NOTICE.
-****
-**** To regenerate this file, use:
-****       $ tools/get_search_engines.py $locale
-**** e.g.  $ tools/get_search_engines.py es-MX
-****
--->
-<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-  <bool   name="engine_1_enabled">true</bool>
-  <string name="engine_1_name">virgilio</string>
-  <string name="engine_1_label">Virgilio</string>
-  <bool   name="engine_2_enabled">true</bool>
-  <string name="engine_2_name">yahoo_it</string>
-  <string name="engine_2_label">Yahoo! Italia</string>
-  <bool   name="engine_3_enabled">true</bool>
-  <string name="engine_3_name">libero</string>
-  <string name="engine_3_label">Libero</string>
-  <bool   name="engine_4_enabled">true</bool>
-  <string name="engine_4_name">ask_it</string>
-  <string name="engine_4_label">Ask.com Italia</string>
-  <bool   name="engine_5_enabled">true</bool>
-  <string name="engine_5_name">live_it_IT</string>
-  <string name="engine_5_label">Live Search</string>
-  <bool   name="engine_6_enabled">false</bool>
-  <string name="engine_6_name"></string>
-  <string name="engine_6_label"></string>
-  <bool   name="engine_7_enabled">false</bool>
-  <string name="engine_7_name"></string>
-  <string name="engine_7_label"></string>
-</resources>
diff --git a/res/values-it/strings.xml b/res/values-it/strings.xml
deleted file mode 100644
index be62899..0000000
--- a/res/values-it/strings.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2009 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="app_label">"Provider di Ricerca Web"</string>
-</resources>
diff --git a/res/values-ja-rJP/search_engines.xml b/res/values-ja-rJP/search_engines.xml
deleted file mode 100644
index 5a581e3..0000000
--- a/res/values-ja-rJP/search_engines.xml
+++ /dev/null
@@ -1,48 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2009 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-<!--
-****
-**** THIS IS AN AUTOGENERATED FILE.
-**** PLEASE DO NOT EDIT IT MANUALLY WITHOUT REMOVING THIS NOTICE.
-****
-**** To regenerate this file, use:
-****       $ tools/get_search_engines.py $locale
-**** e.g.  $ tools/get_search_engines.py es-MX
-****
--->
-<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-  <bool   name="engine_1_enabled">true</bool>
-  <string name="engine_1_name">yahoo_jp</string>
-  <string name="engine_1_label">Yahoo! JAPAN</string>
-  <bool   name="engine_2_enabled">true</bool>
-  <string name="engine_2_name">msn_ja_JP</string>
-  <string name="engine_2_label">MSN Japan</string>
-  <bool   name="engine_3_enabled">true</bool>
-  <string name="engine_3_name">biglobe</string>
-  <string name="engine_3_label">BIGLOBE</string>
-  <bool   name="engine_4_enabled">true</bool>
-  <string name="engine_4_name">goo</string>
-  <string name="engine_4_label">goo</string>
-  <bool   name="engine_5_enabled">true</bool>
-  <string name="engine_5_name">nifty</string>
-  <string name="engine_5_label">\@nifty</string>
-  <bool   name="engine_6_enabled">false</bool>
-  <string name="engine_6_name"></string>
-  <string name="engine_6_label"></string>
-  <bool   name="engine_7_enabled">false</bool>
-  <string name="engine_7_name"></string>
-  <string name="engine_7_label"></string>
-</resources>
diff --git a/res/values-ko-rKO/search_engines.xml b/res/values-ko-rKO/search_engines.xml
deleted file mode 100644
index 2f5d39b..0000000
--- a/res/values-ko-rKO/search_engines.xml
+++ /dev/null
@@ -1,48 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2009 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-<!--
-****
-**** THIS IS AN AUTOGENERATED FILE.
-**** PLEASE DO NOT EDIT IT MANUALLY WITHOUT REMOVING THIS NOTICE.
-****
-**** To regenerate this file, use:
-****       $ tools/get_search_engines.py $locale
-**** e.g.  $ tools/get_search_engines.py es-MX
-****
--->
-<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-  <bool   name="engine_1_enabled">true</bool>
-  <string name="engine_1_name">yahoo</string>
-  <string name="engine_1_label">Yahoo!</string>
-  <bool   name="engine_2_enabled">true</bool>
-  <string name="engine_2_name">live</string>
-  <string name="engine_2_label">Live Search</string>
-  <bool   name="engine_3_enabled">false</bool>
-  <string name="engine_3_name"></string>
-  <string name="engine_3_label"></string>
-  <bool   name="engine_4_enabled">false</bool>
-  <string name="engine_4_name"></string>
-  <string name="engine_4_label"></string>
-  <bool   name="engine_5_enabled">false</bool>
-  <string name="engine_5_name"></string>
-  <string name="engine_5_label"></string>
-  <bool   name="engine_6_enabled">false</bool>
-  <string name="engine_6_name"></string>
-  <string name="engine_6_label"></string>
-  <bool   name="engine_7_enabled">false</bool>
-  <string name="engine_7_name"></string>
-  <string name="engine_7_label"></string>
-</resources>
diff --git a/res/values-nb-rNO/search_engines.xml b/res/values-nb-rNO/search_engines.xml
deleted file mode 100644
index e38ab26..0000000
--- a/res/values-nb-rNO/search_engines.xml
+++ /dev/null
@@ -1,48 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2009 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-<!--
-****
-**** THIS IS AN AUTOGENERATED FILE.
-**** PLEASE DO NOT EDIT IT MANUALLY WITHOUT REMOVING THIS NOTICE.
-****
-**** To regenerate this file, use:
-****       $ tools/get_search_engines.py $locale
-**** e.g.  $ tools/get_search_engines.py es-MX
-****
--->
-<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-  <bool   name="engine_1_enabled">true</bool>
-  <string name="engine_1_name">msn_nb_NO</string>
-  <string name="engine_1_label">MSN Norge</string>
-  <bool   name="engine_2_enabled">true</bool>
-  <string name="engine_2_name">abcsok</string>
-  <string name="engine_2_label">ABC S&amp;#x00f8k</string>
-  <bool   name="engine_3_enabled">true</bool>
-  <string name="engine_3_name">yahoo_no</string>
-  <string name="engine_3_label">Yahoo! Norge</string>
-  <bool   name="engine_4_enabled">true</bool>
-  <string name="engine_4_name">kvasir</string>
-  <string name="engine_4_label">Kvasir</string>
-  <bool   name="engine_5_enabled">true</bool>
-  <string name="engine_5_name">sesam</string>
-  <string name="engine_5_label">Sesam</string>
-  <bool   name="engine_6_enabled">false</bool>
-  <string name="engine_6_name"></string>
-  <string name="engine_6_label"></string>
-  <bool   name="engine_7_enabled">false</bool>
-  <string name="engine_7_name"></string>
-  <string name="engine_7_label"></string>
-</resources>
diff --git a/res/values-nl-rBE/search_engines.xml b/res/values-nl-rBE/search_engines.xml
deleted file mode 100644
index 0ebef34..0000000
--- a/res/values-nl-rBE/search_engines.xml
+++ /dev/null
@@ -1,48 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2009 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-<!--
-****
-**** THIS IS AN AUTOGENERATED FILE.
-**** PLEASE DO NOT EDIT IT MANUALLY WITHOUT REMOVING THIS NOTICE.
-****
-**** To regenerate this file, use:
-****       $ tools/get_search_engines.py $locale
-**** e.g.  $ tools/get_search_engines.py es-MX
-****
--->
-<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-  <bool   name="engine_1_enabled">true</bool>
-  <string name="engine_1_name">yahoo</string>
-  <string name="engine_1_label">Yahoo!</string>
-  <bool   name="engine_2_enabled">true</bool>
-  <string name="engine_2_name">msn_nl_BE</string>
-  <string name="engine_2_label">MSN (Nederlandstalige)</string>
-  <bool   name="engine_3_enabled">true</bool>
-  <string name="engine_3_name">msn_fr_BE</string>
-  <string name="engine_3_label">MSN Belgique (Fran&amp;#x00e7ais)</string>
-  <bool   name="engine_4_enabled">false</bool>
-  <string name="engine_4_name"></string>
-  <string name="engine_4_label"></string>
-  <bool   name="engine_5_enabled">false</bool>
-  <string name="engine_5_name"></string>
-  <string name="engine_5_label"></string>
-  <bool   name="engine_6_enabled">false</bool>
-  <string name="engine_6_name"></string>
-  <string name="engine_6_label"></string>
-  <bool   name="engine_7_enabled">false</bool>
-  <string name="engine_7_name"></string>
-  <string name="engine_7_label"></string>
-</resources>
diff --git a/res/values-nl-rNL/search_engines.xml b/res/values-nl-rNL/search_engines.xml
deleted file mode 100644
index c842d79..0000000
--- a/res/values-nl-rNL/search_engines.xml
+++ /dev/null
@@ -1,48 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2009 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-<!--
-****
-**** THIS IS AN AUTOGENERATED FILE.
-**** PLEASE DO NOT EDIT IT MANUALLY WITHOUT REMOVING THIS NOTICE.
-****
-**** To regenerate this file, use:
-****       $ tools/get_search_engines.py $locale
-**** e.g.  $ tools/get_search_engines.py es-MX
-****
--->
-<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-  <bool   name="engine_1_enabled">true</bool>
-  <string name="engine_1_name">ilse</string>
-  <string name="engine_1_label">Ilse</string>
-  <bool   name="engine_2_enabled">true</bool>
-  <string name="engine_2_name">msn_nl_NL</string>
-  <string name="engine_2_label">MSN.nl</string>
-  <bool   name="engine_3_enabled">true</bool>
-  <string name="engine_3_name">yahoo_nl</string>
-  <string name="engine_3_label">Yahoo! Nederland</string>
-  <bool   name="engine_4_enabled">true</bool>
-  <string name="engine_4_name">lycos_nl</string>
-  <string name="engine_4_label">Lycos</string>
-  <bool   name="engine_5_enabled">true</bool>
-  <string name="engine_5_name">vinden</string>
-  <string name="engine_5_label">Vinden.nl</string>
-  <bool   name="engine_6_enabled">false</bool>
-  <string name="engine_6_name"></string>
-  <string name="engine_6_label"></string>
-  <bool   name="engine_7_enabled">false</bool>
-  <string name="engine_7_name"></string>
-  <string name="engine_7_label"></string>
-</resources>
diff --git a/res/values-nl/strings.xml b/res/values-nl/strings.xml
deleted file mode 100644
index c15fd49..0000000
--- a/res/values-nl/strings.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2009 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="app_label">"Internetzoekprovider"</string>
-</resources>
diff --git a/res/values-pl-rPL/search_engines.xml b/res/values-pl-rPL/search_engines.xml
deleted file mode 100644
index b463aa0..0000000
--- a/res/values-pl-rPL/search_engines.xml
+++ /dev/null
@@ -1,48 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2009 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-<!--
-****
-**** THIS IS AN AUTOGENERATED FILE.
-**** PLEASE DO NOT EDIT IT MANUALLY WITHOUT REMOVING THIS NOTICE.
-****
-**** To regenerate this file, use:
-****       $ tools/get_search_engines.py $locale
-**** e.g.  $ tools/get_search_engines.py es-MX
-****
--->
-<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-  <bool   name="engine_1_enabled">true</bool>
-  <string name="engine_1_name">onet</string>
-  <string name="engine_1_label">Onet.pl</string>
-  <bool   name="engine_2_enabled">true</bool>
-  <string name="engine_2_name">wp</string>
-  <string name="engine_2_label">Wirtualna Polska</string>
-  <bool   name="engine_3_enabled">true</bool>
-  <string name="engine_3_name">live_pl_PL</string>
-  <string name="engine_3_label">Live Search</string>
-  <bool   name="engine_4_enabled">false</bool>
-  <string name="engine_4_name"></string>
-  <string name="engine_4_label"></string>
-  <bool   name="engine_5_enabled">false</bool>
-  <string name="engine_5_name"></string>
-  <string name="engine_5_label"></string>
-  <bool   name="engine_6_enabled">false</bool>
-  <string name="engine_6_name"></string>
-  <string name="engine_6_label"></string>
-  <bool   name="engine_7_enabled">false</bool>
-  <string name="engine_7_name"></string>
-  <string name="engine_7_label"></string>
-</resources>
diff --git a/res/values-pl/strings.xml b/res/values-pl/strings.xml
deleted file mode 100644
index b2e2d81..0000000
--- a/res/values-pl/strings.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2009 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="app_label">"Dostawca wyszukiwarki internetowej"</string>
-</resources>
diff --git a/res/values-ru-rRU/search_engines.xml b/res/values-ru-rRU/search_engines.xml
deleted file mode 100644
index c7de338..0000000
--- a/res/values-ru-rRU/search_engines.xml
+++ /dev/null
@@ -1,48 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2009 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-<!--
-****
-**** THIS IS AN AUTOGENERATED FILE.
-**** PLEASE DO NOT EDIT IT MANUALLY WITHOUT REMOVING THIS NOTICE.
-****
-**** To regenerate this file, use:
-****       $ tools/get_search_engines.py $locale
-**** e.g.  $ tools/get_search_engines.py es-MX
-****
--->
-<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-  <bool   name="engine_1_enabled">true</bool>
-  <string name="engine_1_name">yandex_ru</string>
-  <string name="engine_1_label">&amp;#x042f&amp;#x043d&amp;#x0434&amp;#x0435&amp;#x043a&amp;#x0441</string>
-  <bool   name="engine_2_enabled">true</bool>
-  <string name="engine_2_name">rambler</string>
-  <string name="engine_2_label">Rambler</string>
-  <bool   name="engine_3_enabled">true</bool>
-  <string name="engine_3_name">mail_ru</string>
-  <string name="engine_3_label">\@MAIL.RU</string>
-  <bool   name="engine_4_enabled">true</bool>
-  <string name="engine_4_name">yahoo_ru</string>
-  <string name="engine_4_label">Yahoo! &amp;#x043f&amp;#x043e-&amp;#x0440&amp;#x0443&amp;#x0441&amp;#x0441&amp;#x043a&amp;#x0438</string>
-  <bool   name="engine_5_enabled">true</bool>
-  <string name="engine_5_name">live_ru_RU</string>
-  <string name="engine_5_label">Live Search</string>
-  <bool   name="engine_6_enabled">false</bool>
-  <string name="engine_6_name"></string>
-  <string name="engine_6_label"></string>
-  <bool   name="engine_7_enabled">false</bool>
-  <string name="engine_7_name"></string>
-  <string name="engine_7_label"></string>
-</resources>
diff --git a/res/values-sv-rSE/search_engines.xml b/res/values-sv-rSE/search_engines.xml
deleted file mode 100644
index 3f7f3ec..0000000
--- a/res/values-sv-rSE/search_engines.xml
+++ /dev/null
@@ -1,48 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2009 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-<!--
-****
-**** THIS IS AN AUTOGENERATED FILE.
-**** PLEASE DO NOT EDIT IT MANUALLY WITHOUT REMOVING THIS NOTICE.
-****
-**** To regenerate this file, use:
-****       $ tools/get_search_engines.py $locale
-**** e.g.  $ tools/get_search_engines.py es-MX
-****
--->
-<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-  <bool   name="engine_1_enabled">true</bool>
-  <string name="engine_1_name">eniro_se</string>
-  <string name="engine_1_label">Eniro</string>
-  <bool   name="engine_2_enabled">true</bool>
-  <string name="engine_2_name">msn_sv_SE</string>
-  <string name="engine_2_label">MSN</string>
-  <bool   name="engine_3_enabled">true</bool>
-  <string name="engine_3_name">altavista_se</string>
-  <string name="engine_3_label">AltaVista</string>
-  <bool   name="engine_4_enabled">true</bool>
-  <string name="engine_4_name">spray</string>
-  <string name="engine_4_label">Spray</string>
-  <bool   name="engine_5_enabled">false</bool>
-  <string name="engine_5_name"></string>
-  <string name="engine_5_label"></string>
-  <bool   name="engine_6_enabled">false</bool>
-  <string name="engine_6_name"></string>
-  <string name="engine_6_label"></string>
-  <bool   name="engine_7_enabled">false</bool>
-  <string name="engine_7_name"></string>
-  <string name="engine_7_label"></string>
-</resources>
diff --git a/res/values-zh-rCN/search_engines.xml b/res/values-zh-rCN/search_engines.xml
deleted file mode 100644
index f409aba..0000000
--- a/res/values-zh-rCN/search_engines.xml
+++ /dev/null
@@ -1,48 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2009 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-<!--
-****
-**** THIS IS AN AUTOGENERATED FILE.
-**** PLEASE DO NOT EDIT IT MANUALLY WITHOUT REMOVING THIS NOTICE.
-****
-**** To regenerate this file, use:
-****       $ tools/get_search_engines.py $locale
-**** e.g.  $ tools/get_search_engines.py es-MX
-****
--->
-<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-  <bool   name="engine_1_enabled">true</bool>
-  <string name="engine_1_name">baidu</string>
-  <string name="engine_1_label">&amp;#x767e&amp;#x5ea6</string>
-  <bool   name="engine_2_enabled">true</bool>
-  <string name="engine_2_name">yahoo_cn</string>
-  <string name="engine_2_label">&amp;#x4e2d&amp;#x56fd&amp;#x96c5&amp;#x864e</string>
-  <bool   name="engine_3_enabled">true</bool>
-  <string name="engine_3_name">sogou</string>
-  <string name="engine_3_label">&amp;#x641c&amp;#x72d7</string>
-  <bool   name="engine_4_enabled">true</bool>
-  <string name="engine_4_name">soso</string>
-  <string name="engine_4_label">&amp;#x641c&amp;#x641c</string>
-  <bool   name="engine_5_enabled">false</bool>
-  <string name="engine_5_name"></string>
-  <string name="engine_5_label"></string>
-  <bool   name="engine_6_enabled">false</bool>
-  <string name="engine_6_name"></string>
-  <string name="engine_6_label"></string>
-  <bool   name="engine_7_enabled">false</bool>
-  <string name="engine_7_name"></string>
-  <string name="engine_7_label"></string>
-</resources>
diff --git a/res/values-zh-rHK/search_engines.xml b/res/values-zh-rHK/search_engines.xml
deleted file mode 100644
index 15664c8..0000000
--- a/res/values-zh-rHK/search_engines.xml
+++ /dev/null
@@ -1,48 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2009 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-<!--
-****
-**** THIS IS AN AUTOGENERATED FILE.
-**** PLEASE DO NOT EDIT IT MANUALLY WITHOUT REMOVING THIS NOTICE.
-****
-**** To regenerate this file, use:
-****       $ tools/get_search_engines.py $locale
-**** e.g.  $ tools/get_search_engines.py es-MX
-****
--->
-<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-  <bool   name="engine_1_enabled">true</bool>
-  <string name="engine_1_name">yahoo_hk</string>
-  <string name="engine_1_label">Yahoo! Hong Kong</string>
-  <bool   name="engine_2_enabled">true</bool>
-  <string name="engine_2_name">msn_zh_HK</string>
-  <string name="engine_2_label">MSN Hong Kong</string>
-  <bool   name="engine_3_enabled">true</bool>
-  <string name="engine_3_name">sogou</string>
-  <string name="engine_3_label">&amp;#x641c&amp;#x72d7</string>
-  <bool   name="engine_4_enabled">true</bool>
-  <string name="engine_4_name">baidu</string>
-  <string name="engine_4_label">&amp;#x767e&amp;#x5ea6</string>
-  <bool   name="engine_5_enabled">false</bool>
-  <string name="engine_5_name"></string>
-  <string name="engine_5_label"></string>
-  <bool   name="engine_6_enabled">false</bool>
-  <string name="engine_6_name"></string>
-  <string name="engine_6_label"></string>
-  <bool   name="engine_7_enabled">false</bool>
-  <string name="engine_7_name"></string>
-  <string name="engine_7_label"></string>
-</resources>
diff --git a/res/values-zh-rMO/search_engines.xml b/res/values-zh-rMO/search_engines.xml
deleted file mode 100644
index 2f5d39b..0000000
--- a/res/values-zh-rMO/search_engines.xml
+++ /dev/null
@@ -1,48 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2009 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-<!--
-****
-**** THIS IS AN AUTOGENERATED FILE.
-**** PLEASE DO NOT EDIT IT MANUALLY WITHOUT REMOVING THIS NOTICE.
-****
-**** To regenerate this file, use:
-****       $ tools/get_search_engines.py $locale
-**** e.g.  $ tools/get_search_engines.py es-MX
-****
--->
-<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-  <bool   name="engine_1_enabled">true</bool>
-  <string name="engine_1_name">yahoo</string>
-  <string name="engine_1_label">Yahoo!</string>
-  <bool   name="engine_2_enabled">true</bool>
-  <string name="engine_2_name">live</string>
-  <string name="engine_2_label">Live Search</string>
-  <bool   name="engine_3_enabled">false</bool>
-  <string name="engine_3_name"></string>
-  <string name="engine_3_label"></string>
-  <bool   name="engine_4_enabled">false</bool>
-  <string name="engine_4_name"></string>
-  <string name="engine_4_label"></string>
-  <bool   name="engine_5_enabled">false</bool>
-  <string name="engine_5_name"></string>
-  <string name="engine_5_label"></string>
-  <bool   name="engine_6_enabled">false</bool>
-  <string name="engine_6_name"></string>
-  <string name="engine_6_label"></string>
-  <bool   name="engine_7_enabled">false</bool>
-  <string name="engine_7_name"></string>
-  <string name="engine_7_label"></string>
-</resources>
diff --git a/res/values-zh-rTW/search_engines.xml b/res/values-zh-rTW/search_engines.xml
deleted file mode 100644
index eecd64e..0000000
--- a/res/values-zh-rTW/search_engines.xml
+++ /dev/null
@@ -1,48 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2009 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-<!--
-****
-**** THIS IS AN AUTOGENERATED FILE.
-**** PLEASE DO NOT EDIT IT MANUALLY WITHOUT REMOVING THIS NOTICE.
-****
-**** To regenerate this file, use:
-****       $ tools/get_search_engines.py $locale
-**** e.g.  $ tools/get_search_engines.py es-MX
-****
--->
-<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-  <bool   name="engine_1_enabled">true</bool>
-  <string name="engine_1_name">yahoo_tw</string>
-  <string name="engine_1_label">Yahoo!&amp;#x5947&amp;#x6469</string>
-  <bool   name="engine_2_enabled">true</bool>
-  <string name="engine_2_name">yam</string>
-  <string name="engine_2_label">\u5929\u7a7a</string>
-  <bool   name="engine_3_enabled">false</bool>
-  <string name="engine_3_name"></string>
-  <string name="engine_3_label"></string>
-  <bool   name="engine_4_enabled">false</bool>
-  <string name="engine_4_name"></string>
-  <string name="engine_4_label"></string>
-  <bool   name="engine_5_enabled">false</bool>
-  <string name="engine_5_name"></string>
-  <string name="engine_5_label"></string>
-  <bool   name="engine_6_enabled">false</bool>
-  <string name="engine_6_name"></string>
-  <string name="engine_6_label"></string>
-  <bool   name="engine_7_enabled">false</bool>
-  <string name="engine_7_name"></string>
-  <string name="engine_7_label"></string>
-</resources>
diff --git a/res/values-zh-rTW/strings.xml b/res/values-zh-rTW/strings.xml
deleted file mode 100644
index 846d711..0000000
--- a/res/values-zh-rTW/strings.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2009 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="app_label">"網頁搜尋供應者"</string>
-</resources>
diff --git a/res/values/all_search_engines.xml b/res/values/all_search_engines.xml
deleted file mode 100644
index 143e54e..0000000
--- a/res/values/all_search_engines.xml
+++ /dev/null
@@ -1,686 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
-** Copyright 2009, The Android Open Source Project
-**
-** Licensed under the Apache License, Version 2.0 (the "License");
-** you may not use this file except in compliance with the License.
-** You may obtain a copy of the License at
-**
-**     http://www.apache.org/licenses/LICENSE-2.0
-**
-** Unless required by applicable law or agreed to in writing, software
-** distributed under the License is distributed on an "AS IS" BASIS,
-** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-** See the License for the specific language governing permissions and
-** limitations under the License.
-*/
--->
-
-<!--
-****
-**** THIS IS AN AUTOGENERATED FILE.
-**** PLEASE DO NOT EDIT IT MANUALLY WITHOUT REMOVING THIS NOTICE.
-****
-
-Each string-array item below refers to one search engine in a specific locale, and the name of the
-item is referred to by the <engine_X_name> items in the locale specific search_engines.xml file.
-
-Format:
-  - Keyword: empty string if the engine has no keyword.
-  - Favicon
-  - Search URL
-  - Encoding
-  - Suggest URL: empty string if this engine has no suggest feature
-
-The parameters enclosed in curly brackets come from the OpenSearch specification. More about them
-at http://www.opensearch.org/Specifications/OpenSearch/1.1/Draft_4#OpenSearch_1.1_parameters
--->
-
-<resources>
-  <string-array name="yahoo">
-    <item>yahoo.com</item>
-    <item>http://search.yahoo.com/favicon.ico</item>
-    <item>http://search.yahoo.com/search?ei={inputEncoding}&amp;fr=crmas&amp;p={searchTerms}</item>
-    <item>UTF-8</item>
-    <item>http://ff.search.yahoo.com/gossip?output=fxjson&amp;command={searchTerms}</item>
-  </string-array>
-  <string-array name="live_en_US">
-    <item>live.com</item>
-    <item>http://search.live.com/s/wlflag.ico</item>
-    <item>http://search.live.com/results.aspx?setlang=en-US&amp;mkt=en-US&amp;q={searchTerms}</item>
-    <item>UTF-8</item>
-    <item></item>
-  </string-array>
-  <string-array name="aol">
-    <item>aol.com</item>
-    <item>http://search.aol.com/favicon.ico</item>
-    <item>http://search.aol.com/aol/search?query={searchTerms}</item>
-    <item>UTF-8</item>
-    <item></item>
-  </string-array>
-  <string-array name="ask">
-    <item>ask.com</item>
-    <item>http://www.ask.com/favicon.ico</item>
-    <item>http://www.ask.com/web?q={searchTerms}</item>
-    <item>UTF-8</item>
-    <item>http://ss.ask.com/query?q={searchTerms}&amp;li=ff</item>
-  </string-array>
-  <string-array name="yahoo_uk">
-    <item>uk.yahoo.com</item>
-    <item>http://uk.search.yahoo.com/favicon.ico</item>
-    <item>http://uk.search.yahoo.com/search?ei={inputEncoding}&amp;fr=crmas&amp;p={searchTerms}</item>
-    <item>UTF-8</item>
-    <item>http://uk-sayt.ff.search.yahoo.com/gossip-uk-sayt?output=fxjson&amp;command={searchTerms}</item>
-  </string-array>
-  <string-array name="msn_en_GB">
-    <item>uk.msn.com</item>
-    <item>http://search.msn.co.uk/s/wlflag.ico</item>
-    <item>http://search.msn.co.uk/results.aspx?mkt=en-GB&amp;q={searchTerms}</item>
-    <item>UTF-8</item>
-    <item></item>
-  </string-array>
-  <string-array name="ask_uk">
-    <item>uk.ask.com</item>
-    <item>http://uk.ask.com/favicon.ico</item>
-    <item>http://uk.ask.com/web?q={searchTerms}</item>
-    <item>UTF-8</item>
-    <item>http://ss.uk.ask.com/query?q={searchTerms}&amp;li=ff</item>
-  </string-array>
-  <string-array name="seznam">
-    <item>seznam.cz</item>
-    <item>http://1.im.cz/szn/img/favicon.ico</item>
-    <item>http://search.seznam.cz/?q={searchTerms}</item>
-    <item>UTF-8</item>
-    <item>http:///suggest.fulltext.seznam.cz/?dict=fulltext_ff&amp;phrase={searchTerms}&amp;encoding={inputEncoding}&amp;response_encoding=utf-8</item>
-  </string-array>
-  <string-array name="centrum_cz">
-    <item>centrum.cz</item>
-    <item>http://img.centrum.cz/6/vy2/o/favicon.ico</item>
-    <item>http://search.centrum.cz/index.php?charset={inputEncoding}&amp;q={searchTerms}</item>
-    <item>UTF-8</item>
-    <item></item>
-  </string-array>
-  <string-array name="atlas_cz">
-    <item>atlas.cz</item>
-    <item>http://img.atlas.cz/favicon.ico</item>
-    <item>http://search.atlas.cz/?q={searchTerms}</item>
-    <item>windows-1250</item>
-    <item></item>
-  </string-array>
-  <string-array name="live_cs_CZ">
-    <item>live.com</item>
-    <item>http://search.live.com/s/wlflag.ico</item>
-    <item>http://search.live.com/results.aspx?mkt=cs-CZ&amp;q={searchTerms}</item>
-    <item>UTF-8</item>
-    <item></item>
-  </string-array>
-  <string-array name="jubii">
-    <item>jubii.dk</item>
-    <item>http://search.jubii.dk/favicon_jubii.ico</item>
-    <item>http://search.jubii.dk/cgi-bin/pursuit?query={searchTerms}</item>
-    <item>ISO-8859-1</item>
-    <item></item>
-  </string-array>
-  <string-array name="msn_da_DK">
-    <item>dk.msn.com</item>
-    <item>http://search.msn.dk/s/wlflag.ico</item>
-    <item>http://search.msn.dk/results.aspx?mkt=da-DK&amp;q={searchTerms}</item>
-    <item>UTF-8</item>
-    <item></item>
-  </string-array>
-  <string-array name="yahoo_dk">
-    <item>dk.yahoo.com</item>
-    <item>http://dk.search.yahoo.com/favicon.ico</item>
-    <item>http://dk.search.yahoo.com/search?ei={inputEncoding}&amp;fr=crmas&amp;p={searchTerms}</item>
-    <item>UTF-8</item>
-    <item></item>
-  </string-array>
-  <string-array name="eniro_dk">
-    <item>eniro.dk</item>
-    <item>http://eniro.dk/favicon.ico</item>
-    <item>http://eniro.dk/query?search_word={searchTerms}&amp;what=web_local</item>
-    <item>ISO-8859-1</item>
-    <item></item>
-  </string-array>
-  <string-array name="yahoo_at">
-    <item>at.yahoo.com</item>
-    <item>http://at.search.yahoo.com/favicon.ico</item>
-    <item>http://at.search.yahoo.com/search?ei={inputEncoding}&amp;fr=crmas&amp;p={searchTerms}</item>
-    <item>UTF-8</item>
-    <item></item>
-  </string-array>
-  <string-array name="msn_de_AT">
-    <item>at.msn.com</item>
-    <item>http://search.msn.at/s/wlflag.ico</item>
-    <item>http://search.msn.at/results.aspx?mkt=de-AT&amp;q={searchTerms}</item>
-    <item>UTF-8</item>
-    <item></item>
-  </string-array>
-  <string-array name="search_ch">
-    <item>search.ch</item>
-    <item>http://www.search.ch/favicon.ico</item>
-    <item>http://www.search.ch/?q={searchTerms}</item>
-    <item>ISO-8859-1</item>
-    <item></item>
-  </string-array>
-  <string-array name="yahoo_ch">
-    <item>ch.yahoo.com</item>
-    <item>http://ch.search.yahoo.com/favicon.ico</item>
-    <item>http://ch.search.yahoo.com/search?ei={inputEncoding}&amp;fr=crmas&amp;p={searchTerms}</item>
-    <item>UTF-8</item>
-    <item></item>
-  </string-array>
-  <string-array name="msn_de_CH">
-    <item>ch.msn.com</item>
-    <item>http://search.msn.ch/s/wlflag.ico</item>
-    <item>http://search.msn.ch/results.aspx?setlang=de-CH&amp;mkt=de-CH&amp;q={searchTerms}</item>
-    <item>UTF-8</item>
-    <item></item>
-  </string-array>
-  <string-array name="msn_fr_CH">
-    <item></item>
-    <item>http://search.msn.ch/s/wlflag.ico</item>
-    <item>http://search.msn.ch/results.aspx?setlang=fr-CH&amp;mkt=fr-CH&amp;q={searchTerms}</item>
-    <item>UTF-8</item>
-    <item></item>
-  </string-array>
-  <string-array name="bluewin">
-    <item>search.bluewin.ch</item>
-    <item>http://search.bluewin.ch/favicon.ico</item>
-    <item>http://search.bluewin.ch/bw/search/web/de/result.jsp?query={searchTerms}</item>
-    <item>ISO-8859-1</item>
-    <item></item>
-  </string-array>
-  <string-array name="msn_de_DE">
-    <item>de.msn.com</item>
-    <item>http://search.live.com/s/wlflag.ico</item>
-    <item>http://search.live.com/results.aspx?mkt=de-DE&amp;q={searchTerms}</item>
-    <item>UTF-8</item>
-    <item></item>
-  </string-array>
-  <string-array name="yahoo_de">
-    <item>de.yahoo.com</item>
-    <item>http://de.search.yahoo.com/favicon.ico</item>
-    <item>http://de.search.yahoo.com/search?ei={inputEncoding}&amp;fr=crmas&amp;p={searchTerms}</item>
-    <item>UTF-8</item>
-    <item>http://de-sayt.ff.search.yahoo.com/gossip-de-sayt?output=fxjson&amp;command={searchTerms}</item>
-  </string-array>
-  <string-array name="t_online">
-    <item>suche.t-online.de</item>
-    <item>http://suche.t-online.de/favicon.ico</item>
-    <item>http://suche.t-online.de/fast-cgi/tsc?sr=chrome&amp;q={searchTerms}</item>
-    <item>UTF-8</item>
-    <item></item>
-  </string-array>
-  <string-array name="ask_de">
-    <item>de.ask.com</item>
-    <item>http://de.ask.com/favicon.ico</item>
-    <item>http://de.ask.com/web?q={searchTerms}</item>
-    <item>UTF-8</item>
-    <item>http://ss.de.ask.com/query?q={searchTerms}&amp;li=ff</item>
-  </string-array>
-  <string-array name="web_de">
-    <item>web.de</item>
-    <item>http://img.ui-portal.de/search/img/webde/favicon.ico</item>
-    <item>http://suche.web.de/search/web/?su={searchTerms}</item>
-    <item>ISO-8859-1</item>
-    <item></item>
-  </string-array>
-  <string-array name="yahoo_au">
-    <item>au.yahoo.com</item>
-    <item>http://au.search.yahoo.com/favicon.ico</item>
-    <item>http://au.search.yahoo.com/search?ei={inputEncoding}&amp;fr=crmas&amp;p={searchTerms}</item>
-    <item>UTF-8</item>
-    <item>http://aue-sayt.ff.search.yahoo.com/gossip-au-sayt?output=fxjson&amp;command={searchTerms}</item>
-  </string-array>
-  <string-array name="msn_en_AU">
-    <item>ninemsn.com.au</item>
-    <item>http://search.live.com/s/wlflag.ico</item>
-    <item>http://search.live.com/results.aspx?mkt=en-AU&amp;q={searchTerms}</item>
-    <item>UTF-8</item>
-    <item></item>
-  </string-array>
-  <string-array name="sensis">
-    <item>sensis.com.au</item>
-    <item>http://www.sensis.com.au/favicon.ico</item>
-    <item>http://www.sensis.com.au/search.do?find={searchTerms}</item>
-    <item>UTF-8</item>
-    <item></item>
-  </string-array>
-  <string-array name="msn_en_IE">
-    <item>ie.msn.com</item>
-    <item>http://search.msn.ie/s/wlflag.ico</item>
-    <item>http://search.msn.ie/results.aspx?mkt=en-IE&amp;q={searchTerms}</item>
-    <item>UTF-8</item>
-    <item></item>
-  </string-array>
-  <string-array name="yahoo_nz">
-    <item>nz.yahoo.com</item>
-    <item>http://nz.search.yahoo.com/favicon.ico</item>
-    <item>http://nz.search.yahoo.com/search?ei={inputEncoding}&amp;fr=crmas&amp;p={searchTerms}</item>
-    <item>UTF-8</item>
-    <item>http://aue-sayt.ff.search.yahoo.com/gossip-nz-sayt?output=fxjson&amp;command={searchTerms}</item>
-  </string-array>
-  <string-array name="live_en_NZ">
-    <item>live.com</item>
-    <item>http://search.live.com/s/wlflag.ico</item>
-    <item>http://search.live.com/results.aspx?mkt=en-NZ&amp;q={searchTerms}</item>
-    <item>UTF-8</item>
-    <item></item>
-  </string-array>
-  <string-array name="yahoo_sg">
-    <item>sg.yahoo.com</item>
-    <item>http://sg.search.yahoo.com/favicon.ico</item>
-    <item>http://sg.search.yahoo.com/search?ei={inputEncoding}&amp;fr=crmas&amp;p={searchTerms}</item>
-    <item>UTF-8</item>
-    <item>http://sg-sayt.ff.search.yahoo.com/gossip-sg-sayt?output=fxjson&amp;command={searchTerms}</item>
-  </string-array>
-  <string-array name="msn_en_SG">
-    <item>sg.msn.com</item>
-    <item>http://search.msn.com.sg/s/wlflag.ico</item>
-    <item>http://search.msn.com.sg/results.aspx?mkt=en-SG&amp;q={searchTerms}</item>
-    <item>UTF-8</item>
-    <item></item>
-  </string-array>
-  <string-array name="rednano">
-    <item>rednano.sg</item>
-    <item>http://rednano.sg/favicon.ico</item>
-    <item>http://rednano.sg/sfe/lwi.action?querystring={searchTerms}</item>
-    <item>UTF-8</item>
-    <item></item>
-  </string-array>
-  <string-array name="msn_en_ZA">
-    <item>za.msn.com</item>
-    <item>http://search.msn.co.za/s/wlflag.ico</item>
-    <item>http://search.msn.co.za/results.aspx?mkt=en-ZA&amp;q={searchTerms}</item>
-    <item>UTF-8</item>
-    <item></item>
-  </string-array>
-  <string-array name="mweb">
-    <item>mweb.co.za</item>
-    <item>http://mweb.co.za/favicon.ico</item>
-    <item>http://search.mweb.co.za/search?&amp;q={searchTerms}</item>
-    <item>UTF-8</item>
-    <item></item>
-  </string-array>
-  <string-array name="iafrica">
-    <item>iafrica.com</item>
-    <item></item>
-    <item>http://search.iafrica.com/search?q={searchTerms}</item>
-    <item>ISO-8859-1</item>
-    <item></item>
-  </string-array>
-  <string-array name="msn_es_ES">
-    <item>es.msn.com</item>
-    <item>http://search.msn.es/s/wlflag.ico</item>
-    <item>http://search.msn.es/results.aspx?mkt=es-ES&amp;q={searchTerms}</item>
-    <item>UTF-8</item>
-    <item></item>
-  </string-array>
-  <string-array name="yahoo_es">
-    <item>es.yahoo.com</item>
-    <item>http://es.search.yahoo.com/favicon.ico</item>
-    <item>http://es.search.yahoo.com/search?ei={inputEncoding}&amp;fr=crmas&amp;p={searchTerms}</item>
-    <item>UTF-8</item>
-    <item>http://es-sayt.ff.search.yahoo.com/gossip-es-sayt?output=fxjson&amp;command={searchTerms}</item>
-  </string-array>
-  <string-array name="terra_es">
-    <item>terra.es</item>
-    <item>http://buscador.terra.es/favicon.ico</item>
-    <item>http://buscador.terra.es/Default.aspx?query={searchTerms}&amp;source=Search</item>
-    <item>ISO-8859-1</item>
-    <item></item>
-  </string-array>
-  <string-array name="ozu">
-    <item>ozu.es</item>
-    <item>http://www.ozu.es/favicon.ico</item>
-    <item>http://buscar.ozu.es/index.php?q={searchTerms}</item>
-    <item>ISO-8859-1</item>
-    <item></item>
-  </string-array>
-  <string-array name="altavista_es">
-    <item>es.altavista.com</item>
-    <item>http://es.altavista.com/favicon.ico</item>
-    <item>http://es.altavista.com/web/results?q={searchTerms}</item>
-    <item>UTF-8</item>
-    <item></item>
-  </string-array>
-  <string-array name="msn_nl_BE">
-    <item>be.msn.com</item>
-    <item>http://search.live.com/s/wlflag.ico</item>
-    <item>http://search.live.com/results.aspx?setlang=nl-BE&amp;mkt=nl-BE&amp;q={searchTerms}</item>
-    <item>UTF-8</item>
-    <item></item>
-  </string-array>
-  <string-array name="msn_fr_BE">
-    <item></item>
-    <item>http://search.live.com/s/wlflag.ico</item>
-    <item>http://search.live.com/results.aspx?setlang=fr-BE&amp;mkt=fr-BE&amp;q={searchTerms}</item>
-    <item>UTF-8</item>
-    <item></item>
-  </string-array>
-  <string-array name="voila">
-    <item>voila.fr</item>
-    <item>http://search.ke.voila.fr/favicon.ico</item>
-    <item>http://rws.search.ke.voila.fr/RW/S/opensearch_voila?rdata={searchTerms}</item>
-    <item>ISO-8859-1</item>
-    <item>http://search.ke.voila.fr/fr/cmplopensearch/xml/fullxml?rdata={searchTerms}</item>
-  </string-array>
-  <string-array name="yahoo_fr">
-    <item>fr.yahoo.com</item>
-    <item>http://fr.search.yahoo.com/favicon.ico</item>
-    <item>http://fr.search.yahoo.com/search?ei={inputEncoding}&amp;fr=crmas&amp;p={searchTerms}</item>
-    <item>UTF-8</item>
-    <item>http://fr-sayt.ff.search.yahoo.com/gossip-fr-sayt?output=fxjson&amp;command={searchTerms}</item>
-  </string-array>
-  <string-array name="msn_fr_FR">
-    <item>fr.msn.com</item>
-    <item>http://search.msn.fr/s/wlflag.ico</item>
-    <item>http://search.msn.fr/results.aspx?mkt=fr-FR&amp;q={searchTerms}</item>
-    <item>UTF-8</item>
-    <item></item>
-  </string-array>
-  <string-array name="orange">
-    <item>orange.fr</item>
-    <item>http://www.orange.fr/favicon.ico</item>
-    <item>http://rws.search.ke.voila.fr/RW/S/opensearch_orange?rdata={searchTerms}</item>
-    <item>ISO-8859-1</item>
-    <item>http://search.ke.voila.fr/fr/cmplopensearch/xml/fullxml?rdata={searchTerms}</item>
-  </string-array>
-  <string-array name="aol_fr">
-    <item>aol.fr</item>
-    <item>http://www.aol.fr/favicon.ico</item>
-    <item>http://www.recherche.aol.fr/aol/search?q={searchTerms}</item>
-    <item>UTF-8</item>
-    <item></item>
-  </string-array>
-  <string-array name="virgilio">
-    <item>virgilio.alice.it</item>
-    <item>http://ricerca.alice.it/favicon.ico</item>
-    <item>http://ricerca.alice.it/ricerca?qs={searchTerms}</item>
-    <item>ISO-8859-1</item>
-    <item></item>
-  </string-array>
-  <string-array name="yahoo_it">
-    <item>it.yahoo.com</item>
-    <item>http://it.search.yahoo.com/favicon.ico</item>
-    <item>http://it.search.yahoo.com/search?ei={inputEncoding}&amp;fr=crmas&amp;p={searchTerms}</item>
-    <item>UTF-8</item>
-    <item>http://it-sayt.ff.search.yahoo.com/gossip-it-sayt?output=fxjson&amp;command={searchTerms}</item>
-  </string-array>
-  <string-array name="libero">
-    <item>libero.it</item>
-    <item>http://arianna.libero.it/favicon.ico</item>
-    <item>http://arianna.libero.it/search/abin/integrata.cgi?query={searchTerms}</item>
-    <item>ISO-8859-1</item>
-    <item></item>
-  </string-array>
-  <string-array name="ask_it">
-    <item>it.ask.com</item>
-    <item>http://it.ask.com/favicon.ico</item>
-    <item>http://it.ask.com/web?q={searchTerms}</item>
-    <item>UTF-8</item>
-    <item>http://ss.it.ask.com/query?q={searchTerms}&amp;li=ff</item>
-  </string-array>
-  <string-array name="live_it_IT">
-    <item>live.com</item>
-    <item>http://search.live.com/s/wlflag.ico</item>
-    <item>http://search.live.com/results.aspx?mkt=it-IT&amp;q={searchTerms}</item>
-    <item>UTF-8</item>
-    <item></item>
-  </string-array>
-  <string-array name="yahoo_jp">
-    <item>yahoo.co.jp</item>
-    <item>http://search.yahoo.co.jp/favicon.ico</item>
-    <item>http://search.yahoo.co.jp/search?ei={inputEncoding}&amp;fr=crmas&amp;p={searchTerms}</item>
-    <item>UTF-8</item>
-    <item></item>
-  </string-array>
-  <string-array name="msn_ja_JP">
-    <item>jp.msn.com</item>
-    <item>http://search.msn.co.jp/s/wlflag.ico</item>
-    <item>http://search.msn.co.jp/results.aspx?mkt=ja-JP&amp;q={searchTerms}</item>
-    <item>UTF-8</item>
-    <item></item>
-  </string-array>
-  <string-array name="biglobe">
-    <item>biglobe.ne.jp</item>
-    <item>http://cgi.search.biglobe.ne.jp/favicon.ico</item>
-    <item>http://cgi.search.biglobe.ne.jp/cgi-bin/search2-b?q={searchTerms}</item>
-    <item>Shift_JIS</item>
-    <item></item>
-  </string-array>
-  <string-array name="goo">
-    <item>goo.ne.jp</item>
-    <item>http://goo.ne.jp/gooicon.ico</item>
-    <item>http://search.goo.ne.jp/web.jsp?MT={searchTerms}&amp;IE={inputEncoding}</item>
-    <item>UTF-8</item>
-    <item></item>
-  </string-array>
-  <string-array name="nifty">
-    <item>nifty.com</item>
-    <item>http://www.nifty.com/favicon.ico</item>
-    <item>http://search.nifty.com/cgi-bin/search.cgi?Text={searchTerms}</item>
-    <item>Shift_JIS</item>
-    <item></item>
-  </string-array>
-  <string-array name="live">
-    <item>live.com</item>
-    <item>http://search.live.com/s/wlflag.ico</item>
-    <item>http://search.live.com/results.aspx?q={searchTerms}</item>
-    <item>UTF-8</item>
-    <item></item>
-  </string-array>
-  <string-array name="ilse">
-    <item>ilse.nl</item>
-    <item>http://search.ilse.nl/images/favicon.ico</item>
-    <item>http://search.ilse.nl/web?search_for={searchTerms}</item>
-    <item>ISO-8859-1</item>
-    <item></item>
-  </string-array>
-  <string-array name="msn_nl_NL">
-    <item>nl.msn.com</item>
-    <item>http://search.msn.nl/s/wlflag.ico</item>
-    <item>http://search.msn.nl/results.aspx?mkt=nl-NL&amp;q={searchTerms}</item>
-    <item>UTF-8</item>
-    <item></item>
-  </string-array>
-  <string-array name="yahoo_nl">
-    <item>nl.yahoo.com</item>
-    <item>http://nl.search.yahoo.com/favicon.ico</item>
-    <item>http://nl.search.yahoo.com/search?ei={inputEncoding}&amp;fr=crmas&amp;p={searchTerms}</item>
-    <item>UTF-8</item>
-    <item></item>
-  </string-array>
-  <string-array name="lycos_nl">
-    <item>lycos.nl</item>
-    <item>http://zoek.lycos.nl/favicon.ico</item>
-    <item>http://zoek.lycos.nl/cgi-bin/pursuit?query={searchTerms}</item>
-    <item>ISO-8859-1</item>
-    <item></item>
-  </string-array>
-  <string-array name="vinden">
-    <item>vinden.nl</item>
-    <item>http://www.vinden.nl/favicon.ico</item>
-    <item>http://www.vinden.nl/?q={searchTerms}</item>
-    <item>UTF-8</item>
-    <item></item>
-  </string-array>
-  <string-array name="msn_nb_NO">
-    <item>no.msn.com</item>
-    <item>http://search.msn.no/s/wlflag.ico</item>
-    <item>http://search.msn.no/results.aspx?mkt=nb-NO&amp;q={searchTerms}</item>
-    <item>UTF-8</item>
-    <item></item>
-  </string-array>
-  <string-array name="abcsok">
-    <item>abcsok.no</item>
-    <item>http://abcsok.no/favicon.ico</item>
-    <item>http://abcsok.no/index.html?q={searchTerms}</item>
-    <item>UTF-8</item>
-    <item></item>
-  </string-array>
-  <string-array name="yahoo_no">
-    <item>no.yahoo.com</item>
-    <item>http://no.search.yahoo.com/favicon.ico</item>
-    <item>http://no.search.yahoo.com/search?ei={inputEncoding}&amp;fr=crmas&amp;p={searchTerms}</item>
-    <item>UTF-8</item>
-    <item></item>
-  </string-array>
-  <string-array name="kvasir">
-    <item>kvasir.no</item>
-    <item>http://www.kvasir.no/img/favicon.ico</item>
-    <item>http://www.kvasir.no/nettsok/searchResult.html?searchExpr={searchTerms}</item>
-    <item>ISO-8859-1</item>
-    <item></item>
-  </string-array>
-  <string-array name="sesam">
-    <item>sesam.no</item>
-    <item>http://sesam.no/images/favicon.gif</item>
-    <item>http://sesam.no/search/?q={searchTerms}</item>
-    <item>UTF-8</item>
-    <item></item>
-  </string-array>
-  <string-array name="onet">
-    <item>onet.pl</item>
-    <item>http://szukaj.onet.pl/favicon.ico</item>
-    <item>http://szukaj.onet.pl/query.html?qt={searchTerms}</item>
-    <item>ISO-8859-2</item>
-    <item></item>
-  </string-array>
-  <string-array name="wp">
-    <item>wp.pl</item>
-    <item>http://szukaj.wp.pl/favicon.ico</item>
-    <item>http://szukaj.wp.pl/szukaj.html?szukaj={searchTerms}</item>
-    <item>ISO-8859-2</item>
-    <item></item>
-  </string-array>
-  <string-array name="live_pl_PL">
-    <item>live.com</item>
-    <item>http://search.live.com/s/wlflag.ico</item>
-    <item>http://search.live.com/results.aspx?mkt=pl-PL&amp;q={searchTerms}</item>
-    <item>UTF-8</item>
-    <item></item>
-  </string-array>
-  <string-array name="yandex_ru">
-    <item>yandex.ru</item>
-    <item>http://yandex.ru/favicon.ico</item>
-    <item>http://yandex.ru/yandsearch?text={searchTerms}</item>
-    <item>UTF-8</item>
-    <item>http://suggest.yandex.net/suggest-ff.cgi?part={searchTerms}</item>
-  </string-array>
-  <string-array name="rambler">
-    <item>rambler.ru</item>
-    <item>http://www.rambler.ru/favicon.ico</item>
-    <item>http://www.rambler.ru/srch?words={searchTerms}</item>
-    <item>windows-1251</item>
-    <item></item>
-  </string-array>
-  <string-array name="mail_ru">
-    <item>mail.ru</item>
-    <item>http://img.go.mail.ru/favicon.ico</item>
-    <item>http://go.mail.ru/search?q={searchTerms}</item>
-    <item>windows-1251</item>
-    <item></item>
-  </string-array>
-  <string-array name="yahoo_ru">
-    <item>ru.yahoo.com</item>
-    <item>http://ru.search.yahoo.com/favicon.ico</item>
-    <item>http://ru.search.yahoo.com/search?ei={inputEncoding}&amp;fr=crmas&amp;p={searchTerms}</item>
-    <item>UTF-8</item>
-    <item></item>
-  </string-array>
-  <string-array name="live_ru_RU">
-    <item>live.com</item>
-    <item>http://search.live.com/s/wlflag.ico</item>
-    <item>http://search.live.com/results.aspx?mkt=ru-RU&amp;q={searchTerms}</item>
-    <item>UTF-8</item>
-    <item></item>
-  </string-array>
-  <string-array name="eniro_se">
-    <item>eniro.se</item>
-    <item>http://eniro.se/favicon.ico</item>
-    <item>http://eniro.se/query?search_word={searchTerms}&amp;what=web_local</item>
-    <item>ISO-8859-1</item>
-    <item></item>
-  </string-array>
-  <string-array name="msn_sv_SE">
-    <item>se.msn.com</item>
-    <item>http://search.msn.se/s/wlflag.ico</item>
-    <item>http://search.msn.se/results.aspx?mkt=pv-SE&amp;q={searchTerms}</item>
-    <item>UTF-8</item>
-    <item></item>
-  </string-array>
-  <string-array name="altavista_se">
-    <item>se.altavista.com</item>
-    <item>http://se.altavista.com/favicon.ico</item>
-    <item>http://se.altavista.com/web/results?q={searchTerms}</item>
-    <item>UTF-8</item>
-    <item></item>
-  </string-array>
-  <string-array name="spray">
-    <item>spray.se</item>
-    <item>http://www.eniro.se/favicon.ico</item>
-    <item>http://www.eniro.se/query?ax=spray&amp;search_word={searchTerms}&amp;what=web</item>
-    <item>ISO-8859-1</item>
-    <item></item>
-  </string-array>
-  <string-array name="baidu">
-    <item>baidu.com</item>
-    <item>http://www.baidu.com/favicon.ico</item>
-    <item>http://www.baidu.com/s?wd={searchTerms}</item>
-    <item>GB2312</item>
-    <item></item>
-  </string-array>
-  <string-array name="yahoo_cn">
-    <item>cn.yahoo.com</item>
-    <item>http://search.cn.yahoo.com/favicon.ico</item>
-    <item>http://search.cn.yahoo.com/search?ei={inputEncoding}&amp;fr=crmas&amp;p={searchTerms}</item>
-    <item>GB2312</item>
-    <item></item>
-  </string-array>
-  <string-array name="sogou">
-    <item>sogou.com</item>
-    <item>http://www.sogou.com/favicon.ico</item>
-    <item>http://www.sogou.com/web?query={searchTerms}</item>
-    <item>GB2312</item>
-    <item></item>
-  </string-array>
-  <string-array name="soso">
-    <item>soso.com</item>
-    <item>http://www.soso.com/favicon.ico</item>
-    <item>http://www.soso.com/q?w={searchTerms}</item>
-    <item>GB2312</item>
-    <item></item>
-  </string-array>
-  <string-array name="yahoo_hk">
-    <item>hk.yahoo.com</item>
-    <item>http://hk.search.yahoo.com/favicon.ico</item>
-    <item>http://hk.search.yahoo.com/search?ei={inputEncoding}&amp;fr=crmas&amp;p={searchTerms}</item>
-    <item>UTF-8</item>
-    <item></item>
-  </string-array>
-  <string-array name="msn_zh_HK">
-    <item>hk.msn.com</item>
-    <item>http://search.msn.com.hk/s/wlflag.ico</item>
-    <item>http://search.msn.com.hk/results.aspx?mkt=zh-HK&amp;q={searchTerms}</item>
-    <item>UTF-8</item>
-    <item></item>
-  </string-array>
-  <string-array name="yahoo_tw">
-    <item>tw.yahoo.com</item>
-    <item>http://tw.search.yahoo.com/favicon.ico</item>
-    <item>http://tw.search.yahoo.com/search?ei={inputEncoding}&amp;fr=crmas&amp;p={searchTerms}</item>
-    <item>UTF-8</item>
-    <item></item>
-  </string-array>
-  <string-array name="yam">
-    <item>yam.com</item>
-    <item>http://www.yam.com/i/8/sky.ico</item>
-    <item>http://search.yam.com/wps?k={searchTerms}</item>
-    <item>Big5</item>
-    <item></item>
-  </string-array>
-</resources>
-
diff --git a/res/values/search_engines.xml b/res/values/search_engines.xml
deleted file mode 100644
index 5115fb3..0000000
--- a/res/values/search_engines.xml
+++ /dev/null
@@ -1,48 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2009 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-<!--
-****
-**** THIS IS AN AUTOGENERATED FILE.
-**** PLEASE DO NOT EDIT IT MANUALLY WITHOUT REMOVING THIS NOTICE.
-****
-**** To regenerate this file, use:
-****       $ tools/get_search_engines.py $locale
-**** e.g.  $ tools/get_search_engines.py es-MX
-****
--->
-<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-  <bool   name="engine_1_enabled">true</bool>
-  <string name="engine_1_name">yahoo</string>
-  <string name="engine_1_label">Yahoo!</string>
-  <bool   name="engine_2_enabled">true</bool>
-  <string name="engine_2_name">live_en_US</string>
-  <string name="engine_2_label">Live Search</string>
-  <bool   name="engine_3_enabled">true</bool>
-  <string name="engine_3_name">aol</string>
-  <string name="engine_3_label">AOL</string>
-  <bool   name="engine_4_enabled">true</bool>
-  <string name="engine_4_name">ask</string>
-  <string name="engine_4_label">Ask</string>
-  <bool   name="engine_5_enabled">false</bool>
-  <string name="engine_5_name"></string>
-  <string name="engine_5_label"></string>
-  <bool   name="engine_6_enabled">false</bool>
-  <string name="engine_6_name"></string>
-  <string name="engine_6_label"></string>
-  <bool   name="engine_7_enabled">false</bool>
-  <string name="engine_7_name"></string>
-  <string name="engine_7_label"></string>
-</resources>
diff --git a/res/values/strings.xml b/res/values/strings.xml
deleted file mode 100644
index 94828ec..0000000
--- a/res/values/strings.xml
+++ /dev/null
@@ -1,31 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
- * Copyright (C) 2007 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
--->
-
-<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <!-- Title of the web search provider activity. -->
-    <string name="app_label">Web Search Provider</string>
-    <!-- Settings category title for 'Search engine settings' settings activity -->
-    <string name="search_engine_settings"><xliff:g id="provider" example="Google">%1$s</xliff:g> search settings</string>
-    <!-- Title and summaries for 'show web suggestions' check box setting -->
-    <string name="show_web_suggestions">Show web suggestions</string>
-    <string name="show_web_suggestions_summary_enabled">Show suggestions from <xliff:g id="provider" example="Google">%1$s</xliff:g> as you type</string>
-    <string name="show_web_suggestions_summary_disabled">Don\'t show suggestions from <xliff:g id="provider" example="Google">%1$s</xliff:g> as you type</string>
-    <string name="show_web_suggestions_not_supported">Can\'t get suggestions from <xliff:g id="provider" example="Google">%1$s</xliff:g></string>
-</resources>
-
diff --git a/res/xml/preferences.xml b/res/xml/preferences.xml
deleted file mode 100644
index 7752674..0000000
--- a/res/xml/preferences.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2009 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-
-<PreferenceScreen
-        xmlns:android="http://schemas.android.com/apk/res/android">
-
-    <CheckBoxPreference
-            android:key="show_web_suggestions"
-            android:title="@string/show_web_suggestions"
-            android:defaultValue="true" />
-
-</PreferenceScreen>
diff --git a/res/xml/searchable_1.xml b/res/xml/searchable_1.xml
deleted file mode 100644
index 1b01d0c..0000000
--- a/res/xml/searchable_1.xml
+++ /dev/null
@@ -1,31 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
-** Copyright 2009, The Android Open Source Project
-**
-** Licensed under the Apache License, Version 2.0 (the "License");
-** you may not use this file except in compliance with the License.
-** You may obtain a copy of the License at
-**
-**     http://www.apache.org/licenses/LICENSE-2.0
-**
-** Unless required by applicable law or agreed to in writing, software
-** distributed under the License is distributed on an "AS IS" BASIS,
-** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-** See the License for the specific language governing permissions and
-** limitations under the License.
-*/
--->
-
-<searchable xmlns:android="http://schemas.android.com/apk/res/android"
-    android:label="@string/engine_1_label"
-    android:voiceSearchMode="showVoiceSearchButton|launchWebSearch"
-    android:queryAfterZeroResults="true"
-    android:autoUrlDetect="true"
-
-    android:searchSuggestAuthority="com.android.websearch.Suggest"
-    android:searchSuggestSelection="field =?"
-    android:searchSuggestPath="1"
-    android:searchSuggestThreshold="3"
-    android:searchSuggestIntentAction="android.intent.action.WEB_SEARCH"
-/>
diff --git a/res/xml/searchable_2.xml b/res/xml/searchable_2.xml
deleted file mode 100644
index e472dba..0000000
--- a/res/xml/searchable_2.xml
+++ /dev/null
@@ -1,31 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
-** Copyright 2009, The Android Open Source Project
-**
-** Licensed under the Apache License, Version 2.0 (the "License");
-** you may not use this file except in compliance with the License.
-** You may obtain a copy of the License at
-**
-**     http://www.apache.org/licenses/LICENSE-2.0
-**
-** Unless required by applicable law or agreed to in writing, software
-** distributed under the License is distributed on an "AS IS" BASIS,
-** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-** See the License for the specific language governing permissions and
-** limitations under the License.
-*/
--->
-
-<searchable xmlns:android="http://schemas.android.com/apk/res/android"
-    android:label="@string/engine_2_label"
-    android:voiceSearchMode="showVoiceSearchButton|launchWebSearch"
-    android:queryAfterZeroResults="true"
-    android:autoUrlDetect="true"
-
-    android:searchSuggestAuthority="com.android.websearch.Suggest"
-    android:searchSuggestSelection="field =?"
-    android:searchSuggestPath="2"
-    android:searchSuggestThreshold="3"
-    android:searchSuggestIntentAction="android.intent.action.WEB_SEARCH"
-/>
diff --git a/res/xml/searchable_3.xml b/res/xml/searchable_3.xml
deleted file mode 100644
index f6a8074..0000000
--- a/res/xml/searchable_3.xml
+++ /dev/null
@@ -1,31 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
-** Copyright 2009, The Android Open Source Project
-**
-** Licensed under the Apache License, Version 2.0 (the "License");
-** you may not use this file except in compliance with the License.
-** You may obtain a copy of the License at
-**
-**     http://www.apache.org/licenses/LICENSE-2.0
-**
-** Unless required by applicable law or agreed to in writing, software
-** distributed under the License is distributed on an "AS IS" BASIS,
-** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-** See the License for the specific language governing permissions and
-** limitations under the License.
-*/
--->
-
-<searchable xmlns:android="http://schemas.android.com/apk/res/android"
-    android:label="@string/engine_3_label"
-    android:voiceSearchMode="showVoiceSearchButton|launchWebSearch"
-    android:queryAfterZeroResults="true"
-    android:autoUrlDetect="true"
-
-    android:searchSuggestAuthority="com.android.websearch.Suggest"
-    android:searchSuggestSelection="field =?"
-    android:searchSuggestPath="3"
-    android:searchSuggestThreshold="3"
-    android:searchSuggestIntentAction="android.intent.action.WEB_SEARCH"
-/>
diff --git a/res/xml/searchable_4.xml b/res/xml/searchable_4.xml
deleted file mode 100644
index 640d679..0000000
--- a/res/xml/searchable_4.xml
+++ /dev/null
@@ -1,31 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
-** Copyright 2009, The Android Open Source Project
-**
-** Licensed under the Apache License, Version 2.0 (the "License");
-** you may not use this file except in compliance with the License.
-** You may obtain a copy of the License at
-**
-**     http://www.apache.org/licenses/LICENSE-2.0
-**
-** Unless required by applicable law or agreed to in writing, software
-** distributed under the License is distributed on an "AS IS" BASIS,
-** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-** See the License for the specific language governing permissions and
-** limitations under the License.
-*/
--->
-
-<searchable xmlns:android="http://schemas.android.com/apk/res/android"
-    android:label="@string/engine_4_label"
-    android:voiceSearchMode="showVoiceSearchButton|launchWebSearch"
-    android:queryAfterZeroResults="true"
-    android:autoUrlDetect="true"
-
-    android:searchSuggestAuthority="com.android.websearch.Suggest"
-    android:searchSuggestSelection="field =?"
-    android:searchSuggestPath="4"
-    android:searchSuggestThreshold="3"
-    android:searchSuggestIntentAction="android.intent.action.WEB_SEARCH"
-/>
diff --git a/res/xml/searchable_5.xml b/res/xml/searchable_5.xml
deleted file mode 100644
index 3c60b98..0000000
--- a/res/xml/searchable_5.xml
+++ /dev/null
@@ -1,31 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
-** Copyright 2009, The Android Open Source Project
-**
-** Licensed under the Apache License, Version 2.0 (the "License");
-** you may not use this file except in compliance with the License.
-** You may obtain a copy of the License at
-**
-**     http://www.apache.org/licenses/LICENSE-2.0
-**
-** Unless required by applicable law or agreed to in writing, software
-** distributed under the License is distributed on an "AS IS" BASIS,
-** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-** See the License for the specific language governing permissions and
-** limitations under the License.
-*/
--->
-
-<searchable xmlns:android="http://schemas.android.com/apk/res/android"
-    android:label="@string/engine_5_label"
-    android:voiceSearchMode="showVoiceSearchButton|launchWebSearch"
-    android:queryAfterZeroResults="true"
-    android:autoUrlDetect="true"
-
-    android:searchSuggestAuthority="com.android.websearch.Suggest"
-    android:searchSuggestSelection="field =?"
-    android:searchSuggestPath="5"
-    android:searchSuggestThreshold="3"
-    android:searchSuggestIntentAction="android.intent.action.WEB_SEARCH"
-/>
diff --git a/res/xml/searchable_6.xml b/res/xml/searchable_6.xml
deleted file mode 100644
index 1349d8f..0000000
--- a/res/xml/searchable_6.xml
+++ /dev/null
@@ -1,31 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
-** Copyright 2009, The Android Open Source Project
-**
-** Licensed under the Apache License, Version 2.0 (the "License");
-** you may not use this file except in compliance with the License.
-** You may obtain a copy of the License at
-**
-**     http://www.apache.org/licenses/LICENSE-2.0
-**
-** Unless required by applicable law or agreed to in writing, software
-** distributed under the License is distributed on an "AS IS" BASIS,
-** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-** See the License for the specific language governing permissions and
-** limitations under the License.
-*/
--->
-
-<searchable xmlns:android="http://schemas.android.com/apk/res/android"
-    android:label="@string/engine_6_label"
-    android:voiceSearchMode="showVoiceSearchButton|launchWebSearch"
-    android:queryAfterZeroResults="true"
-    android:autoUrlDetect="true"
-
-    android:searchSuggestAuthority="com.android.websearch.Suggest"
-    android:searchSuggestSelection="field =?"
-    android:searchSuggestPath="6"
-    android:searchSuggestThreshold="3"
-    android:searchSuggestIntentAction="android.intent.action.WEB_SEARCH"
-/>
diff --git a/res/xml/searchable_7.xml b/res/xml/searchable_7.xml
deleted file mode 100644
index aa763d8..0000000
--- a/res/xml/searchable_7.xml
+++ /dev/null
@@ -1,31 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
-** Copyright 2009, The Android Open Source Project
-**
-** Licensed under the Apache License, Version 2.0 (the "License");
-** you may not use this file except in compliance with the License.
-** You may obtain a copy of the License at
-**
-**     http://www.apache.org/licenses/LICENSE-2.0
-**
-** Unless required by applicable law or agreed to in writing, software
-** distributed under the License is distributed on an "AS IS" BASIS,
-** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-** See the License for the specific language governing permissions and
-** limitations under the License.
-*/
--->
-
-<searchable xmlns:android="http://schemas.android.com/apk/res/android"
-    android:label="@string/engine_7_label"
-    android:voiceSearchMode="showVoiceSearchButton|launchWebSearch"
-    android:queryAfterZeroResults="true"
-    android:autoUrlDetect="true"
-
-    android:searchSuggestAuthority="com.android.websearch.Suggest"
-    android:searchSuggestSelection="field =?"
-    android:searchSuggestPath="7"
-    android:searchSuggestThreshold="3"
-    android:searchSuggestIntentAction="android.intent.action.WEB_SEARCH"
-/>
diff --git a/src/com/android/websearch/SearchEngineInfo.java b/src/com/android/websearch/SearchEngineInfo.java
deleted file mode 100644
index 86015f0..0000000
--- a/src/com/android/websearch/SearchEngineInfo.java
+++ /dev/null
@@ -1,163 +0,0 @@
-/*
- * Copyright (C) 2009 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.websearch;
-
-import android.content.Context;
-import android.content.res.Resources;
-import android.text.TextUtils;
-import android.util.Log;
-
-import java.net.URLEncoder;
-import java.util.Locale;
-
-
-/**
- * Loads and holds data for a given web search engine.
- */
-public class SearchEngineInfo {
-    private static String LOG_TAG = "SearchEngineInfo";
-
-    // The fields of a search engine data array, defined in the same order as they appear in the
-    // all_search_engines.xml file.
-    // If you are adding/removing to this list, remember to update NUM_FIELDS below.
-    static final int FIELD_KEYWORD = 0;
-    static final int FIELD_FAVICON_URI = 1;
-    static final int FIELD_SEARCH_URI = 2;
-    static final int FIELD_ENCODING = 3;
-    static final int FIELD_SUGGEST_URI = 4;
-    static final int NUM_FIELDS = 5;
-
-    // The OpenSearch URI template parameters that we support.
-    private static final String PARAMETER_LANGUAGE = "{language}";
-    private static final String PARAMETER_SEARCH_TERMS = "{searchTerms}";
-    private static final String PARAMETER_INPUT_ENCODING = "{inputEncoding}";
-
-    // The array of strings defining this search engine. The array values are in the same order as
-    // the above enumeration definition.
-    private String[] mSearchEngineData = null;
-
-    private Context mContext = null;
-
-    /*
-     * @param index is the numerical value in the search engine name resource, starts from 1. This
-     * is typically obtained as the last word in the content URI path field or the intent class name
-     * field.
-     * @throws IllegalArgumentException If the index does not refer to a valid search engine
-     */
-    public SearchEngineInfo(Context context, String index) throws IllegalArgumentException {
-        mContext = context;
-        String resourceName = "engine_" + index + "_name";
-        Resources res = mContext.getResources();
-        int id_name = res.getIdentifier(resourceName, "string", mContext.getPackageName());
-        if (id_name == 0) {
-            throw new IllegalArgumentException("No such resource - " + resourceName);
-        }
-
-        String searchEngineName = res.getString(id_name);
-        int id_data = res.getIdentifier(searchEngineName, "array", mContext.getPackageName());
-        mSearchEngineData = res.getStringArray(id_data);
-
-        if (mSearchEngineData == null) {
-            throw new IllegalArgumentException("No data found for " + resourceName);
-        }
-        if (mSearchEngineData.length != NUM_FIELDS) {
-            throw new IllegalArgumentException(
-                    resourceName + " has invalid number of fields - " + mSearchEngineData.length);
-        }
-        if (TextUtils.isEmpty(mSearchEngineData[FIELD_SEARCH_URI])) {
-            throw new IllegalArgumentException(resourceName + " has an empty search URI");
-        }
-
-        // Add the current language/country information to the URIs.
-        Locale locale = mContext.getResources().getConfiguration().locale;
-        StringBuilder language = new StringBuilder(locale.getLanguage());
-        if (!TextUtils.isEmpty(locale.getCountry())) {
-            language.append('-');
-            language.append(locale.getCountry());
-        }
-
-        String language_str = language.toString();
-        mSearchEngineData[FIELD_SEARCH_URI] =
-            mSearchEngineData[FIELD_SEARCH_URI].replace(PARAMETER_LANGUAGE, language_str);
-        mSearchEngineData[FIELD_SUGGEST_URI] =
-            mSearchEngineData[FIELD_SUGGEST_URI].replace(PARAMETER_LANGUAGE, language_str);
-
-        // Default to UTF-8 if not specified.
-        String enc = mSearchEngineData[FIELD_ENCODING];
-        if (TextUtils.isEmpty(enc)) {
-            enc = "UTF-8";
-            mSearchEngineData[FIELD_ENCODING] = enc;
-        }
-
-        // Add the input encoding method to the URI.
-        mSearchEngineData[FIELD_SEARCH_URI] =
-            mSearchEngineData[FIELD_SEARCH_URI].replace(PARAMETER_INPUT_ENCODING, enc);
-        mSearchEngineData[FIELD_SUGGEST_URI] =
-            mSearchEngineData[FIELD_SUGGEST_URI].replace(PARAMETER_INPUT_ENCODING, enc);
-    }
-
-    /*
-     * Returns the URI for launching a web search with the given query (or null if there was no
-     * data available for this search engine).
-     */
-    public String getSearchUriForQuery(String query) {
-        return getFormattedUri(searchUri(), query);
-    }
-
-    /*
-     * Returns the URI for retrieving web search suggestions for the given query (or null if there
-     * was no data available for this search engine).
-     */
-    public String getSuggestUriForQuery(String query) {
-        return getFormattedUri(suggestUri(), query);
-    }
-
-    public boolean supportsSuggestions() {
-        return !TextUtils.isEmpty(suggestUri());
-    }
-
-    public String faviconUri() {
-        return mSearchEngineData[FIELD_FAVICON_URI];
-    }
-
-    private String suggestUri() {
-        return mSearchEngineData[FIELD_SUGGEST_URI];
-    }
-
-    private String searchUri() {
-        return mSearchEngineData[FIELD_SEARCH_URI];
-    }
-
-    /*
-     * Formats a launchable uri out of the template uri by replacing the template parameters with
-     * actual values.
-     */
-    private String getFormattedUri(String templateUri, String query) {
-        if (TextUtils.isEmpty(templateUri)) {
-            return null;
-        }
-
-        // Encode the query terms in the requested encoding (and fallback to UTF-8 if not).
-        String enc = mSearchEngineData[FIELD_ENCODING];
-        try {
-            return templateUri.replace(PARAMETER_SEARCH_TERMS, URLEncoder.encode(query, enc));
-        } catch (java.io.UnsupportedEncodingException e) {
-            Log.e(LOG_TAG, "Exception occured when encoding query " + query + " to " + enc);
-            return null;
-        }
-    }
-}
diff --git a/src/com/android/websearch/Settings.java b/src/com/android/websearch/Settings.java
deleted file mode 100644
index 0ce54e4..0000000
--- a/src/com/android/websearch/Settings.java
+++ /dev/null
@@ -1,134 +0,0 @@
-/*
- * Copyright (C) 2009 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.websearch;
-
-import android.content.ComponentName;
-import android.content.Intent;
-import android.content.pm.ActivityInfo;
-import android.content.pm.PackageManager;
-import android.os.Bundle;
-import android.preference.CheckBoxPreference;
-import android.preference.Preference;
-import android.preference.PreferenceActivity;
-import android.preference.Preference.OnPreferenceClickListener;
-import android.provider.Settings.SettingNotFoundException;
-import android.provider.Settings.System;
-import android.util.Log;
-
-/**
- * Activity for setting web search engine preferences.
- */
-public class Settings extends PreferenceActivity implements OnPreferenceClickListener {
-
-    private static final boolean DBG = false;
-    private static final String TAG = "WebSearchProvider";
-
-    private static final String SHOW_WEB_SUGGESTIONS_PREF = "show_web_suggestions";
-
-    private SearchEngineInfo mEngine;
-    private String mEngineLabel;
-
-    private CheckBoxPreference mShowWebSuggestionsPreference;
-
-    @Override
-    protected void onCreate(Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
-
-        Intent intent = getIntent();
-        if (DBG) Log.d(TAG, "onCreate(), intent=" + intent);
-        ComponentName component = WebSearch.componentNameFromUri(intent.getData());
-        mEngine = WebSearch.getSearchEngine(this, component);
-        if (mEngine == null) {
-            Log.e(TAG, "Unknown search engine " + intent.getData());
-            finish();
-            return;
-        }
-        mEngineLabel = getActivityLabel(component);
-        if (mEngineLabel == null) {
-            Log.w(TAG, "No label for search engine " + intent.getData());
-            finish();
-            return;
-        }
-
-        setTitle(getString(R.string.search_engine_settings, mEngineLabel));
-
-        addPreferencesFromResource(R.xml.preferences);
-
-        mShowWebSuggestionsPreference = (CheckBoxPreference) findPreference(
-                SHOW_WEB_SUGGESTIONS_PREF);
-        mShowWebSuggestionsPreference.setOnPreferenceClickListener(this);
-
-        updateShowWebSuggestionsPreference();
-    }
-
-    private String getActivityLabel(ComponentName component) {
-        if (component == null) return null;
-        try {
-            PackageManager pm = getPackageManager();
-            ActivityInfo activityInfo = pm.getActivityInfo(component, 0);
-            int labelRes = activityInfo.labelRes;
-            if (labelRes == 0) labelRes = activityInfo.applicationInfo.labelRes;
-            if (labelRes == 0) return null;
-            return getString(labelRes);
-        } catch (PackageManager.NameNotFoundException exception) {
-            Log.e(TAG, "Error loading web search source from activity "
-                    + component, exception);
-            return null;
-        }
-    }
-
-    public synchronized boolean onPreferenceClick(Preference preference) {
-        if (preference == mShowWebSuggestionsPreference) {
-            System.putInt(
-                    getContentResolver(),
-                    System.SHOW_WEB_SUGGESTIONS,
-                    mShowWebSuggestionsPreference.isChecked() ? 1 : 0);
-            return true;
-        }
-        return false;
-    }
-
-    /**
-     * Updates the "show web suggestions" preference from the value in system settings.
-     */
-    private void updateShowWebSuggestionsPreference() {
-        boolean enabled = mEngine.supportsSuggestions();
-        mShowWebSuggestionsPreference.setEnabled(enabled);
-        if (!enabled) {
-            String summary =
-                getString(R.string.show_web_suggestions_not_supported, mEngineLabel);
-            mShowWebSuggestionsPreference.setSummary(summary);
-            return;
-        }
-        String summaryOn =
-            getString(R.string.show_web_suggestions_summary_enabled, mEngineLabel);
-        String summaryOff =
-            getString(R.string.show_web_suggestions_summary_disabled, mEngineLabel);
-        mShowWebSuggestionsPreference.setSummaryOn(summaryOn);
-        mShowWebSuggestionsPreference.setSummaryOff(summaryOff);
-        int value;
-        try {
-            value = System.getInt(
-                    getContentResolver(), System.SHOW_WEB_SUGGESTIONS);
-        } catch (SettingNotFoundException e) {
-            // No setting found, create one.
-            System.putInt(getContentResolver(), System.SHOW_WEB_SUGGESTIONS, 1);
-            value = 1;
-        }
-        mShowWebSuggestionsPreference.setChecked(value == 1);
-    }
-}
diff --git a/src/com/android/websearch/SuggestionProvider.java b/src/com/android/websearch/SuggestionProvider.java
deleted file mode 100644
index edadc5b..0000000
--- a/src/com/android/websearch/SuggestionProvider.java
+++ /dev/null
@@ -1,299 +0,0 @@
-/*
- * Copyright (C) 2009 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.websearch;
-
-import com.android.internal.database.ArrayListCursor;
-import com.google.android.net.GoogleHttpClient;
-
-import org.apache.http.HttpResponse;
-import org.apache.http.client.HttpClient;
-import org.apache.http.client.methods.HttpPost;
-import org.apache.http.entity.StringEntity;
-import org.apache.http.params.HttpParams;
-import org.apache.http.util.EntityUtils;
-import org.json.JSONArray;
-import org.json.JSONException;
-
-import android.app.SearchManager;
-import android.content.ContentProvider;
-import android.content.ContentValues;
-import android.content.Context;
-import android.database.AbstractCursor;
-import android.database.Cursor;
-import android.net.ConnectivityManager;
-import android.net.NetworkInfo;
-import android.net.Uri;
-import android.text.TextUtils;
-import android.util.Log;
-
-import java.io.IOException;
-import java.io.UnsupportedEncodingException;
-import java.net.URLEncoder;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Locale;
-
-/**
- * Provides search suggestions, if any, for a given web search provider.
- */
-public class SuggestionProvider extends ContentProvider {
-    private static final String USER_AGENT = "Android/1.0";
-    private static final int HTTP_TIMEOUT_MS = 1000;
-
-    // TODO: this should be defined somewhere
-    private static final String HTTP_TIMEOUT = "http.connection-manager.timeout";
-
-    private static final String LOG_TAG = "WebSearch.SuggestionProvider";
-
-    // Indices of the columns in the below arrays.
-    private static final int COLUMN_INDEX_ID = 0;
-    private static final int COLUMN_INDEX_QUERY = 1;
-    private static final int COLUMN_INDEX_ICON = 2;
-    private static final int COLUMN_INDEX_TEXT_1 = 3;
-    private static final int COLUMN_INDEX_TEXT_2 = 4;
-
-    // The suggestion columns used. If you are adding a new entry to these arrays make sure to
-    // update the list of indices declared above.
-    private static final String[] COLUMNS = new String[] {
-        "_id",
-        SearchManager.SUGGEST_COLUMN_QUERY,
-        SearchManager.SUGGEST_COLUMN_ICON_1,
-        SearchManager.SUGGEST_COLUMN_TEXT_1,
-        SearchManager.SUGGEST_COLUMN_TEXT_2,
-    };
-
-    private static final String[] COLUMNS_WITHOUT_DESCRIPTION = new String[] {
-        "_id",
-        SearchManager.SUGGEST_COLUMN_QUERY,
-        SearchManager.SUGGEST_COLUMN_ICON_1,
-        SearchManager.SUGGEST_COLUMN_TEXT_1,
-    };
-
-    private HttpClient mHttpClient;
-
-    private final HashMap<String, SearchEngineInfo> mSearchEngines =
-        new HashMap<String, SearchEngineInfo>();
-
-    @Override
-    public boolean onCreate() {
-        mHttpClient = new GoogleHttpClient(getContext().getContentResolver(),
-                USER_AGENT, false /* not gzip capable */);
-        HttpParams params = mHttpClient.getParams();
-        params.setLongParameter(HTTP_TIMEOUT, HTTP_TIMEOUT_MS);
-
-        return true;
-    }
-
-    /**
-     * This will always return {@link SearchManager#SUGGEST_MIME_TYPE} as this
-     * provider is purely to provide suggestions.
-     */
-    @Override
-    public String getType(Uri uri) {
-        return SearchManager.SUGGEST_MIME_TYPE;
-    }
-
-    /**
-     * Queries for a given search term and returns a cursor containing
-     * suggestions ordered by best match.
-     */
-    @Override
-    public Cursor query(Uri uri, String[] projection, String selection,
-            String[] selectionArgs, String sortOrder) {
-        String query = selectionArgs[0];
-        if (TextUtils.isEmpty(query)) {
-            return null;
-        }
-        if (!isNetworkConnected()) {
-            Log.i(LOG_TAG, "Not connected to network.");
-            return null;
-        }
-
-        List<String> parts = uri.getPathSegments();
-        if (parts.size() < 2) {
-            Log.i(LOG_TAG, "Invalid URI " + uri.toString());
-            return null;
-        }
-
-        // Check if the specific search engine data is already loaded and if not load it now.
-        String engine_index = parts.get(parts.size() - 2);
-        SearchEngineInfo engine = null;
-        synchronized(this) {
-            engine = mSearchEngines.get(engine_index);
-            if (engine == null) {
-                try {
-                    engine = new SearchEngineInfo(getContext(), engine_index);
-                } catch (IllegalArgumentException exception) {
-                    Log.e(LOG_TAG, "Cannot load search engine index " + engine_index, exception);
-                    return null;
-                }
-                mSearchEngines.put(engine_index, engine);
-            }
-        }
-
-        String suggestUri = engine.getSuggestUriForQuery(query);
-        if (TextUtils.isEmpty(suggestUri)) {
-            // No suggest URI available for this engine
-            return null;
-        }
-
-        try {
-            HttpPost method = new HttpPost(suggestUri);
-            StringEntity content = new StringEntity("");
-            method.setEntity(content);
-            HttpResponse response = mHttpClient.execute(method);
-            if (response.getStatusLine().getStatusCode() == 200) {
-                /* The data format is a JSON array with items being regular strings or JSON arrays
-                 * themselves. We are interested in the second and third elements, both of which
-                 * should be JSON arrays. The second element/array contains the suggestions and the
-                 * third element contains the descriptions. Some search engines don't support
-                 * suggestion descriptions so the third element is optional.
-                 */
-                JSONArray results = new JSONArray(EntityUtils.toString(response.getEntity()));
-                JSONArray suggestions = results.getJSONArray(1);
-                JSONArray descriptions = null;
-                if (results.length() > 2) {
-                    descriptions = results.getJSONArray(2);
-                    // Some search engines given an empty array "[]" for descriptions instead of
-                    // not including it in the response.
-                    if (descriptions.length() == 0) {
-                        descriptions = null;
-                    }
-                }
-                return new SuggestionsCursor(suggestions, descriptions);
-            }
-        } catch (UnsupportedEncodingException e) {
-            Log.w(LOG_TAG, "Error", e);
-        } catch (IOException e) {
-            Log.w(LOG_TAG, "Error", e);
-        } catch (JSONException e) {
-            Log.w(LOG_TAG, "Error", e);
-        }
-        return null;
-    }
-
-    private boolean isNetworkConnected() {
-        NetworkInfo networkInfo = getActiveNetworkInfo();
-        return networkInfo != null && networkInfo.isConnected();
-    }
-
-    private NetworkInfo getActiveNetworkInfo() {
-        ConnectivityManager connectivity =
-                (ConnectivityManager) getContext().getSystemService(Context.CONNECTIVITY_SERVICE);
-        if (connectivity == null) {
-            return null;
-        }
-        return connectivity.getActiveNetworkInfo();
-    }
-
-    private static class SuggestionsCursor extends AbstractCursor {
-
-        /* Contains the actual suggestions */
-        final JSONArray mSuggestions;
-
-        /* This contains the popularity of each suggestion
-         * i.e. 165,000 results. It's not related to sorting.
-         */
-        final JSONArray mDescriptions;
-        public SuggestionsCursor(JSONArray suggestions, JSONArray descriptions) {
-            mSuggestions = suggestions;
-            mDescriptions = descriptions;
-        }
-
-        @Override
-        public int getCount() {
-            return mSuggestions.length();
-        }
-
-        @Override
-        public String[] getColumnNames() {
-            return (mDescriptions != null ? COLUMNS : COLUMNS_WITHOUT_DESCRIPTION);
-        }
-
-        @Override
-        public String getString(int column) {
-            if ((mPos != -1)) {
-                if ((column == COLUMN_INDEX_QUERY) || (column == COLUMN_INDEX_TEXT_1)) {
-                    try {
-                        return mSuggestions.getString(mPos);
-                    } catch (JSONException e) {
-                        Log.w(LOG_TAG, "Error", e);
-                    }
-                } else if (column == COLUMN_INDEX_TEXT_2) {
-                    try {
-                        return mDescriptions.getString(mPos);
-                    } catch (JSONException e) {
-                        Log.w(LOG_TAG, "Error", e);
-                    }
-                } else if (column == COLUMN_INDEX_ICON) {
-                    return String.valueOf(R.drawable.magnifying_glass);
-                }
-            }
-            return null;
-        }
-
-        @Override
-        public double getDouble(int column) {
-            throw new UnsupportedOperationException();
-        }
-
-        @Override
-        public float getFloat(int column) {
-            throw new UnsupportedOperationException();
-        }
-
-        @Override
-        public int getInt(int column) {
-            throw new UnsupportedOperationException();
-        }
-
-        @Override
-        public long getLong(int column) {
-            if (column == COLUMN_INDEX_ID) {
-                return mPos;        // use row# as the _Id
-            }
-            throw new UnsupportedOperationException();
-        }
-
-        @Override
-        public short getShort(int column) {
-            throw new UnsupportedOperationException();
-        }
-
-        @Override
-        public boolean isNull(int column) {
-            throw new UnsupportedOperationException();
-        }
-    }
-
-    @Override
-    public Uri insert(Uri uri, ContentValues values) {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public int update(Uri uri, ContentValues values, String selection,
-            String[] selectionArgs) {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public int delete(Uri uri, String selection, String[] selectionArgs) {
-        throw new UnsupportedOperationException();
-    }
-}
diff --git a/src/com/android/websearch/WebSearch.java b/src/com/android/websearch/WebSearch.java
deleted file mode 100644
index 1b39382..0000000
--- a/src/com/android/websearch/WebSearch.java
+++ /dev/null
@@ -1,121 +0,0 @@
-/*
- * Copyright (C) 2009 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.websearch;
-
-import android.app.Activity;
-import android.app.SearchManager;
-import android.content.ComponentName;
-import android.content.Context;
-import android.content.Intent;
-import android.net.Uri;
-import android.os.Bundle;
-import android.provider.Browser;
-import android.util.Log;
-
-/**
- * WebSearchProvider is a package that exposes a set of different web search providers for the
- * user to choose between which differ per locale. For those web search providers that have
- * support for search suggestions as the user types, this package also exposes those suggestions.
- * This package does not expose Google as a web search provider; that is done by the GoogleSearch
- * and EnhancedGoogleSearchProvider packages.
- * 
- * This class routes the web search intent action on web suggestion results to the browser and opens
- * up the appropriate search engine results page.
- */
-public class WebSearch extends Activity {
-    public static final String LOG_TAG = "WebSearch";
-
-    @Override
-    protected void onCreate(Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
-
-        Intent intent = getIntent();
-        if (intent == null) {
-            finish();
-            return;
-        }
-
-        String action = intent.getAction();
-        if (Intent.ACTION_WEB_SEARCH.equals(action) || Intent.ACTION_SEARCH.equals(action)) {
-            SearchEngineInfo engine = getSearchEngine(this, intent.getComponent());
-            if (engine != null) {                
-                // The browser can pass along an application id which it uses to figure out which
-                // window to place a new search into. So if this exists, we'll pass it back to
-                // the browser. Otherwise, add our own package name as the application id, so that
-                // the browser can organize all searches launched from this provider together.
-                String applicationId = intent.getStringExtra(Browser.EXTRA_APPLICATION_ID);
-                if (applicationId == null) {
-                    applicationId = getPackageName();
-                }
-                
-                // Format the URI to launch and open it in the browser.
-                String query = intent.getStringExtra(SearchManager.QUERY);
-                String launchUri = engine.getSearchUriForQuery(query);
-                if (launchUri == null) {
-                    Log.e(LOG_TAG, "Unable to get search URI for engine "
-                            + intent.getComponent());
-                } else {
-                    intent = new Intent(Intent.ACTION_VIEW, Uri.parse(launchUri));
-                    intent.putExtra(Browser.EXTRA_APPLICATION_ID, applicationId);
-                    startActivity(intent);
-                }
-            }
-        } else if (SearchManager.INTENT_ACTION_WEB_SEARCH_SETTINGS.equals(action)) {
-            Intent settingsIntent = new Intent(SearchManager.INTENT_ACTION_WEB_SEARCH_SETTINGS);
-            settingsIntent.setClass(this, Settings.class);
-            ComponentName component = intent.getComponent();
-            settingsIntent.setData(componentNameToUri(component));
-            startActivity(settingsIntent);
-        }
-        finish();
-    }
-
-    public static SearchEngineInfo getSearchEngine(Context context, ComponentName component) {
-        if (component == null) return null;
-        String[] parts = component.getClassName().split("\\.");
-        String engine_index = parts[parts.length - 1];
-        try {
-            return new SearchEngineInfo(context, engine_index);
-        } catch (IllegalArgumentException exception) {
-            Log.e(LOG_TAG, "Cannot load search engine index " + engine_index, exception);
-            return null;
-        }
-    }
-
-    // TODO: Maybe this should live in ComponentName?
-    public static Uri componentNameToUri(ComponentName component) {
-        if (component == null) return null;
-        return new Uri.Builder()
-                .scheme("package")
-                .authority(component.getPackageName())
-                .path(component.getClassName())
-                .query("")
-                .fragment("")
-                .build();
-    }
-
-    // TODO: Maybe this should live in ComponentName?
-    public static ComponentName componentNameFromUri(Uri activityUri) {
-        if (activityUri == null) return null;
-        String packageName = activityUri.getAuthority();
-        String className = activityUri.getLastPathSegment();
-        if (packageName == null || className == null) return null;
-        return new ComponentName(packageName, className);
-    }
-
-
-}
diff --git a/tools/get_search_engines.py b/tools/get_search_engines.py
deleted file mode 100755
index e3f594e..0000000
--- a/tools/get_search_engines.py
+++ /dev/null
@@ -1,265 +0,0 @@
-#!/usr/bin/python2.4
-# Copyright 2009 Google Inc.
-# All Rights Reserved.
-"""
-Creates the list of search engines for the given locale.
-
-The created list is placed in the res/values-<locale> directory. Also updates
-res/values/all_search_engines.xml if required with new data.
-
-Usage: get_search_engines.py <locale>
-       get_search_engines.py en-GB
-
-Copyright (c) 2009 Google Inc. All Rights Reserved
-"""
-
-__author__ = 'satish@google.com (Satish Sampath)'
-
-import os
-import re
-import sys
-import urllib
-from xml.dom import minidom
-
-
-class SearchEngineManager(object):
-  """Manages list of search engines and creates locale specific lists.
-
-  The main method useful for the caller is generateListForLocale(), which
-  creates a locale specific search_engines.xml file suitable for use by the
-  Android WebSearchProvider implementation.
-  """
-
-  def __init__(self):
-    """Inits SearchEngineManager with relevant search engine data.
-
-    The search engine data is downloaded from the Chrome source repository.
-    """
-    self.chrome_data = urllib.urlopen(
-        'http://src.chromium.org/viewvc/chrome/trunk/src/chrome/'
-        'browser/search_engines/template_url_prepopulate_data.cc').read()
-    if self.chrome_data.lower().find('repository not found') != -1:
-      print 'Unable to get Chrome source data for search engine list.\nExiting.'
-      sys.exit(2)
-
-    self.resdir = os.path.normpath(os.path.join(sys.path[0], '../res'))
-
-  def getXmlString(self, str):
-    """Returns an XML-safe string for the given string.
-
-    Given a string from the search engine data structure, convert it to a
-    string suitable to write to our XML data file by stripping away NULLs,
-    unwanted quotes, wide-string declarations (L"") and replacing C-style
-    unicode characters with XML equivalents.
-    """
-    str = str.strip()
-    if str.upper() == 'NULL':
-      return ''
-
-    if str.startswith('L"'):
-      str = str[2:]
-    if str.startswith('@') or str.startswith('?'):
-      str = '\\' + str
-
-    str = str.strip('"').replace('\\x', '&#x')
-    str = str.replace('&', '&amp;').replace('<', '&lt;').replace('>', '&gt;')
-    str = str.replace('"', '&quot;').replace('\'', '&apos;')
-
-    return str
-
-  def getEngineData(self, name):
-    """Returns an array of strings describing the specified search engine.
-
-    The returned strings are in the same order as in the Chrome source data file
-    except that the internal name of the search engine is inserted at the
-    beginning of the list.
-    """
-    # Find the first occurance of this search engine name in the form
-    # " <name> =" in the chrome data file.
-    re_exp = '\s' + name + '\s*='
-    search_obj = re.search(re_exp, self.chrome_data)
-    if not search_obj:
-      print ('Unable to find data for search engine ' + name +
-             '. Please check the chrome data file for format changes.')
-      return None
-
-    # Extract the struct declaration between the curly braces.
-    start_pos = self.chrome_data.find('{', search_obj.start()) + 1;
-    end_pos = self.chrome_data.find('};', start_pos);
-    engine_data_str = self.chrome_data[start_pos:end_pos]
-
-    # Remove c++ style '//' comments at the ends of each line
-    engine_data_lines = engine_data_str.split('\n')
-    engine_data_str = ""
-    for line in engine_data_lines:
-        start_pos = line.find(' // ')
-        if start_pos != -1:
-            line = line[:start_pos]
-        engine_data_str = engine_data_str + line + '\n'
-
-    # Join multiple line strings into a single string.
-    engine_data_str = re.sub('\"\s+\"', '', engine_data_str)
-    engine_data_str = re.sub('\"\s+L\"', '', engine_data_str)
-    engine_data_str = engine_data_str.replace('"L"', '')
-
-    engine_data = engine_data_str.split(',')
-    for i in range(len(engine_data)):
-      engine_data[i] = self.getXmlString(engine_data[i])
-
-    # If the last element was an empty string (due to an extra comma at the
-    # end), ignore it.
-    if not engine_data[len(engine_data) - 1]:
-      engine_data.pop()
-
-    # The current last element is the search engine ID which we don't use, so
-    # ignore that.
-    engine_data.pop()
-
-    engine_data.insert(0, name)
-
-    return engine_data
-
-  def getSearchEnginesForCountry(self, country):
-    """Returns the list of search engine names for the given country.
-
-    The data comes from the Chrome data file.
-    """
-    # The Chrome data file has an array defined with the name 'engines_XX'
-    # where XX = country.
-    pos = self.chrome_data.find('engines_' + country)
-    if pos == -1:
-      print ('Unable to find search engine data for country ' + country +
-             '. Using default values.')
-      country = 'default'
-      pos = self.chrome_data.find('engines_' + country)
-      if pos == -1:
-        print ('Unable to find default search engine data. Please check the'
-               ' Chrome data file for format changes.')
-        return
-
-    # Extract the text between the curly braces for this array declaration
-    engines_start = self.chrome_data.find('{', pos) + 1;
-    engines_end = self.chrome_data.find('}', engines_start);
-    engines_str = self.chrome_data[engines_start:engines_end]
-
-    # Remove embedded /**/ style comments, white spaces, address-of operators
-    # and the trailing comma if any.
-    engines_str = re.sub('\/\*.+\*\/', '', engines_str)
-    engines_str = re.sub('\s+', '', engines_str)
-    engines_str = engines_str.replace('&','')
-    engines_str = engines_str.rstrip(',')
-
-    # Split the array into it's elements and ignore the 'google' entry since we
-    # don't need it in the this search engine list.
-    engines = engines_str.split(',')
-    try:
-      engines.remove('google')
-    except ValueError:
-      pass
-
-    return engines
-
-  def addNewSearchEnginesToXml(self, engines):
-    """Adds new search engines to the all_search_engines.xml file.
-    """
-    file = open(os.path.join(self.resdir, 'values/all_search_engines.xml'))
-    all_engines = file.read()
-    file.close()
-
-    for engine_name in engines:
-      engine_data = self.getEngineData(engine_name)
-
-      # The known search engines are listed as xml nodes with the names as
-      # attributes in double quotes, so search for this search engine name in
-      # double quotes to check if it is already listed.
-      if all_engines.find('"' + engine_data[0] + '"') == -1:
-        print engine_data[1] + " added to all_search_engines.xml"
-
-        # Add a new listing containing the internal name and all other fields
-        # except the display label (which goes into the locale-specific
-        # search_engines.xml file).
-        lines = ['  <string-array name="%s">\n' % (engine_data[0])]
-        for i in range(2, len(engine_data)):
-          lines.append('    <item>%s</item>\n' % (engine_data[i]))
-        lines.append('  </string-array>\n')
-
-        # Add this new entry to the XML file at the end.
-        pos = all_engines.rfind('\n', 0, -2) + 1
-        all_engines = all_engines[0:pos] + ''.join(lines) + all_engines[pos:]
-
-    # Make sure what we have created is valid XML :) No need to check for errors
-    # as the script will terminate with an exception if the XML was malformed.
-    engines_dom = minidom.parseString(all_engines)
-
-    file = open(os.path.join(self.resdir, 'values/all_search_engines.xml'), 'w')
-    file.write(all_engines)
-    file.close()
-
-  def generateListForLocale(self, locale):
-    """Creates a new locale specific search_engines.xml file.
-
-    The new file contains search engines specific to that country. If required
-    this function updates all_search_engines.xml file with any new search
-    engine data necessary.
-    """
-    separator_pos = locale.find('-')
-    if separator_pos == -1:
-      print ('Locale must be of format <language>-<country>. For e.g.'
-             ' "es-US" or "en-GB"')
-      return
-
-    language = locale[0:separator_pos]
-    country = locale[separator_pos + 1:].upper()
-    dir_path = os.path.join(self.resdir, 'values-' + language + '-r' + country)
-    if os.path.exists(dir_path) and not os.path.isdir(dir_path):
-      print "File exists in output directory path " + dir_path + ". Please remove it and try again."
-      return
-
-    engines = self.getSearchEnginesForCountry(country)
-    self.addNewSearchEnginesToXml(engines)
-
-    # Create the locale specific search_engines.xml file. Each
-    # search_engines.xml file has a hardcoded list of 7 items. If there are less
-    # than 7 search engines for this country, the remaining items are marked as
-    # enabled=false.
-    text = []
-    for i in range(1, 8):
-      flag = 'false'
-      name = ''
-      label = ''
-      if i <= len(engines):
-        engine_data = self.getEngineData(engines[i - 1])
-        flag = 'true'
-        name = engine_data[0]
-        label = engine_data[1]
-
-      text.append('  <bool   name="engine_%d_enabled">%s</bool>\n' % (i, flag))
-      text.append('  <string name="engine_%d_name">%s</string>\n' % (i, name))
-      text.append('  <string name="engine_%d_label">%s</string>\n' % (i, label))
-
-    # Load the template file and insert the new contents before the last line.
-    template_text = open(
-        os.path.join(sys.path[0], 'search_engines.template.xml')).read()
-    pos = template_text.rfind('\n', 0, -2) + 1
-    contents = template_text[0:pos] + ''.join(text) + template_text[pos:]
-
-    # Make sure what we have created is valid XML :) No need to check for errors
-    # as the script will terminate with an exception if the XML was malformed.
-    engines_dom = minidom.parseString(contents)
-
-    if not os.path.exists(dir_path):
-      os.makedirs(dir_path)
-      print 'Created directory ' + dir_path
-    file_path = os.path.join(dir_path, 'search_engines.xml')
-    file = open(file_path, 'w')
-    file.write(contents)
-    file.close()
-    print 'Resource file ' + file_path + ' updated.'
-
-
-if __name__ == "__main__":
-  if len(sys.argv) < 2:
-    print __doc__
-    sys.exit(2)
-
-  SearchEngineManager().generateListForLocale(sys.argv[1])
diff --git a/tools/search_engines.template.xml b/tools/search_engines.template.xml
deleted file mode 100755
index 43d3155..0000000
--- a/tools/search_engines.template.xml
+++ /dev/null
@@ -1,27 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2009 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-<!--
-****
-**** THIS IS AN AUTOGENERATED FILE.
-**** PLEASE DO NOT EDIT IT MANUALLY WITHOUT REMOVING THIS NOTICE.
-****
-**** To regenerate this file, use:
-****       $ tools/get_search_engines.py $locale
-**** e.g.  $ tools/get_search_engines.py es-MX
-****
--->
-<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-</resources>
