Multi-module, Kotlin, MVI, Compose, Hilt, Navigation Component, Use-cases, Room, Retrofit

Related tags

Utility Dota-Info
Overview

Work in progress

Multi-module demo app that gets data from dota2 api.

API

https://docs.opendota.com/

Players by rank (GET)

https://api.opendota.com/api/playersByRank

Player (GET)

https://api.opendota.com/api/players/{account_id}

Hero Stats (GET)

https://api.opendota.com/api/heroStats

App Design

Module 1 (app)

MainActivity, BaseApplication, Screens, Navigation

Module 2 (core)

Core business models and classes.

Module 3 (players)

Top ranked players. Onclick takes to detail screen.

Module 4 (heros)

Hero's. Alphabetical with SearchView.

You might also like...
Markdown renderer for Kotlin Compose Multiplatform (Android, Desktop)

Markdown renderer for Kotlin Compose Multiplatform (Android, Desktop)

Compose easy forms validation library

Compose EasyForms Focus on building your form UI while the library do the heavy work for you. Features Built in support for most of the Form widgets i

A compose friendly way to deal with in app updates on android

In-App update compose A way to make in app updates in compose How to include in your project The library is available via MavenCentral: allprojects {

CreditCardHelper 🖊️  A Jetpack-Compose library providing useful credit card utilities such as card type recognition and TextField ViewTransformations
CreditCardHelper 🖊️ A Jetpack-Compose library providing useful credit card utilities such as card type recognition and TextField ViewTransformations

CreditCardHelper 🖊️ A Jetpack-Compose library providing useful credit card utilities such as card type recognition and TextField ViewTransformations

Remove the dependency of compiled kotlin on kotlin-stdlib

Dekotlinify This project aims to take compiled Kotlin Java bytecode (compiled by the standard Kotlin compiler) and remove all references to the Kotlin

gRPC and protocol buffers for Android, Kotlin, and Java.

Wire “A man got to have a code!” - Omar Little See the project website for documentation and APIs. As our teams and programs grow, the variety and vol

A DSL to handle soft keyboard visibility change event written in Kotlin.
A DSL to handle soft keyboard visibility change event written in Kotlin.

About A DSL to handle soft keyboard visibility change event written in Kotlin. How to use? Step 1. Add it in your root build.gradle at the end of repo

Kotlin matrix class which supports determinant, inverse matrix, matmul, etc.

Kotrix is a set of classes that helps people dealing with linear algebra in Kotlin.

Fuzzy string matching for Kotlin (JVM, native, JS, Web Assembly) - port of Fuzzy Wuzzy Python lib

FuzzyWuzzy-Kotlin Fuzzy string matching for Kotlin (JVM, iOS) - fork of the Java fork of of Fuzzy Wuzzy Python lib. For use in on JVM, Android, or Kot

Comments
  • Update libs and add Gradle Versions Plugin

    Update libs and add Gradle Versions Plugin

    Update libs and add Gradle Versions Plugin to check for dependency updates.

    App was not building in the latest version of Android Studio.

    Use the following commands to check for updates:

    gradlew dependencyUpdates
    

    or

    gradlew dependencyUpdates -PallowLessStable=true
    
    opened by rewgoes 0
  • Disables Jetifier

    Disables Jetifier

    This PR simply disables Jetifier, as is not needed by the project. Basically, applying Jetifier without any library needing it it will waste time during build.

    The PR first adds Bye Bye Jetifier Gradle Plugin to verify that Jetifier can be disabled. The result after applying the plugin and running:

    ./gradlew canISayByeByeJetifier -Pandroid.enableJetifier=false
    

    is the following:

    00:01:13: Executing task 'canISayByeByeJetifier --project-prop android.enableJetifier=false'...
    
    Executing tasks: [canISayByeByeJetifier] in project /(path_edited)/Dota-Info
    
    > Task :buildSrc:compileKotlin UP-TO-DATE
    > Task :buildSrc:compileJava NO-SOURCE
    > Task :buildSrc:compileGroovy NO-SOURCE
    > Task :buildSrc:pluginDescriptors UP-TO-DATE
    > Task :buildSrc:processResources NO-SOURCE
    > Task :buildSrc:classes UP-TO-DATE
    > Task :buildSrc:inspectClassesForKotlinIC UP-TO-DATE
    > Task :buildSrc:jar UP-TO-DATE
    > Task :buildSrc:assemble UP-TO-DATE
    > Task :buildSrc:compileTestKotlin NO-SOURCE
    > Task :buildSrc:pluginUnderTestMetadata UP-TO-DATE
    > Task :buildSrc:compileTestJava NO-SOURCE
    > Task :buildSrc:compileTestGroovy NO-SOURCE
    > Task :buildSrc:processTestResources NO-SOURCE
    > Task :buildSrc:testClasses UP-TO-DATE
    > Task :buildSrc:test NO-SOURCE
    > Task :buildSrc:validatePlugins UP-TO-DATE
    > Task :buildSrc:check UP-TO-DATE
    > Task :buildSrc:build UP-TO-DATE
    
    > Configure project :components
    ComposeOptions.kotlinCompilerVersion is deprecated. Compose now uses the kotlin compiler defined in your buildscript.
    
    > Configure project :hero:ui-heroDetail
    ComposeOptions.kotlinCompilerVersion is deprecated. Compose now uses the kotlin compiler defined in your buildscript.
    
    > Configure project :hero:ui-heroList
    ComposeOptions.kotlinCompilerVersion is deprecated. Compose now uses the kotlin compiler defined in your buildscript.
    
    > Task :canISayByeByeJetifier
    
    =========================================
    Project: DotaInfo
    =========================================
     * No legacy android support usages found
    
    =========================================
    Project: app
    =========================================
     * No legacy android support usages found
    
    =========================================
    Project: components
    =========================================
     * No legacy android support usages found
    
    =========================================
    Project: constants
    =========================================
     * No legacy android support usages found
    
    =========================================
    Project: core
    =========================================
     * No legacy android support usages found
    
    =========================================
    Project: hero
    =========================================
     * No legacy android support usages found
    
    =========================================
    Project: hero-datasource
    =========================================
     * No legacy android support usages found
    
    =========================================
    Project: hero-datasource-test
    =========================================
     * No legacy android support usages found
    
    =========================================
    Project: hero-domain
    =========================================
     * No legacy android support usages found
    
    =========================================
    Project: hero-interactors
    =========================================
     * No legacy android support usages found
    
    =========================================
    Project: ui-heroDetail
    =========================================
     * No legacy android support usages found
    
    =========================================
    Project: ui-heroList
    =========================================
     * No legacy android support usages found
    
    =====================================================================================
    * No dependencies with legacy android support usages! You can say Bye Bye Jetifier. *
    =====================================================================================
    
    Deprecated Gradle features were used in this build, making it incompatible with Gradle 8.0.
    Use '--warning-mode all' to show the individual deprecation warnings.
    See https://docs.gradle.org/7.0/userguide/command_line_interface.html#sec:command_line_warnings
    
    BUILD SUCCESSFUL in 36s
    1 actionable task: 1 executed
    00:01:50: Task execution finished 'canISayByeByeJetifier --project-prop android.enableJetifier=false'.
    

    The result confirms that Jetifier can be disabled:

    No dependencies with legacy android support usages! You can say Bye Bye Jetifier

    Hence, I've disabled Jetifier and reverted the commit applying the plugin. I've left all the steps for anyone to clarify any doubts.

    opened by xrubioj 0
  • "java.lang.AbstractMethodError" when I first launch App

    08-25 18:23:28.059 E/AndroidRuntime(18755): Process: com.codingwithmitch.dotainfo, PID: 18755
    08-25 18:23:28.059 E/AndroidRuntime(18755): java.lang.AbstractMethodError: abstract method "void androidx.lifecycle.DefaultLifecycleObserver.onCreate(androidx.lifecycle.LifecycleOwner)"
    08-25 18:23:28.059 E/AndroidRuntime(18755): 	at androidx.lifecycle.FullLifecycleObserverAdapter.onStateChanged(FullLifecycleObserverAdapter.java:36)
    08-25 18:23:28.059 E/AndroidRuntime(18755): 	at androidx.lifecycle.LifecycleRegistry$ObserverWithState.dispatchEvent(LifecycleRegistry.java:354)
    08-25 18:23:28.059 E/AndroidRuntime(18755): 	at androidx.lifecycle.LifecycleRegistry.addObserver(LifecycleRegistry.java:196)
    08-25 18:23:28.059 E/AndroidRuntime(18755): 	at androidx.compose.ui.platform.AndroidComposeView.onAttachedToWindow(AndroidComposeView.android.kt:808)
    08-25 18:23:28.059 E/AndroidRuntime(18755): 	at android.view.View.dispatchAttachedToWindow(View.java:20728)
    08-25 18:23:28.059 E/AndroidRuntime(18755): 	at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:3566)
    08-25 18:23:28.059 E/AndroidRuntime(18755): 	at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:3573)
    08-25 18:23:28.059 E/AndroidRuntime(18755): 	at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:3573)
    08-25 18:23:28.059 E/AndroidRuntime(18755): 	at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:3573)
    08-25 18:23:28.059 E/AndroidRuntime(18755): 	at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:3573)
    08-25 18:23:28.059 E/AndroidRuntime(18755): 	at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2596)
    08-25 18:23:28.059 E/AndroidRuntime(18755): 	at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:2126)
    08-25 18:23:28.059 E/AndroidRuntime(18755): 	at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:8618)
    08-25 18:23:28.059 E/AndroidRuntime(18755): 	at android.view.Choreographer$CallbackRecord.run(Choreographer.java:975)
    08-25 18:23:28.059 E/AndroidRuntime(18755): 	at android.view.Choreographer.doCallbacks(Choreographer.java:799)
    08-25 18:23:28.059 E/AndroidRuntime(18755): 	at android.view.Choreographer.doFrame(Choreographer.java:734)
    08-25 18:23:28.059 E/AndroidRuntime(18755): 	at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:960)
    08-25 18:23:28.059 E/AndroidRuntime(18755): 	at android.os.Handler.handleCallback(Handler.java:938)
    08-25 18:23:28.059 E/AndroidRuntime(18755): 	at android.os.Handler.dispatchMessage(Handler.java:99)
    08-25 18:23:28.059 E/AndroidRuntime(18755): 	at android.os.Looper.loop(Looper.java:236)
    08-25 18:23:28.059 E/AndroidRuntime(18755): 	at android.app.ActivityThread.main(ActivityThread.java:8073)
    08-25 18:23:28.059 E/AndroidRuntime(18755): 	at java.lang.reflect.Method.invoke(Native Method)
    08-25 18:23:28.059 E/AndroidRuntime(18755): 	at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:620)
    08-25 18:23:28.059 E/AndroidRuntime(18755): 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1011)
    
    opened by dabutaizha 0
