Hide and show keyboard with insets controller

This commit is contained in:
tehcneko committed 2022-01-23 20:54:34 +08:00
1 parent d8264ad0d7
commit d48919a5c3
5 files changed
+46 -22

No files matched your search

@@ -56,14 +56,22 @@ public class WindowInsetsAnimationHelper extends WindowInsetsAnimationCompat.Cal
if (animation == null) {
return insets;
}
for (View view : views) {
if (view == null) {
continue;
WindowInsetsAnimationCompat imeAnimation = null;
for (WindowInsetsAnimationCompat animation : runningAnimations) {
if ((animation.getTypeMask() & WindowInsetsCompat.Type.ime()) != 0) {
imeAnimation = animation;
break;
}
}
if (imeAnimation != null) {
for (View view : views) {
if (view == null) {
continue;
}
int startPadding = startPaddings.containsKey(view) ? startPaddings.get(view) : 0;
int endPadding = endPaddings.containsKey(view) ? endPaddings.get(view) : 0;
view.setTranslationY(MathUtils.lerp(endPadding - startPadding, 0, animation.getInterpolatedFraction()));
}
int startPadding = startPaddings.containsKey(view) ? startPaddings.get(view) : 0;
int endPadding = endPaddings.containsKey(view) ? endPaddings.get(view) : 0;
int offset = MathUtils.lerp(-(startPadding - endPadding), 0, animation.getInterpolatedFraction());
view.setTranslationY(offset);
}
return insets;
}
@@ -34,6 +34,7 @@ import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.annotation.StringRes;
import androidx.core.view.ViewCompat;
import androidx.core.view.WindowInsetsCompat;
import androidx.core.view.WindowInsetsControllerCompat;
import androidx.drawerlayout.widget.DrawerLayout;
import androidx.fragment.app.FragmentActivity;
@@ -185,9 +186,7 @@ public abstract class BaseScene extends SceneFragment {
}
public void setLightStatusBar(boolean set) {
if (insetsController == null) {
insetsController = ViewCompat.getWindowInsetsController(requireActivity().getWindow().getDecorView());
}
var insetsController = getInsetsController();
if (insetsController != null) {
insetsController.setAppearanceLightStatusBars(set && (requireActivity().getResources().getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_YES) <= 0);
}
@@ -222,7 +221,7 @@ public abstract class BaseScene extends SceneFragment {
setNavCheckedItem(getNavCheckedItem());
// Hide soft ime
AppHelper.hideSoftInput(getActivity());
hideSoftInput();
setLightStatusBar(needWhiteStatusBar);
}
@@ -247,25 +246,46 @@ public abstract class BaseScene extends SceneFragment {
}
public void hideSoftInput() {
FragmentActivity activity = getActivity();
if (null != activity) {
AppHelper.hideSoftInput(activity);
var insetsController = getInsetsController();
if (insetsController != null) {
insetsController.hide(WindowInsetsCompat.Type.ime());
}
}
public void showSoftInput(@Nullable View view) {
FragmentActivity activity = getActivity();
if (null != activity && null != view) {
AppHelper.showSoftInput(activity, view);
if (view != null) {
view.requestFocus();
view.post(() -> {
var insetsController = getInsetsController();
if (insetsController != null) {
insetsController.show(WindowInsetsCompat.Type.ime());
}
});
}
}
public WindowInsetsControllerCompat getInsetsController() {
if (insetsController == null) {
var activity = getActivity();
if (activity != null) {
insetsController = ViewCompat.getWindowInsetsController(activity.getWindow().getDecorView());
}
}
return insetsController;
}
@Override
public void onResume() {
super.onResume();
Analytics.onSceneView(this);
}
@Override
public void onDestroy() {
super.onDestroy();
insetsController = null;
}
@Override
public void onSaveInstanceState(@NonNull Bundle outState) {
super.onSaveInstanceState(outState);
@@ -75,7 +75,6 @@ import com.hippo.ehviewer.widget.GalleryInfoContentHelper;
import com.hippo.ehviewer.widget.SearchBar;
import com.hippo.scene.Announcer;
import com.hippo.scene.SceneFragment;
import com.hippo.util.AppHelper;
import com.hippo.widget.ContentLayout;
import com.hippo.widget.FabLayout;
import com.hippo.widget.SearchBarMover;
@@ -721,7 +720,6 @@ public class FavoritesScene extends BaseScene implements
}
builder.setError(null);
mHelper.goTo(goTo);
AppHelper.hideSoftInput(dialog);
dialog.dismiss();
});
}
@@ -104,7 +104,6 @@ import com.hippo.ehviewer.widget.SearchBar;
import com.hippo.ehviewer.widget.SearchLayout;
import com.hippo.scene.Announcer;
import com.hippo.scene.SceneFragment;
import com.hippo.util.AppHelper;
import com.hippo.util.ExceptionUtils;
import com.hippo.view.BringOutTransition;
import com.hippo.view.ViewTransition;
@@ -963,7 +962,6 @@ public final class GalleryListScene extends BaseScene
}
builder.setError(null);
mHelper.goTo(goTo);
AppHelper.hideSoftInput(dialog);
dialog.dismiss();
});
}