- Android Slices упростят управление настройками смартфона
- Важное
- Android slices что это
- Integrate App Actions with Android Slices
- Implement Slices
- Slice permissions
- Slice logging
- Quality guidelines for Slices integration
- General requirements
- Content in Slices
- Handling authentication
- Deep linking
- Android Support Library 28. Что нового?
- RecyclerView selection
- Slices
- Новые элементы:
- MaterialCardView и MaterialButton
- Chip и ChipGroup
- BottomAppBar
- Список коротких нововведений:
- Для тех, кто хочет поковыряться:
Android Slices упростят управление настройками смартфона
На устройствах Google Pixel начинают появляться те самые Android Slices для управления Wi-Fi, Bluetooth и другими настройками. Что это за новинка?
Google представила Android Slices на конференции I/O 2018 и начала тестировать новую парадигму интерфейса на примере сторонних приложений. Slices — это такие контекстные помощники, которые отображают ключевые функции приложений в естественных для пользователя местах, таких как поиск Google. На устройствах Pixel на базе Android 9 уже начинают появляться ярлыки для приложения «Настройки».
Например, если ввести «Bluetooth» или «Wi-Fi» в поле поиска Google, то появятся синие значки с переключателями справа, чтобы быстро включить или отключить настройку.
Ранее Google подробно рассказала о том, как начать работу с этими опциями в рамках раннего доступа. Slices будут помогать не только в поисковых запросах, но и в сторонних приложениях, контактах, музыке и так далее.
Примеров Google упомянула немало. Slices для «Мобильных данных» показывают количество гигабайт, для «Уровня яркости» содержат слайдер, для Lyft позволяют быстро забронировать поездку, для Google Фото показывают карусель изображений прямо в поиске.
Важное
Обзор ActionDash: статистика использования Android в красках, но без смысла
Как отправлять несжатые изображения через WhatsApp
Источник
Android slices что это
Полный текст статьи и исходники программы доступны только зарегистрированным участникам сайта.
Прочитайте внимательно условия! В начале каждой статьи указывается, к какому курсу относится данная статья. Например, если статья из 4 курса, значит нужно заплатить за все курсы по четвёртый включительно.
Стоимость регистрации — символические 350 рублей. После регистрации у вас будет доступ ко второму курсу.
Для регистрации сначала необходимо пополнить ЮMoney(бывший Яндекс.Кошелек) 410011383280263 на указанную сумму (или Webmoney-кошелек P894989790291 (старый R390884954122) или QIWI (перевод по никнейму), а затем прислать письмо на адрес alexander.klimoff@gmail.com с указанием, на какой кошелёк вы делали оплату и реквизиты, по которым можно вас определить (не прикрепляйте к письму картинки или файлы). Учитывайте комиссию при переводах.
Не присылайте в письме мои номера кошельков — поверьте, я их знаю и без вас.
В ответном письме вы получите учётные данные для чтения статей из закрытой зоны за второй курс.
Доступ к третьему курсу обучения доступен только после оплаты второго курса и составляет 350 руб.
Доступ к четвёртому курсу обучения доступен после оплаты третьего курса и составляет 350 руб. и т.д.
При оплате сразу всех курсов одновременно (2-9) цена составит 2800 руб.
Доступ даётся как минимум на один год. Для тех, кто оплатил третий и другие курсы, сроки доступа увеличиваются.
Также возможен приём на PayPal (только для зарубежных пользователей). Обратите внимание, что в этом случае стоимость одного курса составляет 7$.
Источник
Integrate App Actions with Android Slices
Beta: This page describes App Actions functionality you can add to your app today using the Android Shortcuts framework. This framework integration is in the Beta release stage. If you are maintaining a production implementation of App Actions, refer to the Actions.xml documentation.
For many intents, the best response from an app is a quick inline answer or a simple confirmation that an action was taken. You can fulfill those intents with an Android Slice, rather than a deep link, to provide a user with information directly in Google Assistant.
Google automatically renders the app name and the logo of the Play Store listing in the header of the Slice, and the Open app button in the footer of the Slice. A user can tap on the Slice to follow a deep link into the app if more information or additional interaction is needed.
For example, using the actions.intent.GET_INVOICE built-in intent, your banking app can implement a custom Slice that Assistant displays when the user utters the invocation phrase, «Check my upcoming bills.» In the Slice, you can show real time data for the user’s bill.
Android Slices work best when a user asks for a small piece of information that can be displayed in a line or two of text. Use deep link fulfillment instead when a user wants to perform a task in your app or start a task that requires further interaction.
Implement Slices
You can implement Slices with the actions.xml functionality or shortcuts.xml functionality. Implementation with the shortcuts.xml file is currently in Beta, while the actions.xml file implementation is for production use.
Select a button below to choose which implementation method you want to use.
To integrate App Actions with your Slices, follow these steps:
- Implement an Android Slice by following the steps described in the Slices Getting started guide.
- In the shortcuts.xml file, add a element to your capability. Within the element, add and
tags for the capability.
When a Slice is used for fulfillment, the url-template refers to the Slice URI as described in the SliceProvider . The url-template must be of the type content://
The following snippet shows how you might specify a Slice as the fulfillment for the CREATE_TAXI_RESERVATION built-in intent in your shortcuts.xml file:
For a given capability, you can specify multiple blocks or use a combination of and blocks for fulfillment. This approach lets you provide a customized experience based on different combinations of parameters that the user specifies. For example, if the user does not specify any drop-off location in their query, you can direct them to the activity in your app that shows options for setting the pick-up and drop-off locations. For more information about adding fallback intents, see Create shortcuts.xml .
Note that, similar to multiple blocks, multiple blocks or a combination of and blocks are executed in order of declaration. Only the first block matching all the requirements for a given user query executes.
Slice permissions
You need to grant Slice access permission to Google Assistant on startup. Slice permissions are hierarchical, so Assistant would get permission to all Slice URIs as long as you grant permission to Assistant on a top-level URI (for example: content://com.foo.slice.provider/ ).
The following code snippet shows how you might implement this:
Slice logging
In order to trigger App Actions, Google logs the following data about your Slice (specifically from the SliceMetadata object):
We explicitly do not log the following SliceMetadata information:
As a result, no information is available from Google Assistant on user selections within the context of a provided Slice.
Quality guidelines for Slices integration
This section highlights key requirements and best practices when you integrate App Actions with Slices.
General requirements
- Make sure you define a primary action for each Slice.
- While loading the content of the Slice, make sure to set the isLoading field in the Slices API to true if the Slice being returned is a loading Slice (and false otherwise).
- To indicate error conditions, use the setIsError() method to let Google know that Slice content was not loaded successfully or that the user’s request could not be handled.
Content in Slices
- (Required) Do not show ads in your Slices.
- (Required) Do not add header or footer information in your Slices; Google automatically provides this.
- Slice content should be completely focused on fulfilling the intent—don’t try to fulfill multiple intents with one Slice or add irrelevant content.
Handling authentication
- (Required) Where user authentication is needed to complete a user flow, return a Slice that explains that the user needs to continue in the app. In-line user authentication in Google Assistant is not supported for App Actions.
- If users are permitting your app to show data via Slices, you can return an Error Slice at runtime for unauthorized users.
Deep linking
- (Required) Deep-link the user to the correct screen in your app, not the home screen.
- (Required) In your shortcuts.xml , always provide fallback deep link fulfillment in addition to Slice fulfillment for a given built-in intent. The exception to this is where no parameter mappings are defined for that App Action, in which case only the Slice fulfillment is needed.
Except as otherwise noted, the content of this page is licensed under the Creative Commons Attribution 4.0 License, and code samples are licensed under the Apache 2.0 License. For details, see the Google Developers Site Policies. Java is a registered trademark of Oracle and/or its affiliates.
Источник
Android Support Library 28. Что нового?
По давней традиции вместе с новой версией Android выходит обновление Support Library. Пока библиотека вышла в стадии альфа, но список изменений уже намного интереснее, чем такой же список у Android P. Google несправедливо мало рассказал и написал об основных нововведениях главной библиотеки для Android. Приходится читать исходники и разбираться, в чем особенности новых фич и зачем они нужны. Восстановлю справедливость и расскажу, чем нас порадовал Google:
- RecyclerView selection — выбор элементов теперь из коробки;
- Slices — новый способ отображать контент другого приложения;
- новые элементы дизайна: BottomAppBar, ChipGroup и другие;
- мелкие изменения одной строкой.
RecyclerView selection
В 2014 году, вместе с релизом Lollipop, Google добавила в support новый элемент — RecyclerView, как замену устаревшему ListView. Все было хорошо с ним, да не хватало одного метода из ListView — setSelectionMode(). Спустя 4 года этот метод косвенно был реализован в RecyclerView в виде целой библиотеки.
Что же волшебного в selection? Selection mode — режим, которой инициализируется долгим нажатием по элементу списка. Далее можем выбрать несколько других элементов и сделать общее действие на ними. Пример: в Google Photos selection mode значительно облегчает жизнь.
Давайте разберемся на практике, как обстоит дело в support.
Добавим в gradle зависимости. Интересно, что Google выделила selection в отдельный репозиторий.
Напишем стандартный адаптер для RecyclerView.
Модель Word используем в качестве данных.
Фундамент есть, приступим к реализации выбора. Сперва нужно определиться, что будет идентифицировать элемент списка. Google предлагает на выбор три варианта: Long, String, Parcelable. Для этой цели у нас уже сформирован Word, не хватает только реализации Parcelable. Реализацию добавим аннотацией @Parcelize, которая доступная в экспериментальной версии Kotlin. В Android Studio 3.2 пока есть проблемы со сборкой проекта с экспериментальным Kotlin, но никто не отменял студийные шаблоны.
SelectionTracker — главный класс библиотеки. Объект этого класса обладает информацией про выбранные пользователем элементы и позволяет из кода изменять этот список. Чтобы инициализировать данный класс, понадобятся реализации двух абстрактных классов: ItemKeyProvider и ItemDetailsLookup. Первый нужен для двусторонней связи позиции элемента в коллекции и ключа.
ItemDetailsLookup нужен для получения позиции элемента и его ключа по координатам x и y.
Напишем также интерфейс для получение данных из ViewHolder и реализуем его.
Везде стандартный код. Удивительно, почему разработчики support library не добавили классическую реализацию сами.
Сформируем трекер в Activity.
Поправим ViewHolder, добавим реакцию на изменение состояния выбора.
Добавим трекер в адаптер, переопределим onBindViewHolder с payload. Если изменения касаются только состояния выбора, то в payloads будет находиться константа SelectionTracker.SELECTION_CHANGED_MARKER.
Tracker готов и работает, как часы. Добавим немного красоты и смысла. Пусть AppBar меняет цвет, заголовок начнет отображать количество выбранных элементов и добавляется кнопка Clear в меню, когда пользователь что-нибудь выбирает. Для этого есть ActionMode и поддержка его в AppCombatActivity.
Первым делом напишем реализацию ActionMode.Callback.
Добавим observer к SelectionTracker и свяжем изменения в трекере с ActionMode в Activity.
Теперь точно все. Наслаждаемся простотой и красотой.
Мы сделали стандартный вариант. Кратко отмечу, что в Builder много методов для кастомизации процесса выбора. Например, с помощью метода withSelectionPredicate(predicate: SelectionPredicate) можно ограничить количество выбранных элементов или запретить выбор особых элементов. Также в Builder предусмотрены методы по добавлению поведения, которое может конфликтовать с selection при традиционном способе добавления. Например, при помощи withOnDragInitiatedListener(listener: OnDragInitiatedListener) можно настроить Drag&Drop.
Slices
Самой странной новинкой оказался Slice. Google посвятила очень мало времени объяснениям сообществу, что это за диковина. Есть только код и документации к половине классов. Давайте разбираться.
За основу возьму код отсюда, потому что они придумали, как обходить баги с Permission в Android P DP1. Хочу отметить, что Slices не является новинкой support library. Фича появилась в Android SDK 28, а в support ареал обитания расширен до 24 версии SDK. На этом можно завершить рассказ и продолжить его через несколько лет. Пока minSdkVersion может быть максимум 19, поговорим в общем об идее этой технологии и о том, зачем она вообще нужна.
Slices — библиотека, которая позволит запрашивать из одного приложения (клиент или хост) часть или статичный кусочек другого приложения (отправитель или провайдер). Очень похоже на описание RemoteViews, которое часто используется для программирования кастомных виджетов и уведомлений.
Slice — это данные в каркасе без дизайна и интерактивности, как HTML без CSS и Js. Дизайн будет подстраиваться под тему приложения-хоста. Пример слайса.
Отправитель — это ContentProvider, которому нужно реализовать простой метод onBindSlice(sliceUri: Uri): Slice и внутри метода сформировать Slice. У нас провайдер будет отсылать время и количество вызовов.
Клиенту нужно сделать запрос по URI к провайдеру, запросить через него slice, получить и передать его в SliceView. Все действия производятся через SliceManager. Важно не забыть про permission.
SliceManager предоставляет возможность подписаться с помощью SliceLiveData на изменения Slice в провайдере и внутри подписки обновлять SliceView. К сожалению, оно сейчас не работает. Мы использовали менее реактивный вариант.
Запускаем провайдер, запускаем приложение. Наблюдаем результат работы. Все круто. Забавно, что счетчик инкрементируется два раза.
В большинстве случаев RemoteView используется для виджетов и уведомлений. Slices плохо подходят под эти цели, они мало кастомизируемые и, как я уже писал, подстраиваются под дизайн приложения. Идеально подходят под приложения, которые используют данные других приложений. Под категорию всеобъемлющих подходят голосовые ассистенты — Google Assistant, Алиса и так далее. Как было замечено в блоге компании Novada, с помощью конструктора slice можно собирать слайсы, очень похожие на ответы для Google Assistant.
И тут самое время для теории.
Возьмем за основу то, что Slice сделан для программирования ответов в Google Assistant — стратегически важный продукт для компании. Очевидно, что мы живем во времена, когда графический интерфейс постепенно вытесняется голосовым: растет популярность домашних ассистентов и есть прогресс в разработке голосового искусственного интеллекта посредством ИИ, нейронный сетей и других хайповых технологий.
Для Google самым логичным вариантом было бы развивать и наращивать Google Assistant, чтобы за год-два он стал мощным инструментом. Slice — теоретически отличный инструмент для накачки дополнениями от сторонних разработчиков. Так ассистент станет мощнее, все действия можно проводить через него и отпадет надобность в рабочих столах и иконках. Тогда Google Assistant станет основой для Android.
На данный момент нам ничего не рассказали толком про Slice: ни целей, ни преимуществ над RemoteView. Хотя по количеству кода в новой версии support Slice занимает чуть ли не первое место. Поэтому я думаю, на ближайшей I/O нам будут подробно рассказывать про Slice. И возможно расскажут о планах эволюции ОС или даже представят версию Android с голосовым интерфейсом для разработчиков.
Но все это спекуляция и желание автора раскрыть теорию заговора и добраться к истине. Единственное, что можно сказать на сто процентов, на Google I/O нас ждет развязка истории.
Новые элементы:
MaterialCardView и MaterialButton
MaterialCardView наследуется от CardView и практически ничем не отличается от него. Добавлена только возможность задавать границы карточки и в качестве background используется другой drawable. Найдите 10 отличий.
MaterialButton является наследником AppCombatButton и тут различия заметны. Разработчики сюда добавили больше способов кастомизировать кнопку: цвет ripple эффекта, разные радиусы кнопок, границы, как у MaterialCardView.
Chip и ChipGroup
Тут и слова лишние.
BottomAppBar
Самый интересный и неожиданный виджет в данной подборке, хотя идея очень проста, AppBar разместить внизу. Пользователю с маленькими руками и большими экранами неудобно дотягиваться до кнопки вызова меню или просто кнопки на AppBar вверху. Но никакой другой пользы в этом элементе нет.
Меню на BottomAppBar нужно добавлять искусственно, для этого есть метод replaceMenu(@MenuRes int newMenu).
Дизайнеры классно придумали, как сочетать FloatingActionButton и BottomAppBar. Но без кнопки BottomAppBar смотрится лишним. Убирается вырез, остается подбородок с кнопками меню с одной стороны. Проблему с меню на больших экранах можно было бы решить интересней, например по длинному нажатию на FloatingActionButton трансформировать ее в меню внизу экрана.
Список коротких нововведений:
Для тех, кто хочет поковыряться:
- Используйте Android studio 3.1 и выше. Эти версии пока не в релизе, но работают стабильно, я работал с 3.2.
- Немного пошаманить в build.gradle с версиями. Ну и, естественно, нужно добавить нужные зависимости.
Список новых фич не окончательный. Если анализировать changelog библиотеки за предыдущие 2-3 года и экстраполировать данные на этот год, то в мае нас ожидает ещё много-много интересного. Ждём.
Источник