Skip to content
This repository was archived by the owner on Feb 9, 2023. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
44 changes: 33 additions & 11 deletions hover/src/main/java/io/mattcarroll/hover/FloatingTab.java
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,8 @@ class FloatingTab extends HoverFrameLayout {
private int mTabSize;
private View mTabView;
private Dock mDock;
private AnimatorSet mAnimatorSetDisappear;
private AnimatorSet mAnimatorSetAppear;

public FloatingTab(@NonNull Context context, @NonNull String tabId) {
super(context);
Expand Down Expand Up @@ -100,15 +102,16 @@ public void enableDebugMode(boolean debugMode) {
}

public void appear(@Nullable final Runnable onAppeared) {
AnimatorSet animatorSet = new AnimatorSet();
cancelAnimatorSetAppearIfNeeded();
mAnimatorSetAppear = new AnimatorSet();
ObjectAnimator scaleX = ObjectAnimator.ofFloat(this, "scaleX", 0.0f, 1.0f);
ObjectAnimator scaleY = ObjectAnimator.ofFloat(this, "scaleY", 0.0f, 1.0f);
animatorSet.setDuration(APPEARING_ANIMATION_DURATION);
animatorSet.setInterpolator(new OvershootInterpolator());
animatorSet.playTogether(scaleX, scaleY);
animatorSet.start();
mAnimatorSetAppear.setDuration(APPEARING_ANIMATION_DURATION);
mAnimatorSetAppear.setInterpolator(new OvershootInterpolator());
mAnimatorSetAppear.playTogether(scaleX, scaleY);
mAnimatorSetAppear.start();

animatorSet.addListener(new Animator.AnimatorListener() {
mAnimatorSetAppear.addListener(new Animator.AnimatorListener() {
@Override
public void onAnimationStart(Animator animation) {
}
Expand All @@ -133,18 +136,22 @@ public void onAnimationRepeat(Animator animation) {
}

public void appearImmediate() {
cancelAnimatorSetDisappearIfNeeded();
setVisibility(VISIBLE);
setScaleX(1.0f);
setScaleY(1.0f);
}

public void disappear(@Nullable final Runnable onDisappeared) {
AnimatorSet animatorSet = new AnimatorSet();
cancelAnimatorSetDisappearIfNeeded();
mAnimatorSetDisappear = new AnimatorSet();
ObjectAnimator scaleX = ObjectAnimator.ofFloat(this, "scaleX", 0.0f);
ObjectAnimator scaleY = ObjectAnimator.ofFloat(this, "scaleY", 0.0f);
animatorSet.setDuration(APPEARING_ANIMATION_DURATION);
animatorSet.playTogether(scaleX, scaleY);
animatorSet.start();
mAnimatorSetDisappear.setDuration(APPEARING_ANIMATION_DURATION);
mAnimatorSetDisappear.playTogether(scaleX, scaleY);
mAnimatorSetDisappear.start();

animatorSet.addListener(new Animator.AnimatorListener() {
mAnimatorSetDisappear.addListener(new Animator.AnimatorListener() {
@Override
public void onAnimationStart(Animator animation) {
}
Expand All @@ -169,9 +176,24 @@ public void onAnimationRepeat(Animator animation) {
}

public void disappearImmediate() {
cancelAnimatorSetAppearIfNeeded();
setVisibility(GONE);
}

private void cancelAnimatorSetAppearIfNeeded() {
if (mAnimatorSetAppear != null && mAnimatorSetAppear.isRunning()) {
mAnimatorSetAppear.cancel();
mAnimatorSetAppear = null;
}
}

private void cancelAnimatorSetDisappearIfNeeded() {
if (mAnimatorSetDisappear != null && mAnimatorSetDisappear.isRunning()) {
mAnimatorSetDisappear.cancel();
mAnimatorSetDisappear = null;
}
}

public void shrink() {
mTabSize = getResources().getDimensionPixelSize(R.dimen.hover_tab_size_shrunk);
updateSize();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -91,6 +91,7 @@ public void run() {
return;
}
if (wasFloatingTabVisible) {
mFloatingTab.appearImmediate();
sendToDock();
} else {
moveToDock();
Expand Down Expand Up @@ -375,9 +376,11 @@ void moveFloatingTabTo(View floatingTab, @NonNull Point position) {
}

protected void activateDragger() {
ArrayList<Pair<? extends HoverFrameLayout, ? extends BaseTouchController.TouchListener>> list = new ArrayList<>();
list.add(new Pair<>(mFloatingTab, mFloatingTabDragListener));
mHoverView.mDragger.activate(list);
if (mHoverView != null && mHoverView.mDragger != null) {
ArrayList<Pair<? extends HoverFrameLayout, ? extends BaseTouchController.TouchListener>> list = new ArrayList<>();
list.add(new Pair<>(mFloatingTab, mFloatingTabDragListener));
mHoverView.mDragger.activate(list);
}
}

protected void deactivateDragger() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -78,10 +78,12 @@ protected void onClose(final boolean userDropped) {

@Override
protected void activateDragger() {
ArrayList<Pair<? extends HoverFrameLayout, ? extends BaseTouchController.TouchListener>> list = new ArrayList<>();
list.add(new Pair<>(mFloatingTab, mFloatingTabDragListener));
list.add(new Pair<>(mMessageView, mDefaultMessageViewDragListener));
mHoverView.mDragger.activate(list);
if (mHoverView != null && mHoverView.mDragger != null) {
ArrayList<Pair<? extends HoverFrameLayout, ? extends BaseTouchController.TouchListener>> list = new ArrayList<>();
list.add(new Pair<>(mFloatingTab, mFloatingTabDragListener));
list.add(new Pair<>(mMessageView, mDefaultMessageViewDragListener));
mHoverView.mDragger.activate(list);
}
}

@Override
Expand Down