Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/run-tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -65,4 +65,4 @@ jobs:
${{ runner.os }}-m2

- name: Run unit tests
run: ./gradlew testReleaseUnitTest
run: ./gradlew testDebugUnitTest
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@ class AndroidApplicationConventionPlugin : Plugin<Project> {
with(target) {
with(pluginManager) {
apply("com.android.application")
apply("org.jetbrains.kotlin.android")
}

configureAndroidApp()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@ class AndroidLibraryConventionPlugin : Plugin<Project> {
with(target) {
with(pluginManager) {
apply("com.android.library")
apply("org.jetbrains.kotlin.android")
}

configureAndroidLibrary()
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,8 @@
package com.nisrulz.example.spacexapi

import com.android.build.api.dsl.ApplicationExtension
import com.nisrulz.example.spacexapi.ktx.configureHilt
import com.nisrulz.example.spacexapi.ktx.configureHiltApp
import org.gradle.api.Plugin
import org.gradle.api.Project
import org.gradle.kotlin.dsl.configure

class HiltAppConventionPlugin : Plugin<Project> {
override fun apply(target: Project) {
Expand All @@ -15,9 +13,7 @@ class HiltAppConventionPlugin : Plugin<Project> {
apply("dagger.hilt.android.plugin")
}

extensions.configure<ApplicationExtension> {
configureHilt(this)
}
configureHiltApp()
}
}
}
Original file line number Diff line number Diff line change
@@ -1,10 +1,8 @@
package com.nisrulz.example.spacexapi

import com.android.build.api.dsl.LibraryExtension
import com.nisrulz.example.spacexapi.ktx.configureHilt
import com.nisrulz.example.spacexapi.ktx.configureHiltLibrary
import org.gradle.api.Plugin
import org.gradle.api.Project
import org.gradle.kotlin.dsl.configure

class HiltLibConventionPlugin : Plugin<Project> {
override fun apply(target: Project) {
Expand All @@ -15,9 +13,7 @@ class HiltLibConventionPlugin : Plugin<Project> {
apply("dagger.hilt.android.plugin")
}

extensions.configure<LibraryExtension> {
configureHilt(this)
}
configureHiltLibrary()
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,6 @@ import com.android.build.api.dsl.LibraryExtension
import org.gradle.api.Project
import org.gradle.kotlin.dsl.configure
import org.gradle.kotlin.dsl.dependencies
import org.jetbrains.kotlin.compose.compiler.gradle.ComposeCompilerGradlePluginExtension
import org.jetbrains.kotlin.compose.compiler.gradle.ComposeFeatureFlag

/**
* Configure Compose-specific options
Expand All @@ -22,15 +20,6 @@ internal fun Project.configureAndroidCompose() = configure<LibraryExtension> {
add("implementation", catalogLibrary("ui-tooling-preview"))
add("debugImplementation", catalogLibrary("ui-tooling"))
}

extensions.configure<ComposeCompilerGradlePluginExtension> {
includeSourceInformation.set(true)
featureFlags.set(
setOf(
ComposeFeatureFlag.OptimizeNonSkippingGroups
)
)
}
}

/**
Expand Down
Original file line number Diff line number Diff line change
@@ -1,60 +1,47 @@
package com.nisrulz.example.spacexapi.ktx

import com.android.build.api.dsl.ApplicationExtension
import com.android.build.api.dsl.CommonExtension
import com.android.build.api.dsl.LibraryExtension
import com.nisrulz.example.spacexapi.info.ApplicationInfo
import com.nisrulz.example.spacexapi.info.BuildSdkInfo
import org.gradle.api.Project
import org.gradle.kotlin.dsl.configure
import org.jetbrains.kotlin.gradle.dsl.kotlinExtension
import org.jetbrains.kotlin.gradle.dsl.JvmTarget
import org.jetbrains.kotlin.gradle.dsl.KotlinAndroidProjectExtension

/**
* Set JVM toolchain
*/
private fun Project.configureKotlin(commonExtension: CommonExtension<*, *, *, *, *, *>) =
commonExtension.apply {
// https://kotlinlang.org/docs/gradle-configure-project.html#gradle-java-toolchains-support
// Note: Setting a toolchain via the kotlin extension updates the toolchain for Java compile
// tasks as well.
kotlinExtension.jvmToolchain(BuildSdkInfo.JVM_TARGET)
}

/**
* Common configuration for Android modules
*/
private fun Project.configureAndroid(commonExtension: CommonExtension<*, *, *, *, *, *>) =
commonExtension.apply {
compileSdk = BuildSdkInfo.COMPILE_SDK_VERSION

defaultConfig {
minSdk = BuildSdkInfo.MIN_SDK_VERSION

testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
private fun Project.configureKotlin() {
extensions.configure(KotlinAndroidProjectExtension::class.java) {
compilerOptions {
jvmTarget.set(JvmTarget.fromTarget(BuildSdkInfo.JVM_TARGET.toString()))
}

configureKotlin(this)
jvmToolchain(BuildSdkInfo.JVM_TARGET)
}
}


/**
* Configuration for Android Application
* Configuration for Android Application
*/
internal fun Project.configureAndroidApp() = configure<ApplicationExtension> {
configureAndroid(this)

compileSdk = BuildSdkInfo.COMPILE_SDK_VERSION

defaultConfig {
minSdk = BuildSdkInfo.MIN_SDK_VERSION
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
targetSdk = BuildSdkInfo.TARGET_SDK_VERSION

versionCode = ApplicationInfo.VERSION_CODE
versionName = ApplicationInfo.VERSION_NAME

vectorDrawables.useSupportLibrary = true
}

configureKotlin()

packaging {
resources {
excludes += "/META-INF/{AL2.0,LGPL2.1}"
}
resources.excludes += "/META-INF/{AL2.0,LGPL2.1}"
}

buildFeatures {
Expand All @@ -72,13 +59,20 @@ internal fun Project.configureAndroidApp() = configure<ApplicationExtension> {
}
}

/**
* Configuration for Android Library
*/
internal fun Project.configureAndroidLibrary() = configure<LibraryExtension> {
configureAndroid(this)
compileSdk = BuildSdkInfo.COMPILE_SDK_VERSION

defaultConfig {
minSdk = BuildSdkInfo.MIN_SDK_VERSION
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
consumerProguardFiles("consumer-rules.pro")
}

configureKotlin()

buildTypes {
release {
isMinifyEnabled = false
Expand Down
Original file line number Diff line number Diff line change
@@ -1,13 +1,22 @@
package com.nisrulz.example.spacexapi.ktx

import com.android.build.api.dsl.CommonExtension
import com.android.build.api.dsl.ApplicationExtension
import com.android.build.api.dsl.LibraryExtension
import org.gradle.api.Project
import org.gradle.kotlin.dsl.configure
import org.gradle.kotlin.dsl.dependencies

internal fun Project.configureHilt(commonExtension: CommonExtension<*, *, *, *, *, *>) =
commonExtension.apply {
dependencies {
add("implementation", catalogBundle("hilt"))
add("ksp", catalogLibrary("hilt-compiler"))
}

internal fun Project.configureHiltApp() = configure<ApplicationExtension> {
dependencies {
add("implementation", catalogBundle("hilt"))
add("ksp", catalogLibrary("hilt-compiler"))
}
}

internal fun Project.configureHiltLibrary() = configure<LibraryExtension> {
dependencies {
add("implementation", catalogBundle("hilt"))
add("ksp", catalogLibrary("hilt-compiler"))
}
}
3 changes: 0 additions & 3 deletions build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,6 @@ plugins {
alias(libs.plugins.com.android.application) apply false
alias(libs.plugins.com.android.library) apply false

// Kotlin
alias(libs.plugins.org.jetbrains.kotlin.android) apply false

// Hilt
alias(libs.plugins.ksp) apply false
alias(libs.plugins.hilt) apply false
Expand Down
8 changes: 4 additions & 4 deletions gradle/libs.versions.toml
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,13 @@

#region ---- Kotlin version dependent
# https://github.com/JetBrains/kotlin/releases
kotlin = "2.2.21"
kotlin = "2.3.0"
# https://github.com/google/ksp/releases
ksp = "2.3.4"
#endregion

#region ---- Android Core
agp = "8.13.2"
agp = "9.0.0"
androidTools = "32.0.0"
core-ktx = "1.17.0"
lifecycleVer = "2.10.0"
Expand All @@ -23,7 +23,7 @@ material3 = "1.10.0"

#region ---- Kotlin
kotlinxCoroutines = "1.10.2"
kotlinxSerializationJson = "1.9.0"
kotlinxSerializationJson = "1.10.0"
#endregion

#region ---- Jetpack Compose
Expand All @@ -35,7 +35,7 @@ compose-bom = "2026.01.00"
navigationCompose = "2.9.6"

#region ---- Hilt
hilt = "2.58"
hilt = "2.59"
hiltNavigation = "1.3.0"
hiltExt = "1.3.0"
#endregion
Expand Down
Binary file modified gradle/wrapper/gradle-wrapper.jar
Binary file not shown.
2 changes: 1 addition & 1 deletion gradle/wrapper/gradle-wrapper.properties
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.2-bin.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-9.3.0-bin.zip
networkTimeout=10000
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME
Expand Down
5 changes: 1 addition & 4 deletions gradlew

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 1 addition & 2 deletions gradlew.bat

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,14 @@ package com.nisrulz.example.spacexapi.presentation.features
import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.activity.enableEdgeToEdge
import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.statusBarsPadding
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import com.nisrulz.example.spacexapi.presentation.navigation.AppNavigation
import com.nisrulz.example.spacexapi.presentation.theme.SpacexAPITheme
import dagger.hilt.android.AndroidEntryPoint
Expand All @@ -12,6 +19,8 @@ import dagger.hilt.android.AndroidEntryPoint
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)

enableEdgeToEdge()
setContent {
AppEntryPoint()
}
Expand All @@ -21,6 +30,13 @@ class MainActivity : ComponentActivity() {
@Composable
private fun AppEntryPoint() {
SpacexAPITheme {
AppNavigation()
Box(
Modifier
.fillMaxSize()
.background(Color.Black)
.statusBarsPadding()
) {
AppNavigation()
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@ package com.nisrulz.example.spacexapi.presentation.features.bookmarkedlaunches
import androidx.compose.animation.core.LinearOutSlowInEasing
import androidx.compose.animation.core.tween
import androidx.compose.foundation.ExperimentalFoundationApi
import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Spacer
Expand All @@ -18,7 +17,6 @@ import androidx.compose.material3.SnackbarHostState
import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.tooling.preview.Preview
import com.nisrulz.example.spacexapi.common.contract.utils.EmptyCallback
import com.nisrulz.example.spacexapi.common.contract.utils.SingleValueCallback
Expand All @@ -40,9 +38,7 @@ fun BookmarkedLaunchesListComponent(
navigateBack: EmptyCallback = {}
) {
Box(
modifier = modifier
.fillMaxSize()
.background(Color.Black)
modifier = modifier.fillMaxSize()
) {
Column {
TitleBar(rightNavButtonIcon = R.drawable.list_all, rightNavButtonAction = {
Expand All @@ -54,7 +50,8 @@ fun BookmarkedLaunchesListComponent(
if (index == 0) {
Spacer(modifier = Modifier.height(MaterialTheme.dimens.small))
}
LaunchInfoItem(modifier = Modifier.animateItem(
LaunchInfoItem(
modifier = Modifier.animateItem(
fadeInSpec = tween(
durationMillis = 500, easing = LinearOutSlowInEasing
)
Expand Down
Loading