aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAllan Wang <me@allanwang.ca>2019-09-15 01:43:43 -0700
committerGitHub <noreply@github.com>2019-09-15 01:43:43 -0700
commitbfba246d84aa6a22bc02837f9fcbd97780867d10 (patch)
treea4340255cb7bf74d0f56cc00d097ab06748faded
parentb936230b609071cda99fb81436c29c45d916494a (diff)
parenteafb4881cc6c33d7ae94b1f1e1b5b34fb18ebd03 (diff)
downloadkau-bfba246d84aa6a22bc02837f9fcbd97780867d10.tar.gz
kau-bfba246d84aa6a22bc02837f9fcbd97780867d10.tar.bz2
kau-bfba246d84aa6a22bc02837f9fcbd97780867d10.zip
Merge pull request #228 from AllanWang/databinding
FastAdapter Databinding
-rw-r--r--about/src/main/kotlin/ca/allanwang/kau/about/AboutActivityBase.kt20
-rw-r--r--build.gradle1
-rw-r--r--buildSrc/src/main/kotlin/kau/Versions.kt14
-rw-r--r--core-ui/src/main/res-public/values/public.xml6
-rw-r--r--core/src/main/res-public/values/public.xml34
-rw-r--r--fastadapter-databinding/.gitignore1
-rw-r--r--fastadapter-databinding/build.gradle21
-rw-r--r--fastadapter-databinding/consumer-rules.pro0
-rw-r--r--fastadapter-databinding/proguard-rules.pro21
-rw-r--r--fastadapter-databinding/src/main/AndroidManifest.xml1
-rw-r--r--fastadapter-databinding/src/main/kotlin/ca/allanwang/fastadapter/databinding/BindingItem.kt123
-rw-r--r--fastadapter/build.gradle1
-rw-r--r--fastadapter/src/main/kotlin/ca/allanwang/kau/adapters/SingleFastAdapter.kt57
-rw-r--r--gradle/wrapper/gradle-wrapper.properties2
-rw-r--r--kpref-activity/build.gradle2
-rw-r--r--sample/src/main/res/xml/kau_changelog.xml4
-rw-r--r--settings.gradle1
17 files changed, 273 insertions, 36 deletions
diff --git a/about/src/main/kotlin/ca/allanwang/kau/about/AboutActivityBase.kt b/about/src/main/kotlin/ca/allanwang/kau/about/AboutActivityBase.kt
index f02d073..7ba7811 100644
--- a/about/src/main/kotlin/ca/allanwang/kau/about/AboutActivityBase.kt
+++ b/about/src/main/kotlin/ca/allanwang/kau/about/AboutActivityBase.kt
@@ -47,7 +47,10 @@ import kotlinx.android.synthetic.main.kau_activity_about.*
* Note that for the auto detection to work, the R fields must be excluded from Proguard
* Manual lib listings and other extra modifications can be done so by overriding the open functions
*/
-abstract class AboutActivityBase(val rClass: Class<*>?, private val configBuilder: Configs.() -> Unit = {}) :
+abstract class AboutActivityBase(
+ val rClass: Class<*>?,
+ private val configBuilder: Configs.() -> Unit = {}
+) :
KauBaseActivity(), ViewPager.OnPageChangeListener {
val currentPage: Int
@@ -90,7 +93,8 @@ abstract class AboutActivityBase(val rClass: Class<*>?, private val configBuilde
addOnPageChangeListener(this@AboutActivityBase)
}
about_indicator.setViewPager(about_pager)
- about_draggable_frame.addListener(object : ElasticDragDismissFrameLayout.SystemChromeFader(this) {
+ about_draggable_frame.addListener(object :
+ ElasticDragDismissFrameLayout.SystemChromeFader(this) {
override fun onDragDismissed() {
window.returnTransition = TransitionInflater.from(this@AboutActivityBase)
.inflateTransition(if (about_draggable_frame.translationY > 0) R.transition.kau_exit_slide_bottom else R.transition.kau_exit_slide_top)
@@ -142,7 +146,14 @@ abstract class AboutActivityBase(val rClass: Class<*>?, private val configBuilde
* This is fetched asynchronously and you may override it to customize the list
*/
open fun getLibraries(libs: Libs): List<Library> =
- libs.prepareLibraries(this, null, null, true, true, true)!!
+ libs.prepareLibraries(
+ this,
+ null,
+ null,
+ true,
+ true,
+ true
+ )
/*
* -------------------------------------------------------------------
@@ -182,7 +193,8 @@ abstract class AboutActivityBase(val rClass: Class<*>?, private val configBuilde
override fun onPageScrollStateChanged(state: Int) = Unit
- override fun onPageScrolled(position: Int, positionOffset: Float, positionOffsetPixels: Int) = Unit
+ override fun onPageScrolled(position: Int, positionOffset: Float, positionOffsetPixels: Int) =
+ Unit
override fun onPageSelected(position: Int) {
if (pageStatus[position] == 0) pageStatus[position] = 1 // mark as seen if previously null
diff --git a/build.gradle b/build.gradle
index bc5fadf..cf8998f 100644
--- a/build.gradle
+++ b/build.gradle
@@ -2,6 +2,7 @@ import kau.ChangelogGenerator
import kau.Plugins
buildscript {
+
repositories {
google()
jcenter()
diff --git a/buildSrc/src/main/kotlin/kau/Versions.kt b/buildSrc/src/main/kotlin/kau/Versions.kt
index a646292..3c54625 100644
--- a/buildSrc/src/main/kotlin/kau/Versions.kt
+++ b/buildSrc/src/main/kotlin/kau/Versions.kt
@@ -15,7 +15,7 @@ object Versions {
const val googleMaterial = "1.0.0"
// https://mvnrepository.com/artifact/androidx.recyclerview/recyclerview
- const val recyclerView = "1.1.0-beta02"
+ const val recyclerView = "1.1.0-beta04"
// https://mvnrepository.com/artifact/androidx.cardview/cardview
const val cardView = "1.0.0"
@@ -24,7 +24,7 @@ object Versions {
const val constraintLayout = "2.0.0-beta2"
// https://kotlinlang.org/docs/reference/using-gradle.html
- const val kotlin = "1.3.41"
+ const val kotlin = "1.3.50"
// https://github.com/Kotlin/kotlinx.coroutines/releases
const val coroutines = "1.3.1"
@@ -42,13 +42,13 @@ object Versions {
const val glide = "4.9.0"
// https://github.com/mikepenz/Android-Iconics#1-provide-the-gradle-dependency
- const val iconics = "4.0.1-b01"
+ const val iconics = "4.0.1-b02"
const val iconicsGoogle = "3.0.1.4"
const val iconicsMaterial = "2.2.0.6"
const val iconicsCommunity = "3.5.95.1"
// https://github.com/afollestad/material-dialogs/releases
- const val materialDialog = "3.1.0"
+ const val materialDialog = "3.1.1"
// https://mvnrepository.com/artifact/androidx.test.espresso/espresso-core?repo=google
const val espresso = "3.1.1"
@@ -62,10 +62,10 @@ object Versions {
const val testRules = "1.1.1"
// https://github.com/diffplug/spotless/blob/master/plugin-gradle/CHANGES.md
- const val spotless = "3.24.1"
+ const val spotless = "3.24.2"
// https://github.com/bugsnag/bugsnag-android/releases
- const val bugsnag = "4.18.0"
+ const val bugsnag = "4.19.1"
// https://github.com/bugsnag/bugsnag-android-gradle-plugin/releases
const val bugsnagPlugin="4.5.2"
@@ -75,7 +75,7 @@ object Versions {
// https://github.com/dcendents/android-maven-gradle-plugin/releases
const val mavenPlugin = "2.1"
// https://github.com/Triple-T/gradle-play-publisher/releases
- const val playPublishPlugin = "2.2.1"
+ const val playPublishPlugin = "2.4.1"
// https://github.com/KeepSafe/dexcount-gradle-plugin/releases
const val dexCountPlugin = "0.8.6"
diff --git a/core-ui/src/main/res-public/values/public.xml b/core-ui/src/main/res-public/values/public.xml
index f62ed25..c8c2e56 100644
--- a/core-ui/src/main/res-public/values/public.xml
+++ b/core-ui/src/main/res-public/values/public.xml
@@ -1,10 +1,10 @@
<resources xmlns:tools='http://schemas.android.com/tools' tools:ignore='ResourceName'>
<!-- AUTO-GENERATED FILE. DO NOT MODIFY. public.xml is generated by the generatepublicxml gradle task -->
+ <public name='kau_recycler_detached_background' type='layout' />
+ <public name='kau_elastic_recycler_activity' type='layout' />
+ <public name='kau_recycler_textslider' type='layout' />
<public name='Kau.Translucent' type='style' />
<public name='Kau.Translucent.NoAnimation' type='style' />
<public name='Kau.Translucent.SlideBottom' type='style' />
<public name='Kau.Translucent.SlideTop' type='style' />
- <public name='kau_recycler_detached_background' type='layout' />
- <public name='kau_elastic_recycler_activity' type='layout' />
- <public name='kau_recycler_textslider' type='layout' />
</resources> \ No newline at end of file
diff --git a/core/src/main/res-public/values/public.xml b/core/src/main/res-public/values/public.xml
index 443f32e..211c539 100644
--- a/core/src/main/res-public/values/public.xml
+++ b/core/src/main/res-public/values/public.xml
@@ -1,25 +1,20 @@
<resources xmlns:tools='http://schemas.android.com/tools' tools:ignore='ResourceName'>
<!-- AUTO-GENERATED FILE. DO NOT MODIFY. public.xml is generated by the generatepublicxml gradle task -->
+ <public name='kau_slide_in_top' type='anim' />
<public name='kau_slide_in_left' type='anim' />
- <public name='kau_slide_out_left' type='anim' />
+ <public name='kau_slide_out_right' type='anim' />
<public name='kau_slide_out_right_top' type='anim' />
+ <public name='kau_fade_in' type='anim' />
+ <public name='kau_slide_out_top' type='anim' />
+ <public name='kau_slide_out_bottom' type='anim' />
<public name='kau_fade_out' type='anim' />
+ <public name='kau_slide_out_left' type='anim' />
<public name='kau_slide_out_left_top' type='anim' />
- <public name='kau_fade_in' type='anim' />
<public name='kau_slide_in_bottom' type='anim' />
<public name='kau_slide_in_right' type='anim' />
- <public name='kau_slide_in_top' type='anim' />
- <public name='kau_slide_out_top' type='anim' />
- <public name='kau_slide_out_bottom' type='anim' />
- <public name='kau_slide_out_right' type='anim' />
- <public name='kau_enter_slide_right' type='transition' />
- <public name='kau_exit_slide_right' type='transition' />
- <public name='kau_exit_slide_top' type='transition' />
- <public name='kau_enter_slide_bottom' type='transition' />
- <public name='kau_enter_slide_left' type='transition' />
- <public name='kau_exit_slide_left' type='transition' />
- <public name='kau_enter_slide_top' type='transition' />
- <public name='kau_exit_slide_bottom' type='transition' />
+ <public name='kau_transparent' type='drawable' />
+ <public name='kau_selectable_white' type='drawable' />
+ <public name='kau_shadow_overlay' type='color' />
<public name='kau_activity_horizontal_margin' type='dimen' />
<public name='kau_activity_vertical_margin' type='dimen' />
<public name='kau_dialog_margin' type='dimen' />
@@ -105,7 +100,6 @@
<public name='kau_bullet_point' type='string' />
<public name='Kau' type='style' />
<public name='Kau.Translucent' type='style' />
- <public name='kau_shadow_overlay' type='color' />
<public name='KauFadeIn' type='style' />
<public name='KauFadeInFadeOut' type='style' />
<public name='KauSlideInRight' type='style' />
@@ -113,6 +107,12 @@
<public name='KauSlideInFadeOut' type='style' />
<public name='KauSlideInSlideOutRight' type='style' />
<public name='KauSlideInSlideOutBottom' type='style' />
- <public name='kau_transparent' type='drawable' />
- <public name='kau_selectable_white' type='drawable' />
+ <public name='kau_enter_slide_bottom' type='transition' />
+ <public name='kau_enter_slide_top' type='transition' />
+ <public name='kau_exit_slide_bottom' type='transition' />
+ <public name='kau_exit_slide_top' type='transition' />
+ <public name='kau_enter_slide_right' type='transition' />
+ <public name='kau_exit_slide_right' type='transition' />
+ <public name='kau_exit_slide_left' type='transition' />
+ <public name='kau_enter_slide_left' type='transition' />
</resources> \ No newline at end of file
diff --git a/fastadapter-databinding/.gitignore b/fastadapter-databinding/.gitignore
new file mode 100644
index 0000000..796b96d
--- /dev/null
+++ b/fastadapter-databinding/.gitignore
@@ -0,0 +1 @@
+/build
diff --git a/fastadapter-databinding/build.gradle b/fastadapter-databinding/build.gradle
new file mode 100644
index 0000000..aefb22e
--- /dev/null
+++ b/fastadapter-databinding/build.gradle
@@ -0,0 +1,21 @@
+import kau.Dependencies
+import kau.Versions
+
+ext.kauSubModuleMinSdk = Versions.coreMinSdk
+
+apply from: '../android-lib.gradle'
+
+android {
+ dataBinding {
+ enabled = true
+ }
+}
+
+dependencies {
+ implementation project(':core')
+
+ api Dependencies.fastAdapter
+ api Dependencies.fastAdapter("utils")
+}
+
+apply from: '../artifacts.gradle'
diff --git a/fastadapter-databinding/consumer-rules.pro b/fastadapter-databinding/consumer-rules.pro
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/fastadapter-databinding/consumer-rules.pro
diff --git a/fastadapter-databinding/proguard-rules.pro b/fastadapter-databinding/proguard-rules.pro
new file mode 100644
index 0000000..f1b4245
--- /dev/null
+++ b/fastadapter-databinding/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/fastadapter-databinding/src/main/AndroidManifest.xml b/fastadapter-databinding/src/main/AndroidManifest.xml
new file mode 100644
index 0000000..acd1012
--- /dev/null
+++ b/fastadapter-databinding/src/main/AndroidManifest.xml
@@ -0,0 +1 @@
+<manifest package="ca.allanwang.kau.fastadapter.databinding" />
diff --git a/fastadapter-databinding/src/main/kotlin/ca/allanwang/fastadapter/databinding/BindingItem.kt b/fastadapter-databinding/src/main/kotlin/ca/allanwang/fastadapter/databinding/BindingItem.kt
new file mode 100644
index 0000000..b2b0f26
--- /dev/null
+++ b/fastadapter-databinding/src/main/kotlin/ca/allanwang/fastadapter/databinding/BindingItem.kt
@@ -0,0 +1,123 @@
+/*
+ * Copyright 2019 Allan Wang
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package ca.allanwang.fastadapter.databinding
+
+import android.content.Context
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import androidx.databinding.DataBindingUtil
+import androidx.databinding.ViewDataBinding
+import androidx.recyclerview.widget.RecyclerView
+import ca.allanwang.kau.logging.KL
+import com.mikepenz.fastadapter.FastAdapter
+import com.mikepenz.fastadapter.GenericItem
+import com.mikepenz.fastadapter.items.AbstractItem
+import com.mikepenz.fastadapter.listeners.ClickEventHook
+
+interface VhModel {
+ fun vh(): GenericItem
+}
+
+abstract class BindingItem<Binding : ViewDataBinding>(open val data: Any?) :
+ AbstractItem<BindingItem.ViewHolder>(),
+ BindingLayout<Binding> {
+
+ override val type: Int
+ get() = layoutRes
+
+ override fun createView(ctx: Context, parent: ViewGroup?): View {
+ val binding: ViewDataBinding = DataBindingUtil.inflate(
+ LayoutInflater.from(ctx),
+ layoutRes, parent,
+ false
+ )
+ return binding.root
+ }
+
+ fun getBinding(holder: ViewHolder): Binding? =
+ DataBindingUtil.getBinding<Binding>(holder.itemView)
+
+ final override fun bindView(holder: ViewHolder, payloads: MutableList<Any>) {
+ super.bindView(holder, payloads)
+ val binding = getBinding(holder) ?: return
+ binding.bindView(holder, payloads)
+ binding.executePendingBindings()
+ }
+
+ abstract fun Binding.bindView(holder: ViewHolder, payloads: MutableList<Any>)
+
+ final override fun unbindView(holder: ViewHolder) {
+ super.unbindView(holder)
+ val binding = DataBindingUtil.getBinding<Binding>(holder.itemView) ?: return
+ binding.unbindView(holder)
+ binding.unbind()
+ }
+
+ open fun Binding.unbindView(holder: ViewHolder) {}
+
+ final override fun getViewHolder(v: View): ViewHolder = ViewHolder(v, layoutRes)
+
+ override fun failedToRecycle(holder: ViewHolder): Boolean {
+ KL.e { "Failed to recycle" }
+ return super.failedToRecycle(holder)
+ }
+
+ override fun equals(other: Any?): Boolean {
+ if (this === other) return true
+ if (other !is BindingItem<*>) return false
+ return identifier == other.identifier && data == other.data
+ }
+
+ override fun hashCode(): Int = data.hashCode()
+
+ class ViewHolder(itemView: View, internal val layoutRes: Int) :
+ RecyclerView.ViewHolder(itemView)
+}
+
+interface BindingLayout<Binding : ViewDataBinding> {
+ val layoutRes: Int
+}
+
+abstract class BindingClickEventHook<Binding : ViewDataBinding, Item : BindingItem<Binding>>(val identifier: BindingLayout<Binding>) :
+ ClickEventHook<Item>() {
+
+ private fun RecyclerView.ViewHolder.binding(): Binding? {
+ val holder = this as? BindingItem.ViewHolder ?: return null
+ if (holder.layoutRes != identifier.layoutRes) {
+ return null
+ }
+ return DataBindingUtil.getBinding(itemView)
+ }
+
+ final override fun onBind(viewHolder: RecyclerView.ViewHolder): View? =
+ viewHolder.binding()?.onBind(viewHolder) ?: super.onBind(viewHolder)
+
+ open fun Binding.onBind(viewHolder: RecyclerView.ViewHolder): View? = super.onBind(viewHolder)
+
+ final override fun onBindMany(viewHolder: RecyclerView.ViewHolder): List<View>? =
+ viewHolder.binding()?.onBindMany(viewHolder) ?: super.onBindMany(viewHolder)
+
+ open fun Binding.onBindMany(viewHolder: RecyclerView.ViewHolder): List<View>? =
+ super.onBindMany(viewHolder)
+
+ final override fun onClick(v: View, position: Int, fastAdapter: FastAdapter<Item>, item: Item) {
+ val binding: Binding = DataBindingUtil.findBinding(v) ?: return
+ binding.onClick(v, position, fastAdapter, item)
+ }
+
+ abstract fun Binding.onClick(v: View, position: Int, fastAdapter: FastAdapter<Item>, item: Item)
+}
diff --git a/fastadapter/build.gradle b/fastadapter/build.gradle
index ff58fe8..8abe566 100644
--- a/fastadapter/build.gradle
+++ b/fastadapter/build.gradle
@@ -11,6 +11,7 @@ dependencies {
api Dependencies.fastAdapter
api Dependencies.fastAdapter("utils")
+ implementation Dependencies.fastAdapter("diff")
}
apply from: '../artifacts.gradle'
diff --git a/fastadapter/src/main/kotlin/ca/allanwang/kau/adapters/SingleFastAdapter.kt b/fastadapter/src/main/kotlin/ca/allanwang/kau/adapters/SingleFastAdapter.kt
new file mode 100644
index 0000000..e183bde
--- /dev/null
+++ b/fastadapter/src/main/kotlin/ca/allanwang/kau/adapters/SingleFastAdapter.kt
@@ -0,0 +1,57 @@
+/*
+ * Copyright 2019 Allan Wang
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package ca.allanwang.kau.adapters
+
+import com.mikepenz.fastadapter.FastAdapter
+import com.mikepenz.fastadapter.GenericItem
+import com.mikepenz.fastadapter.IAdapter
+import com.mikepenz.fastadapter.IItemAdapter
+import com.mikepenz.fastadapter.adapters.ItemAdapter
+import com.mikepenz.fastadapter.diff.FastAdapterDiffUtil
+
+/**
+ * Fast adapter with prewrapped item adapter
+ */
+class SingleFastAdapter private constructor(val adapter: ItemAdapter<GenericItem>) :
+ FastAdapter<GenericItem>(), IItemAdapter<GenericItem, GenericItem> by adapter {
+
+ constructor() : this(ItemAdapter())
+
+ var lastClearTime: Long = -1
+
+ init {
+ super.addAdapter(0, adapter)
+ }
+
+ override fun clear(): SingleFastAdapter {
+ if (itemCount != 0) {
+ adapter.clear()
+ lastClearTime = System.currentTimeMillis()
+ }
+ return this
+ }
+
+ override fun <A : IAdapter<GenericItem>> addAdapter(
+ index: Int,
+ adapter: A
+ ): FastAdapter<GenericItem> {
+ throw IllegalStateException("SingleFastAdapter only allows one adapter.")
+ }
+
+ fun setWithDiff(items: List<GenericItem>, detectMoves: Boolean = true) {
+ FastAdapterDiffUtil.set(adapter, items, detectMoves)
+ }
+}
diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
index f1f2eac..ce43d4f 100644
--- a/gradle/wrapper/gradle-wrapper.properties
+++ b/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.4.1-all.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.1-all.zip
diff --git a/kpref-activity/build.gradle b/kpref-activity/build.gradle
index 5cce460..7df08d3 100644
--- a/kpref-activity/build.gradle
+++ b/kpref-activity/build.gradle
@@ -1,3 +1,5 @@
+import kau.Dependencies
+
ext.kauSubModuleMinSdk = kau.Versions.coreMinSdk
ext.kauSubModuleResourcePrefix = "kau_pref_"
diff --git a/sample/src/main/res/xml/kau_changelog.xml b/sample/src/main/res/xml/kau_changelog.xml
index de73b41..5fee3cb 100644
--- a/sample/src/main/res/xml/kau_changelog.xml
+++ b/sample/src/main/res/xml/kau_changelog.xml
@@ -9,14 +9,12 @@
<version title="v5.2.0" />
<item text=":fastadapter: Migrate fastadapter to v4.x.x" />
<item text="" />
- <item text="" />
<version title="v5.1.0" />
<item text=":adapter: Moved fastadapter elements to new module, :fastadapter:. To migrate, simply rename the dependency. If you don't use fast adapter, no changes are necessary" />
<item text=":adapter: Make NoAnimatorChange an object; previously a class" />
<item text=":core: KPref now supports in memory only variants for testing; pass KPrefBuilderInMemory to KPref constructor" />
<item text=":core: KPref initializer takes in SharedPreferences so user can configure it" />
- <item text="" />
<version title="v5.0.0" />
<item text="Update Android SDK to 29 and Kotlin to 1.3.31" />
@@ -26,13 +24,11 @@
<item text=":core: Remove cursor tinting in EditText as it used reflection" />
<item text=":colorpicker: Strip down to just the interface; unless you require the accent palette, it may be fine to just use MD's color extension" />
<item text=":gradle-plugin: Convert to kotlin, rework dependencies, and remove extension hooks" />
- <item text="" />
<version title="v4.1.0" />
<item text=":core: Deprecate NetworkUtils, as the underlying functions are deprecated" />
<item text=":core: Permission manager no longer synchronized, as all actions should occur in the main thread" />
<item text=":kpref-activity: Getter and setter now have action context, with the option to reload self" />
- <item text="" />
<version title="v4.0.0" />
<item text="Update translations" />
diff --git a/settings.gradle b/settings.gradle
index 42d498e..0ec0606 100644
--- a/settings.gradle
+++ b/settings.gradle
@@ -4,6 +4,7 @@ include ':core',
':about',
':adapter',
':fastadapter',
+ ':fastadapter-databinding',
':colorpicker',
':mediapicker',
':kpref-activity',