Page MenuHomePhabricator

Outreachy 31: Improve the Wikisource Reader App
Closed, ResolvedPublic

Description

Project title: Improve the Wikisource Reader App

Brief summary:
Wikisource Reader is a new Android app to download and read works from the Wikisource project. The app is based on Kotlin and depends on multiple open source projects, majorly Myne and Readium. The app communicates with the WSIndex API for metadata, which was built for the app but can be used for other purposes as well. Epub files are generated by the WS-Export project ( tag: WS Export).

Check:

Skills required:

  • Kotlin for Android development,
  • Python for the API development.

Learning outcomes:

The intern will expand their knowledge in or learn the following:

  • Android development
  • API calls and data usage in mobile applications

Mentors:

IMPORTANT: GSoC / Outreachy candidates are required to record all of their contributions to these tasks on Outreachy website. The applicants are also required to complete their final applications before the deadline of Nov. 3, 2025 at 4pm UTC.

Tips to candidates for the final application:

  • We look forward to any of your bold innovative ideas in your final application, provided you can deliver that in the scheduled timeline.
  • Understand the high level details of the project to improve the app.
  • You have already gained some insight about the Wikisource Reader app exploring its codes and contributing splendidly during the last few weeks. Use that learning in your final application.
  • Break down your goal into concrete milestones with an idea on what you will work during each of the 13 weeks of the internship.
  • You shall independently create project timelines without the help of mentors which should include bi-weekly milestones for project updates and feedback. Do not worry, mentors can later customize the plan with you if you may need more or less time to ramp up on specific goals.
  • In the final application, we shall highly appreciate deep care to the app and expect to improve it in a comprehensive way.

Related Objects

StatusSubtypeAssignedTask
ResolvedLGoto
ResolvedMuguro
ResolvedMuguro
ResolvedMuguro
ResolvedDeba_Jeff
OpenNone
ResolvedMuguro
ResolvedMuguro
ResolvedJanice.jf
ResolvedSystem625
ResolvedJanice.jf
ResolvedMuguro
ResolvedMuguro
ResolvedMuguro
ResolvedBUG REPORTSystem625
ResolvedFeatureSystem625
ResolvedBUG REPORTMuguro
ResolvedFeatureMuguro
ResolvedMuguro
ResolvedFeatureMuguro
ResolvedMuguro
OpenBUG REPORTMuguro
ResolvedMuguro
ResolvedFeatureMuguro
ResolvedBUG REPORTMuguro
OpenFeatureMuguro
OpenFeatureMuguro
ResolvedMuguro
ResolvedBUG REPORTMuguro
ResolvedBUG REPORTMuguro
ResolvedMuguro
ResolvedFeatureMuguro
ResolvedBUG REPORTMuguro
ResolvedFeatureSaiphani02
ResolvedFeatureMuguro
ResolvedFeatureMuguro
ResolvedFeatureMuguro
ResolvedMuguro
ResolvedMuguro
ResolvedFeatureMuguro
ResolvedFeatureMuguro
ResolvedFeatureMuguro
ResolvedFeatureMuguro
ResolvedBUG REPORTBodhisattwa
ResolvedFeatureMuguro
OpenFeatureMuguro
OpenBUG REPORTMuguro
ResolvedFeatureMuguro

Event Timeline

There are a very large number of changes, so older changes are hidden. Show Older Changes

All Outreachy participants, please make sure you submit your applications before Nov. 3, 4pm UTC if you wish to.

LGoto triaged this task as Medium priority.Nov 5 2025, 9:30 PM

Weekly Internship Report

Week 1: December 8 - December 12

Blog Week 1: Introduce yourself Link

Overview of Tasks Completed:

Task 1: Fixed Missing TTS icon in the playstore production release but it is working in local debugging

Task 2: Refactored "Myne" application to "WikisourceReader"

Key Accomplishments:

Build a production release apk that has the TTS icon and working correctly i.e you can listen to your books via audio.

Challenges Faced:

Challenge 1: Debugging a playstore release application.
Solution: Build an apk release with debug logs.

Learnings and Skills Gained

  1. Understood about apk and aab release that is uploaded to playstore.
  2. Read about ProGuard, that shrinks, optimizes, and obfuscates build, reducing app size and improving performance.
  3. Read and understand about database rooms, to save data locally in android appliaction.

Feedback and Support Needed:

Feedback/Support 1 : I tested the TTS feature with apk release and would really love guidance on testing the aab release version.
Feedback/Support 2 : How to best priotize on the tasks provided. Should I pick tasks as the others are pending reviews or wait to fix changes from reviews then move to the next task.

