Skip to content

Commit

Permalink
Merge pull request #4 from LDRAlighieri/feature/fiberglass-flow-and-grid
Browse files Browse the repository at this point in the history
Fiberglass flow and grid
  • Loading branch information
LDRAlighieri committed Jun 24, 2023
2 parents ba2733a + 9d45762 commit 20025d5
Show file tree
Hide file tree
Showing 29 changed files with 942 additions and 152 deletions.
3 changes: 3 additions & 0 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -21,5 +21,8 @@ jobs:
- name: Setup Gradle
uses: gradle/gradle-build-action@v2.4.2

- name: Check spotless
run: ./gradlew spotlessCheck --no-configuration-cache

- name: Build the sample app to verify it works
run: ./gradlew sample:assemble
3 changes: 3 additions & 0 deletions .github/workflows/publish.yml
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,9 @@ jobs:
- name: Setup Gradle
uses: gradle/gradle-build-action@v2.4.2

- name: Check spotless
run: ./gradlew spotlessCheck --no-configuration-cache

- name: Build the sample app to verify it works
run: ./gradlew sample:assemble

Expand Down
15 changes: 14 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,19 @@
# ChangeLog


## Version 0.2.0

* New: Fiberglass(`composites-fiberglass`) composites:
- Fiberglass flow column Composite
- Fiberglass flow row Composite
- Fiberglass lazy horizontal grid Composite
- Fiberglass lazy vertical grid Composite
- Fiberglass lazy horizontal staggered grid Composite
- Fiberglass lazy vertical staggered grid Composite
* Update: Compose BOM to v2023.06.01.
* Update: Minor update of other libraries.


## Version 0.1.2

* Fix: Paging FiberglassLazyColumn after paging-compose v1.0.0-alpha19.
Expand All @@ -17,7 +30,7 @@

## Version 0.1.0

