diff options
Diffstat (limited to 'src/com')
-rw-r--r-- | src/com/android/browser/BrowserActivity.java | 76 | ||||
-rw-r--r-- | src/com/android/browser/FindActionModeCallback.java | 219 | ||||
-rw-r--r-- | src/com/android/browser/SelectActionModeCallback.java | 89 | ||||
-rw-r--r-- | src/com/android/browser/Tab.java | 10 |
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); |