droidcon KE 24 🔥🔨

Android app for the 5th Android Developer conference- Droidcon Kenya to be held in Nairobi on 6th - 8th November.

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 you have Java 17 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 17 as your preferred version to run the project.

With the new Android Gradle Plugin version 8.0.0, you need Java 17 to run the project and any terminal commands. A workaround for this is to add this in your global gradle.properties file:

org.gradle.java.home=/Applications/Android Studio.app/Contents/jbr/Contents/Home

This simply sets the Gradle Java home to the one set in Android Studio. Android Studio Flamingo comes bundled with Java 17. You only need to ensure the project uses Java 17. To do so, go to File -> Project Structure -> SDK Location -> Gradle Settings and set the Java Version to 17 from the list that appears.

image

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

The app will have the following features:

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

Designs

This is the link to the app designs:

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]. After defining the version, add your library in the [libraries] section 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.

Compose Preview and ViewModel

Previews are limited when using ViewModel within a composable.

If you want to preview a composable that uses a ViewModel, you should create another composable with the parameters from ViewModel passed as arguments of the composable. This way, you don't need to preview the composable that uses the ViewModel.

More on Previews and ViewModels can be found here.

Compatibility

This project uses coreLibraryDesugaring to support newer Java 8 APIs that are not available on API levels 25 and below. Specifically the Kotlin kotlinx.datetime API which depends on Java's java.time. This allows use of kotlinx.datetime.LocalDate without having to wrap it in @RequiresAPI(Build.VERSION_CODES.O) and also backports the fix to API level 21. More on Desugaring using Android Gradle Plugin can be found here. Instructions on how to set up and add coreLibraryDesugaring to your project can be found here.

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
Raynafs
Rachel Murabula
kibettheophilus
Kibet Theo
janewaitara
Jane Waitara
yveskalume
Yves Kalume
misshannah
Hannah Olukoye
wangerekaharun
Harun Wangereka
Borwe
Brian Orwe
chege4179
Peter Chege
robert-nganga
Robert Nganga
michaelbukachi
Michael Bukachi
KennethMathari
Kenneth Mathari
jumaallan
Juma Allan
MamboBryan
MamboBryan
Jacquigee
Jacquiline Gitau
emmanuelmuturia
Emmanuel Muturia
ndiritumichael
Michael Ndiritu
kanake10
N3
paulodhiambo
Odhiambo Paul
jumapaul
Paul Juma
cliffgor
Cliff Gor
Terry-Mochire
Terry Mochire
Njoguu
Whoisnjoguu
mertoenjosh
Martin Thuo
joelmuraguri
Joel Muraguri
etonotieno
Eton Otieno
mog-rn
Amos Nyaburi
BKinya
Beatrice Kinya
Dbriane208
Null
josphatmwania
Josphat Mwania
anuragkanojiya1
Null
bagechengzi
Null
donald-okara
Don Okara
joenjogu
Joenjogu
lokified
Sheldon Okware