Skip to content

GKI Salatiga's free and open source Android church application based on Jetpack Compose

License

Notifications You must be signed in to change notification settings

gkisalatiga/gkisalatiga-foss

gkisalatiga-foss

GKI Salatiga's free and open source Android church application based on Jetpack Compose, distributed for F-Droid.

A. Documentation

Coding Convention

  • const val types should be written in uppercase (e.g., MAIN_TOP_BAR_COLOR). Meanwhile val types can be written in lowercase, if preferred.
  • Mutable composable variable name should have mutable name prefix.
  • Inline comments in a companion object should use the /* */ syntax.

Deep link URI pattern handling

The application is designed to handle URLs matching gkisalatiga.org URI with https scheme.

The application specifically use the https://gkisalatiga.org/app/deeplink URI pattern to handle navigations and patterns for internal uses (e.g., notification user-click action). This means we assume the path /app/deeplink should not exist in gkisalatiga.org's actual website root, so that we can handle internal intent deep-linkings.

Currently, the list of registered deeplinks in this app is as follows:

  • https://gkisalatiga.org/app/deeplink/saren: Opens the "SaRen" video playlist menu
  • https://gkisalatiga.org/app/deeplink/ykb: Opens the list of YKB daily devotionals

Any URI with gkisalatiga.org host that does not match the above registered deeplink will automatically trigger the WebView and display the link in the app's WebView.

Debug Logging

  • Every debug message should clarify the class name where the logging comes from. Use lib.Logger logging methods do perform back-end logcat loggings. These methods automatically handle verbosing of enclosing class and method names. For instance, Logger.log({}, "Hello World!") to print out "Hello World" in the logcat display while also verbosing the class and method names where the logging takes place.
  • Logging and android.util.Log-calling must only be done through lib.Logger class methods, for consistency and neatness.

Notification

In the most recent update, GKI Salatiga activates the following scheduled notification:

  • 04:00:05 (Daily): The SaRen devotional video
  • 12:00:05 (Daily): The YKB devotional article reminder

UI Class

User interface classes are categorized into two main classifications: Screen and Fragment.

A Screen is similar to an activity in the conventional Android ViewModel. It occupies the whole screen and can be navigated to/from another screen. Each screen UI in GKI Salatiga should be registered in lib.NavigationRoutes so that the navigator can handle the composition of the screen.

A Fragment is any reusable or dynamically rendered composable inside a screen. It cannot be navigated to/from another fragment or screen, and must be explicitly called in a UI composable class in order to be displayed.

Each UI class file should bear a global companion object, useful in passing data and arguments between screens and to expose the current UI's state to the rest of the app. The companion object's class should be prefixed with the word "companion." For instance, ScreenMainCompanion and FragmentHomeCompanion. The companion class should be stored within the same file wherein the respective UI class (e.g., ScreenMain) resides.

B. Roadmap

September 2024

  • Add splash screen at launch
  • Add change log to the "About" screen
  • Add new app updates checker
  • Add content refresher
  • Add privacy policy
  • Change SVG resources color according to theme (reference)
  • Replace hard-coded strings, values, and dimensions with Android resource XML values
  • Replace the implementation of "GlobalSchema.context" with "LocalContext.current" to prevent memory leak
  • Replace debug toasts with "if (debug)" expressions, in which "debug" variable can be toggled manually
  • Fix bottom nav not scrolling the horizontal pager issue

October 2024

  • Add background feed fetcher (data updater) using WorkManager
  • Add "ruang berbagi" (promotional) feature
  • Add search content feature
  • Create the wiki page and migrate documentations from README.md to the respective wiki pages
  • Fix "Carousel not displaying the latest data"
  • Fix double splash screen on Android 12 or higher (or, perhaps, just remove splash screen entirely?)
  • Fix "Notification appears at exact time of the day, but at both AM and PM"
  • Migrate/upgrade main JSON data to v2.0
  • Migrate/upgrade gallery JSON data to v2.0
  • Migrate/upgrade static JSON data to v2.0
  • Remove ambiguous "upload date" of videos in "Content" tab

C. Privacy Policy

The latest privacy policy document of GKI Salatiga can be read in this GitHub repository file. However, this README file has summarized the privacy policy as follows:

  • GKI Salatiga is open source
  • GKI Salatiga collects personally identifiable data, such as (but not limited to): email, name, age, gender, address, date of birth, profile photo, location, and phone number
  • GKI Salatiga does not use any third-party tracking service

D. Attribution

This repository was migrated from the original repo, GKI Salatiga Plus, which has now been made a public archive. You will see throughout this repo that some codes still refer to GKI Salatiga Plus instead of just GKI Salatiga. This is minor and does not affect the overall experience of the app.

License of Materials Used

Open source materials used as hard-coded parts of the application

  • Android Studio Asset Studio Icon Library; The Android Open Source Project (C) 2024 (Apache 2.0) Link
  • Android YouTube Player; Pierfrancesco Soffritti (C) 2023 (MIT) Link
  • Compose Markdown; Jeziel Lago (C) 2024 (MIT) Link
  • Compose UI - Coil; Coil Contributors (C) 2024 (Apache 2.0) Link
  • Jetpack Compose Material3; The Android Open Source Project (C) 2024 (Apache 2.0) Link
  • Material Symbols & Icons - Google Fonts; The Android Open Source Project (C) 2024 (SIL Open Font License) Link
  • Phosphor; Phosphor Icons (C) 2024 (MIT) Link 1, Link 2
  • RemixIcon Icon Set; Remix-Design (C) 2024 (Apache 2.0) Link 1, Link 2
  • UnzipUtil; Nitin Praksh (C) 2021 (Apache 2.0) Link 1, Link 2
  • WorkManager Kotlin Extensions; The Android Open Source Project (C) 2024 (Apache 2.0) Link
  • ZoomableBox; Sean (C) 2022 (CC BY-SA 4.0) Link

Open source materials dynamically used in the WebView

  • Framacarte; Framasoft (C) 2024 (CC BY-SA 4.0) Link
  • OpenStreetMap; OpenStreetMap Foundation (OSMF) (C) 2024 (ODbL 1.0) Link
  • Plus Jakarta Sans; Tokotype (C) 2020 (OFL 1.1) Link

License of biblical materials and electronic books used in the app per user's download consent

  • Alkitab Yang Terbuka; Yayasan Lembaga SABDA (YLSA) (C) 2011-2024 (CC-BY-NC-SA-4.0) Link 1 Link 2
  • Bible in Basic English; Samuel Henry Hooke, Cambridge Press (Public Domain) Link
  • World English Bible; Michael Paul Johnson (Public Domain) Link 1 Link 2

About

GKI Salatiga's free and open source Android church application based on Jetpack Compose

Topics

Resources

License

Code of conduct

Security policy

Stars

Watchers

Forks

Releases

No releases published

Languages