maoni/src/main/java/org/rm3l/maoni/ui/AppBarStateChangeListener.java

Summary

Maintainability
A
55 mins
Test Coverage
package org.rm3l.maoni.ui;

import com.google.android.material.appbar.AppBarLayout;

abstract class AppBarStateChangeListener implements AppBarLayout.OnOffsetChangedListener {

  public enum State {
    EXPANDED,
    COLLAPSED,
    IDLE
  }

  private State mCurrentState = State.IDLE;

  @Override
  public final void onOffsetChanged(AppBarLayout appBarLayout, int i) {
    if (i == 0) {
      if (mCurrentState != State.EXPANDED) {
        onStateChanged(appBarLayout, State.EXPANDED);
      }
      mCurrentState = State.EXPANDED;
    } else if (Math.abs(i) >= appBarLayout.getTotalScrollRange()) {
      if (mCurrentState != State.COLLAPSED) {
        onStateChanged(appBarLayout, State.COLLAPSED);
      }
      mCurrentState = State.COLLAPSED;
    } else {
      if (mCurrentState != State.IDLE) {
        onStateChanged(appBarLayout, State.IDLE);
      }
      mCurrentState = State.IDLE;
    }
  }

  public abstract void onStateChanged(AppBarLayout appBarLayout, State state);
}