OSDN Git Service

Hack to hopefully reduce soft keyboard flicker in Chrome OS tablet mode
authorBraden Farmer <farmerbb@gmail.com>
Thu, 17 Jan 2019 05:06:19 +0000 (22:06 -0700)
committerBraden Farmer <farmerbb@gmail.com>
Thu, 17 Jan 2019 05:07:56 +0000 (22:07 -0700)
app/src/main/java/com/farmerbb/taskbar/service/StartMenuService.java

index f9d8941..ead1fb8 100644 (file)
@@ -94,6 +94,7 @@ public class StartMenuService extends Service {
 
     private boolean shouldShowSearchBox = false;
     private boolean hasSubmittedQuery = false;
+    private boolean hasHardwareKeyboard = false;
 
     private int layoutId = R.layout.start_menu_left;
 
@@ -175,6 +176,8 @@ public class StartMenuService extends Service {
     public void onCreate() {
         super.onCreate();
 
+        hasHardwareKeyboard = getResources().getConfiguration().keyboard != Configuration.KEYBOARD_NOKEYS;
+
         SharedPreferences pref = U.getSharedPreferences(this);
         if(pref.getBoolean("taskbar_active", false) || LauncherHelper.getInstance().isOnHomeScreen()) {
             if(U.canDrawOverlays(this))
@@ -192,8 +195,6 @@ public class StartMenuService extends Service {
         IconCache.getInstance(this).clearCache();
 
         final SharedPreferences pref = U.getSharedPreferences(this);
-        final boolean hasHardwareKeyboard = getResources().getConfiguration().keyboard != Configuration.KEYBOARD_NOKEYS;
-
         switch(pref.getString("show_search_bar", "keyboard")) {
             case "always":
                 shouldShowSearchBox = true;
@@ -360,26 +361,6 @@ public class StartMenuService extends Service {
                 }
             });
 
-            searchView.setOnQueryTextFocusChangeListener((view, b) -> {
-                if(!hasHardwareKeyboard) {
-                    ViewGroup.LayoutParams params1 = startMenu.getLayoutParams();
-                    params1.height = getResources().getDimensionPixelSize(
-                            b && !isSecondScreenDisablingKeyboard()
-                                    ? R.dimen.start_menu_height_half
-                                    : R.dimen.start_menu_height);
-                    startMenu.setLayoutParams(params1);
-                }
-
-                if(!b) {
-                    if(hasHardwareKeyboard && Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP_MR1)
-                        LocalBroadcastManager.getInstance(this).sendBroadcast(new Intent("com.farmerbb.taskbar.HIDE_START_MENU"));
-                    else {
-                        InputMethodManager imm = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE);
-                        imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
-                    }
-                }
-            });
-
             searchView.setImeOptions(EditorInfo.IME_ACTION_DONE | EditorInfo.IME_FLAG_NO_EXTRACT_UI);
 
             LinearLayout powerButton = layout.findViewById(R.id.power_button);
@@ -634,7 +615,16 @@ public class StartMenuService extends Service {
                     startActivity(intent);
             }
 
-            if(searchView.getVisibility() == View.VISIBLE) searchView.requestFocus();
+            EditText editText = searchView.findViewById(R.id.search_src_text);
+            if(searchView.getVisibility() == View.VISIBLE) {
+                if(hasHardwareKeyboard && U.isChromeOs(this)) {
+                    searchView.setIconifiedByDefault(true);
+
+                    if(editText != null)
+                        editText.setShowSoftInputOnFocus(false);
+                } else
+                    searchView.requestFocus();
+            }
 
             refreshApps(false);
 
@@ -642,6 +632,34 @@ public class StartMenuService extends Service {
                 if(Build.VERSION.SDK_INT > Build.VERSION_CODES.N_MR1)
                     layout.setAlpha(1);
 
+                if(hasHardwareKeyboard && U.isChromeOs(this)) {
+                    searchView.setIconifiedByDefault(false);
+                    if(editText != null)
+                        editText.setShowSoftInputOnFocus(true);
+
+                    searchView.requestFocus();
+                }
+
+                searchView.setOnQueryTextFocusChangeListener((view, b) -> {
+                    if(!hasHardwareKeyboard) {
+                        ViewGroup.LayoutParams params1 = startMenu.getLayoutParams();
+                        params1.height = getResources().getDimensionPixelSize(
+                                b && !isSecondScreenDisablingKeyboard()
+                                        ? R.dimen.start_menu_height_half
+                                        : R.dimen.start_menu_height);
+                        startMenu.setLayoutParams(params1);
+                    }
+
+                    if(!b) {
+                        if(hasHardwareKeyboard && Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP_MR1)
+                            LocalBroadcastManager.getInstance(this).sendBroadcast(new Intent("com.farmerbb.taskbar.HIDE_START_MENU"));
+                        else {
+                            InputMethodManager imm = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE);
+                            imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
+                        }
+                    }
+                });
+
                 InputMethodManager imm = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE);
                 imm.hideSoftInputFromWindow(layout.getWindowToken(), 0);
             }, 100);
@@ -661,6 +679,7 @@ public class StartMenuService extends Service {
                 layout.setVisibility(View.GONE);
                 searchView.setQuery(null, false);
                 searchView.setIconified(true);
+                searchView.setOnQueryTextFocusChangeListener(null);
                 hasSubmittedQuery = false;
 
                 if(shouldReset) {