* New: Fiberglass module(`composites-fiberglass`):
* New: Fiberglass(`composites-fiberglass`) module:
- Fiberglass column Composite
- Fiberglass lazy column Composite
- Fiberglass lazy column Composite for `LazyPagingItems`
Expand Down
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[![Maven Central](https://img.shields.io/maven-central/v/ru.ldralighieri.composites/composites-fiberglass.svg)](https://search.maven.org/search?q=g:ru.ldralighieri.composites)
[![Kotlin Version](https://img.shields.io/badge/Kotlin-v1.8.21-blue.svg?logo=kotlin)](https://kotlinlang.org)
[![Compose BOM Version](https://img.shields.io/badge/Compose-v2023.05.01-blue.svg?logo=jetpackcompose)](https://developer.android.com/jetpack/compose)
[![Compose BOM Version](https://img.shields.io/badge/Compose-v2023.06.01-blue.svg?logo=jetpackcompose)](https://developer.android.com/jetpack/compose)
[![GitHub license](https://img.shields.io/badge/license-Apache%20License%202.0-blue.svg)](https://www.apache.org/licenses/LICENSE-2.0)

[![API](https://img.shields.io/badge/API-21%2B-brightgreen.svg)](https://android-arsenal.com/api?level=21)
Expand All @@ -26,7 +26,7 @@ Add one or more dependencies:

```kotlin
dependencies {
implementation("ru.ldralighieri.composites:composites-fiberglass:0.1.2")
implementation("ru.ldralighieri.composites:composites-fiberglass:0.2.0")
}
```

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,14 +20,13 @@ import com.android.build.gradle.LibraryExtension
import org.gradle.api.Plugin
import org.gradle.api.Project
import org.gradle.api.artifacts.VersionCatalog
import org.gradle.api.artifacts.VersionCatalogsExtension
import org.gradle.kotlin.dsl.configure
import org.gradle.kotlin.dsl.dependencies
import org.gradle.kotlin.dsl.getByType
import org.gradle.kotlin.dsl.provideDelegate
import ru.ldralighieri.composites.configureAndroidCompose
import ru.ldralighieri.composites.configureKotlinAndroid
import ru.ldralighieri.composites.getLibrary
import ru.ldralighieri.composites.libs

@Suppress("unused")
internal class LibraryComposeConventionPlugin : Plugin<Project> {
Expand All @@ -53,7 +52,6 @@ internal class LibraryComposeConventionPlugin : Plugin<Project> {
}
}

val libs: VersionCatalog = extensions.getByType<VersionCatalogsExtension>().named("libs")
dependencies {
// Compose
add("implementation", platform(libs.composeBom()))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,25 +17,19 @@
import com.diffplug.gradle.spotless.SpotlessExtension
import org.gradle.api.Plugin
import org.gradle.api.Project
import org.gradle.api.artifacts.VersionCatalogsExtension
import org.gradle.kotlin.dsl.configure
import org.gradle.kotlin.dsl.getByType

@Suppress("unused")
internal class SpotlessConventionPlugin : Plugin<Project> {
override fun apply(target: Project) {
with(target) {
pluginManager.apply("com.diffplug.spotless")

val libs = extensions.getByType<VersionCatalogsExtension>().named("libs")
extensions.configure<SpotlessExtension> {
kotlin {
target("**/*.kt")
targetExclude("**/build/**/*.kt")

ktlint(libs.findVersion("ktlint").get().toString())
.editorConfigOverride(mapOf("disabled_rules" to "filename"))

licenseHeaderFile(rootProject.file("spotless/copyright.kt"))
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,20 +20,17 @@ package ru.ldralighieri.composites

import com.android.build.api.dsl.CommonExtension
import org.gradle.api.Project
import org.gradle.api.artifacts.VersionCatalogsExtension
import org.gradle.kotlin.dsl.getByType
import java.io.File

internal fun Project.configureAndroidCompose(
extension: CommonExtension<*, *, *, *>,
) {
val libs = extensions.getByType<VersionCatalogsExtension>().named("libs")

extension.apply {
buildFeatures.compose = true

composeOptions {
kotlinCompilerExtensionVersion = libs.findVersion("androidxComposeCompiler").get().toString()
kotlinCompilerExtensionVersion =
libs.findVersion("androidxComposeCompiler").get().toString()
}

kotlinOptions {
Expand All @@ -42,20 +39,20 @@ internal fun Project.configureAndroidCompose(
}
}

@Suppress("OPT_IN_IS_NOT_ENABLED")
@OptIn(ExperimentalStdlibApi::class)
private fun Project.buildComposeMetricsParameters(): List<String> = buildList {
val enableMetricsProvider = project.providers.gradleProperty("enableComposeCompilerMetrics")
if (enableMetricsProvider.orNull == "true") {
val metricsFolder = File(project.buildDir, "compose-metrics")
add("-P")
add("plugin:androidx.compose.compiler.plugins.kotlin:metricsDestination=" + metricsFolder.absolutePath)
add("plugin:androidx.compose.compiler.plugins.kotlin:metricsDestination="
+ metricsFolder.absolutePath)
}

val enableReportsProvider = project.providers.gradleProperty("enableComposeCompilerReports")
if (enableReportsProvider.orNull == "true") {
val reportsFolder = File(project.buildDir, "compose-reports")
add("-P")
add("plugin:androidx.compose.compiler.plugins.kotlin:reportsDestination=" + reportsFolder.absolutePath)
add("plugin:androidx.compose.compiler.plugins.kotlin:reportsDestination="
+ reportsFolder.absolutePath)
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
/*
* Copyright 2023 Vladimir Raupov
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

package ru.ldralighieri.composites

import org.gradle.api.Project
import org.gradle.api.artifacts.VersionCatalog
import org.gradle.api.artifacts.VersionCatalogsExtension
import org.gradle.kotlin.dsl.getByType

val Project.libs
get(): VersionCatalog = extensions.getByType<VersionCatalogsExtension>().named("libs")
2 changes: 0 additions & 2 deletions build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,6 @@

import com.github.benmanes.gradle.versions.updates.DependencyUpdatesTask

// https://youtrack.jetbrains.com/issue/KTIJ-19369
@Suppress("DSL_SCOPE_VIOLATION")
plugins {
alias(libs.plugins.android.application) apply false
alias(libs.plugins.android.library) apply false
Expand Down
14 changes: 13 additions & 1 deletion composites-fiberglass/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,12 @@ A tool for building complex screens based on simple blocks. Built on top of the
* [LazyColumn]
* [Row]
* [LazyRow]
* [FlowRow]
* [FlowColumn]
* [LazyHorizontalGrid]
* [LazyVerticalGrid]
* [LazyHorizontalStaggeredGrid]
* [LazyVerticalStaggeredGrid]

Let’s imagine that you need to draw a screen, but you don’t know its content. You don’t know how many elements, sections, banners, or cards will be on the screen. It all depends on the data set received from the server.

Expand All @@ -24,7 +30,7 @@ Add dependency:

```kotlin
dependencies {
implementation("ru.ldralighieri.composites:composites-fiberglass:0.1.2")
implementation("ru.ldralighieri.composites:composites-fiberglass:0.2.0")
}
```

Expand Down Expand Up @@ -125,4 +131,10 @@ A more complex example can be found in the [demo application][demo]
[LazyColumn]: https://developer.android.com/reference/kotlin/androidx/compose/foundation/lazy/package-summary#LazyColumn(androidx.compose.ui.Modifier,androidx.compose.foundation.lazy.LazyListState,androidx.compose.foundation.layout.PaddingValues,kotlin.Boolean,androidx.compose.foundation.layout.Arrangement.Vertical,androidx.compose.ui.Alignment.Horizontal,androidx.compose.foundation.gestures.FlingBehavior,kotlin.Boolean,kotlin.Function1)
[Row]: https://developer.android.com/reference/kotlin/androidx/compose/foundation/layout/package-summary#Row(androidx.compose.ui.Modifier,androidx.compose.foundation.layout.Arrangement.Horizontal,androidx.compose.ui.Alignment.Vertical,kotlin.Function1)
[LazyRow]: https://developer.android.com/reference/kotlin/androidx/compose/foundation/lazy/package-summary#LazyRow(androidx.compose.ui.Modifier,androidx.compose.foundation.lazy.LazyListState,androidx.compose.foundation.layout.PaddingValues,kotlin.Boolean,androidx.compose.foundation.layout.Arrangement.Horizontal,androidx.compose.ui.Alignment.Vertical,androidx.compose.foundation.gestures.FlingBehavior,kotlin.Boolean,kotlin.Function1)
[FlowRow]: https://developer.android.com/reference/kotlin/androidx/compose/foundation/layout/package-summary#FlowRow(androidx.compose.ui.Modifier,androidx.compose.foundation.layout.Arrangement.Horizontal,androidx.compose.foundation.layout.Arrangement.Vertical,kotlin.Int,kotlin.Function1)
[FlowColumn]: https://developer.android.com/reference/kotlin/androidx/compose/foundation/layout/package-summary#FlowColumn(androidx.compose.ui.Modifier,androidx.compose.foundation.layout.Arrangement.Vertical,androidx.compose.foundation.layout.Arrangement.Horizontal,kotlin.Int,kotlin.Function1)
[LazyHorizontalGrid]: https://developer.android.com/reference/kotlin/androidx/compose/foundation/lazy/grid/package-summary#LazyHorizontalGrid(androidx.compose.foundation.lazy.grid.GridCells,androidx.compose.ui.Modifier,androidx.compose.foundation.lazy.grid.LazyGridState,androidx.compose.foundation.layout.PaddingValues,kotlin.Boolean,androidx.compose.foundation.layout.Arrangement.Horizontal,androidx.compose.foundation.layout.Arrangement.Vertical,androidx.compose.foundation.gestures.FlingBehavior,kotlin.Boolean,kotlin.Function1)
[LazyVerticalGrid]: https://developer.android.com/reference/kotlin/androidx/compose/foundation/lazy/grid/package-summary#LazyVerticalGrid(androidx.compose.foundation.lazy.grid.GridCells,androidx.compose.ui.Modifier,androidx.compose.foundation.lazy.grid.LazyGridState,androidx.compose.foundation.layout.PaddingValues,kotlin.Boolean,androidx.compose.foundation.layout.Arrangement.Vertical,androidx.compose.foundation.layout.Arrangement.Horizontal,androidx.compose.foundation.gestures.FlingBehavior,kotlin.Boolean,kotlin.Function1)
[LazyHorizontalStaggeredGrid]: https://developer.android.com/reference/kotlin/androidx/compose/foundation/lazy/staggeredgrid/package-summary#LazyHorizontalStaggeredGrid(androidx.compose.foundation.lazy.staggeredgrid.StaggeredGridCells,androidx.compose.ui.Modifier,androidx.compose.foundation.lazy.staggeredgrid.LazyStaggeredGridState,androidx.compose.foundation.layout.PaddingValues,kotlin.Boolean,androidx.compose.foundation.layout.Arrangement.Vertical,androidx.compose.ui.unit.Dp,androidx.compose.foundation.gestures.FlingBehavior,kotlin.Boolean,kotlin.Function1)
[LazyVerticalStaggeredGrid]: https://developer.android.com/reference/kotlin/androidx/compose/foundation/lazy/staggeredgrid/package-summary#LazyVerticalStaggeredGrid(androidx.compose.foundation.lazy.staggeredgrid.StaggeredGridCells,androidx.compose.ui.Modifier,androidx.compose.foundation.lazy.staggeredgrid.LazyStaggeredGridState,androidx.compose.foundation.layout.PaddingValues,kotlin.Boolean,androidx.compose.ui.unit.Dp,androidx.compose.foundation.layout.Arrangement.Horizontal,androidx.compose.foundation.gestures.FlingBehavior,kotlin.Boolean,kotlin.Function1)
[demo]: https://github.com/LDRAlighieri/Composites/blob/master/sample/src/main/kotlin/ru/ldralighieri/composites/sample/ui/fiberglass/FiberglassScreen.kt
24 changes: 24 additions & 0 deletions composites-fiberglass/api/composites-fiberglass.api
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,32 @@ public final class ru/ldralighieri/composites/fiberglass/column/FiberglassColumn
public static final fun FiberglassColumn (Ljava/util/List;Ljava/util/Map;Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/ScrollState;Landroidx/compose/foundation/layout/PaddingValues;Landroidx/compose/foundation/layout/Arrangement$Vertical;Landroidx/compose/ui/Alignment$Horizontal;Landroidx/compose/runtime/Composer;II)V
}

public final class ru/ldralighieri/composites/fiberglass/column/FiberglassFlowColumnKt {
public static final fun FiberglassFlowColumn (Ljava/util/List;Ljava/util/Map;Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/layout/PaddingValues;Landroidx/compose/foundation/layout/Arrangement$Vertical;Landroidx/compose/ui/Alignment$Horizontal;ILandroidx/compose/runtime/Composer;II)V
}

public final class ru/ldralighieri/composites/fiberglass/column/FiberglassLazyColumnKt {
public static final fun FiberglassLazyColumn (Landroidx/paging/compose/LazyPagingItems;Ljava/util/Map;Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/lazy/LazyListState;Landroidx/compose/foundation/layout/PaddingValues;ZLandroidx/compose/foundation/layout/Arrangement$Vertical;Landroidx/compose/ui/Alignment$Horizontal;Landroidx/compose/foundation/gestures/FlingBehavior;ZLandroidx/compose/runtime/Composer;II)V
public static final fun FiberglassLazyColumn (Ljava/util/List;Ljava/util/Map;Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/lazy/LazyListState;Landroidx/compose/foundation/layout/PaddingValues;ZLandroidx/compose/foundation/layout/Arrangement$Vertical;Landroidx/compose/ui/Alignment$Horizontal;Landroidx/compose/foundation/gestures/FlingBehavior;ZLandroidx/compose/runtime/Composer;II)V
public static final fun FiberglassLazyColumn (Ljava/util/Map;Lkotlin/jvm/functions/Function4;Ljava/util/Map;Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/lazy/LazyListState;Landroidx/compose/foundation/layout/PaddingValues;ZLandroidx/compose/foundation/layout/Arrangement$Vertical;Landroidx/compose/ui/Alignment$Horizontal;Landroidx/compose/foundation/gestures/FlingBehavior;ZLandroidx/compose/runtime/Composer;III)V
}

public final class ru/ldralighieri/composites/fiberglass/grid/horizontal/FiberglassLazyHorizontalGridKt {
public static final fun FiberglassLazyHorizontalGrid (Ljava/util/List;Ljava/util/Map;Landroidx/compose/foundation/lazy/grid/GridCells;Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/lazy/grid/LazyGridState;Landroidx/compose/foundation/layout/PaddingValues;ZLandroidx/compose/foundation/layout/Arrangement$Horizontal;Landroidx/compose/foundation/layout/Arrangement$Vertical;Landroidx/compose/foundation/gestures/FlingBehavior;ZLandroidx/compose/runtime/Composer;III)V
}

public final class ru/ldralighieri/composites/fiberglass/grid/horizontal/FiberglassLazyHorizontalStaggeredGridKt {
public static final fun FiberglassLazyHorizontalStaggeredGrid-Wu8B24Y (Ljava/util/List;Ljava/util/Map;Landroidx/compose/foundation/lazy/staggeredgrid/StaggeredGridCells;Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/lazy/staggeredgrid/LazyStaggeredGridState;Landroidx/compose/foundation/layout/PaddingValues;ZLandroidx/compose/foundation/layout/Arrangement$Vertical;FLandroidx/compose/foundation/gestures/FlingBehavior;ZLandroidx/compose/runtime/Composer;III)V
}

public final class ru/ldralighieri/composites/fiberglass/grid/vertical/FiberglassLazyVerticalGridKt {
public static final fun FiberglassLazyVerticalGrid (Ljava/util/List;Ljava/util/Map;Landroidx/compose/foundation/lazy/grid/GridCells;Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/lazy/grid/LazyGridState;Landroidx/compose/foundation/layout/PaddingValues;ZLandroidx/compose/foundation/layout/Arrangement$Vertical;Landroidx/compose/foundation/layout/Arrangement$Horizontal;Landroidx/compose/foundation/gestures/FlingBehavior;ZLandroidx/compose/runtime/Composer;III)V
}

public final class ru/ldralighieri/composites/fiberglass/grid/vertical/FiberglassLazyVerticalStaggeredGridKt {
public static final fun FiberglassLazyVerticalStaggeredGrid-seJ8HY0 (Ljava/util/List;Ljava/util/Map;Landroidx/compose/foundation/lazy/staggeredgrid/StaggeredGridCells;Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/lazy/staggeredgrid/LazyStaggeredGridState;Landroidx/compose/foundation/layout/PaddingValues;ZFLandroidx/compose/foundation/layout/Arrangement$Horizontal;Landroidx/compose/foundation/gestures/FlingBehavior;ZLandroidx/compose/runtime/Composer;III)V
}

public abstract interface class ru/ldralighieri/composites/fiberglass/model/FiberglassItem {
public abstract fun getId ()Ljava/lang/Object;
}
Expand All @@ -16,6 +36,10 @@ public abstract interface class ru/ldralighieri/composites/fiberglass/model/Fibe
public abstract fun getTitle ()Ljava/lang/String;
}

public final class ru/ldralighieri/composites/fiberglass/row/FiberglassFlowRowKt {
public static final fun FiberglassFlowRow (Ljava/util/List;Ljava/util/Map;Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/layout/PaddingValues;Landroidx/compose/foundation/layout/Arrangement$Horizontal;Landroidx/compose/ui/Alignment$Vertical;ILandroidx/compose/runtime/Composer;II)V
}

public final class ru/ldralighieri/composites/fiberglass/row/FiberglassLazyRowKt {
public static final fun FiberglassLazyRow (Ljava/util/List;Ljava/util/Map;Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/lazy/LazyListState;Landroidx/compose/foundation/layout/PaddingValues;ZLandroidx/compose/foundation/layout/Arrangement$Horizontal;Landroidx/compose/ui/Alignment$Vertical;Landroidx/compose/foundation/gestures/FlingBehavior;ZLandroidx/compose/runtime/Composer;II)V
}
Expand Down
Loading

0 comments on commit 20025d5

Please sign in to comment.