Goals for Week 2: December 15 - December 19

Goal 1:Books with title having virama characters are being joined in the API.

Goal 2: Adjust Category results screen top bar.

Goal 3: Add an option to sort list of books in a randomized manner.

Goal 4: Address comments raised from reviews of previous PRs.

Goal 5: Wikisource Reader App: year-page icon is confusing

Weekly Internship Report

Week 2: December 15 - December 19

Overview of Tasks Completed:

Task 1: Adjust Category results screen top bar.

Task 2: Add an option to sort list of books in a randomized manner.

Task 3: Make Sort options translatable

Goal 4: Wikisource Reader App: year-page icon is confusing

Goal 5: Update documentation on how to setup the API and run it locally.

Challenges Faced:

Challenge 1: SPARQL query distorts the virana characters combining them.

Learnings and Skills Gained

  1. Understood SPARQL query and how to fetch data from wikidata.
  2. Adding translations string resource and xml icons.
  3. Compose UI, learned about scaffold and adding topBar, bottomBar and floatingActionBar.

Feedback and Support Needed:

Feedback/Support 1 : Fetching title having virana characters as they are joined.

Goals for Week 3: December 22 - December 26

Goal 1: Write and post Everybody struggles blog.

Goal 2: Wikisource Reader App Technical Documentation

Goal 3: WSIndex API Technical Documentation

Goal 4: Fix language labels in different locales.

Goal 5: Display extra information from Wikidata in Book Details Screen

Goal 6: Books with title having virama characters are being joined in the API.

Goal 7: Clean up and remove unnecessary comments.

Goal 8 : Change author label language from book language to Interface language

Weekly Internship Report

Week 3: December 22 - December 26

Blog Week 3: Everybody struggles

Overview of Tasks Completed:

Task 1:Update Wikisource Reader App Technical Documentation for the APi in the app website.

Task 2: Fixed Display extra information from Wikidata in Book Details Screen in the API and the UI.

Task 3: Fixed Change author label language from book language to Interface language.

Task 4: Fixed Fix language labels in different locales.

Task 5: Remove fastlane as it is not used

Challenges Faced:

Challenge 1: Understanding virana characters.

Learnings and Skills Gained

  1. Understood about serializers in django and database relationships.
  2. Read about fastlane, used to automate build and release of an application.
  3. Read about locale and .getDisplayLanguage() that displays language names in different locales when the iso strings are passed.

Feedback and Support Needed:

Feedback/Support 1 : Due to the holidays been up and about but resuming fully from week 4.

Goals for Week 4: December 29 - January 2

Goal 1: Images do not rotate when vertical text option is selected

Goal 2: Books with title having virama characters are being joined in the API

Goal 3: Wikisource Reader App: progress bar placement and interactivity

Goal 4: Address comments raised from reviews of previous PRs.

Goal 5: Update API and App documentation in the website.

Weekly Internship Report

Week 4: December 29 - January 2

Overview of Tasks Completed:

Task 1: Update Wikisource Reader App Technical Documentation for the APP in the app website.

Task 2: Fixed Wikisource Reader App: progress bar placement and interactivity

Key Accomplishments:

Added interactivity of the progressbar by using a seekbar and optimising it to use the total progressions of each book position. This enables accuracy of the progression displayed even when you reach the end of the books.

Challenges Faced:

Challenge 1: Understanding virana characters.
Challenge 2: How readium handles vertical text interface. I'm expoloring how i can use system rotate screen when a user selects vertival text for right display of the images.

Learnings and Skills Gained

  1. Read about seekbar, an alternative of progressbar but allows interactivity of the progression.
  2. Read about hilt and dagger for dependency injection.
  3. Read about readium preferences including vertical text.

Feedback and Support Needed:

Feedback/Support 1 : Handling vertical text, if it is we can use system rotate screen for that.
Feedback/Support 2 : Understanding virana characters.

Goals for Week 5: January 5 - January 9

Goal 1: F-Droid listing of the Wikisource Reader Android App

Goal 2: Books update option in local library

Goal 3: Some basic usage analytics from the API

Goal 4: Splash screen icon improvement

Goal 5: Locale selection is showing duplicate values

Goal 6: Images do not rotate when vertical text option is selected

Goal 7: Address comments raised from reviews of previous PRs.

Goal 8: Update API and App documentation in the website.

Weekly Internship Report

Week 5: January 5 - January 9

Blog Week 5: Think about your audience

Overview of Tasks Completed:

Task 1: F-Droid listing of the Wikisource Reader Android App - Successfully build locally without binary consideration.

