Bug 892094 - Create "Search" page in settings. r=liuche

--HG--
rename : mobile/android/base/resources/xml/preferences_customize.xml => mobile/android/base/resources/xml-v11/preferences_customize.xml
rename : mobile/android/base/resources/xml/preferences_customize.xml => mobile/android/base/resources/xml/preferences_customize.xml.in
This commit is contained in:
Chris Kitching 2013-07-16 18:44:42 -07:00
Родитель 544b3a179f
Коммит 49bc5235e8
10 изменённых файлов: 182 добавлений и 13 удалений

Просмотреть файл

@ -234,6 +234,7 @@ FENNEC_JAVA_FILES = \
menu/MenuItemDefault.java \ menu/MenuItemDefault.java \
menu/MenuPanel.java \ menu/MenuPanel.java \
menu/MenuPopup.java \ menu/MenuPopup.java \
preferences/SearchPreferenceCategory.java \
widget/AboutHome.java \ widget/AboutHome.java \
widget/AboutHomeView.java \ widget/AboutHomeView.java \
widget/AboutHomeSection.java \ widget/AboutHomeSection.java \
@ -310,6 +311,7 @@ FENNEC_PP_JAVA_FILES = \
FENNEC_PP_XML_FILES = \ FENNEC_PP_XML_FILES = \
res/xml/preferences.xml \ res/xml/preferences.xml \
res/xml/preferences_customize.xml \
res/xml/searchable.xml \ res/xml/searchable.xml \
$(NULL) $(NULL)
@ -573,14 +575,15 @@ RES_VALUES_V14 = \
$(NULL) $(NULL)
RES_XML = \ RES_XML = \
res/xml/preferences_customize.xml \
res/xml/preferences_display.xml \ res/xml/preferences_display.xml \
res/xml/preferences_search.xml \
res/xml/preferences_privacy.xml \ res/xml/preferences_privacy.xml \
res/xml/preferences_vendor.xml \ res/xml/preferences_vendor.xml \
$(SYNC_RES_XML) \ $(SYNC_RES_XML) \
$(NULL) $(NULL)
RES_XML_V11 = \ RES_XML_V11 = \
res/xml-v11/preferences_customize.xml \
res/xml-v11/preference_headers.xml \ res/xml-v11/preference_headers.xml \
res/xml-v11/preferences_customize_tablet.xml \ res/xml-v11/preferences_customize_tablet.xml \
res/xml-v11/preferences.xml \ res/xml-v11/preferences.xml \

Просмотреть файл

@ -68,10 +68,12 @@
<!ENTITY settings "Settings"> <!ENTITY settings "Settings">
<!ENTITY settings_title "Settings"> <!ENTITY settings_title "Settings">
<!ENTITY pref_category_customize "Customize"> <!ENTITY pref_category_customize "Customize">
<!ENTITY pref_category_search "Search">
<!ENTITY pref_category_display "Display"> <!ENTITY pref_category_display "Display">
<!ENTITY pref_category_privacy_short "Privacy"> <!ENTITY pref_category_privacy_short "Privacy">
<!ENTITY pref_category_vendor "&vendorShortName;"> <!ENTITY pref_category_vendor "&vendorShortName;">
<!ENTITY pref_category_datareporting "Data choices"> <!ENTITY pref_category_datareporting "Data choices">
<!ENTITY pref_category_installed_search_engines "Installed search engines">
<!-- collected old strings - remove after determining final strings <!-- collected old strings - remove after determining final strings
as part of Bug 877791 --> as part of Bug 877791 -->

Просмотреть файл

@ -0,0 +1,89 @@
package org.mozilla.gecko.preferences;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.drawable.BitmapDrawable;
import android.os.Build;
import android.preference.Preference;
import android.preference.PreferenceCategory;
import android.util.AttributeSet;
import android.util.Log;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import org.mozilla.gecko.GeckoAppShell;
import org.mozilla.gecko.GeckoEvent;
import org.mozilla.gecko.R;
import org.mozilla.gecko.gfx.BitmapUtils;
import org.mozilla.gecko.util.GeckoEventListener;
public class SearchPreferenceCategory extends PreferenceCategory implements GeckoEventListener {
public static final String LOGTAG = "SearchPrefCategory";
private static int sIconSize;
public SearchPreferenceCategory(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
init();
}
public SearchPreferenceCategory(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
public SearchPreferenceCategory(Context context) {
super(context);
init();
}
private void init() {
sIconSize = getContext().getResources().getDimensionPixelSize(R.dimen.searchpreferences_icon_size);
}
@Override
protected void onAttachedToActivity() {
super.onAttachedToActivity();
// Request list of search engines from Gecko
GeckoAppShell.registerEventListener("SearchEngines:Data", this);
GeckoAppShell.sendEventToGecko(GeckoEvent.createBroadcastEvent("SearchEngines:Get", null));
}
@Override
public void handleMessage(String event, final JSONObject data) {
if (event.equals("SearchEngines:Data")) {
JSONArray engines;
try {
engines = data.getJSONArray("searchEngines");
} catch (JSONException e) {
Log.e(LOGTAG, "Unable to decode search engine data from Gecko.", e);
return;
}
// Create an element in this PreferenceCategory for each engine.
for (int i = 0; i < engines.length(); i++) {
try {
JSONObject engineJSON = engines.getJSONObject(i);
final String engineName = engineJSON.getString("name");
Preference engine = new Preference(getContext());
engine.setTitle(engineName);
engine.setKey(engineName);
// The setIcon feature is not available prior to API 11.
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
String iconURI = engineJSON.getString("iconURI");
Bitmap iconBitmap = BitmapUtils.getBitmapFromDataURI(iconURI);
Bitmap scaledIconBitmap = Bitmap.createScaledBitmap(iconBitmap, sIconSize, sIconSize, false);
BitmapDrawable drawable = new BitmapDrawable(scaledIconBitmap);
engine.setIcon(drawable);
}
addPreference(engine);
// TODO: Bug 892113 - Add event listener here for tapping on each element. Produce a dialog to provide options.
} catch (JSONException e) {
Log.e(LOGTAG, "JSONException parsing engine at index " + i, e);
}
}
}
}
}

