Я пытаюсь реализовать iPhone как авторизацию PIN-кода с 4 блоками EditText, как это:

Я использую TextWatcher, чтобы проверить, было ли изменено поле, чтобы я мог переходить между блоками.
Вот код:
@Override
public void afterTextChanged(Editable s) {
if (del && index > 0) {
pin[index - 1].requestFocus();
}
else if ( ! del && ind < 3) {
pin[index + 1].requestFocus();
}
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
del = count != 0;
}
Все работает нормально, за исключением случаев, когда блок пуст и нажата DEL / BACKSPACE, я хочу вернуться к предыдущему блоку и очистить его значение.
Вот где TextWatcher не работает, так как в пустом блоке не было сделано никаких изменений, ничего не происходит.
Я пытался использовать keyEventListener, но он только перехватывает события на эмуляторе, а не на реальном устройстве через виртуальную клавиатуру.
Кто-нибудь может подсказать, как я могу поймать событие DEL или каким-либо другим способом реализовать это?