Lollipop системный ui что это

Обновлено: 02.07.2024

Компания Samsung разрабатывает собственный интерфейс для операционной системы Android начиная с 2010 года. Изначально это был всем хорошо известный TouchWiz, который периодически подвергался критике за неторопливость работы, дальше был Samsung Experience, и вот в конце прошлого года был показан One UI. Новый интерфейс основан на Android 9 Pie и как рассказывают в компании, его разрабатывали для того, чтобы упростить использование смартфонов с большой диагональю дисплея. Помогло ли это и какие новые возможности получил обновлённый интерфейс Samsung я расскажу в этом материале.

Интерфейс для использования одной рукой

Похожая идея была у Microsoft в Windows Phone, но тогда дисплеи смартфонов были поменьше и крупные заголовки разделов на них выглядели странно.

Но вот с ростом диагоналей оказалось, что это вполне удачная идея, по крайней мере, после недели использования One UI хочется, чтобы интегрировала такой интерфейс прямо в чистый Android.

Особенно это касается размещения управляющих элементов в нижней части экрана, а не в самом верху.

Новые иконки системных приложений

В One UI компания заметно обновила иконки своих приложений, визуально они стали ещё проще, я бы даже сказал совсем примитивными, но в целом со своими задачами они справляются.

Тёмная тема оформления

В новом интерфейсе Samsung появился «Ночной режим», который перекрашивает интерфейс системных программ в чёрный цвет.

Мало того, что визуально на Super AMOLED дисплеях он выглядит отлично, так ещё и позволяет экономить заряд батареи.

Новое меню многозадачности

Как и в стандартном Android 9 Pie, в One UI меню многозадачности отображается карточками, которые пролистываются горизонтально, и в отличие от интерфейса Samsung Experience их теперь нельзя отображать списком.

При этом в верхней части каждой карточки показывается иконка приложения, нажав на которую вызывается всплывающее меню.

Здесь можно посмотреть информацию о программе, запустить её в одном экране с другим приложением, вывести в отдельном окне или же закрепить, чтобы она никогда не закрывалась в фоновом режиме.

Навигация жестами

Несмотря на то, что навигация в Android 9 Pie и так осуществляется с помощью жестов, ни один производитель так и не интегрировал её в свою оболочку и пытается сделать что-то своё. Не осталась в стороне и компания Samsung, в One UI она решила не отходить от привычной для пользователей схемы управления. Поэтому по умолчанию в One UI используется три кнопки навигации: многозадачность, выход на главный экран и шаг назад.

Но для тех, кто хочет получить ещё больше места для отображения приложений на экране, кнопки навигации можно скрыть. В таком режиме они отображаются тонкими полосками внизу экрана и вместо нажатия активируются свайпом снизу вверх. Привыкнуть к такой навигации не сложно, но как по мне, она не такая удобная, как полноценные кнопки.

Новый интерфейс камеры

Интерфейс камеры в One UI практически полностью перерисовали. Пользователь теперь может переключаться между разными режимами просто листая экран видоискателя вправо или влево. При этом рядом с кнопкой спуска затвора осталось всего две клавиши, одна открывает галерею, а вторая переключает на фронтальную камеру. Кнопка записи видео теперь появляется только если переключиться в соответствующий режим съёмки.

Кроме этого, клавишу спуска затвора теперь нельзя использовать для зума, но зато у неё появилась другая возможность.

Эту кнопку теперь можно переместить в любую часть видоискателя, что очень удобно, если держишь смартфон во время съёмки одной рукой.

Программы во всплывающем окне

Если вы когда-нибудь пользовались Facebook Messenger на Android, то наверняка знаете о функции Chat Heads, всплывающем окне мессенджера, в котором можно вести переписку поверх других программ. Нечто подобное в Samsung реализовали в One UI, только работает это для всех приложений.

