Giter Club home page Giter Club logo

cat-news's Introduction

Hi ๐Ÿ‘‹, I'm Ryan

I make Android Apps, and more... through Kotlin Multiplatform

ryanw-mobile

ryanw-mobile ryanw-mobile

About Me

  • ๐ŸŒ UK Resident | Open To Work in Senior Android Developer roles
  • ๐ŸŒฑ Focused on Jetpack Compose, Coroutines, Kotlin Multiplatform, and Compose Multiplatform
  • ๐Ÿ“š Check out my in-depth journey as an Android Developer on Medium

ย 

My Android Journey

Transforming ideas into engaging apps since 2010.

  • ๐Ÿ“ฑ 13 Apps on Google Play with RW Android Labs / RW MobiMedia
  • ๐Ÿ“ˆ Privately-owned apps exceeding 1,400,000+ downloads
  • ๐Ÿ”„ 14+ years of comprehensive experience in Android development, from concept to deployment

ย 

Skills and Tools

  • ๐Ÿ› ๏ธ Skilled in Kotlin, Java, and various other languages
  • ๐ŸŽ“ Previously proficient in Java (1999-2021); primary programming language during my Computer Science undergrad with multiple certifications
  • ๐Ÿ”„ All major public repositories automated with Github Actions and Renovate

ryanw-mobile

ย 

Connect & Explore

ย 

Some other unpinned repositories

  • Fused User Preferences - Template data source for both SharedPreferences and DataStore implementation
  • nd940-cap-advanced-android-programming-project - An Android-Kotlin-MVVM application that provides civic data intended to provide educational opportunities to the U.S. electorate using data provided by the Google Civic Information API.
  • JRNL - Journaling iphone/iPad/VisionOS demo App with widget support, built by following tutorials

cat-news's People

Contributors

renovate[bot] avatar ryanw-mobile avatar

Watchers

 avatar

Forkers

mhassan1122

cat-news's Issues

[refactor] Setting the namespace via a source AndroidManifest.xml's package attribute is deprecated.

package="uk.ryanwong.skycatnews" found in source AndroidManifest.xml: /Users/rwong/Documents/StudioProjects/sky-cat-news/app/src/main/AndroidManifest.xml.
Setting the namespace via a source AndroidManifest.xml's package attribute is deprecated.
Please instead set the namespace (or testNamespace) in the module's build.gradle file, as described here: https://developer.android.com/studio/build/configure-app-module#set-namespace
This migration can be done automatically using the AGP Upgrade Assistant, please refer to https://developer.android.com/studio/build/agp-upgrade-assistant for more information.

[refactor] move hiltViewModel to navGraph

This is to uncouple the dependency of the main composables with the viewmodels.
Only pass what it is needed from the navGraph, and we can then generate previews for all top-level screens.

[chore] baseline profile

There is not much performance boost to be expected, but just for being a sample app.
Generate using Android Studio automatically so it should not be too much effort.

[chore] Gradle: rewrite dependencies list

Credits: Mouawia Hammo and Mohamed Ben Rejeb

This is a wider change affecting all projects that use Version Catalog. sky-cat-news is going to be a pilot and gradually the same change will be applied to all other projects.

Details:

Currently, some dependencies are grouped at the Version Catalog level using bundles.

coroutines = ["kotlinx-coroutines-core", "kotlinx-coroutines-android"]

and at the app-level build.gradle.kts, they are referenced like this.

    implementation(libs.bundles.coil)
    implementation(libs.bundles.coroutines)

Problems:

  1. We can't mix usages like implementation, kapt, debugImplementation etc in one bundle. If we split them into two (or more) bundles, it violates the purpose for bundling them.

  2. It can be hard to quickly know what dependencies are included in the bundle, especially when the project goes multi-module, so the lookup takes time.

Solution:

Group related dependencies under the same namespace, and we declare each dependency separately in build.gradle.tks like this:

    with(Deps.Google.DaggerHilt) {
        implementation(android)
        kapt(compiler)
    }

This takes a balance between showing what dependencies are in a group, and what we have included under that group. Auto-complete is also possible even if we manually build the dependency list- provided we have the prefix scoped.

[refactor] Migrate XML dimens to Kotlin constants

Define dimension constants using Kotlin rather depending on Android Resources.
This is because we eventually have to handle multiple screen sizes using jetpack compose natively.

Copy existing work from other projects will do.

[refactor] accompanist/swiperefresh is deprecated

w: /Users/rwong/Documents/StudioProjects/sky-cat-news/app/src/main/java/uk/ryanwong/skycatnews/newslist/ui/screen/NewsListScreen.kt: (104, 9): 'SwipeRefresh(SwipeRefreshState, () -> Unit, Modifier = ..., Boolean = ..., Dp = ..., Alignment = ..., PaddingValues = ..., (state: SwipeRefreshState, refreshTrigger: Dp) -> Unit = ..., Boolean = ..., () -> Unit): Unit' is deprecated.
accompanist/swiperefresh is deprecated.
The androidx.compose equivalent of SwipeRefresh is Modifier.pullRefresh().
This is often migrated as:
Box(modifier = Modifier.pullRefresh(refreshState)) {
...
PullRefreshIndicator(...)
}

For more migration information, please visit https://google.github.io/accompanist/swiperefresh/#migration

[refactor] Phase out Kotest

kotest is not bad.

It was just a tool I used when I was with Mission Labs. Not too popular being a transferable skill.
I see no chance I will be using this anywhere outside Mission Labs, which means it brings no advantages for me to stick to this.

Switching back to a more standard option like JUnit will be more practical.

Assertion library TBC.

[chore] redo version catalog

Saw the version catalog generated by Android Studio Giraffe looks different from the current one.
Would be good to apply their version

