An Android application for browsing video games and checking the latest gaming news from around the world.

Overview

Gamedge

Min API Platform Build License

An Android application for browsing video games and checking the latest gaming news from around the world.

Built entirely using the Jetpack Compose.

The aim of this project is to showcase the latest trends in Android development by utilizing the best practices, libraries, and tools to develop a fully-fledged Android application.

Contents

Demonstration

Videos

Demo 1

demo1.mp4
Demo 2

demo2.mp4
Demo 3

demo3.mp4

Screenshots

Tech Stack

  • Kotlin - First class and official programming language for Android development.
  • Jetpack Compose - Android’s modern toolkit for building native UI.
  • Coroutines and Flow - Official Kotlin's tooling for performing asynchronous work.
  • MVVM/MVI Architecture - Official recommended architecture for building robust, production-quality apps.
  • Android Jetpack - Jetpack is a suite of libraries to help developers build state-of-the-art applications.
    • Navigation Compose - Navigation Compose is a framework for navigating between composables while taking advantage of the Navigation component’s infrastructure and features.
    • ViewModel - The ViewModel is designed to store and manage UI-related data in a lifecycle conscious way.
    • StateFlow - StateFlow is a state-holder observable flow that emits the current and new state updates to its collectors.
    • Room - The Room library provides an abstraction layer over SQLite to allow for more robust database access.
    • DataStore - DataStore is a data storage solution that stores key-value pairs or typed objects with protocol buffers.
    • Dagger Hilt - Hilt is a dependency injection library for Android.
    • MotionLayout - MotionLayout allows you to create beautiful animations in your app without too much hassle.
    • Custom Tabs - Custom Tabs is a browser feature that gives apps more control over their web experience.
  • Accompanist - A collection of extension libraries for Jetpack Compose.
  • OkHttp - An HTTP client for making network calls.
  • Retrofit - A library for building REST API clients.
  • KotlinX Serialization - A multiplatform Kotlin serialization library.
  • Coil - An image loading library.
  • Hilt Binder - An annotating processing library that automatically generates Dagger Hilt's @Binds methods.
  • Kotlin Result - A multiplatform Result monad for modelling success or failure operations.
  • Detekt - A static code analysis library for Kotlin.
  • Ktlint - A library for formatting Kotlin code according to official guidelines.
  • Testing - The app is currently covered with unit tests and instrumentation tests.
    • JUnit - JUnit is a unit testing framework for the Java programming language.
    • Truth - Truth is a library providing fluent assertions for Java and Android.
    • MockK - MockK is a mocking library for Kotlin.
    • Coroutines Test - A library for testing Kotlin coroutines.
    • Turbine - A testing library for Kotlin Flows.
    • Dagger Hilt Test - A testing library for modifying the Dagger bindings in instrumented tests.
    • Room Testing - A library for testing Room migrations.
    • MockWebServer - A scriptable web server for testing HTTP clients.
  • Gradle's Kotlin DSL - Gradle’s Kotlin DSL is an alternative syntax to the Groovy DSL with an enhanced editing experience.
  • buildSrc - A special module within the project to manage dependencies and whatnot.

For more information about used dependencies, see this file.

Architecture

architecture

Development Setup

You'll need to supply API/client keys for the various services that the app uses in order to build the application.

IGDB

IGDB is a website dedicated to combining all the relevant information about games into a comprehensive resource for gamers everywhere. This is the main API that the app uses to fetch information about pretty much any video game there is.

Check this link on how to obtain a client ID and secret. Once you have obtained the keys, you can set them in your ~/.gradle/gradle.properties:

TWITCH_APP_CLIENT_ID=yout_client_id_here
TWITCH_APP_CLIENT_SECRET=your_client_secret_here

Gamespot

Gamespot is a video gaming website that provides news, reviews, previews, downloads, and other information on video games. The app uses its API to solely retrieve the latest news in the gaming world.

Check this link on how to obtain an API key. Once you have obtained the key, you can set it in your ~/.gradle/gradle.properties:

GAMESPOT_API_KEY=your_api_key_here

Download

Go to the Releases to download the latest APK.

Contribution

See the CONTRIBUTION.md file.

Questions

If you have any questions regarding the codebase, hit me up on Twitter.

