Skip to content
This repository was archived by the owner on Jul 22, 2024. It is now read-only.

Commit 3068043

Browse files
authored
Fixes tray icons animation issues (#3303)
1 parent 1160be6 commit 3068043

2 files changed

Lines changed: 46 additions & 8 deletions

File tree

app/src/common/shared/org/mozilla/vrbrowser/ui/widgets/TrayWidget.java

Lines changed: 28 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@ public class TrayWidget extends UIWidget implements WidgetManagerDelegate.Update
6161
private int mMaxPadding;
6262
private Session mSession;
6363
private WindowWidget mAttachedWindow;
64+
private boolean mIsWindowAttached;
6465

6566
public TrayWidget(Context aContext) {
6667
super(aContext);
@@ -89,6 +90,8 @@ private void initialize(Context aContext) {
8990

9091
updateUI();
9192

93+
mIsWindowAttached = false;
94+
9295
mTrayListeners = new ArrayList<>();
9396

9497
mMinPadding = WidgetPlacement.pixelDimension(getContext(), R.dimen.tray_icon_padding_min);
@@ -221,18 +224,27 @@ public void onConfigurationChanged(Configuration newConfig) {
221224
int ev = motionEvent.getActionMasked();
222225
switch (ev) {
223226
case MotionEvent.ACTION_HOVER_ENTER:
224-
animateViewPadding(view, mMaxPadding, mMinPadding, ICON_ANIMATION_DURATION);
227+
if (!view.isPressed() && ViewUtils.isInsideView(view, (int)motionEvent.getRawX(), (int)motionEvent.getRawY())) {
228+
animateViewPadding(view, mMaxPadding, mMinPadding, ICON_ANIMATION_DURATION);
229+
}
225230
return false;
226231

227232
case MotionEvent.ACTION_HOVER_EXIT:
228-
animateViewPadding(view, mMinPadding, mMaxPadding, ICON_ANIMATION_DURATION);
233+
if (!ViewUtils.isInsideView(view, (int)motionEvent.getRawX(), (int)motionEvent.getRawY())) {
234+
animateViewPadding(view, mMinPadding, mMaxPadding, ICON_ANIMATION_DURATION);
235+
}
229236
return false;
230237
}
231238

232239
return false;
233240
};
234241

235242
private void animateViewPadding(View view, int paddingStart, int paddingEnd, int duration) {
243+
if (view.isPressed() || !mIsWindowAttached) {
244+
view.setPadding(paddingEnd, paddingEnd, paddingEnd, paddingEnd);
245+
return;
246+
}
247+
236248
ValueAnimator animation = ValueAnimator.ofInt(paddingStart, paddingEnd);
237249
animation.setDuration(duration);
238250
animation.setInterpolator(new AccelerateDecelerateInterpolator());
@@ -384,6 +396,8 @@ public void detachFromWindow() {
384396
mViewModel.getIsDownloadsVisible().removeObserver(mIsDownloadsVisible);
385397
mViewModel = null;
386398
}
399+
400+
mIsWindowAttached = false;
387401
}
388402

389403
@Override
@@ -408,9 +422,14 @@ public void attachToWindow(@NonNull WindowWidget aWindow) {
408422
mBinding.setViewmodel(mViewModel);
409423

410424
SessionStore.get().getBookmarkStore().addListener(mBookmarksListener);
425+
426+
mIsWindowAttached = true;
411427
}
412428

413429
private Observer<ObservableBoolean> mIsBookmarksVisible = aBoolean -> {
430+
if (mBinding.bookmarksButton.isHovered()) {
431+
return;
432+
}
414433
if (aBoolean.get()) {
415434
animateViewPadding(mBinding.bookmarksButton, mMaxPadding, mMinPadding, ICON_ANIMATION_DURATION);
416435
} else {
@@ -419,14 +438,21 @@ public void attachToWindow(@NonNull WindowWidget aWindow) {
419438
};
420439

421440
private Observer<ObservableBoolean> mIsHistoryVisible = aBoolean -> {
441+
if (mBinding.historyButton.isHovered()) {
442+
return;
443+
}
422444
if (aBoolean.get()) {
423445
animateViewPadding(mBinding.historyButton, mMaxPadding, mMinPadding, ICON_ANIMATION_DURATION);
446+
424447
} else {
425448
animateViewPadding(mBinding.historyButton, mMinPadding, mMaxPadding, ICON_ANIMATION_DURATION);
426449
}
427450
};
428451

429452
private Observer<ObservableBoolean> mIsDownloadsVisible = aBoolean -> {
453+
if (mBinding.downloadsButton.isHovered()) {
454+
return;
455+
}
430456
if (aBoolean.get()) {
431457
animateViewPadding(mBinding.downloadsButton, mMaxPadding, mMinPadding, ICON_ANIMATION_DURATION);
432458
} else {

app/src/common/shared/org/mozilla/vrbrowser/ui/widgets/WindowWidget.java

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -492,8 +492,12 @@ public void switchPanel(@NonNull Windows.PanelType panelType) {
492492
case BOOKMARKS:
493493
if (mViewModel.getIsHistoryVisible().getValue().get() ||
494494
mViewModel.getIsDownloadsVisible().getValue().get()) {
495-
hidePanel(Windows.PanelType.HISTORY, false);
496-
hidePanel(Windows.PanelType.DOWNLOADS, false);
495+
if (isHistoryVisible()) {
496+
hidePanel(Windows.PanelType.HISTORY, false);
497+
}
498+
if (isDownloadsVisible()) {
499+
hidePanel(Windows.PanelType.DOWNLOADS, false);
500+
}
497501
showPanel(Windows.PanelType.BOOKMARKS, false);
498502

499503
} else if (mViewModel.getIsBookmarksVisible().getValue().get()) {
@@ -506,8 +510,12 @@ public void switchPanel(@NonNull Windows.PanelType panelType) {
506510
case HISTORY:
507511
if (mViewModel.getIsBookmarksVisible().getValue().get() ||
508512
mViewModel.getIsDownloadsVisible().getValue().get()) {
509-
hidePanel(Windows.PanelType.BOOKMARKS, false);
510-
hidePanel(Windows.PanelType.DOWNLOADS, false);
513+
if (isBookmarksVisible()) {
514+
hidePanel(Windows.PanelType.BOOKMARKS, false);
515+
}
516+
if (isDownloadsVisible()) {
517+
hidePanel(Windows.PanelType.DOWNLOADS, false);
518+
}
511519
showPanel(Windows.PanelType.HISTORY, false);
512520

513521
} else if (mViewModel.getIsHistoryVisible().getValue().get()) {
@@ -520,8 +528,12 @@ public void switchPanel(@NonNull Windows.PanelType panelType) {
520528
case DOWNLOADS:
521529
if (mViewModel.getIsBookmarksVisible().getValue().get() ||
522530
mViewModel.getIsHistoryVisible().getValue().get()) {
523-
hidePanel(Windows.PanelType.BOOKMARKS, false);
524-
hidePanel(Windows.PanelType.HISTORY, false);
531+
if (isBookmarksVisible()) {
532+
hidePanel(Windows.PanelType.BOOKMARKS, false);
533+
}
534+
if (isHistoryVisible()) {
535+
hidePanel(Windows.PanelType.HISTORY, false);
536+
}
525537
showPanel(Windows.PanelType.DOWNLOADS, false);
526538

527539
} else if (mViewModel.getIsDownloadsVisible().getValue().get()) {

0 commit comments

Comments
 (0)