diff options
4 files changed, 37 insertions, 6 deletions
diff --git a/src/com/android/launcher3/ExtendedEditText.java b/src/com/android/launcher3/ExtendedEditText.java index bf4551b26..f7737f423 100644 --- a/src/com/android/launcher3/ExtendedEditText.java +++ b/src/com/android/launcher3/ExtendedEditText.java @@ -19,6 +19,7 @@ import android.content.Context; import android.util.AttributeSet; import android.view.DragEvent; import android.view.KeyEvent; +import android.view.inputmethod.InputMethodManager; import android.widget.EditText; @@ -27,6 +28,8 @@ import android.widget.EditText; */ public class ExtendedEditText extends EditText { + private boolean mShowImeAfterFirstLayout; + /** * Implemented by listeners of the back key. */ @@ -37,11 +40,11 @@ public class ExtendedEditText extends EditText { private OnBackKeyListener mBackKeyListener; public ExtendedEditText(Context context) { - super(context); + this(context, null, 0); } public ExtendedEditText(Context context, AttributeSet attrs) { - super(context, attrs); + this(context, attrs, 0); } public ExtendedEditText(Context context, AttributeSet attrs, int defStyleAttr) { @@ -69,4 +72,29 @@ public class ExtendedEditText extends EditText { // We don't want this view to interfere with Launcher own drag and drop. return false; } + + @Override + protected void onLayout(boolean changed, int left, int top, int right, int bottom) { + super.onLayout(changed, left, top, right, bottom); + if (mShowImeAfterFirstLayout) { + // soft input only shows one frame after the layout of the EditText happens, + post(new Runnable() { + @Override + public void run() { + showSoftInput(); + mShowImeAfterFirstLayout = false; + } + }); + } + } + + public void showKeyboard() { + mShowImeAfterFirstLayout = !showSoftInput(); + } + + private boolean showSoftInput() { + return requestFocus() && + ((InputMethodManager) getContext().getSystemService(Context.INPUT_METHOD_SERVICE)) + .showSoftInput(this, InputMethodManager.SHOW_FORCED); + } } diff --git a/src/com/android/launcher3/Launcher.java b/src/com/android/launcher3/Launcher.java index c919db8b7..f5bcf5c54 100644 --- a/src/com/android/launcher3/Launcher.java +++ b/src/com/android/launcher3/Launcher.java @@ -991,7 +991,7 @@ public class Launcher extends Activity // view after launching an app, as they may be depending on the UI to be static to // switch to another app, otherwise, if it was showAppsView(false /* animated */, !launchedFromApp /* updatePredictedApps */, - false /* focusSearchBar */); + mAppsView.shouldRestoreImeState() /* focusSearchBar */); } else if (mOnResumeState == State.WIDGETS) { showWidgetsView(false, false); } diff --git a/src/com/android/launcher3/allapps/AllAppsContainerView.java b/src/com/android/launcher3/allapps/AllAppsContainerView.java index a8e2140c2..4e1936f17 100644 --- a/src/com/android/launcher3/allapps/AllAppsContainerView.java +++ b/src/com/android/launcher3/allapps/AllAppsContainerView.java @@ -25,6 +25,7 @@ import android.text.Selection; import android.text.Spannable; import android.text.SpannableString; import android.text.SpannableStringBuilder; +import android.text.TextUtils; import android.text.method.TextKeyListener; import android.util.AttributeSet; import android.view.KeyEvent; @@ -51,7 +52,6 @@ import com.android.launcher3.config.FeatureFlags; import com.android.launcher3.folder.Folder; import com.android.launcher3.graphics.TintedDrawableSpan; import com.android.launcher3.keyboard.FocusedItemDecorator; -import com.android.launcher3.userevent.nano.LauncherLogProto; import com.android.launcher3.userevent.nano.LauncherLogProto.Target; import com.android.launcher3.util.ComponentKey; @@ -707,4 +707,8 @@ public class AllAppsContainerView extends BaseContainerView implements DragSourc public void fillInLaunchSourceData(View v, ItemInfo info, Target target, Target targetParent) { targetParent.containerType = mAppsRecyclerView.getContainerType(v); } + + public boolean shouldRestoreImeState() { + return !TextUtils.isEmpty(mSearchInput.getText()); + } } diff --git a/src/com/android/launcher3/allapps/AllAppsSearchBarController.java b/src/com/android/launcher3/allapps/AllAppsSearchBarController.java index 9a48367cd..41abb4c1d 100644 --- a/src/com/android/launcher3/allapps/AllAppsSearchBarController.java +++ b/src/com/android/launcher3/allapps/AllAppsSearchBarController.java @@ -163,8 +163,7 @@ public abstract class AllAppsSearchBarController * Focuses the search field to handle key events. */ public void focusSearchField() { - mInput.requestFocus(); - mInputMethodManager.showSoftInput(mInput, InputMethodManager.SHOW_IMPLICIT); + mInput.showKeyboard(); } /** |