Если выбрать соответствующую настройку, то при входящем уведомлении, например, в Telegram, на экране будет появляться иконка программ и при её нажатии она будет открываться в отдельном окне поверх всего остального.

Пробуждение смартфона во время поднятия

В прошлых версиях интерфейса Samsung, чтобы разблокировать аппарат через распознавание лица или радужной оболочки глаз, нужно было сначала поднять смартфон, потом нажать кнопку включения или клавишу «Домой» и только после этого аппарат разблокировался.

В One UI это можно делать проще, смартфон автоматически просыпается как только его начинаешь подносить вверх.

Новый интерфейс создания скриншотов

Автоматическая смена настроек яркости, времени ожидания экрана и громкости мультимедиа

В One UI появилась опция, которая каждый раз в полночь сбрасывает яркость, время ожидания экрана, а также громкость мультимедиа, если смартфон в это время не используется. Это может быть полезно в тех случаях, если пользователь перед сном читает или смотрит фильм, и выставил яркость и звук на комфортный для него уровень, но хочет, чтобы с утра яркость была выше, а звук тише.

Новые возможности клавиатуры

Клавиатура Samsung в One UI также обновилась, в ней появилась возможность регулировать размер, а также новы режим отображения, при котором она не фиксируется и её можно перемещать в любую часть экрана.

Кроме этого, под стать тёмному интерфейсу появилась тёмная тема клавиатуры. Более того, теперь в ней есть режим, который позволяет автоматически переключаться из тёмной темы в светлую, в зависимости от того, какой интерфейс у приложения.

Уменьшение интенсивности анимации интерфейса

В One UI очень много анимаций, они плавные и в целом не раздражают, но интерфейс позволяет сделать переходы между меню и программами менее заметными.

Новые режимы Always on Display

Режим Always on Display позволяет отображать на выключенном экране смартфона такую информацию как время, дата, а также иконки оповещений. При этом дизайн отображения времени и даты можно менять и в One UI эти опции расширили.

Во-первых, стало больше циферблатов часов, а во-вторых, на заставку теперь можно ставить собственную GIF-анимацию.

Автоматическое выключение не используемых программ

Какие смартфоны получат One UI?

На данный момент Samsung планирует обновить только флагманы последних двух лет, соответственно One UI уже начали получать Galaxy Note9, Galaxy S9 и S9+, а в феврале обновление должно прилететь на Galaxy Note8, Galaxy S8 и S8+. К сожалению, пока нет информации, получат ли новый интерфейс аппараты A-серии и других линеек Samsung, думаю, более точно об этом станет известно к марту и апрелю этого года, на которые запланирован выход соответствующих прошивок.

В итоге


В этой статье я разберу архитектуру и принцип работы основного приложения Android — SystemUI. Меня заинтересовала эта тема, потому что мне интересно, как устроена система, которой пользуется такое огромное количество пользователей и для которой ежедневно выкатываются тысячи приложений в Google Play или просто на просторы интернета. Помимо этого меня интересует вопрос информационной безопасности Android и создаваемых под него приложений.

В системе Android, SystemUI — это приложение, путь к исходному коду которого находится в platform_frameworks_base/packages/SystemUI/, на девайсе оно находится в system/priv-app/-SystemUI.

priv-app — это каталог, где хранятся привилегированные приложения. К слову, по пути system/app лежат предустановленные приложения, а обычные приложения, которые мы устанавливаем на свой девайс самостоятельно, хранятся в data/app.

Тут сразу возникает вопрос: почему нельзя засунуть все предустановленные и привилегированные приложения в один каталог, зачем нужно это разделение?

Дело в том, что некоторые приложения более системные, чем другие:) И это разделение необходимо для того чтобы уменьшить покрытие эксплойтами системных приложений, для получения доступа к защищенным операциям. Можно создавать приложение, которое будет иметь специальный ApplicationInfo.FLAG_SYSTEM и в системе получит больше прав, однако apk файл с таким разрешением будет помещен в раздел system.