Task 2: Fixed Books update option in local library

Task 3: Added Some basic usage analytics from the API , i.e most viewed books, total requests weekly, daily and monthly, books viewed from searches and most downloaded books.

Task 4: Fixed Splash screen icon improvement

Task 5: Fixed Locale selection is showing duplicate values

Key Accomplishments:

Successfully built and added a custom middleware to log all successful book requests and save the logs to the database for analytics.

Challenges Faced:

Challenge 1: How readium handles vertical text interface. I have setup the readium kotlin repository and looking on resolving the issue from the readium side.

Learnings and Skills Gained

  1. Learn about f-droid, submitting an application to f-droid and creating your own repository.
  2. Learn about django middlewares and building custom middlewares.
  3. Learn about django templates and linking to views so as to get data from the database.
  4. Setting up custom locale languages configuration that you require for your application instead of using auto generateLocaleConfig

Feedback and Support Needed:

Feedback/Support 1 : To successfully submit the application to f-droid considering binary, we need the latest commit used in building the application. This avoids mismatch from f-droid build as they should produce the same output.

Goals for Week 6: January 14 - January 16

Goal 1: F-Droid listing of the Wikisource Reader Android App - Considering binary, after a playstore build.

Goal 2: Images do not rotate when vertical text option is selected

Goal 3: Book Downloads Analytics

Goal 4: Address comments raised from reviews of previous PRs.

Goal 5: Update API and App documentation in the website.

Goal 6: Improve the analytics page UI and add more details for analysis

Goal 7: Thumbnail not visible in library section

Weekly Internship Report

Week 6: January 12 - January 16

Overview of Tasks Completed:

Task 1: Fixed Book Downloads Analytics

Task 2: Fixed Thumbnail not visible in library section

Task 3: Added Some basic usage analytics from the API , i.e Added Api to save book downloads information.

Task 4: Fixed Splash screen icon improvement - Cropped the image to fully show it as it was been masked.

Key Accomplishments:

Successfully migrated room database when adding thumbnail url for a book so as to save it locally without the app crashing. Added schemas to track database versions and used export schema to true.

Challenges Faced:

Challenge 1: Still looking into the vertical rotation of images in readium.

Learnings and Skills Gained

  1. Migrating local database i.e room database using export schema.
  2. Building API endpoint and posting a request from the client side.

Feedback and Support Needed:

Feedback/Support 1 : To successfully submit the application to f-droid considering binary, we need the latest commit used in building the application. This avoids mismatch from f-droid build as they should produce the same output.

Goals for Week 7: January 19 - January 23

Goal 1: F-Droid listing of the Wikisource Reader Android App - Considering binary, after a playstore build.

Goal 2: Simple Guided Tour of the App for new users

Goal 3: Option in settings to start the guided tour

Goal 4: Save the book QID and title alone and not as a foreign key in thr analytics table.

Goal 5: Address comments raised from reviews of previous PRs.

Goal 6: Update API and App documentation in the website.

Goal 7: Mid-point project progress blog post

Weekly Internship Report

Week 7: January 19 - January 23

Blog Week 1: Mid-point project progress blog post Link

Overview of Tasks Completed:

Task 1:F-Droid listing of the Wikisource Reader Android App

Key Accomplishments:

Fixed the reproducible error while building to f-droid and all pipelines checks passed successfully.

Challenges Faced:

Challenge 1: f-droid builds requires reproducible applications and was having a challenge with that .

Learnings and Skills Gained

  1. Submitting an application to f-droid https://f-droid.org/en/docs/Submitting_to_F-Droid_Quick_Start_Guide/.

Goals for Week 8: January 26 - January 30

Goal 1: Simple Guided Tour of the App for new users

Goal 2: Option in settings to start the guided tour

Goal 3: Guided Tour inside the reader interface

Goal 4: Language label localisation in BookItemCard and Book Detail Screen

Goal 5: Update API and App documentation in the website.

Weekly Internship Report

Week 8: January 26 - January 30

Overview of Tasks Completed:

Task 1: Fixed Simple Guided Tour of the App for new users

Task 2: Option in settings to start the guided tour

Key Accomplishments:

Successfully added TapTargetCoordinator on Home Screen and navigation screen and a toggle button in the settings screen that restarts the TapTargetCoordinator guide. Added it to scope based and make it easier to add to other screens.

Challenges Faced:

Challenge 1: Managing state across multiple screens using a single ViewModel was initially challenging because I was registering them as separate Hilt models. I resolved this by sharing the same Hilt ViewModel instance across the screens.

