diff options
author | Allan Wang <me@allanwang.ca> | 2019-09-15 01:43:43 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-09-15 01:43:43 -0700 |
commit | bfba246d84aa6a22bc02837f9fcbd97780867d10 (patch) | |
tree | a4340255cb7bf74d0f56cc00d097ab06748faded | |
parent | b936230b609071cda99fb81436c29c45d916494a (diff) | |
parent | eafb4881cc6c33d7ae94b1f1e1b5b34fb18ebd03 (diff) | |
download | kau-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.kt | 20 | ||||
-rw-r--r-- | build.gradle | 1 | ||||
-rw-r--r-- | buildSrc/src/main/kotlin/kau/Versions.kt | 14 | ||||
-rw-r--r-- | core-ui/src/main/res-public/values/public.xml | 6 | ||||
-rw-r--r-- | core/src/main/res-public/values/public.xml | 34 | ||||
-rw-r--r-- | fastadapter-databinding/.gitignore | 1 | ||||
-rw-r--r-- | fastadapter-databinding/build.gradle | 21 | ||||
-rw-r--r-- | fastadapter-databinding/consumer-rules.pro | 0 | ||||
-rw-r--r-- | fastadapter-databinding/proguard-rules.pro | 21 | ||||
-rw-r--r-- | fastadapter-databinding/src/main/AndroidManifest.xml | 1 | ||||
-rw-r--r-- | fastadapter-databinding/src/main/kotlin/ca/allanwang/fastadapter/databinding/BindingItem.kt | 123 | ||||
-rw-r--r-- | fastadapter/build.gradle | 1 | ||||
-rw-r--r-- | fastadapter/src/main/kotlin/ca/allanwang/kau/adapters/SingleFastAdapter.kt | 57 | ||||
-rw-r--r-- | gradle/wrapper/gradle-wrapper.properties | 2 | ||||
-rw-r--r-- | kpref-activity/build.gradle | 2 | ||||
-rw-r--r-- | sample/src/main/res/xml/kau_changelog.xml | 4 | ||||
-rw-r--r-- | settings.gradle | 1 |
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', |