GKI Salatiga's free and open source Android church application based on Jetpack Compose, distributed for F-Droid.
const val
types should be written in uppercase (e.g.,MAIN_TOP_BAR_COLOR
). Meanwhileval
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.
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 menuhttps://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.
- 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 throughlib.Logger
class methods, for consistency and neatness.
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
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.
- 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
- 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
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
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.
- 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