Раскладные смартфоны: а что насчёт приложений?
Всю неделю шли анонсы складных смартфонов: Samsung и Huawei уже жаждут лишить нас крупной суммы, у Oppo и Xiaomi пока что прототипы.
Их бурно обсуждали, но в основном речь шла о железе и о ценах. А для любого нового форм-фактора важна и софтовая поддержка: можно вспомнить, как при появлении iPad сначала приходилось пользоваться «айфонными» приложениями, ужасно выглядевшими на 10-дюймовом экране, а позже постепенно появлялись адаптированные.
Возникнут ли сложности у существующих Android-приложений на «раскладушках»? К чему готовиться тем пользователям, которые решатся купить дорогущее устройство? А что нужно сделать разработчику, чтобы эти пользователи остались довольными? Как протестировать своё приложение, если под рукой нет устройства за $2000?
Под катом мы описали это и с «пользовательской» стороны, и с «разработческой». Могли что-то упустить — так что, если Android-разработчики в комментариях дополнят, будем рады.
Оптимизация UI
Ура, благодаря раскладушкам в карман теперь влезает большой экран! Можно не скроллить постоянно текст по три строчки, а увидеть много информации сразу! Удобно-то как пользоваться всем станет! Так?
Ну, давайте сравним. Слева — то, как выглядит приложение Twitter сейчас на экране 6-дюймового смартфона. Справа — то, как оно может выглядеть на новомодной раскладной штуке с близким к квадратному экраном, как у Huawei Mate X (за попиксельную точность не поручусь, но суть такая):
То есть на старый экран влезло два твита, а на новый — полтора. Упс. Теперь можно купить телефон дороже $2000, чтобы стало неудобнее читать Твиттер.
Почему так? У приложения Твиттера интерфейс рассчитан только на обычный телефонный экран, где «залепить фотографию во всю ширину» никогда не окажется слишком широким. (В итоге под ChromeOS это приложение выглядит так, что вы не хотите этого видеть.)
Вроде бы мы уже проходили всё это в 2011-м с появлением Android-планшетов: сначала телефонные приложения на них выглядели ужасно, потом в Android добавили Fragments, разработчики стали работать над тем, чтобы на разных экранах их приложения выглядели по-разному, всё стало хорошо… так? Проблема в том, что сейчас Android-планшеты не пользуются спросом, стало неочевидно, надо ли вкладываться в их поддержку, и в итоге у приложений с отображением на крупных экранах сейчас всё очень по-разному.
Теоретически как раз появление раскладушек могло изменить ситуацию: врывается новая модная категория устройств, и все стараются, чтобы их приложения получше выглядели на них. Но практически, пока такие смартфоны стоят от $2000, их доля рынка будет такой маленькой, что вряд ли под них будут подстраиваться.
Это не конец света: скажем, тот же Твиттер в веб-версии выглядит куда лучше, да и в целом веб куда лучше адаптируется к разным размерам экрана, так что вот браузинг и впрямь должен стать комфортнее. Кроме того, если в будущем раскладные телефоны подешевеют, то это может изменить расклад. Но, в общем, пока что не всё гладко в датском королевстве.
Вывод для пользователей
Не верьте красивым картинкам из презентаций, где подберут отлично выглядящие на устройстве приложения — если захотите покупать «раскладушку», проверьте сначала, как выглядят важные вам.
Вывод для разработчиков
Вкладывать ли ресурсы в разные варианты интерфейса, виднее вам самим, исходя из вашей ситуации. Но по случаю появления «раскладушек» попробуйте хотя бы в эмуляторе открыть ваше приложение на экране больше телефонного и посмотрите, что получится — возможно, сами содрогнётесь и захотите изменить ситуацию.
Переход между экранами
Обычно Android-приложения не сталкиваются с тем, что их прямо во время использования переносят на другой экран с другим разрешением и соотношением сторон. В презентациях раскладных смартфонов показывают, как бесшовно всё это будет происходить: начал смотреть ролик на сложенном устройстве, потом разложил и продолжаешь с того же места. Действительно ли на практике это всегда будет так беспроблемно?
С точки зрения приложения в момент перехода происходит то, что в Android-разработке называют configuration change. По умолчанию Android в этот момент пересоздаёт текущий экран приложения, что теоретически может означать потерю части текущих данных.
Но, к счастью, это далеко не первая появившаяся разновидность configuration change: например, простой поворот экрана обычного смартфона тоже подходит под эту категорию. И поскольку этот простой поворот давно мог лишить пользователя только что введённых данных, давно предпринимаются и меры для их сохранения. Окончательно тут всё зависит от разработчиков конкретного приложения (позаботились ли они о том, чтобы их приложение корректно обрабатывало смену конфигурации), но в целом ситуация благополучная: новой большой проблемы не возникло, только разновидность старой, с которой давно и успешно справляются.
Вывод для пользователей
Вероятно, подавляющее большинство популярных приложений будет отрабатывать переход между экранами корректно, но в каких-то случаях недоработки могут встречаться.
Вывод для разработчиков
В целом просто требуется, чтобы ваше приложение корректно отрабатывало смену конфигурации (см., например, страницу «Handle configuration changes» в официальной документации).
А как проверить на практике, что переход между экранами проходит благополучно, если «раскладушки» для тестирования у вас нет? Пока в эмуляторе Android Studio виртуальных раскладушек тоже нет, Samsung сделал костыль промежуточное решение: дополнение к имеющемуся эмулятору, позволяющее получить не то что бы виртуальный Samsung Fold, но что-то вроде.
Создаёшь в AVD Manager большой планшет, устанавливаешь специальный APK-файл с сайта Samsung, и добавляется «переключалка» между двумя вариантами: в каждом используется только часть экрана планшета, соответствующая по разрешению одному из экранов Samsung Fold. Выглядит это так (переключалка на виртуальном экране справа внизу, с цифрами 1 и 2):
Многооконный режим
Ещё одна особенность новой категории — многооконность: Samsung прямо говорит о том, как здорово будет выводить на экран Fold три приложения сразу. Что будет с этим?
С первого взгляда здесь тоже революции нет: ещё в Android 7.0 появился «мультиоконный режим», так что ситуация «на экране два приложения сразу» уже не первый год возможна, а переход от двух окон к трём не настолько принципиальный. Вроде бы тогда можно сделать все выводы по тому, как это будет работать, по тому, что мы могли увидеть уже давно?
Но как раз сейчас возник новый нюанс: Google объявил, что у мультиоконного режима появляется новый вариант «multi-resume». Что это значит: раньше из одновременно отображаемых приложений только одно было «полностью активным» (то, которое «в фокусе»), а остальные оказывались в режиме «паузы», теперь же сразу несколько могут быть активными в равной степени:
А чем это вызвано и что меняет? Google пишет примерно следующее (вольно переводим с вежливого английского на разговорный русский):
«Разработчики, козявки этакие, вы официальные гайды не читаете и правильный подход к многооконному режиму в своих приложениях не внедряете. Вы считаете, что раз называется «пауза», надо вообще всё в приложении поставить на паузу — видео, например. Но если пользователь поделил экран между вашим видеоплеером и другим приложением, то ежу ведь понятно, что он хочет продолжать смотреть видео. Ну, раз для вас следовать правильным практикам слишком сложно, фиг с вами, мы подстроимся: теперь все приложения на экране смогут быть активными одновременно».
Пока что это всё в тестовом режиме (чтобы приложение так работало на устройстве, и разработчику приложения надо явно выразить своё согласие, и производителю устройства). Но позже собираются сделать это для всех, причём не только на «раскладушках», но и в двухоконном сплит-скрине на обычных смартфонах.
Вывод для пользователей
Пока что всё в промежуточном состоянии. Похоже, что в данный момент из-за разгильдяйства разработчиков некоторые приложения в мультиоконном режиме будут работать неудобно (например, открыли вы в одном из окон диалог с другом, а мессенджер ставит всё на паузу и не показывает новые сообщения от друга, пока в это окно не ткнёшь). Но Google борется за то, чтобы это исправить. Глядишь, через пару лет станет получше.
Вывод для разработчиков
К новому варианту multi-resume можно подключиться, добавив в AndroidManifest такую строчку:
Но поскольку требуется ещё и согласие производителя девайса (и пока непонятно, все ли его дадут) — наверное, лучше всё-таки проштудировать гугловскую страницу «Multi-window support» и реализовать onPause () с её учётом, не засовывая туда остановку всего подряд.
Минутка рекламы. Если вас в этом тексте интересовали «выводы для разработчиков», то вас может заинтересовать и конференция Mobius: оттуда мобильные разработчики могут вынести много ценных выводов по самым разным поводам. Она пройдёт 22–23 мая в Санкт-Петербурге, узнать больше можно на сайте.
А если у вас самого есть ценные выводы по насущному для мобильных разработчиков вопросу — сейчас идут последние дни, когда можно подать заявку на доклад!