blob: 7c59c3451282537b9fbad414db645104f33d14ee [file] [log] [blame]
<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright (C) 2019 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<sample>
<name>Bubbles</name>
<group>Notification</group>
<package>com.example.android.bubbles</package>
<minSdk>Q</minSdk>
<strings>
<intro>
<![CDATA[
This sample demonstrates how to use Bubbles API to show notifications as bubbles.
]]>
</intro>
</strings>
<tempate src="base-build" />
<metadata>
<status>PUBLISHED</status>
<categories>Notification</categories>
<technologies>Android</technologies>
<languages>Kotlin</languages>
<solutions>Mobile</solutions>
<level>INTERMEDIATE</level>
<icon>screenshots/icon-web.png</icon>
<screenshots>
<img>screenshots/main.png</img>
<img>screenshots/chat.png</img>
</screenshots>
<api_refs>
<android>android.app.Notification.BubbleMetadata</android>
</api_refs>
<description>
This sample demonstrates how to use Bubbles API to show notifications as bubbles.
</description>
<intro>
<![CDATA[
### API Usage
In order to show a notification as a bubble, call [setBubbleMetadata][1] and set metadata to the
Notification.Builder. [Notification.BubbleMetadata.Builder] can be used to create the metadata. You
can set the icon and the desired height of the bubble. The notification has to be in a notification
channel with [IMPORTANCE_HIGH][2] in order to prompt the user to allow bubbles.
When the bubble is clicked, it expands to a small window. This is called an expanded bubble. An
expanded bubble is an Activity. Use [setIntent][3] to specify an Activity to be lauched as the
expanded bubble. The Activity must be [resizeable][4] and [embedded][5]. It also has to be able to
launch as multiple instances, so set [documentLaunchMode][6] to "always".
You might want to provide a feature to let users explicitly show an expanded bubble when they
perform some actions, e.g. tapping on a button to show content in a bubble. For this, call
[setAutoExpandBubble][7] on BubbleMetadata.Builder. It may also make sense to suppress the initial
notification using [setSuppressInitialNotification][8] in this situation. These flags work only when
your app is in the foreground. *This feature does not yet work in Android Q Beta 2.*
Bubbles can also be shown explicitly when the app is in the foreground.
[1]: https://developer.android.com/reference/android/app/Notification.Builder.html#setBubbleMetadata
[2]: https://developer.android.com/reference/android/app/NotificationManager.html#IMPORTANCE_HIGH
[3]: https://developer.android.com/reference/android/app/Notification.BubbleMetadata.Builder.html#setIntent
[4]: https://developer.android.com/guide/topics/manifest/activity-element.html#resizeableActivity
[5]: https://developer.android.com/guide/topics/manifest/activity-element.html#embedded
[6]: https://developer.android.com/guide/topics/manifest/activity-element.html#dlmode
[7]: https://developer.android.com/reference/android/app/Notification.BubbleMetadata.Builder.html#setAutoExpandBubble
[8]: https://developer.android.com/reference/android/app/Notification.BubbleMetadata.Builder.html#setSuppressInitialNotification
### When to use Bubbles instead of normal notifications
Bubbles take up screen real estate and cover other app content. You should only send a notification
as a bubble if it is important enough such as ongoing communications, or if the user has explicitly
requested a bubble for some content.
### When Bubble is disabled
Note that the bubble can be disabled by the user. In that case, a bubble notification is shown as a
normal notification. You should always make sure your bubble notification works as a normal
notification as well.
### Expanded Bubbles
System UI allows the user to horizontally swipe through expanded bubbles. You should avoid
horizontal scrolling content in your Activity for expanded bubbles.
### About the sample
The sample is a dummy chat app. Talk to one of the chat bots, and it will reply back to you in
several seconds. The notification is not shown when the app is in the foreground, so just press back
or home before you get a reply.
- cat.jpg: Photo by [Erik-Jan Leusink](https://unsplash.com/photos/IbPxGLgJiMI?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText) on [Unsplash](https://unsplash.com/search/photos/cat?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText)
- dog.jpg: Photo by [Lui Peng](https://unsplash.com/photos/ybHtKz5He9Y?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText) on Unsplash
- parrot.jpg: Photo by [Nikolay Tchaouchev](https://unsplash.com/photos/jJuq6oNfgRo?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText) on Unsplash
- sheep.jpg, sheep-full.jpg: Photo by [Luke Stackpoole](https://unsplash.com/photos/sfB_Nw9sggw?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText) on Unsplash
]]>
</intro>
</metadata>
</sample>