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

Commit 2bffded

Browse files
committed
Hide FAB after 5 sec
1 parent 3b3ce36 commit 2bffded

File tree

1 file changed

+96
-0
lines changed

1 file changed

+96
-0
lines changed

app/src/main/java/com/zulip/android/activities/ZulipActivity.java

Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import java.util.concurrent.Callable;
88
import java.util.ArrayList;
99

10+
import android.animation.Animator;
1011
import android.annotation.SuppressLint;
1112
import android.annotation.TargetApi;
1213
import android.app.AlertDialog;
@@ -28,14 +29,17 @@
2829
import android.graphics.drawable.Drawable;
2930
import android.os.Build;
3031
import android.os.Bundle;
32+
import android.os.CountDownTimer;
3133
import android.os.Handler;
34+
import android.support.design.widget.AppBarLayout;
3235
import android.support.design.widget.FloatingActionButton;
3336
import android.support.v4.app.ActionBarDrawerToggle;
3437
import android.support.v4.app.FragmentManager;
3538
import android.support.v4.app.FragmentTransaction;
3639
import android.support.v4.content.ContextCompat;
3740
import android.support.v4.view.GravityCompat;
3841
import android.support.v4.view.MenuItemCompat;
42+
import android.support.v4.view.animation.FastOutSlowInInterpolator;
3943
import android.support.v4.widget.DrawerLayout;
4044
import android.support.v4.widget.SimpleCursorAdapter;
4145
import android.support.v7.app.AppCompatActivity;
@@ -45,6 +49,8 @@
4549
import android.view.Menu;
4650
import android.view.MenuItem;
4751
import android.view.View;
52+
import android.view.ViewPropertyAnimator;
53+
import android.view.animation.Interpolator;
4854
import android.view.inputmethod.InputMethodManager;
4955
import android.widget.AdapterView;
5056
import android.widget.AdapterView.OnItemClickListener;
@@ -110,8 +116,12 @@ public class ZulipActivity extends AppCompatActivity implements
110116
private DrawerLayout drawerLayout;
111117
private ActionBarDrawerToggle drawerToggle;
112118
ExpandableListView streamsDrawer;
119+
private static final Interpolator FAST_OUT_SLOW_IN_INTERPOLATOR = new FastOutSlowInInterpolator();
113120
private LinearLayout chatBox;
114121
private FloatingActionButton fab;
122+
private CountDownTimer fabHidder;
123+
private boolean hideFABBlocked = false;
124+
private static final int HIDE_FAB_AFTER_SEC = 5;
115125

116126
private HashMap<String, Bitmap> gravatars = new HashMap<>();
117127

@@ -496,7 +506,93 @@ private Cursor makePeopleNameCursor(CharSequence name) throws SQLException {
496506
private void setupFab() {
497507
fab = (FloatingActionButton) findViewById(R.id.fab);
498508
chatBox = (LinearLayout) findViewById(R.id.messageBoxContainer);
509+
fabHidder = new CountDownTimer(HIDE_FAB_AFTER_SEC * 1000, HIDE_FAB_AFTER_SEC * 1000) {
510+
public void onTick(long millisUntilFinished) {
511+
}
512+
513+
public void onFinish() {
514+
if (!hideFABBlocked) {
515+
displayFAB(true);
516+
displayChatBox(false);
517+
} else {
518+
start();
519+
}
520+
}
521+
};
522+
}
523+
524+
public void displayChatBox(boolean show) {
525+
if (show) {
526+
showView(chatBox);
527+
} else {
528+
hideView(chatBox);
529+
}
530+
}
531+
532+
public void displayFAB(boolean show) {
533+
if (show) {
534+
showView(fab);
535+
} else {
536+
hideView(fab);
537+
}
499538
}
539+
540+
private void hideView(final View view) {
541+
ViewPropertyAnimator animator = view.animate()
542+
.translationY((view instanceof AppBarLayout) ? -1 * view.getHeight() : view.getHeight())
543+
.setInterpolator(FAST_OUT_SLOW_IN_INTERPOLATOR)
544+
.setDuration(200);
545+
546+
animator.setListener(new Animator.AnimatorListener() {
547+
@Override
548+
public void onAnimationStart(Animator animator) {
549+
}
550+
551+
@Override
552+
public void onAnimationEnd(Animator animator) {
553+
view.setVisibility(View.GONE);
554+
}
555+
556+
@Override
557+
public void onAnimationCancel(Animator animator) {
558+
}
559+
560+
@Override
561+
public void onAnimationRepeat(Animator animator) {
562+
}
563+
});
564+
animator.start();
565+
}
566+
567+
private void showView(final View view) {
568+
ViewPropertyAnimator animator = view.animate()
569+
.translationY(0)
570+
.setInterpolator(FAST_OUT_SLOW_IN_INTERPOLATOR)
571+
.setDuration(200);
572+
573+
animator.setListener(new Animator.AnimatorListener() {
574+
@Override
575+
public void onAnimationStart(Animator animator) {
576+
view.setVisibility(View.VISIBLE);
577+
}
578+
579+
@Override
580+
public void onAnimationEnd(Animator animator) {
581+
582+
}
583+
584+
@Override
585+
public void onAnimationCancel(Animator animator) {
586+
587+
}
588+
589+
@Override
590+
public void onAnimationRepeat(Animator animator) {
591+
}
592+
});
593+
animator.start();
594+
}
595+
500596
public void setupListViewAdapter() {
501597
ExpandableStreamDrawerAdapter streamsDrawerAdapter = null;
502598
Callable<Cursor> streamsGenerator = new Callable<Cursor>() {

0 commit comments

Comments
 (0)