Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
Проект, которым я горжусь: медиаплатформа для инвалидов по зрению
Одним из наиболее значимых проектов в моей карьере стал Android-клиент для специализированной аудиобиблиотеки и социальной сети для незрячих и слабовидящих людей. Это был не просто коммерческий продукт, а социально-ориентированное приложение, которое реально меняло качество жизни своей целевой аудитории.
Суть проекта и технические вызовы
Задача стояла амбициозная: создать максимально доступное, удобное и функциональное приложение для пользователей, которые в основном взаимодействуют со смартфоном через скринридер (TalkBack на Android, VoiceOver на iOS). Основной функционал включал:
- Прослушивание огромного каталога аудиокниг (свыше 100 тыс. единиц).
- Социальные функции: лента, сообщения, комментарии к книгам.
- Синхронизация позиции прослушивания между мобильным приложением и веб-версией.
Ключевые технические сложности и решения:
-
Глубокая кастомизация Accessibility (a11y): Стандартного поведения TalkBack было катастрофически мало.
// Пример: кастомная реализация AccessibilityNodeInfo для сложного кастомного View override fun onInitializeAccessibilityNodeInfo(info: AccessibilityNodeInfo) { super.onInitializeAccessibilityNodeInfo(info) info.contentDescription = customDescriptionForScreenReader info.addAction(AccessibilityNodeInfo.AccessibilityAction( AccessibilityNodeInfo.ACTION_CLICK, resources.getString(R.string.label_play_pause) )) // Важно было правильно управлять фокусом и очередностью обхода info.isScreenReaderFocusable = true } -
Специфическая навигация и жесты: Мы разработали систему жестов, которая не конфликтовала с системными, но позволяла быстро выполнять частые действия (например, регулировка скорости воспроизведения двойным свайпом вверх/вниз).
-
Фоновая работа и управление аудио:
* Реализация `MediaSession` и уведомления с расширенными действиями (`MediaStyle Notification`).
* Корректная работа `MediaBrowserService` для интеграции с автомобильными системами и умными часами.
* Продвинутое кэширование аудиопотоков для экономии трафика.
- Многомодульная архитектура: Проект был разбит на feature-модули (
:feature:player,:feature:catalog,:feature:social) и core-модули (:core:network,:core:audio,:core:database), что позволило эффективно работать команде из 6 Android-разработчиков.// build.gradle.kts :feature:player dependencies { implementation(project(":core:audio")) implementation(project(":core:ui")) // ... }
Чем я особенно горжусь в этом проекте?
- Социальный эффект: Мы получали письма от пользователей, для которых приложение стало "окном в мир". Один пользователь написал, что впервые смог самостоятельно, без помощи родных, найти и начать слушать новую книгу.
- Инновации в доступности: Мы провели десятки usability-тестов с реальными незрячими пользователями. Их фидбэк напрямую влиял на дизайн и логику интерфейса. Мы создали ряд решений, которые позже стали де-факто стандартом в нишевых приложениях для слабовидящих.
- Техническое качество:
* Внедрили полноценный **CI/CD** с автоматическим прогоном accessibility-тестов с помощью **Espresso** и **AccessibilityChecks**.
```kotlin
@RunWith(AndroidJUnit4::class)
class PlayerScreenAccessibilityTest {
@get:Rule
val activityScenarioRule = activityScenarioRule<MainActivity>()
@Test
fun playerScreen_validateAccessibility() {
onView(withId(R.id.player_root)).check(matches(isDisplayed()))
// AccessibilityCheck автоматически проверит множество критериев
onView(withId(R.id.player_root)).perform(AccessibilityChecks())
}
}
```
* Построили отказоустойчикую **офлайн-работу**: пользователь мог продолжать слушать книгу и просматривать кэшированный каталог без связи.
* Добились плавной работы интерфейса (по метрикам **Choreographer** и **Systrace**) даже на слабых устройствах, что критически важно для нашей аудитории, не всегда имеющей возможность покупать топовые модели.
Этот проект стал для меня мощным уроком: технологии — это не цель, а инструмент для решения человеческих проблем. Он научил смотреть на код не только с точки зрения эффективности и красоты архитектуры, но и с точки зрения его конечного воздействия. Опыт глубокой работы с Accessibility API и осознанный пользовательцентричный подход, выверенный до мелочей, — вот что я считаю главным достижением в этой работе.