License

Gamedge is licensed under the Apache 2.0 License.

Comments
  • The project is using an incompatible version (7.0.0-beta05) of the Android Gradle plugin.

    The project is using an incompatible version (7.0.0-beta05) of the Android Gradle plugin.

    I'm trying to build the project with new Android Studio (Arctic Fox), but it says (The project is using an incompatible version (7.0.0-beta05) of the Android Gradle plugin.), and If I upgrade it manually Hilt doesn't work properly, I keep getting@HiltAndroidApp base class must extend Application, tried cleaning the project, invalidate cache and restart but no success.

    opened by pesjak 2
  • Provide `contentType` for lazy layouts

    Provide `contentType` for lazy layouts

    As of Jetpack Compose 1.2, it's desirable to provide contentType for lazy layouts to achieve better reusability of composables in case layouts comprise of different types of items.

    enhancement 
    opened by mars885 0
  • About common-domain module

    About common-domain module

    Hi thanks for a great sample about modular application with compose. I'm curious about why are you seperate common-domain instead of adding domain package in every feature modules?

    opened by abalta-mobven 2
  • Create a lint check for verifying imports inside `feature-*` domain modules

    Create a lint check for verifying imports inside `feature-*` domain modules

    Each feature-* module can contain three subpackages called domain, data, and presentation. Ideally, the domain layer should not reference anything that lives inside data or presentation modules.

    Therefore, to automate this, a lint check can be created to enforce this behavior.

    enhancement 
    opened by mars885 0
  • AS always shows `Duplicate content roots detected` popup when Gradle sync is performed

    AS always shows `Duplicate content roots detected` popup when Gradle sync is performed

    At the moment of this writing, KSP requires us to specify where the generated code lives. If we were to omit it, the generated code does not get picked up and the build fails.

    The solution, however, causes the popup with text "Duplicate content roots detected" appear after every Gradle sync.

    Firstly, follow https://github.com/google/ksp/issues/37 issue and see whether a better solution is provided. Second, follow AS issue for Duplicate content roots detected popup appearing.

    enhancement 
    opened by mars885 0
  • Create a custom `@Preview` annotation as a shortcut for both light & dark themes

    Create a custom `@Preview` annotation as a shortcut for both light & dark themes

    Apparently, starting from Compose 1.2, it's possible to create a single annotation for previewing multiple configurations of a particular composable instead of duplicating @Preview multiple times everywhere.

    However, as of Jetpack Compose version 1.2 and Android Studio Chipmunk, preview just don't work. Therefore, as soon as previews get fixed, create a single preview annotation and use it for previewing composables. Something like this:

    @Preview
    @Preview(uiMode = Configuration.UI_MODE_NIGHT_YES)
    annotation class GamedgePreview
    

    Then, use it like so:

    @GamedgePreview
    @Composable
    private fun GameInfoLoadingStatePreview() {
      // ...
    }
    
    enhancement 
    opened by mars885 0
  • Animate game liking/unliking using animated vector drawable

    Animate game liking/unliking using animated vector drawable

    Before the migration to the Jetpack Compose, the action of liking & unliking a game by clicking the like button was animated using the animated vector drawable.

    However, the latest version of the Jetpack Compose (1.1.1 as of now) does not support that. Consider adding it back once the support comes along.

    The issue on the google issue tracker about this problem.

    enhancement 
    opened by mars885 0
Releases(v1.1.0)
Owner
Paul Rybitskyi
Enthusiastic Android Developer
Paul Rybitskyi
A Hello World and Template for the KorGe game engine

Korge Hello World and Template This is a Hello World and Template for the KorGe game engine. Using gradle with kotlin-dsl. You can open this project i

Kiet 0 May 1, 2022
🎓 Learning Kotlin Coroutines for Android by example. 🚀 Sample implementations for real-world Android use cases. 🛠 Unit tests included!

Kotlin Coroutines - Use Cases on Android ?? Learning Kotlin Coroutines for Android by example. ?? Sample implementations for real-world Android use ca

Lukas Lechner 2.1k Jan 3, 2023
An Android app built with Kotlin, consuming StarWars API to display characters of the popular StarWars Movie. It is built with the MVVM pattern and the latest Jetpack components.

