We're planting a tree for every job application! Click here to learn more

Bubbles in Android

Shaik Ahron

8 Dec 2022

2 min read

Bubbles in Android
  • Android

This is a new feature introduced in Android 11.

Using this feature you can communicate with people in a floating window.

## Let's Start

Step 1: First, you need to create an instance of Person.

 val person = androidx.core.app.Person.Builder()
    .setName(simpleMessage.sender)
    .setIcon(icon)
    .setImportant(true)
    .build()

Step 2: Now, create an instance of BubbleMetadata.

  private fun createBubbleMetadata(
        contentUri: Uri,
        icon: IconCompat
    ): NotificationCompat.BubbleMetadata {
        val bubbleIntent =
            PendingIntent.getActivity(
                context,
                REQUEST_BUBBLE,
                Intent(context, MainActivity3::class.java)
                    .setAction(Intent.ACTION_VIEW)
                    .setData(contentUri),
                PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_MUTABLE
            )

        val builder =  NotificationCompat.BubbleMetadata.Builder(bubbleIntent, icon)

        return builder
            .setDesiredHeightResId(R.dimen.bubble_height)
            .setAutoExpandBubble(true)
            .setSuppressNotification(true)
            .build()
    }

here as you can see we need the pendingIntent and icon they can’t be null for BubbleMetadata.you can set the height of the floating window.

Step 3: Create an instance of ShotcutInfoCompat.

ShotcutInfoCompat: this helps you access the features of ShortcutInfo.

A shortcut is basically an action that your app can perform and these shortcuts can be available in the phone launcher.

private fun createDynamicShortcut(
        message: SimpleMessage,
        icon: IconCompat,
        person: androidx.core.app.Person
    ): ShortcutInfoCompat {
        return ShortcutInfoCompat.Builder(context, message.id.toString())
            .setLongLived(true)
            .setIntent(
                Intent(context, MainActivity3::class.java)
                    .setAction(Intent.ACTION_VIEW)
                    .setData(createContentUri(message.text))
            )
            .setShortLabel(message.sender)
            .setIcon(icon)
            .setPerson(person)
            .build()
    }

Step 4: Now you need to publish this shortcut via ShortcutManager.

private fun addDynamicShortcut(shortcut: ShortcutInfo) {
        if (atLeastAndroid11()) {
            shortcutManager.pushDynamicShortcut(shortcut)
        } else {
            shortcutManager.addDynamicShortcuts(listOf(shortcut))
        }
}

Step 5: Now, create a notification builder and pass bubbleMetadata and shortcut id. you need to take care of backward compatibility as well.

private fun getNotificationBuilder(): NotificationCompat.Builder {
        return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            NotificationCompat.Builder(context, CHANNEL_NEW_BUBBLE)
        } else {
            NotificationCompat.Builder(context)
        }
    }

with(builder) {
            setContentTitle(
                context.resources.getString(
                    R.string.message_from,
                    simpleMessage.sender
                )
            )
            setSmallIcon(R.drawable.ic_stat_notification)
            setCategory(android.app.Notification.CATEGORY_MESSAGE)
            setContentIntent(
                PendingIntent.getActivity(
                    context,
                    REQUEST_CONTENT,
                    Intent(context, MainActivity3::class.java)
                        .setAction(Intent.ACTION_VIEW)
                        .setData(contentUri),
                    PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_MUTABLE
                )
            )
            setShowWhen(true)
        }

Step 6: call the method by passing data.

BubbleNotificationView(context).showNotification(
    Message(
        123,
        "Arun",
        "Hello",
        R.drawable.ic_base_person
    )
)

Step 7: Make sure to add these properties resizeable and embedded. On devices running Android 10, notifications are not shown as bubbles unless you explicitly set documentLaunchMode to "always".

<activity
            android:name=".MainActivity3"
            android:allowEmbedded="true"
            android:resizeableActivity="true"
            android:documentLaunchMode="always"
            android:theme="@style/Theme.AppCompat.Light"
            android:exported="false">
            <meta-data
                android:name="android.app.lib_name"
                android:value="" />
        </activity>

Now, if you run the app.

https://gfycat.com/achingshorttermhoki.

Thank Your For Reading

Did you like this article?

Shaik Ahron

Hi, I am Shaik Ahron. I am enthusiastic about Mobile Development. I like to develop mobile apps.

See other articles by Shaik

Related jobs

See all

Title

The company

  • Remote

Title

The company

  • Remote

Title

The company

  • Remote

Title

The company

  • Remote

Related articles

JavaScript Functional Style Made Simple

JavaScript Functional Style Made Simple

Daniel Boros

12 Sep 2021

JavaScript Functional Style Made Simple

JavaScript Functional Style Made Simple

Daniel Boros

12 Sep 2021

WorksHub

CareersCompaniesSitemapFunctional WorksBlockchain WorksJavaScript WorksAI WorksGolang WorksJava WorksPython WorksRemote Works
hello@works-hub.com

Ground Floor, Verse Building, 18 Brunswick Place, London, N1 6DZ

108 E 16th Street, New York, NY 10003

Subscribe to our newsletter

Join over 111,000 others and get access to exclusive content, job opportunities and more!

© 2024 WorksHub

Privacy PolicyDeveloped by WorksHub