Skip to content

Simple Demo App that uses Wikipedia API to power free text search

Notifications You must be signed in to change notification settings

asadkhan777/WikipediaLearningApp

Repository files navigation

WikipediaLearningApp


Download the APK here

Screenshots

Scope & Purpose

  • This app was taken up as an assignment as part of the Kings Learning (Enguru) Tech interview process
  • Requirement & Spec document here
  • Wikipedia web service documentation here

Current Implementation & Future scope

  • Currently the App is structured such that it follows clean architecture system combined with the MVVM pattern

  • Notable library integrations include: - Kotlin Std Lib - Dagger2 - Retrofit2 - RxJava2 - Glide - Google Architecture Components

  • The App utilizes the Wikipedia API to search for related articles pertaining to user's interest

  • The most significant API used would be the query API, providing search results for the search term provided by the user via SearchView in the UI

  • This search feature uses various tools like RxJava, Gson & Retrofit to fetch data over the network is an asynchronous way

  • Swipe to refresh functionality is also implemented on the search results page

  • The listing page loads results in batches of 10, lazily loading more and more results as user scrolls down

  • Currently it uses Chrome custom tabs library to open the Wikipedia article inside the app itself.

  • Due to the wikipedia API being slightly 'unconventional', it didn't seem technically feasible to parse raw html for each & every article being fetched from the network

  • For offline (cache) functionality, chrome custom tabs allow an option to save the file locally for future use without network access.

  • There is room for improvement in this area, eg. Taking article contents in a mobile viewing friendly format & save those contents in local database using pageid

  • Such a cache could be set up using RoomDB library to store contents for offline usage

  • Due to time & technical constraints, this has been left for future revisions