Итак, SystemUI — это apk-файл, который по сути своей обычное приложение. Однако, если посмотреть на сложное устройство SystemUI, перестает казаться, что это всего лишь простое приложение, верно?

Данное приложение выполняет весьма важные функции:
  • Навигация
  • Недавние приложения
  • Быстрые настройки
  • Панель уведомлений
  • Экран блокировки
  • Регулятор громкости
  • Главный экран
  • .

Запуск SystemUI

Как я и говорила выше, SystemUI не похож на обычное приложение, так что его запуск не сопровождается запуском активности, как это происходит у большинства приложений. SystemUI — это глобальный пользовательский интерфейс, который запускается во время процесса загрузки системы и не может быть завершен.


Если мы залезем в SystemServer, который является одним из двух столпов в мире Android (второй — Zygote, но об этом я расскажу как-нибудь в другой раз), то мы можешь найти место, где стартует SystemUI при загрузке системы.


Тут мы видим как запускается сервис SystemUI с помощью непубличного API startServiceAsUser. Если бы вы захотели использовать это, то вам пришлось бы обратиться к рефлексии. Но если вы решите использовать reflection API в Android — подумайте несколько раз, стоит ли это того. Подумайте раз сто:)

Итак, тут создается отдельный процесс для приложения и по факту каждый раздел SystemUI является отдельным сервисом или независимым модулем.


Метод start() вызывается для запуска каждой службы, которые перечислены ниже.

Регулирование громкости

Мы регулярно пользуемся кнопками громкости на своих устройствах, но не задумываемся какие процессы должны произойти в системе для того чтобы мы могли прибавить или убавить звук. Операция кажется довольно простой на словах, но если заглянуть в VolumeUI, который находится в подпапке SystenUI/volume, в разных режимах интерфейс имеет свою вариацию.



Я уже говорила о том, что сервисы SystemUI запускаются методом start(). Если мы посмотрим на класс VolumeUI, то он тоже наследуется от SystemUI.


Тут мы видим что с помощью mEnabled мы определяем, следует ли нам показывать панель с настройкой звука. И судя по VolumeDialogComponent, VolumeUI отображает звуковую панель в виде диалога. Но все действия относительно нажатия на клавиши громкости обрабатываются в PhoneWindow.


Насколько мы видим, KEYCODE_VOLUME_UP (+) не обрабатывается и перейдет в обработку KEYCODE_VOLUME_DOWN (-). И в обоих событиях, как в onKeyDown, так и в onKeyUp вызывается метод dispatchVolumeButtonEventAsSystemService.


Итак, тут у нас вызывается метод adjustVolume, для того чтобы мы могли проверить наш direction, которому будет присвоен параметр события.

В итоге когда мы доберемся до AudioService, где будет вызван sendVolumeUpdate, где помимо вызова метода postVolumeChanged, будет установлен интерфейс HDMI.

RingtonePlayer

RingtonePlayer в Android выполняет роль проигрывателя. Он так же наследуется от SystemUI и в методе start() мы видим:


Здесь у нас устанавливается mCallback, который по сути является экземпляром IRingtonePlayer.


В итоге можно управлять RingtonePlayerService с помощью Binder для воспроизведения звуковых файлов.

PowerUI

PowerUI отвечает за управление питанием и уведомлениями. Аналогично наследуется от SystemUI и имеет метод start().


Тут регистрируется широковещательный приемник, с помощью которого происходит отслеживание изменений.

Задачи

Recents — это основная и часто используемая функция в мобильных устройствах на базе Android.

Главные функции:
  • Отображение всех задач
  • Переключение между задачами
  • Удаление задач

Помимо этого Recents так же наследуется от SystemUI. В RecentsActivity происходит создание и обновление последних задач, чтобы мы могли увидеть их на нашем экране.



А в с помощью RecentTaskInfo мы можем получить информацию о конкретной задаче.


