diff options
| author | Leon Scroggins <scroggo@google.com> | 2010-11-22 13:26:12 -0500 |
|---|---|---|
| committer | Leon Scroggins <scroggo@google.com> | 2010-11-22 14:31:28 -0500 |
| commit | 026f254cff9d762a9f9c9d9bf74f15809d730cd2 (patch) | |
| tree | 2f450885fb7c8f72554fba1bfddcf3f43a8656b1 | |
| parent | 8974d281fa5c96bf50d5f5bac665cae44568f6e8 (diff) | |
| download | packages_apps_Browser-026f254cff9d762a9f9c9d9bf74f15809d730cd2.tar.gz packages_apps_Browser-026f254cff9d762a9f9c9d9bf74f15809d730cd2.tar.bz2 packages_apps_Browser-026f254cff9d762a9f9c9d9bf74f15809d730cd2.zip | |
Use requestFocusNodeHref to get the link for an image.
Bug:3198707
We were attempting to use WebView.HitTestResult.getExtra()
to find the href. For normal links, this is okay. For
image links, this is the URL of the image itself. Instead,
use requestFocusNodeHref, which will get the URL of the link.
Change-Id: I759a56e461195bc2a904f4da4ef93a379d7db0b5
| -rw-r--r-- | src/com/android/browser/Controller.java | 48 |
1 files changed, 37 insertions, 11 deletions
diff --git a/src/com/android/browser/Controller.java b/src/com/android/browser/Controller.java index 83bbc63db..9f9b451fe 100644 --- a/src/com/android/browser/Controller.java +++ b/src/com/android/browser/Controller.java @@ -394,6 +394,13 @@ public class Controller case R.id.view_image_context_menu_id: loadUrlFromContext(getCurrentTopWebView(), url); break; + case R.id.open_newtab_context_menu_id: + final Tab parent = mTabControl.getCurrentTab(); + final Tab newTab = openTab(url, false); + if (newTab != null && newTab != parent) { + parent.addChildTab(newTab); + } + break; case R.id.bookmark_context_menu_id: Intent intent = new Intent(mActivity, AddBookmarkPage.class); @@ -1156,7 +1163,7 @@ public class Controller if (!(v instanceof WebView)) { return; } - WebView webview = (WebView) v; + final WebView webview = (WebView) v; WebView.HitTestResult result = webview.getHitTestResult(); if (result == null) { return; @@ -1253,17 +1260,36 @@ public class Controller = menu.findItem(R.id.open_newtab_context_menu_id); newTabItem.setVisible(showNewTab); if (showNewTab) { - newTabItem.setOnMenuItemClickListener( - new MenuItem.OnMenuItemClickListener() { - public boolean onMenuItemClick(MenuItem item) { - final Tab parent = mTabControl.getCurrentTab(); - final Tab newTab = openTab(extra, false); - if (newTab != parent) { - parent.addChildTab(newTab); + if (WebView.HitTestResult.SRC_IMAGE_ANCHOR_TYPE == type) { + newTabItem.setOnMenuItemClickListener( + new MenuItem.OnMenuItemClickListener() { + @Override + public boolean onMenuItemClick(MenuItem item) { + final HashMap<String, WebView> hrefMap = + new HashMap<String, WebView>(); + hrefMap.put("webview", webview); + final Message msg = mHandler.obtainMessage( + FOCUS_NODE_HREF, + R.id.open_newtab_context_menu_id, + 0, hrefMap); + webview.requestFocusNodeHref(msg); + return true; } - return true; - } - }); + }); + } else { + newTabItem.setOnMenuItemClickListener( + new MenuItem.OnMenuItemClickListener() { + @Override + public boolean onMenuItemClick(MenuItem item) { + final Tab parent = mTabControl.getCurrentTab(); + final Tab newTab = openTab(extra, false); + if (newTab != parent) { + parent.addChildTab(newTab); + } + return true; + } + }); + } } menu.findItem(R.id.bookmark_context_menu_id).setVisible( Bookmarks.urlHasAcceptableScheme(extra)); |
