Skip to content

BibLiCtora is a modern Android application designed to simplify book discovery and support reading habits.

License

Notifications You must be signed in to change notification settings

amineytc/BibLiCtora

Repository files navigation

📖 BibLiCtora

Biblictora

⭐️ 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.

📱 Screenshots

onboard

🏗️ Architecture

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/

🛠️ Tech Stack

Core

  • Kotlin : Primary programming language
  • Coroutines & Flow : Asynchronous programming
  • Hilt : Dependency injection
  • Room : Local database
  • MVVM : Presentation layer pattern

UI

  • 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.

✨ Features

📚 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

📦 Dependency

    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
}

📄 License

This project is licensed under the MIT License - see the LICENSE file for details.

👩 Authors & Contact

💌 We'd love to hear your thoughts, suggestions, or questions about the app — feel free to reach out to us via email.

Releases

No releases published

Packages

No packages published

Contributors 3

  •  
  •  
  •  

Languages