Licensy
Introduction
Licensy is a handy Android library crafted in Kotlin. I always use opensouce libraries in all of my projects and I believe everyone does the same. In my projects I always try to put credits for the libraries or resources I use in my code. I looked for this type of library which will allow me to give the credits or add the licenses of the library in a proper manner for a long time. Guess what? I decided to create one.
Features
Lightweight and Highly Customizable Library: This library is lightweight and offers extensive customization options, allowing you to tailor it to your specific needs.
Versatile Usage: It can function as a view (LicensyView) and can be seamlessly integrated into various contexts such as activities, fragments, or dialogs, providing flexibility and convenience wherever it's required.
Dialog Functionality: You can utilize it as a Dialog (LicensyDialog), providing users with a familiar interface for interacting with licensing information.
BottomSheetDialog Integration: Additionally, it seamlessly integrates as a BottomSheetDialog (LicensyBottomSheet), ensuring a smooth and cohesive user experience.
Demo
- 1 for Test app home
- 2 for View
- 3 for Dialog
- 4 for BottomSheet
Shots
1 | 2 | 3 | 4 |
---|---|---|---|
Animation
1 | 2 | 3 | 4 |
---|---|---|---|
Technologies Used
This library is entirely coded in Kotlin and XML. Android Studio serves as the primary Integrated Development Environment (IDE) for development.
The source code is proudly hosted on GitHub.
Workflow
- Planning: I found some existing projects on GitHub on the same concept. I noted their flaws, shortcomings, the features they offer, and those they don't, but I think they should. Then I developed a plan in my head about what I'm going to do.
- Draft UI: In Figma, I started planning the UI. It's a lot of text to put in a compact space. Finally, I got a draft and started coding.
- Core Coding: After drafting, I started coding the skeleton in XML and then created the core code in Kotlin. I began with the View, then the dialog, and finally the Bottom Sheet Dialog.
- Finalizing: Once the core functionality was established, I focused on fine-tuning the library. This involved dedicating time to incorporate additional tweaks and enhancements, ensuring optimal performance and usability before finalizing the project.
How to Use
First you need to add the dependency in your build.gradle
or build.gradle.kts
and then just add the XML and Kotlin code.
Dependency
dependencies {
...
implementation("com.github.ahmmedrejowan:Licensy:0.1")
}
XML
<com.rejowan.licensy.LicensyView
android:id="@+id/licensyView"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
Kotlin
licensyView.setLicenses(listOfLicenses) // set the licenses to the view
data class LicenseContent(
val title: String,
val author: String,
val licenses: Licenses,
val copyrightYear: Int? = null,
val url: String? = null
)
Dialog
val licensyDialog = LicensyDialog(this)
licensyDialog.setLicenses(list)
licensyDialog.show()
BottomSheetDialog
val licensyBottomSheet = LicensyBottomSheet(this)
licensyBottomSheet.setLicenses(list)
licensyBottomSheet.show()
You can find the whole documentation here - https://github.com/ahmmedrejowan/Licensy
What I've Learned
- I have a deep appreciation for open-source projects, as they have been integral to my work. Utilizing libraries in all of my projects has been a common practice for me. Creating this particular library provided me with the opportunity to properly credit the hard work of those who have contributed to similar projects. It reinforced the importance of acknowledging and honoring the efforts of the open-source community.
Source Code
The source code and the whole project is available on GitHub.
Repository Link - https://github.com/ahmmedrejowan/Licensy
Repo Page - https://rejowan.com/Licensy/
Conclusion
In conclusion, embarking on the journey of creating an open-source library has been a fulfilling experience. Through meticulous planning, drafting UI, core coding, and finalizing, I've not only developed a valuable tool but also gained a deeper appreciation for the collaborative spirit of the open-source community. This project has allowed me to contribute back to this community that has been instrumental in my own work, while also providing a platform to properly credit and honor the efforts of others. It reinforces the notion that open-source projects are not just about code, but about fostering a culture of sharing, collaboration, and giving credit where it's due.