JABA (Just Another Book App)

A modern, all-in-one digital library manager and e-reader.

Repository

Download APK

🔧 How to build the project

When building the project in Android Studio, you will need to provide credentials in order to use the package we use for the EPUB-Viewer. For this you will need to use a GitHub Username and a token. The token can be a classic GitHub token and only needs the repo and read:packages scope selected. (Tokens can be found under GitHub Profile > Developer Settings > Personal Access Tokens.) The username and token then need to be plugged into the respective fields in settings.gradle.kts (under dependencyResolutionManagement for the https://maven.pkg.github.com/Nextstack-LLC/epubify dependency). When building the project for the first time, it will be necessary to plug them in directly.

username = "YOUR_USERNAME"
password = "YOUR_TOKEN"

After that it can be exchanged with the following.

username = findByName("gpr.user") as String?
    ?: System.getenv("GITHUB_ACTOR")

password = findByName("gpr.token") as String?
    ?: System.getenv("GITHUB_TOKEN")

And you add the code below to your gradle.properties.

gpr.user=YOUR_USERNAME
gpr.token=YOUR_TOKEN

👥 Team Members

Johanna Mayr [cc241002]

Philip Mayrhofer [cc241079]

📱 App Concept

For a more detailed description of the app, please refer to the App Development Documentation.

1. The Use Case

JABA serves as a unified platform for book lovers who struggle to manage their physical and digital collections.

Users need a way to:

Quickly catalogue physical books they own (without typing).

Track their reading habits and history (re-reads, dates, ratings).

Read digital files (EPUB/PDF) directly within the same application.

2. The Target User

  • Students who need to track references, read PDF textbooks, and manage reading lists for different courses.

  • Someone who owns a physical bookshelf but also reads e-books on the go.

  • Individuals motivated by reading challenges, streaks, and visualizing their progress over time.

3. Planned Technical Features

Hardware Integration: Camera for ISBN Barcode scanning.

File Handling: Android File System for storing and retrieving downloaded EPUB/PDF files.

Reader: A PDF & E-Book format reader

4. Prototype

Library Search Check-in Badges Stats Reader

5. Difference between Mobile Coding Project & CCL

The app developed during Mobile Coding serves as the base by providing the tracking of books, searching via Open Library API, badges, and a daily check-in.

On top of that the following features will be added during CCL:

  • ISBN Camera scanning
  • In-App Reader & local file handling
  • Shelves for organizing
  • (optional) Downloads via a public api if available (e.g. Gutenberg Project)

Final Reflection

Philip Mayrhofer

This semester was a nice step forward for me, especially on the mobile development side. Working on an Android app in a team felt much more “real” than small exercises, because we had to keep the project structure clean while adding features. I also got more comfortable with how the different layers connect (UI, ViewModels, repository, local database, and API), and how important it is to keep responsibility separated so the app stays understandable.

A big part of the experience was also working as a team. Communication was easy, and we could split tasks in a way everyone got a task they were interested in. Thanks a lot to my teammate Johanna for the good cooperation and the chill workflow, it made the whole project smoother, and in the end everything worked out pretty well.

For usability testing, I realized that tools like SUS and SEQ can be a bit “too good” overall if you don't have a lot of test users, so just looking at the final number doesn’t tell you that much. But they become really useful when you look per task: SEQ in particular helped us spot where users struggled, even if the global average looked fine. Combined with subjective feedback (think-aloud comments and observer notes), it was much easier to decide what to improve and why.

Overall, it was a solid semester and I’m pretty happy with the result.

Johanna Mayr

This project did have some very clear challenges, but overall was a positive experience. Philip and I established different features we wanted to add to JABA, and then sorted them into issues so we could work separately and use the issue board as visualization for what we still had to do / what was in review / what was completed. Both of us worked on the logic, UI and the usability test.

One of my tasks that really annoyed me was the Reader for EPUBs. PDFs were easy enough, as Android has a native class that makes it super compatible. For EPUB however, there was nothing official we could use. Some projects online had working EPUB implementations, but were difficult to integrate. Eventually I decided on a GitHub package that did the job, but until the end I could not get it to work in a way that was satisfying. EPUBs don't have a set amount of pages. The pages are calculated each time the EPUB is rendered, based on font and screen size. Ultimately, reading an EPUB on our E-Reader is not the smoothest experience, because sometimes the pages are calculated differently when reopening the reader, so users might lose the point they were currently reading at.

However, I had to cut my losses at some point and just continue onward.

Designing, conducting, and eventually visualizing the usability test and its results was a lot of fun. Thanks to UEE I already knew how to best approach it and that this was something I took enjoyment in.

Our app definitely meets our initial concept. Some aspects that could be improved are the aforementioned EPUB reader and the rating functionality. In our usability testing we found that the rating was not intuitive to users, and even after implementing another solution for ratings, we still received some negative feedback regarding the rating. Unfortunately, in order to implement the rating in the way some users recommended, we would have to change a lot in the backend of our app, which is why we decided to leave this as a point we could possibly implement in the future, but it does not fit our scope for the CCL3.