@@ -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 {
0 commit comments