Owner
Mitch Tabian
youtube.com/c/codingwithmitch
Mitch Tabian
Android app launcher module

Launcher Android launcher app Contains appDataSdk module which exposes app list data App showing applist with launcher (consumes appDataSdk module for

Vikas Mane 4 Jun 6, 2022
Android UI component to validate passwords.

PasswordValidationView Android UI component that validates passwords. All design credits goes to Piotr Sliwa And inspired by this design Demo Setup Ad

Kojo Fosu Bempa Edue 81 Nov 29, 2022
Generate helper methods for compose navigation using KSP

Compose NavGen Generate helper methods for compose navigation using KSP. ?? You can try it now, but it's still under development. ?? TODO Support defa

Kenji Abe 6 Feb 5, 2022
Utility library that utilizes KSP to generate Room type converter classes.

Roomie Roomie is an annotation processing library that utilizes KSP to geaRoomie is an annotation processing library that utilizes KSP to generate TypeConverter classes for Room. TypeConverter classes most often involve same boiler-plate code and Roomie makes it really easy to quickly create them with a single annotation.nerate TypeConverter classes for Room. TypeConverter classes most often invol

Chukwuka Eze 12 Aug 26, 2022
A cup of library to Parse RSS for android. Also available as a ConverterFactory for Retrofit & Fuel

ParseRSS RSS Parser for android Simple, concise, and extensible RSS Parser in the entire coffee shop. It can capture these information from the RSS ar

Muhammad Rifqi Fatchurrahman 23 Dec 10, 2022
Very easy to use wrapper library for Android SharePreferences

Treasure English document Treasure是一个Android平台上基于SharePreferences的偏好存储库,只需要定义接口,无需编写实现,默认支持Serializable和Parcelable。运行时0反射,不仅使用方便而且性能和原生写法几乎无差别。 使用方法 1

星一 507 Nov 12, 2022
A simple and easy to use stopwatch and timer library for android

TimeIt Now with Timer support! A simple and easy to use stopwatch and timer library for android Introduction A stopwatch can be a very important widge

Yashovardhan Dhanania 35 Dec 10, 2022
Use Android as Rubber Ducky against another Android device

Use Android as Rubber Ducky against another Android device

null 1.4k Jan 9, 2023
An easy-to-use, cross-platform measurement tool that pulls data out of CD pipelines and analysis the four key metrics for you.

Maintained by SEA team, ThoughtWorks Inc. Read this in other languages: English, 简体中文 Table of Contents About the Project Usage How to Compute Contrib

Thoughtworks 277 Jan 7, 2023
recompose is a tool for converting Android layouts in XML to Kotlin code using Jetpack Compose.

recompose is a tool for converting Android layouts in XML to Kotlin code using Jetpack Compose.

Sebastian Kaspari 565 Jan 2, 2023