From 38f18b8837ff5db9eb9b1b34f2a5530e940b95ad Mon Sep 17 00:00:00 2001 From: Chilun Date: Mon, 18 Mar 2019 11:56:46 +0800 Subject: [PATCH] Hide keyboard while the home button get pressed For multi-client IME, launcher need to call hideSoftInputFromWindow() by using the InputMethodManager instance that mapped the presented display while its home button get pressed. Bug: 120114697 Test: Manual verified that multi-client IME can be closed correctly. Change-Id: I2edaa12d2e9c68d0e6dae5ca45f23abd9ab47acd --- .../launcher/LauncherActivity.java | 35 +++++++++++-------- 1 file changed, 20 insertions(+), 15 deletions(-) diff --git a/samples/MultiDisplay/src/com/example/android/multidisplay/launcher/LauncherActivity.java b/samples/MultiDisplay/src/com/example/android/multidisplay/launcher/LauncherActivity.java index 277ebbde2..6901126ab 100644 --- a/samples/MultiDisplay/src/com/example/android/multidisplay/launcher/LauncherActivity.java +++ b/samples/MultiDisplay/src/com/example/android/multidisplay/launcher/LauncherActivity.java @@ -23,20 +23,17 @@ import android.animation.AnimatorListenerAdapter; import android.app.ActivityOptions; import android.app.AlertDialog; import android.app.Application; -import android.content.Context; import android.content.Intent; -import android.content.res.Configuration; import android.content.SharedPreferences; +import android.content.res.Configuration; import android.hardware.display.DisplayManager; import android.os.Bundle; -import com.google.android.material.circularreveal.cardview.CircularRevealCardView; -import com.google.android.material.floatingactionbutton.FloatingActionButton; import android.view.Display; import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; import android.view.ViewAnimationUtils; -import android.view.WindowManager; +import android.view.inputmethod.InputMethodManager; import android.widget.AdapterView; import android.widget.AdapterView.OnItemSelectedListener; import android.widget.ArrayAdapter; @@ -46,21 +43,19 @@ import android.widget.ImageButton; import android.widget.PopupMenu; import android.widget.Spinner; -import com.example.android.multidisplay.R; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.HashSet; -import java.util.List; -import java.util.Set; - import androidx.fragment.app.FragmentActivity; import androidx.fragment.app.FragmentManager; -import androidx.lifecycle.LiveData; -import androidx.lifecycle.ViewModel; import androidx.lifecycle.ViewModelProvider; import androidx.lifecycle.ViewModelProvider.AndroidViewModelFactory; +import com.example.android.multidisplay.R; +import com.google.android.material.circularreveal.cardview.CircularRevealCardView; +import com.google.android.material.floatingactionbutton.FloatingActionButton; + +import java.util.ArrayList; +import java.util.HashSet; +import java.util.Set; + /** * Main launcher activity. It's launch mode is configured as "singleTop" to allow showing on * multiple displays and to ensure a single instance per each display. @@ -188,6 +183,16 @@ public class LauncherActivity extends FragmentActivity implements AppPickedCallb public void onNewIntent(Intent intent) { super.onNewIntent(intent); + + if (Intent.ACTION_MAIN.equals(intent.getAction())) { + // Hide keyboard. + final View v = getWindow().peekDecorView(); + if (v != null && v.getWindowToken() != null) { + getSystemService(InputMethodManager.class).hideSoftInputFromWindow( + v.getWindowToken(), 0); + } + } + // A new intent will bring the launcher to top. Hide the app drawer to reset the state. showAppDrawer(false); }