Bug 958517 - Create a 'Page' menu and move some of the URL context menu actions there r=lucasr

This commit is contained in:
Mark Finkle 2014-02-07 14:49:32 -05:00
parent 394ed67dc4
commit 2ba8b9636c
10 changed files with 159 additions and 7 deletions

View File

@ -34,6 +34,7 @@ import org.mozilla.gecko.util.Clipboard;
import org.mozilla.gecko.util.EventDispatcher;
import org.mozilla.gecko.util.GamepadUtils;
import org.mozilla.gecko.util.HardwareUtils;
import org.mozilla.gecko.util.MenuUtils;
import org.mozilla.gecko.util.StringUtils;
import org.mozilla.gecko.util.ThreadUtils;
import org.mozilla.gecko.util.UiAsyncTask;
@ -2132,6 +2133,15 @@ abstract public class BrowserApp extends GeckoApp
share.setEnabled(false);
saveAsPDF.setEnabled(false);
findInPage.setEnabled(false);
// NOTE: Use MenuUtils.safeSetEnabled because some actions might
// be on the BrowserToolbar context menu
MenuUtils.safeSetEnabled(aMenu, R.id.page, false);
MenuUtils.safeSetEnabled(aMenu, R.id.subscribe, false);
MenuUtils.safeSetEnabled(aMenu, R.id.add_search_engine, false);
MenuUtils.safeSetEnabled(aMenu, R.id.site_settings, false);
MenuUtils.safeSetEnabled(aMenu, R.id.add_to_launcher, false);
return true;
}
@ -2159,6 +2169,14 @@ abstract public class BrowserApp extends GeckoApp
share.setEnabled(!(scheme.equals("about") || scheme.equals("chrome") ||
scheme.equals("file") || scheme.equals("resource")));
// NOTE: Use MenuUtils.safeSetEnabled because some actions might
// be on the BrowserToolbar context menu
MenuUtils.safeSetEnabled(aMenu, R.id.page, !isAboutHome(tab));
MenuUtils.safeSetEnabled(aMenu, R.id.subscribe, tab.hasFeeds());
MenuUtils.safeSetEnabled(aMenu, R.id.add_search_engine, tab.hasOpenSearch());
MenuUtils.safeSetEnabled(aMenu, R.id.site_settings, !isAboutHome(tab));
MenuUtils.safeSetEnabled(aMenu, R.id.add_to_launcher, !isAboutHome(tab));
// Action providers are available only ICS+.
if (Build.VERSION.SDK_INT >= 14) {
GeckoActionProvider provider = (GeckoActionProvider) share.getActionProvider();
@ -2355,6 +2373,13 @@ abstract public class BrowserApp extends GeckoApp
return true;
}
// We have a few menu items that can also be in the context menu. If
// we have not already handled the item, give the context menu handler
// a chance.
if (onContextItemSelected(item)) {
return true;
}
return super.onOptionsItemSelected(item);
}

View File

@ -210,6 +210,7 @@ size. -->
<!ENTITY save_as_pdf "Save as PDF">
<!ENTITY find_in_page "Find in Page">
<!ENTITY desktop_mode "Request Desktop Site">
<!ENTITY page "Page">
<!ENTITY tools "Tools">
<!ENTITY new_tab "New Tab">
<!ENTITY new_private_tab "New Private Tab">

View File

