From 03a9628ce642bcc2c3c64aeb90b98979d6747f9b Mon Sep 17 00:00:00 2001 From: zachh Date: Mon, 13 Nov 2017 10:44:31 -0800 Subject: Added voicemail.settings to packages.mk. Test: none PiperOrigin-RevId: 175554007 Change-Id: Iba492820bcf5b06d4725be494e25e0b06b0943e6 --- g3doc/INTEGRATION.md | 67 ++++++++++++++++++++++++++++++++++++++++++++++++++++ packages.mk | 1 + 2 files changed, 68 insertions(+) create mode 100644 g3doc/INTEGRATION.md diff --git a/g3doc/INTEGRATION.md b/g3doc/INTEGRATION.md new file mode 100644 index 000000000..58ece7dc1 --- /dev/null +++ b/g3doc/INTEGRATION.md @@ -0,0 +1,67 @@ +# Floating Bubble Integration + +Author: keyboardr@ + +Last Updated: 2017-06-06 + +Floating bubbles provide a lightweight means of providing interactive UI while +the user is away from the app. This document details the steps necessary to +integrate these bubbles into your app. + +[TOC] + +![Floating bubble](images/bubble_collapsed.png){height=400} + +## Ensure Bubbles can be shown + +Add the `android.permission.SYSTEM_ALERT_WINDOW` permission to your manifest. +Before you show the bubble, call `Bubble.canShowBubbles(Context)` to see if the +user has granted you permission. If not, you can start an Activity from +`Bubble.getRequestPermissionIntent(Context)` to navigate the user to the system +settings to enable drawing over other apps. This is more than just a simple +runtime permission; the user must explicitly allow you to draw over other apps +via this system setting. System apps may have this allowed by default, but be +sure to test. + +## Create your initial `BubbleInfo` + +Use `BubbleInfo.builder()` to populate a `BubbleInfo` with your color, main +icon, main Intent (which should navigate back to your app), starting Y position, +and a list of `Actions` to put in the drawer. Each `Action` will define its +icon, user-displayable name (used for content description), Intent to perform +when clicked, whether it is enabled (optional, default true), and whether it is +checked (optional, default false). + +![Floating bubble expanded](images/bubble_expanded.png){height=400} + +## Create, show, and hide the Bubble + +Create the bubble using `Bubble.createBubble(Context, BubbleInfo)`. The `show()` +method is safe to call at any time. If the Bubble is already showing, it is a +no-op. `hide()` may also be called at any time and will collapse the drawer +before hiding if already open. While `show()` will show immediately, `hide()` +may need to wait for other operations or animations before the bubble is hidden. +It is unlikely you will need to keep track of this, however. The bubble will be +hidden at its next opportunity, and `hide()` will not block. + +![Floating bubble with state](images/bubble_state.png){height=400} + +## Update the Bubble's state + +Call `Bubble.setBubbleInfo(BubbleInfo)` to update all displayed state. +`BubbleInfo`s are immutable, so to make a new one using an existing +`BubbleInfo`, use `BubbleInfo.from(BubbleInfo)` to get a `Builder` with +prepopulated info. If only the `Action` state has changed, it is more efficient +to just call `Bubble.updateActions(List)` + +![Floating bubble with text](images/bubble_text.png){height=400} + +## Show text + +To temporarily replace the icon with a textual message, call +`Bubble.showText(CharSequence)`. The text will be displayed for several seconds +before transitioning back to the primary icon. The drawer will be closed if open +and cannot be reopened while the text is displayed. Any calls to `hide()` will +be deferred until after the text is done being displayed, so if you wish to show +an ending message of some sort you may call `hide()` immediately after +`showText(CharSequence)`. diff --git a/packages.mk b/packages.mk index 2cce8c6ef..223e40d2e 100644 --- a/packages.mk +++ b/packages.mk @@ -53,6 +53,7 @@ LOCAL_AAPT_FLAGS := \ com.android.dialer.theme \ com.android.dialer.util \ com.android.dialer.voicemail.listui \ + com.android.dialer.voicemail.settings \ com.android.dialer.voicemailstatus \ com.android.dialer.widget \ com.android.incallui \ -- cgit v1.2.3