diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/com/android/browser/BrowserActivity.java | 38 | ||||
-rw-r--r-- | src/com/android/browser/TitleBar.java | 35 |
2 files changed, 65 insertions, 8 deletions
diff --git a/src/com/android/browser/BrowserActivity.java b/src/com/android/browser/BrowserActivity.java index eb79a3c..160d6f6 100644 --- a/src/com/android/browser/BrowserActivity.java +++ b/src/com/android/browser/BrowserActivity.java @@ -1032,6 +1032,15 @@ public class BrowserActivity extends Activity } /** + * Special method for the fake title bar to call when displaying its context + * menu, since it is in its own Window, and its parent does not show a + * context menu. + */ + /* package */ void showTitleBarContextMenu() { + openContextMenu(mTitleBar); + } + + /** * onSaveInstanceState(Bundle map) * onSaveInstanceState is called right before onStop(). The map contains * the saved state. @@ -1311,15 +1320,20 @@ public class BrowserActivity extends Activity // options selector, so set mCanChord to true so we can access them. mCanChord = true; int id = item.getItemId(); - final WebView webView = getTopWindow(); - if (null == webView) { - return false; - } - final HashMap hrefMap = new HashMap(); - hrefMap.put("webview", webView); - final Message msg = mHandler.obtainMessage( - FOCUS_NODE_HREF, id, 0, hrefMap); switch (id) { + // For the context menu from the title bar + case R.id.title_bar_share_page_url: + case R.id.title_bar_copy_page_url: + WebView mainView = mTabControl.getCurrentWebView(); + if (null == mainView) { + return false; + } + if (id == R.id.title_bar_share_page_url) { + Browser.sendString(this, mainView.getUrl()); + } else { + copy(mainView.getUrl()); + } + break; // -- Browser context menu case R.id.open_context_menu_id: case R.id.open_newtab_context_menu_id: @@ -1327,6 +1341,14 @@ public class BrowserActivity extends Activity case R.id.save_link_context_menu_id: case R.id.share_link_context_menu_id: case R.id.copy_link_context_menu_id: + final WebView webView = getTopWindow(); + if (null == webView) { + return false; + } + final HashMap hrefMap = new HashMap(); + hrefMap.put("webview", webView); + final Message msg = mHandler.obtainMessage( + FOCUS_NODE_HREF, id, 0, hrefMap); webView.requestFocusNodeHref(msg); break; diff --git a/src/com/android/browser/TitleBar.java b/src/com/android/browser/TitleBar.java index 3bdc18b..138a68f 100644 --- a/src/com/android/browser/TitleBar.java +++ b/src/com/android/browser/TitleBar.java @@ -26,8 +26,12 @@ import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.Drawable; import android.graphics.drawable.LayerDrawable; import android.graphics.drawable.PaintDrawable; +import android.os.Handler; +import android.os.Message; import android.util.TypedValue; +import android.view.ContextMenu; import android.view.LayoutInflater; +import android.view.MenuInflater; import android.view.MotionEvent; import android.view.View; import android.view.ViewConfiguration; @@ -55,9 +59,13 @@ public class TitleBar extends LinearLayout { private Drawable mGenericFavicon; private int mIconDimension; private View mTitleBg; + private MyHandler mHandler; + + private static int LONG_PRESS = 1; public TitleBar(BrowserActivity context) { super(context, null); + mHandler = new MyHandler(); LayoutInflater factory = LayoutInflater.from(context); factory.inflate(R.layout.title_bar, this); mBrowserActivity = context; @@ -83,6 +91,26 @@ public class TitleBar extends LinearLayout { R.drawable.app_web_browser_sm); } + private class MyHandler extends Handler { + public void handleMessage(Message msg) { + if (msg.what == LONG_PRESS) { + // Prevent the normal action from happening by setting the title + // bar's state to false. + mTitleBg.setPressed(false); + // Need to call a special method on BrowserActivity for when the + // fake title bar is up, because its ViewGroup does not show a + // context menu. + mBrowserActivity.showTitleBarContextMenu(); + } + } + }; + + @Override + protected void onCreateContextMenu(ContextMenu menu) { + MenuInflater inflater = mBrowserActivity.getMenuInflater(); + inflater.inflate(R.menu.title_context, menu); + } + @Override public boolean onTouchEvent(MotionEvent event) { switch (event.getAction()) { @@ -94,6 +122,9 @@ public class TitleBar extends LinearLayout { mRtButton.setPressed(true); } else { mTitleBg.setPressed(true); + mHandler.sendMessageDelayed(mHandler.obtainMessage( + LONG_PRESS), + ViewConfiguration.getLongPressTimeout()); } break; case MotionEvent.ACTION_MOVE: @@ -105,12 +136,14 @@ public class TitleBar extends LinearLayout { // bar, mark both as not pressed. mTitleBg.setPressed(false); mRtButton.setPressed(false); + mHandler.removeMessages(LONG_PRESS); break; } int x = (int) event.getX(); int titleRight = mTitleBg.getRight(); if (mTitleBg.isPressed() && x > titleRight + slop) { mTitleBg.setPressed(false); + mHandler.removeMessages(LONG_PRESS); } else if (mRtButton.isPressed() && x < titleRight - slop) { mRtButton.setPressed(false); } @@ -118,6 +151,7 @@ public class TitleBar extends LinearLayout { case MotionEvent.ACTION_CANCEL: mRtButton.setPressed(false); mTitleBg.setPressed(false); + mHandler.removeMessages(LONG_PRESS); break; case MotionEvent.ACTION_UP: if (mRtButton.isPressed()) { @@ -128,6 +162,7 @@ public class TitleBar extends LinearLayout { } mRtButton.setPressed(false); } else if (mTitleBg.isPressed()) { + mHandler.removeMessages(LONG_PRESS); mBrowserActivity.onSearchRequested(); mTitleBg.setPressed(false); } |