Dependency Dashboard

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


Warning

Renovate failed to look up the following dependencies: Failed to look up maven package org.jlleitschuh.gradle:ktlint-gradle.

Files affected: gradle/libs.versions.toml


This repository currently has no open or pending branches.

Detected dependencies

github-actions
.github/workflows/main_build.yml
  • timheuer/base64-to-file v1.2
  • actions/checkout v4
  • actions/setup-java v4
  • codecov/codecov-action v3
.github/workflows/renovate_check.yml
  • timheuer/base64-to-file v1.2
  • actions/checkout v4
  • actions/setup-java v4
gradle
gradle.properties
settings.gradle.kts
build.gradle.kts
app/build.gradle.kts
gradle/libs.versions.toml
  • androidx.core:core-ktx 1.12.0
  • androidx.lifecycle:lifecycle-runtime-compose 2.7.0
  • androidx.activity:activity-compose 1.8.2
  • androidx.navigation:navigation-compose 2.7.6
  • androidx.room:room-compiler 2.6.1
  • androidx.room:room-runtime 2.6.1
  • androidx.room:room-ktx 2.6.1
  • androidx.room:room-testing 2.6.1
  • junit:junit 4.13.2
  • androidx.test.ext:junit 1.1.5
  • androidx.test:rules 1.5.0
  • androidx.test.espresso:espresso-core 3.5.1
  • androidx.test.espresso:espresso-idling-resource 3.5.1
  • androidx.compose:compose-bom 2023.10.01
  • androidx.compose.compiler:compiler 1.5.8
  • com.jakewharton.timber:timber 5.0.1
  • io.coil-kt:coil 2.5.0
  • io.coil-kt:coil-compose 2.5.0
  • org.jetbrains.kotlin:kotlin-reflect 1.9.22
  • org.jetbrains.kotlinx:kotlinx-coroutines-core 1.7.3
  • org.jetbrains.kotlinx:kotlinx-coroutines-android 1.7.3
  • org.jetbrains.kotlinx:kotlinx-serialization-json 1.6.2
  • io.kotest:kotest-runner-junit5 5.8.0
  • io.kotest:kotest-assertions-core 5.8.0
  • io.kotest:kotest-property 5.8.0
  • io.ktor:ktor-client-android 2.3.7
  • io.ktor:ktor-client-serialization 2.3.7
  • io.ktor:ktor-client-cio 2.3.7
  • io.ktor:ktor-client-content-negotiation 2.3.7
  • io.ktor:ktor-client-logging-jvm 2.3.7
  • io.ktor:ktor-serialization-kotlinx-json 2.3.7
  • io.ktor:ktor-client-mock 2.3.7
  • com.google.dagger:hilt-android 2.50
  • com.google.dagger:hilt-compiler 2.50
  • com.google.dagger:hilt-android-compiler 2.50
  • com.google.dagger:hilt-android-testing 2.50
  • androidx.hilt:hilt-navigation-compose 1.1.0
  • io.mockk:mockk 1.13.9
  • io.mockk:mockk-agent-jvm 1.13.9
  • io.mockk:mockk-android 1.13.9
  • com.google.accompanist:accompanist-webview 0.32.0
  • com.squareup.leakcanary:leakcanary-android 2.13
  • org.jlleitschuh.gradle:ktlint-gradle 12.1.0
  • com.android.application 8.2.1
  • org.jetbrains.kotlin.android 1.9.22
  • com.google.dagger.hilt.android 2.50
  • org.jetbrains.kotlinx.kover 0.7.5
  • org.jetbrains.kotlin.plugin.serialization 1.9.22
  • com.android.library 8.2.1
  • org.jlleitschuh.gradle.ktlint 12.1.0
  • com.google.devtools.ksp 1.9.22-1.0.16
  • org.jetbrains.kotlin.kapt 1.9.22
gradle-wrapper
gradle/wrapper/gradle-wrapper.properties
  • gradle 8.5

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

[refactor] Groovy to Kotlin kts?

Are we able to rewrite the Groovy build.gradle into build.gradle.kts?

It looks like more code samples and documentations are being delivered in KTS.

[refactor] Remove all Sky brandings and assets

As I am leaving Sky, to continue playing with this project, it would be the best to remove all the Sky brandings and also the keyword "Sky".

  • It will be just "cat news".
  • Weblink will point to somewhere else but not Sky News.
  • Project namespace and github repository name will be all changed, too.
  • Screenshots have to be updated.

[refactor] Version Catalog

Try to rearrange dependencies using Gradle Version Catalog.
See what can be done, then apply to other projects.

[refactor] modualisation

Obviously this will be over-engineering for this tony demo app, but it is still worth splitting features and layers into modules for demo purposes.

Not much work is required except to set up gradle build scripts again.

[refactor] detach model mappers

Currently model conversion functions have been implemented within the companion objects of the model classes.

Received feedback suggesting that this would create a tight coupling between two layers.

A better way is to move those conversion functions to separate mapper classes. In this way, the models are no longer linked to the implementation of another model class.

Apply KMP template

First step to make this KMP. Migrate existing code to the KMP (Android + iOS + Desktop) project structure.
We will be using Compose Multiplatform therefore could be potentially be landing iOS pretty quickly.

[chore] improve build process without keystore

Received feedback and valid issue:
When running this project on a fresh environment, we do not have, and not necessary to have the keystore to run the debug builds.
This applies to all other projects inheriting the same build process.

Changed to allow skipping the keystore check, and also make it more flexible.

Goals:

  • when running the project to a fresh environment can have the errors removed
  • configuration fit to work with Github Actions auto tests without a need to access to keystore, so we can automate Renovate PR approval and merging

If this works, it will be applied to all other projects.

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.