docs: protected void animate(@Nullable Animator animator) {
          // TODO: maybe pass auto-end as a boolean parameter?
          if (animator == null) {
              end();
          } else {
              if (getDuration() >= 0) {
                  animator.setDuration(getDuration());
              }
              if (getStartDelay() >= 0) {
                  animator.setStartDelay(getStartDelay() + animator.getStartDelay());
              }
              if (getInterpolator() != null) {
                  animator.setInterpolator(getInterpolator());
              }
              animator.addListener(new AnimatorListenerAdapter() {
                  @Override
                  public void onAnimationEnd(@NonNull Animator animation) {
                      end();
                      animation.removeListener(this);
                  }
              });
              animator.start();
          }
      }