При создании библиотеки использовались ряд допущений.
- Все сенсоры работают с одной view. В случае необходимости работать со множественными view архитетуру надо несколько дополнить.
- Других обработчиков событий, которые могут перехватить view не имеет. Так же, можно было бы отслеживать глобальные клики по экрану и сопоставлять их с областью нахождения кнопки, что сделает это независимым от view и его обработчиков.
- Данная библиотека работает в жизненном цикле активити и в реальности, скорее всего, она будет работать на уровне приложения и отслеживать активити из верха стека.
- Результат выдается индивидуально по каждому сенсору. Возможно в реальной задаче нужна будет упаковка данных в единый набор, тогда имплементацию выдачи результата из SensorWorker нужно будет сделать по запросу синхронно, а не как сейчас автоматически асинхронно.
- Т.к. в библиотеке неясен метод выдачи результата, я сделал вывод в logcat с тэгом w201
- Не уверен будет ли это решение работать с compose, скорее всего будет, но, наверное, не оптимально. Надо дополнительно исследовать.
- В зависимости от того, с какой частотой поток данных будет поступать от сенсоров возможно нужно будет вводить промежуточный буфер для данных чтобы избавиться от синхронизированных блоков и пересылать их в синхронизированном виде при наступлении события. Также, наверное, получать данные от сенсоров было бы неплохо в отдельном треде, а не в том, в котором вызывается onSensorChanged. Но опять же это зависит от количества сенсоров и их частоты.
- Не стоит рассматривать данное тестовое задание, как готовую архитектуру для production ready модуля.