summaryrefslogtreecommitdiffstats
path: root/mobile/android/base/java/org/mozilla/gecko/FindInPageBar.java
diff options
context:
space:
mode:
Diffstat (limited to 'mobile/android/base/java/org/mozilla/gecko/FindInPageBar.java')
-rw-r--r--mobile/android/base/java/org/mozilla/gecko/FindInPageBar.java256
1 files changed, 0 insertions, 256 deletions
diff --git a/mobile/android/base/java/org/mozilla/gecko/FindInPageBar.java b/mobile/android/base/java/org/mozilla/gecko/FindInPageBar.java
deleted file mode 100644
index efa04a04e..000000000
--- a/mobile/android/base/java/org/mozilla/gecko/FindInPageBar.java
+++ /dev/null
@@ -1,256 +0,0 @@
-/* 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;
-
-import org.mozilla.gecko.util.GeckoEventListener;
-import org.mozilla.gecko.util.GeckoRequest;
-import org.mozilla.gecko.util.NativeJSObject;
-import org.mozilla.gecko.util.ThreadUtils;
-
-import org.json.JSONObject;
-
-import android.content.Context;
-import android.text.Editable;
-import android.text.TextUtils;
-import android.text.TextWatcher;
-import android.util.AttributeSet;
-import android.util.Log;
-import android.view.KeyEvent;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.inputmethod.InputMethodManager;
-import android.widget.LinearLayout;
-import android.widget.TextView;
-
-public class FindInPageBar extends LinearLayout implements TextWatcher, View.OnClickListener, GeckoEventListener {
- private static final String LOGTAG = "GeckoFindInPageBar";
- private static final String REQUEST_ID = "FindInPageBar";
-
- private final Context mContext;
- private CustomEditText mFindText;
- private TextView mStatusText;
- private boolean mInflated;
-
- public FindInPageBar(Context context, AttributeSet attrs) {
- super(context, attrs);
- mContext = context;
- setFocusable(true);
- }
-
- public void inflateContent() {
- LayoutInflater inflater = LayoutInflater.from(mContext);
- View content = inflater.inflate(R.layout.find_in_page_content, this);
-
- content.findViewById(R.id.find_prev).setOnClickListener(this);
- content.findViewById(R.id.find_next).setOnClickListener(this);
- content.findViewById(R.id.find_close).setOnClickListener(this);
-
- // Capture clicks on the rest of the view to prevent them from
- // leaking into other views positioned below.
- content.setOnClickListener(this);
-
- mFindText = (CustomEditText) content.findViewById(R.id.find_text);
- mFindText.addTextChangedListener(this);
- mFindText.setOnKeyPreImeListener(new CustomEditText.OnKeyPreImeListener() {
- @Override
- public boolean onKeyPreIme(View v, int keyCode, KeyEvent event) {
- if (keyCode == KeyEvent.KEYCODE_BACK) {
- hide();
- return true;
- }
- return false;
- }
- });
-
- mStatusText = (TextView) content.findViewById(R.id.find_status);
-
- mInflated = true;
- GeckoApp.getEventDispatcher().registerGeckoThreadListener(this,
- "FindInPage:MatchesCountResult",
- "TextSelection:Data");
- }
-
- public void show() {
- if (!mInflated)
- inflateContent();
-
- setVisibility(VISIBLE);
- mFindText.requestFocus();
-
- // handleMessage() receives response message and determines initial state of softInput
- GeckoAppShell.notifyObservers("TextSelection:Get", REQUEST_ID);
- GeckoAppShell.notifyObservers("FindInPage:Opened", null);
- }
-
- public void hide() {
- if (!mInflated || getVisibility() == View.GONE) {
- // There's nothing to hide yet.
- return;
- }
-
- // Always clear the Find string, primarily for privacy.
- mFindText.setText("");
-
- // Only close the IMM if its EditText is the one with focus.
- if (mFindText.isFocused()) {
- getInputMethodManager(mFindText).hideSoftInputFromWindow(mFindText.getWindowToken(), 0);
- }
-
- // Close the FIPB / FindHelper state.
- setVisibility(GONE);
- GeckoAppShell.notifyObservers("FindInPage:Closed", null);
- }
-
- private InputMethodManager getInputMethodManager(View view) {
- Context context = view.getContext();
- return (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE);
- }
-
- public void onDestroy() {
- if (!mInflated) {
- return;
- }
- GeckoApp.getEventDispatcher().unregisterGeckoThreadListener(this,
- "FindInPage:MatchesCountResult",
- "TextSelection:Data");
- }
-
- private void onMatchesCountResult(final int total, final int current, final int limit, final String searchString) {
- if (total == -1) {
- updateResult(Integer.toString(limit) + "+");
- } else if (total > 0) {
- updateResult(Integer.toString(current) + "/" + Integer.toString(total));
- } else if (TextUtils.isEmpty(searchString)) {
- updateResult("");
- } else {
- // We display 0/0, when there were no
- // matches found, or if matching has been turned off by setting
- // pref accessibility.typeaheadfind.matchesCountLimit to 0.
- updateResult("0/0");
- }
- }
-
- private void updateResult(final String statusText) {
- ThreadUtils.postToUiThread(new Runnable() {
- @Override
- public void run() {
- mStatusText.setVisibility(statusText.isEmpty() ? View.GONE : View.VISIBLE);
- mStatusText.setText(statusText);
- }
- });
- }
-
- // TextWatcher implementation
-
- @Override
- public void afterTextChanged(Editable s) {
- sendRequestToFinderHelper("FindInPage:Find", s.toString());
- }
-
- @Override
- public void beforeTextChanged(CharSequence s, int start, int count, int after) {
- // ignore
- }
-
- @Override
- public void onTextChanged(CharSequence s, int start, int before, int count) {
- // ignore
- }
-
- // View.OnClickListener implementation
-
- @Override
- public void onClick(View v) {
- final int viewId = v.getId();
-
- String extras = getResources().getResourceEntryName(viewId);
- Telemetry.sendUIEvent(TelemetryContract.Event.ACTION, TelemetryContract.Method.BUTTON, extras);
-
- if (viewId == R.id.find_prev) {
- sendRequestToFinderHelper("FindInPage:Prev", mFindText.getText().toString());
- getInputMethodManager(mFindText).hideSoftInputFromWindow(mFindText.getWindowToken(), 0);
- return;
- }
-
- if (viewId == R.id.find_next) {
- sendRequestToFinderHelper("FindInPage:Next", mFindText.getText().toString());
- getInputMethodManager(mFindText).hideSoftInputFromWindow(mFindText.getWindowToken(), 0);
- return;
- }
-
- if (viewId == R.id.find_close) {
- hide();
- }
- }
-
- // GeckoEventListener implementation
-
- @Override
- public void handleMessage(String event, JSONObject message) {
- if (event.equals("FindInPage:MatchesCountResult")) {
- onMatchesCountResult(message.optInt("total", 0),
- message.optInt("current", 0),
- message.optInt("limit", 0),
- message.optString("searchString"));
- return;
- }
-
- if (!event.equals("TextSelection:Data") || !REQUEST_ID.equals(message.optString("requestId"))) {
- return;
- }
-
- final String text = message.optString("text");
-
- // Populate an initial find string, virtual keyboard not required.
- if (!TextUtils.isEmpty(text)) {
- // Populate initial selection
- ThreadUtils.postToUiThread(new Runnable() {
- @Override
- public void run() {
- mFindText.setText(text);
- }
- });
- return;
- }
-
- // Show the virtual keyboard.
- if (mFindText.hasWindowFocus()) {
- getInputMethodManager(mFindText).showSoftInput(mFindText, 0);
- } else {
- // showSoftInput won't work until after the window is focused.
- mFindText.setOnWindowFocusChangeListener(new CustomEditText.OnWindowFocusChangeListener() {
- @Override
- public void onWindowFocusChanged(boolean hasFocus) {
- if (!hasFocus)
- return;
-
- mFindText.setOnWindowFocusChangeListener(null);
- getInputMethodManager(mFindText).showSoftInput(mFindText, 0);
- }
- });
- }
- }
-
- /**
- * Request find operation, and update matchCount results (current count and total).
- */
- private void sendRequestToFinderHelper(final String request, final String searchString) {
- GeckoAppShell.sendRequestToGecko(new GeckoRequest(request, searchString) {
- @Override
- public void onResponse(NativeJSObject nativeJSObject) {
- // We don't care about the return value, because `onMatchesCountResult`
- // does the heavy lifting.
- }
-
- @Override
- public void onError(NativeJSObject error) {
- // Gecko didn't respond due to state change, javascript error, etc.
- Log.d(LOGTAG, "No response from Gecko on request to match string: [" +
- searchString + "]");
- updateResult("");
- }
- });
- }
-}