OSDN Git Service

Couple more fixes
[android-x86/packages-apps-Taskbar.git] / app / src / main / java / com / farmerbb / taskbar / ui / UIController.java
index ae806e1..2d700e3 100644 (file)
@@ -17,15 +17,22 @@ package com.farmerbb.taskbar.ui;
 
 import android.content.Context;
 import android.content.SharedPreferences;
+import android.provider.Settings;
+import android.view.View;
 
+import com.farmerbb.taskbar.BuildConfig;
+import com.farmerbb.taskbar.R;
 import com.farmerbb.taskbar.activity.SecondaryHomeActivity;
-import com.farmerbb.taskbar.util.LauncherHelper;
+import com.farmerbb.taskbar.helper.LauncherHelper;
+import com.farmerbb.taskbar.util.CompatUtils;
+import com.farmerbb.taskbar.util.TaskbarPosition;
 import com.farmerbb.taskbar.util.U;
 
-import static com.farmerbb.taskbar.util.SharedPreferenceConstant.SP_KEY_TASKBAR_ACTIVE;
+import static com.farmerbb.taskbar.util.Constants.*;
 
 public abstract class UIController {
     protected Context context;
+    private boolean prevImeVisibility;
 
     public UIController(Context context) {
         this.context = context;
@@ -40,20 +47,56 @@ public abstract class UIController {
         LauncherHelper helper = LauncherHelper.getInstance();
 
         boolean shouldProceed;
-        if(helper.isOnSecondaryHomeScreen())
+        if(helper.isOnSecondaryHomeScreen(context))
             shouldProceed = host instanceof SecondaryHomeActivity;
         else
             shouldProceed = true;
 
-        if(shouldProceed && (pref.getBoolean(SP_KEY_TASKBAR_ACTIVE, false)
-                || helper.isOnHomeScreen())) {
+        if(shouldProceed && (pref.getBoolean(PREF_TASKBAR_ACTIVE, false)
+                || helper.isOnHomeScreen(context))) {
             if(U.canDrawOverlays(context))
                 runnable.run();
             else {
-                pref.edit().putBoolean(SP_KEY_TASKBAR_ACTIVE, false).apply();
+                pref.edit().putBoolean(PREF_TASKBAR_ACTIVE, false).apply();
                 host.terminate();
             }
         } else
             host.terminate();
     }
+
+    protected int getBottomMargin(Context context, UIHost host) {
+        return host instanceof SecondaryHomeActivity
+                && !U.isShowHideNavbarSupported()
+                && TaskbarPosition.isBottom(context) ? U.getNavbarHeight(context) : -1;
+    }
+
+    protected void applyMarginFix(UIHost host, View layout, ViewParams params) {
+        if(U.getCurrentApiVersion() <= 29.0 || !(host instanceof SecondaryHomeActivity))
+            return;
+
+        layout.setOnApplyWindowInsetsListener((v, insets) -> {
+            boolean isImeVisible = CompatUtils.isImeVisible(v);
+            if(isImeVisible != prevImeVisibility) {
+                prevImeVisibility = isImeVisible;
+
+                ViewParams newParams = isImeVisible ? params.updateBottomMargin(0) : params;
+                host.updateViewLayout(layout, newParams);
+
+                if(isImeFixDisabled() && !U.isLibrary(context)) {
+                    SharedPreferences pref = U.getSharedPreferences(context);
+                    if(!pref.getBoolean(PREF_DESKTOP_MODE_IME_FIX, false)) {
+                        pref.edit().putBoolean(PREF_DESKTOP_MODE_IME_FIX, true).apply();
+                        U.showToastLong(context, R.string.tb_desktop_mode_ime_fix_toast);
+                    }
+                }
+            }
+
+            return insets;
+        });
+    }
+
+    protected boolean isImeFixDisabled() {
+        String ime = Settings.Secure.getString(context.getContentResolver(), Settings.Secure.DEFAULT_INPUT_METHOD);
+        return !ime.startsWith(BuildConfig.BASE_APPLICATION_ID) && !ime.startsWith("com.farmerbb.secondscreen");
+    }
 }
\ No newline at end of file