Home | History | Annotate | Download | only in Bubbles
      1 <?xml version="1.0" encoding="utf-8"?>
      2 <!--
      3   Copyright (C) 2019 The Android Open Source Project
      4 
      5   Licensed under the Apache License, Version 2.0 (the "License");
      6   you may not use this file except in compliance with the License.
      7   You may obtain a copy of the License at
      8 
      9        http://www.apache.org/licenses/LICENSE-2.0
     10 
     11   Unless required by applicable law or agreed to in writing, software
     12   distributed under the License is distributed on an "AS IS" BASIS,
     13   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     14   See the License for the specific language governing permissions and
     15   limitations under the License.
     16 -->
     17 <sample>
     18     <name>Bubbles</name>
     19     <group>Notification</group>
     20     <package>com.example.android.bubbles</package>
     21 
     22     <minSdk>Q</minSdk>
     23 
     24     <strings>
     25         <intro>
     26             <![CDATA[
     27 This sample demonstrates how to use Bubbles API to show notifications as bubbles.
     28 ]]>
     29         </intro>
     30     </strings>
     31 
     32     <tempate src="base-build" />
     33 
     34     <metadata>
     35         <status>PUBLISHED</status>
     36         <categories>Notification</categories>
     37         <technologies>Android</technologies>
     38         <languages>Kotlin</languages>
     39         <solutions>Mobile</solutions>
     40         <level>INTERMEDIATE</level>
     41         <icon>screenshots/icon-web.png</icon>
     42         <screenshots>
     43             <img>screenshots/main.png</img>
     44             <img>screenshots/chat.png</img>
     45         </screenshots>
     46         <api_refs>
     47             <android>android.app.Notification.BubbleMetadata</android>
     48         </api_refs>
     49         <description>
     50             This sample demonstrates how to use Bubbles API to show notifications as bubbles.
     51         </description>
     52         <intro>
     53 <![CDATA[
     54 ### API Usage
     55 
     56 In order to show a notification as a bubble, call [setBubbleMetadata][1] and set metadata to the
     57 Notification.Builder. [Notification.BubbleMetadata.Builder] can be used to create the metadata. You
     58 can set the icon and the desired height of the bubble. The notification has to be in a notification
     59 channel with [IMPORTANCE_HIGH][2] in order to prompt the user to allow bubbles.
     60 
     61 When the bubble is clicked, it expands to a small window. This is called an expanded bubble. An
     62 expanded bubble is an Activity. Use [setIntent][3] to specify an Activity to be lauched as the
     63 expanded bubble.  The Activity must be [resizeable][4] and [embedded][5]. It also has to be able to
     64 launch as multiple instances, so set [documentLaunchMode][6] to "always".
     65 
     66 You might want to provide a feature to let users explicitly show an expanded bubble when they
     67 perform some actions, e.g. tapping on a button to show content in a bubble. For this, call
     68 [setAutoExpandBubble][7] on BubbleMetadata.Builder. It may also make sense to suppress the initial
     69 notification using [setSuppressInitialNotification][8] in this situation. These flags work only when
     70 your app is in the foreground. *This feature does not yet work in Android Q Beta 2.*
     71 
     72 Bubbles can also be shown explicitly when the app is in the foreground.
     73 
     74 [1]: https://developer.android.com/reference/android/app/Notification.Builder.html#setBubbleMetadata
     75 [2]: https://developer.android.com/reference/android/app/NotificationManager.html#IMPORTANCE_HIGH
     76 [3]: https://developer.android.com/reference/android/app/Notification.BubbleMetadata.Builder.html#setIntent
     77 [4]: https://developer.android.com/guide/topics/manifest/activity-element.html#resizeableActivity
     78 [5]: https://developer.android.com/guide/topics/manifest/activity-element.html#embedded
     79 [6]: https://developer.android.com/guide/topics/manifest/activity-element.html#dlmode
     80 [7]: https://developer.android.com/reference/android/app/Notification.BubbleMetadata.Builder.html#setAutoExpandBubble
     81 [8]: https://developer.android.com/reference/android/app/Notification.BubbleMetadata.Builder.html#setSuppressInitialNotification
     82 
     83 ### When to use Bubbles instead of normal notifications
     84 
     85 Bubbles take up screen real estate and cover other app content. You should only send a notification
     86 as a bubble if it is important enough such as ongoing communications, or if the user has explicitly
     87 requested a bubble for some content.
     88 
     89 ### When Bubble is disabled
     90 
     91 Note that the bubble can be disabled by the user. In that case, a bubble notification is shown as a
     92 normal notification. You should always make sure your bubble notification works as a normal
     93 notification as well.
     94 
     95 ### Expanded Bubbles
     96 
     97 System UI allows the user to horizontally swipe through expanded bubbles. You should avoid
     98 horizontal scrolling content in your Activity for expanded bubbles.
     99 
    100 ### About the sample
    101 
    102 The sample is a dummy chat app. Talk to one of the chat bots, and it will reply back to you in
    103 several seconds. The notification is not shown when the app is in the foreground, so just press back
    104 or home before you get a reply.
    105 
    106 - 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)
    107 - dog.jpg: Photo by [Lui Peng](https://unsplash.com/photos/ybHtKz5He9Y?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText) on Unsplash
    108 - parrot.jpg: Photo by [Nikolay Tchaouchev](https://unsplash.com/photos/jJuq6oNfgRo?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText) on Unsplash
    109 - 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
    110 ]]>
    111         </intro>
    112     </metadata>
    113 
    114 </sample>
    115