@ -52,6 +52,7 @@ gujar.sources += [
'util/INIParser.java',
'util/INISection.java',
'util/JSONUtils.java',
'util/MenuUtils.java',
'util/NonEvictingLruCache.java',
'util/ProxySelector.java',
'util/StringUtils.java',

View File

@ -47,6 +47,28 @@
android:title="@string/desktop_mode"
android:checkable="true" />
<item android:id="@+id/page"
android:title="@string/page"
android:icon="@drawable/ic_menu_tools">
<menu>
<item android:id="@+id/subscribe"
android:title="@string/contextmenu_subscribe"/>
<item android:id="@+id/add_search_engine"
android:title="@string/contextmenu_add_search_engine"/>
<item android:id="@+id/site_settings"
android:title="@string/contextmenu_site_settings" />
<item android:id="@+id/add_to_launcher"
android:title="@string/contextmenu_add_to_launcher"/>
</menu>
</item>
<item android:id="@+id/tools"
android:title="@string/tools"
android:icon="@drawable/ic_menu_tools">

View File

@ -47,6 +47,28 @@
android:title="@string/desktop_mode"
android:checkable="true" />
<item android:id="@+id/page"
android:title="@string/page"
android:icon="@drawable/ic_menu_tools">
<menu>
<item android:id="@+id/subscribe"
android:title="@string/contextmenu_subscribe"/>
<item android:id="@+id/add_search_engine"
android:title="@string/contextmenu_add_search_engine"/>
<item android:id="@+id/site_settings"
android:title="@string/contextmenu_site_settings" />
<item android:id="@+id/add_to_launcher"
android:title="@string/contextmenu_add_to_launcher"/>
</menu>
</item>
<item android:id="@+id/tools"
android:title="@string/tools"
android:icon="@drawable/ic_menu_tools">

View File

@ -0,0 +1,20 @@
<?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/. -->
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/pasteandgo"
android:title="@string/contextmenu_pasteandgo"/>
<item android:id="@+id/paste"
android:title="@string/contextmenu_paste"/>
<item android:id="@+id/copyurl"
android:title="@string/contextmenu_copyurl"/>
<item android:id="@+id/add_to_launcher"
android:title="@string/contextmenu_add_to_launcher"/>
</menu>

View File

@ -47,6 +47,29 @@
android:title="@string/desktop_mode"
android:checkable="true" />
<item android:id="@+id/page"
android:title="@string/page"
android:icon="@drawable/ic_menu_tools">
<menu>
<item android:id="@+id/subscribe"
android:title="@string/contextmenu_subscribe"/>
<item android:id="@+id/add_search_engine"
android:title="@string/contextmenu_add_search_engine"/>
<item android:id="@+id/site_settings"
android:title="@string/contextmenu_site_settings" />
<item android:id="@+id/add_to_launcher"
android:title="@string/contextmenu_add_to_launcher"/>
</menu>
</item>
<item android:id="@+id/tools"
android:title="@string/tools"
android:icon="@drawable/ic_menu_tools">

View File

@ -77,6 +77,7 @@
<string name="save_as_pdf">&save_as_pdf;</string>
<string name="find_in_page">&find_in_page;</string>
<string name="desktop_mode">&desktop_mode;</string>
<string name="page">&page;</string>
<string name="tools">&tools;</string>
<string name="find_text">&find_text;</string>

View File

@ -24,6 +24,7 @@ import org.mozilla.gecko.toolbar.ToolbarDisplayLayout.OnTitleChangeListener;
import org.mozilla.gecko.toolbar.ToolbarDisplayLayout.UpdateFlags;
import org.mozilla.gecko.util.Clipboard;
import org.mozilla.gecko.util.HardwareUtils;
import org.mozilla.gecko.util.MenuUtils;
import org.mozilla.gecko.util.ThreadUtils;
import org.mozilla.gecko.util.GeckoEventListener;
import org.mozilla.gecko.widget.GeckoImageButton;
@ -249,6 +250,9 @@ public class BrowserToolbar extends GeckoRelativeLayout
return;
}
// NOTE: Use MenuUtils.safeSetVisible because some actions might
// be on the Page menu
MenuInflater inflater = mActivity.getMenuInflater();
inflater.inflate(R.menu.titlebar_contextmenu, menu);
@ -263,22 +267,22 @@ public class BrowserToolbar extends GeckoRelativeLayout
String url = tab.getURL();
if (url == null) {
menu.findItem(R.id.copyurl).setVisible(false);
menu.findItem(R.id.share).setVisible(false);
menu.findItem(R.id.add_to_launcher).setVisible(false);
MenuUtils.safeSetVisible(menu, R.id.share, false);
}
menu.findItem(R.id.subscribe).setVisible(tab.hasFeeds());
menu.findItem(R.id.add_search_engine).setVisible(tab.hasOpenSearch());
MenuUtils.safeSetVisible(menu, R.id.subscribe, tab.hasFeeds());
MenuUtils.safeSetVisible(menu, R.id.add_search_engine, tab.hasOpenSearch());
} else {
// if there is no tab, remove anything tab dependent
menu.findItem(R.id.copyurl).setVisible(false);
menu.findItem(R.id.share).setVisible(false);
menu.findItem(R.id.add_to_launcher).setVisible(false);
menu.findItem(R.id.subscribe).setVisible(false);
menu.findItem(R.id.add_search_engine).setVisible(false);
MenuUtils.safeSetVisible(menu, R.id.share, false);
MenuUtils.safeSetVisible(menu, R.id.subscribe, false);
MenuUtils.safeSetVisible(menu, R.id.add_search_engine, false);
}
menu.findItem(R.id.share).setVisible(!GeckoProfile.get(getContext()).inGuestMode());
MenuUtils.safeSetVisible(menu, R.id.share, !GeckoProfile.get(getContext()).inGuestMode());
}
});

View File

@ -0,0 +1,33 @@
/* -*- Mode: Java; c-basic-offset: 4; tab-width: 20; indent-tabs-mode: nil; -*-
* 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.util;
import android.view.Menu;
import android.view.MenuItem;
public class MenuUtils {
/*
* This method looks for a menuitem and sets it's visible state, if
* it exists.
*/
public static void safeSetVisible(Menu menu, int id, boolean visible) {
MenuItem item = menu.findItem(id);
if (item != null) {
item.setVisible(visible);
}
}
/*
* This method looks for a menuitem and sets it's enabled state, if
* it exists.
*/
public static void safeSetEnabled(Menu menu, int id, boolean enabled) {
MenuItem item = menu.findItem(id);
if (item != null) {
item.setEnabled(enabled);
}
}
}