package com.google.lizlooney.shoppinglist;

import android.text.Editable;
import android.text.TextWatcher;


/**
 * Class that implements TextWatcher.
 *
 * @author lizlooney@gmail.com (Liz Looney)
 */
public abstract class TextChangeAdapter implements TextWatcher {
  public abstract void textChanged(String text);

  @Override
  public void afterTextChanged(Editable s) {
    textChanged(s.toString());
  }

  @Override
  public void beforeTextChanged(CharSequence s, int start, int count, int after) {
  }

  @Override
  public void onTextChanged(CharSequence s, int start, int before, int count) {
  }
}
