DocuBox
DocuBox is a cloud based file storing app where you can securely store and access your documents from anywhere around the world!
This project is developed by Team 404 for Hashnode x Linode hackathon. This team comprises of Ishant and Vaibhav.
Blog β
To know more about how I build this project, read my article on https://ishantchauhan.hashnode.dev/docubox-securely-store-access-and-share-your-files-on-cloud
Application Install
You can Install and test latest DocuBox app from below π
How to use this app
To know how to use this app read this or watch this video
Setup
- Clone the repository on your machine.
- Clone the backend code and set it up by following its README.
- After setting up the backend, do the following:
Open Secrets.kt in util package and add your backend Base URL
//Add your base url here
const val BASE_URL = "http://[your server url]/api/"
About
It uses a nodejs backend which is deployed on an ubuntu server running on Linode.
- Fully functionable.
- Clean and Simple Material UI.
- Best and Clean Code Quality following Modern Android Development, SOLID Principles and much more.
App Features
-
User Authentication - Supports email based authentication
-
Saving Files - You can upload your files to DocuBox's cloud storage and access it anywhere.
-
File Encryption - Files stored on DocuBox is secure and encrypted, so your data is securely stored.
-
Sharing File Access - You can share view access of your files to other users.
-
File Management - You can create multiple folders to organize your storage just as you want it.
-
File Download - You can even download your files and save them locally for offline access.
-
Enhanced File Search - Super fast file searching which can search files instantly.
Insights into the app π
πΈ Screenshots
Technical details
- DocuBox uses custom NodeJS Server running on Linode as its backend.
- DocuBox uses Retrofit to make all REST API calls to the NodeJS backend.
- DocuBox is made using Kotlin and following Modern Android Development practices.
- DocuBox uses Kotlin Coroutines and Flow to handle all asynchronous tasks.
- DocuBox uses all Jetpack libraries and follows MVVM architecture. It also has a G.O.A.T rating in Android's M.A.D scorecard.
- DocuBox's code follows all the best practices and software development principles like SOLID which make it a very good learning resource for beginners as well as for people looking to improve thier software design skills.
- DocuBox's code is properly linted using Ktlint.
Built With π
-
Kotlin - First class and official programming language for Android development.
-
Coroutines - For asynchronous and more..
-
Flow - A cold asynchronous data stream that sequentially emits values and completes normally or with an exception.
-
StateFlow - StateFlow is a state-holder observable flow that emits the current and new state updates to its collectors.
-
SharedFlow - A SharedFlow is a highly-configurable generalization of StateFlow.
-
Android Architecture Components - Collection of libraries that help you design robust, testable, and maintainable apps.
-
ViewModel - Stores UI-related data that isn't destroyed on UI changes.
-
ViewBinding - Generates a binding class for each XML layout file present in that module and allows you to more easily write code that interacts with views.
-
DataBinding - Binds data directly into XML layouts
-
DataStore - Jetpack DataStore is a data storage solution that allows you to store key-value pairs or typed objects with protocol buffers.
-
Dependency Injection -
-
Hilt-Dagger - Standard library to incorporate Dagger dependency injection into an Android application.
-
Hilt-ViewModel - DI for injecting
ViewModel
.
-
GSON - A modern JSON library for Kotlin and Java.
-
Timber - A simple logging library for android.
-
Retrofit - A type-safe HTTP client for Android and Java.
-
GSON Converter - A Converter which uses Moshi for serialization to and from JSON.
-
Coil - An image loading library for Android backed by Kotlin Coroutines.
-
Material Components for Android - Modular and customizable Material Design UI components for Android.
Package Structure
com.docubox # Root Package
.
βββ data # For data handling.
| βββ local # Local Datasource and classes
| βββ remote # Remote datasources and API Service
β βββ model # Model data classes and mapper classes, both remote and local entities
β βββ repo # Single source of data.
|
βββ service # Foreground Service to upload File to server
|
βββ di # Dependency Injection
β βββ module # DI Modules
|
βββ ui # UI/View layer
| βββ adapters # Adapter, ViewHolder and DiffUtil
| βββ screens # All App Screens
|
βββ utils # Utility Classes / Kotlin extensions
Architecture
This app uses MVVM (Model View View-Model) architecture.
If you like my projects and want to support me to build more cool open source projects
Attribution
The project uses backend which is deployed on Linode for the Hashnode X Linode Hackathon.
Contact
If you need any help, you can connect with me.
Visit:- Vaibhav Jaiswal