package com.ubergeek42.WeechatAndroid.utils;
import android.support.v7.app.ActionBar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.view.ViewTreeObserver;
import android.view.animation.AccelerateInterpolator;
import android.view.animation.DecelerateInterpolator;
import com.ubergeek42.WeechatAndroid.R;
import com.ubergeek42.WeechatAndroid.service.P;
public class ToolbarController implements ViewTreeObserver.OnGlobalLayoutListener {
final Toolbar toolbar;
final ActionBar actionBar;
final View root;
boolean shown = true;
boolean keyboardVisible = false;
public ToolbarController(AppCompatActivity activity) {
this.toolbar = (Toolbar) activity.findViewById(R.id.toolbar);
this.actionBar = activity.getSupportActionBar();
this.root = activity.findViewById(android.R.id.content);
root.getViewTreeObserver().addOnGlobalLayoutListener(this);
}
public void onUserScroll(int bottomHidden, int prevBottomHidden) {
if (!canAutoHide()) return;
if (bottomHidden > prevBottomHidden) hide();
else if (bottomHidden < prevBottomHidden) show();
}
public void onPageChangedOrSelected() {
show();
}
public void onSoftwareKeyboardStateChanged(boolean visible) {
if (!canAutoHide()) return;
if (keyboardVisible == visible) return;
keyboardVisible = visible;
if (visible) hide();
else show();
}
private boolean canAutoHide() {
if (P.autoHideActionbar)
return true;
show();
return false;
}
private void show() {
if (shown) return;
shown = true;
if (android.os.Build.VERSION.SDK_INT >= 14)
toolbar.animate().translationY(0).setInterpolator(new DecelerateInterpolator()).start();
else
actionBar.show();
}
private void hide() {
if (!shown) return;
shown = false;
if (android.os.Build.VERSION.SDK_INT >= 14)
toolbar.animate().translationY(-toolbar.getBottom()).setInterpolator(new AccelerateInterpolator()).start();
else
actionBar.hide();
}
////////////////////////////////////////////////////////////////////////////////////////////////
@Override public void onGlobalLayout() {
if (!canAutoHide()) return;
// if more than 300 pixels, its probably a keyboard...
int heightDiff = root.getRootView().getHeight() - root.getHeight();
if (heightDiff > 300)
onSoftwareKeyboardStateChanged(true);
else if (heightDiff < 300)
onSoftwareKeyboardStateChanged(false);
}
}