Bug 942875 - Part 3: Add Home Panels Settings page + tests. r=lucasr

This commit is contained in:
Chenxia Liu 2013-12-16 20:37:16 -08:00
parent 54f3fed8b9
commit 76fa2c3974
14 changed files with 522 additions and 12 deletions

View File

@ -18,7 +18,7 @@ import java.util.ArrayList;
import java.util.EnumSet; import java.util.EnumSet;
import java.util.List; import java.util.List;
final class HomeConfig { public final class HomeConfig {
/** /**
* Used to determine what type of HomeFragment subclass to use when creating * Used to determine what type of HomeFragment subclass to use when creating
* a given panel. With the exception of DYNAMIC, all of these types correspond * a given panel. With the exception of DYNAMIC, all of these types correspond
@ -100,11 +100,14 @@ final class HomeConfig {
private static final String JSON_KEY_LAYOUT = "layout"; private static final String JSON_KEY_LAYOUT = "layout";
private static final String JSON_KEY_VIEWS = "views"; private static final String JSON_KEY_VIEWS = "views";
private static final String JSON_KEY_DEFAULT = "default"; private static final String JSON_KEY_DEFAULT = "default";
private static final String JSON_KEY_DISABLED = "disabled";
private static final int IS_DEFAULT = 1; private static final int IS_DEFAULT = 1;
private static final int IS_DISABLED = 1;
public enum Flags { public enum Flags {
DEFAULT_PANEL DEFAULT_PANEL,
DISABLED_PANEL
} }
public PanelConfig(JSONObject json) throws JSONException, IllegalArgumentException { public PanelConfig(JSONObject json) throws JSONException, IllegalArgumentException {
@ -140,6 +143,11 @@ final class HomeConfig {
mFlags.add(Flags.DEFAULT_PANEL); mFlags.add(Flags.DEFAULT_PANEL);
} }
final boolean isDisabled = (json.optInt(JSON_KEY_DISABLED, -1) == IS_DISABLED);
if (isDisabled) {
mFlags.add(Flags.DISABLED_PANEL);
}
validate(); validate();
} }
@ -158,6 +166,21 @@ final class HomeConfig {
validate(); validate();
} }
public PanelConfig(PanelConfig panelConfig) {
mType = panelConfig.mType;
mTitle = panelConfig.mTitle;
mId = panelConfig.mId;
mLayoutType = panelConfig.mLayoutType;
mViews = new ArrayList<ViewConfig>();
for (ViewConfig viewConfig : panelConfig.mViews) {
mViews.add(new ViewConfig(viewConfig));
}
mFlags = panelConfig.mFlags.clone();
validate();
}
public PanelConfig(PanelType type, String title, String id) { public PanelConfig(PanelType type, String title, String id) {
this(type, title, id, EnumSet.noneOf(Flags.class)); this(type, title, id, EnumSet.noneOf(Flags.class));
} }
@ -171,9 +194,9 @@ final class HomeConfig {
mType = type; mType = type;
mTitle = title; mTitle = title;
mId = id; mId = id;
mFlags = flags;
mLayoutType = layoutType; mLayoutType = layoutType;
mViews = views; mViews = views;
mFlags = flags;
validate(); validate();
} }
@ -232,6 +255,26 @@ final class HomeConfig {
return mFlags.contains(Flags.DEFAULT_PANEL); return mFlags.contains(Flags.DEFAULT_PANEL);
} }
public void setIsDefault(boolean isDefault) {
if (isDefault) {
mFlags.add(Flags.DEFAULT_PANEL);
} else {
mFlags.remove(Flags.DEFAULT_PANEL);
}
}
public boolean isDisabled() {
return mFlags.contains(Flags.DISABLED_PANEL);
}
public void setIsDisabled(boolean isDisabled) {
if (isDisabled) {
mFlags.add(Flags.DISABLED_PANEL);
} else {
mFlags.remove(Flags.DISABLED_PANEL);
}
}
public JSONObject toJSON() throws JSONException { public JSONObject toJSON() throws JSONException {
final JSONObject json = new JSONObject(); final JSONObject json = new JSONObject();
@ -260,6 +303,10 @@ final class HomeConfig {
json.put(JSON_KEY_DEFAULT, IS_DEFAULT); json.put(JSON_KEY_DEFAULT, IS_DEFAULT);
} }
if (mFlags.contains(Flags.DISABLED_PANEL)) {
json.put(JSON_KEY_DISABLED, IS_DISABLED);
}
return json; return json;
} }
@ -415,6 +462,13 @@ final class HomeConfig {
validate(); validate();
} }
public ViewConfig(ViewConfig viewConfig) {
mType = viewConfig.mType;
mDatasetId = viewConfig.mDatasetId;
validate();
}
public ViewConfig(ViewType type, String datasetId) { public ViewConfig(ViewType type, String datasetId) {
mType = type; mType = type;
mDatasetId = datasetId; mDatasetId = datasetId;

View File

@ -28,6 +28,7 @@ import android.view.MotionEvent;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.view.View; import android.view.View;
import java.util.ArrayList;
import java.util.EnumSet; import java.util.EnumSet;
import java.util.List; import java.util.List;
@ -296,14 +297,21 @@ public class HomePager extends ViewPager {
// in the pager. // in the pager.
setAdapter(null); setAdapter(null);
// Only keep enabled panels.
final List<PanelConfig> enabledPanels = new ArrayList<PanelConfig>();
for (PanelConfig panelConfig : panelConfigs) {
if (!panelConfig.isDisabled()) {
enabledPanels.add(panelConfig);
}
}
// Update the adapter with the new panel configs // Update the adapter with the new panel configs
adapter.update(panelConfigs); adapter.update(enabledPanels);
// Hide the tab strip if the new configuration contains // Hide the tab strip if the new configuration contains no panels.
// no panels for some reason. final int count = enabledPanels.size();
final int count = (panelConfigs != null ? panelConfigs.size() : 0);
mTabStrip.setVisibility(count > 0 ? View.VISIBLE : View.INVISIBLE); mTabStrip.setVisibility(count > 0 ? View.VISIBLE : View.INVISIBLE);
// Re-install the adapter with the final state // Re-install the adapter with the final state
// in the pager. // in the pager.
setAdapter(adapter); setAdapter(adapter);
@ -316,7 +324,7 @@ public class HomePager extends ViewPager {
mInitialPanelId = null; mInitialPanelId = null;
} else { } else {
for (int i = 0; i < count; i++) { for (int i = 0; i < count; i++) {
final PanelConfig panelConfig = panelConfigs.get(i); final PanelConfig panelConfig = enabledPanels.get(i);
if (panelConfig.isDefault()) { if (panelConfig.isDefault()) {
setCurrentItem(i, false); setCurrentItem(i, false);
break; break;

View File

@ -85,6 +85,9 @@
<!ENTITY pref_developer_remotedebugging_docs "Learn more"> <!ENTITY pref_developer_remotedebugging_docs "Learn more">
<!ENTITY pref_remember_signons "Remember passwords"> <!ENTITY pref_remember_signons "Remember passwords">
<!ENTITY pref_category_home "Home">
<!ENTITY pref_category_home_panels "Panels">
<!-- Localization note: These are shown in the left sidebar on tablets --> <!-- Localization note: These are shown in the left sidebar on tablets -->
<!ENTITY pref_header_customize "Customize"> <!ENTITY pref_header_customize "Customize">
<!ENTITY pref_header_display "Display"> <!ENTITY pref_header_display "Display">
@ -158,6 +161,9 @@ size. -->
<!ENTITY pref_search_last_toast "You can\'t remove or disable your last search engine."> <!ENTITY pref_search_last_toast "You can\'t remove or disable your last search engine.">
<!ENTITY pref_panels_show "Show">
<!ENTITY pref_panels_hide "Hide">
<!ENTITY datareporting_notification_title "&brandShortName; stats &amp; data"> <!ENTITY datareporting_notification_title "&brandShortName; stats &amp; data">
<!ENTITY datareporting_notification_action_long "Choose what information to share"> <!ENTITY datareporting_notification_action_long "Choose what information to share">
<!ENTITY datareporting_notification_action "Choose what to share"> <!ENTITY datareporting_notification_action "Choose what to share">

View File

@ -276,6 +276,8 @@ gbjar.sources += [
'preferences/GeckoPreferences.java', 'preferences/GeckoPreferences.java',
'preferences/LinkPreference.java', 'preferences/LinkPreference.java',
'preferences/MultiChoicePreference.java', 'preferences/MultiChoicePreference.java',
'preferences/PanelsPreference.java',
'preferences/PanelsPreferenceCategory.java',
'preferences/PrivateDataPreference.java', 'preferences/PrivateDataPreference.java',
'preferences/SearchEnginePreference.java', 'preferences/SearchEnginePreference.java',
'preferences/SearchPreferenceCategory.java', 'preferences/SearchPreferenceCategory.java',

View File

@ -34,7 +34,7 @@ public abstract class CustomListCategory extends PreferenceCategory {
* Set the default to some available list item. Used if the current default is removed or * Set the default to some available list item. Used if the current default is removed or
* disabled. * disabled.
*/ */
private void setFallbackDefault() { protected void setFallbackDefault() {
if (getPreferenceCount() > 0) { if (getPreferenceCount() > 0) {
CustomListPreference aItem = (CustomListPreference) getPreference(0); CustomListPreference aItem = (CustomListPreference) getPreference(0);
setDefault(aItem); setDefault(aItem);
@ -62,7 +62,10 @@ public abstract class CustomListCategory extends PreferenceCategory {
* @param item The intended new default. * @param item The intended new default.
*/ */
public void setDefault(CustomListPreference item) { public void setDefault(CustomListPreference item) {
mDefaultReference.setIsDefault(false); if (mDefaultReference != null) {
mDefaultReference.setIsDefault(false);
}
item.setIsDefault(true); item.setIsDefault(true);
mDefaultReference = item; mDefaultReference = item;
} }

View File

@ -0,0 +1,122 @@
/* 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/. */
package org.mozilla.gecko.preferences;
import android.content.Context;
import android.content.res.Resources;
import android.preference.Preference;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import org.mozilla.gecko.R;
public class PanelsPreference extends CustomListPreference {
protected String LOGTAG = "PanelsPreference";
private static final int INDEX_SHOW_BUTTON = 1;
private static final int INDEX_REMOVE_BUTTON = 2;
private final String LABEL_HIDE;
private final String LABEL_SHOW;
protected boolean mIsHidden = false;
public PanelsPreference(Context context, CustomListCategory parentCategory) {
super(context, parentCategory);
Resources res = getContext().getResources();
LABEL_HIDE = res.getString(R.string.pref_panels_hide);
LABEL_SHOW = res.getString(R.string.pref_panels_show);
}
@Override
protected int getPreferenceLayoutResource() {
return R.layout.preference_panels;
}
@Override
protected void onBindView(View view) {
super.onBindView(view);
// Override view handling so we can grey out "hidden" PanelPreferences.
view.setEnabled(!mIsHidden);
if (view instanceof ViewGroup) {
final ViewGroup group = (ViewGroup) view;
for (int i = 0; i < group.getChildCount(); i++) {
group.getChildAt(i).setEnabled(!mIsHidden);
}
}
}
@Override
protected String[] getDialogStrings() {
Resources res = getContext().getResources();
// XXX: Don't provide the "Remove" string for now, because we only support built-in
// panels, which can only be disabled.
return new String[] { LABEL_SET_AS_DEFAULT,
LABEL_HIDE };
}
@Override
public void setIsDefault(boolean isDefault) {
mIsDefault = isDefault;
if (isDefault) {
setSummary(LABEL_IS_DEFAULT);
if (mIsHidden) {
// Unhide the panel if it's being set as the default.
setHidden(false);
}
} else {
setSummary("");
}
}
@Override
protected void onDialogIndexClicked(int index) {
switch(index) {
case INDEX_SET_DEFAULT_BUTTON:
mParentCategory.setDefault(this);
break;
case INDEX_SHOW_BUTTON:
((PanelsPreferenceCategory) mParentCategory).setHidden(this, !mIsHidden);
break;
case INDEX_REMOVE_BUTTON:
mParentCategory.uninstall(this);
break;
default:
Log.w(LOGTAG, "Selected index out of range: " + index);
}
}
@Override
protected void configureShownDialog() {
super.configureShownDialog();
// Handle Show/Hide buttons.
final TextView hideButton = (TextView) mDialog.getListView().getChildAt(INDEX_SHOW_BUTTON);
hideButton.setText(mIsHidden ? LABEL_SHOW : LABEL_HIDE);
}
public void setHidden(boolean toHide) {
if (toHide) {
setIsDefault(false);
}
if (mIsHidden != toHide) {
mIsHidden = toHide;
notifyChanged();
}
}
public boolean isHidden() {
return mIsHidden;
}
}

View File

@ -0,0 +1,242 @@
/* 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/. */
package org.mozilla.gecko.preferences;
import android.content.Context;
import android.os.Bundle;
import android.preference.Preference;
import android.preference.PreferenceCategory;
import android.text.TextUtils;
import android.util.AttributeSet;
import android.util.Log;
import java.util.ArrayList;
import java.util.List;
import org.mozilla.gecko.home.HomeConfig;
import org.mozilla.gecko.home.HomeConfig.PanelConfig;
import org.mozilla.gecko.util.ThreadUtils;
import org.mozilla.gecko.util.UiAsyncTask;
public class PanelsPreferenceCategory extends CustomListCategory {
public static final String LOGTAG = "PanelsPrefCategory";
protected HomeConfig mHomeConfig;
protected final List<PanelConfig> mPanelConfigs = new ArrayList<PanelConfig>();
protected UiAsyncTask<Void, Void, List<PanelConfig>> mLoadTask;
protected UiAsyncTask<Void, Void, Void> mSaveTask;
public PanelsPreferenceCategory(Context context) {
super(context);
initConfig(context);
}
public PanelsPreferenceCategory(Context context, AttributeSet attrs) {
super(context, attrs);
initConfig(context);
}
public PanelsPreferenceCategory(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
initConfig(context);
}
protected void initConfig(Context context) {
mHomeConfig = HomeConfig.getDefault(context);
}
@Override
public void onAttachedToActivity() {
super.onAttachedToActivity();
loadHomeConfig();
}
/**
* Load the Home Panels config and populate the preferences screen and maintain local state.
*/
private void loadHomeConfig() {
mLoadTask = new UiAsyncTask<Void, Void, List<PanelConfig>>(ThreadUtils.getBackgroundHandler()) {
@Override
public List<PanelConfig> doInBackground(Void... params) {
return mHomeConfig.load();
}
@Override
public void onPostExecute(List<PanelConfig> panelConfigs) {
displayPanelConfig(panelConfigs);
}
};
mLoadTask.execute();
}
private void displayPanelConfig(List<PanelConfig> panelConfigs) {
for (PanelConfig panelConfig: panelConfigs) {
// Populate our local copy of the panels.
mPanelConfigs.add(panelConfig);
// Create and add the pref.
final PanelsPreference pref = new PanelsPreference(getContext(), PanelsPreferenceCategory.this);
pref.setTitle(panelConfig.getTitle());
pref.setKey(panelConfig.getId());
// XXX: Pull icon from PanelInfo.
addPreference(pref);
if (panelConfig.isDefault()) {
mDefaultReference = pref;
pref.setIsDefault(true);
}
if (panelConfig.isDisabled()) {
pref.setHidden(true);
}
}
}
/**
* Update HomeConfig off the main thread.
*
* @param panelConfigs Configuration to be saved
*/
private void saveHomeConfig() {
final List<PanelConfig> panelConfigs = makeConfigListDeepCopy();
mSaveTask = new UiAsyncTask<Void, Void, Void>(ThreadUtils.getBackgroundHandler()) {
@Override
public Void doInBackground(Void... params) {
mHomeConfig.save(panelConfigs);
return null;
}
};
mSaveTask.execute();
}
private List<PanelConfig> makeConfigListDeepCopy() {
List<PanelConfig> copiedList = new ArrayList<PanelConfig>();
for (PanelConfig panelConfig : mPanelConfigs) {
copiedList.add(new PanelConfig(panelConfig));
}
return copiedList;
}
@Override
public void setDefault(CustomListPreference pref) {
super.setDefault(pref);
updateConfigDefault();
saveHomeConfig();
}
@Override
protected void onPrepareForRemoval() {
if (mLoadTask != null) {
mLoadTask.cancel(true);
}
if (mSaveTask != null) {
mSaveTask.cancel(true);
}
}
/**
* Update the local HomeConfig default state from mDefaultReference.
*/
private void updateConfigDefault() {
String mId = null;
if (mDefaultReference != null) {
mId = mDefaultReference.getKey();
}
for (PanelConfig panelConfig : mPanelConfigs) {
if (TextUtils.equals(panelConfig.getId(), mId)) {
panelConfig.setIsDefault(true);
panelConfig.setIsDisabled(false);
} else {
panelConfig.setIsDefault(false);
}
}
}
@Override
public void uninstall(CustomListPreference pref) {
super.uninstall(pref);
// This could change the default, so update the local version of the config.
updateConfigDefault();
final String mId = pref.getKey();
PanelConfig toRemove = null;
for (PanelConfig panelConfig : mPanelConfigs) {
if (TextUtils.equals(panelConfig.getId(), mId)) {
toRemove = panelConfig;
break;
}
}
mPanelConfigs.remove(toRemove);
saveHomeConfig();
}
/**
* Update the hide/show state of the preference and save the HomeConfig
* changes.
*
* @param pref Preference to update
* @param toHide New hidden state of the preference
*/
protected void setHidden(PanelsPreference pref, boolean toHide) {
pref.setHidden(toHide);
ensureDefaultForHide(pref, toHide);
final String mId = pref.getKey();
for (PanelConfig panelConfig : mPanelConfigs) {
if (TextUtils.equals(panelConfig.getId(), mId)) {
panelConfig.setIsDisabled(toHide);
break;
}
}
saveHomeConfig();
}
/**
* Ensure a default is set (if possible) for hiding/showing a pref.
* If hiding, try to find an enabled pref to set as the default.
* If showing, set it as the default if there is no default currently.
*
* This updates the local HomeConfig state.
*
* @param pref Preference getting updated
* @param toHide Boolean of the new hidden state
*/
private void ensureDefaultForHide(PanelsPreference pref, boolean toHide) {
if (toHide) {
// Set a default if there is an enabled panel left.
if (pref == mDefaultReference) {
setFallbackDefault();
updateConfigDefault();
}
} else {
if (mDefaultReference == null) {
super.setDefault(pref);
updateConfigDefault();
}
}
}
/**
* When the default panel is removed or disabled, find an enabled panel
* if possible and set it as mDefaultReference.
*/
@Override
protected void setFallbackDefault() {
for (int i = 0; i < getPreferenceCount(); i++) {
final PanelsPreference pref = (PanelsPreference) getPreference(i);
if (!pref.isHidden()) {
super.setDefault(pref);
return;
}
}
mDefaultReference = null;
}
}

View File

@ -0,0 +1,29 @@
<?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/. -->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:minHeight="?android:attr/listPreferredItemHeight"
android:gravity="center_vertical"
android:orientation="vertical"
android:paddingLeft="15dp"
android:paddingRight="?android:attr/scrollbarSize">
<TextView android:id="@+android:id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceMedium"
android:singleLine="true"
android:ellipsize="marquee"
android:fadingEdge="horizontal" />
<TextView android:id="@+android:id/summary"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceSmall"
android:maxLines="2" />
</LinearLayout>

View File

@ -15,6 +15,13 @@
android:value="preferences_search"/> android:value="preferences_search"/>
</PreferenceScreen> </PreferenceScreen>
<PreferenceScreen android:title="@string/pref_category_home"
android:fragment="org.mozilla.gecko.preferences.GeckoPreferenceFragment" >
<extra android:name="resource"
android:value="preferences_home" />
</PreferenceScreen>
<org.mozilla.gecko.preferences.AndroidImportPreference <org.mozilla.gecko.preferences.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"

View File

@ -22,6 +22,12 @@
android:value="preferences_search"/> android:value="preferences_search"/>
</PreferenceScreen> </PreferenceScreen>
<PreferenceScreen android:title="@string/pref_category_home"
android:fragment="org.mozilla.gecko.preferences.GeckoPreferenceFragment" >
<extra android:name="resource"
android:value="preferences_home" />
</PreferenceScreen>
<org.mozilla.gecko.preferences.AndroidImportPreference <org.mozilla.gecko.preferences.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"

View File

@ -6,6 +6,7 @@
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
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" > <PreferenceScreen android:title="@string/pref_category_search" >
<intent android:action="android.intent.action.VIEW" <intent android:action="android.intent.action.VIEW"
android:targetPackage="@string/android_package_name" android:targetPackage="@string/android_package_name"
@ -16,6 +17,16 @@
</intent> </intent>
</PreferenceScreen> </PreferenceScreen>
<PreferenceScreen android:title="@string/pref_category_home" >
<intent android:action="android.intent.action.VIEW"
android:targetPackage="@string/android_package_name"
android:targetClass="org.mozilla.gecko.preferences.GeckoPreferences" >
<extra
android:name="resource"
android:value="preferences_home" />
</intent>
</PreferenceScreen>
<org.mozilla.gecko.preferences.AndroidImportPreference <org.mozilla.gecko.preferences.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"

View File

@ -0,0 +1,14 @@
<?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_home"
android:enabled="false">
<org.mozilla.gecko.preferences.PanelsPreferenceCategory
android:title="@string/pref_category_home_panels"/>
</PreferenceScreen>

View File

@ -108,6 +108,9 @@
<string name="pref_developer_remotedebugging">&pref_developer_remotedebugging;</string> <string name="pref_developer_remotedebugging">&pref_developer_remotedebugging;</string>
<string name="pref_developer_remotedebugging_docs">&pref_developer_remotedebugging_docs;</string> <string name="pref_developer_remotedebugging_docs">&pref_developer_remotedebugging_docs;</string>
<string name="pref_category_home">&pref_category_home;</string>
<string name="pref_category_home_panels">&pref_category_home_panels;</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>
<string name="pref_header_privacy_short">&pref_header_privacy_short;</string> <string name="pref_header_privacy_short">&pref_header_privacy_short;</string>
@ -173,9 +176,11 @@
<string name="pref_default">&pref_dialog_default;</string> <string name="pref_default">&pref_dialog_default;</string>
<string name="pref_dialog_remove">&pref_dialog_remove;</string> <string name="pref_dialog_remove">&pref_dialog_remove;</string>
<!-- Strings used in default search provider config preferences menu -->
<string name="pref_search_last_toast">&pref_search_last_toast;</string> <string name="pref_search_last_toast">&pref_search_last_toast;</string>
<string name="pref_panels_show">&pref_panels_show;</string>
<string name="pref_panels_hide">&pref_panels_hide;</string>
<string name="datareporting_notification_title">&datareporting_notification_title;</string> <string name="datareporting_notification_title">&datareporting_notification_title;</string>
<string name="datareporting_notification_action_long">&datareporting_notification_action_long;</string> <string name="datareporting_notification_action_long">&datareporting_notification_action_long;</string>
<string name="datareporting_notification_action">&datareporting_notification_action;</string> <string name="datareporting_notification_action">&datareporting_notification_action;</string>

View File

@ -32,6 +32,7 @@ public class testSettingsMenuItems extends PixelTest {
// Customize menu items. // Customize menu items.
String[][] OPTIONS_CUSTOMIZE = { String[][] OPTIONS_CUSTOMIZE = {
{ "Search settings", "", "Show search suggestions", "Installed search engines"}, { "Search settings", "", "Show search suggestions", "Installed search engines"},
{ "Home", "", "Panels" },
{ "Import from Android", "", "Bookmarks", "History", "Import" }, { "Import from Android", "", "Bookmarks", "History", "Import" },
{ "Tabs", "Don't restore after quitting " + BRAND_NAME, "Always restore", "Don't restore after quitting " + BRAND_NAME }, { "Tabs", "Don't restore after quitting " + BRAND_NAME, "Always restore", "Don't restore after quitting " + BRAND_NAME },
}; };