Skip to content

Latest commit

 

History

History
134 lines (103 loc) · 4.54 KB

README.md

File metadata and controls

134 lines (103 loc) · 4.54 KB

Floaty


🚀 Floaty is a customizable floating widget for your Android apps that allows you to add a floating widget to your app's interface.


How to include it into your project

Step 1: Add the JitPack repository to your project build.gradle file:

allprojects {
    repositories {
        ...
        maven { url 'https://jitpack.io' }
    }
}

Step 2: Add the Floaty dependency to your app's build.gradle file:(Check out sample app for full implementation)

dependencies {
    implementation("com.github.Breens-Mbaka:Floaty:1.0.1")
}

Step 3. Add the "SYSTEM_ALERT_WINDOW" permission to your AndroidManifest.xml file:

   <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>

Step 4: Register the FloatyWidget service in your AndroidManifest.xml file:

   <service
            android:name=".FloatyWidget"
            android:enabled="true"
            android:exported="false" />

Step 5: Configure the floating widget by providing the custom layout resource ID in your Kotlin code:

   CustomLayoutConfiguration.customLayoutResourceId = R.layout.floating_widget

Step 6. Show floating widget but make sure the overlay permission is granted or else request user to give permission

   // N.B ⚠️: The methods to check for overlay permission & to request overlay permission
   // are already provided so just call them
   
   val showFloatingWidgetButton = findViewById<Button>(R.id.showFloatingWidgetButton)
        showFloatingWidgetButton.setOnClickListener {
            if (checkOverlayDisplayPermission(context = this)) {
                showFloatingWidget(context = this)
            } else {
                requestOverlayDisplayPermission(context = this, activity = this)
            }
        }

Step 7: If permission to overlay other apps is granted, start the service that will show the floating widget:

   private fun showFloatingWidget(context: MainActivity) {
        context.startService(
            Intent(
                context,
                FloatyWidget::class.java,
            ),
        )
    }

Step 8. Close the floating widget on click actions

   // In your Activity/Fragment send an intent to a broadcast receiver that will close the widget
   val closeWidgetButton = findViewById<Button>(R.id.closeWidgetButton)
        closeWidgetButton.setOnClickListener {
            val closeFloatingWidgetIntent = Intent(ACTION)
            sendBroadcast(closeFloatingWidgetIntent)
        }

Step 9. Close the floating widget when the application is fully closed

   // In your Activity/Fragment send an intent to a broadcast receiver that will close the widget
   override fun onDestroy() {
        super.onDestroy()
        val closeFloatingWidgetIntent = Intent(ACTION)
        sendBroadcast(closeFloatingWidgetIntent)
    }

Other configurations you can make to the floating widget

    CustomLayoutConfiguration.floatingWidgetWidth = 0.45f //Configure width of the floating widget
    CustomLayoutConfiguration.floatyWidgetHeight = 0.30f //Configure height of the floating widget
    CustomLayoutConfiguration.floatingWidgetPosition = Gravity.TOP //Configure the psosition of the floating widget on the screen

Reporting Issues and Requesting Features✨

If you encounter any issues or have feature requests, please create a new issue in this repository.

Supporting Floaty ❤️

Support it by joining stargazers for this repository. ⭐
Also follow me for my next creations! 🤩

License

Copyright 2023 Breens-Mbaka

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.