Вообще, запущенные задачи можно вынести в отдельную тему. Я изучила ее со всех сторон, так как хотела размывать экран приложения перед переходом приложения в background, чтобы в RecentsTask отображалась нечитаемая версия снапшота. Однако, проблема заключается в том, что снапшот приложения берется раньше, чем вызывается onPause(). Эту проблему можно решить несколькими способами. Либо выставлять флаг, чтобы система просто скрывала содержимое экрана с помощью


О чем я говорила в предыдущей статье, посвященной как раз снапшотам.

Можно вообще сделать так, чтобы конкретная activity приложения не отображалось в задачах, проставив в манифесте


Либо можно воспользоваться хитростью с помощью


Можно задать основной активности выше приведенный флаг excludeFromRecents = true, для того чтобы ее экран отсутствовал в запущенных задачах, но во время загрузки приложения запустить отдельную задачу, которая будет показывать либо размытый скриншот с основной активности, либо любое другое изображение. Более подробно, как это можно сделать описано в официальной документации на примере Google Drive.

Экран блокировки

Keyguard уже посложнее всех вышеприведенных модулей. Он представляет из себя сервис, который запускается в SystemUI, а управляется при помощи KeyguardViewMediator.


Однако на самом деле KeyguardService самостоятельно не работает с интерфейсом экрана блокировки, он лишь передает информацию в модуль StatusBar, где уже и производятся действия относительно визуального вида экрана и отображения информации.

Панель уведомлений

  1. Инициализация SystemBars
  2. Отображение уведомлений


То мы видим ссылку на ресурс из которого читается имя класса и создается его экземпляр.


Таким образом мы видим что тут вызывается StatusBar, который будет работать с выводом уведомлений и UI.

Immersive Mode (режим погружения) в Android 4.4 KitKat

image
image

А как же снова попасть в полноэкранный режим, когда панели уже отображаются? У пользователя есть несколько вариантов — нажать на любой контент вне системных панелей, подождать некоторое время, чтобы панели скрылись автоматически, или сделать свайп от центра экрана к краю. Все эти варианты программист может предусмотреть в своем приложении. Для этого команда Android сделала так, чтобы эти способы взаимодействия с Immersive Mode можно было реализовать очень просто. Есть два типа режима погружения — обычный и sticky («липкий»). В обычном режиме программисту надо самому решать, когда скрывать панели, а в sticky-режиме системные панели будут скрываться автоматически. Для установки обоих типов режима погружения необходимо воспользоваться методом setSystemUiVisibility(), только передать в параметры разные флаги. Вызывать этот метод необходимо у так называемого Decor View, который представляет собой внешний вид окна Activity со всем его оформлением и содержимым. Ссылку на этот View получить очень просто.


Давайте рассмотрим оба типа режима погружения поподробнее.

Обычный Immersive Mode

Для установки обычного режима используется флаг SYSTEM_UI_FLAG_IMMERSIVE в качестве параметра метода setSystemUiVisibility().

Лучше всего для работы с обычным immersive-режимом сделать два простых метода, которые будут показывать и скрывать системные панели соответственно.


Для тех случаев, когда показывать и скрывать системные панели вам нужно по нажатию на контент (contentView), необходимо использовать следующий код. Это может пригодится, например, при просмотре видео, как в YouTube, где вам не нужно взаимодействовать с контентом во время его просмотра.


Если при этом у вас в приложении есть какие-то свои панели (controlsView), которые тоже надо скрыть вместе с системными, вы это также можете просто сделать, написав следующий код. Тут скрытие и появление происходит с использованием анимации альфа-канала и позиции по Y вашей панели.


Если при запуске приложения вы хотите показать пользователю, что у приложения есть панели, а потом их скрыть через некоторое время, это тоже довольно просто делается.


Также иногда может потребоваться показывать панель, когда окно получает фокус, например, после возвращения из вызванного диалога. Такой вариант можно обработать следующим кодом.


