summaryrefslogtreecommitdiffstats
path: root/src/com
diff options
context:
space:
mode:
Diffstat (limited to 'src/com')
-rw-r--r--src/com/android/browser/BrowserActivity.java76
-rw-r--r--src/com/android/browser/FindActionModeCallback.java219
-rw-r--r--src/com/android/browser/SelectActionModeCallback.java89
-rw-r--r--src/com/android/browser/Tab.java10
4 files changed, 11 insertions, 383 deletions
diff --git a/src/com/android/browser/BrowserActivity.java b/src/com/android/browser/BrowserActivity.java
index 7db2a8d..b62862b 100644
--- a/src/com/android/browser/BrowserActivity.java
+++ b/src/com/android/browser/BrowserActivity.java
@@ -1281,28 +1281,10 @@ public class BrowserActivity extends Activity
@Override
public ActionMode onStartActionMode(ActionMode.Callback callback) {
- ActionMode mode = super.onStartActionMode(callback);
- if (callback instanceof FindActionModeCallback
- || callback instanceof SelectActionModeCallback) {
- // For find and select, hide extra title bars. They will
- // be replaced in onEndActionMode.
- Tab tab = mTabControl.getCurrentTab();
- if (tab.getSubWebView() == null) {
- // If the find or select is being performed on the main webview,
- // remove the embedded title bar.
- WebView mainView = tab.getWebView();
- if (mainView != null) {
- mainView.setEmbeddedTitleBar(null);
- }
- }
- hideFakeTitleBar();
- mActionMode = mode;
- } else {
- // Do not store other ActionModes, since we are unable to determine
- // when they finish.
- mActionMode = null;
- }
- return mode;
+ mActionMode = super.onStartActionMode(callback);
+ hideFakeTitleBar();
+ // Would like to change the MENU, but onEndActionMode may not be called
+ return mActionMode;
}
@Override
@@ -1403,7 +1385,7 @@ public class BrowserActivity extends Activity
break;
case R.id.find_menu_id:
- showFindDialog(null);
+ getTopWindow().showFindDialog(null);
break;
case R.id.save_webarchive_menu_id:
@@ -1519,11 +1501,13 @@ public class BrowserActivity extends Activity
}
/*
- * End the current ActionMode. Only works for find and select.
+ * End the current ActionMode.
*/
void endActionMode() {
if (mActionMode != null) {
- mActionMode.finish();
+ ActionMode mode = mActionMode;
+ onEndActionMode();
+ mode.finish();
}
}
@@ -1533,59 +1517,21 @@ public class BrowserActivity extends Activity
*/
public void onEndActionMode() {
if (!isInCustomActionMode()) return;
- // If the Find was being performed in the main WebView, replace the
- // embedded title bar.
- Tab currentTab = mTabControl.getCurrentTab();
- if (currentTab.getSubWebView() == null) {
- WebView mainView = currentTab.getWebView();
- if (mainView != null) {
- mainView.setEmbeddedTitleBar(mTitleBar);
- }
- }
if (mInLoad) {
// The title bar was hidden, because otherwise it would cover up the
// find or select dialog. Now that the dialog has been removed,
// show the fake title bar once again.
showFakeTitleBar();
}
+ // Would like to return the menu state to normal, but this does not
+ // necessarily get called.
mActionMode = null;
}
- private FindActionModeCallback mFindCallback;
- private SelectActionModeCallback mSelectCallback;
-
// For select and find, we keep track of the ActionMode so that
// finish() can be called as desired.
private ActionMode mActionMode;
- /*
- * Open the find ActionMode.
- * @param text If non null, will be placed in find to be searched for.
- */
- public void showFindDialog(String text) {
- if (null == mFindCallback) {
- mFindCallback = new FindActionModeCallback(this);
- }
- WebView webView = getTopWindow();
- webView.setFindIsUp(true);
- mFindCallback.setWebView(webView);
- startActionMode(mFindCallback);
- if (text != null) mFindCallback.setText(text);
- }
-
- /*
- * Show the select ActionMode.
- */
- public void showSelectDialog() {
- if (null == mSelectCallback) {
- mSelectCallback = new SelectActionModeCallback(this);
- }
- WebView webView = getTopWindow();
- webView.setUpSelect();
- mSelectCallback.setWebView(webView);
- startActionMode(mSelectCallback);
- }
-
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
// This happens when the user begins to hold down the menu key, so
diff --git a/src/com/android/browser/FindActionModeCallback.java b/src/com/android/browser/FindActionModeCallback.java
deleted file mode 100644
index 0b0fdae..0000000
--- a/src/com/android/browser/FindActionModeCallback.java
+++ /dev/null
@@ -1,219 +0,0 @@
-/*
- * Copyright (C) 2010 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.browser;
-
-import android.content.Context;
-import android.content.res.Resources;
-import android.text.Editable;
-import android.text.Selection;
-import android.text.Spannable;
-import android.text.TextWatcher;
-import android.webkit.WebView;
-import android.widget.EditText;
-import android.widget.TextView;
-import android.view.ActionMode;
-import android.view.LayoutInflater;
-import android.view.Menu;
-import android.view.MenuInflater;
-import android.view.MenuItem;
-import android.view.View;
-import android.view.inputmethod.InputMethodManager;
-
-class FindActionModeCallback implements ActionMode.Callback, TextWatcher,
- View.OnLongClickListener {
- private View mCustomView;
- private EditText mEditText;
- private TextView mMatches;
- private WebView mWebView;
- private InputMethodManager mInput;
- private Resources mResources;
- private boolean mMatchesFound;
- private int mNumberOfMatches;
- private BrowserActivity mBrowserActivity;
-
- FindActionModeCallback(BrowserActivity context) {
- mCustomView = LayoutInflater.from(context).inflate(
- R.layout.browser_find, null);
- mEditText = (EditText) mCustomView.findViewById(R.id.edit);
- // Override long click so that select ActionMode is not opened, which
- // would exit find ActionMode.
- mEditText.setOnLongClickListener(this);
- Spannable span = (Spannable) mEditText.getText();
- int length = span.length();
- span.setSpan(this, 0, length, Spannable.SPAN_INCLUSIVE_INCLUSIVE);
- mMatches = (TextView) mCustomView.findViewById(R.id.matches);
- mInput = (InputMethodManager)
- context.getSystemService(Context.INPUT_METHOD_SERVICE);
- mResources = context.getResources();
- mBrowserActivity = context;
- }
-
- /*
- * Place text in the text field so it can be searched for. Need to press
- * the find next or find previous button to find all of the matches.
- */
- void setText(String text) {
- mEditText.setText(text);
- Spannable span = (Spannable) mEditText.getText();
- int length = span.length();
- // Ideally, we would like to set the selection to the whole field,
- // but this brings up the Text selection CAB, which dismisses this
- // one.
- Selection.setSelection(span, length, length);
- // Necessary each time we set the text, so that this will watch
- // changes to it.
- span.setSpan(this, 0, length, Spannable.SPAN_INCLUSIVE_INCLUSIVE);
- mMatchesFound = false;
- }
-
- /*
- * Set the WebView to search. Must be non null, and set before calling
- * startActionMode.
- */
- void setWebView(WebView webView) {
- if (null == webView) {
- throw new AssertionError("WebView supplied to "
- + "FindActionModeCallback cannot be null");
- }
- mWebView = webView;
- }
-
- /*
- * Move the highlight to the next match.
- * @param next If true, find the next match further down in the document.
- * If false, find the previous match, up in the document.
- */
- private void findNext(boolean next) {
- if (mWebView == null) {
- throw new AssertionError(
- "No WebView for FindActionModeCallback::findNext");
- }
- mWebView.findNext(next);
- }
-
- /*
- * Highlight all the instances of the string from mEditText in mWebView.
- */
- private void findAll() {
- if (mWebView == null) {
- throw new AssertionError(
- "No WebView for FindActionModeCallback::findAll");
- }
- CharSequence find = mEditText.getText();
- if (0 == find.length()) {
- mWebView.clearMatches();
- mMatches.setVisibility(View.INVISIBLE);
- mMatchesFound = false;
- } else {
- mMatchesFound = true;
- mMatches.setVisibility(View.VISIBLE);
- mNumberOfMatches = mWebView.findAll(find.toString());
- if (0 == mNumberOfMatches) {
- mMatches.setText(mResources.getString(R.string.no_matches));
- } else {
- updateMatchesString();
- }
- }
- }
-
- /*
- * Update the string which tells the user how many matches were found, and
- * which match is currently highlighted.
- */
- private void updateMatchesString() {
- String template = mResources.getQuantityString(R.plurals.matches_found,
- mNumberOfMatches, mWebView.findIndex() + 1, mNumberOfMatches);
-
- mMatches.setText(template);
- }
-
- // OnLongClickListener implementation
-
- @Override
- public boolean onLongClick(View v) { return true; }
-
- // ActionMode.Callback implementation
-
- @Override
- public boolean onCreateActionMode(ActionMode mode, Menu menu) {
- mode.setCustomView(mCustomView);
- mode.getMenuInflater().inflate(R.menu.find, menu);
- // Ideally, we would like to preserve the old find text, but it
- // brings up the Text selection CAB, and therefore dismisses
- // find
- setText("");
- mMatches.setVisibility(View.INVISIBLE);
- mMatchesFound = false;
- mMatches.setText("0");
- mEditText.requestFocus();
- mInput.showSoftInput(mEditText, 0);
- return true;
- }
-
- @Override
- public void onDestroyActionMode(ActionMode mode) {
- mBrowserActivity.onEndActionMode();
- mWebView.notifyFindDialogDismissed();
- mInput.hideSoftInputFromWindow(mWebView.getWindowToken(), 0);
- }
-
- @Override
- public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
- return false;
- }
-
- @Override
- public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
- if (!mMatchesFound) {
- findAll();
- return true;
- }
- switch(item.getItemId()) {
- case R.id.find_prev:
- findNext(false);
- break;
- case R.id.find_next:
- findNext(true);
- break;
- default:
- return false;
- }
- updateMatchesString();
- return true;
- }
-
- // TextWatcher methods
-
- @Override
- public void beforeTextChanged(CharSequence s,
- int start,
- int count,
- int after) {
- }
-
- @Override
- public void onTextChanged(CharSequence s,
- int start,
- int before,
- int count) {
- findAll();
- }
-
- @Override
- public void afterTextChanged(Editable s) { }
-
-}
diff --git a/src/com/android/browser/SelectActionModeCallback.java b/src/com/android/browser/SelectActionModeCallback.java
deleted file mode 100644
index 4c2554f..0000000
--- a/src/com/android/browser/SelectActionModeCallback.java
+++ /dev/null
@@ -1,89 +0,0 @@
-/*
- * Copyright (C) 2010 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.browser;
-
-import android.provider.Browser;
-import android.webkit.WebView;
-import android.view.ActionMode;
-import android.view.Menu;
-import android.view.MenuItem;
-
-class SelectActionModeCallback implements ActionMode.Callback {
- private WebView mWebView;
- private BrowserActivity mBrowserActivity;
-
- SelectActionModeCallback(BrowserActivity context) {
- mBrowserActivity = context;
- }
-
- /*
- * Set the WebView to be copied from.
- */
- void setWebView(WebView webView) {
- mWebView = webView;
- }
-
- // ActionMode.Callback implementation
-
- @Override
- public boolean onCreateActionMode(ActionMode mode, Menu menu) {
- mode.getMenuInflater().inflate(R.menu.copy, menu);
- mode.setTitle(R.string.text_selection_title);
- return true;
- }
-
- @Override
- public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
- return true;
- }
-
- @Override
- public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
- switch(item.getItemId()) {
- case R.id.copy:
- mWebView.copySelection();
- mode.finish();
- break;
-
- case R.id.share:
- String selection = mWebView.getSelection();
- Browser.sendString(mBrowserActivity, selection);
- mode.finish();
- break;
-
- case R.id.select_all:
- mWebView.selectAll();
- break;
-
- case R.id.find:
- String sel= mWebView.getSelection();
- mode.finish();
- mBrowserActivity.showFindDialog(sel);
- break;
-
- default:
- return false;
- }
- return true;
- }
-
- @Override
- public void onDestroyActionMode(ActionMode mode) {
- mBrowserActivity.onEndActionMode();
- mWebView.notifySelectDialogDismissed();
- }
-}
diff --git a/src/com/android/browser/Tab.java b/src/com/android/browser/Tab.java
index e7309a6..a9ab058 100644
--- a/src/com/android/browser/Tab.java
+++ b/src/com/android/browser/Tab.java
@@ -1045,16 +1045,6 @@ class Tab {
}
@Override
- public void onSelectionDone(WebView view) {
- if (mInForeground) mActivity.endActionMode();
- }
-
- @Override
- public void onSelectionStart(WebView view) {
- if (mInForeground) mActivity.showSelectDialog();
- }
-
- @Override
public void onShowCustomView(View view,
WebChromeClient.CustomViewCallback callback) {
if (mInForeground) mActivity.onShowCustomView(view, callback);