droidcon KE 23 🔥🔨

Android app for the 4th Android Developer conference- droidcon to be held in Nairobi date to be announced.

This project is the Android app for the conference. The app supports devices running Android 5.0+, and is optimized for phones and tablets of all shapes and sizes.

Running the Project

To ensure the project runs on your local environment ensure to you have Java 11 on your pc or if you don't have you can install it from here.

If you have multiple installations of Java make sure to set Java 11 as your preferred version to run the project.

Dependencies

  1. Jetpack Compose
  2. Coroutines - For Concurrency and Asynchronous tasks
  3. Ktor - For network requests
  4. Hilt - For Dependency Injection
  5. Crashlytics
  6. Coil - For Image Loading and Caching
  7. Lint Checks - Ktlint

Architecture

The proposed architecture is as follows;

Data

This layer will include;

  1. Network Calls
  2. Caching
  3. Storing and fetching Preferences.
  4. The repository implementation
  5. The relevant data models
  6. Relevant Mappers

Domain

This layer will contain;

  1. The repository
  2. The relevant domain models.

Presentation

  1. View
  2. ViewModels
  3. Relevant Mappers
  4. Relevant Models.

Features

App will have the following features:

  • Sessions
  • Feed
  • About
  • Home
  • Speakers
  • Sponsors
  • Authentication
  • Feedback

Designs

This is the link to the app designs:
[Light Theme] (https://xd.adobe.com/view/dd5d0245-b92b-4678-9d4a-48b3a6f48191-880e/)
[Dark Theme] (https://xd.adobe.com/view/5ec235b6-c3c6-49a9-b783-1f1303deb1a8-0b91/)

The app uses a design system: Chai

Dependencies

The project uses Versions Catalog to set up and share dependencies across the modules. The main reasons for choosing to adopt Versions Catalog are:

  • Central place to define dependencies.
  • Easy syntax.
  • Does not compromise on build speeds as changes do not need the module to be compiled.

To add a dependency, navigate to gradle/libs.versions.toml* file, which has all the dependencies for the whole project. This file has the following sections:

[versions] is used to declare the version numbers that will be referenced later by plugins and libraries. [libraries] Define the libraries that will be later accessed in our Gradle files. [bundles] Are used to define a set of dependencies. For this, we have compose, room, lifecycle and ktor as examples. [plugins] Used to define plugins.

You need to add your dependency version in [versions]. This is unnecessary if you are not sharing the version across different dependencies. After defining the version, add your library in the [libraries] section as:

compose-activity = "androidx.activity:activity-compose:1.5.0"

Moreover, if you have already defined the version in [versions], you define it as:

androidx-splashscreen = { module = "androidx.core:core-splashscreen", version.ref = "splash" }

Note:

  • You can use separators such as -, _v, . that will be normalized by Gradle to . in the Catalog and allow you to create subsections.
  • Define variables using CamelCase.\
  • Check if the library can be added to any existing bundles.

Contributing

Contributions are always welcome!

See CONTRIBUTING.md for ways to get started.

Contributors

We would endlessly like to thank the following contributors

chepsi
Evans Chepsiror
janewaitara
Jane Waitara
KennethMathari
Kenneth Mathari
wangerekaharun
Harun Wangereka
jumaallan
Juma Allan
MamboBryan
MamboBryan
chege4179
Peter Chege
misshannah
Hannah Olukoye
yveskalume
Yves Kalume
mog-rn
Amos Nyaburi
Joel-K-Muraguri
Joel Muraguri
BKinya
Beatrice Kinya
Jacquigee
Jacquiline Gitau
mertoenjosh
Martin Thuo
michaelbukachi
Michael Bukachi
kibettheophilus
Kibet Theo