summaryrefslogtreecommitdiffstats
path: root/mobile/android/base/java/org/mozilla/gecko/toolbar/ToolbarEditLayout.java
diff options
context:
space:
mode:
Diffstat (limited to 'mobile/android/base/java/org/mozilla/gecko/toolbar/ToolbarEditLayout.java')
-rw-r--r--mobile/android/base/java/org/mozilla/gecko/toolbar/ToolbarEditLayout.java348
1 files changed, 0 insertions, 348 deletions
diff --git a/mobile/android/base/java/org/mozilla/gecko/toolbar/ToolbarEditLayout.java b/mobile/android/base/java/org/mozilla/gecko/toolbar/ToolbarEditLayout.java
deleted file mode 100644
index c9731a401..000000000
--- a/mobile/android/base/java/org/mozilla/gecko/toolbar/ToolbarEditLayout.java
+++ /dev/null
@@ -1,348 +0,0 @@
-/* -*- Mode: Java; c-basic-offset: 4; tab-width: 20; indent-tabs-mode: nil; -*-
- * 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.toolbar;
-
-import android.app.Activity;
-import android.content.Intent;
-import android.graphics.drawable.Drawable;
-import android.speech.RecognizerIntent;
-import android.widget.Button;
-import android.widget.ImageButton;
-import org.mozilla.gecko.ActivityHandlerHelper;
-import org.mozilla.gecko.GeckoAppShell;
-import org.mozilla.gecko.GeckoSharedPrefs;
-import org.mozilla.gecko.R;
-import org.mozilla.gecko.Telemetry;
-import org.mozilla.gecko.TelemetryContract;
-import org.mozilla.gecko.animation.PropertyAnimator;
-import org.mozilla.gecko.animation.PropertyAnimator.PropertyAnimationListener;
-import org.mozilla.gecko.preferences.GeckoPreferences;
-import org.mozilla.gecko.toolbar.BrowserToolbar.OnCommitListener;
-import org.mozilla.gecko.toolbar.BrowserToolbar.OnDismissListener;
-import org.mozilla.gecko.toolbar.BrowserToolbar.OnFilterListener;
-import org.mozilla.gecko.toolbar.BrowserToolbar.TabEditingState;
-import org.mozilla.gecko.util.ActivityResultHandler;
-import org.mozilla.gecko.util.DrawableUtil;
-import org.mozilla.gecko.util.HardwareUtils;
-import org.mozilla.gecko.util.StringUtils;
-import org.mozilla.gecko.util.InputOptionsUtils;
-import org.mozilla.gecko.widget.themed.ThemedLinearLayout;
-
-import android.content.Context;
-import android.util.AttributeSet;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.inputmethod.InputMethodManager;
-import android.widget.ImageView;
-
-import java.util.List;
-
-/**
-* {@code ToolbarEditLayout} is the UI for when the toolbar is in
-* edit state. It controls a text entry ({@code ToolbarEditText})
-* and its matching 'go' button which changes depending on the
-* current type of text in the entry.
-*/
-public class ToolbarEditLayout extends ThemedLinearLayout {
-
- public interface OnSearchStateChangeListener {
- public void onSearchStateChange(boolean isActive);
- }
-
- private final ImageView mSearchIcon;
-
- private final ToolbarEditText mEditText;
-
- private final ImageButton mVoiceInput;
- private final ImageButton mQrCode;
-
- private OnFocusChangeListener mFocusChangeListener;
-
- private boolean showKeyboardOnFocus = false; // Indicates if we need to show the keyboard after the app resumes
-
- public ToolbarEditLayout(Context context, AttributeSet attrs) {
- super(context, attrs);
-
- setOrientation(HORIZONTAL);
-
- LayoutInflater.from(context).inflate(R.layout.toolbar_edit_layout, this);
- mSearchIcon = (ImageView) findViewById(R.id.search_icon);
-
- mEditText = (ToolbarEditText) findViewById(R.id.url_edit_text);
-
- mVoiceInput = (ImageButton) findViewById(R.id.mic);
- mQrCode = (ImageButton) findViewById(R.id.qrcode);
- }
-
- @Override
- public void onAttachedToWindow() {
- super.onAttachedToWindow();
-
- if (HardwareUtils.isTablet()) {
- mSearchIcon.setVisibility(View.VISIBLE);
- }
-
- mEditText.setOnFocusChangeListener(new OnFocusChangeListener() {
- @Override
- public void onFocusChange(View v, boolean hasFocus) {
- if (mFocusChangeListener != null) {
- mFocusChangeListener.onFocusChange(ToolbarEditLayout.this, hasFocus);
-
- // Checking if voice and QR code input are enabled each time the user taps on the URL bar
- if (hasFocus) {
- if (voiceIsEnabled(getContext(), getResources().getString(R.string.voicesearch_prompt))) {
- mVoiceInput.setVisibility(View.VISIBLE);
- } else {
- mVoiceInput.setVisibility(View.GONE);
- }
-
- if (qrCodeIsEnabled(getContext())) {
- mQrCode.setVisibility(View.VISIBLE);
- } else {
- mQrCode.setVisibility(View.GONE);
- }
- }
- }
- }
- });
-
- mEditText.setOnSearchStateChangeListener(new OnSearchStateChangeListener() {
- @Override
- public void onSearchStateChange(boolean isActive) {
- updateSearchIcon(isActive);
- }
- });
-
- mVoiceInput.setOnClickListener(new Button.OnClickListener() {
- @Override
- public void onClick(View v) {
- launchVoiceRecognizer();
- }
- });
-
- mQrCode.setOnClickListener(new Button.OnClickListener() {
- @Override
- public void onClick(View v) {
- launchQRCodeReader();
- }
- });
-
- // Set an inactive search icon on tablet devices when in editing mode
- updateSearchIcon(false);
- }
-
- /**
- * Update the search icon at the left of the edittext based
- * on its state.
- *
- * @param isActive The state of the edittext. Active is when the initialized
- * text has changed and is not empty.
- */
- void updateSearchIcon(boolean isActive) {
- if (!HardwareUtils.isTablet()) {
- return;
- }
-
- // When on tablet show a magnifying glass in editing mode
- final int searchDrawableId = R.drawable.search_icon_active;
- final Drawable searchDrawable;
- if (!isActive) {
- searchDrawable = DrawableUtil.tintDrawableWithColorRes(getContext(), searchDrawableId, R.color.placeholder_grey);
- } else {
- if (isPrivateMode()) {
- searchDrawable = DrawableUtil.tintDrawableWithColorRes(getContext(), searchDrawableId, R.color.tabs_tray_icon_grey);
- } else {
- searchDrawable = getResources().getDrawable(searchDrawableId);
- }
- }
-
- mSearchIcon.setImageDrawable(searchDrawable);
- }
-
- @Override
- public void setOnFocusChangeListener(OnFocusChangeListener listener) {
- mFocusChangeListener = listener;
- }
-
- @Override
- public void setEnabled(boolean enabled) {
- super.setEnabled(enabled);
- mEditText.setEnabled(enabled);
- }
-
- @Override
- public void setPrivateMode(boolean isPrivate) {
- super.setPrivateMode(isPrivate);
- mEditText.setPrivateMode(isPrivate);
- }
-
- /**
- * Called when the parent gains focus (on app launch and resume)
- */
- public void onParentFocus() {
- if (showKeyboardOnFocus) {
- showKeyboardOnFocus = false;
-
- Activity activity = GeckoAppShell.getGeckoInterface().getActivity();
- activity.runOnUiThread(new Runnable() {
- public void run() {
- mEditText.requestFocus();
- showSoftInput();
- }
- });
- }
-
- // Checking if qr code is supported after resuming the app
- if (qrCodeIsEnabled(getContext())) {
- mQrCode.setVisibility(View.VISIBLE);
- } else {
- mQrCode.setVisibility(View.GONE);
- }
- }
-
- void setToolbarPrefs(final ToolbarPrefs prefs) {
- mEditText.setToolbarPrefs(prefs);
- }
-
- private void showSoftInput() {
- InputMethodManager imm =
- (InputMethodManager) getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
- imm.showSoftInput(mEditText, InputMethodManager.SHOW_IMPLICIT);
- }
-
- void prepareShowAnimation(final PropertyAnimator animator) {
- if (animator == null) {
- mEditText.requestFocus();
- showSoftInput();
- return;
- }
-
- animator.addPropertyAnimationListener(new PropertyAnimationListener() {
- @Override
- public void onPropertyAnimationStart() {
- mEditText.requestFocus();
- }
-
- @Override
- public void onPropertyAnimationEnd() {
- showSoftInput();
- }
- });
- }
-
- void setOnCommitListener(OnCommitListener listener) {
- mEditText.setOnCommitListener(listener);
- }
-
- void setOnDismissListener(OnDismissListener listener) {
- mEditText.setOnDismissListener(listener);
- }
-
- void setOnFilterListener(OnFilterListener listener) {
- mEditText.setOnFilterListener(listener);
- }
-
- void onEditSuggestion(String suggestion) {
- mEditText.setText(suggestion);
- mEditText.setSelection(mEditText.getText().length());
- mEditText.requestFocus();
-
- showSoftInput();
- }
-
- void setText(String text) {
- mEditText.setText(text);
- }
-
- String getText() {
- return mEditText.getText().toString();
- }
-
- protected void saveTabEditingState(final TabEditingState editingState) {
- editingState.lastEditingText = mEditText.getNonAutocompleteText();
- editingState.selectionStart = mEditText.getSelectionStart();
- editingState.selectionEnd = mEditText.getSelectionEnd();
- }
-
- protected void restoreTabEditingState(final TabEditingState editingState) {
- mEditText.setText(editingState.lastEditingText);
- mEditText.setSelection(editingState.selectionStart, editingState.selectionEnd);
- }
-
- private boolean voiceIsEnabled(Context context, String prompt) {
- final boolean voiceIsSupported = InputOptionsUtils.supportsVoiceRecognizer(context, prompt);
- if (!voiceIsSupported) {
- return false;
- }
- return GeckoSharedPrefs.forApp(context)
- .getBoolean(GeckoPreferences.PREFS_VOICE_INPUT_ENABLED, true);
- }
-
- private void launchVoiceRecognizer() {
- Telemetry.sendUIEvent(TelemetryContract.Event.ACTION, TelemetryContract.Method.ACTIONBAR, "voice_input_launch");
- final Intent intent = InputOptionsUtils.createVoiceRecognizerIntent(getResources().getString(R.string.voicesearch_prompt));
-
- Activity activity = GeckoAppShell.getGeckoInterface().getActivity();
- ActivityHandlerHelper.startIntentForActivity(activity, intent, new ActivityResultHandler() {
- @Override
- public void onActivityResult(int resultCode, Intent data) {
- if (resultCode != Activity.RESULT_OK) {
- return;
- }
-
- Telemetry.sendUIEvent(TelemetryContract.Event.ACTION, TelemetryContract.Method.ACTIONBAR, "voice_input_success");
- // We have RESULT_OK, not RESULT_NO_MATCH so it should be safe to assume that
- // we have at least one match. We only need one: this will be
- // used for showing the user search engines with this search term in it.
- List<String> voiceStrings = data.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS);
- String text = voiceStrings.get(0);
- mEditText.setText(text);
- mEditText.setSelection(0, text.length());
-
- final InputMethodManager imm =
- (InputMethodManager) getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
- imm.showSoftInput(mEditText, InputMethodManager.SHOW_IMPLICIT);
- }
- });
- }
-
- private boolean qrCodeIsEnabled(Context context) {
- final boolean qrCodeIsSupported = InputOptionsUtils.supportsQrCodeReader(context);
- if (!qrCodeIsSupported) {
- return false;
- }
- return GeckoSharedPrefs.forApp(context)
- .getBoolean(GeckoPreferences.PREFS_QRCODE_ENABLED, true);
- }
-
- private void launchQRCodeReader() {
- Telemetry.sendUIEvent(TelemetryContract.Event.ACTION, TelemetryContract.Method.ACTIONBAR, "qrcode_input_launch");
- final Intent intent = InputOptionsUtils.createQRCodeReaderIntent();
-
- Activity activity = GeckoAppShell.getGeckoInterface().getActivity();
- ActivityHandlerHelper.startIntentForActivity(activity, intent, new ActivityResultHandler() {
- @Override
- public void onActivityResult(int resultCode, Intent intent) {
- if (resultCode == Activity.RESULT_OK) {
- String text = intent.getStringExtra("SCAN_RESULT");
- if (!StringUtils.isSearchQuery(text, false)) {
- Telemetry.sendUIEvent(TelemetryContract.Event.ACTION, TelemetryContract.Method.ACTIONBAR, "qrcode_input_success");
- mEditText.setText(text);
- mEditText.selectAll();
-
- // Queuing up the keyboard show action.
- // At this point the app has not resumed yet, and trying to show
- // the keyboard will fail.
- showKeyboardOnFocus = true;
- }
- }
- // We can get the SCAN_RESULT_FORMAT, SCAN_RESULT_BYTES,
- // SCAN_RESULT_ORIENTATION and SCAN_RESULT_ERROR_CORRECTION_LEVEL
- // as well as the actual result, which may hold a URL.
- }
- });
- }
-}