Coder Social home page Coder Social logo

static-var / vlr-gg Goto Github PK

View Code? Open in Web Editor NEW
30.0 1.0 3.0 67.79 MB

An android app is written in Jetpack compose, which uses REST API that parses vlr.gg and gives a list of upcoming matches, completed matches, and their match details.

Kotlin 100.00%
jetpack-compose android kotlin kotlinx-serialization hilt-android ktor-client vlrgg

vlr-gg's Introduction

GitHub Release GitHub Repo stars Beta Play store release

🚧 VLR-GG (Unofficial application) 🚧

Get it on Google Play

An unofficial android app for vlr.gg, written in Jetpack compose, which uses REST API that parses vlr.gg (Code for the scrapper can be found here, thanks to @akhilnarang for hosting and maintaining the scrapping code.)

The application is not listed on Play Store, but you will receive in app updates for every release (you can choose to install the update or ignore it)

πŸ“Έ Preview πŸ“Έ

There were no designs / mock ups during the development of this app, this was developed as a side project / hobby.

Light Dark

✨ App Overview ✨

The app currently shows the following information

  • News and news articles
  • (Ongoing, upcoming and completed) matches and matche details
  • (Ongoing, upcoming and completed) events and events details
  • Team details
  • Team ranks per region

Additional features

  • Users can opt in to get notified for their choice of matches a few minutes before it starts.
  • Users can opt in to get notified for their favorite teams' match a few minutes before it starts.
  • Widget to see scores and updates on your home screen.
  • App uses Material 3 theming.

πŸ§‘β€πŸ’» Dev Overview πŸ§‘β€πŸ’»

The application has been written completely in Kotlin and Jetpack Compose

Libraries used:

  • Material3 - M3 opens up new possibilities for both brand colors and individual color preferences to converge in one-of-a-kind experiences. The color system embraces the need for color to reflect an app’s design sensibility, while also honoring the settings that individuals choose for themselves.
  • Coroutines - Kotlin solves Asynchronous or non-blocking programming problem in a flexible way by providing coroutine support at the language level and delegating most of the functionality to libraries.
  • Hilt - Hilt is a dependency injection library for Android that reduces the boilerplate of doing manual dependency injection in your project.
  • Room - The Room persistence library provides an abstraction layer over SQLite to allow for more robust database access while harnessing the full power of SQLite.
  • Firebase Analytics - Analytics is an app measurement solution, available at no charge, that provides insight on app usage and user engagement.
  • Firebase Messaging - Firebase Cloud Messaging (FCM) is a cross-platform messaging solution that lets you reliably send messages at no cost.
  • Ktor-client - Ktor is a framework to easily build connected applications
  • Kotlinx Serialization - Kotlin serialization consists of a compiler plugin, that generates visitor code for serializable classes, runtime library with core serialization API and support libraries with various serialization formats.
  • Navigation Compose - Navigation Compose enables you to navigate between composables while taking advantage of the Navigation component’s infrastructure and features.
  • ViewModel - The ViewModel class is designed to store and manage UI-related data in a lifecycle conscious way. The ViewModel class allows data to survive configuration changes such as screen rotations.
  • Glance - Build layouts for remote surfaces using a Jetpack Compose-style API.
  • SplashScreen - The SplashScreen API enables a new app launch animation for all apps when running on a device with Android 12 or higher. This includes an into-app motion at launch, a splash screen showing your app icon, and a transition to your app itself.
  • Material Icons - Material Design system icons as seen on Google Fonts.
  • Webkit - Provides tools for browsing the web.
  • Accompanist - Accompanist is a group of libraries that aim to supplement Jetpack Compose with features that are commonly required by developers but not yet available.
    • System Ui Controller
    • Navigation Animation
    • Pager & Pager Indicators
    • Webview
  • Jsoup - jsoup is a Java library for working with real-world HTML. It provides a very convenient API for fetching URLs and extracting and manipulating data, using the best of HTML5 DOM methods and CSS selectors.
  • Landscapist-glide - Jetpack Compose image loading library which fetches and displays network images.

License

Copyright (c) 2022 Shreyansh Lodha

Permission is hereby granted, free of charge, to any
person obtaining a copy of this software and associated
documentation files (the "Software"), to deal in the
Software without restriction, including without
limitation the rights to use, copy, modify, merge,
publish, distribute, sublicense, and/or sell copies of
the Software, and to permit persons to whom the Software
is furnished to do so, subject to the following
conditions:

The above copyright notice and this permission notice
shall be included in all copies or substantial portions
of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF
ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR
IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
DEALINGS IN THE SOFTWARE.

vlr-gg's People

Contributors

renovate-bot avatar renovate[bot] avatar static-var avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar

vlr-gg's Issues

BottomNavigationBar is redrawn when moving between home screen destinations

