From 596f0f6dda6a55bc2a7cde8be87068d5fb1e7b82 Mon Sep 17 00:00:00 2001 From: YTKAB0BP Date: Wed, 13 Nov 2024 21:26:37 +0300 Subject: [PATCH] Fix unfold menus soft-lock after tab is switched to another --- app/build.gradle | 8 ++++++-- .../slicebeam/components/UnfoldMenu.java | 18 ++++++++++++++++-- .../components/bed_menu/SliceMenu.java | 4 ++-- .../slicebeam/fragment/BedFragment.java | 5 ++++- 4 files changed, 28 insertions(+), 7 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 48b82e4..f678496 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -12,7 +12,7 @@ android { applicationId "ru.ytkab0bp.slicebeam" minSdk 21 targetSdk 34 - versionCode 2 + versionCode 3 versionName "0.1.0" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" @@ -34,8 +34,12 @@ android { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' - buildConfigField "boolean", "IS_GOOGLE_PLAY", "true" + buildConfigField "boolean", "IS_GOOGLE_PLAY", "false" buildConfigField "String", "COMMIT", "\"" + commit + "\"" + ndk { + //noinspection ChromeOsAbiSupport + abiFilters "armeabi-v7a", "arm64-v8a" + } } debug { buildConfigField "boolean", "IS_GOOGLE_PLAY", "false" diff --git a/app/src/main/java/ru/ytkab0bp/slicebeam/components/UnfoldMenu.java b/app/src/main/java/ru/ytkab0bp/slicebeam/components/UnfoldMenu.java index 21ecd48..bc583cc 100644 --- a/app/src/main/java/ru/ytkab0bp/slicebeam/components/UnfoldMenu.java +++ b/app/src/main/java/ru/ytkab0bp/slicebeam/components/UnfoldMenu.java @@ -27,6 +27,7 @@ public abstract class UnfoldMenu { protected BedFragment fragment; private boolean isVisible; + private boolean isDismissing; private SpringAnimation spring; private DynamicAnimation.OnAnimationUpdateListener updateListener; private FrameLayout containerLayout; @@ -121,13 +122,21 @@ public abstract class UnfoldMenu { return true; } + @Override + protected void onAttachedToWindow() { + super.onAttachedToWindow(); + + if (isVisible) { + onCreate(); + } + } + @Override protected void onDetachedFromWindow() { super.onDetachedFromWindow(); if (isVisible) { onDestroy(); - isVisible = false; } } }; @@ -138,7 +147,6 @@ public abstract class UnfoldMenu { rootView.setTranslationX(fromTranslationX); rootView.setTranslationY(fromTranslationY); - onCreate(); dimmView = new View(ctx); dimmView.setBackgroundColor(0x40000000); dimmView.setTranslationX(toTranslationX); @@ -207,6 +215,10 @@ public abstract class UnfoldMenu { updateListener.onAnimationUpdate(spring, 1f, 0f); } + public boolean isAttached() { + return rootView.getParent() != null && !isDismissing; + } + public void dismiss() { dismiss(false); } @@ -215,7 +227,9 @@ public abstract class UnfoldMenu { if (!isVisible) return; this.isVisible = false; + isDismissing = true; onDestroy(); + isDismissing = false; if (alphaOnly) { ValueAnimator anim = ValueAnimator.ofFloat(0, 1).setDuration(150); diff --git a/app/src/main/java/ru/ytkab0bp/slicebeam/components/bed_menu/SliceMenu.java b/app/src/main/java/ru/ytkab0bp/slicebeam/components/bed_menu/SliceMenu.java index 0ce1aa4..f82c5b1 100644 --- a/app/src/main/java/ru/ytkab0bp/slicebeam/components/bed_menu/SliceMenu.java +++ b/app/src/main/java/ru/ytkab0bp/slicebeam/components/bed_menu/SliceMenu.java @@ -71,7 +71,7 @@ public class SliceMenu extends ListBedMenu { protected List onCreateItems(boolean portrait) { lastUid = SliceBeam.CONFIG_UID; List items = new ArrayList<>(Arrays.asList( - new BedMenuItem(R.string.MenuSliceInfo, R.drawable.square_stack_up_outline_28).onClick(v -> fragment.showUnfoldMenu(new PrintInfoMenu(), v)), + new BedMenuItem(R.string.MenuSliceInfo, R.drawable.square_stack_up_outline_28).onClick(v -> fragment.showUnfoldMenu(new LayersMenu(), v)), new BedMenuItem(R.string.MenuSliceExportToFile, R.drawable.folder_simple_arrow_right_outline_28).onClick(v -> { if (fragment.getContext() instanceof Activity) { Activity act = (Activity) fragment.getContext(); @@ -176,7 +176,7 @@ public class SliceMenu extends ListBedMenu { }); } - private final static class PrintInfoMenu extends UnfoldMenu { + private final static class LayersMenu extends UnfoldMenu { private PositionScrollView fromTrack, toTrack; private TextView title; diff --git a/app/src/main/java/ru/ytkab0bp/slicebeam/fragment/BedFragment.java b/app/src/main/java/ru/ytkab0bp/slicebeam/fragment/BedFragment.java index 1057514..3fcb0cb 100644 --- a/app/src/main/java/ru/ytkab0bp/slicebeam/fragment/BedFragment.java +++ b/app/src/main/java/ru/ytkab0bp/slicebeam/fragment/BedFragment.java @@ -123,7 +123,10 @@ public class BedFragment extends Fragment { public void showUnfoldMenu(UnfoldMenu menu, View from) { if (currentUnfoldMenu != null) return; - menu.setOnDismiss(()-> currentUnfoldMenu = null); + menu.setOnDismiss(()-> { + if (menu.isAttached()) return; + currentUnfoldMenu = null; + }); currentUnfoldMenu = menu; menu.show(from, this); }