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/build.gradle.kts b/core/build.gradle.kts
index 680f7b0..8b33485 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")
}
@@ -95,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")
}
}
@@ -103,7 +101,6 @@ kotlin {
dependencies {
implementation(kotlin("test"))
implementation(kotlin("test-junit"))
- implementation("com.android.support.test:runner:1.0.2")
}
}
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/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..e2e1a56
--- /dev/null
+++ b/core/src/androidMain/kotlin/com/omega_r/libs/entities/extensions/OmegaColorExtentions.kt
@@ -0,0 +1,9 @@
+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) = 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/OmegaImegaExtensions.kt b/core/src/androidMain/kotlin/com/omega_r/libs/entities/extensions/OmegaImageExtensions.kt
similarity index 65%
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
index ce4b3ad..51788f2 100644
--- 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
@@ -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,7 +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 com.omega_r.libs.entities.text.extractor
+import java.io.File
val OmegaImage.Companion.NO_PLACEHOLDER_RES: Int
get() = 0
@@ -27,54 +29,58 @@ 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
+ )
}
}
-
var TextView.imageStart: OmegaImage?
get() = getImage(0)
set(value) = setImage(0, value)
@@ -100,11 +106,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/text/Extensions.kt b/core/src/androidMain/kotlin/com/omega_r/libs/entities/extensions/OmegaTextExtentions.kt
similarity index 73%
rename from core/src/androidMain/kotlin/com/omega_r/libs/entities/text/Extensions.kt
rename to core/src/androidMain/kotlin/com/omega_r/libs/entities/extensions/OmegaTextExtentions.kt
index eacb19f..67ceb55 100644
--- a/core/src/androidMain/kotlin/com/omega_r/libs/entities/text/Extensions.kt
+++ b/core/src/androidMain/kotlin/com/omega_r/libs/entities/extensions/OmegaTextExtentions.kt
@@ -1,4 +1,4 @@
-package com.omega_r.libs.entities.text
+package com.omega_r.libs.entities.extensions
import android.annotation.StringRes
import android.content.Context
@@ -9,6 +9,15 @@ 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))
+
+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)
fun TextView.setText(text: OmegaText) {
this@setText.text = text.getCharSequence(extractor)
@@ -20,8 +29,6 @@ val Context.extractor: OmegaResourceExtractor
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)
@@ -43,5 +50,8 @@ fun CharSequence.toHtmlString(): String {
is Spanned -> toHtmlString()
else -> Html.escapeHtml(this)
}
-
}
+
+val Int.text: OmegaText
+ get() = OmegaText.from(this)
+
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/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/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/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/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..2ac15af
--- /dev/null
+++ b/core/src/androidTest/kotlin/com/omega_r/libs/entities/OmegaFileTests.kt
@@ -0,0 +1,29 @@
+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)
+ assert(file.getInput() != null)
+ }
+ }
+
+}
\ 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/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)
}
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
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/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
+ )
)
}
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..c3c8589 100644
--- a/glide/build.gradle
+++ b/glide/build.gradle
@@ -1,7 +1,7 @@
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'
group = 'com.github.Omega-R'
@@ -13,8 +13,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"
@@ -29,6 +27,18 @@ 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"
@@ -40,5 +50,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/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/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/gradle.properties b/gradle.properties
index daed1a1..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.4.1
+kotlin_version = 1.3.70
+android_tools_version = 3.6.1
ktor_version = 1.3.1
@@ -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
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..006c0cb 100644
--- a/picasso/build.gradle
+++ b/picasso/build.gradle
@@ -1,7 +1,7 @@
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'
group = 'com.github.Omega-R'
@@ -13,8 +13,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"
@@ -29,11 +27,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"
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?)
+
}
}
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