Learnings and Skills Gained

  1. Using multiple TapTargetCoordinator and ensuring they are following a sequence..
  2. Understand state management and registering view models with Hilt.

Feedback and Support Needed:

Feedback/Support 1 : Documentation on adding guided tour to readium.

Goals for Week 9: February 2 - February 6

Goal 1: Guided Tour inside the reader interface

Goal 2: Store Wikidata IDs for Genre, Form of Work, and Subject in WsIndex

Goal 3: Language label localisation in BookItemCard and Book Detail Screen

Goal 4: Show update prompt in the app when there is a new update

Goal 5: Save the book QID and title alone and not as a foreign key in the analytics table.

Goal 6: Address comments raised from reviews of previous PRs.

Goal 7: Update API and App documentation in the website.

Goal 8 : Career opportunities blog.

Weekly Internship Report

Week 9: February 2 - February 6

Blog Week 1: Career opportunities Blog

Overview of Tasks Completed:

Task 1: Store Wikidata IDs for Genre, Form of Work, and Subject in WsIndex

Task 2: Language label localisation in BookItemCard and Book Detail Screen

Task 3: Show update prompt in the app when there is a new update

Key Accomplishments:

Configured In-app updates that notify you to update the application whenever a new update is released in play store.

Challenges Faced:

Challenge 1: Testing the In-app updates requires internal app sharing. This means building the application and uploading different versions so as to trigger the update logic.

Challenge 2: Guided tour on the reader interface on how to use the app.

Learnings and Skills Gained

  1. In app updates logic for play store.
  2. Play console in app sharing.

Goals for Week 10: February 9 - February 13

Goal 1: Guided Tour inside the reader interface

Goal 2: WSIndex metadata caching in App

Goal 3: WSIndex Admin interface.

Goal 4: Analytics table should have book title in original language.

Goal 5: Save the book QID and title alone and not as a foreign key in the analytics table.

Weekly Internship Report

Week 10: February 9 - February 13

Overview of Tasks Completed:

Task 1: Guided Tour inside the reader interface

Task 2: WSIndex Admin interface

Task 3: Analytics table should have book title in original language

Key Accomplishments:

Created an admin site where you can do CRUD operations on all the tables i.e the ones in books app and analytics app. Also added a button in the books page that calls the update catalog management command. This site is password protected and not accessed by everyone.

Challenges Faced:

Challenge 1: Added Guided tour on the reader interface on how to use the app but not on all the items as it is been masked.

Learnings and Skills Gained

  1. Admin dashboard using Jazzmin.
  2. TapTargetView for the tap targets inside the reader application.

Goals for Week 11: February 16 - February 20

Goal 1: WSIndex metadata caching in App

Goal 2: Save the book QID and title alone and not as a foreign key in the analytics table.

Goal 3: Sync API subjects and genre updates to the application and localise.

Goal 4: Option for scrolling for readers while changing chapters

Goal 5: Option for vertical swiping for readers while changing pages

Goal 6: Address comments from the PRs

This comment was removed by Muguro.

Weekly Internship Report

Week 11: February 16 - February 20

Overview of Tasks Completed:

Task 1: WSIndex metadata caching in App

Task 2: Option for scrolling for readers while changing chapters

Task 3: Sync API subjects and genre updates to the application and localise.

Key Accomplishments:

Implemented the chapter scrolling succesfully. you can either select between up/down chapter scrolling or left/right chapter scrolling. when one is selected, the other is disabled.

Challenges Faced:

Challenge 1: Styling jazzman, a django admin interface. could not find the CDN links.

Learnings and Skills Gained

  1. OkHttp library, a cache interceptor used to manage HTTP caching logic and policies.

Goals for Week 12: February 23 - February 27

Goal 1: Save the book QID and title alone and not as a foreign key in the analytics table.

Goal 2: Option for vertical swiping for readers while changing pages

Goal 3: Address comments from the PRs.

Weekly Internship Report

Week 12: February 23 - February 27

Overview of Tasks Completed:

Task 1: Save the book QID and title alone and not as a foreign key in the analytics table.

Task 2: Save book title in original language for downloaded books analytics.

Task 3: Wikisource Reader App Technical Documentation

Challenges Faced:

Challenge 1: Styling jazzman, a django admin interface. could not find the CDN links.

Challenge 2: Still looking into this Option for vertical swiping for readers while changing pages

Challenge 3: Pending PRs

Goals for Week 13: March 2 - March 6

Goal 1: Option for vertical swiping for readers while changing pages.

Goal 2: Address comments from the PRs.