Я тут немножко полностью перелопатил код для адаптера кнопок. Используется все та же библиотека Tablet, но структура кода больше похожа на классическую реализацию конечного автомата. Да, так длиннее, но как по мне - это более читабельно, чем непонятные числовые флаги

Кучка switch-case в функциях состояний - для единообразия. Чуть позже перепишу в типовые функции onPress, onRelease, onHold.
Общий GitHub репозиторий
тут
Конкретно исходник скетча
тут
Алгоритм работы
- состояние кнопок опрашивается каждые 50 мс
- исходное состояние конечного автомата - NOBUTTON
- если нажали какую-то кнопку, то переходим в состояние соответствующее этой кнопке (см функцию noButton() )
- каждая функция типа noButton(), prev(), next() и т.п. - состояние, параметр buttonState - переход в новое состояние
Как работает с точки зрения пользователя
- если нажали и отпустили кнопки NEXT или PREV быстрее чем 250 мс - переключились между треками
- если держим PREV или NEXT - каждые 250 мс перематываем
- громкость увеличивается или уменьшается каждые 250 мс
- Play/Pause нажимается при отпускании кнопки Play/Pause (для устранения ложных срабатываний)
Alt-Tab и прочее не реализовано ввиду ненужности лично мне, но пулл-реквесты принимаются.