When navigating between destinations on the main screen the bottom bar is redrawn for each destination, which should not be the case.

Passing in NavState as an input is causing the unnecessary recomposition when you can lean on AndroidX NavController to figure out the currently active destination and pass around inputs like selected/unselected icon using a holder class like this.

Navigation backstack does not enforce exclusive destinations

If you navigate between destinations in the home tab bar they will keep getting added to the backstack and trying to exit the app by pressing back will take you through your entire navigation journey before closing the app.

Steps to reproduce

  • Tap bottom nav items in this order: News -> Matches -> Events -> About -> News
  • Press back

App should exit here but instead takes you back through the app in reverse order of what you selected above

Here's how I fixed it for Claw: msfjarvis/compose-lobsters@2e50342

Add A/B testing to check performance of Brotli vs Gzip

The backend is capable of supporting both gzip and brotli, both of them are able to reduce the data size significantly to approximatly 1/10.
Brotli out of the box doesn't give better results than gzip, but once we make brotli more aggressive is when we can see it performs better than gzip but it does come at a longer wait duration for the response.
Let's run an A/B test for a few releases to see which one performs better in our case.

Add in app change-log reader for users to see changes in each build.

Currently there's no way for users to know about the changes in a new release unless they read the change log from github release page.
Figure out a way to solve this problem and show the change log with the download update prompt.
Also figure out if there's a way to display change log of multiple previous versions and implemente it if it's simple enough.

Code cleanup and simplification for Detail screen

Detail screens for match and events both have large composable functions which aren't ideal and can definitely be reduced and simplified. As an added benifit it should also give us more test friendly composable.

Match Notification QoL

It would be awesome to be able to toggle match notifications for an entire event so you don't have to open every single match to activate the notification.

Dependency Dashboard

This issue lists Renovate updates and detected dependencies. Read the Dependency Dashboard docs to learn more.

Rate-Limited

These updates are currently rate-limited. Click on a checkbox below to force their creation now.

  • chore(deps): update benchmark to v1.2.4 (androidx.baselineprofile, androidx.benchmark:benchmark-macro-junit4)
  • chore(deps): update dependency com.google.devtools.ksp to v1.9.24-1.0.20
  • chore(deps): update detekt to v1.23.6 (io.gitlab.arturbosch.detekt, io.gitlab.arturbosch.detekt:detekt-gradle-plugin)
  • chore(deps): update kotlin monorepo to v1.9.24 (org.jetbrains.kotlin.jvm, org.jetbrains.kotlin.plugin.parcelize, org.jetbrains.kotlin.plugin.serialization, org.jetbrains.kotlin.kapt, org.jetbrains.kotlin.android, org.jetbrains.kotlin:kotlin-serialization, org.jetbrains.kotlin:kotlin-gradle-plugin)
  • chore(deps): update plugin gms-plugin to v4.4.2
  • fix(deps): update dependency androidx.compose.material3.adaptive:adaptive to v1.0.0-beta04
  • fix(deps): update dependency androidx.compose.material3.adaptive:adaptive-layout to v1.0.0-beta04
  • fix(deps): update dependency androidx.compose.material3.adaptive:adaptive-navigation to v1.0.0-beta04
  • fix(deps): update dependency com.github.skydoves:landscapist-animation to v2.3.5
  • fix(deps): update dependency com.github.skydoves:landscapist-glide to v2.3.5
  • fix(deps): update dependency com.github.skydoves:sandwich-ktor to v2.0.8
  • fix(deps): update dependency com.michael-bull.kotlin-result:kotlin-result to v1.1.21
  • fix(deps): update dependency dev.chrisbanes.compose:compose-bom to v2024.03.00-alpha02
  • fix(deps): update ktor monorepo to v2.3.12 (io.ktor:ktor-client-mock, io.ktor:ktor-serialization-kotlinx-json, io.ktor:ktor-client-content-negotiation, io.ktor:ktor-client-encoding, io.ktor:ktor-client-serialization, io.ktor:ktor-client-okhttp)
  • chore(deps): update dependency gradle to v8.8
  • chore(deps): update gradle to v8.5.0 (com.android.test, com.android.library, com.android.application, com.android.tools.build:gradle)
  • chore(deps): update hilt to v2.51.1 (com.google.dagger:hilt-android-gradle-plugin, com.google.dagger.hilt.android, com.google.dagger:hilt-compiler, com.google.dagger:hilt-android)
  • chore(deps): update sentry to v4.8.0 (io.sentry.android.gradle, io.sentry.android.gradle:io.sentry.android.gradle.gradle.plugin)
  • fix(deps): update dependency androidx.activity:activity-compose to v1.9.0
  • fix(deps): update dependency androidx.appcompat:appcompat to v1.7.0
  • fix(deps): update dependency androidx.browser:browser to v1.8.0
  • fix(deps): update dependency androidx.core:core-ktx to v1.13.1
  • fix(deps): update dependency androidx.glance:glance-appwidget to v1.1.0
  • fix(deps): update dependency androidx.lifecycle:lifecycle-runtime-compose to v2.8.2
  • fix(deps): update dependency androidx.lifecycle:lifecycle-viewmodel-compose to v2.8.2
  • fix(deps): update dependency androidx.test.espresso:espresso-core to v3.6.1
  • fix(deps): update dependency androidx.test.ext:junit to v1.2.1
  • fix(deps): update dependency androidx.test.ext:junit-ktx to v1.2.1
  • fix(deps): update dependency androidx.test:core-ktx to v1.6.1
  • fix(deps): update dependency androidx.webkit:webkit to v1.11.0
  • fix(deps): update dependency app.cash.turbine:turbine to v1.1.0
  • fix(deps): update dependency com.google.android.material:material to v1.12.0
  • fix(deps): update dependency com.google.dagger:hilt-android-gradle-plugin to v2.51.1
  • fix(deps): update dependency com.google.truth:truth to v1.4.3
  • fix(deps): update dependency io.nlopez.compose.rules:detekt to v0.4.4
  • fix(deps): update dependency org.jetbrains.kotlinx:kotlinx-serialization-json to v1.7.1
  • fix(deps): update sentry.sdk to v7.10.0 (io.sentry:sentry-android-okhttp, io.sentry:sentry-bom)
  • chore(deps): update actions/cache action to v4
  • chore(deps): update actions/upload-artifact action to v4
  • chore(deps): update dependency com.google.devtools.ksp to v2
  • chore(deps): update kotlin monorepo to v2 (major) (org.jetbrains.kotlin.jvm, org.jetbrains.kotlin.plugin.parcelize, org.jetbrains.kotlin.plugin.serialization, org.jetbrains.kotlin.kapt, org.jetbrains.kotlin.android, org.jetbrains.kotlin:kotlin-serialization, org.jetbrains.kotlin:kotlin-gradle-plugin)
  • fix(deps): update dependency com.google.firebase:firebase-messaging-ktx to v24
  • fix(deps): update dependency com.michael-bull.kotlin-result:kotlin-result to v2
  • πŸ” Create all rate-limited PRs at once πŸ”

Open

These updates have all been created already. Click a checkbox below to force a retry/rebase of any.

Detected dependencies

github-actions
.github/workflows/internal_play_store_release_dispatcher.yml
  • actions/checkout v4
  • actions/setup-java v4
  • actions/cache v3
  • r0adkll/upload-google-play v1.1.2
  • mathieudutour/github-tag-action v6.0
  • ncipollo/release-action v1
.github/workflows/signed_release_dispatcher.yml
  • actions/checkout v3
  • actions/setup-java v3
  • actions/upload-artifact v3
  • mathieudutour/github-tag-action v6.0
  • ncipollo/release-action v1
  • actions/checkout v3
.github/workflows/telegram_release.yml
  • actions/checkout v4
  • actions/setup-java v3
  • actions/cache v3
gradle
gradle.properties
settings.gradle.kts
build.gradle.kts
app/build.gradle.kts
baselineProfile/build.gradle.kts
benchmark/build.gradle.kts
build-logic/gradle.properties
build-logic/settings.gradle.kts
build-logic/convention/build.gradle.kts
gradle/libs.versions.toml
  • com.android.tools.build:gradle 8.3.0
  • org.jetbrains.kotlin:kotlin-gradle-plugin 1.9.22
  • org.jetbrains.kotlinx:kover 0.6.1
  • io.nlopez.compose.rules:detekt 0.3.11
  • com.google.dagger:hilt-android-gradle-plugin 2.50
  • org.jetbrains.kotlin:kotlin-serialization 1.9.22
  • androidx.room:room-ktx 2.6.1
  • androidx.room:room-runtime 2.6.1
  • androidx.room:room-compiler 2.6.1
  • dev.chrisbanes.compose:compose-bom 2024.03.00-alpha01
  • androidx.navigation:navigation-compose 2.7.7
  • androidx.compose.material3.adaptive:adaptive 1.0.0-alpha08
  • androidx.compose.material3.adaptive:adaptive-layout 1.0.0-alpha08
  • androidx.compose.material3.adaptive:adaptive-navigation 1.0.0-alpha08
  • com.google.firebase:firebase-messaging-ktx 23.4.1
  • androidx.core:core-ktx 1.12.0
  • androidx.appcompat:appcompat 1.6.1
  • androidx.activity:activity-compose 1.8.2
  • androidx.lifecycle:lifecycle-runtime-compose 2.7.0
  • androidx.lifecycle:lifecycle-viewmodel-compose 2.7.0
  • com.google.accompanist:accompanist-adaptive 0.35.0-alpha
  • com.google.accompanist:accompanist-permissions 0.35.0-alpha
  • org.jetbrains.kotlinx:kotlinx-coroutines-core 1.8.0-RC2
  • org.jetbrains.kotlinx:kotlinx-coroutines-android 1.8.0-RC2
  • org.jetbrains.kotlinx:kotlinx-coroutines-play-services 1.8.0-RC2
  • com.google.dagger:hilt-android 2.50
  • com.google.dagger:hilt-compiler 2.50
  • androidx.hilt:hilt-common 1.2.0
  • androidx.hilt:hilt-navigation-compose 1.2.0
  • androidx.hilt:hilt-work 1.2.0
  • androidx.hilt:hilt-compiler 1.2.0
  • org.jetbrains.kotlinx:kotlinx-serialization-json 1.6.2
  • org.jetbrains.kotlinx:kotlinx-collections-immutable 0.3.7
  • io.ktor:ktor-client-okhttp 2.3.7
  • io.ktor:ktor-client-serialization 2.3.7
  • io.ktor:ktor-client-encoding 2.3.7
  • io.ktor:ktor-client-content-negotiation 2.3.7
  • io.ktor:ktor-serialization-kotlinx-json 2.3.7
  • com.github.skydoves:sandwich-ktor 2.0.5
  • com.squareup.okhttp3:logging-interceptor 4.12.0
  • com.github.skydoves:landscapist-glide 2.3.1
  • com.github.skydoves:landscapist-animation 2.3.1
  • dev.chrisbanes.haze:haze 0.5.1
  • dev.chrisbanes.haze:haze-materials 0.5.1
  • com.michael-bull.kotlin-result:kotlin-result 1.1.18
  • androidx.glance:glance-appwidget 1.0.0
  • androidx.core:core-splashscreen 1.0.1
  • androidx.webkit:webkit 1.10.0
  • androidx.browser:browser 1.7.0
  • androidx.profileinstaller:profileinstaller 1.3.1
  • androidx.work:work-runtime 2.9.0
  • org.jsoup:jsoup 1.17.2
  • org.jetbrains.kotlinx:kotlinx-collections-immutable 0.3.7
  • com.android.tools:desugar_jdk_libs 2.0.4
  • io.sentry:sentry-bom 7.5.0
  • io.sentry:sentry-android-okhttp 7.5.0
  • junit:junit 4.13.2
  • com.google.truth:truth 1.1.5
  • com.google.truth.extensions:truth-java8-extension 1.1.5
  • io.mockk:mockk 1.13.9
  • app.cash.turbine:turbine 1.0.0
  • org.jetbrains.kotlinx:kotlinx-coroutines-test 1.8.0-RC2
  • io.ktor:ktor-client-mock 2.3.7
  • org.robolectric:robolectric 4.10.3
  • androidx.arch.core:core-testing 2.2.0
  • androidx.test:core-ktx 1.5.0
  • androidx.test.ext:junit-ktx 1.1.5
  • androidx.test.ext:junit 1.1.5
  • androidx.test.espresso:espresso-core 3.5.1
  • androidx.test.uiautomator:uiautomator 2.3.0
  • androidx.benchmark:benchmark-macro-junit4 1.2.3
  • io.gitlab.arturbosch.detekt:detekt-gradle-plugin 1.23.5
  • com.diffplug.spotless:spotless-plugin-gradle 6.25.0
  • io.sentry.android.gradle:io.sentry.android.gradle.gradle.plugin 4.3.1
  • com.google.android.material:material 1.11.0
  • com.google.dagger.hilt.android 2.50
  • org.jetbrains.kotlin.android 1.9.22
  • org.jetbrains.kotlin.kapt 1.9.22
  • com.android.application 8.3.0
  • com.android.library 8.3.0
  • org.jetbrains.kotlin.plugin.serialization 1.9.22
  • org.jetbrains.kotlin.plugin.parcelize 1.9.22
  • com.google.dagger:hilt-android-gradle-plugin 2.50
  • com.google.devtools.ksp 1.9.22-1.0.17
  • io.gitlab.arturbosch.detekt 1.23.5
  • com.google.android.libraries.mapsplatform.secrets-gradle-plugin 2.0.1
  • com.diffplug.spotless 6.25.0
  • androidx.baselineprofile 1.2.3
  • androidx.room 2.6.1
  • com.android.test 8.3.0
  • io.sentry.android.gradle 4.3.1
  • com.google.gms.google-services 4.4.1
  • org.jetbrains.kotlin.jvm 1.9.22
gradle-wrapper
gradle/wrapper/gradle-wrapper.properties
  • gradle 8.6

  • Check this box to trigger a request for Renovate to run again on this repository

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    πŸ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. πŸ“ŠπŸ“ˆπŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❀️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.