В этом случае панель покажется и потом исчезнет через заданное вами время.

Immersive Mode Sticky

Для установки sticky-режима используется флаг SYSTEM_UI_FLAG_IMMERSIVE_STICKY в качестве параметра метода setSystemUiVisibility().

Этот режим чрезвычайно прост. Если вам необходима ситуация, при которой системные панели будут скрываться, когда окно получает фокус или проходит некоторое время после появлении панелей, то этот режим для вас. Для включения этого режима вам необходимо установить для окна, когда оно находится в фокусе, флаг SYSTEM_UI_FLAG_IMMERSIVE_STICKY. В этом режиме, если окно теряет фокус, оно автоматически сбрасывается до состояния, в котором окно было до установки флага SYSTEM_UI_FLAG_IMMERSIVE_STICKY, то есть со всеми панелями. Как только окно получает фокус, панели опять исчезают через некоторое время и вам нет нужды программировать эту ситуацию вручную. Чтобы показать системные панели надо также, как и в обычном режиме, сделать свайп от краев экрана. Включение stick-режима делается простым куском кода.

Android Lollipop - Новые функции, о которых полезно знать

Android Lollipop - Новые функции, о которых полезно знать

Android Lollipop - Новые функции, о которых полезно знать. Распространение Android 5.0 Lollipop продолжается, и всё новые и новые пользователи теперь могут сами попробовать эту операционную систему в деле. По заверениям разработчиков, Lollipop стал самым большим обновлением Android за последние несколько лет. Здесь вы найдёте не только значительное изменение внешнего вида, но и множество новых функций, причём некоторые из них скрыты от поверхностного взгляда. В этой статье мы подготовили для вас полезные советы по использованию новых функций самой свежей версии Android.

Как перенести данные с другого телефона

Если вы решили не дожидаться обновления прошивки для своего гаджета, а решили приобрести совершенно новое устройство с Android L на борту, то вам понадобится перенести все свои данные со старого устройства на новое. Для этого появилась специальная функция Tap & Go. Она служит для «переезда» с любого устройства, работающего под управлением Android 4.1 и выше, на ваш новый Android Lollipop.



Удобный пошаговый мастер позволит вам соединить два смартфона между собой с помощью NFC и перенести необходимую информацию по Bluetooth. При этом вы можете сохранить не только настройки операционной системы, но также отдельные приложения и их настройки.

Как найти нужную настройку

Если вы устали запоминать, на каком из экранов разветвлённого меню находится нужная вам опция, то воспользуйтесь появившимся в Android L поиском по настройкам устройства. Теперь вам достаточно ввести название необходимой функции, и вы тут же увидите все подходящие для вашего запроса настройки.


Как вызвать меню быстрых настроек

Ранее панель быстрых настроек располагалась рядом с панелью уведомлений, а переход между ними происходил боковым свайпом. В новой версии операционной системы для доступа к переключателям необходимо сначала вытянуть шторку с уведомлениями, а затем еще раз провести вниз по экрану, как бы вытягивая её из под уведомлений. Другой способ вытянуть панель быстрых настроек - это сделать свайп двумя пальцами от верхней границы экрана - эта возможность перекочевала из предыдущей версии ОС.


Как включить фонарик

Теперь нет необходимости устанавливать специальное приложение, с помощью которого можно подсветить себе в тёмном месте. Android Lollipop имеет встроенный фонарик. Соответствующую иконку вы найдёте в панели переключателей.


Как быстро узнать объём переданных данных

Ещё одно нововведение панели переключателей касается мониторинга объёма данных, переданных по мобильному интерфейсу. Теперь вам достаточно коснуться значка соответствующего подключения, чтобы моментально увидеть текущие значения передачи данных. Эта функция очень пригодится тем пользователям, которые используют тарифные планы с различными ограничениями трафика.


Как быстро добраться до будильника