Просмотреть файл

@ -61,6 +61,7 @@
<dimen name="prompt_service_min_list_item_height">48dp</dimen> <dimen name="prompt_service_min_list_item_height">48dp</dimen>
<dimen name="remote_tab_child_row_height">64dp</dimen> <dimen name="remote_tab_child_row_height">64dp</dimen>
<dimen name="remote_tab_group_row_height">26dp</dimen> <dimen name="remote_tab_group_row_height">26dp</dimen>
<dimen name="searchpreferences_icon_size">32dp</dimen>
<dimen name="tab_thumbnail_height">90dp</dimen> <dimen name="tab_thumbnail_height">90dp</dimen>
<dimen name="tab_thumbnail_width">160dp</dimen> <dimen name="tab_thumbnail_width">160dp</dimen>
<dimen name="tabs_counter_size">22sp</dimen> <dimen name="tabs_counter_size">22sp</dimen>

Просмотреть файл

@ -7,6 +7,12 @@
xmlns:gecko="http://schemas.android.com/apk/res-auto" xmlns:gecko="http://schemas.android.com/apk/res-auto"
android:enabled="false"> android:enabled="false">
<PreferenceScreen android:title="@string/pref_category_search"
android:fragment="org.mozilla.gecko.GeckoPreferenceFragment" >
<extra android:name="resource"
android:value="preferences_search"/>
</PreferenceScreen>
<org.mozilla.gecko.AndroidImportPreference <org.mozilla.gecko.AndroidImportPreference
android:key="android.not_a_preference.import_android" android:key="android.not_a_preference.import_android"
gecko:entries="@array/pref_import_android_entries" gecko:entries="@array/pref_import_android_entries"
@ -17,11 +23,6 @@
android:negativeButtonText="@string/button_cancel" android:negativeButtonText="@string/button_cancel"
android:persistent="false" /> android:persistent="false" />
<CheckBoxPreference android:key="browser.search.suggest.enabled"
android:title="@string/pref_search_suggestions"
android:defaultValue="true"
android:persistent="false" />
<CheckBoxPreference android:key="android.not_a_preference.restoreSession" <CheckBoxPreference android:key="android.not_a_preference.restoreSession"
android:title="@string/pref_restore_session" android:title="@string/pref_restore_session"
android:defaultValue="false" android:defaultValue="false"

Просмотреть файл

@ -14,6 +14,12 @@
<org.mozilla.gecko.SyncPreference android:title="@string/pref_sync" <org.mozilla.gecko.SyncPreference android:title="@string/pref_sync"
android:persistent="false" /> android:persistent="false" />
<PreferenceScreen android:title="@string/pref_category_search"
android:fragment="org.mozilla.gecko.GeckoPreferenceFragment" >
<extra android:name="resource"
android:value="preferences_search"/>
</PreferenceScreen>
<org.mozilla.gecko.AndroidImportPreference <org.mozilla.gecko.AndroidImportPreference
android:key="android.not_a_preference.import_android" android:key="android.not_a_preference.import_android"
gecko:entries="@array/pref_import_android_entries" gecko:entries="@array/pref_import_android_entries"
@ -24,10 +30,10 @@
android:negativeButtonText="@string/button_cancel" android:negativeButtonText="@string/button_cancel"
android:persistent="false" /> android:persistent="false" />
<CheckBoxPreference android:key="browser.search.suggest.enabled" <CheckBoxPreference android:key="android.not_a_preference.restoreSession"
android:title="@string/pref_search_suggestions" android:title="@string/pref_restore_session"
android:defaultValue="true" android:defaultValue="false"
android:persistent="false" /> android:persistent="true" />
<ListPreference android:key="app.update.autodownload" <ListPreference android:key="app.update.autodownload"
android:title="@string/pref_update_autodownload" android:title="@string/pref_update_autodownload"

Просмотреть файл

@ -0,0 +1,42 @@
#filter substitution
<?xml version="1.0" encoding="utf-8"?>
<!-- This Source Code Form is subject to the terms of the Mozilla Public
- License, v. 2.0. If a copy of the MPL was not distributed with this
- file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:gecko="http://schemas.android.com/apk/res-auto"
android:enabled="false">
<PreferenceScreen android:title="@string/pref_category_search" >
<intent android:action="android.intent.action.VIEW"
android:targetPackage="@ANDROID_PACKAGE_NAME@"
android:targetClass="org.mozilla.gecko.GeckoPreferences" >
<extra
android:name="resource"
android:value="preferences_search" />
</intent>
</PreferenceScreen>
<org.mozilla.gecko.AndroidImportPreference
android:key="android.not_a_preference.import_android"
gecko:entries="@array/pref_import_android_entries"
gecko:entryKeys="@array/pref_import_android_keys"
gecko:initialValues="@array/pref_import_android_values"
android:title="@string/pref_import_android"
android:positiveButtonText="@string/bookmarkhistory_button_import"
android:negativeButtonText="@string/button_cancel"
android:persistent="false" />
<CheckBoxPreference android:key="android.not_a_preference.restoreSession"
android:title="@string/pref_restore_session"
android:defaultValue="false"
android:persistent="true" />
<ListPreference android:key="app.update.autodownload"
android:title="@string/pref_update_autodownload"
android:entries="@array/pref_update_autodownload_entries"
android:entryValues="@array/pref_update_autodownload_values"
android:persistent="false" />
</PreferenceScreen>

Просмотреть файл

@ -0,0 +1,18 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- This Source Code Form is subject to the terms of the Mozilla Public
- License, v. 2.0. If a copy of the MPL was not distributed with this
- file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:gecko="http://schemas.android.com/apk/res-auto"
android:title="@string/pref_category_search"
android:enabled="false">
<CheckBoxPreference android:key="browser.search.suggest.enabled"
android:title="@string/pref_search_suggestions"
android:defaultValue="false"
android:persistent="false" />
<org.mozilla.gecko.preferences.SearchPreferenceCategory
android:title="@string/pref_category_installed_search_engines"/>
</PreferenceScreen>

Просмотреть файл

@ -80,10 +80,12 @@
<string name="settings">&settings;</string> <string name="settings">&settings;</string>
<string name="settings_title">&settings_title;</string> <string name="settings_title">&settings_title;</string>
<string name="pref_category_customize">&pref_category_customize;</string> <string name="pref_category_customize">&pref_category_customize;</string>
<string name="pref_category_search">&pref_category_search;</string>
<string name="pref_category_display">&pref_category_display;</string> <string name="pref_category_display">&pref_category_display;</string>
<string name="pref_category_privacy_short">&pref_category_privacy_short;</string> <string name="pref_category_privacy_short">&pref_category_privacy_short;</string>
<string name="pref_category_vendor">&pref_category_vendor;</string> <string name="pref_category_vendor">&pref_category_vendor;</string>
<string name="pref_category_datareporting">&pref_category_datareporting;</string> <string name="pref_category_datareporting">&pref_category_datareporting;</string>
<string name="pref_category_installed_search_engines">&pref_category_installed_search_engines;</string>
<string name="pref_header_customize">&pref_header_customize;</string> <string name="pref_header_customize">&pref_header_customize;</string>
<string name="pref_header_display">&pref_header_display;</string> <string name="pref_header_display">&pref_header_display;</string>

Просмотреть файл

@ -24,8 +24,9 @@ public class testSettingsMenuItems extends PixelTest {
// //
// This test assumes menu items are in order (scrolling down for off-screen items). // This test assumes menu items are in order (scrolling down for off-screen items).
String[][] OPTIONS_CUSTOMIZE = { String[][] OPTIONS_CUSTOMIZE = {
{ "Search", "", "Show search suggestions", "Installed search engines" },
{ "Import from Android", "", "Bookmarks", "History", "Import" }, { "Import from Android", "", "Bookmarks", "History", "Import" },
{ "Show search suggestions" }, { "Always restore tabs" },
{ "Automatic updates", "Only over Wi-Fi", "Enabled", "Only over Wi-Fi", "Disabled" }, { "Automatic updates", "Only over Wi-Fi", "Enabled", "Only over Wi-Fi", "Disabled" },
}; };
@ -163,8 +164,12 @@ public class testSettingsMenuItems extends PixelTest {
"The " + itemChoice + " choice is present in section " + section); "The " + itemChoice + " choice is present in section " + section);
} }
// Leave submenu after checking. // Leave submenu after checking.
waitForText("^Cancel$"); if (waitForText("^Cancel$")) {
mSolo.clickOnText("^Cancel$"); mSolo.clickOnText("^Cancel$");
} else {
// Some submenus aren't dialogs, but are nested screens; exit using "back".
mActions.sendSpecialKey(Actions.SpecialKey.BACK);
}
} }
} }
// Navigate back a screen if on a phone. // Navigate back a screen if on a phone.