⭐️ The app name BibLiCtora is a creative blend inspired by three Spanish words:
Biblioteca (library)
Libro (book)
Lectora (female reader)
This name reflects our app's focus on providing a rich, reader-friendly library experience.
app/
├── core/
│ ├── common/ # Common auxiliary classes
│ ├── data/ # Data layer, repositories
│ ├── database/ # Room database, entity and DAO classes
│ ├── domain/ # Use cases, business logic
│ ├── network/ # API interfaces, network layer
│
└── ui/
├── basereading/ # The basic structure or infrastructure of the reading screen
├── customview/ # Custom view components used in the application
└── detail/ # Book detail screen
├── discover/ # Discover screen, book recommendations
├── epubviewer/ # Screen to view books in EPUB format
└── favorite/ # Favorite and Quote operations
├── favoritebooks/ # Favorite books screen
├── home/ # Home screen, general content
└── mybooks/ # Screen showing books that the user has uploaded from the device
├── onboard/ # Onboarding screens seen at first startup
├── pdfviewer/ # Screen for viewing books in PDF format
└── quotes/ # Quotes screen
├── reading/ # Reading screen (book reading experience)
├── readinglist/ # Reading list screen (books to read, etc.)
└── splash/ # Application splash screen (Splash Screen)
├── widget/ # In-app widget components
│
└── util/
- Kotlin : Primary programming language
- Coroutines & Flow : Asynchronous programming
- Hilt : Dependency injection
- Room : Local database
- MVVM : Presentation layer pattern
- Retrofit : Type-safe HTTP client for Android used to handle API requests.
- OkHttp : Efficient HTTP client used with Retrofit for handling network calls.
- Navigation : Navigation to manage fragments
- LiveData : Lifecycle-aware data holder that updates UI components only when they're active.
- ViewBinding : View Binding a generated binding class is created for each XML layout file in your app.
- Coil : Image loading and caching library for displaying book covers and images.
- Paging : Supports loading paginated data efficiently in RecyclerViews.
- Palette : Extracts prominent colors from images to dynamically style the UI.
- Toastic : Customizable toast messages to improve user feedback and interaction.
- Swipe Decorator : Provides decoration (icons, background) for swipe actions in RecyclerView.
- PdfViewer : Allows opening and reading PDF-format books inside the app.
- Epublib : Parses and renders EPUB-format books for reading.
- CircleImageView : Displays circular profile or book cover images.
- Page Indicator : Visual indicator for current page or screen in a ViewPager or onboarding flow.
📚 Real-time online book reading
🌐 Filter books by over 10 different languages
❤️ Add books to your favorites for quick access
📝 View your saved quotes on a dedicated quotes page
🛠️ Customize reading screen with font size and background color options
📁 Open and read books stored on your local device
⏰ Set reading reminder notifications for specific times
🏠 Add a home screen widget for quick access
🌙 Support for dark/light mode
dependencies {
implementation("androidx.core:core-ktx:1.9.0")
implementation("androidx.appcompat:appcompat:1.6.1")
implementation("com.google.android.material:material:1.11.0")
implementation("androidx.constraintlayout:constraintlayout:2.1.4")
testImplementation("junit:junit:4.13.2")
androidTestImplementation("androidx.test.ext:junit:1.1.5")
androidTestImplementation("androidx.test.espresso:espresso-core:3.5.1")
// Navigation
implementation("androidx.navigation:navigation-fragment-ktx:2.7.6")
implementation("androidx.navigation:navigation-ui-ktx:2.7.6")
// Material
implementation("com.google.android.material:material:1.12.0-alpha03")
implementation("com.google.android.material:material:1.4.0")
// SSP & SDP
implementation("com.intuit.ssp:ssp-android:1.1.0")
implementation("com.intuit.sdp:sdp-android:1.1.0")
// Hilt
implementation("com.google.dagger:hilt-android:2.47")
ksp("com.google.dagger:hilt-compiler:2.47")
// Retrofit
implementation("com.squareup.retrofit2:retrofit:2.9.0")
implementation("com.google.code.gson:gson:2.10.1")
implementation("com.squareup.retrofit2:converter-gson:2.9.0")
implementation("com.squareup.okhttp3:logging-interceptor:4.11.0")
// Layout
implementation("androidx.swiperefreshlayout:swiperefreshlayout:1.1.0")
implementation("androidx.legacy:legacy-support-v4:1.0.0")
// Coil (replacing Picasso)
implementation("io.coil-kt:coil:2.7.0")
implementation("io.coil-kt:coil-base:2.7.0")
// Paging
implementation("androidx.paging:paging-runtime-ktx:3.3.2")
// Palette
implementation("androidx.palette:palette-ktx:1.0.0")
// Room
implementation("androidx.room:room-runtime:2.6.0")
ksp("androidx.room:room-compiler:2.6.0")
implementation("androidx.room:room-ktx:2.6.0")
// Toastic
implementation("com.github.yagmurerdogan:Toastic:1.0.1")
// SwipeDecorator
implementation("it.xabaras.android:recyclerview-swipedecorator:1.4")
// PdfViewer
implementation("com.github.DImuthuUpe:AndroidPdfViewer:3.1.0-beta.1")
// EpubLib
implementation("com.github.psiegman.epublib:epublib-core:69ac6b0") {
exclude(group = "xmlpull", module = "xmlpull")
}
// CircleImageView
implementation("com.github.hdodenhof:CircleImageView:v3.1.0")
// Page Indicator
implementation("com.tbuonomo:dotsindicator:4.3")
// Lifecycle
implementation("androidx.lifecycle:lifecycle-livedata-ktx:2.7.0")
}
app build.gradle:
plugins {
id("com.android.application")
id("org.jetbrains.kotlin.android")
id("dagger.hilt.android.plugin")
id("com.google.devtools.ksp")
id("kotlin-parcelize")
id("androidx.navigation.safeargs")
}
buildFeatures {
viewBinding = true
}
project build.gradle:
plugins {
id("com.android.application") version "8.1.0" apply false
id("org.jetbrains.kotlin.android") version "1.8.0" apply false
id("com.google.dagger.hilt.android") version "2.47" apply false
id("com.google.devtools.ksp") version "1.9.0-1.0.12" apply false
}
This project is licensed under the MIT License - see the LICENSE file for details.
💌 We'd love to hear your thoughts, suggestions, or questions about the app — feel free to reach out to us via email.
-
Hanife ERCAN
🔗 GitHub
🔗 LinkedIn
✉️ hanifeercan02@outlook.com -
Amine AYTAÇ
🔗 GitHub
🔗 LinkedIn
✉️ aytacamine633@gmail.com