From 30680435f2aaddba7b01a6a477955e9a885488e4 Mon Sep 17 00:00:00 2001 From: Manuel Martin Date: Fri, 1 May 2020 18:19:20 +0200 Subject: [PATCH] Fixes tray icons animation issues (#3303) --- .../vrbrowser/ui/widgets/TrayWidget.java | 30 +++++++++++++++++-- .../vrbrowser/ui/widgets/WindowWidget.java | 24 +++++++++++---- 2 files changed, 46 insertions(+), 8 deletions(-) diff --git a/app/src/common/shared/org/mozilla/vrbrowser/ui/widgets/TrayWidget.java b/app/src/common/shared/org/mozilla/vrbrowser/ui/widgets/TrayWidget.java index 861fe1e3c..9c85d9e58 100644 --- a/app/src/common/shared/org/mozilla/vrbrowser/ui/widgets/TrayWidget.java +++ b/app/src/common/shared/org/mozilla/vrbrowser/ui/widgets/TrayWidget.java @@ -61,6 +61,7 @@ public class TrayWidget extends UIWidget implements WidgetManagerDelegate.Update private int mMaxPadding; private Session mSession; private WindowWidget mAttachedWindow; + private boolean mIsWindowAttached; public TrayWidget(Context aContext) { super(aContext); @@ -89,6 +90,8 @@ private void initialize(Context aContext) { updateUI(); + mIsWindowAttached = false; + mTrayListeners = new ArrayList<>(); mMinPadding = WidgetPlacement.pixelDimension(getContext(), R.dimen.tray_icon_padding_min); @@ -221,11 +224,15 @@ public void onConfigurationChanged(Configuration newConfig) { int ev = motionEvent.getActionMasked(); switch (ev) { case MotionEvent.ACTION_HOVER_ENTER: - animateViewPadding(view, mMaxPadding, mMinPadding, ICON_ANIMATION_DURATION); + if (!view.isPressed() && ViewUtils.isInsideView(view, (int)motionEvent.getRawX(), (int)motionEvent.getRawY())) { + animateViewPadding(view, mMaxPadding, mMinPadding, ICON_ANIMATION_DURATION); + } return false; case MotionEvent.ACTION_HOVER_EXIT: - animateViewPadding(view, mMinPadding, mMaxPadding, ICON_ANIMATION_DURATION); + if (!ViewUtils.isInsideView(view, (int)motionEvent.getRawX(), (int)motionEvent.getRawY())) { + animateViewPadding(view, mMinPadding, mMaxPadding, ICON_ANIMATION_DURATION); + } return false; } @@ -233,6 +240,11 @@ public void onConfigurationChanged(Configuration newConfig) { }; private void animateViewPadding(View view, int paddingStart, int paddingEnd, int duration) { + if (view.isPressed() || !mIsWindowAttached) { + view.setPadding(paddingEnd, paddingEnd, paddingEnd, paddingEnd); + return; + } + ValueAnimator animation = ValueAnimator.ofInt(paddingStart, paddingEnd); animation.setDuration(duration); animation.setInterpolator(new AccelerateDecelerateInterpolator()); @@ -384,6 +396,8 @@ public void detachFromWindow() { mViewModel.getIsDownloadsVisible().removeObserver(mIsDownloadsVisible); mViewModel = null; } + + mIsWindowAttached = false; } @Override @@ -408,9 +422,14 @@ public void attachToWindow(@NonNull WindowWidget aWindow) { mBinding.setViewmodel(mViewModel); SessionStore.get().getBookmarkStore().addListener(mBookmarksListener); + + mIsWindowAttached = true; } private Observer mIsBookmarksVisible = aBoolean -> { + if (mBinding.bookmarksButton.isHovered()) { + return; + } if (aBoolean.get()) { animateViewPadding(mBinding.bookmarksButton, mMaxPadding, mMinPadding, ICON_ANIMATION_DURATION); } else { @@ -419,14 +438,21 @@ public void attachToWindow(@NonNull WindowWidget aWindow) { }; private Observer mIsHistoryVisible = aBoolean -> { + if (mBinding.historyButton.isHovered()) { + return; + } if (aBoolean.get()) { animateViewPadding(mBinding.historyButton, mMaxPadding, mMinPadding, ICON_ANIMATION_DURATION); + } else { animateViewPadding(mBinding.historyButton, mMinPadding, mMaxPadding, ICON_ANIMATION_DURATION); } }; private Observer mIsDownloadsVisible = aBoolean -> { + if (mBinding.downloadsButton.isHovered()) { + return; + } if (aBoolean.get()) { animateViewPadding(mBinding.downloadsButton, mMaxPadding, mMinPadding, ICON_ANIMATION_DURATION); } else { diff --git a/app/src/common/shared/org/mozilla/vrbrowser/ui/widgets/WindowWidget.java b/app/src/common/shared/org/mozilla/vrbrowser/ui/widgets/WindowWidget.java index f683c478c..6babc93f8 100644 --- a/app/src/common/shared/org/mozilla/vrbrowser/ui/widgets/WindowWidget.java +++ b/app/src/common/shared/org/mozilla/vrbrowser/ui/widgets/WindowWidget.java @@ -492,8 +492,12 @@ public void switchPanel(@NonNull Windows.PanelType panelType) { case BOOKMARKS: if (mViewModel.getIsHistoryVisible().getValue().get() || mViewModel.getIsDownloadsVisible().getValue().get()) { - hidePanel(Windows.PanelType.HISTORY, false); - hidePanel(Windows.PanelType.DOWNLOADS, false); + if (isHistoryVisible()) { + hidePanel(Windows.PanelType.HISTORY, false); + } + if (isDownloadsVisible()) { + hidePanel(Windows.PanelType.DOWNLOADS, false); + } showPanel(Windows.PanelType.BOOKMARKS, false); } else if (mViewModel.getIsBookmarksVisible().getValue().get()) { @@ -506,8 +510,12 @@ public void switchPanel(@NonNull Windows.PanelType panelType) { case HISTORY: if (mViewModel.getIsBookmarksVisible().getValue().get() || mViewModel.getIsDownloadsVisible().getValue().get()) { - hidePanel(Windows.PanelType.BOOKMARKS, false); - hidePanel(Windows.PanelType.DOWNLOADS, false); + if (isBookmarksVisible()) { + hidePanel(Windows.PanelType.BOOKMARKS, false); + } + if (isDownloadsVisible()) { + hidePanel(Windows.PanelType.DOWNLOADS, false); + } showPanel(Windows.PanelType.HISTORY, false); } else if (mViewModel.getIsHistoryVisible().getValue().get()) { @@ -520,8 +528,12 @@ public void switchPanel(@NonNull Windows.PanelType panelType) { case DOWNLOADS: if (mViewModel.getIsBookmarksVisible().getValue().get() || mViewModel.getIsHistoryVisible().getValue().get()) { - hidePanel(Windows.PanelType.BOOKMARKS, false); - hidePanel(Windows.PanelType.HISTORY, false); + if (isBookmarksVisible()) { + hidePanel(Windows.PanelType.BOOKMARKS, false); + } + if (isHistoryVisible()) { + hidePanel(Windows.PanelType.HISTORY, false); + } showPanel(Windows.PanelType.DOWNLOADS, false); } else if (mViewModel.getIsDownloadsVisible().getValue().get()) {