Отличная функция, уже давно реализованная в некоторых сторонних прошивках, позволяет прямо в панели уведомлений увидеть, включён ли у вас будильник и на какое время. Вполне ожидаемо, что тап по этому значку вызывает окно настройки будильника.


Как скрыть все или только избранные уведомления с экрана блокировки

Как вы, вероятно, знаете, Androoid Lollipop научился отображать поступающие уведомления прямо на экране блокировки. Однако это представляет собой некоторую угрозу вашей конфиденциальности, ведь любой человек сможет их прочитать, даже не разблокируя ваш смартфон. Компания Google позаботилась об этом и дала разработчикам приложений возможность указывать некоторые уведомления в качестве приватных. Пользователям же необходимо открыть Настройки > Звуки и уведомления > На заблокированном экране (Settings > Sound & notifications > When device is locked) и отметить опцию «Скрыть личную информацию» (Hide sensitive notification content). Теперь приватные уведомления не будут появляться на экране блокировки. Если же вы вообще не хотите видеть ничего лишнего на локскрине, то в этом же разделе настроек отметьте опцию «Не показывать уведомления» (Don't show notifications at all).

Как включить тихий режим

Ещё одна замечательная функция, которую мы давно ждали, обеспечит вам покой на указанное количество часов и является аналогом функции «Не беспокоить» в iOS. Для её активации следует сначала нажать физическую клавишу громкости на корпусе устройства. На экране появится регулятор громкости, а под ним три новые кнопки: «Нет», «Приоритетные» и «Все» (None, Priority, All). Первая из них полностью блокирует все входящие звонки и уведомления. При выборе этого режима можно сразу указать его продолжительность в часах. Второй режим («Приоритетные») позволяет тонко настроить, какие события и в какое время вы хотите блокировать. И, наконец, третий режим пропускает все уведомления независимо от источника и времени.


Как прикреплять приложения

Многопользовательский режим, появившийся сначала на планшетах, а теперь ставший доступным и для смартфонов, позволяет пользоваться гаджетом нескольким владельцам. Но что, если вам необходимо дать попользоваться своим устройством на короткое время, например дать ребёнку поиграть или продемонстрировать коллеге какой-либо документ?

Тогда вас выручит новая функция, благодаря которой можно ограничить использование устройство только одним приложением. Вы как-бы прикрепляете экран программы к рабочему столу, в результате чего пользователь может выполнять любые действия внутри этой программы, но не может свернуть её или перейти в другое приложение.


Как включить режим энергосбережения

Android Lollipop получил встроенный режим энергосбережения, однако его довольно далеко запрятали в настройках, поэтому не все пользователи про него знают. Активировать его можно в секции Настройки > Батарея (Settings > Battery). Здесь обратите внимание на дополнительное меню, которое скрывается под тремя точками в правом верхнем углу. Вы можете задать автоматическое включение этого режима при достижении 5 или 15 процентов заряда. При подключении зарядного устройства режим экономии автоматически отключается.


Как запустить скрытую игру

И в заключение познакомим вас с забавным секретом Android L. В каждой версии разработчики прячут от нас одну или даже несколько «пасхалок», а в этот раз в коде Lollipop нашлось место для целой игры в стиле нашумевшей Flappy Bird.

Для её запуска вам придётся открыть настройки устройства и переместиться в раздел с информацией о устройстве Настройки > О телефоне (Settings > About phone). Здесь быстро тапните четыре раза по номеру версии Android. После этого перед вами появится картинка с леденцом. Теперь коснитесь его несколько раз, а затем держите палец пока не запустится игра.


Это далеко не полный перечень новых функций свежей версии мобильной операционной системы от Google и мы обязательно продолжим знакомить вас с её секретами в одной из следующих статей. А пока хотим спросить ваше мнение: понравились ли вам нововведения Android Lollipop и если да, то какое кажется наиболее ценным?

Читайте также: