michael@0: /* -*- Mode: Java; c-basic-offset: 4; tab-width: 20; indent-tabs-mode: nil; -*- michael@0: * This Source Code Form is subject to the terms of the Mozilla Public michael@0: * License, v. 2.0. If a copy of the MPL was not distributed with this michael@0: * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ michael@0: michael@0: package org.mozilla.gecko.toolbar; michael@0: michael@0: import org.mozilla.gecko.R; michael@0: import org.mozilla.gecko.animation.PropertyAnimator; michael@0: import org.mozilla.gecko.animation.PropertyAnimator.PropertyAnimationListener; michael@0: import org.mozilla.gecko.toolbar.BrowserToolbar.OnCommitListener; michael@0: import org.mozilla.gecko.toolbar.BrowserToolbar.OnDismissListener; michael@0: import org.mozilla.gecko.toolbar.BrowserToolbar.OnFilterListener; michael@0: import org.mozilla.gecko.widget.ThemedLinearLayout; michael@0: michael@0: import android.content.Context; michael@0: import android.util.AttributeSet; michael@0: import android.view.KeyEvent; michael@0: import android.view.LayoutInflater; michael@0: import android.view.View; michael@0: import android.view.inputmethod.InputMethodManager; michael@0: michael@0: /** michael@0: * {@code ToolbarEditLayout} is the UI for when the toolbar is in michael@0: * edit state. It controls a text entry ({@code ToolbarEditText}) michael@0: * and its matching 'go' button which changes depending on the michael@0: * current type of text in the entry. michael@0: */ michael@0: public class ToolbarEditLayout extends ThemedLinearLayout { michael@0: michael@0: private final ToolbarEditText mEditText; michael@0: michael@0: private OnFocusChangeListener mFocusChangeListener; michael@0: michael@0: public ToolbarEditLayout(Context context, AttributeSet attrs) { michael@0: super(context, attrs); michael@0: michael@0: setOrientation(HORIZONTAL); michael@0: michael@0: LayoutInflater.from(context).inflate(R.layout.toolbar_edit_layout, this); michael@0: mEditText = (ToolbarEditText) findViewById(R.id.url_edit_text); michael@0: } michael@0: michael@0: @Override michael@0: public void onAttachedToWindow() { michael@0: mEditText.setOnFocusChangeListener(new OnFocusChangeListener() { michael@0: @Override michael@0: public void onFocusChange(View v, boolean hasFocus) { michael@0: if (mFocusChangeListener != null) { michael@0: mFocusChangeListener.onFocusChange(ToolbarEditLayout.this, hasFocus); michael@0: } michael@0: } michael@0: }); michael@0: } michael@0: michael@0: @Override michael@0: public void setOnFocusChangeListener(OnFocusChangeListener listener) { michael@0: mFocusChangeListener = listener; michael@0: } michael@0: michael@0: @Override michael@0: public void setEnabled(boolean enabled) { michael@0: super.setEnabled(enabled); michael@0: mEditText.setEnabled(enabled); michael@0: } michael@0: michael@0: @Override michael@0: public void setPrivateMode(boolean isPrivate) { michael@0: super.setPrivateMode(isPrivate); michael@0: mEditText.setPrivateMode(isPrivate); michael@0: } michael@0: michael@0: private void showSoftInput() { michael@0: InputMethodManager imm = michael@0: (InputMethodManager) getContext().getSystemService(Context.INPUT_METHOD_SERVICE); michael@0: imm.showSoftInput(mEditText, InputMethodManager.SHOW_IMPLICIT); michael@0: } michael@0: michael@0: void prepareShowAnimation(final PropertyAnimator animator) { michael@0: if (animator == null) { michael@0: mEditText.requestFocus(); michael@0: showSoftInput(); michael@0: return; michael@0: } michael@0: michael@0: animator.addPropertyAnimationListener(new PropertyAnimationListener() { michael@0: @Override michael@0: public void onPropertyAnimationStart() { michael@0: mEditText.requestFocus(); michael@0: } michael@0: michael@0: @Override michael@0: public void onPropertyAnimationEnd() { michael@0: showSoftInput(); michael@0: } michael@0: }); michael@0: } michael@0: michael@0: void setOnCommitListener(OnCommitListener listener) { michael@0: mEditText.setOnCommitListener(listener); michael@0: } michael@0: michael@0: void setOnDismissListener(OnDismissListener listener) { michael@0: mEditText.setOnDismissListener(listener); michael@0: } michael@0: michael@0: void setOnFilterListener(OnFilterListener listener) { michael@0: mEditText.setOnFilterListener(listener); michael@0: } michael@0: michael@0: void onEditSuggestion(String suggestion) { michael@0: mEditText.setText(suggestion); michael@0: mEditText.setSelection(mEditText.getText().length()); michael@0: mEditText.requestFocus(); michael@0: michael@0: showSoftInput(); michael@0: } michael@0: michael@0: void setText(String text) { michael@0: mEditText.setText(text); michael@0: } michael@0: michael@0: String getText() { michael@0: return mEditText.getText().toString(); michael@0: } michael@0: }