diff --git a/.gitignore b/.gitignore
index 2b5427bcc..790ac9185 100644
--- a/.gitignore
+++ b/.gitignore
@@ -7,13 +7,5 @@ local.properties
*.hprof
.bundle/
local.settings.gradle.kts
-
-# fastlane
-**/fastlane/report.xml
-**/fastlane/Preview.html
-**/fastlane/screenshots
-**/fastlane/test_output
-
-# bitrise
-.bitrise.yml
-bitrise.yml
+*/release
+*/google-services.json
diff --git a/build.gradle.kts b/build.gradle.kts
index 6f97e44ce..e9970d653 100644
--- a/build.gradle.kts
+++ b/build.gradle.kts
@@ -1,11 +1,15 @@
import com.diffplug.gradle.spotless.SpotlessExtension
+@Suppress("DSL_SCOPE_VIOLATION")
plugins {
alias(libs.plugins.kotlin.multiplaform) apply false
alias(libs.plugins.kotlinx.serialization) apply false
- alias(libs.plugins.android) apply false
+ alias(libs.plugins.android.library) apply false
alias(libs.plugins.maven.publish) apply false
alias(libs.plugins.spotless) apply false
+ alias(libs.plugins.google.services) apply false
+ alias(libs.plugins.firebase.crashlytics) apply false
+ alias(libs.plugins.firebase.perf) apply false
}
subprojects {
diff --git a/examples/build.gradle b/examples/build.gradle
index a0984865e..828bb1931 100644
--- a/examples/build.gradle
+++ b/examples/build.gradle
@@ -1,6 +1,9 @@
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlinx-serialization'
+apply plugin: 'com.google.gms.google-services'
+apply plugin: 'com.google.firebase.crashlytics'
+apply plugin: 'com.google.firebase.firebase-perf'
android {
compileSdkVersion 31
@@ -10,15 +13,13 @@ android {
minSdkVersion 23
targetSdkVersion 31
versionCode 1
- versionName "1.0"
+ versionName "1.0+3.0.0-beta01"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
buildTypes {
- debug {
- matchingFallbacks = ['release']
- }
release {
- minifyEnabled false
+ minifyEnabled true
+ shrinkResources true
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
@@ -31,6 +32,7 @@ android {
}
packagingOptions {
exclude("META-INF/*.kotlin_module")
+ resources.excludes += "DebugProbesKt.bin"
}
buildFeatures {
viewBinding true
@@ -78,6 +80,11 @@ dependencies {
testImplementation 'junit:junit:4.13.2'
androidTestImplementation 'androidx.test:runner:1.4.0'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
+
+ implementation platform('com.google.firebase:firebase-bom:29.2.1')
+ implementation 'com.google.firebase:firebase-crashlytics-ktx'
+ implementation 'com.google.firebase:firebase-analytics-ktx'
+ implementation 'com.google.firebase:firebase-perf-ktx'
}
tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).configureEach {
diff --git a/examples/proguard-rules.pro b/examples/proguard-rules.pro
index 238bcee19..dcfd2849f 100644
--- a/examples/proguard-rules.pro
+++ b/examples/proguard-rules.pro
@@ -19,4 +19,41 @@
# If you keep the line number information, uncomment this to
# hide the original source file name.
#-renamesourcefileattribute SourceFile
--keep class com.algolia.search.model.** { *; }
\ No newline at end of file
+
+# Should be fixed with OkHttp 5: https://github.com/square/okhttp/issues/6258
+-dontwarn org.bouncycastle.jsse.BCSSLSocket
+-dontwarn org.bouncycastle.jsse.BCSSLParameters
+-dontwarn org.bouncycastle.jsse.provider.BouncyCastleJsseProvider
+-dontwarn org.conscrypt.*
+-dontwarn org.openjsse.javax.net.ssl.SSLParameters
+-dontwarn org.openjsse.javax.net.ssl.SSLSocket
+-dontwarn org.openjsse.net.ssl.OpenJSSE
+
+# Serialization
+
+# Keep `Companion` object fields of serializable classes.
+# This avoids serializer lookup through `getDeclaredClasses` as done for named companion objects.
+-if @kotlinx.serialization.Serializable class **
+-keepclassmembers class <1> {
+ static <1>$Companion Companion;
+}
+
+# Keep `serializer()` on companion objects (both default and named) of serializable classes.
+-if @kotlinx.serialization.Serializable class ** {
+ static **$* *;
+}
+-keepclassmembers class <2>$<3> {
+ kotlinx.serialization.KSerializer serializer(...);
+}
+
+# Keep `INSTANCE.serializer()` of serializable objects.
+-if @kotlinx.serialization.Serializable class ** {
+ public static ** INSTANCE;
+}
+-keepclassmembers class <1> {
+ public static <1> INSTANCE;
+ kotlinx.serialization.KSerializer serializer(...);
+}
+
+# @Serializable and @Polymorphic are used at runtime for polymorphic serialization.
+-keepattributes RuntimeVisibleAnnotations,AnnotationDefault
diff --git a/examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/compose/customdata/QueryRuleCustomDataShowcase.kt b/examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/compose/customdata/QueryRuleCustomDataShowcase.kt
index dcc27fa7f..642ad273d 100644
--- a/examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/compose/customdata/QueryRuleCustomDataShowcase.kt
+++ b/examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/compose/customdata/QueryRuleCustomDataShowcase.kt
@@ -36,8 +36,8 @@ import com.algolia.instantsearch.customdata.QueryRuleCustomDataConnector
import com.algolia.instantsearch.examples.R
import com.algolia.instantsearch.examples.showcase.compose.client
import com.algolia.instantsearch.examples.showcase.compose.configureSearcher
-import com.algolia.instantsearch.examples.showcase.compose.model.Banner
-import com.algolia.instantsearch.examples.showcase.compose.model.Product
+import com.algolia.instantsearch.examples.showcase.shared.model.Banner
+import com.algolia.instantsearch.examples.showcase.shared.model.Product
import com.algolia.instantsearch.examples.showcase.compose.stubIndexName
import com.algolia.instantsearch.examples.showcase.compose.ui.BlueDark
import com.algolia.instantsearch.examples.showcase.compose.ui.ShowcaseTheme
@@ -74,8 +74,8 @@ class QueryRuleCustomDataShowcase : AppCompatActivity() {
searchBox.viewModel.eventSubmit.subscribe {
val model = queryRuleCustomData.viewModel.item.value ?: return@subscribe
- if (model.banner == null && model.title == null) {
- redirect(model.link, resources.getString(R.string.redirect_via_submit))
+ if (model.banner == null && model.title == null && model.redirect != null) {
+ redirect(model.redirect, resources.getString(R.string.redirect_via_submit))
}
}
}
diff --git a/examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/compose/directory/ComposeDirectoryShowcase.kt b/examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/compose/directory/ComposeDirectoryShowcase.kt
index da225c86e..5751b8754 100644
--- a/examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/compose/directory/ComposeDirectoryShowcase.kt
+++ b/examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/compose/directory/ComposeDirectoryShowcase.kt
@@ -12,6 +12,7 @@ import com.algolia.instantsearch.searcher.hits.HitsSearcher
import com.algolia.instantsearch.examples.showcase.compose.client
import com.algolia.instantsearch.examples.showcase.compose.configureSearchBox
import com.algolia.instantsearch.examples.showcase.compose.ui.ShowcaseTheme
+import com.algolia.instantsearch.examples.showcase.shared.model.DirectoryHit
import com.algolia.search.helper.deserialize
import com.algolia.search.model.IndexName
import com.algolia.search.model.search.Query
diff --git a/examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/compose/directory/DirectoryItem.kt b/examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/compose/directory/DirectoryItem.kt
index 9a5919863..aaeeb132c 100644
--- a/examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/compose/directory/DirectoryItem.kt
+++ b/examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/compose/directory/DirectoryItem.kt
@@ -1,5 +1,7 @@
package com.algolia.instantsearch.examples.showcase.compose.directory
+import com.algolia.instantsearch.examples.showcase.shared.model.DirectoryHit
+
sealed class DirectoryItem {
data class Header(val name: String) : DirectoryItem()
data class Item(val hit: DirectoryHit) : DirectoryItem()
diff --git a/examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/compose/highlighting/HighlightingShowcase.kt b/examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/compose/highlighting/HighlightingShowcase.kt
index 8997a19b7..c20610948 100644
--- a/examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/compose/highlighting/HighlightingShowcase.kt
+++ b/examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/compose/highlighting/HighlightingShowcase.kt
@@ -16,7 +16,7 @@ import com.algolia.instantsearch.searchbox.connectView
import com.algolia.instantsearch.searcher.hits.HitsSearcher
import com.algolia.instantsearch.examples.showcase.compose.client
import com.algolia.instantsearch.examples.showcase.compose.configureSearcher
-import com.algolia.instantsearch.examples.showcase.compose.model.Movie
+import com.algolia.instantsearch.examples.showcase.shared.model.Movie
import com.algolia.instantsearch.examples.showcase.compose.stubIndexName
import com.algolia.instantsearch.examples.showcase.compose.ui.ShowcaseTheme
import com.algolia.instantsearch.examples.showcase.compose.ui.White
diff --git a/examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/compose/list/merged/MergedListShowcase.kt b/examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/compose/list/merged/MergedListShowcase.kt
index 94b71e42a..3f652925c 100644
--- a/examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/compose/list/merged/MergedListShowcase.kt
+++ b/examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/compose/list/merged/MergedListShowcase.kt
@@ -21,8 +21,8 @@ import com.algolia.instantsearch.searchbox.connectView
import com.algolia.instantsearch.searcher.hits.addHitsSearcher
import com.algolia.instantsearch.searcher.multi.MultiSearcher
import com.algolia.instantsearch.examples.showcase.compose.client
-import com.algolia.instantsearch.examples.showcase.compose.model.Actor
-import com.algolia.instantsearch.examples.showcase.compose.model.Movie
+import com.algolia.instantsearch.examples.showcase.shared.model.Actor
+import com.algolia.instantsearch.examples.showcase.shared.model.Movie
import com.algolia.instantsearch.examples.showcase.compose.ui.GreyLight
import com.algolia.instantsearch.examples.showcase.compose.ui.ShowcaseTheme
import com.algolia.instantsearch.examples.showcase.compose.ui.component.ActorsList
diff --git a/examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/compose/list/paging/PagingMultipleIndexShowcase.kt b/examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/compose/list/paging/PagingMultipleIndexShowcase.kt
index 0e0f9aace..ecadbf519 100644
--- a/examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/compose/list/paging/PagingMultipleIndexShowcase.kt
+++ b/examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/compose/list/paging/PagingMultipleIndexShowcase.kt
@@ -25,8 +25,8 @@ import com.algolia.instantsearch.searchbox.connectView
import com.algolia.instantsearch.searcher.hits.addHitsSearcher
import com.algolia.instantsearch.searcher.multi.MultiSearcher
import com.algolia.instantsearch.examples.showcase.compose.client
-import com.algolia.instantsearch.examples.showcase.compose.model.Actor
-import com.algolia.instantsearch.examples.showcase.compose.model.Movie
+import com.algolia.instantsearch.examples.showcase.shared.model.Actor
+import com.algolia.instantsearch.examples.showcase.shared.model.Movie
import com.algolia.instantsearch.examples.showcase.compose.ui.GreyLight
import com.algolia.instantsearch.examples.showcase.compose.ui.ShowcaseTheme
import com.algolia.instantsearch.examples.showcase.compose.ui.component.ActorsHorizontalList
diff --git a/examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/compose/list/paging/PagingSingleIndexShowcase.kt b/examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/compose/list/paging/PagingSingleIndexShowcase.kt
index 42d1e9a83..30e8d988a 100644
--- a/examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/compose/list/paging/PagingSingleIndexShowcase.kt
+++ b/examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/compose/list/paging/PagingSingleIndexShowcase.kt
@@ -27,7 +27,7 @@ import com.algolia.instantsearch.searchbox.connectView
import com.algolia.instantsearch.searcher.hits.HitsSearcher
import com.algolia.instantsearch.examples.showcase.compose.client
import com.algolia.instantsearch.examples.showcase.compose.configureSearcher
-import com.algolia.instantsearch.examples.showcase.compose.model.Movie
+import com.algolia.instantsearch.examples.showcase.shared.model.Movie
import com.algolia.instantsearch.examples.showcase.compose.stubIndexName
import com.algolia.instantsearch.examples.showcase.compose.ui.GreyLight
import com.algolia.instantsearch.examples.showcase.compose.ui.ShowcaseTheme
diff --git a/examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/compose/loading/LoadingShowcase.kt b/examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/compose/loading/LoadingShowcase.kt
index e565f3d9b..f7f3c6555 100644
--- a/examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/compose/loading/LoadingShowcase.kt
+++ b/examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/compose/loading/LoadingShowcase.kt
@@ -21,7 +21,7 @@ import com.algolia.instantsearch.searchbox.connectView
import com.algolia.instantsearch.searcher.hits.HitsSearcher
import com.algolia.instantsearch.examples.showcase.compose.client
import com.algolia.instantsearch.examples.showcase.compose.configureSearcher
-import com.algolia.instantsearch.examples.showcase.compose.model.Movie
+import com.algolia.instantsearch.examples.showcase.shared.model.Movie
import com.algolia.instantsearch.examples.showcase.compose.stubIndexName
import com.algolia.instantsearch.examples.showcase.compose.ui.ShowcaseTheme
import com.algolia.instantsearch.examples.showcase.compose.ui.component.MoviesList
diff --git a/examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/compose/model/Banner.kt b/examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/compose/model/Banner.kt
deleted file mode 100644
index e61f9adbb..000000000
--- a/examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/compose/model/Banner.kt
+++ /dev/null
@@ -1,10 +0,0 @@
-package com.algolia.instantsearch.examples.showcase.compose.model
-
-import kotlinx.serialization.Serializable
-
-@Serializable
-data class Banner(
- val title: String?,
- val banner: String?,
- val link: String
-)
diff --git a/examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/compose/relateditems/RelatedItemsShowcase.kt b/examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/compose/relateditems/RelatedItemsShowcase.kt
index 6a730e5e8..7c66943d9 100644
--- a/examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/compose/relateditems/RelatedItemsShowcase.kt
+++ b/examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/compose/relateditems/RelatedItemsShowcase.kt
@@ -20,7 +20,7 @@ import com.algolia.instantsearch.relateditems.connectRelatedHitsView
import com.algolia.instantsearch.searcher.hits.HitsSearcher
import com.algolia.instantsearch.examples.showcase.compose.client
import com.algolia.instantsearch.examples.showcase.compose.configureSearcher
-import com.algolia.instantsearch.examples.showcase.compose.model.Product
+import com.algolia.instantsearch.examples.showcase.shared.model.Product
import com.algolia.instantsearch.examples.showcase.compose.showcaseTitle
import com.algolia.instantsearch.examples.showcase.compose.stubIndexName
import com.algolia.instantsearch.examples.showcase.compose.ui.GreyLight
diff --git a/examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/compose/search/SearchAsYouTypeShowcase.kt b/examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/compose/search/SearchAsYouTypeShowcase.kt
index 023c71d1f..8baa033f1 100644
--- a/examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/compose/search/SearchAsYouTypeShowcase.kt
+++ b/examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/compose/search/SearchAsYouTypeShowcase.kt
@@ -18,7 +18,7 @@ import com.algolia.instantsearch.searchbox.connectView
import com.algolia.instantsearch.searcher.hits.HitsSearcher
import com.algolia.instantsearch.examples.showcase.compose.client
import com.algolia.instantsearch.examples.showcase.compose.configureSearcher
-import com.algolia.instantsearch.examples.showcase.compose.model.Movie
+import com.algolia.instantsearch.examples.showcase.shared.model.Movie
import com.algolia.instantsearch.examples.showcase.compose.stubIndexName
import com.algolia.instantsearch.examples.showcase.compose.ui.ShowcaseTheme
import com.algolia.instantsearch.examples.showcase.compose.ui.component.MoviesList
diff --git a/examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/compose/search/SearchAutoCompleteShowcase.kt b/examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/compose/search/SearchAutoCompleteShowcase.kt
index 2ad02101c..ac8fb52f1 100644
--- a/examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/compose/search/SearchAutoCompleteShowcase.kt
+++ b/examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/compose/search/SearchAutoCompleteShowcase.kt
@@ -19,7 +19,7 @@ import com.algolia.instantsearch.searchbox.connectView
import com.algolia.instantsearch.searcher.hits.HitsSearcher
import com.algolia.instantsearch.examples.showcase.compose.client
import com.algolia.instantsearch.examples.showcase.compose.configureSearcher
-import com.algolia.instantsearch.examples.showcase.compose.model.Movie
+import com.algolia.instantsearch.examples.showcase.shared.model.Movie
import com.algolia.instantsearch.examples.showcase.compose.stubIndexName
import com.algolia.instantsearch.examples.showcase.compose.ui.component.AutoCompleteTextField
import com.algolia.instantsearch.examples.showcase.compose.ui.component.TitleTopBar
diff --git a/examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/compose/search/SearchOnSubmitShowcase.kt b/examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/compose/search/SearchOnSubmitShowcase.kt
index 1df7c8855..04ad6bb03 100644
--- a/examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/compose/search/SearchOnSubmitShowcase.kt
+++ b/examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/compose/search/SearchOnSubmitShowcase.kt
@@ -18,7 +18,7 @@ import com.algolia.instantsearch.searchbox.connectView
import com.algolia.instantsearch.searcher.hits.HitsSearcher
import com.algolia.instantsearch.examples.showcase.compose.client
import com.algolia.instantsearch.examples.showcase.compose.configureSearcher
-import com.algolia.instantsearch.examples.showcase.compose.model.Movie
+import com.algolia.instantsearch.examples.showcase.shared.model.Movie
import com.algolia.instantsearch.examples.showcase.compose.stubIndexName
import com.algolia.instantsearch.examples.showcase.compose.ui.ShowcaseTheme
import com.algolia.instantsearch.examples.showcase.compose.ui.component.MoviesList
diff --git a/examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/compose/sortby/SortByShowcase.kt b/examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/compose/sortby/SortByShowcase.kt
index 52d803534..8e03d75db 100644
--- a/examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/compose/sortby/SortByShowcase.kt
+++ b/examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/compose/sortby/SortByShowcase.kt
@@ -19,7 +19,7 @@ import com.algolia.instantsearch.searcher.hits.HitsSearcher
import com.algolia.instantsearch.sortby.SortByConnector
import com.algolia.instantsearch.sortby.connectView
import com.algolia.instantsearch.examples.showcase.compose.client
-import com.algolia.instantsearch.examples.showcase.compose.model.Movie
+import com.algolia.instantsearch.examples.showcase.shared.model.Movie
import com.algolia.instantsearch.examples.showcase.compose.showcaseTitle
import com.algolia.instantsearch.examples.showcase.compose.ui.component.DropdownTextField
import com.algolia.instantsearch.examples.showcase.compose.ui.component.MoviesList
diff --git a/examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/compose/ui/component/ActorsList.kt b/examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/compose/ui/component/ActorsList.kt
index 4a2a50173..832e687db 100644
--- a/examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/compose/ui/component/ActorsList.kt
+++ b/examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/compose/ui/component/ActorsList.kt
@@ -12,7 +12,7 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.unit.dp
import androidx.paging.compose.LazyPagingItems
import androidx.paging.compose.items
-import com.algolia.instantsearch.examples.showcase.compose.model.Actor
+import com.algolia.instantsearch.examples.showcase.shared.model.Actor
@Composable
diff --git a/examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/compose/ui/component/MoviesList.kt b/examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/compose/ui/component/MoviesList.kt
index 74271e4f3..a4eefd4a3 100644
--- a/examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/compose/ui/component/MoviesList.kt
+++ b/examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/compose/ui/component/MoviesList.kt
@@ -21,7 +21,7 @@ import androidx.paging.compose.LazyPagingItems
import androidx.paging.compose.items
import coil.compose.rememberImagePainter
import com.algolia.instantsearch.compose.highlighting.toAnnotatedString
-import com.algolia.instantsearch.examples.showcase.compose.model.Movie
+import com.algolia.instantsearch.examples.showcase.shared.model.Movie
import com.algolia.instantsearch.examples.showcase.compose.ui.GreyDark
import java.util.*
diff --git a/examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/compose/ui/component/ProductList.kt b/examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/compose/ui/component/ProductList.kt
index a7cf0f030..2b18e7789 100644
--- a/examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/compose/ui/component/ProductList.kt
+++ b/examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/compose/ui/component/ProductList.kt
@@ -14,7 +14,7 @@ import androidx.compose.ui.layout.ContentScale
import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.dp
import coil.compose.rememberImagePainter
-import com.algolia.instantsearch.examples.showcase.compose.model.Product
+import com.algolia.instantsearch.examples.showcase.shared.model.Product
@Composable
fun ProductList(
diff --git a/examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/compose/model/Actor.kt b/examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/shared/model/Actor.kt
similarity index 78%
rename from examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/compose/model/Actor.kt
rename to examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/shared/model/Actor.kt
index 466e0fba8..e081eae07 100644
--- a/examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/compose/model/Actor.kt
+++ b/examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/shared/model/Actor.kt
@@ -1,4 +1,4 @@
-package com.algolia.instantsearch.examples.showcase.compose.model
+package com.algolia.instantsearch.examples.showcase.shared.model
import com.algolia.search.model.ObjectID
import com.algolia.search.model.indexing.Indexable
diff --git a/examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/view/customdata/Banner.kt b/examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/shared/model/Banner.kt
similarity index 72%
rename from examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/view/customdata/Banner.kt
rename to examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/shared/model/Banner.kt
index 58cab97b4..d55ce9cdf 100644
--- a/examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/view/customdata/Banner.kt
+++ b/examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/shared/model/Banner.kt
@@ -1,4 +1,4 @@
-package com.algolia.instantsearch.examples.showcase.view.customdata
+package com.algolia.instantsearch.examples.showcase.shared.model
import kotlinx.serialization.Serializable
@@ -9,3 +9,4 @@ data class Banner(
val link: String,
val redirect: String?
)
+
diff --git a/examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/compose/directory/DirectoryHit.kt b/examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/shared/model/DirectoryHit.kt
similarity index 85%
rename from examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/compose/directory/DirectoryHit.kt
rename to examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/shared/model/DirectoryHit.kt
index 1574d09a2..797c2ea87 100644
--- a/examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/compose/directory/DirectoryHit.kt
+++ b/examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/shared/model/DirectoryHit.kt
@@ -1,4 +1,4 @@
-package com.algolia.instantsearch.examples.showcase.compose.directory
+package com.algolia.instantsearch.examples.showcase.shared.model
import com.algolia.instantsearch.highlighting.Highlightable
import com.algolia.search.model.Attribute
@@ -14,7 +14,7 @@ data class DirectoryHit(
val type: String,
val index: String,
override val _highlightResult: JsonObject? = null
-) : Indexable, Highlightable {
+): Indexable, Highlightable {
public val highlightedName
get() = getHighlight(Attribute("name"), preTag = "", postTag = "")
diff --git a/examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/compose/model/Movie.kt b/examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/shared/model/Movie.kt
similarity index 92%
rename from examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/compose/model/Movie.kt
rename to examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/shared/model/Movie.kt
index e8dab1798..df2f1f06b 100644
--- a/examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/compose/model/Movie.kt
+++ b/examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/shared/model/Movie.kt
@@ -1,4 +1,4 @@
-package com.algolia.instantsearch.examples.showcase.compose.model
+package com.algolia.instantsearch.examples.showcase.shared.model
import com.algolia.instantsearch.highlighting.Highlightable
import com.algolia.search.model.Attribute
diff --git a/examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/compose/model/Product.kt b/examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/shared/model/Product.kt
similarity index 90%
rename from examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/compose/model/Product.kt
rename to examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/shared/model/Product.kt
index 5efd76a9c..373261e42 100644
--- a/examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/compose/model/Product.kt
+++ b/examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/shared/model/Product.kt
@@ -1,4 +1,4 @@
-package com.algolia.instantsearch.examples.showcase.compose.model
+package com.algolia.instantsearch.examples.showcase.shared.model
import com.algolia.search.model.ObjectID
import com.algolia.search.model.indexing.Indexable
diff --git a/examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/view/list/suggestion/Suggestion.kt b/examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/shared/model/Suggestion.kt
similarity index 89%
rename from examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/view/list/suggestion/Suggestion.kt
rename to examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/shared/model/Suggestion.kt
index b718b2017..c651ceec0 100644
--- a/examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/view/list/suggestion/Suggestion.kt
+++ b/examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/shared/model/Suggestion.kt
@@ -1,4 +1,4 @@
-package com.algolia.instantsearch.examples.showcase.view.list.suggestion
+package com.algolia.instantsearch.examples.showcase.shared.model
import com.algolia.instantsearch.core.highlighting.HighlightedString
import com.algolia.instantsearch.highlighting.Highlightable
diff --git a/examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/view/customdata/QueryRuleCustomDataShowcase.kt b/examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/view/customdata/QueryRuleCustomDataShowcase.kt
index 6ea82058f..ee5119221 100644
--- a/examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/view/customdata/QueryRuleCustomDataShowcase.kt
+++ b/examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/view/customdata/QueryRuleCustomDataShowcase.kt
@@ -12,13 +12,14 @@ import com.algolia.instantsearch.customdata.QueryRuleCustomDataConnector
import com.algolia.instantsearch.examples.R
import com.algolia.instantsearch.examples.databinding.IncludeSearchInfoBinding
import com.algolia.instantsearch.examples.databinding.ShowcaseQueryRuleCustomDataBinding
+import com.algolia.instantsearch.examples.showcase.shared.model.Banner
import com.algolia.instantsearch.examples.showcase.shared.customdata.TemplateActivity.Companion.EXTRA_CONTENT
+import com.algolia.instantsearch.examples.showcase.shared.model.Product
import com.algolia.instantsearch.examples.showcase.view.client
import com.algolia.instantsearch.examples.showcase.view.configureRecyclerView
import com.algolia.instantsearch.examples.showcase.view.configureSearchView
import com.algolia.instantsearch.examples.showcase.view.configureSearcher
import com.algolia.instantsearch.examples.showcase.view.configureToolbar
-import com.algolia.instantsearch.examples.showcase.view.list.product.Product
import com.algolia.instantsearch.examples.showcase.view.list.product.ProductAdapter
import com.algolia.instantsearch.examples.showcase.view.stubIndexName
import com.algolia.instantsearch.searchbox.SearchBoxConnector
diff --git a/examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/view/directory/AndroidViewDirectoryShowcase.kt b/examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/view/directory/AndroidViewDirectoryShowcase.kt
index 9821de106..f9a44705c 100644
--- a/examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/view/directory/AndroidViewDirectoryShowcase.kt
+++ b/examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/view/directory/AndroidViewDirectoryShowcase.kt
@@ -9,6 +9,7 @@ import com.algolia.instantsearch.searcher.hits.HitsSearcher
import com.algolia.instantsearch.examples.showcase.view.*
import com.algolia.instantsearch.examples.databinding.IncludeSearchBinding
import com.algolia.instantsearch.examples.databinding.ShowcaseDirectoryBinding
+import com.algolia.instantsearch.examples.showcase.shared.model.DirectoryHit
import com.algolia.search.helper.deserialize
import com.algolia.search.model.IndexName
import com.algolia.search.model.search.Query
diff --git a/examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/view/directory/DirectoryHit.kt b/examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/view/directory/DirectoryHit.kt
index 339364db9..ebea3ac57 100644
--- a/examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/view/directory/DirectoryHit.kt
+++ b/examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/view/directory/DirectoryHit.kt
@@ -1,22 +1,3 @@
package com.algolia.instantsearch.examples.showcase.view.directory
-import com.algolia.instantsearch.highlighting.Highlightable
-import com.algolia.search.model.Attribute
-import com.algolia.search.model.ObjectID
-import com.algolia.search.model.indexing.Indexable
-import kotlinx.serialization.Serializable
-import kotlinx.serialization.json.JsonObject
-
-@Serializable
-data class DirectoryHit(
- override val objectID: ObjectID,
- val name: String,
- val type: String,
- val index: String,
- override val _highlightResult: JsonObject? = null
-): Indexable, Highlightable {
-
- public val highlightedName
- get() = getHighlight(Attribute("name"), preTag = "", postTag = "")
-}
diff --git a/examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/view/directory/DirectoryItem.kt b/examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/view/directory/DirectoryItem.kt
index 001346cf8..54be4ffac 100644
--- a/examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/view/directory/DirectoryItem.kt
+++ b/examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/view/directory/DirectoryItem.kt
@@ -1,5 +1,7 @@
package com.algolia.instantsearch.examples.showcase.view.directory
+import com.algolia.instantsearch.examples.showcase.shared.model.DirectoryHit
+
sealed class DirectoryItem {
diff --git a/examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/view/highlighting/HighlightingAdapter.kt b/examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/view/highlighting/HighlightingAdapter.kt
index 58a45b62e..658fa5458 100644
--- a/examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/view/highlighting/HighlightingAdapter.kt
+++ b/examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/view/highlighting/HighlightingAdapter.kt
@@ -5,7 +5,7 @@ import androidx.recyclerview.widget.ListAdapter
import com.algolia.instantsearch.core.hits.HitsView
import com.algolia.instantsearch.examples.databinding.ListItemHighlightingBinding
import com.algolia.instantsearch.examples.showcase.view.layoutInflater
-import com.algolia.instantsearch.examples.showcase.view.list.movie.Movie
+import com.algolia.instantsearch.examples.showcase.shared.model.Movie
import com.algolia.instantsearch.examples.showcase.view.list.movie.MovieDiffUtil
class HighlightingAdapter : ListAdapter(MovieDiffUtil),
diff --git a/examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/view/highlighting/HighlightingShowcase.kt b/examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/view/highlighting/HighlightingShowcase.kt
index dfef8a483..9fea5c67d 100644
--- a/examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/view/highlighting/HighlightingShowcase.kt
+++ b/examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/view/highlighting/HighlightingShowcase.kt
@@ -9,7 +9,7 @@ import com.algolia.instantsearch.searcher.hits.HitsSearcher
import com.algolia.instantsearch.examples.showcase.view.*
import com.algolia.instantsearch.examples.databinding.IncludeSearchBinding
import com.algolia.instantsearch.examples.databinding.ShowcaseHighlightingBinding
-import com.algolia.instantsearch.examples.showcase.view.list.movie.Movie
+import com.algolia.instantsearch.examples.showcase.shared.model.Movie
import com.algolia.search.helper.deserialize
class HighlightingShowcase : AppCompatActivity() {
diff --git a/examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/view/highlighting/HighlightingViewHolder.kt b/examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/view/highlighting/HighlightingViewHolder.kt
index 016898228..e1f9db916 100644
--- a/examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/view/highlighting/HighlightingViewHolder.kt
+++ b/examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/view/highlighting/HighlightingViewHolder.kt
@@ -10,7 +10,7 @@ import androidx.core.text.italic
import androidx.recyclerview.widget.RecyclerView
import com.algolia.instantsearch.android.highlighting.toSpannedString
import com.algolia.instantsearch.examples.databinding.ListItemHighlightingBinding
-import com.algolia.instantsearch.examples.showcase.view.list.movie.Movie
+import com.algolia.instantsearch.examples.showcase.shared.model.Movie
import com.bumptech.glide.Glide
class HighlightingViewHolder(private val binding: ListItemHighlightingBinding) :
diff --git a/examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/view/list/actor/Actor.kt b/examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/view/list/actor/Actor.kt
deleted file mode 100644
index 76f3b91b5..000000000
--- a/examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/view/list/actor/Actor.kt
+++ /dev/null
@@ -1,11 +0,0 @@
-package com.algolia.instantsearch.examples.showcase.view.list.actor
-
-import com.algolia.search.model.ObjectID
-import com.algolia.search.model.indexing.Indexable
-import kotlinx.serialization.Serializable
-
-@Serializable
-data class Actor(
- val name: String,
- override val objectID: ObjectID
-) : Indexable
diff --git a/examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/view/list/actor/ActorAdapterNested.kt b/examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/view/list/actor/ActorAdapterNested.kt
index d3cff421a..c6984b8f0 100644
--- a/examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/view/list/actor/ActorAdapterNested.kt
+++ b/examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/view/list/actor/ActorAdapterNested.kt
@@ -4,6 +4,7 @@ import android.view.ViewGroup
import androidx.paging.PagingDataAdapter
import androidx.recyclerview.widget.DiffUtil
import com.algolia.instantsearch.examples.databinding.ListItemActorBinding
+import com.algolia.instantsearch.examples.showcase.shared.model.Actor
import com.algolia.instantsearch.examples.showcase.view.layoutInflater
class ActorAdapterNested : PagingDataAdapter(this) {
diff --git a/examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/view/list/actor/ActorViewHolder.kt b/examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/view/list/actor/ActorViewHolder.kt
index 76c09ba92..e9f9e7fee 100644
--- a/examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/view/list/actor/ActorViewHolder.kt
+++ b/examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/view/list/actor/ActorViewHolder.kt
@@ -2,6 +2,7 @@ package com.algolia.instantsearch.examples.showcase.view.list.actor
import androidx.recyclerview.widget.RecyclerView
import com.algolia.instantsearch.examples.databinding.ListItemActorBinding
+import com.algolia.instantsearch.examples.showcase.shared.model.Actor
class ActorViewHolder(private val binding: ListItemActorBinding) :
RecyclerView.ViewHolder(binding.root) {
diff --git a/examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/view/list/actor/ActorViewHolderSmall.kt b/examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/view/list/actor/ActorViewHolderSmall.kt
index 01f77a818..923d259d9 100644
--- a/examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/view/list/actor/ActorViewHolderSmall.kt
+++ b/examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/view/list/actor/ActorViewHolderSmall.kt
@@ -2,6 +2,7 @@ package com.algolia.instantsearch.examples.showcase.view.list.actor
import androidx.recyclerview.widget.RecyclerView
import com.algolia.instantsearch.examples.databinding.ListItemSmallBinding
+import com.algolia.instantsearch.examples.showcase.shared.model.Actor
class ActorViewHolderSmall(val binding: ListItemSmallBinding) :
RecyclerView.ViewHolder(binding.root) {
diff --git a/examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/view/list/merged/ActorsAdapter.kt b/examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/view/list/merged/ActorsAdapter.kt
index 83655cfe3..a192383cf 100644
--- a/examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/view/list/merged/ActorsAdapter.kt
+++ b/examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/view/list/merged/ActorsAdapter.kt
@@ -5,8 +5,8 @@ import androidx.recyclerview.widget.DiffUtil
import androidx.recyclerview.widget.ListAdapter
import com.algolia.instantsearch.core.hits.HitsView
import com.algolia.instantsearch.examples.databinding.ListItemSmallBinding
+import com.algolia.instantsearch.examples.showcase.shared.model.Actor
import com.algolia.instantsearch.examples.showcase.view.layoutInflater
-import com.algolia.instantsearch.examples.showcase.view.list.actor.Actor
import com.algolia.instantsearch.examples.showcase.view.list.actor.ActorViewHolderSmall
class ActorsAdapter : ListAdapter(ActorsAdapter), HitsView {
diff --git a/examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/view/list/merged/MergedListShowcase.kt b/examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/view/list/merged/MergedListShowcase.kt
index d464fae80..1a8cb49b5 100644
--- a/examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/view/list/merged/MergedListShowcase.kt
+++ b/examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/view/list/merged/MergedListShowcase.kt
@@ -13,8 +13,8 @@ import com.algolia.instantsearch.searcher.multi.MultiSearcher
import com.algolia.instantsearch.examples.showcase.view.*
import com.algolia.instantsearch.examples.databinding.IncludeSearchBinding
import com.algolia.instantsearch.examples.databinding.ShowcaseMultisearchBinding
-import com.algolia.instantsearch.examples.showcase.view.list.actor.Actor
-import com.algolia.instantsearch.examples.showcase.view.list.movie.Movie
+import com.algolia.instantsearch.examples.showcase.shared.model.Actor
+import com.algolia.instantsearch.examples.showcase.shared.model.Movie
import com.algolia.instantsearch.examples.showcase.view.list.movie.MovieAdapter
import com.algolia.search.helper.deserialize
import com.algolia.search.model.IndexName
diff --git a/examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/view/list/movie/Movie.kt b/examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/view/list/movie/Movie.kt
deleted file mode 100644
index 1a6ac6263..000000000
--- a/examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/view/list/movie/Movie.kt
+++ /dev/null
@@ -1,29 +0,0 @@
-package com.algolia.instantsearch.examples.showcase.view.list.movie
-
-import com.algolia.instantsearch.highlighting.Highlightable
-import com.algolia.search.model.Attribute
-import com.algolia.search.model.ObjectID
-import com.algolia.search.model.indexing.Indexable
-import kotlinx.serialization.Serializable
-import kotlinx.serialization.json.JsonObject
-
-
-@Serializable
-data class Movie(
- val title: String,
- val year: String,
- val genre: List,
- val image: String,
- override val objectID: ObjectID,
- override val _highlightResult: JsonObject?
-) : Indexable, Highlightable {
-
- public val highlightedTitle
- get() = getHighlight(Attribute("title"))
-
- public val highlightedGenres
- get() = getHighlights(Attribute("genre"))
-
- public val highlightedActors
- get() = getHighlights(Attribute("actors"))
-}
diff --git a/examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/view/list/movie/MovieAdapter.kt b/examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/view/list/movie/MovieAdapter.kt
index eb3e90d77..9f16b7d0e 100644
--- a/examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/view/list/movie/MovieAdapter.kt
+++ b/examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/view/list/movie/MovieAdapter.kt
@@ -4,6 +4,7 @@ import android.view.ViewGroup
import androidx.recyclerview.widget.ListAdapter
import com.algolia.instantsearch.core.hits.HitsView
import com.algolia.instantsearch.examples.databinding.ListItemLargeBinding
+import com.algolia.instantsearch.examples.showcase.shared.model.Movie
import com.algolia.instantsearch.examples.showcase.view.layoutInflater
class MovieAdapter : ListAdapter(MovieDiffUtil), HitsView {
diff --git a/examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/view/list/movie/MovieAdapterNested.kt b/examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/view/list/movie/MovieAdapterNested.kt
index 58efb0d80..577955c23 100644
--- a/examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/view/list/movie/MovieAdapterNested.kt
+++ b/examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/view/list/movie/MovieAdapterNested.kt
@@ -3,6 +3,7 @@ package com.algolia.instantsearch.examples.showcase.view.list.movie
import android.view.ViewGroup
import androidx.paging.PagingDataAdapter
import com.algolia.instantsearch.examples.databinding.ListItemMovieBinding
+import com.algolia.instantsearch.examples.showcase.shared.model.Movie
import com.algolia.instantsearch.examples.showcase.view.dip
import com.algolia.instantsearch.examples.showcase.view.layoutInflater
diff --git a/examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/view/list/movie/MovieAdapterPaged.kt b/examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/view/list/movie/MovieAdapterPaged.kt
index 472956136..748466d99 100644
--- a/examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/view/list/movie/MovieAdapterPaged.kt
+++ b/examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/view/list/movie/MovieAdapterPaged.kt
@@ -3,6 +3,7 @@ package com.algolia.instantsearch.examples.showcase.view.list.movie
import android.view.ViewGroup
import androidx.paging.PagingDataAdapter
import com.algolia.instantsearch.examples.databinding.ListItemLargeBinding
+import com.algolia.instantsearch.examples.showcase.shared.model.Movie
import com.algolia.instantsearch.examples.showcase.view.layoutInflater
class MovieAdapterPaged : PagingDataAdapter(MovieDiffUtil) {
diff --git a/examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/view/list/movie/MovieDiffUtil.kt b/examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/view/list/movie/MovieDiffUtil.kt
index ccae515c6..d5d48cb5f 100644
--- a/examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/view/list/movie/MovieDiffUtil.kt
+++ b/examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/view/list/movie/MovieDiffUtil.kt
@@ -1,6 +1,7 @@
package com.algolia.instantsearch.examples.showcase.view.list.movie
import androidx.recyclerview.widget.DiffUtil
+import com.algolia.instantsearch.examples.showcase.shared.model.Movie
object MovieDiffUtil : DiffUtil.ItemCallback() {
diff --git a/examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/view/list/movie/MovieViewHolder.kt b/examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/view/list/movie/MovieViewHolder.kt
index a6b3e8e21..5d2bf188d 100644
--- a/examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/view/list/movie/MovieViewHolder.kt
+++ b/examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/view/list/movie/MovieViewHolder.kt
@@ -6,6 +6,7 @@ import androidx.core.text.italic
import androidx.recyclerview.widget.RecyclerView
import com.algolia.instantsearch.android.highlighting.toSpannedString
import com.algolia.instantsearch.examples.databinding.ListItemLargeBinding
+import com.algolia.instantsearch.examples.showcase.shared.model.Movie
import com.bumptech.glide.Glide
class MovieViewHolder(private val binding: ListItemLargeBinding) : RecyclerView.ViewHolder(binding.root) {
diff --git a/examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/view/list/movie/MovieViewHolderNested.kt b/examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/view/list/movie/MovieViewHolderNested.kt
index 8080026a4..c758b3c1d 100644
--- a/examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/view/list/movie/MovieViewHolderNested.kt
+++ b/examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/view/list/movie/MovieViewHolderNested.kt
@@ -2,6 +2,7 @@ package com.algolia.instantsearch.examples.showcase.view.list.movie
import androidx.recyclerview.widget.RecyclerView
import com.algolia.instantsearch.examples.databinding.ListItemMovieBinding
+import com.algolia.instantsearch.examples.showcase.shared.model.Movie
import com.bumptech.glide.Glide
class MovieViewHolderNested(private val binding: ListItemMovieBinding) :
diff --git a/examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/view/list/paging/PagingMultipleIndexShowcase.kt b/examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/view/list/paging/PagingMultipleIndexShowcase.kt
index 6ec2c6949..7ce1016f4 100644
--- a/examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/view/list/paging/PagingMultipleIndexShowcase.kt
+++ b/examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/view/list/paging/PagingMultipleIndexShowcase.kt
@@ -9,17 +9,20 @@ import com.algolia.instantsearch.android.paging3.searchbox.connectPaginator
import com.algolia.instantsearch.android.searchbox.SearchBoxViewAppCompat
import com.algolia.instantsearch.core.connection.ConnectionHandler
import com.algolia.instantsearch.examples.R
-import com.algolia.instantsearch.searchbox.SearchBoxConnector
-import com.algolia.instantsearch.searchbox.connectView
-import com.algolia.instantsearch.searcher.hits.addHitsSearcher
-import com.algolia.instantsearch.searcher.multi.MultiSearcher
-import com.algolia.instantsearch.examples.showcase.view.*
import com.algolia.instantsearch.examples.databinding.IncludeSearchBinding
import com.algolia.instantsearch.examples.databinding.ShowcaseSearchBinding
-import com.algolia.instantsearch.examples.showcase.view.list.actor.Actor
+import com.algolia.instantsearch.examples.showcase.shared.model.Actor
+import com.algolia.instantsearch.examples.showcase.shared.model.Movie
+import com.algolia.instantsearch.examples.showcase.view.client
+import com.algolia.instantsearch.examples.showcase.view.configureRecyclerView
+import com.algolia.instantsearch.examples.showcase.view.configureSearchView
+import com.algolia.instantsearch.examples.showcase.view.configureToolbar
import com.algolia.instantsearch.examples.showcase.view.list.actor.ActorAdapterNested
-import com.algolia.instantsearch.examples.showcase.view.list.movie.Movie
import com.algolia.instantsearch.examples.showcase.view.list.movie.MovieAdapterNested
+import com.algolia.instantsearch.searchbox.SearchBoxConnector
+import com.algolia.instantsearch.searchbox.connectView
+import com.algolia.instantsearch.searcher.hits.addHitsSearcher
+import com.algolia.instantsearch.searcher.multi.MultiSearcher
import com.algolia.search.model.IndexName
class PagingMultipleIndexShowcase : AppCompatActivity() {
diff --git a/examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/view/list/paging/PagingSingleIndexShowcase.kt b/examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/view/list/paging/PagingSingleIndexShowcase.kt
index bc1daade7..bcbc5fe6c 100644
--- a/examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/view/list/paging/PagingSingleIndexShowcase.kt
+++ b/examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/view/list/paging/PagingSingleIndexShowcase.kt
@@ -9,14 +9,20 @@ import com.algolia.instantsearch.android.paging3.searchbox.connectPaginator
import com.algolia.instantsearch.android.searchbox.SearchBoxViewAppCompat
import com.algolia.instantsearch.core.connection.ConnectionHandler
import com.algolia.instantsearch.examples.R
-import com.algolia.instantsearch.searchbox.SearchBoxConnector
-import com.algolia.instantsearch.searchbox.connectView
-import com.algolia.instantsearch.searcher.hits.HitsSearcher
-import com.algolia.instantsearch.examples.showcase.view.*
import com.algolia.instantsearch.examples.databinding.IncludeSearchBinding
import com.algolia.instantsearch.examples.databinding.ShowcasePagingBinding
-import com.algolia.instantsearch.examples.showcase.view.list.movie.Movie
+import com.algolia.instantsearch.examples.showcase.shared.model.Movie
+import com.algolia.instantsearch.examples.showcase.view.client
+import com.algolia.instantsearch.examples.showcase.view.configureRecyclerView
+import com.algolia.instantsearch.examples.showcase.view.configureSearchView
+import com.algolia.instantsearch.examples.showcase.view.configureSearcher
+import com.algolia.instantsearch.examples.showcase.view.configureToolbar
import com.algolia.instantsearch.examples.showcase.view.list.movie.MovieAdapterPaged
+import com.algolia.instantsearch.examples.showcase.view.onResponseChangedThenUpdateNbHits
+import com.algolia.instantsearch.examples.showcase.view.stubIndexName
+import com.algolia.instantsearch.searchbox.SearchBoxConnector
+import com.algolia.instantsearch.searchbox.connectView
+import com.algolia.instantsearch.searcher.hits.HitsSearcher
class PagingSingleIndexShowcase : AppCompatActivity() {
diff --git a/examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/view/list/product/Product.kt b/examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/view/list/product/Product.kt
deleted file mode 100644
index 8e801014b..000000000
--- a/examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/view/list/product/Product.kt
+++ /dev/null
@@ -1,23 +0,0 @@
-package com.algolia.instantsearch.examples.showcase.view.list.product
-
-import com.algolia.search.model.ObjectID
-import com.algolia.search.model.indexing.Indexable
-import kotlinx.serialization.SerialName
-import kotlinx.serialization.Serializable
-
-@Serializable
-data class Product(
- val name: String,
- val description: String,
- val brand: String? = null,
- val categories: List,
- val type: String,
- val price: Double,
- @SerialName("price_range") val priceRange: String,
- val image: String,
- val url: String,
- @SerialName("free_shipping") val freeShipping: Boolean,
- val rating: Int = 0,
- val popularity: Long,
- override val objectID: ObjectID
-) : Indexable
diff --git a/examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/view/list/product/ProductAdapter.kt b/examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/view/list/product/ProductAdapter.kt
index 50a82d457..ce588f011 100644
--- a/examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/view/list/product/ProductAdapter.kt
+++ b/examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/view/list/product/ProductAdapter.kt
@@ -6,6 +6,7 @@ import androidx.recyclerview.widget.ListAdapter
import androidx.recyclerview.widget.RecyclerView
import com.algolia.instantsearch.core.hits.HitsView
import com.algolia.instantsearch.examples.databinding.ListItemProductBinding
+import com.algolia.instantsearch.examples.showcase.shared.model.Product
import com.algolia.instantsearch.examples.showcase.view.layoutInflater
import com.bumptech.glide.Glide
diff --git a/examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/view/loading/LoadingShowcase.kt b/examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/view/loading/LoadingShowcase.kt
index 0ac92e470..280aae239 100644
--- a/examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/view/loading/LoadingShowcase.kt
+++ b/examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/view/loading/LoadingShowcase.kt
@@ -15,7 +15,7 @@ import com.algolia.instantsearch.examples.R
import com.algolia.instantsearch.examples.databinding.IncludeSearchBinding
import com.algolia.instantsearch.examples.databinding.ShowcaseLoadingBinding
import com.algolia.instantsearch.examples.showcase.view.*
-import com.algolia.instantsearch.examples.showcase.view.list.movie.Movie
+import com.algolia.instantsearch.examples.showcase.shared.model.Movie
import com.algolia.instantsearch.examples.showcase.view.list.movie.MovieAdapterPaged
import com.algolia.instantsearch.searchbox.SearchBoxConnector
import com.algolia.instantsearch.searchbox.connectView
diff --git a/examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/view/relateditems/RelatedItemsShowcase.kt b/examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/view/relateditems/RelatedItemsShowcase.kt
index 176d3ac45..7a06e4c77 100644
--- a/examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/view/relateditems/RelatedItemsShowcase.kt
+++ b/examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/view/relateditems/RelatedItemsShowcase.kt
@@ -4,13 +4,17 @@ import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import com.algolia.instantsearch.core.connection.ConnectionHandler
import com.algolia.instantsearch.core.hits.connectHitsView
+import com.algolia.instantsearch.examples.databinding.ShowcaseRelateditemsBinding
+import com.algolia.instantsearch.examples.showcase.shared.model.Product
+import com.algolia.instantsearch.examples.showcase.view.client
+import com.algolia.instantsearch.examples.showcase.view.configureRecyclerView
+import com.algolia.instantsearch.examples.showcase.view.configureSearcher
+import com.algolia.instantsearch.examples.showcase.view.configureToolbar
+import com.algolia.instantsearch.examples.showcase.view.list.product.ProductAdapter
+import com.algolia.instantsearch.examples.showcase.view.stubIndexName
import com.algolia.instantsearch.relateditems.MatchingPattern
import com.algolia.instantsearch.relateditems.connectRelatedHitsView
import com.algolia.instantsearch.searcher.hits.HitsSearcher
-import com.algolia.instantsearch.examples.showcase.view.*
-import com.algolia.instantsearch.examples.databinding.ShowcaseRelateditemsBinding
-import com.algolia.instantsearch.examples.showcase.view.list.product.Product
-import com.algolia.instantsearch.examples.showcase.view.list.product.ProductAdapter
import com.algolia.search.helper.deserialize
import com.algolia.search.model.Attribute
@@ -43,7 +47,11 @@ class RelatedItemsShowcase : AppCompatActivity() {
MatchingPattern(Attribute("categories"), 2, Product::categories)
)
hitsAdapter.callback = { product ->
- connection += relatedItemsSearcher.connectRelatedHitsView(relatedItemsAdapter, product, matchingPatterns) { response ->
+ connection += relatedItemsSearcher.connectRelatedHitsView(
+ relatedItemsAdapter,
+ product,
+ matchingPatterns
+ ) { response ->
response.hits.deserialize(Product.serializer())
}
relatedItemsSearcher.searchAsync()
diff --git a/examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/view/search/SearchAsYouTypeShowcase.kt b/examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/view/search/SearchAsYouTypeShowcase.kt
index 20a2ed1c6..f6e81fd06 100644
--- a/examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/view/search/SearchAsYouTypeShowcase.kt
+++ b/examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/view/search/SearchAsYouTypeShowcase.kt
@@ -13,7 +13,7 @@ import com.algolia.instantsearch.searcher.hits.HitsSearcher
import com.algolia.instantsearch.examples.showcase.view.*
import com.algolia.instantsearch.examples.databinding.IncludeSearchBinding
import com.algolia.instantsearch.examples.databinding.ShowcaseSearchBinding
-import com.algolia.instantsearch.examples.showcase.view.list.movie.Movie
+import com.algolia.instantsearch.examples.showcase.shared.model.Movie
import com.algolia.instantsearch.examples.showcase.view.list.movie.MovieAdapter
import com.algolia.search.helper.deserialize
diff --git a/examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/view/search/SearchAutoCompleteTextView.kt b/examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/view/search/SearchAutoCompleteTextView.kt
index 2b12cfbd8..add3e4246 100644
--- a/examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/view/search/SearchAutoCompleteTextView.kt
+++ b/examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/view/search/SearchAutoCompleteTextView.kt
@@ -16,7 +16,7 @@ import com.algolia.instantsearch.searcher.hits.HitsSearcher
import com.algolia.instantsearch.examples.showcase.view.client
import com.algolia.instantsearch.examples.showcase.view.configureSearcher
import com.algolia.instantsearch.examples.databinding.ShowcaseSearchAutocompleteBinding
-import com.algolia.instantsearch.examples.showcase.view.list.movie.Movie
+import com.algolia.instantsearch.examples.showcase.shared.model.Movie
import com.algolia.instantsearch.examples.showcase.view.stubIndexName
import com.algolia.search.helper.deserialize
diff --git a/examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/view/search/SearchOnSubmitShowcase.kt b/examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/view/search/SearchOnSubmitShowcase.kt
index 82e8a8212..84a02aeca 100644
--- a/examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/view/search/SearchOnSubmitShowcase.kt
+++ b/examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/view/search/SearchOnSubmitShowcase.kt
@@ -13,7 +13,7 @@ import com.algolia.instantsearch.searcher.hits.HitsSearcher
import com.algolia.instantsearch.examples.showcase.view.*
import com.algolia.instantsearch.examples.databinding.IncludeSearchBinding
import com.algolia.instantsearch.examples.databinding.ShowcaseSearchBinding
-import com.algolia.instantsearch.examples.showcase.view.list.movie.Movie
+import com.algolia.instantsearch.examples.showcase.shared.model.Movie
import com.algolia.instantsearch.examples.showcase.view.list.movie.MovieAdapter
import com.algolia.search.helper.deserialize
diff --git a/examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/view/sortby/SortByShowcase.kt b/examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/view/sortby/SortByShowcase.kt
index aa2d72b4a..0b60d1082 100644
--- a/examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/view/sortby/SortByShowcase.kt
+++ b/examples/src/main/kotlin/com/algolia/instantsearch/examples/showcase/view/sortby/SortByShowcase.kt
@@ -14,7 +14,7 @@ import com.algolia.instantsearch.examples.showcase.view.client
import com.algolia.instantsearch.examples.showcase.view.configureRecyclerView
import com.algolia.instantsearch.examples.showcase.view.configureToolbar
import com.algolia.instantsearch.examples.databinding.ShowcaseSortByBinding
-import com.algolia.instantsearch.examples.showcase.view.list.movie.Movie
+import com.algolia.instantsearch.examples.showcase.shared.model.Movie
import com.algolia.instantsearch.examples.showcase.view.list.movie.MovieAdapter
import com.algolia.search.helper.deserialize
import com.algolia.search.model.IndexName
diff --git a/gradle.properties b/gradle.properties
index 049f65f4e..5a9de87a1 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -4,6 +4,7 @@ kotlin.mpp.enableGranularSourceSetsMetadata=true
kotlin.native.enableDependencyPropagation=false
android.useAndroidX=true
android.disableAutomaticComponentCreation=true
+android.enableR8.fullMode=true
# Lib
GROUP=com.algolia
diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml
index 90ae50297..931d6638a 100644
--- a/gradle/libs.versions.toml
+++ b/gradle/libs.versions.toml
@@ -54,6 +54,10 @@ logback-classic = { group = "ch.qos.logback", name = "logback-classic", version
[plugins]
kotlin-multiplaform = { id = "org.jetbrains.kotlin.multiplatform", version.ref = "kotlin" }
kotlinx-serialization = { id = "org.jetbrains.kotlin.plugin.serialization", version.ref = "kotlin" }
-android = { id = "com.android.library", version = "7.1.2" }
+android-library = { id = "com.android.library", version = "7.1.2" }
+android-application = { id = "com.android.library", version = "7.1.2" }
maven-publish = { id = "com.vanniktech.maven.publish", version = "0.18.0" }
spotless = { id = "com.diffplug.gradle.spotless", version = "6.4.1" }
+google-services = { id = "com.google.gms.google-services", version = "4.3.10"}
+firebase-crashlytics = { id = "com.google.firebase.crashlytics", version = "2.8.1"}
+firebase-perf = { id = "com.google.firebase.firebase-perf", version = "1.4.1"}