StarWars An Android app built with Kotlin, consuming StarWars API to display characters of the popular StarWars Movie. It is built with the MVVM patte

Joel Kanyi 42 Nov 20, 2022
CovidTracker traces all the covid-19 cases all over the world.

CovidTracker Crona Tracker trace india covid-19 cases upto district level and can trace other countries cases too. It can also traces user's current l

Anuraj Jain 6 May 22, 2021
CodeLab for the workshop: A Composable New World

A Composable New World! Compose is here! ?? I've created a codelab where you can follow step by step the development of android application using Comp

Carlos Mota 9 Nov 25, 2022
Kotlin hello world for Cloudflare Workers

Kotlin hello world for Cloudflare Workers Your Kotlin code in main.kt, running on Cloudflare Workers In addition to Wrangler you will need to install

ProtoByter 0 Dec 9, 2021
WordGuess - A portuguese game inspired in the world fever wordle game

WordGuess WordGuess is a portuguese game inspired in the world fever wordle game

Anthoni Ipiranga 6 Jul 28, 2022
HelloKMM - Hello World in Kotlin Multiplatform Mobile (new empty project)

Hello KMM! Hello World in Kotlin Multiplatform Mobile (new empty project) Gettin

Blake Barrett 1 Feb 2, 2022
Kotlin-phoenix - A set of tools aimed to bridge Phoenix with the Kotlin Multiplatform world

Kotlin Phoenix This project is aimed to allow developers to work with Phoenix Ch

Adrien Jacquier Bret 5 Sep 21, 2022
Xoxo is a simple wrapper around org.w3c.dom to parse XML using nice Kotlin APIs

Xoxo ?? Xoxo is a simple wrapper around org.w3c.dom to parse XML using nice Kotlin APIs. No more NodeList, .item(), etc... just use .children, .filter

Martin Bonnin 51 Sep 1, 2022
Quick photo and video camera with a flash, customizable resolution and no ads.

Simple Camera A camera with flash, zoom and no ads. The camera is usable for both photo taking and video recording. You can switch between front and r

Simple Mobile Tools 644 Dec 26, 2022
Aggregated Android news, articles, podcasts and conferences about Android Development

DroidFeed Curated news feed for Android Developers! Stay up to date with the latest Android Development news. Built for the Android developer communit

Dogan Gulcan 183 Dec 2, 2022
Android News Reader app. Kotlin Coroutines, Retrofit and Realm

News Reader Android News Reader app Code that follows Packt Publishing Kotlin in Practice Video Course Example of Kotlin Coroutine usage, with Realm a

Marko Devcic 22 Oct 3, 2022
A simple App which fetches data from NewYork times api and show news to the user

Stay-TheNewsApp This is a simple java app, which fetches data from NewYork times api and show news to the user, News can be seen from various categori

Gautam Garg 0 Dec 7, 2021
📦📦Video downloader for Android - Download videos from Youtube, Facebook, Twitter, Instagram, Dailymotion, Vimeo and more than 1000 other sites

youtube-dl-android ?? An Android client for youtube-dl: https://github.com/rg3/youtube-dl Major technologies Language: Kotlin Architecture: MVVM Andro

Cuong Pham 443 Dec 30, 2022
Browse your memories without any interruptions with this photo and video gallery

Simple Gallery Simple Gallery Pro is a highly customizable lightweight gallery loved by millions of people for its great user experience. Organize and

Simple Mobile Tools 2.8k Jan 8, 2023
Anxiety free news reader for Android - developed using Kotlin

Android River is a modern Android 2.2 news app. It's now version 1.15. Android River has the following features: Read RSS 1.0, RSS 2.0 and ATOM 1.0. C

Dody Gunawinata 319 Nov 10, 2022
Mobile client for official Nextcloud News App written as Kotlin Multiplatform Project

Newsout Android and iOS mobile client for Nextcloud news App. The Android client is already available to download in the Play Store. F-Droid and Apple

Simon Schubert 118 Oct 3, 2022
News app sample with Retrof't

Android App Sample (ViewModel + LiveData + Kotlin + Retrofit + Dependency Injection (Hilt) + Coroutine) - News App Project Description In this project

Mouaz Kaadan 6 Sep 13, 2022