Bug 1234319 - Remove reading list button from main menu r=mcomella
MozReview-Commit-ID: AlvSssy8hLc
--- a/mobile/android/base/java/org/mozilla/gecko/BrowserApp.java
+++ b/mobile/android/base/java/org/mozilla/gecko/BrowserApp.java
@@ -172,17 +172,16 @@ public class BrowserApp extends GeckoApp
implements TabsPanel.TabsLayoutChangeListener,
PropertyAnimator.PropertyAnimationListener,
View.OnKeyListener,
LayerView.DynamicToolbarListener,
BrowserSearch.OnSearchListener,
BrowserSearch.OnEditSuggestionListener,
OnUrlOpenListener,
OnUrlOpenInBackgroundListener,
- ReadingListHelper.OnReadingListEventListener,
AnchoredPopup.OnVisibilityChangeListener,
ActionModeCompat.Presenter,
LayoutInflater.Factory {
private static final String LOGTAG = "GeckoBrowserApp";
private static final int TABS_ANIMATION_DURATION = 450;
public static final String GUEST_BROWSING_ARG = "--guest";
@@ -350,22 +349,16 @@ public class BrowserApp extends GeckoApp
tab.loadFavicon();
break;
case BOOKMARK_ADDED:
showBookmarkAddedSnackbar();
break;
case BOOKMARK_REMOVED:
showBookmarkRemovedSnackbar();
break;
- case READING_LIST_ADDED:
- onAddedToReadingList(tab.getURL());
- break;
- case READING_LIST_REMOVED:
- onRemovedFromReadingList(tab.getURL());
- break;
case UNSELECTED:
// We receive UNSELECTED immediately after the SELECTED listeners run
// so we are ensured that the unselectedTabEditingText has not changed.
if (tab.isEditing()) {
// Copy to avoid constructing new objects.
tab.getEditingState().copyFrom(mLastTabEditingState);
}
@@ -434,48 +427,16 @@ public class BrowserApp extends GeckoApp
getResources().getString(R.string.bookmark_options),
callback);
}
private void showBookmarkRemovedSnackbar() {
SnackbarHelper.showSnackbar(this, getResources().getString(R.string.bookmark_removed), Snackbar.LENGTH_LONG);
}
- private void showSwitchToReadingListSnackbar(String message) {
- final SnackbarHelper.SnackbarCallback callback = new SnackbarHelper.SnackbarCallback() {
- @Override
- public void onClick(View v) {
- Telemetry.sendUIEvent(TelemetryContract.Event.SHOW, TelemetryContract.Method.TOAST, "reading_list");
-
- final String aboutPageUrl = AboutPages.getURLForBuiltinPanelType(PanelType.READING_LIST);
- Tabs.getInstance().loadUrlInTab(aboutPageUrl);
- }
- };
-
- SnackbarHelper.showSnackbarWithAction(this,
- message,
- Snackbar.LENGTH_LONG,
- getResources().getString(R.string.switch_button_message),
- callback);
- }
-
- public void onAddedToReadingList(String url) {
- showSwitchToReadingListSnackbar(getResources().getString(R.string.reading_list_added));
- }
-
- public void onAlreadyInReadingList(String url) {
- showSwitchToReadingListSnackbar(getResources().getString(R.string.reading_list_duplicate));
- }
-
- public void onRemovedFromReadingList(String url) {
- SnackbarHelper.showSnackbar(this,
- getResources().getString(R.string.reading_list_removed),
- Snackbar.LENGTH_LONG);
- }
-
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
if (AndroidGamepadManager.handleKeyEvent(event)) {
return true;
}
// Global onKey handler. This is called if the focused UI doesn't
// handle the key event, and before Gecko swallows the events.
@@ -705,17 +666,17 @@ public class BrowserApp extends GeckoApp
// Init suggested sites engine in BrowserDB.
final SuggestedSites suggestedSites = new SuggestedSites(appContext, distribution);
final BrowserDB db = getProfile().getDB();
db.setSuggestedSites(suggestedSites);
JavaAddonManager.getInstance().init(appContext);
mSharedPreferencesHelper = new SharedPreferencesHelper(appContext);
mOrderedBroadcastHelper = new OrderedBroadcastHelper(appContext);
- mReadingListHelper = new ReadingListHelper(appContext, getProfile(), this);
+ mReadingListHelper = new ReadingListHelper(appContext, getProfile(), null);
mAccountsHelper = new AccountsHelper(appContext, getProfile());
final AdjustHelperInterface adjustHelper = AdjustConstants.getAdjustHelper();
adjustHelper.onCreate(this, AdjustConstants.MOZ_INSTALL_TRACKING_ADJUST_SDK_APP_TOKEN);
// Adjust stores enabled state so this is only necessary because users may have set
// their data preferences before this feature was implemented and we need to respect
// those before upload can occur in Adjust.onResume.
@@ -3153,17 +3114,16 @@ public class BrowserApp extends GeckoApp
if (!GeckoThread.isRunning()) {
aMenu.findItem(R.id.settings).setEnabled(false);
aMenu.findItem(R.id.help).setEnabled(false);
}
Tab tab = Tabs.getInstance().getSelectedTab();
// Unlike other menu items, the bookmark star is not tinted. See {@link ThemedImageButton#setTintedDrawable}.
final MenuItem bookmark = aMenu.findItem(R.id.bookmark);
- final MenuItem reader = aMenu.findItem(R.id.reading_list);
final MenuItem back = aMenu.findItem(R.id.back);
final MenuItem forward = aMenu.findItem(R.id.forward);
final MenuItem share = aMenu.findItem(R.id.share);
final MenuItem quickShare = aMenu.findItem(R.id.quickshare);
final MenuItem bookmarksList = aMenu.findItem(R.id.bookmarks_list);
final MenuItem historyList = aMenu.findItem(R.id.history_list);
final MenuItem saveAsPDF = aMenu.findItem(R.id.save_as_pdf);
final MenuItem print = aMenu.findItem(R.id.print);
@@ -3181,17 +3141,16 @@ public class BrowserApp extends GeckoApp
HardwareUtils.isTelevision() ||
!PrefUtils.getStringSet(GeckoSharedPrefs.forProfile(this),
ClearOnShutdownPref.PREF,
new HashSet<String>()).isEmpty();
aMenu.findItem(R.id.quit).setVisible(visible);
if (tab == null || tab.getURL() == null) {
bookmark.setEnabled(false);
- reader.setEnabled(false);
back.setEnabled(false);
forward.setEnabled(false);
share.setEnabled(false);
quickShare.setEnabled(false);
saveAsPDF.setEnabled(false);
print.setEnabled(false);
findInPage.setEnabled(false);
@@ -3205,33 +3164,24 @@ public class BrowserApp extends GeckoApp
MenuUtils.safeSetEnabled(aMenu, R.id.add_search_engine, false);
MenuUtils.safeSetEnabled(aMenu, R.id.add_to_launcher, false);
return true;
}
final boolean inGuestMode = GeckoProfile.get(this).inGuestMode();
- final boolean isAboutReader = AboutPages.isAboutReader(tab.getURL());
bookmark.setVisible(!inGuestMode);
bookmark.setCheckable(true);
bookmark.setChecked(tab.isBookmark());
bookmark.setTitle(resolveBookmarkTitleID(tab.isBookmark()));
- reader.setEnabled(isAboutReader || !AboutPages.isAboutPage(tab.getURL()));
- reader.setVisible(!inGuestMode);
- reader.setCheckable(true);
- final boolean isPageInReadingList = tab.isInReadingList();
- reader.setChecked(isPageInReadingList);
- reader.setTitle(resolveReadingListTitleID(isPageInReadingList));
-
if (Versions.feature11Plus) {
// We don't use icons on GB builds so not resolving icons might conserve resources.
bookmark.setIcon(resolveBookmarkIconID(tab.isBookmark()));
- reader.setIcon(resolveReadingListIconID(isPageInReadingList));
}
back.setEnabled(tab.canDoBack());
forward.setEnabled(tab.canDoForward());
desktopMode.setChecked(tab.getDesktopMode());
View backButtonView = MenuItemCompat.getActionView(back);
@@ -3400,24 +3350,16 @@ public class BrowserApp extends GeckoApp
return R.drawable.ic_menu_bookmark_add;
}
}
private int resolveBookmarkTitleID(final boolean isBookmark) {
return (isBookmark ? R.string.bookmark_remove : R.string.bookmark);
}
- private int resolveReadingListIconID(final boolean isInReadingList) {
- return (isInReadingList ? R.drawable.ic_menu_reader_remove : R.drawable.ic_menu_reader_add);
- }
-
- private int resolveReadingListTitleID(final boolean isInReadingList) {
- return (isInReadingList ? R.string.reading_list_remove : R.string.overlay_share_reading_list_btn_label);
- }
-
@Override
public boolean onOptionsItemSelected(MenuItem item) {
Tab tab = null;
Intent intent = null;
final int itemId = item.getItemId();
// Track the menu action. We don't know much about the context, but we can use this to determine
@@ -3450,40 +3392,16 @@ public class BrowserApp extends GeckoApp
// We don't use icons on GB builds so not resolving icons might conserve resources.
item.setIcon(resolveBookmarkIconID(true));
}
}
}
return true;
}
- if (itemId == R.id.reading_list) {
- tab = Tabs.getInstance().getSelectedTab();
- if (tab != null) {
- if (item.isChecked()) {
- Telemetry.sendUIEvent(TelemetryContract.Event.UNSAVE, TelemetryContract.Method.MENU, "reading_list");
- tab.removeFromReadingList();
- item.setTitle(resolveReadingListTitleID(false));
- if (Versions.feature11Plus) {
- // We don't use icons on GB builds so not resolving icons might conserve resources.
- item.setIcon(resolveReadingListIconID(false));
- }
- } else {
- Telemetry.sendUIEvent(TelemetryContract.Event.SAVE, TelemetryContract.Method.MENU, "reading_list");
- tab.addToReadingList();
- item.setTitle(resolveReadingListTitleID(true));
- if (Versions.feature11Plus) {
- // We don't use icons on GB builds so not resolving icons might conserve resources.
- item.setIcon(resolveReadingListIconID(true));
- }
- }
- }
- return true;
- }
-
if (itemId == R.id.share) {
tab = Tabs.getInstance().getSelectedTab();
if (tab != null) {
String url = tab.getURL();
if (url != null) {
if (AboutPages.isAboutReader(url)) {
url = ReaderModeUtils.getUrlFromAboutReader(url);
}
--- a/mobile/android/base/locales/en-US/android_strings.dtd
+++ b/mobile/android/base/locales/en-US/android_strings.dtd
@@ -123,19 +123,17 @@
in Android's intent chooser when sending a link to Firefox to bookmark,
send to another device, or add to Reading List. -->
<!ENTITY overlay_share_label "Add to &brandShortName;">
<!-- Localization note (overlay_share_bookmark_btn_label) : This string is
used in the share overlay menu to select an action. It is the verb
"to bookmark", not the noun "a bookmark". -->
<!ENTITY overlay_share_bookmark_btn_label "Bookmark">
-<!ENTITY overlay_share_reading_list_btn_label "Add to Reading List">
<!ENTITY overlay_share_bookmark_btn_label_already "Already bookmarked">
-<!ENTITY overlay_share_reading_list_btn_label_already "Already in Reading List">
<!ENTITY overlay_share_send_other "Send to other devices">
<!-- Localization note (overlay_share_send_tab_btn_label) : Used on the
share overlay menu to represent the "Send Tab" action when the user
either has not set up Sync, or has no other devices to send a tab
to. -->
<!ENTITY overlay_share_send_tab_btn_label "Send to another device">
<!ENTITY overlay_share_no_url "No link found in this share">
@@ -484,25 +482,16 @@ size. -->
<!ENTITY bookmark_edit_keyword "Keyword">
<!-- Localization note (site_settings_*) : These strings are used in the "Site Settings"
dialog that appears after selecting the "Edit Site Settings" context menu item. -->
<!ENTITY site_settings_title3 "Site Settings">
<!ENTITY site_settings_cancel "Cancel">
<!ENTITY site_settings_clear "Clear">
-<!-- Localization note (reading_list_added3) : Used in a toast, please keep as short
- as possible. -->
-<!ENTITY reading_list_added3 "Added to Reading List">
-<!ENTITY reading_list_removed "Page removed from your Reading List">
-<!-- Localization note (reading_list_remove) : Used to remove the currently open page from
- the user's reading list. The opposite of overlay_share_reading_list_btn_label. -->
-<!ENTITY reading_list_remove "Remove from Reading List">
-<!ENTITY reading_list_duplicate "Page already in your Reading List">
-
<!-- Localization note : These strings are used as alternate text for accessibility.
They are not visible in the UI. -->
<!ENTITY page_action_dropmarker_description "Additional Actions">
<!ENTITY masterpassword_create_title "Create Master Password">
<!ENTITY masterpassword_remove_title "Remove Master Password">
<!ENTITY masterpassword_password "Password">
<!ENTITY masterpassword_confirm "Confirm password">
deleted file mode 100644
--- a/mobile/android/base/resources/drawable-hdpi-v11/ic_menu_reader_add.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<?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/. -->
-
-<!-- Note: After removing all MDPI assets, the reader icons were being resolved
- incorrectly for MDPI-V11 devices because of the way we use dummy
- resources to cater for API 9 builds. To fix we renamed the HDPI-V11
- reader resources and point to them in the HDPI-V11 and MDPI-V11
- drawable folders. See Bug 1179758 for more info. -->
-
-<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
- android:src="@drawable/ic_menu_reader_add_asset" />
deleted file mode 100644
index bb4242271acdec96bc88e28c9127620f2466eaa1..0000000000000000000000000000000000000000
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
--- a/mobile/android/base/resources/drawable-hdpi-v11/ic_menu_reader_remove.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<?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/. -->
-
-<!-- Note: After removing all MDPI assets, the reader icons were being resolved
- incorrectly for MDPI-V11 devices because of the way we use dummy
- resources to cater for API 9 builds. To fix we renamed the HDPI-V11
- reader resources and point to them in the HDPI-V11 and MDPI-V11
- drawable folders. See Bug 1179758 for more info. -->
-
-<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
- android:src="@drawable/ic_menu_reader_remove_asset" />
deleted file mode 100644
index 73d9061317fbb769ee2666d68eb2d69aaf50a10b..0000000000000000000000000000000000000000
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
--- a/mobile/android/base/resources/drawable-mdpi-v11/ic_menu_reader_add.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<?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/. -->
-
-<!-- Note: After removing all MDPI assets, the reader icons were being resolved
- incorrectly for MDPI-V11 devices because of the way we use dummy
- resources to cater for API 9 builds. To fix we renamed the HDPI-V11
- reader resources and point to them in the HDPI-V11 and MDPI-V11
- drawable folders. See Bug 1179758 for more info. -->
-
-<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
- android:src="@drawable/ic_menu_reader_add_asset" />
deleted file mode 100644
--- a/mobile/android/base/resources/drawable-mdpi-v11/ic_menu_reader_remove.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<?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/. -->
-
-<!-- Note: After removing all MDPI assets, the reader icons were being resolved
- incorrectly for MDPI-V11 devices because of the way we use dummy
- resources to cater for API 9 builds. To fix we renamed the HDPI-V11
- reader resources and point to them in the HDPI-V11 and MDPI-V11
- drawable folders. See Bug 1179758 for more info. -->
-
-<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
- android:src="@drawable/ic_menu_reader_remove_asset" />
deleted file mode 100644
index 6f41f850a03de762a8d7677c3bc383b656e8e4e8..0000000000000000000000000000000000000000
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 868a881eb337ea7b2643f5e7bd85f0fee11c6c72..0000000000000000000000000000000000000000
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 9361ddfd1ec341530fd15345ffd151204383fc67..0000000000000000000000000000000000000000
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 41e370b35e27c49a235b64d9c487d516c5ab3e9c..0000000000000000000000000000000000000000
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
--- a/mobile/android/base/resources/drawable/ic_menu_reader_add.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<?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/. -->
-
-<shape xmlns:android="http://schemas.android.com/apk/res/android"
- android:shape="rectangle">
-
- <solid android:color="@android:color/transparent"/>
-
-</shape>
deleted file mode 100644
--- a/mobile/android/base/resources/drawable/ic_menu_reader_remove.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<?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/. -->
-
-<shape xmlns:android="http://schemas.android.com/apk/res/android"
- android:shape="rectangle">
-
- <solid android:color="@android:color/transparent"/>
-
-</shape>
--- a/mobile/android/base/resources/menu-large-v11/browser_app_menu.xml
+++ b/mobile/android/base/resources/menu-large-v11/browser_app_menu.xml
@@ -24,21 +24,16 @@
android:title="@string/forward"
android:visible="false"/>
<item android:id="@+id/bookmark"
android:icon="@drawable/ic_menu_bookmark_add"
android:title="@string/bookmark"
android:showAsAction="ifRoom"/>
- <item android:id="@+id/reading_list"
- android:icon="@drawable/ic_menu_reader_add"
- android:title="@string/overlay_share_reading_list_btn_label"
- android:showAsAction="ifRoom"/>
-
<item android:id="@+id/share"
android:icon="@drawable/ic_menu_share"
android:title="@string/share"
android:showAsAction="ifRoom"/>
<!-- We only show the quick share items so no need for an icon or title.
The visibility is changed dynamically for v14+ - hide for previous versions. -->
--- a/mobile/android/base/resources/menu-v11/browser_app_menu.xml
+++ b/mobile/android/base/resources/menu-v11/browser_app_menu.xml
@@ -24,21 +24,16 @@
android:title="@string/reload"
android:showAsAction="always"/>
<item android:id="@+id/bookmark"
android:icon="@drawable/ic_menu_bookmark_add"
android:title="@string/bookmark"
android:showAsAction="ifRoom"/>
- <item android:id="@+id/reading_list"
- android:icon="@drawable/ic_menu_reader_add"
- android:title="@string/overlay_share_reading_list_btn_label"
- android:showAsAction="ifRoom"/>
-
<item android:id="@+id/share"
android:icon="@drawable/ic_menu_share"
android:title="@string/share"
android:showAsAction="ifRoom"/>
<!-- We only show the quick share items so no need for an icon or title.
The visibility is changed dynamically for v14+ - hide for previous versions. -->
--- a/mobile/android/base/resources/menu-xlarge-v11/browser_app_menu.xml
+++ b/mobile/android/base/resources/menu-xlarge-v11/browser_app_menu.xml
@@ -24,21 +24,16 @@
android:title="@string/forward"
android:visible="false"/>
<item android:id="@+id/bookmark"
android:icon="@drawable/ic_menu_bookmark_add"
android:title="@string/bookmark"
android:showAsAction="always"/>
- <item android:id="@+id/reading_list"
- android:icon="@drawable/ic_menu_reader_add"
- android:title="@string/overlay_share_reading_list_btn_label"
- android:showAsAction="ifRoom"/>
-
<item android:id="@+id/share"
android:icon="@drawable/ic_menu_share"
android:title="@string/share"
android:showAsAction="ifRoom"/>
<!-- We only show the quick share items so no need for an icon or title.
The visibility is changed dynamically for v14+ - hide for previous versions. -->
--- a/mobile/android/base/resources/menu/browser_app_menu.xml
+++ b/mobile/android/base/resources/menu/browser_app_menu.xml
@@ -24,19 +24,16 @@
android:title="@string/new_tab"/>
<item android:id="@+id/new_private_tab"
android:title="@string/new_private_tab"/>
<item android:id="@+id/share"
android:title="@string/share" />
- <item android:id="@+id/reading_list"
- android:title="@string/overlay_share_reading_list_btn_label" />
-
<item android:id="@+id/find_in_page"
android:title="@string/find_in_page" />
<item android:id="@+id/desktop_mode"
android:title="@string/desktop_mode"
android:checkable="true" />
<item android:id="@+id/bookmarks_list"
--- a/mobile/android/base/strings.xml.in
+++ b/mobile/android/base/strings.xml.in
@@ -122,19 +122,17 @@
<string name="media_sending_to">&media_sending_to;</string>
<string name="media_play">&media_play;</string>
<string name="media_pause">&media_pause;</string>
<string name="media_stop">&media_stop;</string>
<string name="overlay_share_send_other">&overlay_share_send_other;</string>
<string name="overlay_share_label">&overlay_share_label;</string>
<string name="overlay_share_bookmark_btn_label">&overlay_share_bookmark_btn_label;</string>
- <string name="overlay_share_reading_list_btn_label">&overlay_share_reading_list_btn_label;</string>
<string name="overlay_share_bookmark_btn_label_already">&overlay_share_bookmark_btn_label_already;</string>
- <string name="overlay_share_reading_list_btn_label_already">&overlay_share_reading_list_btn_label_already;</string>
<string name="overlay_share_send_tab_btn_label">&overlay_share_send_tab_btn_label;</string>
<string name="overlay_share_no_url">&overlay_share_no_url;</string>
<string name="overlay_share_select_device">&overlay_share_select_device;</string>
<string name="overlay_no_synced_devices">&overlay_no_synced_devices;</string>
<string name="settings">&settings;</string>
<string name="settings_title">&settings_title;</string>
<string name="pref_category_general">&pref_category_general;</string>
@@ -354,21 +352,16 @@
<string name="tabs_normal">&tabs_normal;</string>
<string name="tabs_private">&tabs_private;</string>
<string name="edit_mode_cancel">&edit_mode_cancel;</string>
<string name="site_settings_title">&site_settings_title3;</string>
<string name="site_settings_cancel">&site_settings_cancel;</string>
<string name="site_settings_clear">&site_settings_clear;</string>
- <string name="reading_list_added">&reading_list_added3;</string>
- <string name="reading_list_removed">&reading_list_removed;</string>
- <string name="reading_list_remove">&reading_list_remove;</string>
- <string name="reading_list_duplicate">&reading_list_duplicate;</string>
-
<string name="reading_list_migration_title">&reading_list_migration_title;</string>
<string name="reading_list_migration_subtext">&reading_list_migration_subtext;</string>
<string name="reading_list_migration_goto_bookmarks">&reading_list_migration_goto_bookmarks;</string>
<string name="page_action_dropmarker_description">&page_action_dropmarker_description;</string>
<string name="contextmenu_open_new_tab">&contextmenu_open_new_tab;</string>
<string name="contextmenu_open_private_tab">&contextmenu_open_private_tab;</string>