From f3b9bff87d86e4cab72cb60e8f0ca2851c432e7f Mon Sep 17 00:00:00 2001 From: roman_tcaregorodtcev Date: Tue, 3 Mar 2020 11:17:20 +0300 Subject: [PATCH 01/23] iOS files fixed --- core/gradle/wrapper/gradle-wrapper.properties | 2 +- .../libs/entities/images/BaseBitmapImage.kt | 16 +- .../images/OmegaBaseImageProcessor.kt | 8 +- .../entities/images/OmegaByteArrayImage.kt | 4 +- .../entities/images/OmegaDrawableImage.kt | 14 +- .../entities/images/OmegaImageProcessor.kt | 10 +- .../entities/images/OmegaPlaceholderImage.kt | 12 +- .../entities/images/OmegaResourceImage.kt | 14 +- .../libs/entities/images/OmegaUriImage.kt | 4 +- .../entities/images/OmegaImageProcessor.kt | 2 +- .../entities/images/OmegaImageProcessor.kt | 5 +- .../text/array/OmegaArrayTextProcessor.kt | 3 +- .../text/processor/OmegaArrayTextProcessor.kt | 6 - .../OmegaPluralsResourceTextProcessor.kt | 14 +- .../text/OmegaTextResourceTextProcessor.kt | 15 +- .../styled/OmegaDefaultStyledTextProcessor.kt | 6 +- .../gradle/wrapper/gradle-wrapper.properties | 4 +- examples/android/gradlew | 0 .../gradle/wrapper/gradle-wrapper.properties | 2 +- glide/build.gradle | 2 +- .../glide/OmegaGlideImageProcessorsHolder.kt | 34 ++-- gradle.properties | 2 +- gradle/wrapper/gradle-wrapper.properties | 2 +- picasso/build.gradle | 2 +- .../picasso/OmegaPicassoProcessorsHolder.kt | 150 ++++++++++++------ 25 files changed, 178 insertions(+), 155 deletions(-) delete mode 100644 core/src/iosMain/kotlin/com/omega_r/libs/entities/text/processor/OmegaArrayTextProcessor.kt mode change 100644 => 100755 examples/android/gradlew diff --git a/core/gradle/wrapper/gradle-wrapper.properties b/core/gradle/wrapper/gradle-wrapper.properties index 0e11084..5776319 100644 --- a/core/gradle/wrapper/gradle-wrapper.properties +++ b/core/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-5.5.1-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.4-all.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists \ No newline at end of file diff --git a/core/src/androidMain/kotlin/com/omega_r/libs/entities/images/BaseBitmapImage.kt b/core/src/androidMain/kotlin/com/omega_r/libs/entities/images/BaseBitmapImage.kt index de0b4b3..bda4a78 100644 --- a/core/src/androidMain/kotlin/com/omega_r/libs/entities/images/BaseBitmapImage.kt +++ b/core/src/androidMain/kotlin/com/omega_r/libs/entities/images/BaseBitmapImage.kt @@ -33,7 +33,7 @@ abstract class BaseBitmapImage : OmegaImage { ): Bitmap? override fun applyImage( - entity: B, + image: B, imageView: ImageView, holder: OmegaImageProcessorsHolder, extractor: OmegaResourceExtractor @@ -43,12 +43,12 @@ abstract class BaseBitmapImage : OmegaImage { if (width <= 0 || height <= 0) { ImageSizeExtractor(imageView) { target -> - applyImage(entity, target, holder, extractor) + applyImage(image, target, holder, extractor) } } else { val imageScaleType = imageView.scaleType executeImageAsync(imageView, { - getBitmap(entity, extractor, width, height)?.run { + getBitmap(image, extractor, width, height)?.run { getScaledBitmap(width, height, imageScaleType, autoRecycle, this) } }, ImageView::setImageBitmap) @@ -56,15 +56,15 @@ abstract class BaseBitmapImage : OmegaImage { } override fun applyBackground( - entity: B, + image: B, view: View, holder: OmegaImageProcessorsHolder, extractor: OmegaResourceExtractor ) { val viewWeak = WeakReference(view) - val processor = OmegaImageProcessorsHolder.current.getProcessor(entity) + val processor = OmegaImageProcessorsHolder.current.getProcessor(image) processor.launch { - val bitmap = getBitmap(entity, extractor) + val bitmap = getBitmap(image, extractor) withContext(Dispatchers.Main) { viewWeak.get()?.let { view -> applyBackground(view, bitmap?.let { BitmapDrawable(view.resources, it) }) @@ -74,14 +74,14 @@ abstract class BaseBitmapImage : OmegaImage { } override fun applyCompoundImage( - entity: B, + image: B, index: Int, textView: TextView, holder: OmegaImageProcessorsHolder, extractor: OmegaResourceExtractor ) { runBlocking { - val drawable = getBitmap(entity, extractor)?.let { bitmap -> + val drawable = getBitmap(image, extractor)?.let { bitmap -> extractor.context?.let { BitmapDrawable(it.resources, bitmap) } ?: BitmapDrawable(bitmap) } OmegaImageProcessor.applyCompoundDrawable(textView, drawable, index) diff --git a/core/src/androidMain/kotlin/com/omega_r/libs/entities/images/OmegaBaseImageProcessor.kt b/core/src/androidMain/kotlin/com/omega_r/libs/entities/images/OmegaBaseImageProcessor.kt index f930560..8e4b480 100644 --- a/core/src/androidMain/kotlin/com/omega_r/libs/entities/images/OmegaBaseImageProcessor.kt +++ b/core/src/androidMain/kotlin/com/omega_r/libs/entities/images/OmegaBaseImageProcessor.kt @@ -1,7 +1,5 @@ package com.omega_r.libs.entities.images -import android.graphics.drawable.Drawable -import android.widget.TextView import com.omega_r.libs.entities.images.OmegaImage.Format import com.omega_r.libs.entities.resources.OmegaResourceExtractor import io.ktor.utils.io.core.Input @@ -14,8 +12,8 @@ abstract class OmegaBaseImageProcessor : OmegaImageProcessor override val coroutineContext: CoroutineContext = Dispatchers.Default - override suspend fun getInput(entity: I, extractor: OmegaResourceExtractor, format: Format, quality: Int): Input? = - getInputStream(entity, extractor, format, quality)?.asInput() + override suspend fun getInput(image: I, extractor: OmegaResourceExtractor, format: Format, quality: Int): Input? = + getInputStream(image, extractor, format, quality)?.asInput() protected abstract suspend fun getInputStream( entity: I, @@ -24,7 +22,7 @@ abstract class OmegaBaseImageProcessor : OmegaImageProcessor quality: Int ): InputStream? - override fun preload(entity: I, extractor: OmegaResourceExtractor) { + override fun preload(image: I, extractor: OmegaResourceExtractor) { // nothing } diff --git a/core/src/androidMain/kotlin/com/omega_r/libs/entities/images/OmegaByteArrayImage.kt b/core/src/androidMain/kotlin/com/omega_r/libs/entities/images/OmegaByteArrayImage.kt index 5faba78..b0df0df 100644 --- a/core/src/androidMain/kotlin/com/omega_r/libs/entities/images/OmegaByteArrayImage.kt +++ b/core/src/androidMain/kotlin/com/omega_r/libs/entities/images/OmegaByteArrayImage.kt @@ -34,11 +34,11 @@ data class OmegaByteArrayImage(val byteArray: ByteArray) : BaseBitmapImage(), Om class Processor : BaseBitmapImage.Processor(true) { override suspend fun getInput( - entity: OmegaByteArrayImage, + image: OmegaByteArrayImage, extractor: OmegaResourceExtractor, format: OmegaImage.Format, quality: Int - ): Input? = entity.byteArray.asInput() + ): Input? = image.byteArray.asInput() override suspend fun getInputStream( entity: OmegaByteArrayImage, diff --git a/core/src/androidMain/kotlin/com/omega_r/libs/entities/images/OmegaDrawableImage.kt b/core/src/androidMain/kotlin/com/omega_r/libs/entities/images/OmegaDrawableImage.kt index b7e81b6..99e8790 100644 --- a/core/src/androidMain/kotlin/com/omega_r/libs/entities/images/OmegaDrawableImage.kt +++ b/core/src/androidMain/kotlin/com/omega_r/libs/entities/images/OmegaDrawableImage.kt @@ -7,8 +7,6 @@ import android.widget.TextView import com.omega_r.libs.entities.extensions.toBitmapAndRecycle import com.omega_r.libs.entities.extensions.toInputStream import com.omega_r.libs.entities.resources.OmegaResourceExtractor -import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.withContext import java.io.InputStream data class OmegaDrawableImage(val drawable: Drawable) : BaseBitmapImage(), OmegaImage { @@ -22,21 +20,21 @@ data class OmegaDrawableImage(val drawable: Drawable) : BaseBitmapImage(), Omega class Processor : OmegaBaseImageProcessor() { override fun applyImage( - entity: OmegaDrawableImage, + image: OmegaDrawableImage, imageView: ImageView, holder: OmegaImageProcessorsHolder, extractor: OmegaResourceExtractor ) { - imageView.setImageDrawable(entity.drawable) + imageView.setImageDrawable(image.drawable) } override fun applyBackground( - entity: OmegaDrawableImage, + image: OmegaDrawableImage, view: View, holder: OmegaImageProcessorsHolder, extractor: OmegaResourceExtractor ) { - OmegaImageProcessor.applyBackground(view, entity.drawable) + OmegaImageProcessor.applyBackground(view, image.drawable) } override suspend fun getInputStream( @@ -47,13 +45,13 @@ data class OmegaDrawableImage(val drawable: Drawable) : BaseBitmapImage(), Omega ): InputStream? = entity.drawable.toBitmapAndRecycle { toInputStream(format, quality) } override fun applyCompoundImage( - entity: OmegaDrawableImage, + image: OmegaDrawableImage, index: Int, textView: TextView, holder: OmegaImageProcessorsHolder, extractor: OmegaResourceExtractor ) { - OmegaImageProcessor.applyCompoundDrawable(textView, entity.drawable, index) + OmegaImageProcessor.applyCompoundDrawable(textView, image.drawable, index) } } diff --git a/core/src/androidMain/kotlin/com/omega_r/libs/entities/images/OmegaImageProcessor.kt b/core/src/androidMain/kotlin/com/omega_r/libs/entities/images/OmegaImageProcessor.kt index 8f7b625..de4a3f4 100644 --- a/core/src/androidMain/kotlin/com/omega_r/libs/entities/images/OmegaImageProcessor.kt +++ b/core/src/androidMain/kotlin/com/omega_r/libs/entities/images/OmegaImageProcessor.kt @@ -48,34 +48,34 @@ actual interface OmegaImageProcessor : OmegaProcessor, Corout } actual suspend fun getInput( - entity: T, + image: T, extractor: OmegaResourceExtractor, format: OmegaImage.Format, quality: Int ): Input? fun applyImage( - entity: T, + image: T, imageView: ImageView, holder: OmegaImageProcessorsHolder = OmegaImageProcessorsHolder.Default, extractor: OmegaResourceExtractor = OmegaResourceExtractor.Default ) fun applyBackground( - entity: T, + image: T, view: View, holder: OmegaImageProcessorsHolder = OmegaImageProcessorsHolder.Default, extractor: OmegaResourceExtractor = OmegaResourceExtractor.Default ) fun applyCompoundImage( - entity: T, + image: T, index: Int, textView: TextView, holder: OmegaImageProcessorsHolder = OmegaImageProcessorsHolder.Default, extractor: OmegaResourceExtractor = OmegaResourceExtractor.Default ) - fun preload(entity: T, extractor: OmegaResourceExtractor) + fun preload(image: T, extractor: OmegaResourceExtractor) } \ No newline at end of file diff --git a/core/src/androidMain/kotlin/com/omega_r/libs/entities/images/OmegaPlaceholderImage.kt b/core/src/androidMain/kotlin/com/omega_r/libs/entities/images/OmegaPlaceholderImage.kt index 1383101..93c6758 100644 --- a/core/src/androidMain/kotlin/com/omega_r/libs/entities/images/OmegaPlaceholderImage.kt +++ b/core/src/androidMain/kotlin/com/omega_r/libs/entities/images/OmegaPlaceholderImage.kt @@ -23,29 +23,29 @@ open class OmegaPlaceholderImage( class Processor : OmegaBaseImageProcessor() { override fun applyImage( - entity: OmegaPlaceholderImage, + image: OmegaPlaceholderImage, imageView: ImageView, holder: OmegaImageProcessorsHolder, extractor: OmegaResourceExtractor ) { apply({ image -> holder.getProcessor(image).applyImage(image, imageView, holder, extractor) - }, entity.placeholderImage, entity.finalImage) + }, image.placeholderImage, image.finalImage) } override fun applyBackground( - entity: OmegaPlaceholderImage, + image: OmegaPlaceholderImage, view: View, holder: OmegaImageProcessorsHolder, extractor: OmegaResourceExtractor ) { apply({ image -> holder.getProcessor(image).applyBackground(image, view, holder, extractor) - }, entity.placeholderImage, entity.finalImage) + }, image.placeholderImage, image.finalImage) } override fun applyCompoundImage( - entity: OmegaPlaceholderImage, + image: OmegaPlaceholderImage, index: Int, textView: TextView, holder: OmegaImageProcessorsHolder, @@ -53,7 +53,7 @@ open class OmegaPlaceholderImage( ) { apply({ image -> holder.getProcessor(image).applyCompoundImage(image, index, textView, holder, extractor) - }, entity.placeholderImage, entity.finalImage) + }, image.placeholderImage, image.finalImage) } override suspend fun getInputStream( diff --git a/core/src/androidMain/kotlin/com/omega_r/libs/entities/images/OmegaResourceImage.kt b/core/src/androidMain/kotlin/com/omega_r/libs/entities/images/OmegaResourceImage.kt index 53038a2..e1b2be4 100644 --- a/core/src/androidMain/kotlin/com/omega_r/libs/entities/images/OmegaResourceImage.kt +++ b/core/src/androidMain/kotlin/com/omega_r/libs/entities/images/OmegaResourceImage.kt @@ -24,12 +24,12 @@ actual data class OmegaResourceImage(actual val resource: OmegaResource.Image) : class Processor : OmegaBaseImageProcessor() { override fun applyImage( - entity: OmegaResourceImage, + image: OmegaResourceImage, imageView: ImageView, holder: OmegaImageProcessorsHolder, extractor: OmegaResourceExtractor ) { - val id = entity.resource.id + val id = image.resource.id if (id == OmegaImage.NO_PLACEHOLDER_RES) { imageView.setImageDrawable(null) } else { @@ -38,12 +38,12 @@ actual data class OmegaResourceImage(actual val resource: OmegaResource.Image) : } override fun applyBackground( - entity: OmegaResourceImage, + image: OmegaResourceImage, view: View, holder: OmegaImageProcessorsHolder, extractor: OmegaResourceExtractor ) { - val id = entity.resource.id + val id = image.resource.id if (id == OmegaImage.NO_PLACEHOLDER_RES) { view.background = null } else { @@ -52,14 +52,14 @@ actual data class OmegaResourceImage(actual val resource: OmegaResource.Image) : } override fun applyCompoundImage( - entity: OmegaResourceImage, + image: OmegaResourceImage, index: Int, textView: TextView, holder: OmegaImageProcessorsHolder, extractor: OmegaResourceExtractor ) { - val id = entity.resource.id - val drawable = if (id == OmegaImage.NO_PLACEHOLDER_RES) null else extractor.getDrawable(entity.resource) + val id = image.resource.id + val drawable = if (id == OmegaImage.NO_PLACEHOLDER_RES) null else extractor.getDrawable(image.resource) OmegaImageProcessor.applyCompoundDrawable(textView, drawable, index) } diff --git a/core/src/androidMain/kotlin/com/omega_r/libs/entities/images/OmegaUriImage.kt b/core/src/androidMain/kotlin/com/omega_r/libs/entities/images/OmegaUriImage.kt index 44a20c3..1770755 100644 --- a/core/src/androidMain/kotlin/com/omega_r/libs/entities/images/OmegaUriImage.kt +++ b/core/src/androidMain/kotlin/com/omega_r/libs/entities/images/OmegaUriImage.kt @@ -19,12 +19,12 @@ data class OmegaUriImage(val uri: Uri) : BaseBitmapImage(), OmegaImage { class Processor : BaseBitmapImage.Processor(true) { override fun applyImage( - entity: OmegaUriImage, + image: OmegaUriImage, imageView: ImageView, holder: OmegaImageProcessorsHolder, extractor: OmegaResourceExtractor ) { - imageView.setImageURI(entity.uri) + imageView.setImageURI(image.uri) } override suspend fun getBitmap( diff --git a/core/src/commonMain/kotlin/com/omega_r/libs/entities/images/OmegaImageProcessor.kt b/core/src/commonMain/kotlin/com/omega_r/libs/entities/images/OmegaImageProcessor.kt index fe88d4c..c86dedb 100644 --- a/core/src/commonMain/kotlin/com/omega_r/libs/entities/images/OmegaImageProcessor.kt +++ b/core/src/commonMain/kotlin/com/omega_r/libs/entities/images/OmegaImageProcessor.kt @@ -8,6 +8,6 @@ import io.ktor.utils.io.core.Input expect interface OmegaImageProcessor : OmegaProcessor { - suspend fun getInput(entity: T, extractor: OmegaResourceExtractor, format: Format = JPEG, quality: Int = 100): Input? + suspend fun getInput(image: T, extractor: OmegaResourceExtractor, format: Format = JPEG, quality: Int = 100): Input? } \ No newline at end of file diff --git a/core/src/iosMain/kotlin/com/omega_r/libs/entities/images/OmegaImageProcessor.kt b/core/src/iosMain/kotlin/com/omega_r/libs/entities/images/OmegaImageProcessor.kt index 00dcf69..bec3159 100644 --- a/core/src/iosMain/kotlin/com/omega_r/libs/entities/images/OmegaImageProcessor.kt +++ b/core/src/iosMain/kotlin/com/omega_r/libs/entities/images/OmegaImageProcessor.kt @@ -1,10 +1,11 @@ package com.omega_r.libs.entities.images import com.omega_r.libs.entities.processors.OmegaProcessor +import com.omega_r.libs.entities.resources.OmegaResourceExtractor import io.ktor.utils.io.core.Input -actual interface OmegaImageProcessor : OmegaProcessor { +actual interface OmegaImageProcessor : OmegaProcessor { - actual suspend fun T.getInput(): Input? + actual suspend fun getInput(image: T, extractor: OmegaResourceExtractor, format: OmegaImage.Format, quality: Int): Input? } \ No newline at end of file diff --git a/core/src/iosMain/kotlin/com/omega_r/libs/entities/text/array/OmegaArrayTextProcessor.kt b/core/src/iosMain/kotlin/com/omega_r/libs/entities/text/array/OmegaArrayTextProcessor.kt index 3533804..076b94b 100644 --- a/core/src/iosMain/kotlin/com/omega_r/libs/entities/text/array/OmegaArrayTextProcessor.kt +++ b/core/src/iosMain/kotlin/com/omega_r/libs/entities/text/array/OmegaArrayTextProcessor.kt @@ -1,10 +1,11 @@ package com.omega_r.libs.entities.text.array +import com.omega_r.libs.entities.resources.OmegaResourceExtractor import com.omega_r.libs.entities.text.OmegaTextProcessor actual object OmegaArrayTextProcessor : OmegaTextProcessor { - override fun OmegaArrayText.extract(): CharSequence? { + override fun extract(entity: OmegaArrayText, extractor: OmegaResourceExtractor): CharSequence? { TODO("not implemented") //To change body of created functions use File | Settings | File Templates. } diff --git a/core/src/iosMain/kotlin/com/omega_r/libs/entities/text/processor/OmegaArrayTextProcessor.kt b/core/src/iosMain/kotlin/com/omega_r/libs/entities/text/processor/OmegaArrayTextProcessor.kt deleted file mode 100644 index 29aa121..0000000 --- a/core/src/iosMain/kotlin/com/omega_r/libs/entities/text/processor/OmegaArrayTextProcessor.kt +++ /dev/null @@ -1,6 +0,0 @@ -package com.omega_r.libs.entities.text.processor - -import com.omega_r.libs.entities.text.OmegaTextProcessor -import com.omega_r.libs.entities.text.array.OmegaArrayText - -actual abstract class OmegaArrayTextProcessor : OmegaTextProcessor \ No newline at end of file diff --git a/core/src/iosMain/kotlin/com/omega_r/libs/entities/text/resource/plurals/OmegaPluralsResourceTextProcessor.kt b/core/src/iosMain/kotlin/com/omega_r/libs/entities/text/resource/plurals/OmegaPluralsResourceTextProcessor.kt index 6a05368..b4585ac 100644 --- a/core/src/iosMain/kotlin/com/omega_r/libs/entities/text/resource/plurals/OmegaPluralsResourceTextProcessor.kt +++ b/core/src/iosMain/kotlin/com/omega_r/libs/entities/text/resource/plurals/OmegaPluralsResourceTextProcessor.kt @@ -1,20 +1,10 @@ package com.omega_r.libs.entities.text.resource.plurals -import com.omega_r.libs.entities.resources.OmegaResource import com.omega_r.libs.entities.resources.OmegaResourceExtractor -import com.omega_r.libs.entities.text.resource.OmegaResourceTextProcessor -actual object OmegaPluralsResourceTextProcessor : OmegaResourceTextProcessor() { +actual object OmegaPluralsResourceTextProcessor : OmegaBaseTextResourceTextProcessor() { - override fun extract(entity: OmegaPluralsResourceText, resourceExtractor: OmegaResourceExtractor): CharSequence? { - TODO("not implemented") //To change body of created functions use File | Settings | File Templates. - } - - override fun extractWithArgs( - entity: OmegaPluralsResourceText, - formatArgs: Array, - resourceExtractor: OmegaResourceExtractor - ): CharSequence? { + override fun extractWithArgs(entity: OmegaPluralsResourceText, formatArgs: Array, resourceExtractor: OmegaResourceExtractor): CharSequence? { TODO("not implemented") //To change body of created functions use File | Settings | File Templates. } diff --git a/core/src/iosMain/kotlin/com/omega_r/libs/entities/text/resource/text/OmegaTextResourceTextProcessor.kt b/core/src/iosMain/kotlin/com/omega_r/libs/entities/text/resource/text/OmegaTextResourceTextProcessor.kt index 1424e15..4528512 100644 --- a/core/src/iosMain/kotlin/com/omega_r/libs/entities/text/resource/text/OmegaTextResourceTextProcessor.kt +++ b/core/src/iosMain/kotlin/com/omega_r/libs/entities/text/resource/text/OmegaTextResourceTextProcessor.kt @@ -1,20 +1,11 @@ package com.omega_r.libs.entities.text.resource.text -import com.omega_r.libs.entities.resources.OmegaResource import com.omega_r.libs.entities.resources.OmegaResourceExtractor -import com.omega_r.libs.entities.text.resource.OmegaResourceTextProcessor -actual object OmegaTextResourceTextProcessor : - OmegaResourceTextProcessor() { - override fun extract(entity: OmegaTextResourceText, resourceExtractor: OmegaResourceExtractor): CharSequence? { - TODO("not implemented") //To change body of created functions use File | Settings | File Templates. - } +actual object OmegaTextResourceTextProcessor : OmegaBaseTextResourceTextProcessor() { - override fun extractWithArgs( - entity: OmegaTextResourceText, - formatArgs: Array, - resourceExtractor: OmegaResourceExtractor - ): CharSequence? { + override fun extractWithArgs(entity: OmegaTextResourceText, formatArgs: Array, resourceExtractor: OmegaResourceExtractor): CharSequence? { TODO("not implemented") //To change body of created functions use File | Settings | File Templates. } + } \ No newline at end of file diff --git a/core/src/iosMain/kotlin/com/omega_r/libs/entities/text/styled/OmegaDefaultStyledTextProcessor.kt b/core/src/iosMain/kotlin/com/omega_r/libs/entities/text/styled/OmegaDefaultStyledTextProcessor.kt index 5648b45..7b05d94 100644 --- a/core/src/iosMain/kotlin/com/omega_r/libs/entities/text/styled/OmegaDefaultStyledTextProcessor.kt +++ b/core/src/iosMain/kotlin/com/omega_r/libs/entities/text/styled/OmegaDefaultStyledTextProcessor.kt @@ -1,8 +1,12 @@ package com.omega_r.libs.entities.text.styled +import com.omega_r.libs.entities.resources.OmegaResourceExtractor + actual object OmegaDefaultStyledTextProcessor : OmegaStyledTextProcessor { - actual override fun OmegaStyledText.extract(): CharSequence? { + + actual override fun extract(entity: OmegaStyledText, resourceExtractor: OmegaResourceExtractor): CharSequence? { TODO("not implemented") //To change body of created functions use File | Settings | File Templates. } + } \ No newline at end of file diff --git a/examples/android/gradle/wrapper/gradle-wrapper.properties b/examples/android/gradle/wrapper/gradle-wrapper.properties index 4e4acdf..efd1ceb 100644 --- a/examples/android/gradle/wrapper/gradle-wrapper.properties +++ b/examples/android/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ -#Fri Aug 16 18:00:14 BST 2019 +#Fri Feb 28 16:09:11 MSK 2020 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-5.1.1-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.4-all.zip diff --git a/examples/android/gradlew b/examples/android/gradlew old mode 100644 new mode 100755 diff --git a/examples/gradle/wrapper/gradle-wrapper.properties b/examples/gradle/wrapper/gradle-wrapper.properties index e60c023..4dff3b1 100644 --- a/examples/gradle/wrapper/gradle-wrapper.properties +++ b/examples/gradle/wrapper/gradle-wrapper.properties @@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-5.5.1-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.4-all.zip diff --git a/glide/build.gradle b/glide/build.gradle index 59504d0..d598b7f 100644 --- a/glide/build.gradle +++ b/glide/build.gradle @@ -32,7 +32,7 @@ android { dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" - api project(":core") + implementation project(":core") api ("com.github.bumptech.glide:glide:4.9.0") { exclude group: "com.android.support" } diff --git a/glide/src/main/java/com/omega_r/entities/image/glide/OmegaGlideImageProcessorsHolder.kt b/glide/src/main/java/com/omega_r/entities/image/glide/OmegaGlideImageProcessorsHolder.kt index 93d6685..d52363a 100644 --- a/glide/src/main/java/com/omega_r/entities/image/glide/OmegaGlideImageProcessorsHolder.kt +++ b/glide/src/main/java/com/omega_r/entities/image/glide/OmegaGlideImageProcessorsHolder.kt @@ -92,27 +92,27 @@ class OmegaGlideImageProcessorsHolder( } override fun applyImage( - entity: OmegaImage, + image: OmegaImage, imageView: ImageView, holder: OmegaImageProcessorsHolder, extractor: OmegaResourceExtractor ) { Glide.with(imageView) .asDrawable() - .createRequestBuilder(entity, extractor) + .createRequestBuilder(image, extractor) ?.into(imageView) - ?: defaultHolder.getProcessor(entity).applyImage(entity, imageView, holder, extractor) + ?: defaultHolder.getProcessor(image).applyImage(image, imageView, holder, extractor) } override fun applyBackground( - entity: OmegaImage, + image: OmegaImage, view: View, holder: OmegaImageProcessorsHolder, extractor: OmegaResourceExtractor ) { Glide.with(view) .asDrawable() - .createRequestBuilder(entity, extractor) + .createRequestBuilder(image, extractor) ?.into(object : CustomViewTarget(view) { override fun onLoadFailed(errorDrawable: Drawable?) { @@ -127,11 +127,11 @@ class OmegaGlideImageProcessorsHolder( OmegaImageProcessor.applyBackground(view, resource) } - }) ?: defaultHolder.getProcessor(entity).applyBackground(entity, view, holder, extractor) + }) ?: defaultHolder.getProcessor(image).applyBackground(image, view, holder, extractor) } override fun applyCompoundImage( - entity: OmegaImage, + image: OmegaImage, index: Int, textView: TextView, holder: OmegaImageProcessorsHolder, @@ -140,7 +140,7 @@ class OmegaGlideImageProcessorsHolder( extractor.context?.let { context -> Glide.with(context) .asDrawable() - .createRequestBuilder(entity, extractor) + .createRequestBuilder(image, extractor) ?.run { val futureTarget = submit() try { @@ -150,12 +150,12 @@ class OmegaGlideImageProcessorsHolder( Glide.with(context) .clear(futureTarget) } - } ?: defaultHolder.getProcessor(entity).applyCompoundImage(entity, index, textView, holder, extractor) - } ?: defaultHolder.getProcessor(entity).applyCompoundImage(entity, index, textView, holder, extractor) + } ?: defaultHolder.getProcessor(image).applyCompoundImage(image, index, textView, holder, extractor) + } ?: defaultHolder.getProcessor(image).applyCompoundImage(image, index, textView, holder, extractor) } override suspend fun getInput( - entity: OmegaImage, + image: OmegaImage, extractor: OmegaResourceExtractor, format: OmegaImage.Format, quality: Int @@ -163,7 +163,7 @@ class OmegaGlideImageProcessorsHolder( return extractor.context?.let { context -> Glide.with(context) .asBitmap() - .createRequestBuilder(entity, extractor) + .createRequestBuilder(image, extractor) ?.run { val futureTarget = submit() try { @@ -174,20 +174,20 @@ class OmegaGlideImageProcessorsHolder( .clear(futureTarget) } } - } ?: defaultHolder.getProcessor(entity).getInput(entity, extractor, format, quality) + } ?: defaultHolder.getProcessor(image).getInput(image, extractor, format, quality) } override fun preload( - entity: OmegaImage, + image: OmegaImage, extractor: OmegaResourceExtractor ) { extractor.context?.let { Glide.with(it) .asDrawable() - .createRequestBuilder(entity, extractor) + .createRequestBuilder(image, extractor) ?.preload() - ?: defaultHolder.getProcessor(entity).preload(entity, extractor) - } ?: defaultHolder.getProcessor(entity).preload(entity, extractor) + ?: defaultHolder.getProcessor(image).preload(image, extractor) + } ?: defaultHolder.getProcessor(image).preload(image, extractor) } } diff --git a/gradle.properties b/gradle.properties index daed1a1..620a2b5 100644 --- a/gradle.properties +++ b/gradle.properties @@ -12,7 +12,7 @@ kotlin.code.style=official # versions kotlin_version = 1.3.61 -android_tools_version = 3.4.1 +android_tools_version = 3.6.0 ktor_version = 1.3.1 diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 39e0ec3..69e2828 100755 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ #Fri Aug 16 17:40:37 BST 2019 -distributionUrl=https\://services.gradle.org/distributions/gradle-5.5.1-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.4-all.zip distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStorePath=wrapper/dists diff --git a/picasso/build.gradle b/picasso/build.gradle index 44accae..a7c30a5 100644 --- a/picasso/build.gradle +++ b/picasso/build.gradle @@ -32,7 +32,7 @@ android { dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" - api project(":core") + implementation project(":core") api ('com.squareup.picasso:picasso:2.71828') { exclude group: 'com.android.support', module: 'support-annotations' } diff --git a/picasso/src/main/java/com/omega_r/libs/entities/image/picasso/OmegaPicassoProcessorsHolder.kt b/picasso/src/main/java/com/omega_r/libs/entities/image/picasso/OmegaPicassoProcessorsHolder.kt index ea7e2ec..d79b871 100644 --- a/picasso/src/main/java/com/omega_r/libs/entities/image/picasso/OmegaPicassoProcessorsHolder.kt +++ b/picasso/src/main/java/com/omega_r/libs/entities/image/picasso/OmegaPicassoProcessorsHolder.kt @@ -1,5 +1,6 @@ package com.omega_r.libs.entities.image.picasso +import android.content.res.Resources import android.graphics.Bitmap import android.graphics.drawable.BitmapDrawable import android.graphics.drawable.Drawable @@ -9,6 +10,7 @@ import android.widget.TextView import com.omega_r.libs.entities.extensions.NO_PLACEHOLDER_RES import com.omega_r.libs.entities.extensions.toInputStream import com.omega_r.libs.entities.images.* +import com.omega_r.libs.entities.images.OmegaImage.Format import com.omega_r.libs.entities.resources.OmegaResourceExtractor import com.omega_r.libs.entities.tools.ImageSizeExtractor import com.squareup.picasso.Picasso @@ -49,6 +51,9 @@ class OmegaPicassoProcessorsHolder( private inner class Processor : OmegaImageProcessor, CoroutineScope { + private val targetMap = mutableMapOf() + private val targetList = mutableListOf() // for Input + override val coroutineContext: CoroutineContext = Dispatchers.Default private fun createRequestCreator(image: OmegaImage): RequestCreator? { @@ -62,7 +67,11 @@ class OmegaPicassoProcessorsHolder( is OmegaPlaceholderImage -> { val request = createRequestCreator(image.finalImage) when (val placeholderImage = image.placeholderImage) { - is OmegaResourceImage -> if(placeholderImage.resource.id == OmegaImage.NO_PLACEHOLDER_RES) request else request?.placeholder(placeholderImage.resource.id) + is OmegaResourceImage -> if (placeholderImage.resource.id == OmegaImage.NO_PLACEHOLDER_RES) { + request + } else { + request?.placeholder(placeholderImage.resource.id) + } is OmegaDrawableImage -> request?.placeholder(placeholderImage.drawable) else -> null } @@ -72,8 +81,13 @@ class OmegaPicassoProcessorsHolder( } - override fun applyImage(entity: OmegaImage, imageView: ImageView, holder: OmegaImageProcessorsHolder, extractor: OmegaResourceExtractor) { - createRequestCreator(entity)?.apply { + override fun applyImage( + image: OmegaImage, + imageView: ImageView, + holder: OmegaImageProcessorsHolder, + extractor: OmegaResourceExtractor + ) { + createRequestCreator(image)?.apply { fit() @Suppress("NON_EXHAUSTIVE_WHEN") when (imageView.scaleType) { @@ -82,101 +96,133 @@ class OmegaPicassoProcessorsHolder( ImageView.ScaleType.CENTER_CROP -> centerCrop() } into(imageView) - } ?: defaultHolder.getProcessor(entity).applyImage(entity, imageView, holder, extractor) + } ?: defaultHolder.getProcessor(image).applyImage(image, imageView, holder, extractor) } override fun applyBackground( - entity: OmegaImage, + image: OmegaImage, view: View, holder: OmegaImageProcessorsHolder, extractor: OmegaResourceExtractor ) { - createRequestCreator(entity)?.apply { + createRequestCreator(image)?.apply { if (view.width <= 0 || view.height <= 0) { ImageSizeExtractor(view) { - applyBackground(entity, view, holder, extractor) + applyBackground(image, view, holder, extractor) } } else { resize(view.width, view.height) - val viewWeak = WeakReference(view) - into(object : Target { - override fun onPrepareLoad(placeHolderDrawable: Drawable?) { - viewWeak.get()?.let { - OmegaImageProcessor.applyBackground(view, placeHolderDrawable) - } + into(object : DisposableTarget(view) { + override fun onPrepareLoad(view: View, placeHolderDrawable: Drawable?) { + OmegaImageProcessor.applyBackground(view, placeHolderDrawable) } - override fun onBitmapFailed(e: Exception?, errorDrawable: Drawable?) { - viewWeak.get()?.let { - OmegaImageProcessor.applyBackground(view, errorDrawable) - } + override fun onBitmapFailed(view: View, errorDrawable: Drawable?) { + OmegaImageProcessor.applyBackground(view, errorDrawable) } - override fun onBitmapLoaded(bitmap: Bitmap?, from: Picasso.LoadedFrom?) { - viewWeak.get()?.let { - OmegaImageProcessor.applyBackground(view, BitmapDrawable(it.resources, bitmap)) - } + override fun onBitmapLoaded(view: View, bitmap: Bitmap?) { + OmegaImageProcessor.applyBackground(view, bitmap.toDrawable(view.resources)) } }) } - } ?: defaultHolder.getProcessor(entity).applyBackground(entity, view, holder, extractor) + } ?: defaultHolder.getProcessor(image).applyBackground(image, view, holder, extractor) } - override fun applyCompoundImage(entity: OmegaImage, index: Int, textView: TextView, holder: OmegaImageProcessorsHolder, extractor: OmegaResourceExtractor) { - createRequestCreator(entity)?.run { - into(object : Target { - override fun onPrepareLoad(placeHolderDrawable: Drawable?) { - OmegaImageProcessor.applyCompoundDrawable(textView, placeHolderDrawable, index) + override fun applyCompoundImage( + image: OmegaImage, + index: Int, + textView: TextView, + holder: OmegaImageProcessorsHolder, + extractor: OmegaResourceExtractor + ) { + createRequestCreator(image)?.run { + into(object : DisposableTarget(textView) { + override fun onPrepareLoad(view: TextView, placeHolderDrawable: Drawable?) { + OmegaImageProcessor.applyCompoundDrawable(view, placeHolderDrawable, index) } - override fun onBitmapFailed(e: Exception?, errorDrawable: Drawable?) { - OmegaImageProcessor.applyCompoundDrawable(textView, errorDrawable, index) + override fun onBitmapFailed(view: TextView, errorDrawable: Drawable?) { + OmegaImageProcessor.applyCompoundDrawable(view, errorDrawable, index) } - override fun onBitmapLoaded(bitmap: Bitmap?, from: Picasso.LoadedFrom?) { - OmegaImageProcessor.applyCompoundDrawable( - textView, - bitmap?.let { BitmapDrawable(textView.resources, bitmap) }, - index - ) + override fun onBitmapLoaded(view: TextView, bitmap: Bitmap?) { + OmegaImageProcessor.applyCompoundDrawable(view, bitmap.toDrawable(view.resources), index) } }) } } - override suspend fun getInput( - entity: OmegaImage, - extractor: OmegaResourceExtractor, - format: OmegaImage.Format, - quality: Int - ): Input? { - return createRequestCreator(entity)?.run { + override suspend fun getInput(image: OmegaImage, extractor: OmegaResourceExtractor, format: Format, quality: Int): Input? { + return createRequestCreator(image)?.run { withContext(Dispatchers.Main) { val stream = WrapperInputStream() - into(object : Target { + val target = object : Target { override fun onPrepareLoad(placeHolderDrawable: Drawable?) { // stream can only send data once } override fun onBitmapFailed(e: Exception?, errorDrawable: Drawable?) { stream.inputStream = null + targetList.remove(this) } override fun onBitmapLoaded(bitmap: Bitmap?, from: Picasso.LoadedFrom?) { - if (bitmap == null) { - stream.inputStream = null - } else { - stream.inputStream = bitmap.toInputStream(format, quality) - } + stream.inputStream = bitmap?.toInputStream(format, quality) + targetList.remove(this) } - }) + } + targetList.add(target) + into(target) stream.asInput() } - } ?: defaultHolder.getProcessor(entity).getInput(entity, extractor, format, quality) + } ?: defaultHolder.getProcessor(image).getInput(image, extractor, format, quality) } - override fun preload(entity: OmegaImage, extractor: OmegaResourceExtractor) { - createRequestCreator(entity)?.fetch() ?: defaultHolder.getProcessor(entity).preload(entity, extractor) + override fun preload(image: OmegaImage, extractor: OmegaResourceExtractor) { + createRequestCreator(image)?.fetch() ?: defaultHolder.getProcessor(image).preload(image, extractor) + } + + private fun Bitmap?.toDrawable(resources: Resources): Drawable? = this?.let { BitmapDrawable(resources, this) } + + private abstract inner class DisposableTarget(view: T) : Target { + + private val weakViewReference = WeakReference(view) + + init { + targetMap[view.id]?.let { + Picasso.get().cancelRequest(it) + targetMap.remove(view.id) + } + targetMap[view.id] = this + } + + override fun onPrepareLoad(placeHolderDrawable: Drawable?) { + weakViewReference.get()?.let { view -> + onPrepareLoad(view, placeHolderDrawable) + } + } + + abstract fun onPrepareLoad(view: T, placeHolderDrawable: Drawable?) + + override fun onBitmapFailed(e: java.lang.Exception?, errorDrawable: Drawable?) { + weakViewReference.get()?.let { view -> + onBitmapFailed(view, errorDrawable) + targetMap.remove(view.id) + } + } + + abstract fun onBitmapFailed(view: T, errorDrawable: Drawable?) + + override fun onBitmapLoaded(bitmap: Bitmap?, from: Picasso.LoadedFrom?) { + weakViewReference.get()?.let { view -> + onBitmapLoaded(view, bitmap) + targetMap.remove(view.id) + } + } + + abstract fun onBitmapLoaded(view: T, bitmap: Bitmap?) + } } From 8eaf402fd83b4a37b36296e5047f91ee3bbcee47 Mon Sep 17 00:00:00 2001 From: roman_tcaregorodtcev Date: Tue, 3 Mar 2020 12:43:24 +0300 Subject: [PATCH 02/23] install task disabled --- core/build.gradle.kts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/core/build.gradle.kts b/core/build.gradle.kts index 680f7b0..3138d7e 100644 --- a/core/build.gradle.kts +++ b/core/build.gradle.kts @@ -147,4 +147,5 @@ val packForXcode by tasks.creating(Sync::class) { } } -tasks.getByName("build").dependsOn(packForXcode) \ No newline at end of file +tasks.getByName("build").dependsOn(packForXcode) +tasks.getByName("install").enabled = false \ No newline at end of file From 6d8a9c542c4b45ad4a2d04a578817502ec9aff04 Mon Sep 17 00:00:00 2001 From: roman_tcaregorodtcev Date: Tue, 3 Mar 2020 12:56:58 +0300 Subject: [PATCH 03/23] core module implementation changed to api --- glide/build.gradle | 2 +- picasso/build.gradle | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/glide/build.gradle b/glide/build.gradle index d598b7f..59504d0 100644 --- a/glide/build.gradle +++ b/glide/build.gradle @@ -32,7 +32,7 @@ android { dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" - implementation project(":core") + api project(":core") api ("com.github.bumptech.glide:glide:4.9.0") { exclude group: "com.android.support" } diff --git a/picasso/build.gradle b/picasso/build.gradle index a7c30a5..44accae 100644 --- a/picasso/build.gradle +++ b/picasso/build.gradle @@ -32,7 +32,7 @@ android { dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" - implementation project(":core") + api project(":core") api ('com.squareup.picasso:picasso:2.71828') { exclude group: 'com.android.support', module: 'support-annotations' } From 4e64504252bcbc27852df7b1dbaac6be42143719 Mon Sep 17 00:00:00 2001 From: roman_tcaregorodtcev Date: Tue, 3 Mar 2020 15:23:55 +0300 Subject: [PATCH 04/23] maven-publish plugin disabled --- core/build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/build.gradle.kts b/core/build.gradle.kts index 3138d7e..96ba5db 100644 --- a/core/build.gradle.kts +++ b/core/build.gradle.kts @@ -28,7 +28,7 @@ buildscript { plugins { id("org.jetbrains.kotlin.multiplatform") id("com.github.dcendents.android-maven") - id("maven-publish") +// id("maven-publish") } val local = Properties() From c7b83c3e8c5583d1abce7eaedcaee9febb251aa6 Mon Sep 17 00:00:00 2001 From: roman_tcaregorodtcev Date: Tue, 3 Mar 2020 16:33:47 +0300 Subject: [PATCH 05/23] install task disabled --- core/build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/build.gradle.kts b/core/build.gradle.kts index 96ba5db..0542f1b 100644 --- a/core/build.gradle.kts +++ b/core/build.gradle.kts @@ -148,4 +148,4 @@ val packForXcode by tasks.creating(Sync::class) { } tasks.getByName("build").dependsOn(packForXcode) -tasks.getByName("install").enabled = false \ No newline at end of file +//tasks.getByName("install").enabled = false \ No newline at end of file From c5dece7ce0797730ae4d20cc8fe9ca5a52d393aa Mon Sep 17 00:00:00 2001 From: roman_tcaregorodtcev Date: Mon, 16 Mar 2020 15:15:18 +0300 Subject: [PATCH 06/23] maven publish added --- core/build.gradle.kts | 6 +++--- gradle.properties | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/core/build.gradle.kts b/core/build.gradle.kts index 0542f1b..c0b0456 100644 --- a/core/build.gradle.kts +++ b/core/build.gradle.kts @@ -21,14 +21,14 @@ buildscript { dependencies { classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version") classpath("com.android.tools.build:gradle:$android_tools_version") - classpath("com.github.dcendents:android-maven-gradle-plugin:2.1") +// classpath("com.github.dcendents:android-maven-gradle-plugin:2.1") } } plugins { id("org.jetbrains.kotlin.multiplatform") - id("com.github.dcendents.android-maven") -// id("maven-publish") +// id("com.github.dcendents.android-maven") + id("maven-publish") } val local = Properties() diff --git a/gradle.properties b/gradle.properties index 620a2b5..5709e76 100644 --- a/gradle.properties +++ b/gradle.properties @@ -28,4 +28,4 @@ android.useAndroidX=true android.enableJetifier=true version=0.0.1 -group=com.github.Omega-R \ No newline at end of file +group=com.omega_r.libs.entities \ No newline at end of file From 02028409862e4c595810013654b0d92576b02714 Mon Sep 17 00:00:00 2001 From: roman_tcaregorodtcev Date: Mon, 16 Mar 2020 16:50:35 +0300 Subject: [PATCH 07/23] ios module disabled --- core/build.gradle.kts | 69 +++++++++++++++++++++---------------------- 1 file changed, 34 insertions(+), 35 deletions(-) diff --git a/core/build.gradle.kts b/core/build.gradle.kts index c0b0456..47473d7 100644 --- a/core/build.gradle.kts +++ b/core/build.gradle.kts @@ -27,7 +27,7 @@ buildscript { plugins { id("org.jetbrains.kotlin.multiplatform") -// id("com.github.dcendents.android-maven") + id("com.github.dcendents.android-maven") id("maven-publish") } @@ -107,11 +107,11 @@ kotlin { } } - val iosMain by getting { - dependencies { - implementation("io.ktor:ktor-client-ios:$ktor_version") - } - } +// val iosMain by getting { +// dependencies { +// implementation("io.ktor:ktor-client-ios:$ktor_version") +// } +// } } } @@ -120,32 +120,31 @@ val javadocJar by tasks.creating(Jar::class) { archiveClassifier.value("javadoc") } -val packForXcode by tasks.creating(Sync::class) { - val targetDir = File(buildDir, "xcode-frameworks") - - /// selecting the right configuration for the iOS - /// framework depending on the environment - /// variables set by Xcode build - val mode = System.getenv("CONFIGURATION") ?: "DEBUG" - val framework = kotlin.targets - .getByName("ios") - .binaries.getFramework(mode) - inputs.property("mode", mode) - dependsOn(framework.linkTask) - - from({ framework.outputDirectory }) - into(targetDir) - - /// generate a helpful ./gradlew wrapper with embedded Java path - doLast { - val gradlew = File(targetDir, "gradlew") - gradlew.writeText("#!/bin/bash\n" - + "export 'JAVA_HOME=${System.getProperty("java.home")}'\n" - + "cd '${rootProject.rootDir}'\n" - + "./gradlew \$@\n") - gradlew.setExecutable(true) - } -} - -tasks.getByName("build").dependsOn(packForXcode) -//tasks.getByName("install").enabled = false \ No newline at end of file +//val packForXcode by tasks.creating(Sync::class) { +// val targetDir = File(buildDir, "xcode-frameworks") +// +// /// selecting the right configuration for the iOS +// /// framework depending on the environment +// /// variables set by Xcode build +// val mode = System.getenv("CONFIGURATION") ?: "DEBUG" +// val framework = kotlin.targets +// .getByName("ios") +// .binaries.getFramework(mode) +// inputs.property("mode", mode) +// dependsOn(framework.linkTask) +// +// from({ framework.outputDirectory }) +// into(targetDir) +// +// /// generate a helpful ./gradlew wrapper with embedded Java path +// doLast { +// val gradlew = File(targetDir, "gradlew") +// gradlew.writeText("#!/bin/bash\n" +// + "export 'JAVA_HOME=${System.getProperty("java.home")}'\n" +// + "cd '${rootProject.rootDir}'\n" +// + "./gradlew \$@\n") +// gradlew.setExecutable(true) +// } +//} +// +//tasks.getByName("build").dependsOn(packForXcode) \ No newline at end of file From c1049558ecb451976f63e74ea6f09c4917f55b85 Mon Sep 17 00:00:00 2001 From: roman_tcaregorodtcev Date: Tue, 17 Mar 2020 10:22:16 +0300 Subject: [PATCH 08/23] install task for core disabled --- core/build.gradle.kts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/core/build.gradle.kts b/core/build.gradle.kts index 47473d7..8c5a4aa 100644 --- a/core/build.gradle.kts +++ b/core/build.gradle.kts @@ -147,4 +147,6 @@ val javadocJar by tasks.creating(Jar::class) { // } //} // -//tasks.getByName("build").dependsOn(packForXcode) \ No newline at end of file +//tasks.getByName("build").dependsOn(packForXcode) + +tasks.getByName("install").enabled = false \ No newline at end of file From 4e33afb64bdf92cc8eda35eec4de00f832b9981c Mon Sep 17 00:00:00 2001 From: roman_tcaregorodtcev Date: Tue, 17 Mar 2020 10:31:50 +0300 Subject: [PATCH 09/23] dcendents enabled for core --- core/build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/build.gradle.kts b/core/build.gradle.kts index 8c5a4aa..cde3f41 100644 --- a/core/build.gradle.kts +++ b/core/build.gradle.kts @@ -21,7 +21,7 @@ buildscript { dependencies { classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version") classpath("com.android.tools.build:gradle:$android_tools_version") -// classpath("com.github.dcendents:android-maven-gradle-plugin:2.1") + classpath("com.github.dcendents:android-maven-gradle-plugin:2.1") } } From ff6baf146e6a5c7e5c9886b8eb09837382b4378a Mon Sep 17 00:00:00 2001 From: roman_tcaregorodtcev Date: Tue, 17 Mar 2020 10:58:13 +0300 Subject: [PATCH 10/23] mavenLocalDisabled --- core/build.gradle.kts | 46 ++++++++++++++++++++++++------------------- 1 file changed, 26 insertions(+), 20 deletions(-) diff --git a/core/build.gradle.kts b/core/build.gradle.kts index cde3f41..05ba6a3 100644 --- a/core/build.gradle.kts +++ b/core/build.gradle.kts @@ -6,13 +6,13 @@ buildscript { val android_tools_version: String by project repositories { - mavenLocal() - mavenCentral() +// mavenLocal() +// mavenCentral() jcenter() google() maven(url = "https://dl.bintray.com/jetbrains/kotlin-native-dependencies") maven(url = "https://jitpack.io") - maven(url = "https://maven.google.com") +// maven(url = "https://maven.google.com") maven(url = "https://plugins.gradle.org/m2/") maven(url = "https://dl.bintray.com/kotlin/kotlin-eap") maven(url = "https://kotlin.bintray.com/kotlinx") @@ -28,7 +28,7 @@ buildscript { plugins { id("org.jetbrains.kotlin.multiplatform") id("com.github.dcendents.android-maven") - id("maven-publish") +// id("maven-publish") } val local = Properties() @@ -38,8 +38,8 @@ if (localProperties.exists()) { } repositories { - mavenLocal() - mavenCentral() +// mavenLocal() +// mavenCentral() google() jcenter() maven(url = "https://jitpack.io") @@ -62,19 +62,19 @@ kotlin { } //select iOS target platform depending on the Xcode environment variables - val iOSTarget: (String, KotlinNativeTarget.() -> Unit) -> KotlinNativeTarget = - if (System.getenv("SDK_NAME")?.startsWith("iphoneos") == true) - ::iosArm64 - else - ::iosX64 - - iOSTarget("ios") { - binaries { - framework { - baseName = "core" - } - } - } +// val iOSTarget: (String, KotlinNativeTarget.() -> Unit) -> KotlinNativeTarget = +// if (System.getenv("SDK_NAME")?.startsWith("iphoneos") == true) +// ::iosArm64 +// else +// ::iosX64 + +// iOSTarget("ios") { +// binaries { +// framework { +// baseName = "core" +// } +// } +// } sourceSets { val commonMain by getting { @@ -148,5 +148,11 @@ val javadocJar by tasks.creating(Jar::class) { //} // //tasks.getByName("build").dependsOn(packForXcode) +//tasks.getByName("install").enabled = false -tasks.getByName("install").enabled = false \ No newline at end of file +tasks.forEach { task -> + val name = task.name + if(name.contains("ios", true)) { + task.enabled = false + } +} \ No newline at end of file From d770cdf6bf12128ebe40f48c095ffde4ae5ab268 Mon Sep 17 00:00:00 2001 From: roman_tcaregorodtcev Date: Tue, 17 Mar 2020 11:28:25 +0300 Subject: [PATCH 11/23] dcendets disabled --- core/build.gradle.kts | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/core/build.gradle.kts b/core/build.gradle.kts index 05ba6a3..bbf1875 100644 --- a/core/build.gradle.kts +++ b/core/build.gradle.kts @@ -6,13 +6,13 @@ buildscript { val android_tools_version: String by project repositories { -// mavenLocal() -// mavenCentral() + mavenLocal() + mavenCentral() jcenter() google() maven(url = "https://dl.bintray.com/jetbrains/kotlin-native-dependencies") maven(url = "https://jitpack.io") -// maven(url = "https://maven.google.com") + maven(url = "https://maven.google.com") maven(url = "https://plugins.gradle.org/m2/") maven(url = "https://dl.bintray.com/kotlin/kotlin-eap") maven(url = "https://kotlin.bintray.com/kotlinx") @@ -21,14 +21,14 @@ buildscript { dependencies { classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version") classpath("com.android.tools.build:gradle:$android_tools_version") - classpath("com.github.dcendents:android-maven-gradle-plugin:2.1") +// classpath("com.github.dcendents:android-maven-gradle-plugin:2.1") } } plugins { id("org.jetbrains.kotlin.multiplatform") - id("com.github.dcendents.android-maven") -// id("maven-publish") +// id("com.github.dcendents.android-maven") + id("maven-publish") } val local = Properties() @@ -38,8 +38,8 @@ if (localProperties.exists()) { } repositories { -// mavenLocal() -// mavenCentral() + mavenLocal() + mavenCentral() google() jcenter() maven(url = "https://jitpack.io") @@ -150,9 +150,9 @@ val javadocJar by tasks.creating(Jar::class) { //tasks.getByName("build").dependsOn(packForXcode) //tasks.getByName("install").enabled = false -tasks.forEach { task -> - val name = task.name - if(name.contains("ios", true)) { - task.enabled = false - } -} \ No newline at end of file +//tasks.forEach { task -> +// val name = task.name +// if(name.contains("ios", true)) { +// task.enabled = false +// } +//} \ No newline at end of file From 7affadf69f2401a22afe72716f8159d9c4f3117d Mon Sep 17 00:00:00 2001 From: roman_tcaregorodtcev Date: Tue, 17 Mar 2020 11:35:29 +0300 Subject: [PATCH 12/23] maven-publish added --- glide/build.gradle | 3 ++- picasso/build.gradle | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/glide/build.gradle b/glide/build.gradle index 59504d0..8ad7a92 100644 --- a/glide/build.gradle +++ b/glide/build.gradle @@ -1,7 +1,8 @@ apply plugin: 'com.android.library' apply plugin: 'kotlin-android' apply plugin: 'kotlin-android-extensions' -apply plugin: 'com.github.dcendents.android-maven' +apply plugin: 'maven-publish' +//apply plugin: 'com.github.dcendents.android-maven' group = 'com.github.Omega-R' diff --git a/picasso/build.gradle b/picasso/build.gradle index 44accae..506cb93 100644 --- a/picasso/build.gradle +++ b/picasso/build.gradle @@ -1,7 +1,8 @@ apply plugin: 'com.android.library' apply plugin: 'kotlin-android' apply plugin: 'kotlin-android-extensions' -apply plugin: 'com.github.dcendents.android-maven' +apply plugin: 'maven-publish' +//apply plugin: 'com.github.dcendents.android-maven' group = 'com.github.Omega-R' From b2c1b237daf385185ff8257f8c23d6a9a7e22f0a Mon Sep 17 00:00:00 2001 From: roman_tcaregorodtcev Date: Tue, 17 Mar 2020 17:24:57 +0300 Subject: [PATCH 13/23] Glide and Picasso gradles updated --- glide/build.gradle | 21 ++++++++++++--- .../image/glide/ExampleInstrumentedTest.java | 26 ------------------- .../entities/image/glide/ExampleUnitTest.java | 17 ------------ picasso/build.gradle | 20 ++++++++++---- 4 files changed, 32 insertions(+), 52 deletions(-) delete mode 100644 glide/src/androidTest/java/com/omega_r/entities/image/glide/ExampleInstrumentedTest.java delete mode 100644 glide/src/test/java/com/omega_r/entities/image/glide/ExampleUnitTest.java diff --git a/glide/build.gradle b/glide/build.gradle index 8ad7a92..89f7778 100644 --- a/glide/build.gradle +++ b/glide/build.gradle @@ -2,7 +2,7 @@ apply plugin: 'com.android.library' apply plugin: 'kotlin-android' apply plugin: 'kotlin-android-extensions' apply plugin: 'maven-publish' -//apply plugin: 'com.github.dcendents.android-maven' +apply plugin: 'com.github.dcendents.android-maven' group = 'com.github.Omega-R' @@ -14,8 +14,6 @@ android { defaultConfig { minSdkVersion project.min_sdk_version.toInteger() targetSdkVersion project.target_sdk_version.toInteger() - versionCode 1 - versionName "1.0" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" @@ -30,10 +28,22 @@ android { } +gradle.projectsEvaluated { + publishPrebuiltPublicationToMavenLocal.dependsOn(tasks.getByName("assemble")) +} + +publishing { + publications { + prebuilt(MavenPublication) { + artifact file("$buildDir/outputs/aar/glide-release.aar") + } + } +} + dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" - api project(":core") + implementation project(":core") api ("com.github.bumptech.glide:glide:4.9.0") { exclude group: "com.android.support" } @@ -41,5 +51,8 @@ dependencies { implementation "io.ktor:ktor-client-android:$ktor_version" } repositories { + mavenLocal() mavenCentral() + jcenter() + google() } diff --git a/glide/src/androidTest/java/com/omega_r/entities/image/glide/ExampleInstrumentedTest.java b/glide/src/androidTest/java/com/omega_r/entities/image/glide/ExampleInstrumentedTest.java deleted file mode 100644 index 612d569..0000000 --- a/glide/src/androidTest/java/com/omega_r/entities/image/glide/ExampleInstrumentedTest.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.omega_r.entities.image.glide; - -import android.content.Context; -import android.support.test.InstrumentationRegistry; -import android.support.test.runner.AndroidJUnit4; - -import org.junit.Test; -import org.junit.runner.RunWith; - -import static org.junit.Assert.*; - -/** - * Instrumented test, which will execute on an Android device. - * - * @see Testing documentation - */ -@RunWith(AndroidJUnit4.class) -public class ExampleInstrumentedTest { - @Test - public void useAppContext() { - // Context of the app under test. - Context appContext = InstrumentationRegistry.getTargetContext(); - - assertEquals("com.omega_r.entities.image.glide.test", appContext.getPackageName()); - } -} diff --git a/glide/src/test/java/com/omega_r/entities/image/glide/ExampleUnitTest.java b/glide/src/test/java/com/omega_r/entities/image/glide/ExampleUnitTest.java deleted file mode 100644 index 3fad4ef..0000000 --- a/glide/src/test/java/com/omega_r/entities/image/glide/ExampleUnitTest.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.omega_r.entities.image.glide; - -import org.junit.Test; - -import static org.junit.Assert.*; - -/** - * Example local unit test, which will execute on the development machine (host). - * - * @see Testing documentation - */ -public class ExampleUnitTest { - @Test - public void addition_isCorrect() { - assertEquals(4, 2 + 2); - } -} \ No newline at end of file diff --git a/picasso/build.gradle b/picasso/build.gradle index 506cb93..97e841e 100644 --- a/picasso/build.gradle +++ b/picasso/build.gradle @@ -2,7 +2,7 @@ apply plugin: 'com.android.library' apply plugin: 'kotlin-android' apply plugin: 'kotlin-android-extensions' apply plugin: 'maven-publish' -//apply plugin: 'com.github.dcendents.android-maven' +apply plugin: 'com.github.dcendents.android-maven' group = 'com.github.Omega-R' @@ -14,8 +14,6 @@ android { defaultConfig { minSdkVersion project.min_sdk_version.toInteger() targetSdkVersion project.target_sdk_version.toInteger() - versionCode 1 - versionName "1.0" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" @@ -30,11 +28,23 @@ android { } +gradle.projectsEvaluated { + publishPrebuiltPublicationToMavenLocal.dependsOn(tasks.getByName("assemble")) +} + +publishing { + publications { + prebuilt(MavenPublication) { + artifact file("$buildDir/outputs/aar/picasso-release.aar") + } + } +} + dependencies { - implementation fileTree(dir: 'libs', include: ['*.jar']) + implementation fileTree(dir: 'libs', include: ['.jar']) implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" api project(":core") - api ('com.squareup.picasso:picasso:2.71828') { + api('com.squareup.picasso:picasso:2.71828') { exclude group: 'com.android.support', module: 'support-annotations' } implementation "io.ktor:ktor-client-core:$ktor_version" From 882c0593106525bd7fe7e9188c975dcb5811db1a Mon Sep 17 00:00:00 2001 From: roman_tcaregorodtcev Date: Tue, 17 Mar 2020 17:25:51 +0300 Subject: [PATCH 14/23] jetpack plugins disabled --- glide/build.gradle | 2 +- picasso/build.gradle | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/glide/build.gradle b/glide/build.gradle index 89f7778..f55f5d7 100644 --- a/glide/build.gradle +++ b/glide/build.gradle @@ -2,7 +2,7 @@ apply plugin: 'com.android.library' apply plugin: 'kotlin-android' apply plugin: 'kotlin-android-extensions' apply plugin: 'maven-publish' -apply plugin: 'com.github.dcendents.android-maven' +//apply plugin: 'com.github.dcendents.android-maven' group = 'com.github.Omega-R' diff --git a/picasso/build.gradle b/picasso/build.gradle index 97e841e..259e9a8 100644 --- a/picasso/build.gradle +++ b/picasso/build.gradle @@ -2,7 +2,7 @@ apply plugin: 'com.android.library' apply plugin: 'kotlin-android' apply plugin: 'kotlin-android-extensions' apply plugin: 'maven-publish' -apply plugin: 'com.github.dcendents.android-maven' +//apply plugin: 'com.github.dcendents.android-maven' group = 'com.github.Omega-R' From a51ebd241efca12b3ddac989345cb38996b7e393 Mon Sep 17 00:00:00 2001 From: roman_tcaregorodtcev Date: Tue, 17 Mar 2020 17:53:11 +0300 Subject: [PATCH 15/23] com.github.dcendents removed from gradles --- core/build.gradle.kts | 2 -- glide/build.gradle | 1 - picasso/build.gradle | 1 - 3 files changed, 4 deletions(-) diff --git a/core/build.gradle.kts b/core/build.gradle.kts index bbf1875..11788c1 100644 --- a/core/build.gradle.kts +++ b/core/build.gradle.kts @@ -21,13 +21,11 @@ buildscript { dependencies { classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version") classpath("com.android.tools.build:gradle:$android_tools_version") -// classpath("com.github.dcendents:android-maven-gradle-plugin:2.1") } } plugins { id("org.jetbrains.kotlin.multiplatform") -// id("com.github.dcendents.android-maven") id("maven-publish") } diff --git a/glide/build.gradle b/glide/build.gradle index f55f5d7..cd4c529 100644 --- a/glide/build.gradle +++ b/glide/build.gradle @@ -2,7 +2,6 @@ apply plugin: 'com.android.library' apply plugin: 'kotlin-android' apply plugin: 'kotlin-android-extensions' apply plugin: 'maven-publish' -//apply plugin: 'com.github.dcendents.android-maven' group = 'com.github.Omega-R' diff --git a/picasso/build.gradle b/picasso/build.gradle index 259e9a8..006c0cb 100644 --- a/picasso/build.gradle +++ b/picasso/build.gradle @@ -2,7 +2,6 @@ apply plugin: 'com.android.library' apply plugin: 'kotlin-android' apply plugin: 'kotlin-android-extensions' apply plugin: 'maven-publish' -//apply plugin: 'com.github.dcendents.android-maven' group = 'com.github.Omega-R' From c2e3e0c86bf64fc2f85d879d32d83a5aaafe48e1 Mon Sep 17 00:00:00 2001 From: roman_tcaregorodtcev Date: Wed, 18 Mar 2020 10:38:06 +0300 Subject: [PATCH 16/23] OmegaResource - Color class string argument removed; OmegaColor extensions added; OmegaText extensions added. --- .../entities/extensions/DrawableExtensions.kt | 30 ------------------- .../extensions/OmegaColorExtentions.kt | 7 +++++ .../extensions/OmegaTextExtentions.kt | 13 ++++++++ .../extensions/OmegaTextStyleExtenstions.kt | 8 +++++ .../libs/entities/resources/OmegaResource.kt | 2 +- .../libs/entities/colors/OmegaColor.kt | 11 +++---- 6 files changed, 35 insertions(+), 36 deletions(-) delete mode 100644 core/src/androidMain/kotlin/com/omega_r/libs/entities/extensions/DrawableExtensions.kt create mode 100644 core/src/androidMain/kotlin/com/omega_r/libs/entities/extensions/OmegaColorExtentions.kt create mode 100644 core/src/androidMain/kotlin/com/omega_r/libs/entities/extensions/OmegaTextExtentions.kt create mode 100644 core/src/androidMain/kotlin/com/omega_r/libs/entities/extensions/OmegaTextStyleExtenstions.kt diff --git a/core/src/androidMain/kotlin/com/omega_r/libs/entities/extensions/DrawableExtensions.kt b/core/src/androidMain/kotlin/com/omega_r/libs/entities/extensions/DrawableExtensions.kt deleted file mode 100644 index c2f5ee1..0000000 --- a/core/src/androidMain/kotlin/com/omega_r/libs/entities/extensions/DrawableExtensions.kt +++ /dev/null @@ -1,30 +0,0 @@ -package com.omega_r.libs.entities.extensions - -import android.graphics.Bitmap -import android.graphics.Canvas -import android.graphics.drawable.BitmapDrawable -import android.graphics.drawable.Drawable - -inline fun Drawable.toBitmap(converter: Bitmap.() -> R): R = with(this) { - if (this is BitmapDrawable) { - return converter(bitmap) - } - - val newBitmap = if (intrinsicWidth <= 0 || intrinsicHeight <= 0) { - Bitmap.createBitmap(500, 500, Bitmap.Config.ARGB_8888)!! - } else { - Bitmap.createBitmap(intrinsicWidth, intrinsicHeight, Bitmap.Config.ARGB_8888)!! - } - - try { - val oldBounds = copyBounds() - setBounds(0, 0, newBitmap.width, newBitmap.height) - - draw(Canvas(newBitmap)) - - bounds = oldBounds - return converter(newBitmap) - } finally { - newBitmap.recycle() - } -} \ No newline at end of file diff --git a/core/src/androidMain/kotlin/com/omega_r/libs/entities/extensions/OmegaColorExtentions.kt b/core/src/androidMain/kotlin/com/omega_r/libs/entities/extensions/OmegaColorExtentions.kt new file mode 100644 index 0000000..27d33e5 --- /dev/null +++ b/core/src/androidMain/kotlin/com/omega_r/libs/entities/extensions/OmegaColorExtentions.kt @@ -0,0 +1,7 @@ +package com.omega_r.libs.entities.extensions + +import android.annotation.ColorInt +import com.omega_r.libs.entities.colors.OmegaColor +import com.omega_r.libs.entities.resources.OmegaResource + +fun OmegaColor.Companion.fromResource(@ColorInt id: Int): OmegaColor = fromResource(OmegaResource.Color(id)) \ No newline at end of file diff --git a/core/src/androidMain/kotlin/com/omega_r/libs/entities/extensions/OmegaTextExtentions.kt b/core/src/androidMain/kotlin/com/omega_r/libs/entities/extensions/OmegaTextExtentions.kt new file mode 100644 index 0000000..42e7a0d --- /dev/null +++ b/core/src/androidMain/kotlin/com/omega_r/libs/entities/extensions/OmegaTextExtentions.kt @@ -0,0 +1,13 @@ +package com.omega_r.libs.entities.extensions + +import android.annotation.StringRes +import com.omega_r.libs.entities.resources.OmegaResource +import com.omega_r.libs.entities.text.OmegaText + +fun OmegaText.Companion.from(@StringRes id: Int): OmegaText = from(OmegaResource.Text(id)) + +fun OmegaText.Companion.from(@StringRes id: Int, vararg formatArgs: Any): OmegaText = + from(OmegaResource.Text(id), *formatArgs) + +fun OmegaText.Companion.from(@StringRes id: Int, quantity: Int, vararg formatArgs: Any): OmegaText = + from(OmegaResource.Plurals(id), quantity, *formatArgs) \ No newline at end of file diff --git a/core/src/androidMain/kotlin/com/omega_r/libs/entities/extensions/OmegaTextStyleExtenstions.kt b/core/src/androidMain/kotlin/com/omega_r/libs/entities/extensions/OmegaTextStyleExtenstions.kt new file mode 100644 index 0000000..5d7ed3b --- /dev/null +++ b/core/src/androidMain/kotlin/com/omega_r/libs/entities/extensions/OmegaTextStyleExtenstions.kt @@ -0,0 +1,8 @@ +package com.omega_r.libs.entities.extensions + +import android.annotation.ColorInt +import com.omega_r.libs.entities.colors.OmegaColor +import com.omega_r.libs.entities.text.styled.styles.OmegaTextStyle + +fun OmegaTextStyle.Companion.from(@ColorInt id: Int): OmegaTextStyle = + from(OmegaColor.fromResource(id)) \ No newline at end of file diff --git a/core/src/androidMain/kotlin/com/omega_r/libs/entities/resources/OmegaResource.kt b/core/src/androidMain/kotlin/com/omega_r/libs/entities/resources/OmegaResource.kt index fe0d767..b48f44b 100644 --- a/core/src/androidMain/kotlin/com/omega_r/libs/entities/resources/OmegaResource.kt +++ b/core/src/androidMain/kotlin/com/omega_r/libs/entities/resources/OmegaResource.kt @@ -10,7 +10,7 @@ actual sealed class OmegaResource { actual data class TextArray(@ArrayRes val id: Int) : OmegaResource() - actual data class Color(@ColorRes val id: Int, val string: String) : OmegaResource() + actual data class Color(@ColorRes val id: Int) : OmegaResource() actual data class Image(@DrawableRes val id: Int) : OmegaResource() diff --git a/core/src/commonMain/kotlin/com/omega_r/libs/entities/colors/OmegaColor.kt b/core/src/commonMain/kotlin/com/omega_r/libs/entities/colors/OmegaColor.kt index cecb91f..193b88f 100644 --- a/core/src/commonMain/kotlin/com/omega_r/libs/entities/colors/OmegaColor.kt +++ b/core/src/commonMain/kotlin/com/omega_r/libs/entities/colors/OmegaColor.kt @@ -35,15 +35,16 @@ interface OmegaColor : OmegaEntity { val TEAL = OmegaIntColor(-0xff7f80) val TRANSPARENT = OmegaIntColor(0) - fun fromInt(colorInt: Int) = OmegaIntColor(colorInt) + fun fromInt(colorInt: Int): OmegaColor = OmegaIntColor(colorInt) - fun fromResource(resource: OmegaResource.Color) = OmegaResourceColor(resource) + fun fromResource(resource: OmegaResource.Color): OmegaColor = OmegaResourceColor(resource) - fun fromHex(hex: String) = OmegaHexColor(hex) + fun fromHex(hex: String): OmegaColor = OmegaHexColor(hex) - fun fromName(name: String) = OmegaNameColor(name) + fun fromName(name: String): OmegaColor = OmegaNameColor(name) - fun fromArgb(alpha: Int, red: Int, green: Int, blue: Int) = OmegaArgbColor(alpha, red, green, blue) + fun fromArgb(alpha: Int, red: Int, green: Int, blue: Int): OmegaColor = + OmegaArgbColor(alpha, red, green, blue) } From 041d5bfeb7def7198d64299301f2f8c468c0a162 Mon Sep 17 00:00:00 2001 From: roman_tcaregorodtcev Date: Wed, 18 Mar 2020 12:36:17 +0300 Subject: [PATCH 17/23] iOS uncommented --- core/build.gradle.kts | 100 ++++++++---------- .../extensions/OmegaColorExtentions.kt | 2 +- 2 files changed, 47 insertions(+), 55 deletions(-) diff --git a/core/build.gradle.kts b/core/build.gradle.kts index 11788c1..864ceff 100644 --- a/core/build.gradle.kts +++ b/core/build.gradle.kts @@ -60,19 +60,19 @@ kotlin { } //select iOS target platform depending on the Xcode environment variables -// val iOSTarget: (String, KotlinNativeTarget.() -> Unit) -> KotlinNativeTarget = -// if (System.getenv("SDK_NAME")?.startsWith("iphoneos") == true) -// ::iosArm64 -// else -// ::iosX64 - -// iOSTarget("ios") { -// binaries { -// framework { -// baseName = "core" -// } -// } -// } + val iOSTarget: (String, KotlinNativeTarget.() -> Unit) -> KotlinNativeTarget = + if (System.getenv("SDK_NAME")?.startsWith("iphoneos") == true) + ::iosArm64 + else + ::iosX64 + + iOSTarget("ios") { + binaries { + framework { + baseName = "core" + } + } + } sourceSets { val commonMain by getting { @@ -105,11 +105,11 @@ kotlin { } } -// val iosMain by getting { -// dependencies { -// implementation("io.ktor:ktor-client-ios:$ktor_version") -// } -// } + val iosMain by getting { + dependencies { + implementation("io.ktor:ktor-client-ios:$ktor_version") + } + } } } @@ -118,39 +118,31 @@ val javadocJar by tasks.creating(Jar::class) { archiveClassifier.value("javadoc") } -//val packForXcode by tasks.creating(Sync::class) { -// val targetDir = File(buildDir, "xcode-frameworks") -// -// /// selecting the right configuration for the iOS -// /// framework depending on the environment -// /// variables set by Xcode build -// val mode = System.getenv("CONFIGURATION") ?: "DEBUG" -// val framework = kotlin.targets -// .getByName("ios") -// .binaries.getFramework(mode) -// inputs.property("mode", mode) -// dependsOn(framework.linkTask) -// -// from({ framework.outputDirectory }) -// into(targetDir) -// -// /// generate a helpful ./gradlew wrapper with embedded Java path -// doLast { -// val gradlew = File(targetDir, "gradlew") -// gradlew.writeText("#!/bin/bash\n" -// + "export 'JAVA_HOME=${System.getProperty("java.home")}'\n" -// + "cd '${rootProject.rootDir}'\n" -// + "./gradlew \$@\n") -// gradlew.setExecutable(true) -// } -//} -// -//tasks.getByName("build").dependsOn(packForXcode) -//tasks.getByName("install").enabled = false - -//tasks.forEach { task -> -// val name = task.name -// if(name.contains("ios", true)) { -// task.enabled = false -// } -//} \ No newline at end of file +val packForXcode by tasks.creating(Sync::class) { + val targetDir = File(buildDir, "xcode-frameworks") + + /// selecting the right configuration for the iOS + /// framework depending on the environment + /// variables set by Xcode build + val mode = System.getenv("CONFIGURATION") ?: "DEBUG" + val framework = kotlin.targets + .getByName("ios") + .binaries.getFramework(mode) + inputs.property("mode", mode) + dependsOn(framework.linkTask) + + from({ framework.outputDirectory }) + into(targetDir) + + /// generate a helpful ./gradlew wrapper with embedded Java path + doLast { + val gradlew = File(targetDir, "gradlew") + gradlew.writeText("#!/bin/bash\n" + + "export 'JAVA_HOME=${System.getProperty("java.home")}'\n" + + "cd '${rootProject.rootDir}'\n" + + "./gradlew \$@\n") + gradlew.setExecutable(true) + } +} + +tasks.getByName("build").dependsOn(packForXcode) \ No newline at end of file diff --git a/core/src/androidMain/kotlin/com/omega_r/libs/entities/extensions/OmegaColorExtentions.kt b/core/src/androidMain/kotlin/com/omega_r/libs/entities/extensions/OmegaColorExtentions.kt index 27d33e5..4427fdd 100644 --- a/core/src/androidMain/kotlin/com/omega_r/libs/entities/extensions/OmegaColorExtentions.kt +++ b/core/src/androidMain/kotlin/com/omega_r/libs/entities/extensions/OmegaColorExtentions.kt @@ -4,4 +4,4 @@ import android.annotation.ColorInt import com.omega_r.libs.entities.colors.OmegaColor import com.omega_r.libs.entities.resources.OmegaResource -fun OmegaColor.Companion.fromResource(@ColorInt id: Int): OmegaColor = fromResource(OmegaResource.Color(id)) \ No newline at end of file +fun OmegaColor.Companion.fromResource(@ColorInt id: Int) = fromResource(OmegaResource.Color(id)) \ No newline at end of file From 44d3fc8829f99f2cb0b6d208b5c10c10ff1dd30a Mon Sep 17 00:00:00 2001 From: roman_tcaregorodtcev Date: Wed, 18 Mar 2020 12:45:54 +0300 Subject: [PATCH 18/23] TextExtensions moved to another folder --- ...aExtensions.kt => OmegaImageExtensions.kt} | 0 .../extensions/OmegaTextExtentions.kt | 43 ++++++++++++++++- .../omega_r/libs/entities/text/Extensions.kt | 47 ------------------- 3 files changed, 42 insertions(+), 48 deletions(-) rename core/src/androidMain/kotlin/com/omega_r/libs/entities/extensions/{OmegaImegaExtensions.kt => OmegaImageExtensions.kt} (100%) delete mode 100644 core/src/androidMain/kotlin/com/omega_r/libs/entities/text/Extensions.kt diff --git a/core/src/androidMain/kotlin/com/omega_r/libs/entities/extensions/OmegaImegaExtensions.kt b/core/src/androidMain/kotlin/com/omega_r/libs/entities/extensions/OmegaImageExtensions.kt similarity index 100% rename from core/src/androidMain/kotlin/com/omega_r/libs/entities/extensions/OmegaImegaExtensions.kt rename to core/src/androidMain/kotlin/com/omega_r/libs/entities/extensions/OmegaImageExtensions.kt diff --git a/core/src/androidMain/kotlin/com/omega_r/libs/entities/extensions/OmegaTextExtentions.kt b/core/src/androidMain/kotlin/com/omega_r/libs/entities/extensions/OmegaTextExtentions.kt index 42e7a0d..ac90578 100644 --- a/core/src/androidMain/kotlin/com/omega_r/libs/entities/extensions/OmegaTextExtentions.kt +++ b/core/src/androidMain/kotlin/com/omega_r/libs/entities/extensions/OmegaTextExtentions.kt @@ -1,7 +1,14 @@ package com.omega_r.libs.entities.extensions import android.annotation.StringRes +import android.content.Context +import android.os.Build +import android.text.Html +import android.text.Spanned +import android.view.View +import android.widget.TextView import com.omega_r.libs.entities.resources.OmegaResource +import com.omega_r.libs.entities.resources.OmegaResourceExtractor import com.omega_r.libs.entities.text.OmegaText fun OmegaText.Companion.from(@StringRes id: Int): OmegaText = from(OmegaResource.Text(id)) @@ -10,4 +17,38 @@ fun OmegaText.Companion.from(@StringRes id: Int, vararg formatArgs: Any): OmegaT from(OmegaResource.Text(id), *formatArgs) fun OmegaText.Companion.from(@StringRes id: Int, quantity: Int, vararg formatArgs: Any): OmegaText = - from(OmegaResource.Plurals(id), quantity, *formatArgs) \ No newline at end of file + from(OmegaResource.Plurals(id), quantity, *formatArgs) + +fun TextView.setText(text: OmegaText) { + this@setText.text = text.getCharSequence(extractor) +} + +val Context.extractor: OmegaResourceExtractor + get() = OmegaResourceExtractor.from(this) + +val View.extractor: OmegaResourceExtractor + get() = context.extractor + +fun Spanned.toHtmlString(): String { + return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { + Html.toHtml(this, Html.TO_HTML_PARAGRAPH_LINES_CONSECUTIVE) + } else { + Html.toHtml(this) + } +} + +fun String.fromHtmlString(): Spanned { + return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { + Html.fromHtml(this, Html.FROM_HTML_MODE_LEGACY) + } else { + Html.fromHtml(this) + } +} + +fun CharSequence.toHtmlString(): String { + return when (this) { + is Spanned -> toHtmlString() + else -> Html.escapeHtml(this) + } + +} \ No newline at end of file diff --git a/core/src/androidMain/kotlin/com/omega_r/libs/entities/text/Extensions.kt b/core/src/androidMain/kotlin/com/omega_r/libs/entities/text/Extensions.kt deleted file mode 100644 index eacb19f..0000000 --- a/core/src/androidMain/kotlin/com/omega_r/libs/entities/text/Extensions.kt +++ /dev/null @@ -1,47 +0,0 @@ -package com.omega_r.libs.entities.text - -import android.annotation.StringRes -import android.content.Context -import android.os.Build -import android.text.Html -import android.text.Spanned -import android.view.View -import android.widget.TextView -import com.omega_r.libs.entities.resources.OmegaResource -import com.omega_r.libs.entities.resources.OmegaResourceExtractor - -fun TextView.setText(text: OmegaText) { - this@setText.text = text.getCharSequence(extractor) -} - -val Context.extractor: OmegaResourceExtractor - get() = OmegaResourceExtractor.from(this) - -val View.extractor: OmegaResourceExtractor - get() = context.extractor - -fun OmegaText.Companion.from(@StringRes id: Int): OmegaText = from(OmegaResource.Text(id)) - -fun Spanned.toHtmlString(): String { - return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { - Html.toHtml(this, Html.TO_HTML_PARAGRAPH_LINES_CONSECUTIVE) - } else { - Html.toHtml(this) - } -} - -fun String.fromHtmlString(): Spanned { - return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { - Html.fromHtml(this, Html.FROM_HTML_MODE_LEGACY) - } else { - Html.fromHtml(this) - } -} - -fun CharSequence.toHtmlString(): String { - return when (this) { - is Spanned -> toHtmlString() - else -> Html.escapeHtml(this) - } - -} From 844548173bcc16718234f6d2d1865b363489f11e Mon Sep 17 00:00:00 2001 From: roman_tcaregorodtcev Date: Wed, 18 Mar 2020 12:51:50 +0300 Subject: [PATCH 19/23] import bugs fixed --- .../extensions/OmegaImageExtensions.kt | 1 - .../OmegaPluralsResourceTextProcessor.kt | 4 ++-- .../text/OmegaTextResourceTextProcessor.kt | 4 ++-- .../entities/examples/TextExamplesActivity.kt | 24 +++++++++---------- 4 files changed, 16 insertions(+), 17 deletions(-) diff --git a/core/src/androidMain/kotlin/com/omega_r/libs/entities/extensions/OmegaImageExtensions.kt b/core/src/androidMain/kotlin/com/omega_r/libs/entities/extensions/OmegaImageExtensions.kt index ce4b3ad..112bb87 100644 --- a/core/src/androidMain/kotlin/com/omega_r/libs/entities/extensions/OmegaImageExtensions.kt +++ b/core/src/androidMain/kotlin/com/omega_r/libs/entities/extensions/OmegaImageExtensions.kt @@ -13,7 +13,6 @@ import com.omega_r.libs.entities.images.OmegaImageProcessor import com.omega_r.libs.entities.images.OmegaImageProcessorsHolder import com.omega_r.libs.entities.images.from import com.omega_r.libs.entities.resources.OmegaResourceExtractor -import com.omega_r.libs.entities.text.extractor val OmegaImage.Companion.NO_PLACEHOLDER_RES: Int get() = 0 diff --git a/core/src/androidMain/kotlin/com/omega_r/libs/entities/text/resource/plurals/OmegaPluralsResourceTextProcessor.kt b/core/src/androidMain/kotlin/com/omega_r/libs/entities/text/resource/plurals/OmegaPluralsResourceTextProcessor.kt index b14f07f..3f4a0b5 100644 --- a/core/src/androidMain/kotlin/com/omega_r/libs/entities/text/resource/plurals/OmegaPluralsResourceTextProcessor.kt +++ b/core/src/androidMain/kotlin/com/omega_r/libs/entities/text/resource/plurals/OmegaPluralsResourceTextProcessor.kt @@ -1,8 +1,8 @@ package com.omega_r.libs.entities.text.resource.plurals +import com.omega_r.libs.entities.extensions.fromHtmlString +import com.omega_r.libs.entities.extensions.toHtmlString import com.omega_r.libs.entities.resources.OmegaResourceExtractor -import com.omega_r.libs.entities.text.fromHtmlString -import com.omega_r.libs.entities.text.toHtmlString actual object OmegaPluralsResourceTextProcessor : OmegaBaseTextResourceTextProcessor() { diff --git a/core/src/androidMain/kotlin/com/omega_r/libs/entities/text/resource/text/OmegaTextResourceTextProcessor.kt b/core/src/androidMain/kotlin/com/omega_r/libs/entities/text/resource/text/OmegaTextResourceTextProcessor.kt index 82bbe18..a2bd676 100644 --- a/core/src/androidMain/kotlin/com/omega_r/libs/entities/text/resource/text/OmegaTextResourceTextProcessor.kt +++ b/core/src/androidMain/kotlin/com/omega_r/libs/entities/text/resource/text/OmegaTextResourceTextProcessor.kt @@ -1,8 +1,8 @@ package com.omega_r.libs.entities.text.resource.text +import com.omega_r.libs.entities.extensions.fromHtmlString +import com.omega_r.libs.entities.extensions.toHtmlString import com.omega_r.libs.entities.resources.OmegaResourceExtractor -import com.omega_r.libs.entities.text.fromHtmlString -import com.omega_r.libs.entities.text.toHtmlString actual object OmegaTextResourceTextProcessor : OmegaBaseTextResourceTextProcessor() { diff --git a/examples/android/src/main/java/com/omega_r/libs/entities/examples/TextExamplesActivity.kt b/examples/android/src/main/java/com/omega_r/libs/entities/examples/TextExamplesActivity.kt index fd3b949..79079e1 100644 --- a/examples/android/src/main/java/com/omega_r/libs/entities/examples/TextExamplesActivity.kt +++ b/examples/android/src/main/java/com/omega_r/libs/entities/examples/TextExamplesActivity.kt @@ -8,9 +8,9 @@ import android.widget.TextView import androidx.appcompat.app.AppCompatActivity import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView +import com.omega_r.libs.entities.extensions.from +import com.omega_r.libs.entities.extensions.setText import com.omega_r.libs.entities.text.OmegaText -import com.omega_r.libs.entities.text.from -import com.omega_r.libs.entities.text.setText import com.omega_r.libs.entities.text.styled.styles.OmegaFontStyleTextStyle import com.omega_r.libs.entities.text.styled.styles.OmegaTextStyle import kotlinx.android.synthetic.main.activity_text_examples.* @@ -26,11 +26,11 @@ class TextExamplesActivity : AppCompatActivity() { recyclerview.layoutManager = LinearLayoutManager(this) adapter.setItems( - listOf( - OmegaText.from("Text from String") to OmegaText.from("String Example") - .plus(OmegaTextStyle.from(OmegaFontStyleTextStyle.Style.BOLD)), - OmegaText.from("Text from Resource") to OmegaText.from(R.string.app_name) - ) + listOf( + OmegaText.from("Text from String") to OmegaText.from("String Example") + .plus(OmegaTextStyle.from(OmegaFontStyleTextStyle.Style.BOLD)), + OmegaText.from("Text from Resource") to OmegaText.from(R.string.app_name) + ) ) } } @@ -41,11 +41,11 @@ private class Adapter : RecyclerView.Adapter() { override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): VH { return VH( - LayoutInflater.from(parent.context).inflate( - R.layout.item_text_example, - parent, - false - ) + LayoutInflater.from(parent.context).inflate( + R.layout.item_text_example, + parent, + false + ) ) } From 5a70644c2e81d96e02c608a4c1c760a5639bd552 Mon Sep 17 00:00:00 2001 From: roman_tcaregorodtcev Date: Thu, 19 Mar 2020 16:56:05 +0300 Subject: [PATCH 20/23] New extensions added --- core/build.gradle.kts | 3 +- .../extensions/OmegaColorExtentions.kt | 4 +- .../extensions/OmegaFileExtensions.kt | 16 +++++ .../extensions/OmegaImageExtensions.kt | 62 ++++++++++++++----- .../extensions/OmegaTextExtentions.kt | 5 +- .../omega_r/libs/entities/OmegaTextTests.kt | 47 ++++++++++++++ gradle.properties | 4 +- 7 files changed, 120 insertions(+), 21 deletions(-) create mode 100644 core/src/androidMain/kotlin/com/omega_r/libs/entities/extensions/OmegaFileExtensions.kt create mode 100644 core/src/androidTest/kotlin/com/omega_r/libs/entities/OmegaTextTests.kt diff --git a/core/build.gradle.kts b/core/build.gradle.kts index 864ceff..d7a8feb 100644 --- a/core/build.gradle.kts +++ b/core/build.gradle.kts @@ -93,7 +93,7 @@ kotlin { dependencies { implementation("org.jetbrains.kotlin:kotlin-stdlib") implementation("io.ktor:ktor-client-android:$ktor_version") - compileOnly("org.robolectric:android-all:9-robolectric-4913185-2") + compileOnly("org.robolectric:android-all:10-robolectric-5803371") } } @@ -101,6 +101,7 @@ kotlin { dependencies { implementation(kotlin("test")) implementation(kotlin("test-junit")) + implementation("org.jetbrains.kotlinx:kotlinx-coroutines-test:1.3.5") implementation("com.android.support.test:runner:1.0.2") } } diff --git a/core/src/androidMain/kotlin/com/omega_r/libs/entities/extensions/OmegaColorExtentions.kt b/core/src/androidMain/kotlin/com/omega_r/libs/entities/extensions/OmegaColorExtentions.kt index 4427fdd..e2e1a56 100644 --- a/core/src/androidMain/kotlin/com/omega_r/libs/entities/extensions/OmegaColorExtentions.kt +++ b/core/src/androidMain/kotlin/com/omega_r/libs/entities/extensions/OmegaColorExtentions.kt @@ -4,4 +4,6 @@ import android.annotation.ColorInt import com.omega_r.libs.entities.colors.OmegaColor import com.omega_r.libs.entities.resources.OmegaResource -fun OmegaColor.Companion.fromResource(@ColorInt id: Int) = fromResource(OmegaResource.Color(id)) \ No newline at end of file +fun OmegaColor.Companion.fromResource(@ColorInt id: Int) = fromResource(OmegaResource.Color(id)) + +fun Int.toOmegaColor(): OmegaColor = OmegaColor.fromResource(this) \ No newline at end of file diff --git a/core/src/androidMain/kotlin/com/omega_r/libs/entities/extensions/OmegaFileExtensions.kt b/core/src/androidMain/kotlin/com/omega_r/libs/entities/extensions/OmegaFileExtensions.kt new file mode 100644 index 0000000..734dd06 --- /dev/null +++ b/core/src/androidMain/kotlin/com/omega_r/libs/entities/extensions/OmegaFileExtensions.kt @@ -0,0 +1,16 @@ +package com.omega_r.libs.entities.extensions + +import android.net.Uri +import com.omega_r.libs.entities.files.OmegaFile +import com.omega_r.libs.entities.files.java_file.from +import com.omega_r.libs.entities.files.uri.from +import com.omega_r.libs.entities.files.url.from +import java.io.File + +val Uri.file + get() = OmegaFile.from(this) + +fun File.toOmegaFile() = OmegaFile.from(this) + +val String.file + get() = OmegaFile.from(this) \ No newline at end of file diff --git a/core/src/androidMain/kotlin/com/omega_r/libs/entities/extensions/OmegaImageExtensions.kt b/core/src/androidMain/kotlin/com/omega_r/libs/entities/extensions/OmegaImageExtensions.kt index 112bb87..02ed50a 100644 --- a/core/src/androidMain/kotlin/com/omega_r/libs/entities/extensions/OmegaImageExtensions.kt +++ b/core/src/androidMain/kotlin/com/omega_r/libs/entities/extensions/OmegaImageExtensions.kt @@ -2,6 +2,8 @@ package com.omega_r.libs.entities.extensions import android.annotation.SuppressLint import android.graphics.Bitmap +import android.graphics.drawable.Drawable +import android.net.Uri import android.os.Build.VERSION.SDK_INT import android.os.Build.VERSION_CODES.JELLY_BEAN_MR1 import android.view.View @@ -13,6 +15,7 @@ import com.omega_r.libs.entities.images.OmegaImageProcessor import com.omega_r.libs.entities.images.OmegaImageProcessorsHolder import com.omega_r.libs.entities.images.from import com.omega_r.libs.entities.resources.OmegaResourceExtractor +import java.io.File val OmegaImage.Companion.NO_PLACEHOLDER_RES: Int get() = 0 @@ -26,50 +29,55 @@ fun OmegaImage.Format.toCompressFormat(): Bitmap.CompressFormat { } fun ImageView.setImage( - image: OmegaImage?, - placeholderResId: Int = OmegaImage.NO_PLACEHOLDER_RES, - holder: OmegaImageProcessorsHolder = OmegaImageProcessorsHolder.current, - extractor: OmegaResourceExtractor = OmegaResourceExtractor.Default + image: OmegaImage?, + placeholderResId: Int = OmegaImage.NO_PLACEHOLDER_RES, + holder: OmegaImageProcessorsHolder = OmegaImageProcessorsHolder.current, + extractor: OmegaResourceExtractor = OmegaResourceExtractor.Default ) { val finalImage = image.formatImage(placeholderResId) if (finalImage == null) { setImageDrawable(null) } else { holder.getProcessor(finalImage) - .applyImage(finalImage, this, holder, extractor) + .applyImage(finalImage, this, holder, extractor) } } @JvmOverloads fun OmegaImage.preload( - holder: OmegaImageProcessorsHolder = OmegaImageProcessorsHolder.current, - extractor: OmegaResourceExtractor = OmegaResourceExtractor.Default + holder: OmegaImageProcessorsHolder = OmegaImageProcessorsHolder.current, + extractor: OmegaResourceExtractor = OmegaResourceExtractor.Default ) { holder.getProcessor(this).preload(this, extractor) } @JvmOverloads fun View.setBackground( - image: OmegaImage?, - placeholderResId: Int = OmegaImage.NO_PLACEHOLDER_RES, - holder: OmegaImageProcessorsHolder = OmegaImageProcessorsHolder.current, - extractor: OmegaResourceExtractor = OmegaResourceExtractor.Default + image: OmegaImage?, + placeholderResId: Int = OmegaImage.NO_PLACEHOLDER_RES, + holder: OmegaImageProcessorsHolder = OmegaImageProcessorsHolder.current, + extractor: OmegaResourceExtractor = OmegaResourceExtractor.Default ) { val finalImage = image.formatImage(placeholderResId) if (finalImage == null) { background = null } else { holder.getProcessor(finalImage) - .applyBackground(finalImage, this, holder, extractor) + .applyBackground(finalImage, this, holder, extractor) } } private fun OmegaImage?.formatImage(placeholderResId: Int): OmegaImage? { val image = this return if (image == null) { - if (placeholderResId == OmegaImage.NO_PLACEHOLDER_RES) null else OmegaImage.from(placeholderResId) + if (placeholderResId == OmegaImage.NO_PLACEHOLDER_RES) null else OmegaImage.from( + placeholderResId + ) } else { - if (placeholderResId == OmegaImage.NO_PLACEHOLDER_RES) image else OmegaImage.from(placeholderResId, image) + if (placeholderResId == OmegaImage.NO_PLACEHOLDER_RES) image else OmegaImage.from( + placeholderResId, + image + ) } } @@ -99,11 +107,33 @@ private fun TextView.getImage(index: Int): OmegaImage? { @SuppressLint("ObsoleteSdkInt") private fun TextView.setImage(index: Int, image: OmegaImage?) { if (image == null) { - val drawables = if (SDK_INT >= JELLY_BEAN_MR1) compoundDrawablesRelative else compoundDrawables + val drawables = + if (SDK_INT >= JELLY_BEAN_MR1) compoundDrawablesRelative else compoundDrawables drawables[index] = null OmegaImageProcessor.applyCompoundDrawables(this, drawables) } else { val holder = OmegaImageProcessorsHolder.current holder.getProcessor(image).applyCompoundImage(image, index, this, holder, this.extractor) } -} \ No newline at end of file +} + +val Int.image + get() = OmegaImage.from(this) + +val Drawable.image + get() = OmegaImage.from(this) + +val Bitmap.image + get() = OmegaImage.from(this) + +val String.image + get() = OmegaImage.from(this) + +val Uri.image + get() = OmegaImage.from(this) + +val File.image + get() = OmegaImage.from(this) + +val ByteArray.image + get() = OmegaImage.from(this) \ No newline at end of file diff --git a/core/src/androidMain/kotlin/com/omega_r/libs/entities/extensions/OmegaTextExtentions.kt b/core/src/androidMain/kotlin/com/omega_r/libs/entities/extensions/OmegaTextExtentions.kt index ac90578..67ceb55 100644 --- a/core/src/androidMain/kotlin/com/omega_r/libs/entities/extensions/OmegaTextExtentions.kt +++ b/core/src/androidMain/kotlin/com/omega_r/libs/entities/extensions/OmegaTextExtentions.kt @@ -50,5 +50,8 @@ fun CharSequence.toHtmlString(): String { is Spanned -> toHtmlString() else -> Html.escapeHtml(this) } +} + +val Int.text: OmegaText + get() = OmegaText.from(this) -} \ No newline at end of file diff --git a/core/src/androidTest/kotlin/com/omega_r/libs/entities/OmegaTextTests.kt b/core/src/androidTest/kotlin/com/omega_r/libs/entities/OmegaTextTests.kt new file mode 100644 index 0000000..120647f --- /dev/null +++ b/core/src/androidTest/kotlin/com/omega_r/libs/entities/OmegaTextTests.kt @@ -0,0 +1,47 @@ +package com.omega_r.libs.entities + +import com.omega_r.libs.entities.resources.OmegaResourceExtractor +import com.omega_r.libs.entities.text.OmegaStringHolder +import com.omega_r.libs.entities.text.OmegaText +import com.omega_r.libs.entities.text.OmegaTextBuilder +import com.omega_r.libs.entities.text.array.OmegaArrayText +import com.omega_r.libs.entities.text.string.OmegaStringText +import org.junit.Test + +private const val SIMPLE_TEXT = "HelloWorld" + +class OmegaTextTests { + + private val stringHolder: OmegaStringHolder = object : OmegaStringHolder { + + override val string: String? = SIMPLE_TEXT + + } + + @Test + fun stringTextTest() { + val text = OmegaText.from(SIMPLE_TEXT) + assert(text is OmegaStringText) + + val stringValue = text.getString(extractor = OmegaResourceExtractor.Default) + assert(SIMPLE_TEXT == stringValue) + + assert(text == OmegaText.from(SIMPLE_TEXT as CharSequence)) + assert(text == OmegaText.from(stringHolder)) + } + + @Test + fun arrayTextTest() { + val text = OmegaText.from(OmegaText.from(SIMPLE_TEXT), OmegaText.from(SIMPLE_TEXT)) + assert(text is OmegaArrayText) + } + + @Test + fun builderTest() { + val text = OmegaTextBuilder() + .append(SIMPLE_TEXT) + .toText() + assert(text is OmegaArrayText) + } + +} \ No newline at end of file diff --git a/gradle.properties b/gradle.properties index 5709e76..0ab3d22 100644 --- a/gradle.properties +++ b/gradle.properties @@ -11,8 +11,8 @@ INCLUDE_ANDROID=true kotlin.code.style=official # versions -kotlin_version = 1.3.61 -android_tools_version = 3.6.0 +kotlin_version = 1.3.70 +android_tools_version = 3.6.1 ktor_version = 1.3.1 From 991f63d76df284ccb401e7210bc8e3542bc6ca49 Mon Sep 17 00:00:00 2001 From: roman_tcaregorodtcev Date: Fri, 20 Mar 2020 10:18:05 +0300 Subject: [PATCH 21/23] OmegaColor, OmegaFile tests added. --- .../extensions/OmegaImageExtensions.kt | 1 - .../omega_r/libs/entities/OmegaColorTests.kt | 54 +++++++++++++++++++ .../omega_r/libs/entities/OmegaFileTests.kt | 28 ++++++++++ .../colors/resource/OmegaAttrResourceColor.kt | 6 --- 4 files changed, 82 insertions(+), 7 deletions(-) create mode 100644 core/src/androidTest/kotlin/com/omega_r/libs/entities/OmegaColorTests.kt create mode 100644 core/src/androidTest/kotlin/com/omega_r/libs/entities/OmegaFileTests.kt delete mode 100644 core/src/commonMain/kotlin/com/omega_r/libs/entities/colors/resource/OmegaAttrResourceColor.kt diff --git a/core/src/androidMain/kotlin/com/omega_r/libs/entities/extensions/OmegaImageExtensions.kt b/core/src/androidMain/kotlin/com/omega_r/libs/entities/extensions/OmegaImageExtensions.kt index 02ed50a..51788f2 100644 --- a/core/src/androidMain/kotlin/com/omega_r/libs/entities/extensions/OmegaImageExtensions.kt +++ b/core/src/androidMain/kotlin/com/omega_r/libs/entities/extensions/OmegaImageExtensions.kt @@ -81,7 +81,6 @@ private fun OmegaImage?.formatImage(placeholderResId: Int): OmegaImage? { } } - var TextView.imageStart: OmegaImage? get() = getImage(0) set(value) = setImage(0, value) diff --git a/core/src/androidTest/kotlin/com/omega_r/libs/entities/OmegaColorTests.kt b/core/src/androidTest/kotlin/com/omega_r/libs/entities/OmegaColorTests.kt new file mode 100644 index 0000000..ae29684 --- /dev/null +++ b/core/src/androidTest/kotlin/com/omega_r/libs/entities/OmegaColorTests.kt @@ -0,0 +1,54 @@ +package com.omega_r.libs.entities + +import com.omega_r.libs.entities.colors.OmegaColor +import com.omega_r.libs.entities.colors.argb.OmegaArgbColor +import com.omega_r.libs.entities.colors.hex.OmegaHexColor +import com.omega_r.libs.entities.colors.integer.OmegaIntColor +import com.omega_r.libs.entities.colors.name.OmegaNameColor +import org.junit.Test + +private const val DEFAULT_COLOR_INT = 16764133 +private const val HEX_COLOR = "00FFCCE5" + +class OmegaColorTests { + + @Test + fun argbColorTest() { + val color = OmegaColor.fromArgb(0, 255, 204, 229) + assert(color is OmegaArgbColor) + + val colorInt = color.getColorInt() + assert(colorInt == DEFAULT_COLOR_INT) + } + + @Test + fun hexColorTest() { + val color = OmegaColor.fromHex(HEX_COLOR) + assert(color is OmegaHexColor) + + val colorInt = color.getColorInt() + assert(colorInt == DEFAULT_COLOR_INT) + } + + @Test + fun intColorTest() { + val color = OmegaColor.fromInt(DEFAULT_COLOR_INT) + assert(color is OmegaIntColor) + assert(color.getColorInt() == DEFAULT_COLOR_INT) + } + + @Test + fun nameColorTest() { + val color = OmegaColor.fromName("fuchsia") + assert(color is OmegaNameColor) + assert(color.getColorInt() == OmegaColor.FUCHSIA.colorInt) + } + + @Test + fun unknownNameColorTest() { + val color = OmegaColor.fromName("fuchsiaaa") + assert(color is OmegaNameColor) + assert(color.getColorInt() == OmegaColor.BLACK.colorInt) + } + +} \ No newline at end of file diff --git a/core/src/androidTest/kotlin/com/omega_r/libs/entities/OmegaFileTests.kt b/core/src/androidTest/kotlin/com/omega_r/libs/entities/OmegaFileTests.kt new file mode 100644 index 0000000..981f4a7 --- /dev/null +++ b/core/src/androidTest/kotlin/com/omega_r/libs/entities/OmegaFileTests.kt @@ -0,0 +1,28 @@ +package com.omega_r.libs.entities + +import com.omega_r.libs.entities.files.OmegaFile +import com.omega_r.libs.entities.files.Type +import com.omega_r.libs.entities.files.url.OmegaUrlFile +import com.omega_r.libs.entities.files.url.from +import kotlinx.coroutines.runBlocking +import org.junit.Test + +private const val MIME_TYPE = "png" +private const val FILE_NAME = "1280px-Image_created_with_a_mobile_phone.$MIME_TYPE" +private const val FILE_URL = + "https://upload.wikimedia.org/wikipedia/commons/thumb/b/b6/Image_created_with_a_mobile_phone.png/$FILE_NAME" + +class OmegaFileTests { + + @Test + fun urlFileTest() { + val file = OmegaFile.from(FILE_URL, MIME_TYPE, FILE_NAME) + assert(file is OmegaUrlFile) + assert(file.type == Type.FILE) + runBlocking { + assert(file.isExist() ?: false) + assert(file.getOutput() == null) + } + } + +} \ No newline at end of file diff --git a/core/src/commonMain/kotlin/com/omega_r/libs/entities/colors/resource/OmegaAttrResourceColor.kt b/core/src/commonMain/kotlin/com/omega_r/libs/entities/colors/resource/OmegaAttrResourceColor.kt deleted file mode 100644 index 698eb40..0000000 --- a/core/src/commonMain/kotlin/com/omega_r/libs/entities/colors/resource/OmegaAttrResourceColor.kt +++ /dev/null @@ -1,6 +0,0 @@ -package com.omega_r.libs.entities.colors.resource - -import com.omega_r.libs.entities.colors.OmegaColor -import com.omega_r.libs.entities.resources.OmegaResource - -data class OmegaAttrResourceColor(val resource: OmegaResource.Color) : OmegaColor \ No newline at end of file From 61ab302ea6c5d19485c0244bafcda8b187df19bd Mon Sep 17 00:00:00 2001 From: roman_tcaregorodtcev Date: Fri, 20 Mar 2020 11:03:09 +0300 Subject: [PATCH 22/23] unused gradle libraries removed --- core/build.gradle.kts | 2 -- 1 file changed, 2 deletions(-) diff --git a/core/build.gradle.kts b/core/build.gradle.kts index d7a8feb..8b33485 100644 --- a/core/build.gradle.kts +++ b/core/build.gradle.kts @@ -101,8 +101,6 @@ kotlin { dependencies { implementation(kotlin("test")) implementation(kotlin("test-junit")) - implementation("org.jetbrains.kotlinx:kotlinx-coroutines-test:1.3.5") - implementation("com.android.support.test:runner:1.0.2") } } From 196003703b62335e93608425b91fceafda560aaa Mon Sep 17 00:00:00 2001 From: roman_tcaregorodtcev Date: Fri, 20 Mar 2020 15:25:03 +0300 Subject: [PATCH 23/23] Coil module added --- coil/build.gradle | 59 ++++++ coil/proguard-rules.pro | 21 ++ coil/src/main/AndroidManifest.xml | 1 + .../image/coil/OmegaCoilProcessorsHolder.kt | 192 ++++++++++++++++++ .../omega_r/libs/entities/OmegaFileTests.kt | 1 + glide/build.gradle | 2 +- settings.gradle.kts | 1 + 7 files changed, 276 insertions(+), 1 deletion(-) create mode 100644 coil/build.gradle create mode 100644 coil/proguard-rules.pro create mode 100644 coil/src/main/AndroidManifest.xml create mode 100644 coil/src/main/java/com/omega_r/entities/image/coil/OmegaCoilProcessorsHolder.kt diff --git a/coil/build.gradle b/coil/build.gradle new file mode 100644 index 0000000..a8ef176 --- /dev/null +++ b/coil/build.gradle @@ -0,0 +1,59 @@ +apply plugin: 'com.android.library' +apply plugin: 'kotlin-android' +apply plugin: 'kotlin-android-extensions' +apply plugin: 'maven-publish' + +group = 'com.github.Omega-R' + +android { + compileSdkVersion project.compile_sdk_version.toInteger() + buildToolsVersion project.build_tools_version + + + defaultConfig { + minSdkVersion project.min_sdk_version.toInteger() + targetSdkVersion project.target_sdk_version.toInteger() + + testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" + + } + + buildTypes { + release { + minifyEnabled false + proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' + } + } + + kotlinOptions { + jvmTarget = "1.8" + } + +} + +gradle.projectsEvaluated { + publishPrebuiltPublicationToMavenLocal.dependsOn(tasks.getByName("assemble")) +} + +publishing { + publications { + prebuilt(MavenPublication) { + artifact file("$buildDir/outputs/aar/coil-release.aar") + } + } +} + +dependencies { + implementation fileTree(dir: 'libs', include: ['*.jar']) + implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" + api project(":core") + api("io.coil-kt:coil:0.9.5") + implementation "io.ktor:ktor-client-core:$ktor_version" + implementation "io.ktor:ktor-client-android:$ktor_version" +} +repositories { + mavenLocal() + mavenCentral() + jcenter() + google() +} \ No newline at end of file diff --git a/coil/proguard-rules.pro b/coil/proguard-rules.pro new file mode 100644 index 0000000..f1b4245 --- /dev/null +++ b/coil/proguard-rules.pro @@ -0,0 +1,21 @@ +# Add project specific ProGuard rules here. +# You can control the set of applied configuration files using the +# proguardFiles setting in build.gradle. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} + +# Uncomment this to preserve the line number information for +# debugging stack traces. +#-keepattributes SourceFile,LineNumberTable + +# If you keep the line number information, uncomment this to +# hide the original source file name. +#-renamesourcefileattribute SourceFile diff --git a/coil/src/main/AndroidManifest.xml b/coil/src/main/AndroidManifest.xml new file mode 100644 index 0000000..8b1ff09 --- /dev/null +++ b/coil/src/main/AndroidManifest.xml @@ -0,0 +1 @@ + diff --git a/coil/src/main/java/com/omega_r/entities/image/coil/OmegaCoilProcessorsHolder.kt b/coil/src/main/java/com/omega_r/entities/image/coil/OmegaCoilProcessorsHolder.kt new file mode 100644 index 0000000..0a469c7 --- /dev/null +++ b/coil/src/main/java/com/omega_r/entities/image/coil/OmegaCoilProcessorsHolder.kt @@ -0,0 +1,192 @@ +package com.omega_r.entities.image.coil + +import android.content.Context +import android.graphics.drawable.Drawable +import android.view.View +import android.widget.ImageView +import android.widget.TextView +import coil.Coil +import coil.api.newGetBuilder +import coil.api.newLoadBuilder +import coil.request.GetRequestBuilder +import coil.request.LoadRequestBuilder +import coil.target.Target +import com.omega_r.libs.entities.extensions.NO_PLACEHOLDER_RES +import com.omega_r.libs.entities.extensions.toBitmapAndRecycle +import com.omega_r.libs.entities.extensions.toInputStream +import com.omega_r.libs.entities.images.* +import com.omega_r.libs.entities.resources.OmegaResourceExtractor +import io.ktor.utils.io.core.Input +import io.ktor.utils.io.streams.asInput +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.Dispatchers +import okhttp3.HttpUrl +import kotlin.coroutines.CoroutineContext +import kotlin.reflect.KClass + +class OmegaCoilProcessorsHolder( + private val defaultHolder: OmegaImageProcessorsHolder = OmegaImageProcessorsHolder.Default, + private vararg val excludeImageClasses: KClass +) : OmegaImageProcessorsHolder { + + companion object { + + fun setAsCurrentImagesProcessor( + defaultHolder: OmegaImageProcessorsHolder = OmegaImageProcessorsHolder.current, + vararg excludeImageClasses: KClass + ) { + OmegaImageProcessorsHolder.current = OmegaCoilProcessorsHolder(defaultHolder, *excludeImageClasses) + } + + } + + private val processor = Processor() + + override fun getProcessor(entity: OmegaImage): OmegaImageProcessor { + return if (excludeImageClasses.contains(entity::class)) defaultHolder.getProcessor(entity) else processor + } + + private fun createLoadRequestBuilder(context: Context, image: OmegaImage): LoadRequestBuilder? { + if (excludeImageClasses.contains(image::class)) return null + + val requestBuilder = Coil.loader().newLoadBuilder(context) + return when (image) { + is OmegaUrlImage -> requestBuilder.data(HttpUrl.get(image.url)) + is OmegaUriImage -> requestBuilder.data(image.uri) + is OmegaJavaFileImage -> requestBuilder.data(image.file) + is OmegaResourceImage -> requestBuilder.data(image.resource.id) + is OmegaDrawableImage -> requestBuilder.data(image.drawable) + is OmegaBitmapImage -> requestBuilder.data(image.bitmap) + is OmegaPlaceholderImage -> { + val finalImageRequestBuilder = createLoadRequestBuilder(context, image.finalImage) + when (val placeholderImage = image.placeholderImage) { + is OmegaResourceImage -> { + if (placeholderImage.resource.id != OmegaImage.NO_PLACEHOLDER_RES) { + finalImageRequestBuilder?.placeholder(placeholderImage.resource.id) + } + } + is OmegaDrawableImage -> finalImageRequestBuilder?.placeholder(placeholderImage.drawable) + } + finalImageRequestBuilder + } + else -> null + } + } + + private fun createGetRequestBuilder(image: OmegaImage): GetRequestBuilder? { + if (excludeImageClasses.contains(image::class)) return null + + val requestBuilder = Coil.loader().newGetBuilder() + return when (image) { + is OmegaUrlImage -> requestBuilder.data(HttpUrl.get(image.url)) + is OmegaUriImage -> requestBuilder.data(image.uri) + is OmegaJavaFileImage -> requestBuilder.data(image.file) + is OmegaResourceImage -> requestBuilder.data(image.resource.id) + is OmegaDrawableImage -> requestBuilder.data(image.drawable) + is OmegaBitmapImage -> requestBuilder.data(image.bitmap) + is OmegaPlaceholderImage -> createGetRequestBuilder(image.finalImage) + else -> null + } + } + + private inner class Processor : OmegaImageProcessor, CoroutineScope { + + override val coroutineContext: CoroutineContext = Dispatchers.Default + + override fun applyBackground( + image: OmegaImage, + view: View, + holder: OmegaImageProcessorsHolder, + extractor: OmegaResourceExtractor + ) { + createLoadRequestBuilder(view.context, image) + ?.target(object : Target { + override fun onError(error: Drawable?) { + error?.let { OmegaImageProcessor.applyBackground(view, it) } + } + + override fun onStart(placeholder: Drawable?) { + placeholder?.let { OmegaImageProcessor.applyBackground(view, it) } + } + + override fun onSuccess(result: Drawable) { + OmegaImageProcessor.applyBackground(view, result) + } + }) + ?.build() + ?.let { + Coil.loader().load(it) + } ?: defaultHolder.getProcessor(image).applyBackground(image, view, holder, extractor) + } + + override fun applyCompoundImage( + image: OmegaImage, + index: Int, + textView: TextView, + holder: OmegaImageProcessorsHolder, + extractor: OmegaResourceExtractor + ) { + createLoadRequestBuilder(textView.context, image) + ?.target(object : Target { + override fun onError(error: Drawable?) { + OmegaImageProcessor.applyCompoundDrawable(textView, error, index) + } + + override fun onStart(placeholder: Drawable?) { + OmegaImageProcessor.applyCompoundDrawable(textView, placeholder, index) + } + + override fun onSuccess(result: Drawable) { + OmegaImageProcessor.applyCompoundDrawable(textView, result, index) + } + }) + ?.build() + ?.let { + Coil.loader().load(it) + } ?: defaultHolder.getProcessor(image).applyCompoundImage(image, index, textView, holder, extractor) + } + + override fun applyImage( + image: OmegaImage, + imageView: ImageView, + holder: OmegaImageProcessorsHolder, + extractor: OmegaResourceExtractor + ) { + createLoadRequestBuilder(imageView.context, image) + ?.target(imageView) + ?.build() + ?.let { + Coil.loader().load(it) + } ?: defaultHolder.getProcessor(image).applyImage(image, imageView, holder, extractor) + } + + override suspend fun getInput( + image: OmegaImage, + extractor: OmegaResourceExtractor, + format: OmegaImage.Format, + quality: Int + ): Input? { + return extractor.context?.let { context -> + createGetRequestBuilder(image)?.let { + Coil.loader() + .get(it.build()) + .toBitmapAndRecycle { + toInputStream(format = OmegaImage.Format.JPEG).asInput() + } + } ?: defaultHolder.getProcessor(image).getInput(image, extractor, format, quality) + } ?: defaultHolder.getProcessor(image).getInput(image, extractor, format, quality) + } + + override fun preload(image: OmegaImage, extractor: OmegaResourceExtractor) { + extractor.context?.let { context -> + createLoadRequestBuilder(context, image) + ?.build() + ?.let { + Coil.loader().load(it) + } ?: defaultHolder.getProcessor(image).preload(image, extractor) + } ?: defaultHolder.getProcessor(image).preload(image, extractor) + } + + } + +} \ No newline at end of file diff --git a/core/src/androidTest/kotlin/com/omega_r/libs/entities/OmegaFileTests.kt b/core/src/androidTest/kotlin/com/omega_r/libs/entities/OmegaFileTests.kt index 981f4a7..2ac15af 100644 --- a/core/src/androidTest/kotlin/com/omega_r/libs/entities/OmegaFileTests.kt +++ b/core/src/androidTest/kotlin/com/omega_r/libs/entities/OmegaFileTests.kt @@ -22,6 +22,7 @@ class OmegaFileTests { runBlocking { assert(file.isExist() ?: false) assert(file.getOutput() == null) + assert(file.getInput() != null) } } diff --git a/glide/build.gradle b/glide/build.gradle index cd4c529..c3c8589 100644 --- a/glide/build.gradle +++ b/glide/build.gradle @@ -42,7 +42,7 @@ publishing { dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" - implementation project(":core") + api project(":core") api ("com.github.bumptech.glide:glide:4.9.0") { exclude group: "com.android.support" } diff --git a/settings.gradle.kts b/settings.gradle.kts index 6b33cab..4474d0f 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -26,5 +26,6 @@ include("examples:android") include("examples") include("glide") include("picasso") +include("coil") enableFeaturePreview("GRADLE_METADATA") \ No newline at end of file