From 31dd503c6aa69018e694d91724d46db49ea09327 Mon Sep 17 00:00:00 2001 From: The Android Open Source Project Date: Tue, 3 Mar 2009 19:32:27 -0800 Subject: auto import from //depot/cupcake/@135843 --- .../launcher/SearchAutoCompleteTextView.java | 94 ++++++++++++++++++++++ 1 file changed, 94 insertions(+) create mode 100644 src/com/android/launcher/SearchAutoCompleteTextView.java (limited to 'src/com/android/launcher/SearchAutoCompleteTextView.java') diff --git a/src/com/android/launcher/SearchAutoCompleteTextView.java b/src/com/android/launcher/SearchAutoCompleteTextView.java new file mode 100644 index 000000000..4f0df1882 --- /dev/null +++ b/src/com/android/launcher/SearchAutoCompleteTextView.java @@ -0,0 +1,94 @@ +/* + * Copyright (C) 2008 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.launcher; + +import android.widget.AutoCompleteTextView; +import android.content.Context; +import android.content.res.Configuration; +import android.util.AttributeSet; +import android.graphics.Rect; +import android.view.WindowManager; +import android.view.inputmethod.InputMethodManager; +import android.app.Activity; + +/** + * This class is not for the faint of heart. Home works in the pan & scan + * soft input mode. However, this mode gets rid of the soft keyboard on rotation, + * which is a probelm when the Search widget has focus. This special class + * changes Home's soft input method temporarily as long as the Search widget holds + * the focus. This way, the soft keyboard remains after rotation. + */ +public class SearchAutoCompleteTextView extends AutoCompleteTextView { + private boolean mShowKeyboard; + + public SearchAutoCompleteTextView(Context context) { + super(context); + } + + public SearchAutoCompleteTextView(Context context, AttributeSet attrs) { + super(context, attrs); + } + + public SearchAutoCompleteTextView(Context context, AttributeSet attrs, int defStyle) { + super(context, attrs, defStyle); + } + + @Override + protected void onFocusChanged(boolean gainFocus, int direction, Rect previouslyFocusedRect) { + super.onFocusChanged(gainFocus, direction, previouslyFocusedRect); + + final WindowManager.LayoutParams lp = ((Activity) getContext()).getWindow().getAttributes(); + if (gainFocus) { + lp.softInputMode = + (lp.softInputMode & ~WindowManager.LayoutParams.SOFT_INPUT_MASK_STATE) | + WindowManager.LayoutParams.SOFT_INPUT_STATE_UNCHANGED; + } else { + //noinspection PointlessBitwiseExpression + lp.softInputMode = + (lp.softInputMode & ~WindowManager.LayoutParams.SOFT_INPUT_MASK_STATE) | + WindowManager.LayoutParams.SOFT_INPUT_STATE_UNSPECIFIED; + + // Hide the soft keyboard when the search widget loses the focus + InputMethodManager.peekInstance().hideSoftInputFromWindow(getWindowToken(), 0); + } + + final WindowManager manager = (WindowManager) + getContext().getSystemService(Context.WINDOW_SERVICE); + manager.updateViewLayout(getRootView(), lp); + + if (mShowKeyboard) { + if (getContext().getResources().getConfiguration().hardKeyboardHidden == + Configuration.HARDKEYBOARDHIDDEN_YES) { + InputMethodManager inputManager = (InputMethodManager) + getContext().getSystemService(Context.INPUT_METHOD_SERVICE); + inputManager.showSoftInput(this, 0); + } + mShowKeyboard = false; + } + } + + @Override + public void onWindowFocusChanged(boolean hasWindowFocus) { + super.onWindowFocusChanged(hasWindowFocus); + // See Workspace#focusOnSearch() + setFocusableInTouchMode(false); + } + + void showKeyboardOnNextFocus() { + mShowKeyboard = true; + } +} -- cgit v1.2.3