Bubbles is an Android library to provide a backwards compatible Android Q (API 29) Bubble Experience for all android devices (API 16+).
App Permissions | The Bubble | Bubble Tapped | Just Before Delete |
---|---|---|---|
The Library is hosted via JCenter, and can be added as a dependency in your project.
Gradle | Maven |
---|---|
compile 'com.siddharthks.bubbles:bubbles:1.0.0' | <dependency> <groupId>com.siddharthks.bubbles</groupId> <artifactId>bubbles</artifactId> <version>1.0.0</version> <type>pom</type> </dependency> |
Let's start with a simple setup for the Service
public class FloatingService extends FloatingBubbleService {
...
}
Adding your library in the manifest
<service android:name="<YOUR_PACKAGE>.FloatingService" />
Start the service
startService(new Intent(context, FloatingService.class));
public class FloatingService extends FloatingBubbleService {
@Override
protected FloatingBubbleConfig getConfig() {
return new FloatingBubbleConfig.Builder()
// Set the drawable for the bubble
.bubbleIcon(bubbleDrawable)
// Set the drawable for the remove bubble
.removeBubbleIcon(removeIconDrawable)
// Set the size of the bubble in dp
.bubbleIconDp(64)
// Set the size of the remove bubble in dp
.removeBubbleIconDp(64)
// Set the padding of the view from the boundary
.paddingDp(4)
// Set the radius of the border of the expandable view
.borderRadiusDp(4)
// Does the bubble attract towards the walls
.physicsEnabled(true)
// The color of background of the layout
.expandableColor(Color.WHITE)
// The color of the triangular layout
.triangleColor(Color.WHITE)
// Horizontal gravity of the bubble when expanded
.gravity(Gravity.END)
// The view which is visible in the expanded view
.expandableView(yourViewAfterClick)
// Set the alpha value for the remove bubble icon
.removeBubbleAlpha(0.75f)
// Building
.build();
}
}
Override the onGetIntent function. It will return true if the intent is valid, else false
@Override
protected boolean onGetIntent(@NonNull Intent intent) {
// your logic to get information from the intent
return true;
}
You can change the state of the expanded view at runtime by
// To expand
setState(true);
// To compress
setState(false);